https://ringuettemontreal.com/bundle/js/public-v2/app?v=pYFtw_tro0zJf92JL8s31iUtEbKUeqa-x8uMFNbVYM81
1/* Minification failed. Returning unminified contents. 2(32826,13-23): run-time error JS1292: Strict-mode does not allow duplicate property names: transclude 3(11929,111-116): run-time error JS1292: Strict-mode does not allow duplicate property names: label 4 */ 5(function () { 6 'use strict'; 7 8 angular.module('kreezee-sports', [ 9 'app.core', 10 11 'app.directives', 12 13 'app.filters', 14 15 'app.layout', 16 17 'app.services' 18 ]); 19 20})(); ; 21(function () { 22 'use strict'; 23 24 angular 25 .module('kreezee-sports') 26 .config(configuration); 27 28 configuration.$inject = ['$translateProvider', '$httpProvider', '$localStorageProvider', '$locationProvider']; 29 30 function configuration($translateProvider, $httpProvider, $localStorageProvider, $locationProvider) { 31 window.bugsnag = { notify: function (e) { console.error(e) } } 32 //bugsnag({ 33 // apiKey: '59a5dd569be2225eea13d77e96cd4780', 34 // releaseStage: __environment__ 35 // }); 36 // Follow up on task 7069 && 7096 the bugsnag library seems to be removed when we use adblockers. 37 // When using an adblocker, bugsnag => undefined. 38 39 var defaultLanguage = _.find(website.languages, function (lang) { 40 return lang.isDefault; 41 }); 42 43 const wantedLanguage = _.find(website.languages, function (lang) { 44 return lang.culture === language; 45 }); 46 47 $httpProvider.interceptors.push(['$q', function ($q) { 48 return { 49 'request': function (request) { 50 if (request.url.substr(-5) == '.html' || request.url.substr(-5) == '.json') { 51 request.params = { 52 v: __version__ 53 } 54 } 55 return $q.resolve(request); 56 } 57 } 58 }]); 59 60 61 //if has lang= in url and language is supported 62 if (window.location.href.includes('lang=') && wantedLanguage) { 63 $localStorageProvider.set('currentLanguage', wantedLanguage); //set language 64 //else if has not a culture in local storage or the culture in local storage is not supported 65 } else if (!$localStorageProvider.get('currentLanguage') || !_.find(website.languages, function (lang) { 66 return lang.culture === $localStorageProvider.get('currentLanguage').culture; 67 })) { 68 $localStorageProvider.set('currentLanguage', defaultLanguage);//set default language 69 } 70 71 $translateProvider
72 .useLoader('$translatePartialLoader', { 73 urlTemplate: __environment__ !== 'local' 74 ? `public/v2/{part}/i18n/{lang}.json?v=${__version__}` 75 : 'public/v2/{part}/i18n/{lang}.json' 76 }) 77 .useSanitizeValueStrategy('escape') 78 .preferredLanguage($localStorageProvider.get('currentLanguage').culture); 79 80 $locationProvider.html5Mode({ 81 enabled: true, 82 rewriteLinks: false 83 }); 84 85 String.prototype.replaceAll = function (search, replacement) { 86 var target = this; 87 return target.replace(new RegExp(search, 'g'), replacement); 88 } 89 } 90 91 angular.isUndefinedOrNull = function (value) { 92 return angular.isUndefined(value) || value === null 93 } 94 95 angular.isJson = function (value) { 96 try { 97 angular.fromJson(value.replace(/\'/g, '"')); 98 } catch (exception) { 99 return false; 100 } 101 return true; 102 } 103 104 angular.parseQueryString = function (queryString) { 105 var query = {}; 106 var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&'); 107 for (var i = 0; i < pairs.length; i++) { 108 var pair = pairs[i].split('='); 109 query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || ''); 110 } 111 return query; 112 } 113 114 angular.xml2json = function (xml, tab) { 115 var X = { 116 toObj: function (xml) { 117 var o = {}; 118 if (xml.nodeType == 1) { // element node .. 119 if (xml.attributes.length) // element with attributes .. 120 for (var i = 0; i < xml.attributes.length; i++) 121 o['@' + xml.attributes[i].nodeName] = (xml.attributes[i].nodeValue || '').toString(); 122 if (xml.firstChild) { // element has child nodes .. 123 var textChild = 0, cdataChild = 0, hasElementChild = false; 124 for (var n = xml.firstChild; n; n = n.nextSibling) { 125 if (n.nodeType == 1) hasElementChild = true; 126 else if (n.nodeType == 3 && n.nodeValue.match(/[^ \f\n\r\t\v]/)) textChild++; // non-whitespace text 127 else if (n.nodeType == 4) cdataChild++; // cdata section node 128 } 129 if (hasElementChild) { 130 if (textChild < 2 && cdataChild < 2) { // structured element with evtl. a single text or/and cdata node .. 131 X.removeWhite(xml); 132 for (var n = xml.firstChild; n; n = n.nextSibling) { 133 if (n.nodeType == 3) // text node 134 o['#text'] = X.escape(n.nodeValue); 135 else if (n.nodeType == 4) // cdata node 136 o['#cdata'] = X.escape(n.nodeValue); 137 else if (o[n.nodeName]) { // multiple occurence of element .. 138 if (o[n.nodeName] instanceof Array) 139 o[n.nodeName][o[n.nodeName].length] = X.toObj(n); 140 else 141 o[n.nodeName] = [o[n.nodeName], X.toObj(n)]; 142 } 143 else // first occurence of element.. 144 o[n.nodeName] = X.toObj(n); 145 } 146 } 147 else { // mixed content 148 if (!xml.attributes.length) 149 o = X.escape(X.innerXml(xml)); 150 else 151 o['#text'] = X.escape(X.innerXml(xml)); 152 } 153 } 154 else if (textChild) { // pure text 155 if (!xml.attributes.length) 156 o = X.escape(X.innerXml(xml)); 157 else 158 o['#text'] = X.escape(X.innerXml(xml)); 159 } 160 else if (cdataChild) { // cdata 161 if (cdataChild > 1) 162 o = X.escape(X.innerXml(xml)); 163 else 164 for (var n = xml.firstChild; n; n = n.nextSibling) 165 o['#cdata'] = X.escape(n.nodeValue); 166 } 167 } 168 if (!xml.attributes.length && !xml.firstChild) o = null; 169 } 170 else if (xml.nodeType == 9) { // document.node 171 o = X.toObj(xml.documentElement); 172 } 173 else 174 alert('unhandled node type: ' + xml.nodeType); 175 return o; 176 }, 177 toJson: function (o, name, ind) {
178 var json = name ? ('\'' + name + '\'') : ''; 179 if (o instanceof Array) { 180 for (var i = 0, n = o.length; i < n; i++) 181 o[i] = X.toJson(o[i], '', ind + '\t'); 182 json += (name ? ':[' : '[') + (o.length > 1 ? ('\n' + ind + '\t' + o.join(',\n' + ind + '\t') + '\n' + ind) : o.join('')) + ']'; 183 } 184 else if (o == null) 185 json += (name && ':') + 'null'; 186 else if (typeof (o) == 'object') { 187 var arr = []; 188 for (var m in o) 189 arr[arr.length] = X.toJson(o[m], m, ind + '\t'); 190 json += (name ? ':{' : '{') + (arr.length > 1 ? ('\n' + ind + '\t' + arr.join(',\n' + ind + '\t') + '\n' + ind) : arr.join('')) + '}'; 191 } 192 else if (typeof (o) == 'string') 193 json += (name && ':') + '\'' + o.toString() + '\''; 194 else 195 json += (name && ':') + o.toString(); 196 return json; 197 }, 198 innerXml: function (node) { 199 var s = '' 200 if ('innerHTML' in node) 201 s = node.innerHTML; 202 else { 203 var asXml = function (n) { 204 var s = ''; 205 if (n.nodeType == 1) { 206 s += '<' + n.nodeName; 207 for (var i = 0; i < n.attributes.length; i++) 208 s += ' ' + n.attributes[i].nodeName + '=\'' + (n.attributes[i].nodeValue || '').toString() + '\''; 209 if (n.firstChild) { 210 s += '>'; 211 for (var c = n.firstChild; c; c = c.nextSibling) 212 s += asXml(c); 213 s += '</' + n.nodeName + '>'; 214 } 215 else 216 s += '/>'; 217 } 218 else if (n.nodeType == 3) 219 s += n.nodeValue; 220 else if (n.nodeType == 4) 221 s += '<![CDATA[' + n.nodeValue + ']]>'; 222 return s; 223 }; 224 for (var c = node.firstChild; c; c = c.nextSibling) 225 s += asXml(c); 226 } 227 return s; 228 }, 229 escape: function (txt) { 230 return txt.replace(/[\\]/g, '\\\\') 231 .replace(/[\"]/g, '\\"') 232 .replace(/[\n]/g, '\\n') 233 .replace(/[\r]/g, '\\r'); 234 }, 235 removeWhite: function (e) { 236 e.normalize(); 237 for (var n = e.firstChild; n;) { 238 if (n.nodeType == 3) { // text node 239 if (!n.nodeValue.match(/[^ \f\n\r\t\v]/)) { // pure whitespace text node 240 var nxt = n.nextSibling; 241 e.removeChild(n); 242 n = nxt; 243 } 244 else 245 n = n.nextSibling; 246 } 247 else if (n.nodeType == 1) { // element node 248 X.removeWhite(n); 249 n = n.nextSibling; 250 } 251 else // any other node 252 n = n.nextSibling; 253 } 254 return e; 255 } 256 }; 257 if (xml.nodeType == 9) // document node 258 xml = xml.documentElement; 259 var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, '\t'); 260 return '{\n' + tab + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, '')) + '\n}'; 261 } 262 263 // TODO move into app.run.js 264 angular 265 .module('kreezee-sports') 266 .run(run) 267 268 run.$inject = ['amMoment']; 269 270 function run(amMoment) { 271 amMoment.changeLocale('fr'); 272 } 273 274})();; 275(function () { 276 'use strict'; 277 278 angular 279 .module('app.core', [ 280 /* ngMessages */ 281 'ngMessages', 282 283 /* ngSanitize */ 284 'ngSanitize', 285 286 /* ngStorage */ 287 'ngStorage', 288 289 /* Angular Filter */ 290 'angular.filter', 291 292 /* Angular Moment */ 293 'angularMoment', 294 295 /* angular-translate */ 296 'pascalprecht.translate', 297 298 /* Angular Color Picker */ 299 'colorpicker', 300 301 /* angular-drag-and-drop-lists */ 302 'dndLists', 303 304 /* ngTweet */ 305 'ngtweet', 306 307 /* DateTimeInput */ 308 'ui.bootstrap.datetimepicker' 309 ]); 310})();; 311(function () { 312 'use strict'; 313 angular 314 .module('kreezee-sports') 315 .run(run); 316 run.$inject = ['$localStorage', '$sessionStorage', '$q', 'amMoment', 'ConfigurationService', 'SolutionService', 'SeasonService']; 317 function run($localStorage, $sessionStorage, $q, amMoment, configurationService, solutionService, seasonService) { 318 amMoment.changeLocale($localStorage.currentLanguage.culture.substring(0, 2)); 319 320 var config = $sessionStorage.configurations; 321
322 // Load environment configurations. 323 if (angular.isUndefinedOrNull($sessionStorage.configurations) 324 || angular.isUndefinedOrNull($sessionStorage.configurations.stripeApiKey) 325 || angular.isUndefinedOrNull($sessionStorage.configurations.servers)) { 326 config = configurationService.getConfiguration() 327 .then(function (response) { 328 $sessionStorage.configurations = response.data; 329 }) 330 .catch(function (error) { 331 bugsnag.notify(error); 332 }); 333 } 334 335 // TODO Check if it exist. 336 // Load solution information. 337 $q.when(config).then(function () { 338 solutionService.getSolutionById(__solutionId__) 339 .then(function (response) { 340 // TODO Store solution by id, add expiration timestamp. 341 $localStorage.solution = response.data; 342 seasonService.getSeasonParametersBySeasonId(__solutionId__, $localStorage.solution.defaultSeasonId) 343 .then(function (response) { 344 $localStorage.season = { 345 parameters: response.data // All season parameters. 346 }; 347 }) 348 .catch(function (error) { 349 bugsnag.notify(error); 350 }); 351 }) 352 .catch(function (error) { 353 bugsnag.notify(error); 354 }); 355 }); 356 357 // When modal hide: body should still have the class modal-open if there is another modal. 358 $(document).on('hidden.bs.modal', '.modal', function () { 359 if ($('.modal:visible').length > 0) { 360 $('body').addClass('modal-open'); 361 } 362 }); 363 364 $(document).on('show.bs.modal', '.modal', function () { 365 if (!$(this).hasClass('show')) { 366 var zIndex = 1040 + (10 * $('.modal:visible').length); 367 $(this).css('z-index', zIndex); 368 setTimeout(function () { 369 $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack'); 370 }, 0); 371 } 372 }) 373 } 374})();; 375"use strict";var colorPicker=angular.module("colorpicker",[]).factory("ColorHelper",function(){return{hsla2hsva:function(e){var t=Math.min(e.h,1),o=Math.min(e.s,1),r=Math.min(e.l,1),e=Math.min(e.a,1);return 0===r?{h:t,s:0,v:0,a:e}:{h:t,s:2*((t=r+o*(1-Math.abs(2*r-1))/2)-r)/t,v:t,a:e}},hsva2hsla:function(e){var t,o=e.h,r=e.s,a=e.v,e=e.a;return 0===a?{h:o,s:0,l:0,a:e}:0===r&&1===a?{h:o,s:1,l:1,a:e}:(t=a*(2-r)/2,{h:o,s:a*r/(1-Math.abs(2*t-1)),l:t,a:e})},rgbaToHsva:function(e){var t,o=Math.min(e.r,1),r=Math.min(e.g,1),a=Math.min(e.b,1),e=Math.min(e.a,1),n=Math.max(o,r,a),s=Math.min(o,r,a),i=n,l=n-s,c=0===n?0:l/n;if(n===s)t=0;else{switch(n){case o:t=(r-a)/l+(r<a?6:0);break;case r:t=(a-o)/l+2;break;case a:t=(o-r)/l+4}t/=6}return{h:t,s:c,v:i,a:e}},hsvaToRgba:function(e){var t,o,r,a=e.h,n=e.s,s=e.v,e=e.a,i=Math.floor(6*a),a=6*a-i,l=s*(1-n),c=s*(1-a*n),u=s*(1-(1-a)*n);switch(i%6){case 0:t=s,o=u,r=l;break;case 1:t=c,o=s,r=l;break;case 2:t=l,o=s,r=u;break;case 3:t=l,o=c,r=s;break;case 4:t=u,o=l,r=s;break;case 5:t=s,o=l,r=c}return{r:t,g:o,b:r,a:e}},stringToHsva:function(e){var t,o=[{re:/(rgb)a?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*%?,\s*(\d{1,3})\s*%?(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(e){return["rgb",parseInt(e[2]),parseInt(e[3]),parseInt(e[4]),isNaN(parseFloat(e[5]))?1:parseFloat(e[5])]}},{re:/(hsl)a?\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(e){return["hsl",parseInt(e[2]),parseInt(e[3]),parseInt(e[4]),isNaN(parseFloat(e[5]))?1:parseFloat(e[5])]}},{re:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,parse:function(e){return["hex",parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16),1]}},{re:/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,parse:function(e){return["hex",parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16),1]}}],r=(e=e.toLowerCase(),null);for(t in o)if(o.hasOwnProperty(t)){var a=o[t],n=a.re.exec(e),a=n&&a.parse(n);if(a)return r="hex"===a[0]||"rgb"===a[0]?this.rgbaToHsva({r:a[1]/255,g:a[2]/255,b:a[3]/255,a:a[4]}):this.hsla2hsva({h:a[1]/360,s:a[2]/100,l:a[3]/100,a:a[4]})}return r}}});colorPicker.directive("colorPicker",["$document","$compile","ColorHelper",function(g,v,f){return{restrict:"A",scope:{colorPickerModel:"=",colorPickerOutputFormat:"=",colorPickerOnChange:"="},controller:["$scope",function(a){function o(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:e.a}}a.show=!1,a.sAndLMax={},a.hueMax={},a.alphaMax={},a.type=0,a.hsva={h:.5,s:1,v:1,a:1},a.hueSlider={left:0},a.sAndLSlider={left:0,top:0},a.alphaSlider={left:0},a.rbgaSteps={r:1,g:1,b:1,a:.1},a.hslaSteps={h:1,s:1,l:1,a:.1},a.cancelButtonClass="",a.showCancelButton=!1,a.colorPickerPredefinedColors=[],a.extraLargeClass="","rgba"===a.colorPickerOutputFormat?a.type=1:"hsla"===a.colorPickerOutputFormat&&(a.type=2),a.setSaturation=function(e,t){var o=f.hsva2hsla(a.hsva);o.s=e/t,a.hsva=f.hsla2hsva(o)},a.setLightness=function(e,t){var o=f.hsva2hsla(a.hsva);o.l=e/t,a.hsva=f.hsla2hsva(o)},a.setHue=function(e,t){a.hsva.h=e/t},a.setAlpha=function(e,t){a.hsva.a=e/t},a.setR=function(e,t){var o=f.hsvaToRgba(a.hsva);o.r=e/t,a.hsva=f.rgbaToHsva(o)},a.setG=function(e,t){var o=f.hsvaToRgba(a.hsva);o.g=e/t,a.hsva=f.rgbaToHsva(o)},a.setB=function(e,t){var o=f.hsvaToRgba(a.hsva);o.b=e/t,a.hsva=f.rgbaToHsva(o)},a.setSaturationAndBrightness=function(e,t,o,r){a.hsva.s=e/o,a.hsva.v=t/r},a.update=function(){var e=f.hsva2hsla(a.hsva),e=(a.hslaText={h:Math.round(360*e.h),s:Math.round(100*e.s),l:Math.round(100*e.l),a:Math.round(100*e.a)/100},o(f.hsvaToRgba(a.hsva))),t=o(f.hsvaToRgba({h:a.hsva.h,s:1,v:1,a:1}));if(a.rgbaText={r:e.r,g:e.g,b:e.b,a:Math.round(100*e.a)/100},a.hexText="#"+(1<<24|parseInt(e.r,10)<<16|parseInt(e.g,10)<<8|parseInt(e.b,10)).toString(16).substr(1),a.hexText[1]===a.hexText[2]&&a.hexText[3]===a.hexText[4]&&a.hexText[5]===a.hexText[6]&&(a.hexText="#"+a.hexText[1]+a.hexText[3]+a.hexText[5]),a.alphaSliderColor="rgb("+e.r+","+e.g+","+e.b+")",a.hueSliderColor="rgb("+t.r+","+t.g+","+t.b+")",0===a.type&&a.hsva.a<1&&a.type++,a.hsva.a<1)"hsla"===a.colorPickerOutputFormat?a.outputColor="hsla("+a.hslaText.h+","+a.hslaText.s+"%,"+a.hslaText.l+"%,"+a.hslaText.a+")":a.outputColor="rgba("+e.r+","+e.g+","+e.b+","+Math.round(100*e.a)/100+")";else switch(a.colorPickerOutputFormat){case"hsla":a.outputColor="hsl("+a.hslaText.h+","+a.hslaText.s+"%,"+a.hslaText.l+"%)";break;
375case"rgba":a.outputColor=a.alphaSliderColor;break;default:a.outputColor=a.hexText}a.sAndLSlider={left:a.hsva.s*a.sAndLMax.x-8+"px",top:(1-a.hsva.v)*a.sAndLMax.y-8+"px"},a.hueSlider.left=a.hsva.h*a.hueMax.x-8+"px",a.alphaSlider.left=a.hsva.a*a.alphaMax.x-8+"px",a.alphaInvalidClass=""},a.setColorFromHex=function(e){e=f.stringToHsva(e);return null!==e&&(a.hsva=e),e},a.typePolicy=function(){return a.type=(a.type+1)%3,0===a.type&&a.hsva.a<1&&a.type++,a.type}}],link:function(t,o,r){var a,e,n="";function s(e){e=f.stringToHsva(e);null!==e&&(t.hsva=e,t.update())}function i(){setTimeout(function(){l()},5)}function l(){t.$apply(function(){r.colorPickerShowValue="true",s(o.val()),t.colorPickerModel=o.val()})}function c(e){n=t.colorPickerModel,t.$apply(function(){t.show=!0}),t.$apply(function(){t.sAndLMax={x:a[0].getElementsByClassName("saturation-lightness")[0].offsetWidth,y:a[0].getElementsByClassName("saturation-lightness")[0].offsetHeight},t.hueMax={x:a[0].getElementsByClassName("hue")[0].offsetWidth},t.alphaMax={x:a[0].getElementsByClassName("alpha")[0].offsetWidth},t.update()}),h(),g.on("mousedown",p),angular.element(window).on("resize",u)}function u(){h()}function h(){var e;"true"===r.colorPickerFixedPosition?(e=d(o[0],!1),a[0].style.position="fixed"):e=d(o[0],!0),"left"===r.colorPickerPosition?(a[0].style.top=e.top+"px",a[0].style.left=e.left-252+"px"):"top"===r.colorPickerPosition?(a[0].style.top=e.top-e.height-284+"px",a[0].style.left=e.left+"px"):"bottom"===r.colorPickerPosition?(a[0].style.top=e.top+e.height+10+"px",a[0].style.left=e.left+"px"):(a[0].style.top=e.top+"px",a[0].style.left=e.left+e.width+"px")}function p(e){e.target===o[0]||a[0]===e.target||function(e,t){var o=t.parentNode;for(;null!==o;){if(o===e)return 1;o=o.parentNode}return}(a[0],e.target)||(t.$apply(function(){t.show=!1,t.colorPickerOnChange&&t.colorPickerOnChange(t.colorPickerModel)}),g.off("mousedown",p),angular.element(window).off("resize",u))}function d(e,t){return{top:e.getBoundingClientRect().top+(t?window.pageYOffset:0),left:e.getBoundingClientRect().left+(t?window.pageXOffset:0),width:e.offsetWidth,height:e.offsetHeight}}void 0===t.colorPickerModel&&(t.colorPickerModel="#008fff",o.val("")),void 0===r.colorPickerShowValue&&(r.colorPickerShowValue="true"),void 0===r.colorPickerPosition&&(r.colorPickerPosition="right"),void 0===r.colorPickerShowInputSpinner&&(r.colorPickerShowInputSpinner="false"),void 0===r.colorPickerShowCancelButton&&(r.colorPickerShowCancelButton="false"),"true"===r.colorPickerShowCancelButton&&(t.showCancelButton=!0,t.extraLargeClass="color-picker-extra-large"),void 0!==r.colorPickerCancelButtonClass&&(t.cancelButtonClass=r.colorPickerCancelButtonClass),void 0!==r.colorPickerSpinnerRgbaSteps&&null!==r.colorPickerSpinnerRgbaSteps.match(/^\d+;\d+;\d+;[0-9]+([\.][0-9]{1,2})?$/)&&(e=r.colorPickerSpinnerRgbaSteps.split(";"),t.rbgaSteps={r:e[0],g:e[1],b:e[2],a:e[3]}),void 0!==r.colorPickerSpinnerHslaSteps&&null!==r.colorPickerSpinnerHslaSteps.match(/^\d+;\d+;\d+;[0-9]+([\.][0-9]{1,2})?$/)&&(e=r.colorPickerSpinnerHslaSteps.split(";"),t.hslaSteps={h:e[0],s:e[1],l:e[2],a:e[3]}),s(t.colorPickerModel),"true"===r.colorPickerShowValue&&o.val(t.outputColor),a=angular.element('<div ng-show="show" class="color-picker {{extraLargeClass}}"> <div class="arrow arrow-'+r.colorPickerPosition+'"></div> <div slider rg-x=1 rg-y=1 action="setSaturationAndBrightness(s, v, rgX, rgY)" class="saturation-lightness" ng-style="{\'background-color\':hueSliderColor}"> <div class="cursor-sv" ng-style="{\'top\':sAndLSlider.top, \'left\':sAndLSlider.left}"></div> </div> <div slider rg-x=1 action="setHue(v, rg)" class="hue"> <div class="cursor" ng-style="{\'left\':hueSlider.left}"></div> </div> <div slider rg-x=1 action="setAlpha(v, rg)" class="alpha" ng-style="{\'background-color\':alphaSliderColor}"> <div class="cursor" ng-style="{\'left\':alphaSlider.left}"></div> </div> <div class="selected-color-background"></div> <div class="selected-color" ng-style="{\'background-color\':outputColor}"></div> <div ng-show="type==2" class="hsla-text"> <input text type="number" pattern="[0-9]*" min="0" max="360" step="'+t.hslaSteps.h+'" rg=360 action="setHue(v, rg)" ng-model="hslaText.h" spinner="'+r.colorPickerShowInputSpinner+'" /> <input text type="number" pattern="[0-9]*" min="0" max="100" step="'+t.hslaSteps.s+'" rg=100 action="setSaturation(v, rg)" ng-model="hslaText.s" spinner="'+r.colorPickerShowInputSpinner+'" /> <input text type="number" pattern="[0-9]*" min="0" max="100" step="'+t.hslaSteps.l+'" rg=100 action="set
375Lightness(v, rg)" ng-model="hslaText.l" spinner="'+r.colorPickerShowInputSpinner+'" /> <input text type="number" pattern="[0-9]+([.,][0-9]{1,2})?" min="0" max="1" step="'+t.hslaSteps.a+'" rg=1 action="setAlpha(v, rg)" ng-model="hslaText.a" spinner="'+r.colorPickerShowInputSpinner+'" /> <div>H</div><div>S</div><div>L</div><div>A</div> </div> <div ng-show="type==1" class="rgba-text"> <input text type="number" pattern="[0-9]*" min="0" max="255" step="'+t.rbgaSteps.r+'" rg=255 action="setR(v, rg)" ng-model="rgbaText.r" spinner="'+r.colorPickerShowInputSpinner+'" /> <input text type="number" pattern="[0-9]*" min="0" max="255" step="'+t.rbgaSteps.g+'" rg=255 action="setG(v, rg)" ng-model="rgbaText.g" spinner="'+r.colorPickerShowInputSpinner+'" /> <input text type="number" pattern="[0-9]*" min="0" max="255" step="'+t.rbgaSteps.b+'" rg=255 action="setB(v, rg)" ng-model="rgbaText.b" spinner="'+r.colorPickerShowInputSpinner+'" /> <input text type="number" pattern="[0-9]+([.,][0-9]{1,2})?" min="0" max="1" step="'+t.rbgaSteps.a+'" rg=1 action="setAlpha(v, rg)" ng-model="rgbaText.a" spinner="'+r.colorPickerShowInputSpinner+'" /> <div>R</div><div>G</div><div>B</div><div>A</div> </div> <div class="hex-text" ng-show="type==0"> <input text type="text" action="setColorFromHex(string)" ng-model="hexText"/> <div>HEX</div> </div> <div class="predefined-colors" ng-show="colorPickerPredefinedColors"> Sa fie ceva frumos </div> <div ng-click="typePolicy()" class="type-policy"></div> <button type="button" class="{{cancelButtonClass}}" ng-show="showCancelButton" ng-click="cancelColor()">Cancel</button></div>'),document.getElementsByTagName("body")[0].appendChild(a[0]),v(a)(t),o.on("paste",i),o.on("keyup",l),t.$on("color-changed",function(e){t.$apply(function(){t.update(),t.colorPickerModel=t.outputColor,"true"===r.colorPickerShowValue&&o.val(t.outputColor)})}),t.cancelColor=function(){t.colorPickerModel=n,t.show=!1,s(t.colorPickerModel),g.off("mousedown",p),angular.element(window).off("resize",u)},o.on("click",c),o.on("$destroy",function(){o.off("click",c),o.off("keyup",l),o.off("paste",i)})}}}
375]),colorPicker.directive("text",[function(){return{restrict:"A",scope:{action:"&"},link:function(o,r,a){function e(e){"true"===a.spinner&&r.removeClass("color-picker-input-spinner")}function t(e){r.addClass("color-picker-input-spinner")}function n(e){setTimeout(function(){s()},5)}function s(e){var t;void 0===a.rg?o.action({string:r.val()})&&o.$emit("color-changed"):(t=parseFloat(r.val()),isNaN(t)?o.$emit("alpha-invalid"):(t=Math.abs(Math.min(parseFloat(r.val()),a.rg)),o.action({v:t,rg:a.rg}),o.$emit("color-changed"),o.$emit("alpha-valid")))}r.on("paste",n),r.on("keyup",s),r.on("change",s),r.on("focus",e),r.on("blur",t),r.on("mouseover",e),r.on("mouseout",t),r.addClass("color-picker-input-spinner"),r.on("$destroy",function(){r.off("paste",n),r.off("keyup",s),r.off("change",s),r.off("focus",e),r.off("blur",t),r.off("mouseover",e),r.off("mouseout",t)})}}}]),colorPicker.directive("slider",["$document","$window",function(r,l){return{restrict:"A",scope:{action:"&"},link:function(n,s,i){function e(e){o(e),r.on("mousemove touchmove",t)}function t(e){e.preventDefault(),o(e)}function o(e){var t=s[0].offsetHeight,o=s[0].offsetWidth,r=Math.max(0,Math.min((r=e,a=s[0],(void 0!==r.pageX?r:r.touches[0]).pageX-a.getBoundingClientRect().left-l.pageXOffset),o)),a=Math.max(0,Math.min((a=e,e=s[0],(void 0!==a.pageY?a:a.touches[0]).pageY-e.getBoundingClientRect().top-l.pageYOffset),t));void 0!==i.rgX&&void 0!==i.rgY?n.action({s:r/o,v:1-a/t,rgX:i.rgX,rgY:i.rgY}):n.action({v:r/o,rg:i.rgX}),n.$emit("color-changed")}s.on("mousedown touchstart",e),r.on("mouseup touchend",function(){r.off("mousemove touchmove",t)}),s.on("$destroy",function(){s.off("mousedown touchend",e)})}}}]);; 376(function () { 377 'use strict'; 378 379 angular 380 .module('app.directives', []) 381 .config(config); 382
383 config.$inject = ['$translatePartialLoaderProvider']; 384 385 function config($translatePartialLoaderProvider) { 386 if (__environment__ !== 'local') { 387 $translatePartialLoaderProvider.addPart('app'); 388 389 } else { 390 $translatePartialLoaderProvider.addPart('app/core/directives/ads/app'); 391 $translatePartialLoaderProvider.addPart('app/core/directives/custom-page'); 392 $translatePartialLoaderProvider.addPart('app/core/directives/filter'); 393 $translatePartialLoaderProvider.addPart('app/core/directives/form-v1'); 394 $translatePartialLoaderProvider.addPart('app/core/directives/pagination'); 395 $translatePartialLoaderProvider.addPart('app/core/directives/search-input'); 396 $translatePartialLoaderProvider.addPart('app/core/directives/share-button'); 397 $translatePartialLoaderProvider.addPart('app/core/directives/stripe/elements'); 398 $translatePartialLoaderProvider.addPart('app/core/directives/help-button');
399 $translatePartialLoaderProvider.addPart('app/core/directives/form-file-upload'); 400 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/404'); 401 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/app'); 402 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/bracket/seed'); 403 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/bracket/seed/matchup'); 404 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/bracket/seed/matchup/action'); 405 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/bracket/seed/matchup/information'); 406 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/card-list'); 407 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/divisions'); 408 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/facility/list');
409 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/facility/widget'); 410 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/form'); 411 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/front-office-form'); 412 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-broadcast'); 413 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-details'); 414 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-details/play-by-play'); 415 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-details/statistics'); 416 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-details/summary'); 417 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-details/lineups');
418 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-hitters-stats'); 419 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/box-score-summary'); 420 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-pitchers-stats'); 421 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/shots-on-goal'); 422 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-players-stats'); 423 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball'); 424 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/score'); 425 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/lineup'); 426 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/history');
427 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/edit-pitch-count'); 428 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-lineup'); 429 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-lineup/batters'); 430 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-lineup/players'); 431 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/actions'); 432 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/log'); 433 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/pitch-count'); 434 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/baseball/save');
435 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/add-player'); 436 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/add-staff'); 437 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/game-staff-popup'); 438 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball'); 439 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/timing'); 440 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/actions'); 441 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/popup'); 442 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/roster'); 443 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/bonus');
444 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/note'); 445 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/scoreboard/basketball/history'); 446 $translatePartialLoaderProvider.addPart('app/core/directives/number-select'); 447 $translatePartialLoaderProvider.addPart('app/core/directives/template-editor'); 448 $translatePartialLoaderProvider.addPart('app/core/directives/widget/settings/controls/filters'); 449 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/stars-of-the-game'); 450 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-score'); 451 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/game-note'); 452 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/games/team-matchup'); 453 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/game-status');
454 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/game-status/basketball'); 455 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/game-status/generic'); 456 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/field-view'); 457 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/image-bar'); 458 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/spacer'); 459 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/login'); 460 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/news/latest'); 461 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/news/latest-premium'); 462 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/news/carousel'); 463 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/news/list');
464 //$translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/penalty-type'); 465 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/photo/list'); 466 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/pitcher-starter'); 467 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/pitcher-result'); 468 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/player/details'); 469 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/player/details/all-time-statistics'); 470 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/player/details/game-log'); 471 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/player/list'); 472 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/player/page'); 473 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/result/list');
474 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/result/livegame-players'); 475 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/result/list/game'); 476 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule'); 477 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule/page'); 478 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule/filters'); 479 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule/game'); 480 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule/event'); 481 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule/views'); 482 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/schedule/list'); 483 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/scores');
484 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/social-medias'); 485 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/social-medias/icons'); 486 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/social-medias-premium'); 487 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics'); 488 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/leaders'); 489 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/goaler'); 490 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/pitcher'); 491 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/defense'); 492 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/player'); 493 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/suspension');
494 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/team'); 495 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/players/leaders'); 496 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/statistics/teams/leaders'); 497 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/leaderboard'); 498 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/leaderboard/leaders'); 499 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/suspension/list'); 500 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/details'); 501 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/details/all-time-statistics'); 502 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/details/filters-team');
503 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/details/lineup'); 504 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/details/staff'); 505 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/head-to-head'); 506 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/leaders'); 507 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/list'); 508 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/standings'); 509 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/team/standings/table'); 510 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/video/list'); 511 $translatePartialLoaderProvider.addPart('app/core/directives/toolbox/widgets/video/widget'); 512 $translatePartialLoaderProvider.addPart('app/core/directives/widget/settings');
513 $translatePartialLoaderProvider.addPart('app/core/directives/widget/container'); 514 $translatePartialLoaderProvider.addPart('app/core/directives/widget/toolbar'); 515 $translatePartialLoaderProvider.addPart('app/core/directives/widget/zone'); 516 $translatePartialLoaderProvider.addPart('app/core/directives/widget/modal'); 517 $translatePartialLoaderProvider.addPart('app/core/directives/widget/row'); 518 519 // TODO Create website editor module 520 $translatePartialLoaderProvider.addPart('app/core/website-editor/file-upload'); 521 $translatePartialLoaderProvider.addPart('app/core/website-editor/file-upload-editor'); 522 $translatePartialLoaderProvider.addPart('app/core/website-editor/header-bar-customization'); 523 $translatePartialLoaderProvider.addPart('app/core/website-editor/multiple-image-upload'); 524 $translatePartialLoaderProvider.addPart('app/core/website-editor/columns-display-select'); 525 $translateParti
525alLoaderProvider.addPart('app/core/website-editor/columns-display-select-list'); 526 $translatePartialLoaderProvider.addPart('app/core/website-editor/simple-select'); 527 $translatePartialLoaderProvider.addPart('app/core/website-editor/html-widget-editor'); 528 $translatePartialLoaderProvider.addPart('app/core/website-editor/font-picker'); 529 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar'); 530 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/logo-and-background'); 531 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/lists'); 532 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/menu-and-navigation'); 533 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/font-and-colors'); 534 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/tables');
535 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/page'); 536 $translatePartialLoaderProvider.addPart('app/core/website-editor/side-toolbar/panels/settings'); 537 $translatePartialLoaderProvider.addPart('app/core/website-editor/facebook-account'); 538 $translatePartialLoaderProvider.addPart('app/core/website-editor/instagram-account'); 539 $translatePartialLoaderProvider.addPart('app/core/website-editor/tiktok-account'); 540 $translatePartialLoaderProvider.addPart('app/core/website-editor/faq-editor'); 541 $translatePartialLoaderProvider.addPart('app/core/website-editor/icon-select'); 542 } 543 } 544})();; 545(function () { 546 'use strict'; 547 548 angular 549 .module('app.directives') 550 .directive('tooltip', tooltip); 551 552 tooltip.$inject = []; 553 554 function tooltip() { 555 return { 556 restrict: 'A', 557 scope: { 558 tooltip: '=', 559 tooltipPosition: '=' 560 }, 561 link: function (scope, element, attr, ngModel) { 562 element.tooltip({ 563 placement: scope.tooltipPosition, 564 title: scope.tooltip, 565 trigger: 'hover click' 566 }); 567 } 568 }; 569 } 570})();; 571(function () { 572 'use strict'; 573 574 angular 575 .module('app.directives') 576 .controller('AdsAppController', AdsAppController); 577 578 AdsAppController.$inject = ['$localStorage', '$sessionStorage', 'SolutionService']; 579 580 function AdsAppController($localStorage, $sessionStorage, solutionService) { 581 var vm = this; 582 //State variables 583 Object.assign(vm, angular.fromJson(website)); 584 vm.appLink = ` https://kreezee.app.link/${__solutionId__}-solution?solutionid=${__solutionId__}`; // TODO Move in url service 585 vm.closed = $sessionStorage.downloadAppClosed; 586 vm.culture = $localStorage.currentLanguage ? $localStorage.currentLanguage.culture.substring(0, 2) : 'fr'; 587 vm.visible = false; 588 589 //State functions 590 vm.close = function () { 591 vm.closing = true; 592 // Keep value in session to hide the ads on other pages during user session. 593 $sessionStorage.downloadAppClosed = true; 594 }; 595 596 //On component mount 597 solutionService.getSolutionById(__solutionId__) 598 .then(function (response) { 599 var showMobileBannerConfig = _.find(response.data.configs, { code: 'SHOWMOBILEBANNER' }); 600 vm.visible = showMobileBannerConfig ? showMobileBannerConfig.value === "1" : true; 601 }) 602 .catch(function (error) { 603 bugsnag.notify(error); 604 }); 605 } 606})(); 607; 608(function () { 609 'use strict'; 610 611 angular 612 .module('app.directives') 613 .directive('adsApp', adsApp); 614 615 adsApp.$inject = []; 616 617 function adsApp() { 618 return { 619 restrict: 'E', 620 scope: { 621 622 }, 623 templateUrl: 'public/v2/app/core/directives/ads/app/ads-app.tpl.html', 624 controller: 'AdsAppController', 625 controllerAs: 'adsApp' 626 }; 627 } 628})();; 629(function () { 630 'use strict'; 631 632 angular 633 .module('app.directives') 634 .controller('AdsBoxController', AdsBoxController); 635 636 AdsBoxController.$inject = ['$rootScope', '$scope']; 637 638 function AdsBoxController($rootScope, $scope) { 639 var vm = this; 640 641 vm.visible = false; 642 } 643})(); 644; 645(function () { 646 'use strict'; 647 648 angular 649 .module('app.directives') 650 .directive('adsBox', adsBox) 651 652 adsBox.$inject = ['$timeout', '$localStorage']; 653 654 function adsBox($timeout, $localStorage) { 655 return { 656 restrict: 'E', 657 scope: { 658 adType: "=", 659 width: "=", 660 height: "=", 661 mediaType: "=", 662 sideMargin: "=" 663 }, 664 templateUrl: 'public/v2/app/core/directives/ads/box/ads-box.tpl.html', 665 controller: 'AdsBoxController', 666 controllerAs: 'adsBox', 667 link: function (scope, element, attribute, controller) { 668 var culture = $localStorage.currentLanguage ? $localStorage.currentLanguage.culture.substring(0, 2) : 'fr'; 669 var holderElement = element.find('.ads-box'); 670 671 var eventMethod = (window.addEventListener ? 'addEventListener' : 'attachEvent'); 672 var eventer = window[eventMethod]; 673 var messageEvent = (eventMethod == 'attachEvent' ? 'onmessage' : 'message'); 674 eventer(messageEvent, function (e) { 675 if (e.data.state == 'iframe.ready') { 676 controller.visible = true; 677 678 $timeout(function () { 679 resize(); 680 }, 0); 681 } 682 }); 683 684 var solutionId = __solutionId__; 685 var adType = scope.adType; 686 var width = scope.width; 687 var height = scope.height; 688 var mediaType = scope.mediaType; 689 var sideMargin = scope.sideMargin || 0; 690 691 scope.$watch(function () { 692 return element[0].offsetWidth; 693 }, function () { 694 $timeout(function () { 695 resize(); 696 }); 697 }); 698 699 $(window).on('resize', resize); 700 701 function resize() { 702 var elementWidth = element.innerWidth(); 703 704 if (width > 0) { 705 var ratio = height / width; 706 var newWidth = elementWidth > width ? width : elementWidth; 707 var newHeight = newWidth * ratio; 708 709 if (elementWidth <= width + (sideMargin * 2)) { 710 newWidth -= (sideMargin * 2); 711 } 712 713 var iframe = holderElement.find('iframe'); 714 715 holderElement.css('height', newHeight); 716 iframe.css('width', newWidth); 717 iframe.parent().css('width', newWidth); 718 iframe.parent().css('height', newHeight); 719 if (iframe[0]) { 720 iframe[0].contentWindow.postMessage({ width: newWidth, height: newHeight }, '*'); 721 } 722 723 } 724 } 725 726 if (window.ads_api) { 727 holderElement.append(ads_api.create(null, adType, solutionId, width, height, null, true, mediaType, null, culture)); 728 } 729 } 730 }; 731 } 732})();; 733(function () { 734 'use strict'; 735 736 angular 737 .module('app.directives') 738 .controller('CustomPageController', CustomPageController); 739 740 CustomPageController.$inject = ['$scope', '$sce', 'FormService']; 741 742 function CustomPageController($scope, $sce, formService) { 743 var vm = this; 744 vm.formService = formService; 745 // Get custom page information. 746 Object.assign(vm, angular.fromJson(__customPage__ 747 .replace(/[\n\r]+/g, ' ') 748 .replace(/\s{2,}/g, ' ') 749 .replace(/\t+/g, ' ') 750 .replace(/^\s+|\s+$/, ''))); 751 752 // V1 -> V2 753 if (vm.name) { 754 vm.title = vm.name; 755 } 756 757 vm.trustAsHtml = function (page) { 758 return angular.isDefined(page.html) 759 ? $sce.trustAsHtml(page.html) // v2 760 : $sce.trustAsHtml(page.content); // v1 761 }; 762 } 763})(); 764; 765(function () { 766 'use strict'; 767 768 angular 769 .module('app.directives') 770 .directive('customPage', customPage); 771
772 customPage.$inject = ['$compile', '$timeout']; 773 774 function customPage($compile, $timeout) { 775 return { 776 restrict: 'E', 777 scope: { 778 section: '=' 779 }, 780 templateUrl: 'public/v2/app/core/directives/custom-page/custom-page.tpl.html', 781 controller: 'CustomPageController', 782 controllerAs: 'customPage', 783 link: function (scope, element, attr, controller) { 784 var vm = controller; 785 786 $timeout(function () { 787 var dataFormId = element.find('img[data-form-id]'); 788 789 // Check if data-form-id exists in the custom page. 790 if (dataFormId.length === 0) return; 791 792 vm.formId = atob(dataFormId.attr('data-form-id')); 793 Object.assign(vm, angular.parseQueryString(vm.formId)); 794 795 var formToRender = ''; 796 //params.solutionId = 14655; 797 //params.formId = 3179; 798 vm.formService.getFormByFormId(vm.solutionId, vm.id, vm.formId) 799 .then(function (response) { 800 vm.form = response.data; // Get the form object. 801 802 formToRender = $compile(`<form-v1 form="customPage.form" form-id="customPage.formId" page-id="customPage.id"></form-v1>`)(scope); 803 804 // Replace the form placeholder with rendered form. 805 dataFormId.replaceWith(formToRender); 806 807 }) 808 .catch(function (error) { 809 debugger; 810 bugsnag.notify(error); 811 }); 812 }); 813 } 814 }; 815 } 816})();; 817(function () { 818 'use strict'; 819 820 angular 821 .module('app.directives') 822 .controller('DataTableController', DataTableController); 823 824 DataTableController.$inject = ['$scope']; 825 826 function DataTableController($scope) { 827 var vm = this; 828 vm.pagination = $scope.pagination; 829 vm.columns = $scope.columns; 830 } 831})(); 832; 833(function () { 834 'use strict'; 835 836 angular 837 .module('app.directives') 838 .directive('datatable', datatable) 839 840 datatable.$inject = []; 841 842 function datatable() { 843 return { 844 restrict: 'E', 845 scope: { 846 columns: '=', 847 pagination: '=' 848 }, 849 templateUrl: 'public/v2/app/core/directives/datatable/datatable.tpl.html', 850 controller: 'DataTableController', 851 controllerAs: 'dataTable', 852 link : function(scope, element) { 853 854 } 855 }; 856 } 857})();; 858(function () { 859 'use strict'; 860 861 angular.module('app.directives') 862 .controller('SandboxIframeController', SandboxIframeController); 863 864 SandboxIframeController.$inject = ['$scope', '$element', '$window', '$timeout', '$sce', 'GuidService']; 865 866 function SandboxIframeController($scope, $element, $window, $timeout, $sce, guidService) { 867 var vm = this; 868 vm.guid = guidService.getGuid(); 869 870 var hostOrigin = ''; 871 if ($window && $window.location) { 872 hostOrigin = $window.location.protocol + '//' + $window.location.host; 873 } 874 875 function getSrcDoc() { 876 var srcDoc = '<!DOCTYPE html>' + 877 '<html>' + 878 '<head>' + 879 '<base target="_top">' + 880 '<base href="' + (hostOrigin || '') + '">' + 881 '<meta charset="utf-8">' + 882 '<meta name="viewport" content="width=device-width,initial-scale=1">' + 883 '<link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">' + 884 '<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">' + 885 '<style>body { font-family: "Poppins", sans-serif; margin: 0; background-color:transparent !important }</style>' + 886 '<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>' + 887 '</head>' + 888 '<body style="padding: 1px">' + 889 ($scope.html || '') + 890 '</body>' + 891 '<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>' + 892 '<script>' + 893 'const resizeObserver = new ResizeObserver((entries) => {' + 894 ' console.log(entries); ' +
895 ' for (const entry of entries) {' + 896 ' const { inlineSize, blockSize } = entry.borderBoxSize[0];' + 897 ' parent.postMessage({ id: "' + (vm.guid || '') + '", height: blockSize }, "*");' + 898 ' }' + 899 '});' + 900 'resizeObserver.observe(document.body, { box: \'border-box\' });' + 901 '</script>' + 902 '</html>'; 903 904 var blob = new Blob([srcDoc], { type: 'text/html' }); 905 var currentObjectUrl = URL.createObjectURL(blob); 906 vm.src = $sce.trustAsResourceUrl(currentObjectUrl); 907 } 908 909 getSrcDoc(); 910 911 $scope.$watch('html', function (value) { 912 getSrcDoc(); 913 }) 914 } 915})(); 916; 917(function () { 918 'use strict'; 919 920 angular.module('app.directives') 921 .directive('sandboxIframe', sandboxIframe); 922 923 function sandboxIframe() { 924 return { 925 restrict: 'E', 926 scope: { 927 html: '=', 928 }, 929 templateUrl: 'public/v2/app/core/directives/sandbox-iframe/sandbox-iframe.tpl.html', 930 controller: 'SandboxIframeController', 931 controllerAs: 'sandboxIframe', 932 link: function (scope, element, attrs, controller) { 933 var eventMethod = (window.addEventListener ? 'addEventListener' : 'attachEvent'); 934 var eventer = window[eventMethod]; var messageEvent = (eventMethod == 'attachEvent' ? 'onmessage' : 'message'); 935 936 eventer(messageEvent, function (e) { 937 if (e.data.id == controller.guid) { 938 $('iframe', element).height(e.data.height); 939 } 940 }); 941 } 942 }; 943 } 944})(); 945; 946(function () { 947 'use strict'; 948 949 angular 950 .module('app.directives') 951 .controller('DateselectController', DateselectController); 952 953 DateselectController.$inject = ['$scope']; 954 955 function DateselectController($scope) { 956 var vm = this; 957 vm.formatDate = function () { 958 if ($scope.date) { 959 return $scope.date.toISOString().split('T')[0]; 960 } else { 961 return ''; 962 } 963 } 964 } 965})(); 966; 967(function () { 968 'use strict'; 969 970 angular 971 .module('app.directives') 972 .directive('dateselect', dateselect) 973 974 dateselect.$inject = []; 975 976 function dateselect() { 977 return { 978 restrict: 'E', 979 scope: { 980 date: '=', 981 id: '@' 982 }, 983 templateUrl: 'public/v2/app/core/directives/dateselect/dateselect.tpl.html', 984 controller: 'DateselectController', 985 controllerAs: 'dateselect', 986 link : function(scope, element) { 987 988 } 989 }; 990 } 991})();; 992(function () { 993 'use strict'; 994 995 angular 996 .module('app.directives') 997 .controller('DropdownController', DropdownController); 998 999 DropdownController.$inject = ['$scope']; 1000 1001 function DropdownController($scope) { 1002 var vm = this; 1003 1004 1005 vm.getValueText = function (id) { 1006 if ($scope.items && $scope.items.length) { 1007 const value = $scope.items.find(function(val) { 1008 return val.Id == id; 1009 }); 1010 if (value) { 1011 return value.Name; 1012 } 1013 return ""; 1014 } 1015 } 1016 1017 vm.selectItem = function(item) { 1018 if (typeof $scope.change == 'function') { 1019 $scope.change({ item: item }); 1020 } 1021 }; 1022 } 1023})(); 1024; 1025(function () { 1026 'use strict'; 1027 1028 angular 1029 .module('app.directives') 1030 .directive('dropdown', dropdown) 1031 1032 dropdown.$inject = []; 1033 1034 function dropdown() { 1035 return { 1036 restrict: 'E', 1037 scope: { 1038 change: '&', 1039 items: '=', 1040 title: '@', 1041 titleNoTranslation: '@', 1042 value: '=' 1043 }, 1044 templateUrl: 'public/v2/app/core/directives/dropdown/dropdown.tpl.html', 1045 controller: 'DropdownController', 1046 controllerAs: 'dropdown', 1047 link : function(scope, element) { 1048 1049 } 1050 }; 1051 } 1052})();; 1053(function () { 1054 'use strict'; 1055 1056 angular 1057 .module('app.directives') 1058 .directive('dropdownMenu', dropdownMenu) 1059 1060 dropdownMenu.$inject = ['$timeout', 'TranslationService']; 1061 1062 function dropdownMenu($timeout, translationService) { 1063 return { 1064 restrict: 'E', 1065 scope: { 1066 items: '=', 1067 overflow: '=', 1068 position: '=' 1069 }, 1070 templateUrl: 'public/v2/app/core/directives/dropdown/menu/dropdown-menu.tpl.html', 1071 link: function (scope, element) { 1072 scope.translation = translationService; 1073 1074 $timeout(function () { 1075 // Get dropdown menu toggle DOM element. 1076 var dropDownMenu = element.find('ul.dropdown-menu li a[data-toggle=dropdown]'); 1077 1078 // Add click event on the dropdown menu. 1079 dropDownMenu.on('click', function (event) { 1080 event.stopImmediatePropagation(); 1081 // TODO Clean this mess.... 1082 if (!$(this).next().children('ul.dropdown-menu').hasClass('show')) { 1083 $(this).parents('.dropdown-menu').first().find('.show').removeClass('show'); 1084 } 1085 1086 var $subMenu = $(this).next().children('ul.dropdown-menu'); 1087 $subMenu.toggleClass('show'); 1088 1089 $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function (e) { 1090 $('.dropdown-submenu .show').removeClass('show'); 1091 }); 1092 1093 return false; 1094 }); 1095 1096 }, 0); 1097 1098 scope.getPosition = function () { 1099 return scope.overflow ? 'left' : 'right'; 1100 }; 1101 } 1102 }; 1103 } 1104})();; 1105(function () { 1106 'use strict'; 1107 1108 angular 1109 .module('app.directives') 1110 .directive('fileChange', fileChange) 1111 1112 fileChange.$inject = []; 1113 1114 function fileChange() { 1115 return { 1116 scope:{ 1117 fileChange: '&' 1118 }, 1119 link:function(scope, element){ 1120 element.on('change',function(event){ 1121 scope.$apply(function(){ 1122 scope.fileChange({$event: event}) 1123 }) 1124 }) 1125 scope.$on('$destroy',function(){ 1126 element.off(); 1127 }); 1128 } 1129 } 1130 } 1131})();; 1132 1133(function () { 1134 'use strict'; 1135 1136 angular 1137 .module('app.directives') 1138 .controller('FilterController', FilterController); 1139 1140 FilterController.$inject = ['$scope', '$translate', '$localStorage', 'SeasonService', 'DivisionService', 'ContainerService', 'TeamService', 'FacilityService', 'HashService', 'PositionService']; 1141 1142 function FilterController($scope, $translate, $localStorage, seasonService, divisionService, containerService, teamService, facilityService, hashService, positionService) { 1143 var vm = this; 1144 var teams; 1145 var componentMounting = true; 1146 var sportId = $localStorage.solution.sportId; 1147 1148 const FILTERS_MAPPINGS = { 1149 container: $translate.instant('directives.filter.url.containerUrl'), 1150 season: $translate.instant('directives.filter.url.seasonUrl'), 1151 division: $translate.instant('directives.filter.url.divisionUrl'), 1152 team: $translate.instant('directives.filter.url.teamUrl'), 1153 facility: $translate.instant('directives.filter.url.facilityUrl'), 1154 position: $translate.instant('directives.filter.url.positionUrl'), 1155 startDate: $translate.instant('directives.filter.url.startDateUrl'), 1156 endDate: $translate.instant('directives.filter.url.endD
1156ateUrl') 1157 } 1158 1159 const FILTERS_MAPPINGS_REVERSED = _.invert(FILTERS_MAPPINGS); 1160 1161 // State variables 1162 initializeVariables(); 1163 function initializeVariables() { 1164 teams = undefined; 1165 vm.filters = { 1166 container: undefined, 1167 season: $scope.seasonId || undefined, 1168 division: undefined, 1169 team: 'all', 1170 facility: 'all', 1171 position: 'all', 1172 startDate: undefined, 1173 endDate: undefined 1174 } 1175 1176 vm.containers = undefined; 1177 vm.seasons = undefined; 1178 vm.divisions = undefined; 1179 vm.teams = undefined; 1180 vm.facilities = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allfacilities') }]; 1181 vm.positions = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allPositions') }]; 1182 1183 if ($scope.seasonId) { 1184 getDivisions($scope.seasonId, null, null); 1185 } 1186 1187 if ($scope.categoryId) { 1188 vm.positions = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allPositions') }]; 1189 vm.positions = vm.positions.concat(positionService.getPositionsByCategory(sportId, $scope.categoryId).map(function (position) { 1190 return { Id: position.id, Name: position.text } 1191 })); 1192 } 1193 else { 1194 vm.positions = []; 1195 } 1196 1197 vm.showMoreFiltersButton = false; 1198 1199 vm.forceCallStandings = true; // Used for team standings only 1200 } 1201 1202 // State functions 1203 vm.search = function (text) { 1204 vm.searchText = text; 1205 change(); 1206 }; 1207 1208 vm.toggleMoreFilters = function () { 1209 vm.showMoreFiltersButton = !vm.showMoreFiltersButton; 1210 } 1211 1212 vm.applyFilters = function () { 1213 applyFilters(); 1214 } 1215 1216 vm.selectContainer = function (item) { 1217 vm.selectedDirectly = true; 1218 vm.forceCallStandings = true; 1219 vm.filters.container = item.Id; 1220 vm.filters.team = 'all'; 1221 vm.filters.facility = 'all'; 1222 if (!item.Id || item.Id === 0) { 1223 getSeasons($scope.allSeasons ? 'all' : undefined); 1224 } else { 1225 getSeasonsByContainerId(vm.filters.container); 1226 } 1227 }; 1228 1229 vm.selectSeason = function (item) { 1230 vm.selectedDirectly = true; 1231 vm.forceCallStandings = true; 1232 vm.filters.season = item.Id; 1233 vm.filters.team = 'all'; 1234 vm.filters.facility = 'all'; 1235 1236 if ($scope.allSeasonsFromMasterSeason && item.Id === 'all') { 1237 vm.filters.division = 'divisions'; 1238 finishFiltering(); 1239 } else if (typeof vm.filters.season !== 'number') { 1240 getAllDivisions(); 1241 } else { 1242 getDivisions(vm.filters.season); 1243 } 1244 1245 }; 1246 1247 vm.selectDivision = function (item) { 1248 vm.selectedDirectly = true; 1249 vm.forceCallStandings = false; 1250 vm.filters.division = item.Id; 1251 vm.filters.team = 'all'; 1252 vm.filters.facility = 'all'; 1253 if ($scope.team) { 1254 filterTeamsFromSelectedDivision(); 1255 } 1256 change(); 1257 setParams(); 1258 }; 1259 1260 vm.selectTeam = function (item) { 1261 vm.selectedDirectly = true; 1262 vm.filters.team = item.Id; 1263 change(); 1264 setParams(); 1265 } 1266 1267 vm.selectFacility = function (item) { 1268 vm.selectedDirectly = true; 1269 vm.filters.facility = item.Id; 1270 change(); 1271 setParams(); 1272 } 1273 1274 vm.selectPosition = function (item) { 1275 vm.selectedDirectly = true; 1276 vm.filters.position = item.Id; 1277 change(); 1278 setParams(); 1279 } 1280 1281 // Component mount 1282 locationChange(); 1283 1284 /* 1285 Trigger locationChange() when route change. 1286 NOT when mounting 1287 NOT when a tab has changed (because it will mount again) 1288 SIMULATE A MOUNT when route has no filters (i.e. backing from #team=1 to #) 1289 */ 1290 $scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) { 1291 if ($scope.divisionsPage) { 1292 if (!hashService.hasDivisionsTabsChanged(newUrl, oldUrl)) { 1293 componentMounting = false; 1294 locationChange(); 1295 } 1296 } else { 1297 if (!componentMounting && !hashService.hasStatisticsTabsChanged(newUrl, oldUrl) && hashService.hasNoHashFilters(
1297hashService.STATISTICS_TABS)) { 1298 componentMounting = true; 1299 locationChange(); 1300 } else if (!componentMounting && !hashService.hasStatisticsTabsChanged(newUrl, oldUrl)) { 1301 locationChange(); 1302 } 1303 } 1304 }); 1305 1306 $scope.$watch(function () { return $scope.seasonId }, function () { 1307 if ($scope.seasonId) { 1308 getDivisions($scope.seasonId, null, null); 1309 } 1310 }) 1311 1312 /* 1313 Simulate a reinitialization of the component and place correct parameters 1314 NOT when user selected a filter because the call is already executed correctly. 1315 */ 1316 function locationChange() { 1317 if (!vm.selectedDirectly) { 1318 const filters_url = getParams(); 1319 initializeVariables(); 1320 getContainers(filters_url); 1321 getFacilities(); 1322 vm.filters.facility = filters_url.facility ? filters_url.facility : 'all'; 1323 } 1324 vm.selectedDirectly = false; 1325 } 1326 1327 // API calls 1328 function getContainers(filters) { 1329 if (!$scope.hideContainers) { 1330 const { container, season, division, team } = filters; 1331 containerService.getContainersBySolutionId(__solutionId__) 1332 .then(function (response) { 1333 if (response.data.containers && response.data.containers.length > 0) { 1334 vm.containers = [{ Id: 0, Name: $translate.instant('directives.filter.labels.allyears') }] 1335 vm.containers = vm.containers.concat(response.data.containers); 1336 1337 if (container) { 1338 vm.filters.container = container; 1339 } else { 1340 vm.filters.container = response.data.defaultcontainerid; 1341 } 1342 1343 if (vm.filters.container == 0 && $scope.allSeasons) { 1344 getSeasons(season ? season : 'all', division, team); 1345 } else if (vm.filters.container == 0 && !$scope.allSeasons) { 1346 getSeasons(season, division, team); 1347 } else { 1348 getSeasonsByContainerId(vm.filters.container, season, division, team); 1349 } 1350 } else { 1351 if (season) { 1352 vm.filters.season = season; 1353 } else if (response.data.defaultseasonid && response.data.defaultseasonid > 0) { 1354 vm.filters.season = response.data.defaultseasonid; 1355 } else { 1356 vm.filters.season = null; 1357 } 1358 getSeasons(vm.filters.season ? vm.filters.season : 'all', division, team); 1359 } 1360 }) 1361 .catch(function (error) { 1362 bugsnag.notify(error); 1363 }); 1364 } 1365 } 1366 1367 function getSeasonsByContainerId(defaultContainerId, defaultSeasonId, defaultDivisionId, defaultTeamId) { 1368 if (!$scope.divisionsPage) { 1369 seasonService.getSeasonsByContainerId(__solutionId__, defaultContainerId, defaultSeasonId) 1370 .then(function (response) { 1371 if ($scope.allSeasonsFromMasterSeason) { 1372 vm.seasons = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allseasons') }].concat(response.data.seasons); 1373 } else { 1374 vm.seasons = response.data.seasons; 1375 } 1376 1377 vm.seasons = filterHideInDropdowns(vm.seasons); 1378 vm.filters.season = defaultSeasonId ? defaultSeasonId : response.data.defaultseasonid; 1379 initializeDivisions(response.data.divisions, defaultDivisionId); 1380 1381 if (vm.filters.season == 'all') { 1382 getAllTeams(defaultTeamId); 1383 } 1384 else { 1385 getTeams(defaultTeamId); 1386 } 1387 }) 1388 .catch(function (error) { 1389 bugsnag.notify(error); 1390 }); 1391 } else { 1392 seasonService.getSeasonsByContainerIdDivisions(__solutionId__, defaultContainerId) 1393 .then(function (response) { 1394 //let totale = response.data.divisions; 1395 vm.seasons = response.data.seasons; 1396 1397 vm.seasons = filterHideInDropdowns(vm.seasons); 1398 1399 if (defaultSeasonId) { 1400 vm.filters.season = defaultSeasonId; 1401 } else if (response.data.seasons && response.data.seasons[0]) { 1402 vm.filters.season = response.data.seasons[0].Id; 1403 } else { 1404 vm.filters.season = undefined; 1405 } 1406 initializeDivisions(response.data.divisions, defaultDivisionId); 1407 1408 if (vm.filters.season == 'all') { 1409 getAllTeams(defaultTeamId); 1410 } 1411 else { 1412 getTeams(defaultTeamId); 1413 } 1414 }) 1415 .catch(function (error) { 1416 bugsnag.notify(error); 1417 }); 1418 } 1419 } 1420 1421 function getSeasons(defaultSeasonId, defaultDivisionId, defaultTeamId) { 1422 if (!$scope.divisionsPage) { 1423 seasonService.getSeasonsBySolutionId(__solutionId__) 1424 .then(function (response) { 1425 var prepend = $scope.prependSeasons || []; 1426 vm.filters.season = defaultSeasonId ? defaultSeasonId : $localStorage.solution.defaultSeasonId.toString(); 1427 if ($scope.allSeasons) { 1428 vm.seasons = prepend.concat([{ Id: 'all', Name: $translate.instant('directives.filter.labels.allseasons') }]).concat(response.data); 1429 } else { 1430 vm.seasons = prepend.concat(response.data); 1431 } 1432 vm.seasons = filterHideInDropdowns(vm.seasons); 1433 1434 if (typeof vm.filters.season !== 'number' && isNaN(parseInt(vm.filters.season))) { 1435 getAllDivisions(defaultDivisionId, defaultTeamId) 1436 } else { 1437 getDivisions(vm.filters.season, defaultDivisionId, defaultTeamId); 1438 } 1439 }) 1440 .catch(function (error) { 1441 bugsnag.notify(error); 1442 }); 1443 } else { 1444 seasonService.getSeasonsBySolutionIdDivisions(__solutionId__) 1445 .then(function (response) { 1446 if (response.data.length > 0) { 1447 vm.filters.season = defaultSeasonId ? defaultSeasonId : response.data[0].Id; 1448 vm.seasons = response.data; 1449 vm.seasons = filterHideInDropdowns(vm.seasons); 1450 getDivisions(vm.filters.season, defaultDivisionId, defaultTeamId); 1451 } 1452 }) 1453 .catch(function (error) { 1454 bugsnag.notify(error); 1455 }); 1456 } 1457 } 1458 1459 function getAllDivisions(defaultDivisionId, defaultTeamId) { 1460 divisionService.getDivisionsBySolutionId(__solutionId__) 1461 .then(function (response) { 1462 initializeDivisions(response.data, defaultDivisionId); 1463 getAllTeams(defaultTeamId); 1464 }) 1465 .catch(function (error) { 1466 bugsnag.notify(error); 1467 }); 1468 } 1469 1470 function getDivisions(defaultSeasonId, defaultDivisionId, defaultTeamId) { 1471 divisionService.getDivisionsBySeasonId(__solutionId__, defaultSeasonId) 1472 .then(function (response) { 1473 initializeDivisions(response.data, defaultDivisionId); 1474 getTeams(defaultTeamId); 1475 }) 1476 .catch(function (error) { 1477 bugsnag.notify(error); 1478 }); 1479 } 1480 1481 function getAllTeams(defaultTeamId) { 1482 if ($scope.team) { 1483 vm.filters.team = defaultTeamId ? defaultTeamId : 'all'; 1484 teamService.getTeamsBySolutionId(__solutionId__) 1485 .then(function (response) { 1486 vm.teams = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allteams') }];
1487 response.data.results.forEach(function (team) { 1488 vm.teams.push({ 1489 Id: team.id, 1490 Name: team.name, 1491 division: { 1492 id: team.divisionId, 1493 name: team.division 1494 } 1495 }); 1496 }); 1497 teams = vm.teams; 1498 change(); 1499 if (!componentMounting) { 1500 setParams(); 1501 } 1502 componentMounting = false; 1503 }) 1504 .catch(function (error) { 1505 bugsnag.notify(error); 1506 }); 1507 } else { 1508 finishFiltering(); 1509 } 1510 } 1511 1512 function getTeams(defaultTeamId) { 1513 if ($scope.team) { 1514 vm.filters.team = defaultTeamId ? defaultTeamId : vm.filters.team; 1515 teamService.getTeamsBySeasonId(__solutionId__, vm.filters.season) 1516 .then(function (response) { 1517 vm.teams = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allteams') }]; 1518 response.data.forEach(function (team) { 1519 vm.teams.push({ 1520 Id: team.id, 1521 Name: team.name, 1522 division: { 1523 id: team.divisionId, 1524 name: team.division 1525 } 1526 }); 1527 }); 1528 teams = vm.teams; 1529 change(); 1530 if (!componentMounting) { 1531 setParams(); 1532 } 1533 componentMounting = false; 1534 filterTeamsFromSelectedDivision(); 1535 }) 1536 .catch(function (error) { 1537 bugsnag.notify(error); 1538 }); 1539 } else { 1540 finishFiltering(); 1541 } 1542 } 1543 1544 function finishFiltering() { 1545 change(); 1546 if (!componentMounting) { 1547 setParams(); 1548 } 1549 componentMounting = false; 1550 } 1551 1552 function filterHideInDropdowns(seasons) { 1553 if ($scope.useHideInDropdownsParameter) { 1554 return _.filter(seasons, function (season) { 1555 var hideInDropdowns = _.find(season.Parameters, { Code: 'HIDEINDROPDOWNS' }); 1556 if (!hideInDropdowns) 1557 return true; 1558 1559 return hideInDropdowns.Value !== '1'; 1560 }) 1561 } 1562 else { 1563 return seasons; 1564 } 1565 } 1566 1567 function getFacilities() { 1568 if ($scope.facility) { 1569 facilityService.getFacilitiesBySolutionId(__solutionId__) 1570 .then(function (response) { 1571 vm.facilities = vm.facilities.concat(_.filter(response.data, 'Active')); 1572 }) 1573 .catch(function (error) { 1574 bugsnag.notify(error); 1575 }); 1576 } 1577 } 1578 1579 // Helper functions 1580 function initializeDivisions(result, defaultDivisionId) { 1581 if ($scope.divisionsPage) { 1582 vm.divisions = []; 1583 if (result && result.length > 0) { 1584 Array.prototype.push.apply(vm.divisions, result); 1585 vm.filters.division = defaultDivisionId ? defaultDivisionId : result[0].Id; 1586 } 1587 } else if (result.length === 0 && !$scope.noGeneral) { 1588 vm.divisions = [ 1589 { Id: 'general', Name: $translate.instant('directives.widgets.team.standings.labels.general') } 1590 ]; 1591 vm.filters.division = defaultDivisionId ? defaultDivisionId : 'general'; 1592 } else { 1593 vm.divisions = []; 1594 if (!$scope.noGeneral) { 1595 vm.divisions = [ 1596 { Id: 'general', Name: $translate.instant('directives.widgets.team.standings.labels.general') }, 1597 ]; 1598 } 1599 vm.divisions.push({ Id: 'divisions', Name: $translate.instant('directives.widgets.team.standings.labels.divisions') }); 1600 Array.prototype.push.apply(vm.divisions, result); 1601 vm.filters.division = defaultDivisionId ? defaultDivisionId : 'divisions'; 1602 } 1603 filterTeamsFromSelectedDivision() 1604 } 1605 1606 function filterTeamsFromSelectedDivision() { 1607 if ($scope.team && teams) { 1608 if (vm.filters.division === 'divisions') { 1609 vm.teams = teams; 1610 } else { 1611 // Get divisions from division list corresponding to filter selection 1612 var divisionsFilter = _.filter(vm.divisions, function (division) { return division.Id == vm.filters.division || division.ParentId == vm.filters.division }); 1613 vm.teams = _.filter(teams, function (team) { 1614 return team.Id === 'all' || (team.division && _.find(divisionsFilter, { Id: team.division.id }) !== undefined); 1615 }); 1616 } 1617 } 1618 } 1619 1620 function setParams() { 1621 const params = {}; 1622 for (let key of Object.keys(vm.filters)) { 1623 params[FILTERS_MAPPINGS[key]] = vm.filters[key]; 1624 } 1625 hashService.setParams(params); 1626 } 1627 1628 function getParams() { 1629 const params = hashService.getParams(); 1630 const mapped_params = {}; 1631
1632 Object.keys(params).forEach(function (key) { 1633 if (FILTERS_MAPPINGS_REVERSED[key]) { 1634 mapped_params[FILTERS_MAPPINGS_REVERSED[key]] = params[key]; 1635 } 1636 }); 1637 1638 return mapped_params; 1639 } 1640 1641 function change() { 1642 clearMoreFilters(); 1643 if (typeof $scope.change == 'function') { 1644 $scope.change({ 1645 filter: { 1646 container: vm.filters.container, 1647 season: vm.filters.season, 1648 seasons: vm.seasons, 1649 division: vm.filters.division, 1650 divisions: vm.divisions, 1651 team: vm.filters.team, 1652 facility: vm.filters.facility, 1653 forceCallStandings: vm.forceCallStandings, 1654 searchText: vm.searchText, 1655 position: vm.filters.position 1656 } 1657 }); 1658 vm.forceCallStandings = false; 1659 } 1660 } 1661 1662 function applyFilters() { 1663 if (typeof $scope.applyfilters == 'function') { 1664 $scope.applyfilters({ 1665 filter: { 1666 season: vm.filters.season, 1667 seasons: vm.seasons, 1668 division: vm.filters.division, 1669 divisions: vm.divisions, 1670 team: vm.filters.team, 1671 facility: vm.filters.facility, 1672 position: vm.filters.position, 1673 forceCallStandings: vm.forceCallStandings, 1674 startDate: moment(vm.filters.startDate).format('YYYY-MM-DD HH:mm:ss'), 1675 endDate: moment(vm.filters.endDate).format('YYYY-MM-DD HH:mm:ss') 1676 } 1677 }); 1678 } 1679 } 1680 1681 function clearMoreFilters() { 1682 vm.filters.startDate = undefined; 1683 vm.filters.endDate = undefined; 1684 } 1685 } 1686})();; 1687(function () { 1688 'use strict'; 1689 1690 angular 1691 .module('app.directives') 1692 .directive('filter', filter); 1693 1694 filter.$inject = []; 1695 1696 function filter() { 1697 return { 1698 restrict: 'E', 1699 replace: true, 1700 scope: { 1701 change: '&', 1702 applyfilters: '&', 1703 allSeasonsFromMasterSeason: '=', 1704 divisionsFilter: '=', 1705 facility: '=', 1706 team: '=', 1707 daterange: '=', 1708 noGeneral: '=', 1709 allSeasons: '=', 1710 search: '=', 1711 divisionsPage: '=', 1712 prependSeasons: '=', 1713 hideSeason: '=', 1714 hideContainers: '=', 1715 categoryId: '=', 1716 seasonId: '=', 1717 useHideInDropdownsParameter: '=' 1718 }, 1719 templateUrl: 'public/v2/app/core/directives/filter/filter.tpl.html', 1720 controller: 'FilterController', 1721 controllerAs: 'filter', 1722 compile: function(element, attrs){ 1723 if (angular.isUndefined(attrs.divisionsFilter)) { 1724 attrs.divisionsFilter = 'true'; 1725 } 1726 }, 1727 link: function (scope) { 1728 1729 } 1730 }; 1731 } 1732})();; 1733(function () { 1734 'use strict'; 1735 1736 angular 1737 .module('app.directives') 1738 .controller('FormV1WidgetController', FormV1WidgetController); 1739 1740 FormV1WidgetController.$inject = ['$scope', '$q', '$sce', '$timeout', '$translate', 'FormService']; 1741 1742 function FormV1WidgetController($scope, $q, $sce, $timeout, $translate, formService) { 1743 var vm = this; 1744 var initializing = true; 1745 var initializingOptions = true; 1746 var initializingChoices = true; 1747 vm.formService = formService; 1748 vm.fields = {}; 1749 vm.choiceGroups = {}; 1750 vm.stripeElements = {}; 1751 vm.isSubmitted = false; 1752 vm.isSubmitting = false; 1753 1754 vm.payment = { 1755 options: [] 1756 }; 1757 vm.totalPrice = 0; 1758 1759 vm.paymentChoices = []; 1760 vm.files = []; 1761 1762 vm.validatePaymentOption = validatePaymentOption; 1763 vm.validatePaymentChoice = validatePaymentChoice; 1764 1765 $scope.$watch(function () { 1766 return vm.payment.options; 1767 }, function (paymentOptions) { 1768 if (angular.isDefined(paymentOptions)) { 1769 if (initializingOptions) { 1770 $timeout(function () { initializingOptions = false; }); 1771 } 1772 1773 // Recalculate total price 1774 vm.calculateTotalPrice(); 1775 } 1776 }, true); 1777 1778 $scope.$watch(function () { 1779 return vm.paymentChoices; 1780 }, function (paymentChoices) { 1781 if (angular.isDefined(paymentChoices)) { 1782 if (initializingChoices) { 1783 $timeout(function () { initializingChoices = false; }); 1784 } 1785 1786 // Recalculate total price 1787 vm.calculateTotalPrice(); 1788 } 1789 }, true); 1790 1791 $scope.$watch(function () { 1792 return vm.paymentProducts; 1793 }, function (products) { 1794 if (angular.isDefined(products)) { 1795 if (initializing) { 1796 $timeout(function () { initializing = false; }); 1797 } 1798 1799 _.forEach(vm.paymentProducts.groups, function (products, name) { 1800 // Calculate total products total price when quantity change. 1801 products.totalPrice = 0;
1802 products.forEach((product) => { 1803 if (product.Quantity.Value > 0) { 1804 products.totalPrice += product.Quantity.Value * product.Price; 1805 } 1806 }); 1807 1808 // Validate payment products. 1809 validatePaymentProducts(products); 1810 1811 }) 1812 1813 // Recalculate total price 1814 vm.calculateTotalPrice(); 1815 } 1816 }, true); 1817 1818 vm.resetQuantity = function (product) { 1819 product.Quantity.Value = 0; 1820 }; 1821 1822 vm.setMinOrDefaultValue = function (product) { 1823 return product.Quantity.Min ? product.Quantity.Min : 0; 1824 }; 1825 1826 vm.submit = function () { 1827 vm.form.$setSubmitted(); 1828 vm.incompleteCaptcha = false; 1829 var recaptchaToken = null; 1830 1831 vm.payment.options.forEach(function (option) { 1832 validatePaymentOption(option); 1833 }) 1834 1835 vm.paymentChoices.forEach(function (choice) { 1836 validatePaymentChoice(choice); 1837 }) 1838 1839 _.forEach(vm.choiceGroups, function (choice) { 1840 validatePaymentChoice(choice); 1841 }) 1842 1843 if (angular.isDefined(vm.paymentProducts)) { 1844 _.forEach(vm.paymentProducts.groups, function (products) { 1845 validatePaymentProducts(products); 1846 }) 1847 } 1848 1849 if (vm.recaptchaEnabled) { 1850 recaptchaToken = grecaptcha.getResponse(recaptchaId); 1851 } 1852 1853 if (vm.recaptchaEnabled && !recaptchaToken) { 1854 vm.incompleteCaptcha = true; 1855 } else if (vm.form.$valid) { 1856 if (isChoicesValid() && IsPaymentChoicesValid() && IsPaymentOptionsValid() && IsPaymentProductsValid()) { 1857 // The form is submitted. 1858 vm.isSubmitted = true; 1859 vm.isSubmitting = true; 1860 1861 // Check if online payment is selected. 1862 if (vm.selectedPaymentMethod === 'online-payment') { 1863 vm.stripeElements.createToken().then(function (isSuccess) { 1864 if (isSuccess) { 1865 submit(recaptchaToken); 1866 } 1867 else { 1868 vm.isSubmitting = false; 1869 } 1870 }); 1871 } else { 1872 // Submit the form. 1873 submit(recaptchaToken); 1874 } 1875 } 1876 } 1877 } 1878 1879 vm.calculateTotalPrice = function () { 1880 vm.totalPrice = 0; 1881 1882 if (angular.isDefined(vm.payment.options)) { 1883 // Calculate for payment options 1884 vm.payment.options.forEach(function (option) { 1885 option.items.forEach(function (paymentOption) { 1886 if ((angular.isDefined(option.checked)) && 1887 (option.checked.indexOf(paymentOption.Id) != -1)) { 1888 vm.totalPrice += paymentOption.Price; 1889 } 1890 }); 1891 }); 1892 } 1893 1894 if (angular.isDefined(vm.paymentChoices)) { 1895 // Calculate for payment choices 1896 vm.paymentChoices.forEach(function (choice) { 1897 choice.items.forEach(function (paymentChoice) { 1898 if ((angular.isDefined(paymentChoice.checked)) && (paymentChoice.checked)) { 1899 vm.totalPrice += paymentChoice.Price; 1900 } 1901 }); 1902 }); 1903 } 1904 1905 if (angular.isDefined(vm.paymentProducts)) { 1906 // Calculate for products. 1907 _.forEach(vm.paymentProducts.groups, function (products, name) {
1908 products.forEach((product) => { 1909 if (product.Quantity.Value > 0) { 1910 vm.totalPrice += product.Quantity.Value * product.Price; 1911 } 1912 }); 1913 }); 1914 } 1915 }; 1916 1917 function submit(recaptchaToken) { 1918 var filePromises = []; 1919 _.forEach(vm.fields, function (field, key) { 1920 if (field.beforeSave) { 1921 filePromises.push(field.beforeSave().then(function (filedata) { 1922 return { 1923 field: key, 1924 file: filedata 1925 } 1926 })); 1927 } 1928 }) 1929 1930 $q.all(filePromises).then(function (uploadedFiles) { 1931 var serializedForm = vm.serializeForm(); 1932 var filesDataForm = []; 1933 uploadedFiles.forEach(function (file) { 1934 if (file.file && file.file.data) { 1935 filesDataForm.push(file.field + '=' + file.file.data.Filename); 1936 } 1937 }) 1938 1939 if (filesDataForm.length > 0) { 1940 serializedForm += "&" + filesDataForm.join('&'); 1941 } 1942 1943 formService.submit(__solutionId__, $scope.pageId, $scope.formId, serializedForm, recaptchaToken) 1944 .then(function (response) { 1945 if (response.data == "limitReached") { 1946 vm.showConfirmationModal(false, $translate.instant('directives.customPage.errors.limit')); 1947 vm.isSubmitting = false; 1948 vm.limitReached(); 1949 } 1950 else { 1951 vm.confirmationNumber = response.data.FormClientId; 1952 vm.showConfirmationModal(true); 1953 vm.isSubmitting = false; 1954 1955 formService.isLimitReached($scope.formId).then(function (response) { 1956 if (response.data) { 1957 vm.limitReached(); 1958 } 1959 }) 1960 } 1961 }) 1962 .catch(function (error) { 1963 vm.showConfirmationModal(false, error.data); 1964 bugsnag.notify(error); 1965 vm.isSubmitting = false; 1966 }); 1967 }) 1968 1969 1970 } 1971 1972 function isChoicesValid() { 1973 1974 var choicesIsValid = true; 1975 _.forEach(vm.choiceGroups, function (group) { 1976 if (!group.$valid) { 1977 choicesIsValid = false; 1978 return; 1979 } 1980 }) 1981 1982 return choicesIsValid; 1983 } 1984 1985 function IsPaymentChoicesValid() { 1986 var isValid = true; 1987 if (vm.paymentChoices) { 1988 vm.paymentChoices.forEach(function (choice) { 1989 if (!choice.$valid) { 1990 isValid = false; 1991 return; 1992 } 1993 }); 1994 } 1995 1996 return isValid; 1997 } 1998 1999 function IsPaymentOptionsValid() { 2000 var isValid = true; 2001 if (vm.payment.options) { 2002 vm.payment.options.forEach(function (option) { 2003 if (!option.$valid) { 2004 isValid = false; 2005 return; 2006 } 2007 }); 2008 } 2009 2010 return isValid; 2011 } 2012 2013 function IsPaymentProductsValid() { 2014 var isValid = true; 2015 if (vm.paymentProducts) { 2016 _.forEach(vm.paymentProducts.groups, function (products) { 2017 if (!products.$valid) { 2018 isValid = false; 2019 return; 2020 } 2021 }) 2022 } 2023 2024 return isValid; 2025 } 2026 2027 function validatePaymentChoice(choice) { 2028 if (!initializingChoices && choice.isMandatory) { 2029 choice.$error = true; 2030
2031 choice.items.forEach((item) => { 2032 if (item.checked) { 2033 choice.$error = false; 2034 } 2035 }); 2036 2037 choice.$valid = !choice.$error; 2038 } else { 2039 choice.$error = false; 2040 choice.$valid = !choice.$error; 2041 } 2042 } 2043 2044 function validatePaymentOption(option) { 2045 if (!initializingOptions && option.isMandatory) { 2046 option.$error = true; 2047 2048 if (option.checked) { 2049 option.items.forEach((item) => { 2050 if (option.checked.indexOf(item.Id) != -1) { 2051 option.$error = false; 2052 } 2053 }); 2054 } 2055 2056 option.$valid = !option.$error; 2057 } else { 2058 option.$error = false; 2059 option.$valid = !option.$error; 2060 } 2061 } 2062 2063 function validatePaymentProducts(products) { 2064 if (!initializing && products.isMandatory) { 2065 products.$error = true; 2066 2067 products.forEach((product) => { 2068 if (product.Quantity.Value > 0) { 2069 products.$error = false; 2070 } 2071 }); 2072 2073 products.$valid = !vm.paymentProducts.$error; 2074 } else { 2075 products.$error = false; 2076 products.$valid = !vm.paymentProducts.$error; 2077 } 2078 } 2079 } 2080})(); 2081; 2082(function () { 2083 'use strict'; 2084 2085 angular 2086 .module('app.directives') 2087 .directive('formV1', formV1) 2088 2089 formV1.$inject = ['$compile', '$timeout', '$localStorage', '$window', '$translate', 'StripeConnectService']; 2090 2091 function formV1($compile, $timeout, $localStorage, $window, $translate, stripeConnectService) { 2092 return { 2093 restrict: 'E', 2094 scope: { 2095 form: '=', 2096 formId: '=', 2097 pageId: '=' 2098 }, 2099 templateUrl: 'public/v2/app/core/directives/form-v1/form-v1.tpl.html', 2100 controller: 'FormV1WidgetController', 2101 controllerAs: 'formV1', 2102 link: function (scope, element, attr, controller) { 2103 var vm = controller; 2104 2105 vm.pageCulture = $localStorage.currentLanguage.culture.substr(0, 2); 2106 if (website.languages) { 2107 var cultureWesite = _.find(website.languages, function (language) { 2108 return language.culture == $localStorage.currentLanguage.culture; 2109 }); 2110 if (!cultureWesite) { 2111 vm.pageCulture = website.languages[0].culture.substr(0, 2); 2112 } 2113 } 2114 2115 $timeout(function () { 2116 var formDiv = element.find('.content-form'); 2117 var formToRender = ''; 2118 var form = scope.form; 2119 2120 if (form.errors && form.errors.indexOf('limitReached') != -1) { 2121 formToRender += '<span translate="directives.formV1.errors.limit"></span>'; 2122 } else { 2123 vm.recaptchaEnabled = form.form.RecaptchaEnabled; 2124 vm.hideConfirmationNumber = form.form.HideConfirmationNumber; 2125 vm.confirmationBoxMessage = _.get(getLocalization(form.form.ConfirmationBoxMessage), 'Text'); 2126 vm.confirmationBoxTitle = _.get(getLocalization(form.form.ConfirmationBoxTitle), 'Text'); 2127 vm.confirmationUrl = _.get(getLocalization(form.form.ConfirmationUrl), 'Text'); 2128 2129 if (vm.confirmationUrl) { 2130 element.find("#confirmationWindow").on('hide.bs.modal', function (e) { $window.open(vm.confirmationUrl, '_self'); }); 2131 } 2132 2133 //Add recaptcha widget rendering function 2134 if (vm.recaptchaEnabled) { 2135 window.verifyResponse = function (response) { //Simple front-end validation 2136 if (response) { 2137 vm.incompleteCaptcha = false; 2138 } 2139 scope.$apply(); 2140 } 2141 formToRender += ` 2142 <script type="text/javascript"> 2143 var recaptchaId; 2144 var onloadCallback = function() { 2145 recaptchaId = grecaptcha.render('recaptchaId', { 2146 'sitekey' : '6LdTPN4ZAAAAAFSUFbwAN_5mw-hpq8GgaZF1u3yh', 2147 'callback': verifyResponse, 2148 'theme' : 'light' 2149 }); 2150 }; 2151 </script> 2152 ` 2153 } 2154 2155 formToRender += `<form name="formV1.form">`; // Open <form> tag. 2156 2157 // TODO Move into function hidden field. 2158 // Add hidden fields. 2159 2160 // Add solution id. 2161 formToRender += `<input type="hidden" name="__solutionId" value="${__solutionId__}" />`; 2162 2163 // Concatenate actions to apply on the form. 2164 var actions = _.map(form.form.Actions, 'Name').join('|'); 2165 formToRender += `<input type="hidden" name="__actions" value="${actions}" />`; 2166 2167 // Add form identifier. 2168 formToRender += `<input type="hidden" name="__formId" value="${scope.formId}" />`; 2169 2170 // Add form email. 2171 formToRender += `<input type="hidden" name="__email" value="${form.Email}" />`; 2172 2173 // Add form support payment. 2174 if (form.form.PaymentForm !== null) { 2175 // Add hidden field to store stripe token. 2176 formToRender += `<input type="hidden" name="__stripeToken" value="" />`; 2177 formToRender += `<input type="hidden" name="__paymentDescription" value="${form.form.PaymentForm.Description}" />`; 2178 formToRender += `<input type="hidden" name="__paymentCurrency" value="${form.form.PaymentForm.Currency}" />`; 2179 } 2180 2181 formToRender += `<div class="row mt-3"><div class="col-12">`; // Open row. 2182 var columnSizeTotal = 0; 2183 2184 // Loop through all fields of the form. 2185 for (var i = 0; i < form.form.Fields.length; i++) { 2186 var field = form.form.Fields[i]; 2187 2188 vm.fields[field.Name] = ''; // 2189 2190 if (field.Type == 'checkbox') { 2191 vm.choiceGroups[field.Name] = { items: [], isMandatory: isMandatory(field) }; 2192 } 2193 2194 // Get field localization. 2195 var localization = getLocalization(field); 2196 2197 // TODO if localization 2198 2199 if (columnSizeTotal === 0) { 2200 formToRender += `<div class="form-row">`; // Start a new row. 2201 } else if ((columnSizeTotal + field.ColumnSize) > 12) { 2202 formToRender += `</div><div class="form-row">`; // Close row and start a new form-row. 2203 2204 columnSizeTotal = 0; // Reset column size count. 2205 } 2206 columnSizeTotal += field.ColumnSize; 2207 2208 formToRender += `<div class="form-group col-md-${field.ColumnSize}">`; // Open form-group 2209 2210 switch (field.Type) { 2211 case 'textzone': 2212 formToRender += `${localization.Text}`; 2213 break; 2214 2215 case 'email': 2216 case 'text': 2217 case 'phone': 2218 case 'postalcode': 2219 case 'date': 2220 // TODO Support mask 2221 // TODO Support add class 2222 formToRender += `${getLabel(field, localization)}${getInputText(field, localization)}`; 2223 formToRender += `${getValidations(field)}`; 2224 break; 2225 2226 case 'textarea': 2227 formToRender += `${getLabel(field, localization)}${getTextArea(field, localization)}`; 2228 formToRender += `${getValidations(field)}`; 2229 break; 2230 2231 case 'select': 2232 var required = isMandatory(field) ? 'required' : ''; 2233 formToRender += `${getLabel(field, localization)}<select name="${field.Name}" id="${field.Name}" ng-model="formV1.fields['${field.Name}']" class="form-control" ${required}>`; 2234 formToRender += angular.isUndefinedOrNull(localization.Placeholder) 2235 ? `<option value="" selected></option>` 2236 : `<option value="" disabled selected>${localization.Placeholder}</option>`; 2237 2238 if (angular.isUndefinedOrNull(field.StartValue)) { 2239 field.Options.forEach(function (option) { 2240 if (!option.Hidden) { 2241 var optionLocalization = getLocalization(option); 2242 formToRender += `<option value="${option.Value}" ${option.Checked ? 'selected' : ''}>${optionLocalization.Text}</option>`; 2243 } 2244 }); 2245 2246 } else { 2247 debugger; 2248 /*var startValue = 0; 2249 if (field.StartValue.Equals("DateTime.Now.Year")) 2250 { 2251 startValue = DateTime.Now.Year; 2252 } 2253 2254 for (var i = 0; i < field.Iterations; i++) 2255 { 2256 // Add options. 2257 html.Append(String.Format("<option value=\"{0}\">{0}</option>", startValue)); 2258 2259 startValue += field.Incremental; 2260 }*/ 2261 } 2262 formToRender += `</select>`; 2263 formToRender += `${getValidations(field)}`; 2264 break; 2265 2266 case 'checkbox': 2267 formToRender += `${getLabel(field, localization)}`;
2268 field.Choices.forEach(function (choice) { 2269 vm.choiceGroups[field.Name].items.push({ checked: false }); 2270 2271 if (!choice.Hidden) { 2272 var choiceLocalization = getLocalization(choice); 2273 formToRender += `<div class="form-check">`; 2274 if (angular.isUndefinedOrNull(choice.Link)) { 2275 formToRender += `<label class="form-check-label" id="${field.Name}"> 2276 <input type="checkbox" 2277 for="${field.Name}" 2278 ng-change="formV1.validatePaymentChoice(formV1.choiceGroups['${field.Name}'])" 2279 ng-model="formV1.choiceGroups['${field.Name}'].items[${vm.choiceGroups[field.Name].items.length - 1}].checked" 2280 class="form-check-input" name="${field.Name}" 2281 value="${choice.Value}" ${choice.Selected ? 'checked' : ''} />${choiceLocalization.Text}</label>`; 2282 } else { 2283 formToRender += `<input type="checkbox" 2284 ng-change="formV1.validatePaymentChoice(formV1.choiceGroups['${field.Name}'])" 2285 class="form-check-input" 2286 ng-model="formV1.choiceGroups['${field.Name}'].items[${vm.choiceGroups[field.Name].items.length - 1}].checked" 2287 name="${field.Name}" value="${choice.Value}" ${choice.Selected ? 'checked' : ''} /> 2288 <label class="form-check-label"><a href="${choice.Link}" target="_blank">${choiceLocalization.Text}</a></label>`; 2289 } 2290 formToRender += `</div>`; 2291 } 2292 }); 2293 2294 formToRender += `<div> 2295 <span ng-show="formV1.choiceGroups['${field.Name}'].$error" 2296 class="ng-invalid error">${getValidationMessage(field, 'notEmpty')}</span> 2297 </div>`; 2298 2299 break; 2300 2301 case 'radio': 2302 var required = isMandatory(field) ? 'required' : ''; 2303 formToRender += `${getLabel(field, localization)}`; 2304 field.Choices.forEach(function (choice) { 2305 if (!choice.Hidden) { 2306 var choiceLocalization = getLocalization(choice); 2307 formToRender += `<div class="form-check">`; 2308 formToRender += `<label class="form-check-label" id="${field.Name}"><input ng-model="formV1.fields['${field.Name}']" type="radio" for="${field.Name}" class="form-check-input" name="${field.Name}" value="${choice.Value}" ${required}>${choiceLocalization.Text}</label>`; 2309 formToRender += `</div>`; 2310 } 2311 }); 2312 2313 formToRender += `${getValidations(field)}`; 2314 break; 2315 2316 case 'file': 2317 formToRender += `${getLabel(field, localization)}${getFileInput(field, localization)}`; 2318 formToRender += `${getValidations(field)}`; 2319 2320 break; 2321 2322 default: 2323 formToRender += `<span>${field.Type} not supported yet!</span>`; 2324 break; 2325 } 2326 2327 formToRender += `</div>`; // Close form-group 2328 } 2329 2330 formToRender += `</div></div></div>`; // Close last form-row & row 2331 2332 formToRender += `<div class="payment-container mt-3 mb-3"></div>` 2333 2334 // Add payment form. 2335 if (form.form.PaymentForm !== null) {
2336 stripeConnectService.getStripeConnectBySolutionId(__solutionId__) 2337 .then(function (response) { 2338 var paymentFormToRender = ''; 2339 var paymentContainer = element.find('.payment-container'); 2340 2341 if (angular.isUndefinedOrNull(response.data)) { 2342 paymentFormToRender += `<div class="alert alert-warning" role="alert"><span translate="directives.formV1.labels.configurationProblem"></span></div>`; 2343 } else { 2344 paymentFormToRender += `<div class="row mt-3"><div class="col-12">`; // Open row. 2345 2346 // Show payment section title. 2347 paymentFormToRender += `<h3 translate="directives.formV1.labels.payment"></h3>`; 2348 paymentFormToRender += `<hr style="margin-top:5px;margin-bottom:15px;">`; 2349 2350 // Show descriptions & payment methods 2351 if (angular.isUndefinedOrNull(form.form.Version)) { 2352 // TODO Necessary to support legacy version? 2353 } else if (parseInt(form.form.Version) >= 2) { 2354 vm.paymentProducts = { groups: {} }; 2355 form.form.PaymentForm.PaymentItems.forEach(function (paymentItem) { 2356 switch (paymentItem.Type) { 2357 case 'ItemOptions': 2358 paymentFormToRender += addPaymentOptions(paymentItem); 2359 break; 2360 2361 case 'ItemChoices': 2362 paymentFormToRender += addPaymentChoices(paymentItem) 2363 break; 2364 2365 case 'Products': 2366 paymentFormToRender += addPaymentProducts(paymentItem) 2367 break; 2368 } 2369 }); 2370 2371 } 2372 2373 // Show total price. 2374 paymentFormToRender += addTotalPrice(); 2375 2376 // Add payment modes 2377 paymentFormToRender += addPaymentModes(form.form.PaymentForm.PaymentModes); 2378 2379 // Add payment form 2380 paymentFormToRender += `<stripe-elements elements="formV1.stripeElements" submit="formV1.submit()"></stripe-elements>`; 2381 2382 paymentFormToRender += `</div></div>` // Close row 2383 } 2384 2385 paymentContainer.append($compile(paymentFormToRender)(scope)); 2386 }) 2387 .catch(function (error) { 2388 // TODO bugsnag 2389 }); 2390 } 2391 2392 //Add recaptcha validation 2393 if (vm.recaptchaEnabled && form.form.Buttons && form.form.Buttons.length > 0) { 2394 formToRender += `<div class="form-group"> 2395 <div id="recaptchaId"></div> 2396 <span ng-show="formV1.incompleteCaptcha" class="ng-invalid error" translate="directives.formV1.labels.incompleteCaptcha"></span> 2397 </div>` 2398 } 2399 2400 // Add button to submit form. 2401 formToRender += `${getButtons(form.form.Buttons)}`; 2402 2403 formToRender += `</form>`; // Close <form> tag. 2404 2405 //Add recaptcha script 2406 if (vm.recaptchaEnabled) { 2407 formToRender += `
vendor: 113 bytes, line 2407
2407<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
2407`; 2408 } 2409 } 2410 2411 formToRender = $compile(formToRender)(scope); 2412 2413 // Replace the form placeholder with rendered form. 2414 formDiv.replaceWith(formToRender); 2415 2416 2417 }); 2418 2419 vm.serializeForm = function () { 2420 return $('input, select, textarea').not('.no-serialization').serialize(); 2421 }; 2422 2423 vm.showConfirmationModal = function (success, type) { 2424 //Success 2425 vm.isSubmittedSuccessfully = success; 2426 2427 switch (type) { 2428 case 'errorCaptcha': 2429 vm.error = $translate.instant('directives.formV1.labels.errorCaptcha'); 2430 break; 2431 2432 default: 2433 // Detail error is given by the service 2434 vm.error = type; 2435 break; 2436 } 2437 2438 element.find('#confirmationWindow').modal('show'); 2439 }; 2440 2441 vm.getLocalization = function (field) { 2442 if (field.Localizations.length > 0) { 2443 var currentLocalization = _.find(field.Localizations, function (localization) { 2444 return localization.Culture === vm.pageCulture; 2445 }); 2446 2447 return angular.isDefined(currentLocalization) ? currentLocalization : field.Localizations[0]; 2448 } 2449 }; 2450 2451 vm.selectPaymentMode = function (paymentMode) { 2452 var stripeElements = angular.element.find('.stripe-elements')[0]; 2453 2454 if (paymentMode === 'online-payment') { 2455 stripeElements.classList.add('show'); 2456 } else { 2457 stripeElements.classList.remove('show'); 2458 2459 // Clear payment information. 2460 vm.stripeElements.creditCardHolderName.val(''); 2461 vm.stripeElements.cardNumberElement.clear(); 2462 vm.stripeElements.cardExpiryElement.clear(); 2463 vm.stripeElements.cardCvcElement.clear(); 2464 } 2465 } 2466 2467 vm.clearOptions = function (paymentOption) { 2468 paymentOption.checked = undefined; 2469 } 2470 2471 vm.limitReached = function () { 2472 var limitMessage = $compile('<span translate="directives.formV1.errors.limit"></span>')(scope); 2473 2474 angular.element('form').replaceWith(limitMessage); 2475 } 2476 2477 function getLocalization(field) { 2478 if (field) { 2479 if (field.Localizations.length > 0) { 2480 var currentLocalization = _.find(field.Localizations, function (localization) { 2481 return localization.Culture === vm.pageCulture; 2482 }); 2483 2484 return angular.isDefined(currentLocalization) ? currentLocalization : field.Localizations[0]; 2485 } 2486 } 2487 return ''; 2488 } 2489 2490 function getLabel(field, localization) { 2491 try { 2492 var mandatory = isMandatory(field); 2493 2494 return `<label for="${field.Name}" ${mandatory ? 'class="font-weight-bold"' : ''}">${localization.Text} ${mandatory ? '*' : ''}</label>`; 2495 2496 } catch (error) { 2497 bugsnag.notify(error); 2498 } 2499 } 2500 2501 function getInputText(field, localization) { 2502 try { 2503 // Check the type of input. 2504 var type = isEmail(field) ? 'email' : 'text'; 2505 2506 // Check if the input is required. 2507 var required = isMandatory(field) ? 'required' : ''; 2508 2509 // Check if the input have a max length defined. 2510 var maxLength = getMaxLength(field); 2511 maxLength = angular.isDefined(maxLength) ? `ng-maxlength="${maxLength.Max}"` : ''; 2512 2513 return `<input type="${type}" name="${field.Name}" ng-model="formV1.fields['${field.Name}']" id="${field.Name}" placeholder="${localization.Placeholder !== null ? localization.Placeholder : ''}" class="form-control" ${required} ${maxLength} />`; 2514 2515 } catch (error) { 2516 bugsnag.notify(error); 2517 } 2518 } 2519 2520 function getTextArea(field, localization) { 2521 try { 2522 // Check if the input is required. 2523 var required = isMandatory(field) ? 'required' : ''; 2524 2525 // Check if the input have a max length defined. 2526 var maxLength = getMaxLength(field); 2527 maxLength = angular.isDefined(maxLength) ? `ng-maxlength="${maxLength.Max}"` : ''; 2528 2529 return `<textarea name="${field.Name}" ng-model="formV1.fields['${field.Name}']" id="${field.Name}" placeholder="${localization.Placeholder !== null ? localization.Placeholder : ''}" class="form-control" ${required} ${maxLength}></textarea>`; 2530 2531 } catch (error) { 2532 bugsnag.notify(error); 2533 } 2534 } 2535 2536 function getFileInput(field, localization) { 2537 try { 2538 // Check if the input is required. 2539 var required = isMandatory(field); 2540 var fileField = { 2541 beforeSave: null, 2542 model: null 2543 } 2544 2545 vm.fields[field.Name] = fileField; 2546 2547 return `<div> 2548 <form-file-upload before-save="formV1.fields['${field.Name}'].beforeSave" id="${field.Name}" ng-model="formV1.fields['${field.Name}'].model" is-mandatory="${required}"></form-file-upload> 2549 </div>`; 2550 } catch (error) { 2551 bugsnag.notify(error); 2552 } 2553 } 2554 2555 function getButtons(buttons) { 2556 try { 2557 var buttonsToRender = ''; 2558 buttons.forEach(function (button) { 2559 var localization = getLocalization(button); 2560 buttonsToRender += `<button type="button" ng-click="formV1.submit()" ng-disabled="formV1.isSubmitting || (formV1.isSubmitted && formV1.isSubmittedSuccessfully)" class="btn btn-primary">${localization.Text}</button>`; 2561 }); 2562 return buttonsToRender; 2563 } catch (error) { 2564 console.log(error); 2565 bugsnag.notify(error); 2566 } 2567 } 2568 2569 function addPaymentModes(modes) { 2570 vm.selectedPaymentMethod = 'online-payment'; 2571 var paymentModes = ''; 2572 2573 if (modes.length > 1) { 2574 // TODO Restructured with the rest of data. 2575 vm.paymentModes = modes; 2576 2577 paymentModes += `<ul class="payment-modes">`; 2578 paymentModes += `<li ng-repeat="paymentMode in formV1.paymentModes">`; 2579 paymentModes += `<div class="form-check">`; 2580 paymentModes += `<input 2581 class="form-check-input" 2582 type="radio" name="payment-mode" 2583 id="paymentMode_{{paymentMode.Value}}" 2584 value="{{paymentMode.Value}}" 2585 ng-model="formV1.selectedPaymentMethod" 2586 ng-click="formV1.selectPaymentMode(paymentMode.Value)">`; 2587 paymentModes += `<label 2588 class="form-check-label" 2589 for="paymentMode_{{paymentMode.Value}}">`; 2590 paymentModes += `{{formV1.getLocalization(paymentMode).Text}}`; 2591 paymentModes += `</label>`; 2592 paymentModes += `</div>`; 2593 paymentModes += `</li>`
2594 paymentModes += `</ul>` 2595 } 2596 2597 return paymentModes; 2598 } 2599 2600 function addPaymentOptions(option) { 2601 try { 2602 var paymentOptions = ''; 2603 2604 if ((angular.isDefined(option)) 2605 && (option.Items.length > 0)) { 2606 // Add group title. 2607 var groupTitle = angular.isDefined(option.Title) ? getLocalization(option.Title).Text : ''; 2608 paymentOptions += `<label class="control-label font-weight-bold">${groupTitle} ${isMandatory(option) ? '*' : ''}</label>`; 2609 2610 // TODO Generate group name 2611 //vm.payment.options.items = option.Items; 2612 var paymentOption = {}; 2613 paymentOption.name = option.Name; 2614 paymentOption.items = option.Items; 2615 paymentOption.checked = undefined; 2616 paymentOption.isMandatory = isMandatory(option); 2617 vm.payment.options.push(paymentOption); 2618 2619 if (!paymentOption.isMandatory) { 2620 paymentOptions += `<span class="clear-options" translate="directives.formV1.labels.clear" ng-click="formV1.clearOptions(formV1.payment.options[${vm.payment.options.length - 1}])">clear</span>`; 2621 } 2622 2623 paymentOptions += `<ul class="payment-options">`; 2624 paymentOptions += `<li ng-if="!paymentOption.Hidden" ng-repeat="paymentOption in formV1.payment.options[${vm.payment.options.length - 1}].items">`; 2625 paymentOptions += `<div class="form-check">`; 2626 paymentOptions += `<input 2627 type="radio" 2628 name="paymentItems_{{formV1.payment.options[${vm.payment.options.length - 1}].name}}" 2629 value="{{paymentOption.Id + '|' + paymentOption.Price}}" 2630 class="form-check-input" 2631 id="{{paymentOption.Id}}" 2632 ng-change="formV1.validatePaymentOption(formV1.payment.options[${vm.payment.options.length - 1}])" 2633 ng-model="formV1.payment.options[${vm.payment.options.length - 1}].checked">`; 2634 paymentOptions += `<label 2635 class="form-check-label" 2636 for="{{paymentOption.Id}}"> 2637 {{formV1.getLocalization(paymentOption.Name).Text}} - <strong>{{paymentOption.Price | currency}}</strong> 2638 </label>`; 2639 paymentOptions += `</div>`; 2640 paymentOptions += `</li>` 2641 paymentOptions += `</ul>` 2642 paymentOptions += `<div> 2643 <span ng-show="formV1.payment.options[${vm.payment.options.length - 1}].$error" 2644 class="ng-invalid error">${getValidationMessage(option, 'notEmpty')}</span> 2645 </div>`; 2646 } 2647 2648 return paymentOptions; 2649 } 2650 catch (error) { 2651 bugsnag.notify(error); 2652 } 2653 } 2654 2655 function addPaymentChoices(choice) { 2656 try { 2657 var paymentChoices = ''; 2658 2659 if ((angular.isDefined(choice)) 2660 && (choice.Items.length > 0)) { 2661 // Add group title. 2662 var groupTitle = angular.isDefined(choice.Title) ? getLocalization(choice.Title).Text : ''; 2663 paymentChoices += `<label class="control-label font-weight-bold">${groupTitle} ${isMandatory(choice) ? '*' : ''}</label>`; 2664 2665 // TODO Restructured with the rest of data. 2666 //vm.paymentChoices = choice.Items; 2667 var paymentChoice = {}; 2668 paymentChoice.name = choice.Name; 2669 paymentChoice.items = choice.Items; 2670 paymentChoice.isMandatory = isMandatory(choice); 2671 vm.paymentChoices.push(paymentChoice); 2672 2673 paymentChoices += `<ul class="payment-choices">`; 2674 paymentChoices += `<li ng-if="!paymentChoice.Hidden" ng-repeat="paymentChoice in formV1.paymentChoices[${vm.paymentChoices.length - 1}].items">`; 2675 paymentChoices += `<div class="form-check">`; 2676 paymentChoices += `<input 2677 type="checkbox" 2678 name="paymentItems_{{formV1.paymentChoices[${vm.paymentChoices.length - 1}].name}}" 2679 value="{{paymentChoice.Id + '|' + paymentChoice.Price}}" 2680 class="form-check-input" 2681 id="{{paymentChoice.Id}}" 2682 ng-change="formV1.validatePaymentChoice(formV1.paymentChoices[${vm.paymentChoices.length - 1}])" 2683 ng-model="paymentChoice.checked">`; 2684 paymentChoices += `<label 2685 class="form-check-label" 2686 for="{{paymentChoice.Id}}"> 2687 {{formV1.getLocalization(paymentChoice.Name).Text}} - <strong>{{paymentChoice.Price | currency}}</strong> 2688 </label>`; 2689 paymentChoices += `</div>`; 2690 paymentChoices += `</li>`
2691 paymentChoices += `<div> 2692 <span ng-show="formV1.paymentChoices[${vm.paymentChoices.length - 1}].$error" 2693 class="ng-invalid error">${getValidationMessage(choice, 'notEmpty')}</span> 2694 </div>`; 2695 paymentChoices += `</ul>` 2696 } 2697 2698 return paymentChoices; 2699 } 2700 catch (error) { 2701 bugsnag.notify(error); 2702 } 2703 } 2704 2705 function addPaymentProducts(product) { 2706 try { 2707 var paymentProducts = ''; 2708 2709 if ((angular.isDefined(product)) 2710 && (product.Items.length > 0)) { 2711 // Get group title. 2712 var groupTitle = angular.isDefined(product.Title) ? getLocalization(product.Title).Text : ''; 2713 console.log('Product.jambondeparme', product); 2714 vm.paymentProducts.groups[product.Name] = product.Items; 2715 vm.paymentProducts.groups[product.Name].isMandatory = isMandatory(product); 2716 //vm.paymentProducts.$valid = !vm.paymentProducts.isMandatory; 2717 2718 paymentProducts += `<div class="products-container"><table class="table datatable payment-products">`; 2719 2720 // *** Add table header *** // 2721 paymentProducts += `<thead>`; 2722 paymentProducts += `<tr>`; 2723 paymentProducts += `<th>${groupTitle} ${isMandatory(product) ? '*' : ''}</th>`; 2724 paymentProducts += `<th class="text-center quantity"> 2725 <span translate="directives.formV1.labels.quantity"></span> 2726 </th>`; 2727 paymentProducts += `<th class="text-center price"> 2728 <span translate="directives.formV1.labels.price"></span> 2729 </th>`; 2730 paymentProducts += `<th class="text-center subtotal"> 2731 <span translate="directives.formV1.labels.subtotal"></span> 2732 </th>`; 2733 paymentProducts += `</tr>`; 2734 paymentProducts += `</thead>`; 2735 2736 // *** Add table body *** // 2737 paymentProducts += `<tbody>`; 2738 paymentProducts += `<tr ng-if="!paymentProduct.Hidden" ng-repeat="paymentProduct in formV1.paymentProducts.groups['${product.Name}']">`; 2739 paymentProducts += `<td>{{formV1.getLocalization(paymentProduct.Name).Text}}</td>`; 2740 paymentProducts += `<td class="quantity"> 2741 <input 2742 type="number" 2743 class="form-control" 2744 name="paymentItemQuantity_{{paymentProduct.Id}}" 2745 ng-model="paymentProduct.Quantity.Value" 2746 ng-class="{'error': formV1.paymentProducts.groups['${product.Name}'].$error}" 2747 min="{{formV1.setMinOrDefaultValue(paymentProduct)}}" 2748 max="{{paymentProduct.Quantity.Max}}" /> 2749 <a 2750 href 2751 ng-click="formV1.resetQuantity(paymentProduct)">
2752 <span class="mdi mdi-close"></span> 2753 </a> 2754 </td>`; 2755 paymentProducts += `<td class="text-right">{{paymentProduct.Price | currency}}</td>`; 2756 paymentProducts += `<td class="text-right">{{paymentProduct.Quantity.Value * paymentProduct.Price | currency}}</td>`; 2757 paymentProducts += `</tbody>`; 2758 paymentProducts += `<tr>`; 2759 2760 // *** Add table footer *** // 2761 paymentProducts += `<tfoot>`; 2762 paymentProducts += `<tr>`; 2763 paymentProducts += `<td> 2764 <span 2765 ng-show="formV1.paymentProducts.groups['${product.Name}'].$error" 2766 class="ng-invalid error">${getValidationMessage(product, 'notEmpty')}</span> 2767 </td>`; 2768 paymentProducts += `<td class="text-right" colspan="2"><span>Total</span></td>`; 2769 paymentProducts += `<td class="text-right">{{formV1.paymentProducts.groups['${product.Name}'].totalPrice | currency}}</td>`; 2770 paymentProducts += `</tr>`; 2771 paymentProducts += `</tfoot>`; 2772 2773 paymentProducts += `</table></div>`; 2774 } 2775 2776 return paymentProducts; 2777 } 2778 catch (error) { 2779 bugsnag.notify(error); 2780 } 2781 } 2782 2783 function addTotalPrice() { 2784 try { 2785 return `<div class="mt-3 mb-3"><h4>Total: {{formV1.totalPrice | currency}}</h4></div>`; 2786 } 2787 catch (error) { 2788 bugsnag.notify(error); 2789 } 2790 } 2791 2792 function isEmail(field) { 2793 if (field.Validators.length > 0) { 2794 var validator = _.find(field.Validators, function (validator) { 2795 return validator.Name === 'emailAddress'; 2796 }); 2797 2798 return angular.isDefined(validator); 2799 } 2800 2801 return false; 2802 } 2803 2804 function isDate(field) { 2805 if (field.Validators.length > 0) { 2806 var validator = _.find(field.Validators, function (validator) { 2807 return validator.Name === 'date'; 2808 }); 2809 2810 return angular.isDefined(validator); 2811 } 2812 2813 return false; 2814 } 2815 2816 function isMandatory(field) { 2817 if (field.Validators.length > 0) { 2818 var validator = _.find(field.Validators, function (validator) { 2819 return validator.Name === 'notEmpty'; 2820 }); 2821 2822 return angular.isDefined(validator); 2823 } 2824 2825 return false; 2826 } 2827 2828 function getMaxLength(field) { 2829 try { 2830 if (field.Validators.length > 0) { 2831 var validator = _.find(field.Validators, function (validator) { 2832 return validator.Name === 'stringLength'; 2833 }); 2834 2835 return validator; 2836 } 2837 2838 return undefined; 2839 } catch (e) { 2840 console.error(e); 2841 } 2842 } 2843 2844 function getValidations(field) {
2845 var validationToRender = ''; 2846 if (field.Validators.length > 0) { 2847 validationToRender += `<div ng-show="formV1.form.$submitted || formV1.form['${field.Name}'].$touched">`; 2848 field.Validators.forEach(function (validator) { 2849 var localization = getLocalization(validator); 2850 2851 switch (validator.Name) { // TODO Check possibility to change only $error.«validator» 2852 case 'emailAddress': 2853 validationToRender += `<span ng-show="formV1.form['${field.Name}'].$error.email" class="ng-invalid error">${localization.Text}</span>`; 2854 break; 2855 2856 case 'notEmpty': 2857 validationToRender += `<span ng-show="formV1.form['${field.Name}'].$error.required" class="ng-invalid error">${localization.Text}</span>`; 2858 break; 2859 2860 case 'stringLength': 2861 validationToRender += `<span ng-show="formV1.form['${field.Name}'].$error.maxlength" class="ng-invalid error">${localization.Text}</span>`; 2862 break; 2863 2864 case 'date': 2865 validationToRender += `<span ng-show="formV1.form['${field.Name}'].$error.pattern" class="ng-invalid error">${localization.Text}</span>`; 2866 break; 2867 2868 default: 2869 console.log(`${validator.Name} validation is not supported yet!`); 2870 break; 2871 } 2872 }); 2873 validationToRender += `</div>`; 2874 } 2875 return validationToRender; 2876 } 2877 2878 function getValidationMessage(field, validatorName) { 2879 var message = ''; 2880 2881 field.Validators.forEach(function (validator) { 2882 if (validator.Name === validatorName) { 2883 var localization = getLocalization(validator); 2884 message = localization.Text; 2885 return; 2886 } 2887 }); 2888 2889 return message; 2890 } 2891 } 2892 }; 2893 } 2894})();; 2895(function () { 2896 'use strict'; 2897 2898 angular 2899 .module('app.directives') 2900 .controller('HelpButtonWidgetController', HelpButtonWidgetController); 2901 2902 HelpButtonWidgetController.$inject = ['$scope', '$localStorage']; 2903 2904 function HelpButtonWidgetController($scope, $localStorage) { 2905 var vm = this; 2906 vm.link = $scope.en; 2907 if ($localStorage.currentLanguage && $localStorage.currentLanguage.culture && $localStorage.currentLanguage.culture === 'fr-CA') { 2908 vm.link = $scope.fr; 2909 } 2910 } 2911})(); 2912; 2913(function () { 2914 'use strict'; 2915 2916 angular 2917 .module('app.directives') 2918 .directive('helpButton', helpButton) 2919 2920 helpButton.$inject = []; 2921 2922 function helpButton() { 2923 return { 2924 restrict: 'E', 2925 scope: { 2926 fr: '@', 2927 en: '@' 2928 }, 2929 templateUrl: 'public/v2/app/core/directives/help-button/help-button.tpl.html', 2930 controller: 'HelpButtonWidgetController', 2931 controllerAs: 'helpButton' 2932 }; 2933 } 2934})();; 2935(function () { 2936 'use strict'; 2937 2938 angular 2939 .module('app.directives') 2940 .controller('LanguageSelectorController', LanguageSelectorController); 2941 2942 LanguageSelectorController.$inject = ['$localStorage', '$window','$scope']; 2943 2944 function LanguageSelectorController($localStorage, $window, $scope) { 2945 var vm = this; 2946 vm.textColor = $scope.textColor; 2947 vm.selectedTextColor = $scope.selectedTextColor; 2948 2949 $scope.$watch('textColor', function (textColor) { 2950 vm.textColor = $scope.textColor; 2951 }) 2952 2953 $scope.$watch('selectedTextColor', function (selectedTextColor) { 2954 vm.selectedTextColor = $scope.selectedTextColor; 2955 }) 2956 2957 // Apply website values to view model object. 2958 Object.assign(vm, angular.fromJson(website)); 2959 2960 // Select default or current language. 2961 vm.selectedLanguage = angular.isUndefined($localStorage.currentLanguage) 2962 ? __defaultLanguage__ 2963 : $localStorage.currentLanguage.culture; 2964 2965 vm.formatLanguageLabel = function(language) { 2966 return language.culture.substring(0, 2); 2967 }; 2968 2969 vm.changeLanguage = function(language) { 2970 // Set the current language. 2971 $localStorage.currentLanguage = language; 2972 2973 // Reload the page. 2974 $window.location.href = `${$window.location.pathname}?lang=${language.culture}`; 2975 2976 // TODO Must have, reload the with the right page name. 2977 // ... 2978 }; 2979 } 2980})();; 2981(function () { 2982 'use strict'; 2983 2984 angular 2985 .module('app.directives') 2986 .directive('languageSelector', languageSelector) 2987 2988 languageSelector.$inject = []; 2989 2990 function languageSelector() { 2991 return { 2992 restrict: 'E', 2993 scope: { 2994 search: '&', 2995 textColor: '=', 2996 selectedTextColor: '=' 2997 }, 2998 templateUrl: 'public/v2/app/core/directives/language/selector/language-selector.tpl.html', 2999 controller: 'LanguageSelectorController', 3000 controllerAs: 'languageSelector', 3001 }; 3002 } 3003})();; 3004 3005(function () { 3006 'use strict'; 3007 3008 angular 3009 .module('app.directives') 3010 .directive('ngRepeatDone', ngRepeatDone); 3011 3012 ngRepeatDone.$inject = []; 3013 3014 function ngRepeatDone() { 3015 return { 3016 restrict: 'A', 3017 link : function(scope, element, attrs) { 3018 if (scope.$last) { 3019 scope.$eval(attrs.ngRepeatDone); 3020 } 3021 } 3022 }; 3023 } 3024})();; 3025(function () { 3026 'use strict'; 3027 3028 angular 3029 .module('app.directives') 3030 .directive('pageIsActive', PageIsActive) 3031 3032 // TODO Rename directive to reflect that it's usable only by the menu 3033 PageIsActive.$inject = ['$timeout']; 3034 3035 function PageIsActive($timeout) { 3036 return { 3037 restrict: 'A', 3038 scope: { 3039 url: '@' 3040 }, 3041 link : function(scope, element) { 3042 // TODO Check other way than setTimeout to fix directive concurrency. 3043 $timeout(function() { 3044 // Check if the current location is equal to the menu item url. 3045 if ((location.pathname === `${scope.url}`) || 3046 (location.pathname.indexOf(`${scope.url}/`) !== -1) || 3047 (location.pathname === `/${element.attr('href')}`)) { 3048 // Set active class. 3049 element.parent().addClass('active') 3050 } 3051 3052 if (angular.isDefined(scope.url)) { 3053 // Set the url of the page. 3054 element.attr('href', `${scope.url}`); 3055 } 3056 }, 100); 3057 } 3058 }; 3059 } 3060})();; 3061(function () { 3062 'use strict'; 3063 3064 angular 3065 .module('app.directives') 3066 .directive('pagination', pagination); 3067 3068 pagination.$inject = ['$window']; 3069 3070 function pagination($window) { 3071 return { 3072 restrict: 'E', 3073 replace: true, 3074 scope: { 3075 currentPage: '=', 3076 pageSize: '=', 3077 totalCount: '=', 3078 clickPage: '&', 3079 clickPrevious: '&', 3080 clickNext: '&' 3081 }, 3082 templateUrl: 'public/v2/app/core/directives/pagination/pagination.tpl.html', 3083 link: function (scope) { 3084 scope.Math = $window.Math; 3085 var pageIndexMax = 5; 3086 if ($(window).width() < 500) { 3087 pageIndexMax = 3; 3088 } 3089 var pages; 3090 var startIndex; 3091 var endIndex; 3092 3093 scope.$watchGroup(['totalCount', 'pageSize'], function() { 3094 pages = Math.ceil(scope.totalCount / scope.pageSize); 3095 startIndex = scope.currentPage; 3096 endIndex = pages <= pageIndexMax ? pages : pageIndexMax; 3097 3098 scope.pages = []; // Create empty page list. 3099 3100 for(var i = startIndex; i <= endIndex; i++) { 3101 scope.pages.push({ number: i} ); 3102 } 3103 }); 3104 3105 scope.$watch('currentPage', function() { 3106 if (scope.currentPage === 1) { 3107 startIndex = 1; 3108 endIndex = pages <= pageIndexMax ? pages : scope.currentPage + (pageIndexMax - 1); 3109 } else if (scope.currentPage === 2) { 3110 startIndex = 1; 3111 endIndex = pages <= pageIndexMax ? pages : scope.currentPage + (pageIndexMax - 2); 3112 } else if (scope.currentPage === pages) { 3113 startIndex = pages <= pageIndexMax ? pages - (pages - 1) : scope.currentPage - (pageIndexMax - 1); 3114 endIndex = pages; 3115 } else if (scope.currentPage === pages - 1) { 3116 startIndex = pages <= pageIndexMax ? pages - (pages - 1) : scope.currentPage - (pageIndexMax - 2); 3117 endIndex = scope.currentPage + 1; 3118 } else { 3119 if (pageIndexMax == 3) { 3120 startIndex = scope.currentPage - 1; 3121 endIndex = scope.currentPage + 1; 3122 } 3123 else { 3124 startIndex = scope.currentPage - 2; 3125 endIndex = scope.currentPage + 2; 3126 } 3127 } 3128 3129 scope.pages = []; // Create empty page list. 3130 3131 for(var i = startIndex; i <= endIndex; i++) { 3132 scope.pages.push({ number: i} ); 3133 } 3134 }); 3135 3136 scope.onClickPage = function(page) { 3137 if (typeof scope.clickPage == 'function') { 3138 scope.clickPage({ page: page });
3139 } 3140 } 3141 3142 scope.onClickPrevious = function() { 3143 if (typeof scope.clickPrevious == 'function') { 3144 scope.clickPrevious(); 3145 } 3146 } 3147 3148 scope.onClickNext = function() { 3149 if (typeof scope.clickNext == 'function') { 3150 scope.clickNext(); 3151 } 3152 } 3153 } 3154 }; 3155 } 3156})();; 3157(function () { 3158 'use strict'; 3159 3160 angular 3161 .module('app.directives') 3162 .controller('SearchInputController', SearchInputController); 3163 3164 SearchInputController.$inject = ['$scope']; 3165 3166 function SearchInputController($scope) { 3167 var vm = this; 3168 3169 $scope.$watch('searchInput.text', _.debounce(function(text) { 3170 if (angular.isDefined(text)) { 3171 if (typeof $scope.search == 'function') { 3172 $scope.search({ text: text }); 3173 } 3174 } 3175 }, 300)); 3176 } 3177})();; 3178(function () { 3179 'use strict'; 3180 3181 angular 3182 .module('app.directives') 3183 .directive('searchInput', SearchInput) 3184 3185 SearchInput.$inject = []; 3186 3187 function SearchInput() { 3188 return { 3189 restrict: 'E', 3190 scope: { 3191 title: '@', 3192 search: '&' 3193 }, 3194 templateUrl: 'public/v2/app/core/directives/search-input/search-input.tpl.html', 3195 controller: 'SearchInputController', 3196 controllerAs: 'searchInput', 3197 }; 3198 } 3199})();; 3200(function () { 3201 'use strict'; 3202 3203 angular 3204 .module('app.directives') 3205 .controller('ShareButtonController', ShareButtonController); 3206 3207 ShareButtonController.$inject = ['$scope', '$element', '$window', '$timeout', '$location']; 3208 3209 function ShareButtonController($scope, $element, $window, $timeout, $location) { 3210 var vm = this; 3211 vm.twitterUrl = "https://twitter.com/intent/tweet?text=@KreezeeSports&url=" + encodeURIComponent($location.absUrl()); 3212 vm.facebookUrl = 'https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent($location.absUrl()); 3213 vm.imageUrl = $scope.imageUrl; 3214 3215 if ($scope.destinations) { 3216 vm.destinations = $scope.destinations; 3217 } 3218 else { 3219 vm.destinations = ["embed"]; 3220 } 3221 3222 $timeout(function () { 3223 $('.copy-button', $element).tooltip({ trigger: 'none' }); 3224 }); 3225 3226 vm.showModal = function () { 3227 $('.modal', $element).modal('show'); 3228 } 3229 3230 vm.embedSrc = $scope.embedSrc; 3231 3232 vm.isIframe = __iframe__; 3233 3234 vm.canCopy = navigator.clipboard != null; 3235 3236 vm.copyEmbed = function () { 3237 navigator.clipboard.writeText(vm.embedSrc).then(function () { 3238 $('.copy-button', $element).tooltip('show'); 3239 setTimeout(function () { 3240 $('.copy-button', $element).tooltip('hide'); 3241 }, 3000); 3242 }); 3243 } 3244 } 3245})();; 3246(function () { 3247 'use strict'; 3248 3249 angular 3250 .module('app.directives') 3251 .directive('shareButton', ShareButton) 3252 3253 ShareButton.$inject = []; 3254 3255 function ShareButton() { 3256 return { 3257 restrict: 'E', 3258 scope: { 3259 embedSrc: '=', 3260 destinations: '=', 3261 imageUrl: '=', 3262 hideText: '=' 3263 }, 3264 templateUrl: 'public/v2/app/core/directives/share-button/share-button.tpl.html', 3265 controller: 'ShareButtonController', 3266 controllerAs: 'shareButton', 3267 link: function (scope, element) { 3268 3269 } 3270 }; 3271 } 3272})();; 3273(function () { 3274 'use strict'; 3275 3276 angular 3277 .module('app.directives') 3278 .directive('sectionHeader', sectionHeader) 3279 3280 sectionHeader.$inject = []; 3281 3282 function sectionHeader() { 3283 return { 3284 restrict: 'E', 3285 scope: { 3286 title: '@', 3287 titleNoTranslation: '@', 3288 titleStyle: '=', 3289 }, 3290 templateUrl: 'public/v2/app/core/directives/section/header/section-header.tpl.html' 3291 }; 3292 } 3293})();; 3294(function () { 3295 'use strict'; 3296 3297 angular 3298 .module('app.directives') 3299 .directive('stripeElements', stripeElements) 3300 3301 stripeElements.$inject = ['$q', '$localStorage', '$sessionStorage']; 3302 3303 function stripeElements($q, $localStorage, $sessionStorage) { 3304 return { 3305 restrict: 'E', 3306 scope: { 3307 elements: '=', 3308 submit: '&' 3309 }, 3310 templateUrl: 'public/v2/app/core/directives/stripe/elements/stripe-elements.tpl.html', 3311 link: function (scope, element, attrs, controller) { 3312 var stripe = Stripe($sessionStorage.configurations.stripeApiKey, { locale: $localStorage.currentLanguage.culture }); 3313 var elements = stripe.elements({ 3314 fonts: [ 3315 { 3316 cssSrc: 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700' 3317 } 3318 ] 3319 }); 3320 3321 var style = { 3322 base: { 3323 iconColor: '#8898AA', 3324 color: '#555', 3325 lineHeight: '20px', 3326 fontWeight: 300, 3327 fontFamily: 'Roboto, sans-serif', 3328 fontSize: '14px', 3329 padding: '8px 12px 6px 12px', 3330 borderRadius: 0, 3331 3332 '::placeholder': { 3333 color: '#999', 3334 } 3335 } 3336 }; 3337 3338 scope.elements.creditCardHolderName = element.find('#credit
3338CardHolderName'); 3339 3340 scope.elements.cardNumberElement = elements.create('cardNumber', { style: style }); 3341 scope.elements.cardNumberElement.mount('#card-number-element'); 3342 3343 scope.elements.cardExpiryElement = elements.create('cardExpiry', { style: style }); 3344 scope.elements.cardExpiryElement.mount('#card-expiry-element'); 3345 3346 scope.elements.cardCvcElement = elements.create('cardCvc', { style: style }); 3347 scope.elements.cardCvcElement.mount('#card-cvc-element'); 3348 3349 //scope.stripeElements = scope.stripe || {}; 3350 scope.elements.createToken = function () { 3351 var extraDetails = { 3352 name: scope.elements.creditCardHolderName.val() 3353 }; 3354 3355 return $q(function (resolve, reject) { 3356 stripe.createToken(scope.elements.cardNumberElement, extraDetails) 3357 .then(function (result) { 3358 // Handle result.error or result.token 3359 if (result.error) { 3360 $('#stripe-elements-error-description').text(result.error.message); 3361 $('#stripe-elements-error').show(); 3362 console.error(result.error); 3363 resolve(false); 3364 3365 } else { 3366 // Set the create token id for the current credit card. 3367 $('#stripe-elements-error').hide(); 3368 var stripeToken = angular.element.find('input[name="__stripeToken"]')[0]; 3369 stripeToken.value = result.token.id; 3370 resolve(true); 3371 } 3372 }) 3373 }); 3374 } 3375 } 3376 }; 3377 } 3378 3379})();; 3380(function () { 3381 'use strict'; 3382 3383 angular 3384 .module('app.directives') 3385 .controller('FormFileUploadController', FormFileUploadController); 3386 3387 FormFileUploadController.$inject = ['$scope', 'FormService']; 3388 3389 function FormFileUploadController($scope, formService) { 3390 var vm = this; 3391 vm.file = null; 3392 3393 vm.fileNameChanged = function (e) { 3394 // TODO Validate size 3395 vm.file = { 3396 fileName: e.target.files[0].name 3397 }; 3398 3399 $scope.ngModel = e.target.files[0].name; 3400 3401 // Function to execute before saving 3402 $scope.beforeSave = function () { 3403 return vm.getFile().then(function (formData) { 3404 // Upload the selected file. 3405 return formService.uploadFile(formData) 3406 }) 3407 } 3408 }; 3409 3410 vm.clearFile = function () { 3411 vm.file = null; 3412 $scope.beforeSave = null; 3413 $scope.ngModel = null; 3414 vm.removeFile(); 3415 } 3416 } 3417})(); 3418; 3419(function () { 3420 'use strict'; 3421 3422 angular 3423 .module('app.directives') 3424 .directive('formFileUpload', formFileUpload); 3425 3426 formFileUpload.$inject = ['$compile', '$q']; 3427 3428 function formFileUpload($compile, $q) { 3429 return { 3430 restrict: 'E', 3431 scope: { 3432 beforeSave: '=', 3433 isMandatory: '=', 3434 ngModel: '=' 3435 }, 3436 templateUrl: 'public/v2/app/core/directives/form-file-upload/form-file-upload.tpl.html', 3437 controller: 'FormFileUploadController', 3438 controllerAs: 'fileUpload', 3439 link: function (scope, element, attributes, controller) { 3440 var vm = controller; 3441 3442 vm.name = attributes.id; 3443 vm.isMandatory = scope.isMandatory || false; 3444 3445 vm.showInputFileDialog = function () { 3446 var inputFile = element.find(`input[id=${attributes.id}]`); 3447 inputFile.trigger('click'); 3448 }; 3449 3450 vm.getFile = function () { 3451 return $q(function (resolve) { 3452 // Initialize file & file reader. 3453 var file = element.find(`#${attributes.id}`).prop('files')[0], fileReader = new FileReader(); 3454 3455 fileReader.onloadend = function () { 3456 // Create form data from selected file. 3457 var formData = new FormData(); 3458 formData.append('Filedata', file); 3459 resolve(formData); 3460 } 3461 3462 fileReader.readAsBinaryString(file); 3463 }); 3464 }; 3465 3466 vm.removeFile = function () { 3467 element.find(`#${attributes.id}`).val(''); 3468 } 3469 } 3470 }; 3471 } 3472})();; 3473(function () { 3474 'use strict'; 3475 3476 angular 3477 .module('app.directives') 3478 .controller('Page404WidgetController', Page404WidgetController); 3479 3480 Page404WidgetController.$inject = ['$scope']; 3481 3482 function Page404WidgetController($scope) { 3483 var vm = this; 3484 3485 // Apply website values to view model object. 3486 vm.widget = angular.fromJson(widgets[$scope.widget]); 3487 } 3488})(); 3489; 3490(function () { 3491 'use strict'; 3492 3493 angular 3494 .module('app.directives') 3495 .directive('page404', page404); 3496 3497 page404.$inject = []; 3498 3499 function page404() { 3500 return { 3501 restrict: 'E', 3502 scope: { 3503 widget: '=' 3504 }, 3505 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/404/404.tpl.html', 3506 controller: 'Page404WidgetController', 3507 controllerAs: 'page404' 3508 }; 3509 } 3510})();; 3511(function () { 3512 'use strict'; 3513 3514 angular 3515 .module('app.directives') 3516 .controller('AppWidgetController', AppWidgetController); 3517 3518 AppWidgetController.$inject = ['$scope', '$localStorage', 'UrlService']; 3519 3520 function AppWidgetController($scope, $localStorage, urlService) { 3521 var vm = this; 3522 vm.url = urlService; 3523 vm.abbreviation = $localStorage.solution.abbreviation; 3524 vm.logo = website.favicon; 3525 vm.culture = $localStorage.currentLanguage 3526 ? $localStorage.currentLanguage.culture.substring(0, 2) : 'fr'; 3527 3528 // Apply website values to view model object. 3529 vm.widget = angular.fromJson(widgets[$scope.widget]); 3530 } 3531})(); 3532; 3533(function () { 3534 'use strict'; 3535 3536 angular 3537 .module('app.directives') 3538 .directive('app', app); 3539 3540 app.$inject = []; 3541 3542 function app() { 3543 return { 3544 restrict: 'E', 3545 scope: { 3546 widget: '=' 3547 }, 3548 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/app/app.tpl.html', 3549 controller: 'AppWidgetController', 3550 controllerAs: 'app' 3551 }; 3552 } 3553})();; 3554(function () { 3555 'use strict'; 3556 3557 angular 3558 .module('app.directives') 3559 .controller('BracketSeedWidgetController', BracketSeedWidgetController); 3560 3561 BracketSeedWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'SeasonService', 'WebsiteEditorService']; 3562 3563 function BracketSeedWidgetController($rootScope, $scope, $localStorage, seasonService, websiteEditorService) { 3564 var vm = this; 3565 vm.widget = angular.fromJson(widgets[$scope.widget]); 3566 vm.viewBracket = 'horizontal'; 3567 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 3568 3569 //Component mount.
3570 for (var parameter in vm.widget.parameters) { 3571 switch (vm.widget.parameters[parameter].id) { 3572 case 'viewBracket': 3573 vm.viewBracket = vm.widget.parameters[parameter].value; 3574 break; 3575 } 3576 } 3577 3578 // Listener 3579 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 3580 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 3581 .then(function () { 3582 for (var parameter in vm.widget.parameters) { 3583 switch (vm.widget.parameters[parameter].id) { 3584 case 'viewBracket': 3585 vm.widget.parameters[parameter].value = data.viewBracket; 3586 vm.viewBracket = data.viewBracket; 3587 break; 3588 } 3589 } 3590 widgets[$scope.widget] = angular.toJson(vm.widget); 3591 }) 3592 .catch(function (error) { 3593 bugsnag.notify(error); 3594 }); 3595 }); 3596 3597 $scope.$on('$destroy', listener); 3598 3599 if ($scope.noFilter) { 3600 $scope.$watch('[season, division]', function () { 3601 if ($scope.season && $scope.division) { 3602 getBrackets($scope.season, $scope.division); 3603 } 3604 else { 3605 getBrackets($scope.season, $scope.division) 3606 } 3607 }); 3608 } else { 3609 vm.filter = function (filter) { 3610 getBrackets(filter.season, filter.division); 3611 } 3612 3613 } 3614 3615 function getBrackets(season, division) { 3616 vm.divisions = []; 3617 vm.rounds = []; 3618 vm.isEmpty = false; 3619 seasonService.getSeasonBySeasonId(__solutionId__, season) 3620 .then(function (response) { 3621 if (response.data.Bracket != null) { 3622 if (response.data.Bracket.divisions.length > 0) { 3623 vm.divisions = response.data.Bracket.divisions; // Get all playoffs divisions 3624 if (division !== 'divisions') { 3625 const div = vm.divisions.filter(function (d) { 3626 return d.id == division; 3627 }) 3628 vm.divisions = div || []; 3629 } 3630 } 3631 else if (response.data.Bracket.rounds.length > 0) { 3632 vm.rounds = response.data.Bracket.rounds; // Get all playoffs divisions 3633 vm.roundName = response.data.Name; 3634 } 3635 else { 3636 vm.isEmpty = true; 3637 } 3638 } 3639 else { 3640 vm.isEmpty = true; 3641 } 3642 3643 vm.isLoaded(); 3644 }) 3645 .catch(function (error) { 3646 bugsnag.notify(error); 3647 }); 3648 } 3649 } 3650})(); 3651; 3652(function () { 3653 'use strict'; 3654 3655 angular 3656 .module('app.directives') 3657 .directive('bracketSeed', bracketSeed); 3658 3659 bracketSeed.$inject = ['$window', '$document', '$timeout']; 3660 3661 function bracketSeed($window, $document, $timeout) { 3662 return { 3663 restrict: 'E', 3664 scope: { 3665 widget: '=', 3666 noFilter: '@', 3667 season: '=', 3668 division: '=' 3669 }, 3670 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/bracket-seed.tpl.html', 3671 controller: 'BracketSeedWidgetController', 3672 controllerAs: 'bracketSeed', 3673 link: function (scope, element, attr, controller) { 3674 var vm = controller; 3675 var roundsDOMElement = null; 3676 var indexDOMElement = 0; 3677 var marginRightValue = 12; 3678 3679 vm.isLoaded = function() { 3680 $timeout(function() { 3681 roundsDOMElement = element.find('ul.rounds'); 3682 3683 if (isMobile()) { 3684 // Update CSS variable with the width of the list. 3685 $document[0].documentElement.style.setProperty('--bracket-seed-round-min-width', `${roun
3685dsDOMElement.width()}px`); 3686 } 3687 }); 3688 }; 3689 3690 vm.scrollToRound = function(rounds) { 3691 if (isMobile()) { 3692 $timeout(function() { 3693 if (angular.isDefined(rounds)) { 3694 // Find active round index. 3695 var activeRoundIndex = _.findIndex(rounds, function(round) { 3696 return round.active; 3697 }); 3698 3699 // Calculate scollbar position. 3700 roundsDOMElement[indexDOMElement].scrollLeft += (roundsDOMElement.width() + marginRightValue) * activeRoundIndex; 3701 3702 // Increment DOM index. 3703 indexDOMElement += 1; 3704 } 3705 }, 100); 3706 } 3707 }; 3708 3709 // TODO Move somewhere in a service... 3710 function isMobile() { 3711 return $window.innerWidth <= 575; 3712 } 3713 } 3714 }; 3715 } 3716})();; 3717(function () { 3718 'use strict'; 3719 3720 angular 3721 .module('app.directives') 3722 .controller('BracketSeedGameController', BracketSeedGameController); 3723 3724 BracketSeedGameController.$inject = ['$scope']; 3725 3726 function BracketSeedGameController($scope) { 3727 var vm = this; 3728 vm.games = $scope.games; 3729 vm.team = $scope.team; 3730 3731 vm.getScore = function(game) { 3732 return game.status === 1 3733 ? '-' 3734 : game.hometeam.id === vm.team.id 3735 ? game.hometeam.score 3736 : game.visitingteam.score; 3737 }; 3738 3739 vm.isWinner = function(game) { 3740 return game.status === 3 3741 ? game.hometeam.id === vm.team.id 3742 ? game.hometeam.score > game.visitingteam.score 3743 : game.hometeam.score < game.visitingteam.score 3744 : false; 3745 3746 }; 3747 } 3748})(); 3749; 3750(function () { 3751 'use strict'; 3752 3753 angular 3754 .module('app.directives') 3755 .directive('bracketSeedGame', bracketSeedGame); 3756 3757 bracketSeedGame.$inject = []; 3758 3759 function bracketSeedGame() { 3760 return { 3761 restrict: 'E', 3762 scope: { 3763 games: '=', 3764 team: '=' 3765 }, 3766 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/game/bracket-seed-game.tpl.html', 3767 controller: 'BracketSeedGameController', 3768 controllerAs: 'bracketSeedGame' 3769 }; 3770 } 3771})();; 3772(function () { 3773 'use strict'; 3774 3775 angular 3776 .module('app.directives') 3777 .controller('BracketSeedViewWidgetController', BracketSeedViewWidgetController); 3778 3779 BracketSeedViewWidgetController.$inject = ['$scope', '$localStorage', 'SeasonService']; 3780 3781 function BracketSeedViewWidgetController($scope, $localStorage, seasonService) { 3782 var vm = this; 3783 vm.viewBracket = $scope.viewbracket; 3784 3785 3786 if ($scope.nofilter) { 3787 $scope.$watch('[season, division]', function () { 3788 if ($scope.season && $scope.division) { 3789 getBrackets($scope.season, $scope.division); 3790 } 3791 }); 3792 } else { 3793 vm.filter = function (filter) { 3794 getBrackets(filter.season, filter.division); 3795 } 3796 3797 } 3798 3799 function getBrackets(season, division) { 3800 vm.divisions = []; 3801 vm.rounds = []; 3802 seasonService.getSeasonBySeasonId(__solutionId__, season) 3803 .then(function (response) { 3804 if (response.data.Bracket.divisions.length > 0) { 3805 vm.divisions = response.data.Bracket.divisions; // Get all playoffs divisions 3806 if (division !== 'divisions') { 3807 const div = vm.divisions.find(function (d) { 3808 return d.id == division; 3809 }) 3810 vm.divisions = [div]; 3811 } 3812 } else { 3813 vm.rounds = response.data.Bracket.rounds; // Get all playoffs rounds 3814 } 3815 3816 vm.isLoaded(); 3817 }) 3818 .catch(function (error) { 3819 bugsnag.notify(error); 3820 }); 3821 } 3822 } 3823})(); 3824; 3825(function () { 3826 'use strict'; 3827 3828 angular 3829 .module('app.directives') 3830 .directive('bracketSeedView', bracketSeedView); 3831 3832 bracketSeedView.$inject = []; 3833 3834 function bracketSeedView() { 3835 return { 3836 restrict: 'E', 3837 scope: { 3838 nofilter: '@', 3839 season: '=', 3840 division: '=', 3841 viewbracket: '=' 3842 }, 3843 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/view/bracket-seed-view.tpl.html', 3844 controller: 'BracketSeedViewWidgetController', 3845 controllerAs: 'bracketSeedView', 3846 }; 3847 } 3848})();; 3849(function () { 3850 'use strict'; 3851 3852 angular 3853 .module('app.directives') 3854 .controller('BracketSeedMatchupController', BracketSeedMatchupController); 3855 3856 BracketSeedMatchupController.$inject = ['$scope', '$translate']; 3857 3858 function BracketSeedMatchupController($scope, $translate) { 3859 var vm = this; 3860 3861 vm.matchup = $scope.matchup; 3862 vm.maxgame = $scope.maxgame; 3863 3864 vm.getPlayoffStatus = function() { 3865 // Check if a game has been played. 3866 if ((vm.maxgame > 1) && (vm.matchup.status !== 1 && vm.matchup.games[0].status === 3)) { 3867 if (vm.matchup.teams[0].wincount > vm.matchup.teams[1].wincount) { 3868 if (vm.maxgame === vm.matchup.teams[0].wincount) { 3869 return $translate.instant('directives.widgets.bracket.seed.matchup.labels.teamWinPlayoff', { 3870 team: vm.matchup.teams[0].name, 3871 victory: vm.matchup.teams[0].wincount, 3872 defeat: vm.matchup.teams[1].wincount 3873 }); 3874 } else { 3875 return $translate.instant('directives.widgets.bracket.seed.matchup.labels.teamLeadPlayoff', { 3876 team: vm.matchup.teams[0].name, 3877 victory: vm.matchup.teams[0].wincount, 3878 defeat: vm.matchup.teams[1].wincount 3879 }); 3880 } 3881 } else if (vm.matchup.teams[0].wincount < vm.matchup.teams[1].wincount) { 3882 if (vm.maxgame === vm.matchup.teams[1].wincount) { 3883 return $translate.instant('directives.widgets.bracket.seed.matchup.labels.teamWinPlayoff', { 3884 team: vm.matchup.teams[1].name, 3885 victory: vm.matchup.teams[1].wincount, 3886 defeat: vm.matchup.teams[0].wincount 3887 }); 3888 } else { 3889 return $translate.instant('directives.widgets.bracket.seed.matchup.labels.teamLeadPlayoff', { 3890 team: vm.matchup.teams[1].name, 3891 victory: vm.matchup.teams[1].wincount, 3892 defeat: vm.matchup.teams[0].wincount 3893 }); 3894 } 3895 } else if (vm.matchup.teams[0].wincount === vm.matchup.teams[1].wincount) { 3896 return $translate.instant('directives.widgets.bracket.seed.matchup.labels.playoffTie', { 3897 victory: vm.matchup.teams[0].wincount, 3898 defeat:vm.matchup.teams[1].wincount 3899 }); 3900 } 3901 } else { 3902 return vm.matchup.name; 3903 } 3904 }; 3905 } 3906})(); 3907; 3908(function () { 3909 'use strict'; 3910 3911 angular 3912 .module('app.directives') 3913 .directive('bracketSeedMatchup', bracketSeedMatchup); 3914 3915 bracketSeedMatchup.$inject = []; 3916 3917 function bracketSeedMatchup() { 3918 return { 3919 restrict: 'E', 3920 scope: { 3921 matchup: '=', 3922 maxgame: '=' 3923 }, 3924 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/matchup/bracket-seed-matchup.tpl.html', 3925 controller: 'BracketSeedMatchupController', 3926 controllerAs: 'bracketSeedMatchup' 3927 }; 3928 } 3929})();; 3930(function () { 3931 'use strict'; 3932 3933 angular 3934 .module('app.directives') 3935 .controller('BracketSeedMatchupActionController', BracketSeedMatchupActionController); 3936 3937 BracketSeedMatchupActionController.$inject = ['$scope', '$translate', 'UrlService']; 3938 3939 function BracketSeedMatchupActionController($scope, $translate, urlService) { 3940 var vm = this;
3941 vm.currentGame = $scope.games.length === 1 ? $scope.games[0] : null; 3942 3943 vm.getGameSheetUrl = function() { 3944 return vm.currentGame !== null 3945 ? urlService.getGameSheetUrl(vm.currentGame.id) 3946 : ''; 3947 } 3948 3949 vm.getGameSummaryUrl = function() { 3950 return vm.currentGame !== null 3951 ? urlService.getGameUrl(vm.currentGame.id) 3952 : ''; 3953 } 3954 } 3955})(); 3956; 3957(function () { 3958 'use strict'; 3959 3960 angular 3961 .module('app.directives') 3962 .directive('bracketSeedMatchupAction', bracketSeedMatchupAction); 3963 3964 bracketSeedMatchupAction.$inject = []; 3965 3966 function bracketSeedMatchupAction() { 3967 return { 3968 restrict: 'E', 3969 scope: { 3970 games: '=', 3971 }, 3972 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/matchup/action/bracket-seed-matchup-action.tpl.html', 3973 controller: 'BracketSeedMatchupActionController', 3974 controllerAs: 'bracketSeedMatchupAction' 3975 }; 3976 } 3977})();; 3978(function () { 3979 'use strict'; 3980 3981 angular 3982 .module('app.directives') 3983 .controller('BracketSeedMatchupInformationController', BracketSeedMatchupInformationController); 3984 3985 BracketSeedMatchupInformationController.$inject = ['$scope', '$translate', 'UrlService']; 3986 3987 function BracketSeedMatchupInformationController($scope, $translate, urlService) { 3988 var vm = this; 3989 vm.url = urlService; 3990 vm.currentGame = $scope.matchup.games.length === 1 ? $scope.matchup.games[0] : null; 3991 vm.matchup = $scope.matchup; 3992 3993 vm.getGameNumberAndDate = function() { 3994 var returnValue = ""; 3995 if (vm.currentGame !== null) { 3996 const date = moment(vm.currentGame.date).format($translate.instant('directives.widgets.bracketSeedInformation.format.date')); 3997 const time = moment(vm.currentGame.time, "hh:mm:ss").isValid() ? moment(vm.currentGame.time, "hh:mm:ss").format("hh:mm A") : ""; 3998 returnValue = `#${vm.currentGame.number} - ${date} ${time}`; 3999 } else if (vm.matchup != null) { 4000 returnValue = vm.matchup.name; 4001 } 4002 4003 return returnValue; 4004 } 4005 } 4006})(); 4007; 4008(function () { 4009 'use strict'; 4010 4011 angular 4012 .module('app.directives') 4013 .directive('bracketSeedMatchupInformation', bracketSeedMatchupInformation); 4014 4015 bracketSeedMatchupInformation.$inject = []; 4016 4017 function bracketSeedMatchupInformation() { 4018 return { 4019 restrict: 'E', 4020 scope: { 4021 matchup: '=', 4022 }, 4023 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/matchup/information/bracket-seed-matchup-information.tpl.html', 4024 controller: 'BracketSeedMatchupInformationController', 4025 controllerAs: 'bracketSeedMatchupInformation' 4026 }; 4027 } 4028})();; 4029(function () { 4030 'use strict'; 4031 4032 angular 4033 .module('app.directives') 4034 .controller('BracketSeedRoundController', BracketSeedRoundController); 4035 4036 BracketSeedRoundController.$inject = ['$scope', '$translate']; 4037 4038 function BracketSeedRoundController($scope, $translate) { 4039 var vm = this; 4040 vm.round = $scope.round; 4041 vm.index = $scope.index; 4042 vm.maxlength = $scope.maxlength; 4043 vm.viewbracket = $scope.viewbracket; 4044 vm.division = $scope.division; 4045 4046 vm.first = (vm.maxlength == vm.index) 4047 vm.bestOfPlayoffLabel = $translate.instant('directives.widgets.bracket.seed.labels.bestOfPlayoff', { victory: vm.round.maxgame, total: (vm.round.maxgame * 2) - 1 }); 4048 } 4049})(); 4050; 4051(function () { 4052 'use strict'; 4053 4054 angular 4055 .module('app.directives') 4056 .directive('bracketSeedRound', bracketSeedRound); 4057 4058 bracketSeedRound.$inject = []; 4059 4060 function bracketSeedRound() { 4061 return { 4062 restrict: 'E', 4063 scope: { 4064 round: '=', 4065 index: '=', 4066 maxlength: '=', 4067 viewbracket: '=', 4068 division: '=', 4069 }, 4070 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/round/bracket-seed-round.tpl.html', 4071 controller: 'BracketSeedRoundController', 4072 controllerAs: 'bracketSeedRound' 4073 }; 4074 } 4075})();; 4076(function () { 4077 'use strict'; 4078 4079 angular 4080 .module('app.directives') 4081 .controller('BracketSeedTeamController', BracketSeedTeamController); 4082 4083 BracketSeedTeamController.$inject = ['$scope', 'UrlService']; 4084 4085 function BracketSeedTeamController($scope, urlService) { 4086 var vm = this; 4087 vm.url = urlService; 4088 vm.team = $scope.team; 4089 vm.games = $scope.games; 4090 vm.home = $scope.home; 4091 } 4092})(); 4093; 4094(function () { 4095 'use strict'; 4096 4097 angular 4098 .module('app.directives') 4099 .directive('bracketSeedTeam', bracketSeedTeam); 4100 4101 bracketSeedTeam.$inject = []; 4102 4103 function bracketSeedTeam() { 4104 return { 4105 restrict: 'E', 4106 scope: { 4107 games: '=', 4108 home: '=', 4109 team: '=' 4110 }, 4111 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/bracket/seed/team/bracket-seed-team.tpl.html', 4112 controller: 'BracketSeedTeamController', 4113 controllerAs: 'bracketSeedTeam' 4114 }; 4115 } 4116})();; 4117(function () { 4118 'use strict'; 4119 4120 angular 4121 .module('app.directives') 4122 .controller('DivisionsPageWidgetController', DivisionsPageWidgetController); 4123 4124 DivisionsPageWidgetController.$inject = ['$rootScope', '$scope', '$translate', 'HashService', 'WebsiteEditorService', 'TeamService', 'FacilityService']; 4125 4126 function DivisionsPageWidgetController($rootScope, $scope, $translate, hashService, websiteEditorService, teamService, facilityService) { 4127 var vm = this; 4128 var initialParams = hashService.getParams(); 4129 4130 //State variables ---------- 4131 vm.widget = angular.fromJson(widgets[$scope.widget]); 4132 vm.selectedDirectly = false; 4133 vm.divisions = undefined; 4134 vm.season = undefined; 4135 vm.division = undefined; 4136 vm.viewBracketDivision = 'horizontal'; 4137 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 4138 4139 vm.showGoalies = false; 4140 vm.showLeaders = false; 4141 vm.showPlayers = false; 4142 vm.showSuspensions = false; 4143 vm.showTeams = false; 4144 vm.showPitchers = false; 4145 4146 vm.tabs = hashService.DIVISIONS_TABS; 4147 vm.activeTab = vm.tabs.SCHEDULE; 4148 4149 vm.standings = { 4150 parameters: {} 4151 }; 4152 vm.schedule = { 4153 parameters: { 4154 defaultView: 'week', 4155 visitorRight: false, 4156 pageSize: 20, 4157 }, 4158 dateRange: undefined, 4159 view: undefined, 4160 team: 'all', 4161 facility: 'all', 4162 teams: [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allteams') }], 4163 teamsTemp: [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allteams') }], 4164 facilities: [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allfacilities') }], 4165 } 4166 vm.players = { 4167 startDate: undefined, 4168 endDate: undefined, 4169 startDateView: undefined, 4170 endDateView: undefined 4171 } 4172 vm.brackets = { 4173 season: undefined, 4174 division: undefined 4175 } 4176 4177 if (initialParams.tab) { 4178 vm.activeTab = initialParams.tab; 4179 } 4180 4181 //State functions ---------- 4182 vm.filter = function (filter) { 4183 vm.divisions = filter.divisions; 4184 vm.division = filter.division; 4185 4186 vm.brackets.season = filter.season; 4187 vm.brackets.division = filter.division; 4188 4189 vm.schedule.team = 'all'; 4190 vm.schedule.facility = 'all'; 4191 4192 if (filter.season !== vm.season) { 4193 vm.season = filter.season; 4194 getTeams(); 4195 } 4196 filterTeamsFromSelectedDivision(); 4197 } 4198 4199 vm.applyFilters = function () { 4200 vm.players.startDate = moment(vm.players.startDateView).format('YYYY-MM-DD HH:mm:ss'); 4201 vm.players.endDate = moment(vm.players.endDateView).format('YYYY-MM-DD HH:mm:ss'); 4202 } 4203 4204 vm.clearPlayerFilters = function () { 4205 vm.players.startDate = undefined; 4206 vm.players.endDate = undefined; 4207 vm.players.endDateView = undefined; 4208 vm.players.startDateView = undefined; 4209 } 4210 4211 vm.clickTab = function (tab) { 4212 vm.selectedDirectly = true; 4213 vm.activeTab = vm.tabs[tab]; 4214 hashService.setParams({ tab: vm.tabs[tab] }); 4215 } 4216 4217 vm.isActive = function (tab) { 4218 if (tab === 'STATS' && vm.activeTab.includes('stats')) { 4219 return true; 4220 } 4221 return vm.activeTab === vm.tabs[tab]; 4222 } 4223 4224 vm.isActiveSubTab = function (tab) { 4225 return vm.activeTab === vm.tabs[tab]; 4226 } 4227 4228 4229 //Component mount.
4230 for (var parameter in vm.widget.parameters) { 4231 switch (vm.widget.parameters[parameter].id) { 4232 4233 case 'columnsDisplaySelect': 4234 vm.standings.parameters.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 4235 break; 4236 case 'viewBracketDivision': 4237 vm.viewBracketDivision = vm.widget.parameters[parameter].value; 4238 break; 4239 4240 case 'sortDirection': 4241 vm.standings.parameters.sortOrder = vm.widget.parameters[parameter].value; 4242 break; 4243 4244 case 'sortStat': 4245 vm.standings.parameters.sortStatId = vm.widget.parameters[parameter].value; 4246 break; 4247 4248 case 'defaultTeamsDisplayed': 4249 vm.schedule.parameters.pageSize = vm.widget.parameters[parameter].value; 4250 break; 4251 4252 case 'defaultView': 4253 vm.schedule.parameters.defaultView = vm.widget.parameters[parameter].value; 4254 break; 4255 4256 case 'visitorRight': 4257 vm.schedule.parameters.visitorRight = (vm.widget.parameters[parameter].value === 'true'); 4258 break; 4259 4260 case 'showPlayers': 4261 vm.showPlayers = (vm.widget.parameters[parameter].value === 'true'); 4262 break; 4263 4264 case 'showLeaders': 4265 vm.showLeaders = (vm.widget.parameters[parameter].value === 'true'); 4266 break; 4267 4268 case 'showTeams': 4269 vm.showTeams = (vm.widget.parameters[parameter].value === 'true'); 4270 break; 4271 4272 case 'showGoalies': 4273 vm.showGoalies = (vm.widget.parameters[parameter].value === 'true'); 4274 break; 4275 4276 case 'showSuspensions': 4277 vm.showSuspensions = (vm.widget.parameters[parameter].value === 'true'); 4278 break; 4279 4280 case 'showPitchers': 4281 vm.showPitchers = (vm.widget.parameters[parameter].value === 'true'); 4282 break; 4283 } 4284 } 4285 getFacilities(); 4286 4287 // Listener 4288 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 4289 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 4290 .then(function () { 4291 for (var parameter in vm.widget.parameters) { 4292 switch (vm.widget.parameters[parameter].id) { 4293 4294 case 'columnsDisplaySelect': 4295 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 4296 vm.standings.parameters.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 4297 break; 4298 4299 case 'viewBracketDivision': 4300 vm.widget.parameters[parameter].value = data.viewBracketDivision; 4301 vm.viewBracketDivision = data.viewBracketDivision; 4302 break; 4303 4304 case 'sortDirection': 4305 vm.widget.parameters[parameter].value = data.sortDirection; 4306 vm.standings.parameters.sortOrder = data.sortDirection; 4307 break; 4308 4309 case 'sortStat': 4310 vm.widget.parameters[parameter].value = data.sortStat; 4311 vm.standings.parameters.sortStatId = data.sortStat; 4312 break; 4313 4314 case 'defaultTeamsDisplayed': 4315 vm.widget.parameters[parameter].value = data.defaultTeamsDisplayed; 4316 vm.schedule.parameters.pageSize = data.defaultTeamsDisplayed; 4317 break; 4318 4319 case 'defaultView': 4320 vm.widget.parameters[parameter].value = data.defaultView; 4321 vm.schedule.parameters.defaultView = data.defaultView; 4322 break; 4323 4324 case 'visitorRight': 4325 vm.widget.parameters[parameter].value = data.visitorRight.toString(); 4326 vm.schedule.parameters.visitorRight = data.visitorRight; 4327 break; 4328 4329 case 'showPlayers': 4330 vm.widget.parameters[parameter].value = data.showPlayers.toString(); 4331 vm.showPlayers = data.showPlayers; 4332 break; 4333 4334 case 'showLeaders': 4335 vm.widget.parameters[parameter].value = data.showLeaders.toString(); 4336 vm.showLeaders = data.showLeaders; 4337 break; 4338 4339 case 'showTeams': 4340 vm.widget.parameters[parameter].value = data.showTeams.toString(); 4341 vm.showTeams = data.showTeams; 4342 break; 4343 4344 case 'showGoalies': 4345 vm.widget.parameters[parameter].value = data.showGoalies.toString(); 4346 vm.showGoalies = data.showGoalies; 4347 break; 4348 4349 case 'showSuspensions': 4350 vm.widget.parameters[parameter].value = data.showSuspensions.toString(); 4351 vm.showSuspensions = data.showSuspensions; 4352 break; 4353 4354 case 'showPitchers': 4355 vm.widget.parameters[parameter].value = data.showPitchers.toString(); 4356 vm.showPitchers = data.showPitchers; 4357 break; 4358 } 4359 } 4360 widgets[$scope.widget] = angular.toJson(vm.widget); 4361 //location.reload(); 4362 }) 4363 .catch(function (error) { 4364 bugsnag.notify(error); 4365 }); 4366 }); 4367 4368 $scope.$on('$destroy', listener); 4369 4370 4371 // Location change 4372 $scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) { 4373 if (hashService.hasDivisionsTabsChanged(newUrl, oldUrl)) { 4374 locationChange(); 4375 } 4376 }); 4377 4378 function locationChange() { 4379 if (!vm.selectedDirectly) { 4380 const filtersUrl = hashService.getParams(); 4381 4382 const activeKey = Object.keys(vm.tabs).find(function (tab) { 4383 return vm.tabs[tab] === filtersUrl.tab; 4384 }); 4385 4386 if (activeKey) { 4387 vm.activeTab = vm.tabs[activeKey]; 4388 } else { 4389 vm.activeTab = vm.tabs.SCHEDULE; 4390 } 4391 } 4392 vm.selectedDirectly = false; 4393 } 4394 4395 // ********** SCHEDULE ********************************************* 4396 vm.selectTeam = function (item) { 4397 vm.schedule.team = item.Id; 4398 } 4399 4400 vm.selectFacility = function (item) { 4401 vm.schedule.facility = item.Id; 4402 } 4403 4404 vm.viewToday = function (dateRange) { 4405 vm.schedule.dateRange = dateRange; 4406 }; 4407 4408 vm.viewChange = function (view, dateRange) { 4409 vm.schedule.view = view; 4410 vm.schedule.dateRange = dateRange; 4411 }; 4412 4413 function getTeams() { 4414 vm.schedule.teams = [{ Id: 'all', Name: $translate.instant('directives.filter.labels.allteams') }]; 4415 vm.schedule.team = 'all'; 4416 teamService.getTeamsBySeasonId(__solutionId__, vm.season) 4417 .then(function (response) { 4418 response.data.forEach(function (team) { 4419 vm.schedule.teams.push({ 4420 Id: team.id, 4421 Name: team.name, 4422 division: { 4423 id: team.divisionId, 4424 name: team.division 4425 } 4426 }); 4427 }); 4428 vm.schedule.teamsTemp = vm.schedule.teams; 4429 filterTeamsFromSelectedDivision(); 4430 }) 4431 .catch(function (error) { 4432 bugsnag.notify(error); 4433 }); 4434 } 4435 4436 function getFacilities() { 4437 facilityService.getFacilitiesBySolutionId(__solutionId__) 4438 .then(function (response) { 4439 vm.schedule.facilities = vm.schedule.facilities.concat(response.data); 4440 }) 4441 .catch(function (error) { 4442 bugsnag.notify(error); 4443 }); 4444 } 4445 4446 function filterTeamsFromSelectedDivision() { 4447 if (vm.division === 'divisions') { 4448 vm.schedule.teams = vm.schedule.teamsTemp; 4449 } else { 4450 // Get divisions from division list corresponding to filter selection 4451 var divisionsFilter = _.filter(vm.divisions, function (division) { return division.Id == vm.division || division.ParentId == vm.division }); 4452 vm.schedule.teams = _.filter(vm.schedule.teamsTemp, function (team) { 4453 return team.Id === 'all' || (team.division && _.find(divisionsFilter, { Id: team.division.id }) !== undefined); 4454 }); 4455 } 4456 4457 } 4458 } 4459})(); 4460; 4461(function () { 4462 'use strict'; 4463 4464 angular 4465 .module('app.directives') 4466 .directive('divisionsPage', divisionsPage) 4467 4468 divisionsPage.$inject = []; 4469 4470 function divisionsPage() { 4471 return { 4472 restrict: 'E', 4473 scope: { 4474 widget: '=' 4475 }, 4476 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/divisions/divisions-page.tpl.html', 4477 controller: 'DivisionsPageWidgetController', 4478 controllerAs: 'divisionsPage' 4479 }; 4480 } 4481})();; 4482(function () { 4483 'use strict'; 4484 4485 angular 4486 .module('app.directives') 4487 .controller('FacilityListWidgetController', FacilityListWidgetController); 4488 4489 FacilityListWidgetController.$inject = ['$rootScope', '$scope', '$window', '$timeout', 'WebsiteEditorService', 'UrlService', 'FacilityService', 'GoogleMapService']; 4490 4491 function FacilityListWidgetController($rootScope, $scope, $window, $timeout, websiteEditorService, urlService, facilityService, googleMapService) { 4492 var vm = this; 4493 var facilities = []; 4494 4495 // State variables 4496 vm.url = urlService; 4497 vm.widget = angular.fromJson(widgets[$scope.widget]); 4498 vm.currentPage = 1; 4499 vm.pageSize = 15; 4500 vm.totalCount = 0; 4501 vm.results = []; 4502 vm.columns = []; 4503 4504 //State functions 4505 vm.clickPage = function (page) { 4506 vm.currentPage = page; 4507 facilitiesToDisplay(); 4508 }; 4509 4510 vm.clickPrevious = function () { 4511 vm.currentPage -= 1;
4512 facilitiesToDisplay(); 4513 }; 4514 4515 vm.clickNext = function () { 4516 vm.currentPage += 1; 4517 facilitiesToDisplay(); 4518 }; 4519 4520 vm.showStat = function (column) { 4521 if (isMobile() && column.visibleMobile) { 4522 return true; 4523 } else if (!isMobile() && column.visibleDesktop) { 4524 return true; 4525 } 4526 return false; 4527 } 4528 4529 vm.clickFacility = function (facility) { 4530 var url = googleMapService.getMapSearchUrl(facility.FacilityAddress); 4531 window.open(url, "_blank"); 4532 } 4533 4534 //Component mount. 4535 for (var parameter in vm.widget.parameters) { 4536 switch (vm.widget.parameters[parameter].id) { 4537 case 'columnsDisplaySelect': 4538 var columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 4539 buildColumns(columnsDisplaySelect); 4540 break; 4541 4542 case 'nbFacilitiesDisplayed': 4543 vm.pageSize = parseInt(vm.widget.parameters[parameter].value); 4544 break; 4545 } 4546 } 4547 4548 getFacilities(); 4549 4550 // Listener 4551 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 4552 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 4553 .then(function () { 4554 for (var parameter in vm.widget.parameters) { 4555 switch (vm.widget.parameters[parameter].id) { 4556 case 'columnsDisplaySelect': 4557 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 4558 var columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 4559 buildColumns(columnsDisplaySelect); 4560 break; 4561 4562 case 'nbFacilitiesDisplayed': 4563 vm.widget.parameters[parameter].value = data.nbFacilitiesDisplayed; 4564 vm.pageSize = parseInt(data.nbFacilitiesDisplayed); 4565 break; 4566 } 4567 } 4568 vm.currentPage = 1; 4569 facilitiesToDisplay(); 4570 widgets[$scope.widget] = angular.toJson(vm.widget); 4571 }) 4572 .catch(function (error) { 4573 bugsnag.notify(error); 4574 }); 4575 }); 4576 4577 $scope.$on('$destroy', listener); 4578 4579 //Helpers 4580 function getFacilities() { 4581 facilityService.getFacilitiesDetailsBySolutionId(__solutionId__) 4582 .then(function (response) { 4583 facilities = []; 4584 facilities = response.data; 4585 facilitiesToDisplay(); 4586 vm.totalCount = response.data.length; 4587 }) 4588 .catch(function (error) { 4589 bugsnag.notify(error); 4590 }); 4591 } 4592 4593 function facilitiesToDisplay() { 4594 var index1 = (vm.currentPage - 1) * vm.pageSize; 4595 var index2 = vm.currentPage * vm.pageSize; 4596 var facilitiesToDisplay = facilities.slice(index1, index2); 4597 var facilitiyList = []; 4598 facilitiesToDisplay.forEach(function (facility) { 4599 facilitiyList.push({ 4600 Name: facility.name, 4601 Abbreviation: facility.abbreviation, 4602 FacilityType: facility.facilityType, 4603 FacilityAddress: facility.facilityAddress, 4604 City: facility.city, 4605 FacilityState: facility.facilityState, 4606 FacilityStatus: facility.facilityStatus, 4607 Phone: facility.phone, 4608 Note: facility.note 4609 }); 4610 }); 4611 vm.results = facilitiyList; 4612 } 4613 4614 function buildColumns(columnsToDisplay) { 4615 vm.columns = []; 4616 columnsToDisplay.forEach(function (col) { 4617 var stat = facilityService.getFacilityStatById(col.id); 4618 vm.columns.push({ 4619 id: col.id, 4620 visibleDesktop: col.visibleDesktop, 4621 visibleMobile: col.visibleMobile, 4622 name: stat.name 4623 }); 4624 }); 4625 } 4626 4627 function isMobile() { 4628 return $window.innerWidth <= 600; 4629 } 4630 } 4631})(); 4632; 4633(function () { 4634 'use strict'; 4635 4636 angular 4637 .module('app.directives') 4638 .directive('facilityList', facilityList); 4639 4640 facilityList.$inject = []; 4641 4642 function facilityList() { 4643 return { 4644 restrict: 'E', 4645 scope: { 4646 widget: '=' 4647 }, 4648 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/facility/list/facility-list.tpl.html', 4649 controller: 'FacilityListWidgetController', 4650 controllerAs: 'facilities' 4651 }; 4652 } 4653})();; 4654(function () { 4655 'use strict'; 4656 4657 angular 4658 .module('app.directives') 4659 .controller('FacilityWidgetWidgetController', FacilityWidgetWidgetController); 4660 4661 FacilityWidgetWidgetController.$inject = ['$rootScope', '$scope', '$translate', 'WebsiteEditorService', 'UrlService', 'FacilityService', 'GoogleMapService']; 4662 4663 function FacilityWidgetWidgetController($rootScope, $scope, $translate, websiteEditorService, urlService, facilityService, googleMapService) { 4664 var vm = this; 4665 4666 // State variables 4667 vm.widget = angular.fromJson(widgets[$scope.widget]); 4668 vm.title = ""; 4669 vm.showTitle = false; 4670 vm.nbFacilitiesDisplayed = 15; 4671 vm.showStatus = true; 4672 vm.showNote = false; 4673 vm.facilities = []; 4674 vm.updatedat = ""; 4675 4676 // State functions 4677 vm.clickFacility = function (facility) { 4678 var url = googleMapService.getMapSearchUrl(facility.FacilityAddress); 4679 window.open(url, "_blank"); 4680 } 4681 4682 // Component mount
4683 for (var parameter in vm.widget.parameters) { 4684 switch (vm.widget.parameters[parameter].id) { 4685 case 'title': 4686 vm.title = vm.widget.parameters[parameter].value; 4687 break; 4688 4689 case 'showTitle': 4690 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 4691 break; 4692 4693 case 'nbFacilitiesDisplayed': 4694 vm.nbFacilitiesDisplayed = parseInt(vm.widget.parameters[parameter].value); 4695 break; 4696 4697 case 'showStatus': 4698 vm.showStatus = vm.widget.parameters[parameter].value === 'true'; 4699 break; 4700 4701 case 'showNote': 4702 vm.showNote = vm.widget.parameters[parameter].value === 'true'; 4703 break; 4704 } 4705 } 4706 4707 getFacilities(); 4708 4709 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 4710 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 4711 .then(function (response) { 4712 for (var parameter in vm.widget.parameters) { 4713 switch (vm.widget.parameters[parameter].id) { 4714 case 'title': 4715 vm.widget.parameters[parameter].value = data.title; 4716 vm.title = data.title; 4717 break; 4718 4719 case 'showTitle': 4720 vm.widget.parameters[parameter].value = data.showTitle.toString(); 4721 vm.showTitle = data.showTitle; 4722 break; 4723 4724 case 'nbFacilitiesDisplayed': 4725 vm.widget.parameters[parameter].value = data.nbFacilitiesDisplayed; 4726 vm.nbFacilitiesDisplayed = parseInt(data.nbFacilitiesDisplayed); 4727 break; 4728 4729 case 'showStatus': 4730 vm.widget.parameters[parameter].value = data.showStatus.toString(); 4731 vm.showStatus = data.showStatus; 4732 break; 4733 4734 case 'showNote': 4735 vm.widget.parameters[parameter].value = data.showNote.toString(); 4736 vm.showNote = data.showNote; 4737 break; 4738 } 4739 } 4740 getFacilities(); 4741 widgets[$scope.widget] = angular.toJson(vm.widget); 4742 }) 4743 .catch(function (error) { 4744 bugsnag.notify(error); 4745 }); 4746 }); 4747 4748 $scope.$on('$destroy', listener); 4749 4750 //Helpers 4751 function getFacilities() { 4752 facilityService.getFacilitiesDetailsWithUpdateDate(__solutionId__) 4753 .then(function (response) { 4754 vm.updatedate = moment(response.data.updateDate).format($translate.instant('directives.widgets.facility.widget.format.date')); 4755 var facilitiyList = []; 4756 response.data.facilities.slice(0, vm.nbFacilitiesDisplayed).forEach(function (facility) { 4757 facilitiyList.push({ 4758 Name: facility.name, 4759 FacilityStatus: facility.facilityStatus, 4760 Note: facility.note 4761 }); 4762 }); 4763 vm.facilities = facilitiyList; 4764 }) 4765 .catch(function (error) { 4766 bugsnag.notify(error); 4767 }); 4768 } 4769 } 4770})(); 4771; 4772(function () { 4773 'use strict'; 4774 4775 angular 4776 .module('app.directives') 4777 .directive('facilityWidget', facilityWidget); 4778 4779 facilityWidget.$inject = []; 4780 4781 function facilityWidget() { 4782 return { 4783 restrict: 'E', 4784 scope: { 4785 widget: '=' 4786 }, 4787 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/facility/widget/facility-widget.tpl.html', 4788 controller: 'FacilityWidgetWidgetController', 4789 controllerAs: 'facilityWidget' 4790 }; 4791 } 4792})();; 4793(function () { 4794 'use strict'; 4795 4796 angular 4797 .module('app.directives') 4798 .controller('FieldViewWidgetController', FieldViewWidgetController); 4799 4800 FieldViewWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService', 'ScoreboardBaseballService', 'PositionService', 'UrlService', 'SignalrService']; 4801 4802 function FieldViewWidgetController($rootScope, $scope, websiteEditorService, scoreboardBaseballService, positionService, urlService, signalrService) { 4803 var vm = this; 4804 vm.widget = angular.fromJson(widgets[$scope.widget]) 4805 vm.opened = false 4806 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 4807 .replace(/[\n\r]+/g, ' '))); 4808 vm.url = urlService 4809 4810 vm.getStyle = function () { 4811 var style = {}; 4812 if (!vm.widgetTransparency) { 4813 style['background-color'] = vm.backgroundColor; 4814 } 4815 return style; 4816 } 4817 4818 getScoreboardInfo(); 4819 4820 $rootScope.$on('onGameStatusChange', function (event, statusId) { 4821 vm.statusId = statusId; 4822 getScoreboardInfo(); 4823 }) 4824 4825 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.id)); 4826 4827 signalrConnection.on(signalrService.EVENTS.BaseballScoreboardUpdate, function (response) { 4828 var gameUpdated = angular.fromJson(response); 4829 if (gameUpdated.gameId == vm.id) { 4830 vm.fieldInfo = gameUpdated.field; 4831 $scope.$apply(); 4832 } 4833 }); 4834 4835 function getScoreboardInfo(version) { 4836 scoreboardBaseballService.getScoreboardBaseball(__solutionId__, vm.id, version) 4837 .then(function (response) { 4838 vm.fieldInfo = response.data.field 4839 }) 4840 .catch(function (error) { 4841 bugsnag.notify(error); 4842 }); 4843 } 4844
4845 for (var parameter in vm.widget.parameters) { 4846 switch (vm.widget.parameters[parameter].id) { 4847 case 'backgroundColor': 4848 vm.backgroundColor = vm.widget.parameters[parameter].value 4849 break; 4850 case 'widgetTransparency': 4851 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 4852 break; 4853 4854 } 4855 } 4856 4857 vm.getPlayerCard = function () { 4858 vm.opened = !vm.opened 4859 const { id, isDefense, number, playerAvatar, playerName, teamId, playerPosition, pos, row } = arguments[0] 4860 vm.playerId = id 4861 vm.isDefense = isDefense 4862 vm.number = number 4863 vm.playerAvatar = playerAvatar 4864 vm.playerName = playerName 4865 vm.pos = pos 4866 vm.row = row 4867 vm.playerTeam = _.filter(vm.teamList, function (team) { 4868 return team.id === teamId 4869 })[0] 4870 4871 switch (playerPosition) { 4872 case "catcher": 4873 vm.playerPosition = positionService.getPosition("baseballcatcher") 4874 break; 4875 case "batter": 4876 vm.playerPosition = positionService.getPosition("baseballdesignatedhitter") 4877 break; 4878 case "thirdbase": 4879 vm.playerPosition = positionService.getPosition("baseballthirdbase") 4880 break; 4881 case "pitcher": 4882 vm.playerPosition = positionService.getPosition("baseballpitcher") 4883 break; 4884 case "firstbase": 4885 vm.playerPosition = positionService.getPosition("baseballfirstbase") 4886 break; 4887 case "shortstop": 4888 vm.playerPosition = positionService.getPosition("baseballshortstop") 4889 break; 4890 case "secondbase": 4891 vm.playerPosition = positionService.getPosition("baseballsecondbase") 4892 break; 4893 case "fieldleft": 4894 vm.playerPosition = positionService.getPosition("baseballleftfield") 4895 break; 4896 case "fieldcenter": 4897 vm.playerPosition = positionService.getPosition("baseballcenterfield") 4898 break; 4899 case "fieldright": 4900 vm.playerPosition = positionService.getPosition("baseballrightfield") 4901 break; 4902 default: 4903 break; 4904 } 4905 } 4906 4907 vm.closeModal = function () { 4908 vm.opened = false 4909 } 4910 4911 // Triggered when parameters are changed. 4912 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 4913 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 4914 .then(function (response) { 4915 // Save parameters 4916 for (var parameter in vm.widget.parameters) { 4917 switch (vm.widget.parameters[parameter].id) { 4918 case 'backgroundColor': 4919 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 4920 vm.backgroundColor = data.backgroundColor; 4921 break; 4922 case 'widgetTransparency': 4923 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 4924 vm.widgetTransparency = data.widgetTransparency; 4925 break; 4926 } 4927 } 4928 // Update the variable. 4929 widgets[$scope.widget] = angular.toJson(vm.widget); 4930 }) 4931 .catch(function (error) { 4932 bugsnag.notify(error); 4933 }); 4934 4935 4936 }); 4937 $scope.$on('$destroy', listener); 4938 } 4939})(); 4940; 4941(function () { 4942 'use strict'; 4943 4944 angular 4945 .module('app.directives') 4946 .directive('fieldView', fieldView) 4947 4948 fieldView.$inject = []; 4949 4950 function fieldView() { 4951 return { 4952 restrict: 'E', 4953 scope: { 4954 widget: '=' 4955 }, 4956 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/field-view/field-view.tpl.html', 4957 controller: 'FieldViewWidgetController', 4958 controllerAs: 'fieldView', 4959 }; 4960 } 4961})(); 4962; 4963(function () { 4964 'use strict'; 4965 4966 angular 4967 .module('app.directives') 4968 .controller('FormWidgetWidgetController', FormWidgetWidgetController); 4969 4970 FormWidgetWidgetController.$inject = ['$rootScope', '$scope', '$timeout', 'WebsiteEditorService', 'FormService']; 4971 4972 function FormWidgetWidgetController($rootScope, $scope, $timeout, websiteEditorService, formService) { 4973 var vm = this; 4974 vm.widget = angular.fromJson(widgets[$scope.widget]); 4975 vm.formService = formService; 4976 4977 vm.pageId = 'page'; 4978 vm.title = ""; 4979 vm.showTitle = false; 4980 vm.formSelected = ''; 4981 vm.widgetTransparency = false; 4982 vm.backgroundColor = '#FFF';
4983 vm.border = { width: 0, color: '#FFFFFF', radius: 0 }; 4984 4985 // Component mount 4986 for (var parameter in vm.widget.parameters) { 4987 switch (vm.widget.parameters[parameter].id) { 4988 case 'title': 4989 vm.title = vm.widget.parameters[parameter].value; 4990 break; 4991 4992 case 'showTitle': 4993 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 4994 break; 4995 4996 case 'formSelect': 4997 vm.formSelected = vm.widget.parameters[parameter].value; 4998 4999 case 'widgetTransparency': 5000 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 5001 break; 5002 5003 case 'backgroundColor': 5004 vm.backgroundColor = vm.widget.parameters[parameter].value; 5005 break; 5006 5007 case 'border': 5008 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 5009 break; 5010 } 5011 } 5012 $timeout(function() { 5013 vm.getForm(); 5014 }); 5015 5016 // Listener 5017 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 5018 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 5019 .then(function (response) { 5020 for (var parameter in vm.widget.parameters) { 5021 switch (vm.widget.parameters[parameter].id) { 5022 // case 'title': 5023 // vm.widget.parameters[parameter].value = data.title; 5024 // vm.title = data.title; 5025 // break; 5026 5027 case 'formSelect': 5028 vm.widget.parameters[parameter].value = data.formSelect; 5029 vm.formSelected = data.formSelect; 5030 break; 5031 5032 // case 'showTitle': 5033 // vm.widget.parameters[parameter].value = data.showTitle.toString(); 5034 // vm.showTitle = data.showTitle; 5035 // break; 5036 5037 case 'widgetTransparency': 5038 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 5039 vm.widgetTransparency = data.widgetTransparency; 5040 break; 5041 5042 case 'backgroundColor': 5043 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 5044 vm.backgroundColor = data.backgroundColor; 5045 break; 5046 5047 case 'border': 5048 vm.widget.parameters[parameter].value = data.border; 5049 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 5050 break; 5051 } 5052 } 5053 widgets[$scope.widget] = angular.toJson(vm.widget); 5054 $timeout(function() { 5055 vm.getForm(); 5056 }); 5057 }) 5058 .catch(function (error) { 5059 console.log(error) 5060 bugsnag.notify(error); 5061 }); 5062 }); 5063 5064 $scope.$on('$destroy', listener); 5065 } 5066})(); 5067; 5068(function () { 5069 'use strict'; 5070 5071 angular 5072 .module('app.directives') 5073 .directive('formWidget', formWidget) 5074 5075 formWidget.$inject = ['$timeout', '$compile']; 5076 5077 function formWidget($timeout, $compile) { 5078 return { 5079 restrict: 'E', 5080 scope: { 5081 widget: '=' 5082 }, 5083 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/form/form-widget.tpl.html', 5084 controller: 'FormWidgetWidgetController', 5085 controllerAs: 'formWidget', 5086 link: function (scope, element, attr, controller) { 5087 controller.getForm = function() { 5088 var formElement = element.find('.form-selected'); 5089 controller.formService.getFormByFormId(__solutionId__, controller.pageId, controller.formSelected) 5090 .then(function (response) { 5091 controller.form = response.data; 5092 $timeout(function() { 5093 var formToRender = $compile(`<form-v1 form="formWidget.form" form-id="formWidget.formSelected" page-id="formWidget.pageId"></form-v1>`)(scope); 5094 formElement.html(formToRender); 5095 }); 5096 }) 5097 .catch(function (error) { 5098 bugsnag.notify(error); 5099 }); 5100 }; 5101 } 5102 }; 5103 } 5104})();; 5105(function () { 5106 'use strict'; 5107 5108 angular 5109 .module('app.directives') 5110 .controller('FrontOfficeFormController', FrontOfficeFormController); 5111 5112 FrontOfficeFormController.$inject = ['$rootScope', '$scope', '$sce', '$localStorage', 'WebsiteEditorService']; 5113 5114 function FrontOfficeFormController($rootScope, $scope, $sce, $localStorage, websiteEditorService) { 5115 var vm = this; 5116 vm.widget = angular.fromJson(widgets[$scope.widget]);
5117 vm.invalidUrl = false 5118 5119 vm.selectedLanguage = angular.isUndefined($localStorage.currentLanguage) 5120 ? __defaultLanguage__ 5121 : $localStorage.currentLanguage.culture; 5122 5123 5124 // Component mount 5125 for (var parameter in vm.widget.parameters) { 5126 switch (vm.widget.parameters[parameter].id) { 5127 case 'formUrl': 5128 var url = vm.widget.parameters[parameter].value; 5129 vm.formId = null; 5130 5131 if (url) { 5132 var match = url.match(/^(https?:\/\/)?(localhost:3000|front-office(?:-(dev|unit))?\.kreezee\.com)\/registrations\/embed\/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\/?$/); 5133 5134 if (match) { 5135 vm.formId = match[4]; 5136 5137 var eventMethod = (window.addEventListener ? 'addEventListener' : 'attachEvent'); 5138 var eventer = window[eventMethod]; 5139 var messageEvent = (eventMethod == 'attachEvent' ? 'onmessage' : 'message'); 5140 eventer(messageEvent, function (e) { 5141 if (e.data.id == vm.formId) { 5142 document.getElementById(vm.formId).height = e.data.height; 5143 } 5144 }); 5145 5146 var langQueryString = 'fr'; 5147 if (_.startsWith(vm.selectedLanguage, 'fr')) { 5148 langQueryString = 'fr'; 5149 } 5150 else if (_.startsWith(vm.selectedLanguage, 'en')) { 5151 langQueryString = 'en'; 5152 5153 } 5154 url += '?lang=' + langQueryString; 5155 vm.formUrl = $sce.trustAsResourceUrl(url);
5156 vm.invalidUrl = false; 5157 } 5158 else { 5159 vm.formId = null; 5160 vm.invalidUrl = true; 5161 } 5162 } 5163 break; 5164 } 5165 } 5166 5167 5168 // Listener 5169 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 5170 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 5171 .then(function (response) { 5172 for (var parameter in vm.widget.parameters) { 5173 switch (vm.widget.parameters[parameter].id) { 5174 case 'formUrl': 5175 vm.widget.parameters[parameter].value = data.formUrl; 5176 var url = vm.widget.parameters[parameter].value; 5177 vm.formId = null; 5178 5179 if (url) { 5180 var match = url.match(/^(https?:\/\/)?(localhost:3000|front-office(?:-(dev|unit))?\.kreezee\.com)\/registrations\/embed\/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\/?$/); 5181 5182 if (match) { 5183 vm.formId = match[4]; 5184 5185 var eventMethod = (window.addEventListener ? 'addEventListener' : 'attachEvent'); 5186 var eventer = window[eventMethod]; 5187 var messageEvent = (eventMethod == 'attachEvent' ? 'onmessage' : 'message'); 5188 eventer(messageEvent, function (e) { 5189 if (e.data.id == vm.formId) { 5190 document.getElementById(vm.formId).height = e.data.height; 5191 } 5192 }); 5193 5194 var langQueryString = 'fr'; 5195 if (_.startsWith(vm.selectedLanguage, 'fr')) { 5196 langQueryString = 'fr'; 5197 } 5198 else if (_.startsWith(vm.selectedLanguage, 'en')) { 5199 langQueryString = 'en'; 5200 5201 } 5202 url += '?lang=' + langQueryString; 5203 vm.formUrl = $sce.trustAsResourceUrl(url);
5204 vm.invalidUrl = false; 5205 } 5206 else { 5207 vm.formId = null; 5208 vm.invalidUrl = true; 5209 } 5210 } 5211 break; 5212 } 5213 } 5214 widgets[$scope.widget] = angular.toJson(vm.widget); 5215 }) 5216 .catch(function (error) { 5217 console.log(error) 5218 bugsnag.notify(error); 5219 }); 5220 }); 5221 5222 $scope.$on('$destroy', listener); 5223 } 5224})(); 5225; 5226(function () { 5227 'use strict'; 5228 5229 angular 5230 .module('app.directives') 5231 .directive('frontOfficeForm', frontOfficeForm) 5232 5233 frontOfficeForm.$inject = ['$timeout', '$compile']; 5234 5235 function frontOfficeForm($timeout, $compile) { 5236 return { 5237 restrict: 'E', 5238 scope: { 5239 widget: '=' 5240 }, 5241 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/front-office-form/front-office-form.tpl.html', 5242 controller: 'FrontOfficeFormController', 5243 controllerAs: 'frontOfficeForm', 5244 link: function (scope, element, attr, controller) { 5245 } 5246 }; 5247 } 5248})();; 5249(function () { 5250 'use strict'; 5251 5252 angular 5253 .module('app.directives') 5254 .controller('PitcherStarterWidgetController', PitcherStarterWidgetController); 5255 5256 PitcherStarterWidgetController.$inject = ['$scope','$rootScope', 'ScoreboardBaseballService', 'WebsiteEditorService', 'SignalrService']; 5257 5258 function PitcherStarterWidgetController($scope,$rootScope, scoreboardBaseballService, websiteEditorService, signalrService) { 5259 var vm = this; 5260 vm.widget = angular.fromJson(widgets[$scope.widget]); 5261 vm.gameDetails = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 5262 vm.isScheduled = vm.gameDetails.statusId === 1 5263 vm.pitchers = []; 5264 getLineup(); 5265 5266 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.gameDetails.id)); 5267 5268 signalrConnection.on(signalrService.EVENTS.BaseballScoreboardUpdate, function (response) { 5269 var gameUpdated = angular.fromJson(response); 5270 5271 if (gameUpdated.gameId == vm.gameDetails.id) { 5272 processResponse(gameUpdated.startingLineup) 5273 $scope.$apply(); 5274 } 5275 }); 5276 5277 // Set view model parameters. 5278 for (var parameter in vm.widget.parameters) { 5279 switch (vm.widget.parameters[parameter].id) { 5280 case 'backgroundColor': 5281 vm.backgroundColor = vm.widget.parameters[parameter].value 5282 break; 5283 case 'widgetTransparency': 5284 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 5285 break; 5286 case 'showWhenScheduled': 5287 vm.showWhenScheduled = vm.widget.parameters[parameter].value === 'true'; 5288 break; 5289 } 5290 } 5291 isShowed() 5292 5293 vm.getStyle = function () { 5294 let style = {}; 5295 if (!vm.widgetTransparency) { 5296 style['background-color'] = vm.backgroundColor; 5297 }else{ 5298 style['background-color'] = 'transparent'; 5299 style['box-shadow'] = 'none' 5300 style['border'] = 'none' 5301 } 5302 return style; 5303 } 5304 5305 vm.getInfoStyle = function () { 5306 let style = {} 5307 if(vm.widgetTransparency){ 5308 style['background-color'] = '#FFF' 5309 style['border-radius'] = '8px' 5310 style['margin'] = '4px' 5311 } 5312 return style; 5313 } 5314 5315 function isShowed(){ 5316 if(vm.showWhenScheduled && !vm.isScheduled) { 5317 vm.showWidget = false 5318 return 5319 } 5320 vm.showWidget = true 5321 } 5322 5323 function getLineup() { 5324 scoreboardBaseballService.getLineupBaseball(__solutionId__, vm.gameDetails.id) 5325 .then(function (response) { 5326 processResponse(response.data); 5327 }) 5328 .catch(function (error) { 5329 bugsnag.notify(error); 5330 }); 5331 } 5332 5333 function processResponse(response) { 5334 vm.pitchers = [];
5335 for (var team of response.teams) { 5336 var player = _.find(team.positions, { playerPosition: "pitcher" }); 5337 if (player) { 5338 var stats = getStatsFromPlayerId(player.id); 5339 vm.pitchers.push({ 5340 avatar: player.playerAvatar, 5341 name: player.playerName, 5342 number: player.playerNumber, 5343 teamName: team.teamName, 5344 stats1: getStatValue(stats, 96) + "-" + getStatValue(stats, 97), 5345 stats2: getStatValue(stats, 100), 5346 stats3: getStatValue(stats, 91) 5347 }) 5348 } else { 5349 vm.pitchers.push({ 5350 teamName: team.teamName, 5351 }) 5352 } 5353 } 5354 } 5355 5356 function getStatValue(stats, statId) { 5357 var stat = _.find(stats, { statTypeId: statId }); 5358 if (stat) { 5359 return stat.displayValue; 5360 } else { 5361 return ""; 5362 } 5363 } 5364 5365 function getStatsFromPlayerId(id) { 5366 for (var team of vm.gameDetails.teamList) { 5367 var player = _.find(team.players, { id: id }); 5368 if (player) { 5369 return player.stats; 5370 } 5371 } 5372 } 5373 5374 5375 // Triggered when parameters are changed. 5376 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 5377 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 5378 .then(function (response) { 5379 // Save parameters 5380 for (var parameter in vm.widget.parameters) { 5381 switch (vm.widget.parameters[parameter].id) { 5382 case 'backgroundColor': 5383 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 5384 vm.backgroundColor = data.backgroundColor; 5385 break; 5386 case 'widgetTransparency': 5387 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 5388 vm.widgetTransparency = data.widgetTransparency; 5389 break; 5390 case 'showWhenScheduled': 5391 vm.widget.parameters[parameter].value = data.showWhenScheduled.toString(); 5392 vm.showWhenScheduled = data.showWhenScheduled; 5393 isShowed() 5394 break; 5395 } 5396 } 5397 // Update the variable. 5398 widgets[$scope.widget] = angular.toJson(vm.widget); 5399 }) 5400 .catch(function (error) { 5401 bugsnag.notify(error); 5402 }); 5403 }); 5404 $scope.$on('$destroy', listener); 5405 5406 } 5407})(); 5408; 5409(function () { 5410 'use strict'; 5411 5412 angular 5413 .module('app.directives') 5414 .directive('pitcherStarter', pitcherStarter) 5415 5416 pitcherStarter.$inject = []; 5417 5418 function pitcherStarter() { 5419 return { 5420 restrict: 'E', 5421 scope: { 5422 widget: '=' 5423 }, 5424 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/pitcher-starter/pitcher-starter.tpl.html', 5425 controller: 'PitcherStarterWidgetController', 5426 controllerAs: 'pitcherStarter' 5427 }; 5428 } 5429})();; 5430(function () { 5431 'use strict'; 5432 5433 angular 5434 .module('app.directives') 5435 .controller('PitcherResultWidgetController', PitcherResultWidgetController); 5436 5437 PitcherResultWidgetController.$inject = ['$scope', '$rootScope', 'WebsiteEditorService']; 5438 5439 function PitcherResultWidgetController($scope, $rootScope, websiteEditorService) { 5440 var vm = this; 5441 vm.widget = angular.fromJson(widgets[$scope.widget]); 5442 vm.gameDetails = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 5443 vm.isScheduled = vm.gameDetails.statusId === 1 5444 vm.pitchers = []; 5445 5446 getPitchers(); 5447 5448 // Set view model parameters.
5449 for (var parameter in vm.widget.parameters) { 5450 switch (vm.widget.parameters[parameter].id) { 5451 case 'backgroundColor': 5452 vm.backgroundColor = vm.widget.parameters[parameter].value 5453 break; 5454 case 'widgetTransparency': 5455 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 5456 break; 5457 } 5458 } 5459 5460 vm.getStyle = function () { 5461 let style = {}; 5462 if (!vm.widgetTransparency) { 5463 style['background-color'] = vm.backgroundColor; 5464 } else { 5465 style['background-color'] = 'transparent'; 5466 style['box-shadow'] = 'none' 5467 style['border'] = 'none' 5468 } 5469 return style; 5470 } 5471 5472 vm.getInfoStyle = function () { 5473 let style = {} 5474 if (vm.widgetTransparency) { 5475 style['background-color'] = '#FFF' 5476 style['border-radius'] = '8px' 5477 style['margin'] = '4px' 5478 } 5479 return style; 5480 } 5481 5482 function getPitchers() { 5483 let winPitcher = undefined; 5484 let losePitcher = undefined; 5485 let savePitcher = undefined; 5486 for (const team of vm.teamList) { 5487 for (const player of team.players) { 5488 const winningPitcherStat = _.find(player.stats, { statTypeId: 96 }); 5489 const losingPitcherStat = _.find(player.stats, { statTypeId: 97 }); 5490 const savePitcherStat = _.find(player.stats, { statTypeId: 98 }); 5491 if (winningPitcherStat && player.id !== 0 && winningPitcherStat.value === 1) { 5492 winPitcher = player; 5493 winPitcher.teamName = team.name; 5494 } 5495 if (losingPitcherStat && player.id !== 0 && losingPitcherStat.value === 1) { 5496 losePitcher = player; 5497 losePitcher.teamName = team.name; 5498 } 5499 if (savePitcherStat && player.id !== 0 && savePitcherStat.value === 1) { 5500 savePitcher = player; 5501 savePitcher.teamName = team.name; 5502 } 5503 } 5504 } 5505 if (winPitcher) { 5506 vm.pitchers.push({ 5507 avatar: winPitcher.avatar, 5508 name: winPitcher.name, 5509 victory: 1, 5510 number: winPitcher.number, 5511 teamName: winPitcher.teamName, 5512 stats1: getStatValue(winPitcher.stats, 96) + "-" + getStatValue(winPitcher.stats, 97), 5513 stats2: getStatValue(winPitcher.stats, 100), 5514 stats3: getStatValue(winPitcher.stats, 91) 5515 }); 5516 } 5517 if (savePitcher) { 5518 vm.pitchers.push({ 5519 avatar: savePitcher.avatar, 5520 name: savePitcher.name, 5521 victory: 2, 5522 number: savePitcher.number, 5523 teamName: savePitcher.teamName, 5524 stats1: getStatValue(savePitcher.stats, 96) + "-" + getStatValue(savePitcher.stats, 97), 5525 stats2: getStatValue(savePitcher.stats, 100), 5526 stats3: getStatValue(savePitcher.stats, 91) 5527 }); 5528 } 5529 if (losePitcher) { 5530 vm.pitchers.push({ 5531 avatar: losePitcher.avatar, 5532 name: losePitcher.name, 5533 victory: 0, 5534 number: losePitcher.number, 5535 teamName: losePitcher.teamName, 5536 stats1: getStatValue(losePitcher.stats, 96) + "-" + getStatValue(losePitcher.stats, 97), 5537 stats2: getStatValue(losePitcher.stats, 100), 5538 stats3: getStatValue(losePitcher.stats, 91) 5539 }); 5540 } 5541 } 5542 5543 function getStatValue(stats, statId) { 5544 var stat = _.find(stats, { statTypeId: statId }); 5545 if (stat) { 5546 return stat.displayValue; 5547 } else { 5548 return ""; 5549 } 5550 } 5551 5552 // Triggered when parameters are changed. 5553 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 5554 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 5555 .then(function () { 5556 // Save parameters
5557 for (var parameter in vm.widget.parameters) { 5558 switch (vm.widget.parameters[parameter].id) { 5559 case 'backgroundColor': 5560 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 5561 vm.backgroundColor = data.backgroundColor; 5562 break; 5563 case 'widgetTransparency': 5564 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 5565 vm.widgetTransparency = data.widgetTransparency; 5566 break; 5567 } 5568 } 5569 // Update the variable. 5570 widgets[$scope.widget] = angular.toJson(vm.widget); 5571 }) 5572 .catch(function (error) { 5573 bugsnag.notify(error); 5574 }); 5575 }); 5576 $scope.$on('$destroy', listener); 5577 5578 } 5579})(); 5580; 5581(function () { 5582 'use strict'; 5583 5584 angular 5585 .module('app.directives') 5586 .directive('pitcherResult', pitcherResult) 5587 5588 pitcherResult.$inject = []; 5589 5590 function pitcherResult() { 5591 return { 5592 restrict: 'E', 5593 scope: { 5594 widget: '=' 5595 }, 5596 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/pitcher-result/pitcher-result.tpl.html', 5597 controller: 'PitcherResultWidgetController', 5598 controllerAs: 'pitcherResult' 5599 }; 5600 } 5601})();; 5602(function () { 5603 'use strict'; 5604 5605 angular 5606 .module('app.directives') 5607 .controller('LivegamePlayersWidgetController', LivegamePlayersWidgetController); 5608 5609 LivegamePlayersWidgetController.$inject = ['$scope','$rootScope', 'ScoreboardBaseballService', 'WebsiteEditorService', 'SignalrService']; 5610 5611 function LivegamePlayersWidgetController($scope,$rootScope, scoreboardBaseballService, websiteEditorService, signalrService) { 5612 var vm = this; 5613 vm.widget = angular.fromJson(widgets[$scope.widget]); 5614 vm.gameDetails = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 5615 vm.lineupLivegame = []; 5616 vm.isMobile = false; 5617 vm.balls = 0; 5618 vm.strikes = 0; 5619 vm.strikeouts = 0; 5620 vm.pitcherPitchCount = { pitch: 0, strike: 0, ball: 0 } 5621 5622 getLineup(); 5623 5624 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.id)); 5625 5626 signalrConnection.on(signalrService.EVENTS.BaseballScoreboardUpdate, function (response) { 5627 var gameUpdated = angular.fromJson(response); 5628 5629 if (gameUpdated.gameId == vm.id) { 5630 processResponse(gameUpdated); 5631 $scope.$apply(); 5632 } 5633 }); 5634 5635 5636 // Set view model parameters. 5637 for (var parameter in vm.widget.parameters) { 5638 switch (vm.widget.parameters[parameter].id) { 5639 case 'backgroundColor': 5640 vm.backgroundColor = vm.widget.parameters[parameter].value 5641 break; 5642 case 'showTeamsLivegame': 5643 vm.showTeamsLivegame = vm.widget.parameters[parameter].value === 'true'; 5644 break; 5645 case 'roundedCorner': 5646 vm.roundedCorner = vm.widget.parameters[parameter].value; 5647 break; 5648 case 'widgetTransparency': 5649 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 5650 break; 5651 case 'showWhenScheduled': 5652 vm.showWhenScheduled = vm.widget.parameters[parameter].value === 'true'; 5653 break; 5654 } 5655 } 5656 isShowed() 5657 5658 vm.getStyle = function () { 5659 let style = {}; 5660 if (!vm.widgetTransparency) { 5661 style['background-color'] = vm.backgroundColor; 5662 }else{ 5663 style['background-color'] = 'transparent'; 5664 style['box-shadow'] = 'none'
5665 style['border'] = 'none' 5666 } 5667 return style; 5668 } 5669 5670 vm.getBarProgress = function () { 5671 let percentage = (vm.period * 2 - (2 - vm.round)) * 100 / (vm.periodAmount * 2); 5672 if (percentage > 95) { 5673 percentage = 95; 5674 } 5675 return percentage; 5676 } 5677 5678 vm.getInfoStyle = function () { 5679 let style = {} 5680 5681 if(vm.widgetTransparency){ 5682 style['background-color'] = '#FFF' 5683 style['border-radius'] = '8px' 5684 style['margin'] = '4px' 5685 } 5686 return style; 5687 } 5688 vm.getRounedCornerStyle = function () { 5689 let style = {} 5690 5691 5692 style['border-radius'] = `${vm.roundedCorner}px`; 5693 5694 if (!vm.widgetTransparency) { 5695 style['background-color'] = vm.backgroundColor; 5696 } else { 5697 style['background-color'] = 'transparent'; 5698 style['box-shadow'] = 'none' 5699 style['border'] = 'none' 5700 } 5701 return style; 5702 } 5703 5704 5705 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 5706 if (angular.isUndefined(newVal)) return; 5707 isShowed(); 5708 }, true); 5709 5710 $scope.$on('score:update-gameDetails', function (event, version) { 5711 getLineup(version); 5712 }) 5713 5714 function isShowed() { 5715 if (vm.gameDetails.statusId != 2 && websiteEditorService.isEditMode() == false) { 5716 vm.showWidget = false 5717 } 5718 else { 5719 vm.showWidget = true 5720 } 5721 } 5722 5723 function getLineup(version) { 5724 scoreboardBaseballService.getScoreboardBaseball(__solutionId__, vm.gameDetails.id, version).then(function (response) { 5725 processResponse(response.data); 5726 }) 5727 .catch(function (error) { 5728 bugsnag.notify(error); 5729 }); 5730 } 5731 5732 function processResponse(response) { 5733 vm.round = response.field.pos; 5734 vm.period = response.field.period; 5735 vm.periodAmount = response.score.periods.length; 5736 vm.out = response.field.out; 5737 vm.row = response.field.row; 5738 vm.lineupLivegame = []; 5739 let pitchers = response.sequence.pitchers; 5740 let hitter = response.sequence.hitter; 5741 5742 if (hitter) { 5743 var stats = getStatsFromPlayerId(hitter.id); 5744 vm.lineupLivegame.push({ 5745 position: "hitter", 5746 avatar: hitter.playerAvatar, 5747 name: hitter.playerName, 5748 number: hitter.playerNumber, 5749 teamAvatar: response.lineup.teams.find(x => x.teamId === hitter.teamId).teamAvatar, 5750 teamResult: response.score.results.find(x => x.teamId === hitter.teamId).teamResult, 5751 teamName: response.lineup.teams.find(x => x.teamId === hitter.teamId).teamName, 5752 stats1: getStatValue(stats, 96) + "-" + getStatValue(stats, 97), 5753 stats2: getStatValue(stats, 100), 5754 stats3: getStatValue(stats, 91) 5755 }) 5756 } 5757 else if (!hitter) { 5758 vm.lineupLivegame.push({ 5759 position: "hitter", 5760 teamAvatar: response.lineup.teams.find(x => x.teamId === hitter.teamId).teamAvatar, 5761 teamName: response.lineup.teams.find(x => x.teamId === hitter.teamId).teamName, 5762 }) 5763 } 5764 if (pitchers && pitchers.length > 0) { 5765 let pitcher = pitchers[pitchers.length - 1]; 5766 let stats = getStatsFromPlayerId(pitcher.id); 5767 vm.lineupLivegame.push({ 5768 position: "pitcher", 5769 avatar: pitcher.playerAvatar, 5770 name: pitcher.playerName, 5771 number: pitcher.playerNumber, 5772 teamAvatar: response.lineup.teams.find(x => x.teamId === pitcher.teamId).teamAvatar, 5773 teamResult: response.score.results.find(x => x.teamId === pitcher.teamId).teamResult, 5774 teamName: response.lineup.teams.find(x => x.teamId === pitcher.teamId).teamName, 5775 stats1: getStatValue(stats, 96) + "-" + getStatValue(stats, 97), 5776 stats2: getStatValue(stats, 100), 5777 stats3: getStatValue(stats, 91) 5778 }) 5779 5780 vm.pitcherPitchCount = response.sequence.pitchers[response.sequence.pitchers.length - 1].pitchGame || { pitch: 0, strike: 0, ball: 0 }; 5781 } 5782 else { 5783 vm.pitcherPitchCount = { pitch: 0, strike: 0, ball: 0 }; 5784 } 5785 5786 vm.balls = 0; 5787 vm.strikes = 0; 5788
5789 (response.sequence.pitchs || []).forEach(function (pitch) { 5790 if (pitch.category == 'ball') { 5791 vm.balls++; 5792 } 5793 else if (pitch.category == 'strike') { 5794 if (pitch.type != 'foulball' || vm.strikes != 2) { 5795 vm.strikes++; 5796 } 5797 } 5798 }) 5799 } 5800 5801 function getStatValue(stats, statId) { 5802 var stat = _.find(stats, { statTypeId: statId }); 5803 if (stat) { 5804 return stat.displayValue; 5805 } else { 5806 return ""; 5807 } 5808 } 5809 5810 function getStatsFromPlayerId(id) { 5811 for (var team of vm.gameDetails.teamList) { 5812 var player = _.find(team.players, { id: id }); 5813 if (player) { 5814 return player.stats; 5815 } 5816 } 5817 } 5818 5819 5820 // Triggered when parameters are changed. 5821 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 5822 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 5823 .then(function (response) { 5824 // Save parameters 5825 for (var parameter in vm.widget.parameters) { 5826 switch (vm.widget.parameters[parameter].id) { 5827 case 'backgroundColor': 5828 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 5829 vm.backgroundColor = data.backgroundColor; 5830 break; 5831 case 'showTeamsLivegame': 5832 vm.widget.parameters[parameter].value = data.showTeamsLivegame.toString(); 5833 vm.showTeamsLivegame = data.showTeamsLivegame; 5834 break; 5835 case 'roundedCorner': 5836 vm.widget.parameters[parameter].value = data.roundedCorner.toString(); 5837 vm.roundedCorner = data.roundedCorner; 5838 break; 5839 case 'widgetTransparency': 5840 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 5841 vm.widgetTransparency = data.widgetTransparency; 5842 break; 5843 case 'showWhenScheduled': 5844 vm.widget.parameters[parameter].value = data.showWhenScheduled.toString(); 5845 vm.showWhenScheduled = data.showWhenScheduled; 5846 isShowed() 5847 break; 5848 } 5849 } 5850 // Update the variable. 5851 widgets[$scope.widget] = angular.toJson(vm.widget); 5852 }) 5853 .catch(function (error) { 5854 bugsnag.notify(error); 5855 }); 5856 }); 5857 $scope.$on('$destroy', listener); 5858 5859 } 5860})(); 5861; 5862(function () { 5863 'use strict'; 5864 5865 angular 5866 .module('app.directives') 5867 .directive('livegamePlayers', livegamePlayers) 5868 5869 livegamePlayers.$inject = []; 5870 5871 function livegamePlayers() { 5872 return { 5873 restrict: 'E', 5874 scope: { 5875 widget: '=' 5876 }, 5877 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/result/livegame-players/livegame-players.tpl.html', 5878 controller: 'LivegamePlayersWidgetController', 5879 controllerAs: 'livegamePlayers', 5880 link: function (scope, element, attribut, controller) { 5881 scope.$watch(function () { 5882 if (element.find('.livegame-players')[0]) { 5883 return element.find('.livegame-players')[0].clientWidth 5884 } 5885 }, function (container) { 5886 if (container <= 910) { 5887 controller.isMobile = true; 5888 } 5889 else if (container > 910) { 5890 controller.isMobile = false; 5891 } 5892 }); 5893 } 5894 }; 5895 } 5896})();; 5897(function () { 5898 'use strict'; 5899 5900 angular 5901 .module('app.directives') 5902 .controller('ScoreboardDiamondController', ScoreboardDiamondController); 5903 5904 ScoreboardDiamondController.$inject = ['$scope']; 5905 5906 function ScoreboardDiamondController($scope) { 5907 var vm = this; 5908 vm.selectedPlayer = null; 5909 vm.selectedPlayerId = null; 5910 vm.gameEnd = $scope.gameEnd; 5911 vm.gameScheduled = $scope.gameScheduled; 5912 5913 $scope.$watch(function () { return $scope.selectedPlayerId; }, function (selectedPlayerId) { 5914 vm.selectedPlayerId = selectedPlayerId; 5915 }) 5916 5917 $scope.$watch('gameEnd', function (gameEnd) { vm.gameEnd = gameEnd }); 5918 $scope.$watch('gameScheduled', function (gameScheduled) { vm.gameScheduled = gameScheduled }); 5919 5920 vm.onClick = function (player) { 5921 if ($scope.onClick) { 5922 $scope.onClick(player) 5923 } 5924 } 5925 5926 vm.onSelect = function (player) { 5927 if (player.playerPosition != 'batter') { 5928 vm.selectedPlayer = player; 5929 5930 if ($scope.onSelect) { 5931 $scope.onSelect(player) 5932 } 5933 } 5934 5935 vm.onClick(player) 5936 } 5937 } 5938})(); 5939; 5940(function () { 5941 'use strict'; 5942 5943 angular 5944 .module('app.directives') 5945 .directive('scoreboardDiamond', scoreboardDiamond) 5946 5947 scoreboardDiamond.$inject = []; 5948 5949 function scoreboardDiamond() { 5950 return { 5951 restrict: 'E', 5952 scope: { 5953 offense: '=', 5954 defense: '=', 5955 onSelect: '=', 5956 selectedPlayer: '=', 5957 selectedPlayerId: '=', 5958 onClick: '=', 5959 gameEnd: '=', 5960 gameScheduled: '=', 5961 }, 5962 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/diamond/diamond.tpl.html', 5963 controller: 'ScoreboardDiamondController', 5964 controllerAs: 'scoreboardDiamond', 5965 }; 5966 } 5967})();; 5968(function () { 5969 'use strict'; 5970 5971 angular 5972 .module('app.directives') 5973 .controller('TabStatsController', TabStatsController); 5974 5975 TabStatsController.$inject = ['$q', '$rootScope', '$scope', '$localStorage', '$translate', 'ScoreboardBaseballService']; 5976 5977 function TabStatsController($q, $rootScope, $scope, $localStorage, $translate, scoreboardBaseballService) { 5978 var vm = this; 5979 var updating = false; 5980 5981 vm.gameDetails = angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' ')); 5982 vm.score = undefined; 5983 vm.field = undefined; 5984 vm.lineup = undefined; 5985 vm.sequence = undefined; 5986 vm.selectedPlayer = undefined; 5987 vm.selectedPlayerId = undefined; 5988 vm.periods = []; 5989 vm.ongoingRequestCount = 0; 5990 vm.startedGame = false; 5991 vm.shouldAllowSelectRunner = true; 5992 vm.unprocessableEntity = false 5993 vm.unkownError = false 5994 vm.gameStatus = vm.gameDetails.statusId; 5995 vm.disabledPitchCount = false; 5996 vm.showEditPitchCount = false; 5997 vm.resetKeepPitchCount = true 5998 vm.loadingSummary = false; 5999 vm.inningSummary = { 6000 team: { avatar: '' }, 6001 stats: { points: 0, hits: 0, errors: 0, leftOnBases: 0 } 6002 } 6003 6004 6005 vm.onUpdateEvent = function (sequence) { 6006 scoreboardBaseballService.putSequence(__solutionId__, vm.gameDetails.id, sequence).then(function () { 6007 getScoreboardBaseball(); 6008 }); 6009 } 6010 6011 vm.skipInning = function () { 6012 // TODO OPEN POPUP HERE 6013 var event = { type: 'skipinning', seq: vm.sequence.events.length + 1, category: 'maxpoint' }; 6014 vm.sequence.events.push(event); 6015 vm.sequence.status = "closed"; 6016 vm.onAction(vm.sequence); 6017 } 6018 6019 vm.showInningSummaryPopup = function (period, pos) { 6020 vm.showInningSummary(); 6021 vm.loadingSummary = true; 6022 scoreboardBaseballService.getScoreboardBaseballInningSummary(__solutionId__, vm.gameDetails.id, period, pos).then(function (result) { 6023 vm.inningSummary.stats.hits = result.data.hits; 6024 vm.inningSummary.stats.errors = result.data.errors; 6025 vm.inningSummary.stats.leftOnBases = result.data.leftOnBases; 6026 vm.inningSummary.stats.points = result.data.points; 6027 vm.inningSummary.team.avatar = result.data.teamId == vm.gameDetails.localTeamId ? vm.gameDetails.localTeamAvatar : vm.gameDetails.visitorTeamAvatar; 6028 vm.loadingSummary = false; 6029 }); 6030 } 6031 6032 getScoreboardBaseball(); 6033 function getScoreboardBaseball() { 6034 vm.ongoingRequestCount += 1 6035 6036 var scoreboardPromise = scoreboardBaseballService.getScoreboardBaseball(__solutionId__, vm.gameDetails.id) 6037 .then(function (response) { 6038 if (response && response.data.field != null) { 6039 if (vm.field) { 6040 var newField = response.data.field; 6041 6042 var showSummary = newField.period > vm.field.period || (vm.field.period == newField.period && newField.pos > vm.field.pos) || (response.data.sequence.status == 'pitcherrequested' && vm.sequence.status != "gamecompleted"); 6043 if (showSummary) { 6044 vm.showInningSummaryPopup(vm.field.period, vm.field.pos) 6045 } 6046 } 6047 6048 vm.score = response.data.score; 6049 vm.field = response.data.field; 6050 vm.lineup = response.data.lineup; 6051 vm.sequence = response.data.sequence; 6052 vm.offenseTeam = vm.getOffenseTeam(); 6053 vm.hasDesignatedHitter = _.find(vm.offenseTeam.positions, { playerPosition: 'designatedhitter' }) != undefined; 6054 vm.startedGame = true; 6055 } 6056 6057 if (vm.sequence) { 6058 var filteredEvent = _.filter(vm.sequence.events || [], function (event) { return event.group == 'onbases' || event.group == 'out' }) 6059 if (!vm.sequence.pitchers || vm.sequence.pitchers.length == 0 || (vm.sequence.status != 'active' && vm.sequence.status != 'new') || filteredEvent.length > 0) { 6060 vm.disabledPitchCount = true; 6061 } 6062 else { 6063 vm.disabledPitchCount = false; 6064 } 6065 6066 } 6067 6068 if (vm.lineup) { 6069 _.forEach(vm.lineup.teams, function (team) { 6070 6071 let teamArr = _.filter(team.positions, function (player) { return player.playerPosition != 'retired' }) 6072 6073 vm.rowGroup = _.groupBy(teamArr, function (pos) { 6074 return pos.row 6075 }) 6076 vm.posGroup = _.groupBy(teamArr, function (pos) { 6077 return pos.pos 6078 }) 6079 6080 _.forEach(vm.rowGroup, function (row) { 6081 if (row.length > 1) { 6082 let pitcherAndDesignatedHitter = 0; 6083 _.forEach(row, function (rowPlayer) { 6084 if (row.length === 2 && row[0].playerPosition === "pitcher" && row[1].playerPosition === "designatedhitter" || row.length === 2 && row[1].playerPosition === "pitcher" && row[0].playerPosition === "designatedhitter") { 6085 return; 6086 } 6087 let player = _.find(team.positions, function (position) { 6088 return position == rowPlayer 6089 }) 6090 if (pitcherAndDesignatedHitter < 2) { 6091 Object.assign(player, { bg: 'conflicted', conflictRow: true }) 6092 } 6093 pitcherAndDesignatedHitter = 0; 6094 }) 6095 } 6096 }) 6097 _.forEach(vm.posGroup, function (pos) { 6098 if (pos.length > 1) { 6099 _.forEach(pos, function (posPlayer) { 6100 let player = _.find(team.positions, function (position) { 6101 return position == posPlayer 6102 }) 6103 Object.assign(player, { bg: 'conflicted', conflictPos: true }) 6104 }) 6105 } 6106 }) 6107 }) 6108 } 6109 6110 var statusId; 6111 6112 if (response && response.data.score) { 6113 vm.startedGame = true; 6114 6115 if (response.data.score.end) { 6116 statusId = 3; 6117 } 6118 else { 6119 statusId = 2; 6120 } 6121 6122 } 6123 else { 6124 vm.startedGame = false; 6125 statusId = 1; 6126 } 6127 6128 if (statusId != vm.gameStatus) { 6129 vm.gameStatus = statusId; 6130 $scope.$emit('onGameStatusChange', statusId); 6131 } 6132 6133 updating = false; 6134 }) 6135 .catch(function (error) { 6136 bugsnag.notify(error); 6137 }) 6138 .finally(function () { 6139 vm.ongoingRequestCount--; 6140 }); 6141 6142 var inningPromise = scoreboardBaseballService.getScoreboardBaseballStatsHistory(__solutionId__, vm.gameDetails.id) 6143 .then(function (response) { 6144 vm.periods = response.data; 6145 }) 6146 .catch(function (error) { 6147 bugsnag.notify(error); 6148 }); 6149 } 6150 6151 6152 6153 vm.getOffenseTeam = function () { 6154 var defenseTeamId = vm.field.defense[0].teamId; 6155 var offenseTeam = _.find(vm.lineup.teams, function (team) { return team.teamId != defenseTeamId }); 6156 6157 return offenseTeam; 6158 } 6159 6160 vm.startGame = function () { 6161 scoreboardBaseballService.startGame(__solutionId__, vm.gameDetails.id).then(function (response) { 6162 vm.score = response.data.score; 6163 vm.field = response.data.field; 6164 vm.lineup = response.data.lineup; 6165 vm.sequence = response.data.sequence; 6166 vm.startedGame = true; 6167 6168 vm.gameStatus = 2; 6169 $scope.$emit(`onGameStatusChange`, 2); 6170 }).catch(function (e) { 6171 if (e.status === 422) { 6172 vm.unprocessableEntity = true 6173 } else { 6174 vm.unkownError = true 6175 } 6176 $('.toast').toast('show') 6177 }) 6178 } 6179 6180 vm.onAction = function (sequence) {
6181 updating = true; 6182 vm.selectedPlayer = undefined; 6183 vm.selectedPlayerId = undefined; 6184 vm.ongoingRequestCount += 1; 6185 6186 return scoreboardBaseballService.updateSequence(__solutionId__, sequence).then(function (result) { 6187 getScoreboardBaseball(); 6188 vm.ongoingRequestCount--; 6189 }).catch(function (result) { 6190 var sequence = result.data; 6191 if (sequence.status = 'error') { 6192 getScoreboardBaseball(); 6193 vm.ongoingRequestCount--; 6194 vm.showError(); 6195 } 6196 }) 6197 } 6198 6199 vm.showCloseGame = function () { 6200 vm.showConfirmClose(); 6201 } 6202 6203 vm.openEditPitchCount = function () { 6204 if (!vm.disabledPitchCount) { 6205 vm.showEditPitchCount = true; 6206 } 6207 } 6208 6209 vm.onCloseGame = function () { 6210 vm.ongoingRequestCount += 1; 6211 scoreboardBaseballService.closeGame(__solutionId__, vm.gameDetails.id).then(function () { 6212 getScoreboardBaseball(); 6213 }).finally(function (response) { 6214 vm.ongoingRequestCount--; 6215 }) 6216 } 6217 6218 vm.onPitch = function (pitch, category) { 6219 vm.ongoingRequestCount += 1; 6220 6221 scoreboardBaseballService.addPitch(__solutionId__, vm.gameDetails.id, vm.sequence.id, pitch).then(function (result) { 6222 if (category) { 6223 var event = {}; 6224 var generatedEvents = []; 6225 var seq = vm.sequence.events.length + 1; 6226 var updateSequence = true; 6227 6228 if (pitch.category == "ball") { 6229 event = { type: 'baseonball', seq: seq++, category: category }; 6230 6231 var generatedEvents = []; 6232 var baseNames = { 3: "b1", 4: "b2", 5: "b3", 6: "b4" }; 6233 6234 6235 var thirdBasePlayer = _.findIndex(vm.field.offense, { playerPosition: 'thirdbase' }) != -1; 6236 var askEarnedRun = false; 6237 if (thirdBasePlayer) { 6238 var playerCount = 0; 6239 for (var i = 4; i > 2; i--) { 6240 if (_.find(vm.field.offense, { pos: i })) { 6241 playerCount++; 6242 } 6243 } 6244 6245 askEarnedRun = playerCount == 2; 6246 } 6247 6248 if (!askEarnedRun) { 6249 vm.field.offense.forEach(function (offensePlayer) { 6250 if (baseNames[offensePlayer.pos]) { 6251 var shouldMove = offensePlayer.pos == 3; 6252 6253 if (offensePlayer.pos > 3) { 6254 var playerCount = 0; 6255 for (var i = offensePlayer.pos - 1; i > 2; i--) { 6256 if (_.find(vm.field.offense, { pos: i })) { 6257 playerCount++; 6258 } 6259 } 6260 6261 shouldMove = playerCount == offensePlayer.pos - 3; 6262 } 6263 6264 var runnerEvent = { 6265 seq: seq++, 6266 type: shouldMove ? "advance" : "none", 6267 category: null, 6268 playersproperties: [{ 6269 seq: 1, 6270 name: baseNames[offensePlayer.pos + (shouldMove * 1)], 6271 id: offensePlayer.id, 6272 pos: offensePlayer.pos, 6273 row: offensePlayer.row, 6274 number: offensePlayer.playerNumber,
6275 teamid: offensePlayer.teamId 6276 }] 6277 } 6278 6279 generatedEvents.push(runnerEvent); 6280 } 6281 }) 6282 } 6283 6284 } 6285 else if (pitch.category == "strike") { 6286 event = { type: 'strikeout', group: 'out', seq: seq++, category: category } 6287 6288 var property = {}; 6289 var player = _.find(vm.field.defense, { pos: 2 }); 6290 6291 property.seq = 1; 6292 property.name = 'receiver'; 6293 property.number = player.number; 6294 property.id = player.id; 6295 property.pos = player.pos; 6296 property.row = player.row; 6297 property.teamId = player.teamId; 6298 6299 event.playersproperties = [property]; 6300 6301 var baseNames = { 3: "b1", 4: "b2", 5: "b3" }; 6302 vm.field.offense.forEach(function (offensePlayer) { 6303 if (baseNames[offensePlayer.pos]) { 6304 var runnerEvent = { 6305 seq: seq++, 6306 type: "none", 6307 category: null, 6308 playersproperties: [{ 6309 seq: 1, 6310 name: baseNames[offensePlayer.pos], 6311 id: offensePlayer.id, 6312 pos: offensePlayer.pos, 6313 row: offensePlayer.row, 6314 number: offensePlayer.playerNumber, 6315 teamid: offensePlayer.teamId 6316 } 6317 ] 6318 6319 } 6320 6321 generatedEvents.push(runnerEvent); 6322 } 6323 }); 6324 } 6325 6326 vm.sequence.events.push(event); 6327 vm.sequence.events = vm.sequence.events.concat(generatedEvents); 6328 vm.sequence.status = result.data.status; 6329 vm.sequence.pitchs = result.data.pitchs; 6330 vm.onAction(vm.sequence); 6331 6332 } 6333 else { 6334 getScoreboardBaseball(); 6335 } 6336 6337 }).finally(function (response) { 6338 vm.ongoingRequestCount--; 6339 }) 6340 } 6341 6342 vm.onReset = function () { 6343 vm.ongoingRequestCount += 1; 6344 6345 scoreboardBaseballService.resetGame(__solutionId__, vm.gameDetails.id, vm.resetKeepPitchCount).then(function (response) { 6346 getScoreboardBaseball(); 6347 vm.ongoingRequestCount--; 6348 vm.hideConfirm(); 6349 }); 6350 } 6351 6352 vm.hideConfirmReset = function () { 6353 vm.hideConfirm(); 6354 } 6355 6356 vm.switchDesignatedHitter = function (sequence) { 6357 vm.ongoingRequestCount += 1; 6358 scoreboardBaseballService.switchDesignatedHitter(__solutionId__, sequence).then(function () { 6359 getScoreboardBaseball(); 6360 vm.ongoingRequestCount--; 6361 }) 6362 } 6363 6364 vm.onSelect = function (runner, type) { 6365 if (vm.shouldAllowSelectRunner) { 6366 vm.selectedPlayer = runner; 6367 vm.selectedPlayerId = runner.id; 6368 } 6369 } 6370 6371 vm.setSelectedPlayerId = function (playerId) { 6372 vm.selectedPlayerId = playerId; 6373 vm.selectedPlayer = undefined; 6374 } 6375 6376 vm.onSubstitutePlayer = function (playerOut, playerIn) { 6377 var substitution = {}; 6378 substitution.in = playerIn; 6379 substitution.in.row = playerOut.row; 6380 substitution.out = playerOut; 6381 substitution.period = vm.sequence.period; 6382 substitution.pos = vm.sequence.pos; 6383 substitution.seq = vm.sequence.seq; 6384 6385 vm.ongoingRequestCount += 1; 6386 scoreboardBaseballService.substitutePlayer(__solutionId__, vm.gameDetails.id, substitution).then(function () { 6387 getScoreboardBaseball(); 6388 vm.ongoingRequestCount--; 6389 }) 6390 } 6391 6392 vm.onRollback = function () { 6393 scoreboardBaseballService.rollbackSequence(__solutionId__, vm.sequence).then(function () { 6394 getScoreboardBaseball(); 6395 }) 6396 } 6397 } 6398})(); 6399; 6400(function () { 6401 'use strict'; 6402 6403 angular 6404 .module('app.directives') 6405 .directive('tabStats', tabStats) 6406 6407 tabStats.$inject = ['ModalService']; 6408 6409 function tabStats(modalService) { 6410 return { 6411 restrict: 'E', 6412 scope: { 6413 }, 6414 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/tab-stats.tpl.html', 6415 controller: 'TabStatsController', 6416 controllerAs: 'tabStats', 6417 link: function (scope, element, attribute, controller) { 6418 var resetModal = modalService.init($('#confirm-reset-game', element));
6419 var inningSummaryModal = modalService.init($('#inning-summary', element)); 6420 var confirmCloseModal = modalService.init($("#confirm-close-game", element)); 6421 6422 controller.showError = function () { 6423 $('.toast.error', element).toast('show'); 6424 } 6425 6426 controller.hideConfirm = function () { 6427 resetModal.hide(); 6428 } 6429 6430 controller.showConfirm = function () { 6431 controller.resetKeepPitchCount = true; 6432 resetModal.show(); 6433 } 6434 6435 $(document).on('click', '#tabStats-closegame', function () { 6436 scope.$apply(controller.hideConfirmClose()); 6437 }); 6438 6439 element.on('$destroy', function () { 6440 $(document).off('click'); 6441 }) 6442 6443 controller.showConfirmClose = confirmCloseModal.show; 6444 controller.hideConfirmClose = confirmCloseModal.hide; 6445 6446 controller.showInningSummary = inningSummaryModal.show; 6447 controller.hideInningSummary = inningSummaryModal.hide; 6448 } 6449 }; 6450 } 6451})();; 6452(function () { 6453 'use strict'; 6454 6455 angular 6456 .module('app.directives') 6457 .value('scoreboardBaseballSteps', { 6458 out: { 6459 title: 'directives.scoreboard.baseball.tabStats.out', 6460 type: 'type', 6461 template: 'choice', 6462 onConfirm: function (selectedStep) { 6463 if (mode_self.selectedPlayerProperties() != null) { 6464 playerToData(selectedStep.type, mode_self.selectedPlayerProperties()); 6465 } 6466 6467 mode_self.createEvent(); 6468 }, 6469 options: [ 6470 { 6471 id: 'outhitter', 6472 name: 'directives.scoreboard.baseball.tabStats.outsTypes.outhitter.name', 6473 step: { 6474 type: 'category', 6475 template: 'choice', 6476 options: [ 6477 { 6478 id: 'ground', 6479 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.ground.name', 6480 other: [function (player, diamond) { 6481 var other = { type: 'playersproperties' }; 6482 6483 other.name = 'b1'; 6484 other.player = _.find(diamond.offense, { playerPosition: 'batter' }) 6485 6486 return other; 6487 }], 6488 step: { 6489 type: 'playersproperties', 6490 template: 'properties', 6491 options: [], 6492 properties: [ 6493 { 6494 name: 'assist', 6495 label: 'directives.scoreboard.baseball.tabStats.assists', 6496 multiple: { 6497 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 6498 getName: function (number) { 6499 return `assist${number + 1}`; 6500 }, 6501 max: 9 6502 }, 6503 required: false 6504 }, 6505 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 6506 ], 6507 } 6508 }, 6509 { 6510 id: 'fly', 6511 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.fly.name', 6512 autoGenerateRunners: function (outline, seq) { 6513 var events = []; 6514 var baseNames = { 3: "b1", 4: "b2", 5: "b3" }; 6515 outline.forEach(function (outlineStep) { 6516 if (outlineStep.id == "runner") { 6517 var runnerEvent = { 6518 seq: seq++, 6519 type: "none", 6520 category: null, 6521 playersproperties: [{ 6522 seq: 1, 6523 name: baseNames[outlineStep.data.pos], 6524 id: outlineStep.data.id, 6525 pos: outlineStep.data.pos, 6526 row: outlineStep.data.row, 6527 number: outlineStep.data.playerNumber,
6528 teamid: outlineStep.data.teamId 6529 } 6530 ] 6531 6532 } 6533 events.push(runnerEvent); 6534 } 6535 }) 6536 6537 return events; 6538 }, 6539 step: { 6540 type: 'playersproperties', 6541 template: 'properties', 6542 options: [], 6543 properties: [ 6544 { 6545 name: 'assist', 6546 label: 'directives.scoreboard.baseball.tabStats.assists', 6547 multiple: { 6548 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 6549 getName: function (number) { 6550 return `assist${number + 1}`; 6551 }, 6552 max: 9 6553 }, 6554 required: false 6555 }, 6556 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 6557 ] 6558 } 6559 }, 6560 { 6561 id: 'linedrive', 6562 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.linedrive.name', 6563 autoGenerateRunners: function (outline, seq) { 6564 var events = []; 6565 var baseNames = { 3: "b1", 4: "b2", 5: "b3" }; 6566 outline.forEach(function (outlineStep) { 6567 if (outlineStep.id == "runner") { 6568 var runnerEvent = { 6569 seq: seq++, 6570 type: "none", 6571 category: null, 6572 playersproperties: [{ 6573 seq: 1, 6574 name: baseNames[outlineStep.data.pos], 6575 id: outlineStep.data.id, 6576 pos: outlineStep.data.pos, 6577 row: outlineStep.data.row, 6578 number: outlineStep.data.playerNumber, 6579 teamid: outlineStep.data.teamId 6580 } 6581 ] 6582 6583 } 6584 events.push(runnerEvent); 6585 } 6586 }) 6587 6588 return events; 6589 }, 6590 step: { 6591 type: 'playersproperties', 6592 template: 'properties', 6593 options: [], 6594 properties: [ 6595 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 6596 ] 6597 } 6598 }, 6599 { 6600 id: 'interference', 6601 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.interference.name' 6602 }, 6603 ] 6604 } 6605 }, 6606 { 6607 id: 'sacrifice', 6608 name: 'directives.scoreboard.baseball.tabStats.outsTypes.sacrifice.name', 6609 visible: function (diamond) { 6610 var hasRunner = false; 6611 var runner_pos = [5, 4, 3]; 6612 6613 for (var i = 0; i < diamond.offense.length && !hasRunner; i++) { 6614 hasRunner = _.indexOf(runner_pos, diamond.offense[i].pos) != -1; 6615 } 6616 6617 return hasRunner; 6618 }, 6619 step: { 6620 type: 'category', 6621 template: 'choice', 6622 options: [ 6623 { 6624 id: 'fly', 6625 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.fly.name', 6626 step: { 6627 type: 'playersproperties', 6628 template: 'properties', 6629 options: [], 6630 properties: [ 6631 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 6632 ] 6633 } 6634 }, 6635 { 6636 id: 'bunt', 6637 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.bunt.name', 6638 step: { 6639 type: 'playersproperties', 6640 template: 'properties', 6641 options: [], 6642 properties: [ 6643 { 6644 name: 'assist', 6645 label: 'directives.scoreboard.baseball.tabStats.assists', 6646 multiple: { 6647 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 6648 getName: function (number) { 6649 return `assist${number + 1}`; 6650 }, 6651 max: 9 6652 }, 6653 required: false 6654 }, 6655 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 6656 ] 6657 } 6658 } 6659 ] 6660 } 6661 }, 6662 { 6663 id: 'strikeout', 6664 name: 'directives.scoreboard.baseball.tabStats.outsTypes.strikeout.name', 6665 autoGenerateRunners: function (outline, seq) { 6666 var events = []; 6667 var baseNames = { 3: "b1", 4: "b2", 5: "b3" }; 6668 outline.forEach(function (outlineStep) { 6669 if (outlineStep.id == "runner") { 6670 var runnerEvent = { 6671 seq: seq++, 6672 type: "none", 6673 category: null, 6674 playersproperties: [{ 6675 seq: 1, 6676 name: baseNames[outlineStep.data.pos], 6677 id: outlineStep.data.id, 6678 pos: outlineStep.data.pos, 6679 row: outlineStep.data.row, 6680 number: outlineStep.data.playerNumber,
6681 teamid: outlineStep.data.teamId 6682 } 6683 ] 6684 6685 } 6686 events.push(runnerEvent); 6687 } 6688 }) 6689 6690 return events; 6691 }, 6692 step: { 6693 type: 'category', 6694 template: 'choice', 6695 options: [ 6696 { 6697 id: 'swing', 6698 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.swing.name', 6699 other: [function (player, diamond) { 6700 var other = { type: 'playersproperties' }; 6701 6702 other.name = 'receiver'; 6703 other.player = _.find(diamond.defense, { pos: 2 }); 6704 6705 return other; 6706 6707 }], 6708 }, 6709 { 6710 id: 'decision', 6711 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.decision.name', 6712 other: [function (player, diamond) { 6713 var other = { type: 'playersproperties' }; 6714 6715 other.name = 'receiver'; 6716 other.player = _.find(diamond.defense, { pos: 2 }); 6717 6718 return other; 6719 6720 }], 6721 }, 6722 { 6723 id: 'uncaughtthirdstrike', 6724 name: 'directives.scoreboard.baseball.tabStats.outsSubtypes.uncaughtthirdstrike.name', 6725 step: { 6726 type: 'playersproperties', 6727 template: 'choice', 6728 options: [ 6729 { 6730 id: 'out', 6731 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 6732 step: { 6733 type: 'playersproperties', 6734 template: 'properties', 6735 options: [], 6736 properties: [ 6737 { 6738 name: 'assist', 6739 label: 'directives.scoreboard.baseball.tabStats.assists', 6740 multiple: { 6741 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 6742 getName: function (number) { 6743 return `assist${number + 1}`; 6744 }, 6745 max: 9 6746 }, 6747 required: false 6748 }, 6749 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 6750 ] 6751 } 6752 }, 6753 { 6754 id: 'advance', 6755 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 6756 step: { 6757 template: 'choice', 6758 options: [ 6759 { 6760 id: 'badpitch', 6761 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.badpitch.name', 6762 other: [function (player, diamond) { 6763 var other = { type: 'playersproperties' }; 6764 6765 other.name = 'pitcher'; 6766 other.player = _.find(diamond.defense, { pos: 1 }); 6767 6768 return other; 6769 6770 }], 6771 }, 6772 { 6773 id: 'passedball', 6774 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.passedball.name', 6775 other: [function (player, diamond) { 6776 var other = { type: 'playersproperties' }; 6777 6778 other.name = 're
6778ceiver'; 6779 other.player = _.find(diamond.defense, { pos: 2 }); 6780 6781 return other; 6782 6783 }], 6784 } 6785 ] 6786 } 6787 }, 6788 { 6789 id: 'error', 6790 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.error.name', 6791 step: { 6792 type: 'playersproperties', 6793 template: 'properties', 6794 options: [], 6795 properties: [ 6796 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 6797 ] 6798 } 6799 } 6800 ], 6801 } 6802 } 6803 ] 6804 } 6805 }, 6806 ], 6807 }, 6808 onbases: { 6809 title: 'directives.scoreboard.baseball.tabStats.onBases', 6810 type: 'type', 6811 template: 'choice', 6812 onConfirm: function (selectedStep) { 6813 if (mode_self.selectedPlayerProperties() != null) { 6814 playerToData(selectedStep.type, mode_self.selectedPlayerProperties()); 6815 } 6816 6817 mode_self.createEvent(); 6818 }, 6819 options: [ 6820 { 6821 id: 'hit', 6822 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.hit.name', 6823 step: { 6824 type: 'category', 6825 template: 'choice', 6826 options: [ 6827 { 6828 id: 'single', 6829 name: 'directives.scoreboard.baseball.tabStats.onBasesSubtypes.single.name', 6830 }, 6831 { 6832 id: 'double', 6833 name: 'directives.scoreboard.baseball.tabStats.onBasesSubtypes.double.name', 6834 }, 6835 { 6836 id: 'triple', 6837 name: 'directives.scoreboard.baseball.tabStats.onBasesSubtypes.triple.name', 6838 }, 6839 { 6840 id: 'homerun', 6841 name: 'directives.scoreboard.baseball.tabStats.onBasesSubtypes.homerun.name', 6842 step: { 6843 type: 'playersproperties', 6844 template: 'properties', 6845 options: [], 6846 properties: [ 6847 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 6848 { 6849 name: 'pitcher', 6850 required: true, 6851 mode: 'number', 6852 getName: function (properties) { 6853 if (properties.earnedpoint.value === true) { 6854 return properties.earnedpoint.trueValue; 6855 } 6856 6857 return properties.earnedpoint.falseValue; 6858 }, 6859 defaultValue: function (selectedTeam) { 6860 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 6861 }, 6862 label: 'directives.scoreboard.baseball.tabStats.pitcher', 6863 list: function (selectedTeam) { 6864 var list = [] 6865 6866 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 6867 if (pitcher) { 6868 list.push({ label: pitcher.number, data: pitcher }); 6869 } 6870 6871 selectedTeam.positions.forEach(function (position) { 6872 position.substitutions.forEach(function (substitution) { 6873 if (substitution.out.playerPosition == 'pitcher') { 6874 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 6875 list.push({ label: substitution.out.number, data: substitution.out }); 6876 } 6877 } 6878 }) 6879 }) 6880 6881 return list; 6882 } 6883 }, 6884 { 6885 name: 'rbi', 6886 getPlayer: function (value, sequence) { 6887 if (value) { 6888 return sequence.hitter 6889 } 6890 6891 return null; 6892 }, 6893 required: true, 6894 defaultValue: true, 6895 type: 'checkbox', 6896 label: 'directives.scoreboard.baseball.tabStats.runBattedIn' 6897 }, 6898 ] 6899 } 6900 }, 6901 ] 6902 } 6903 }, 6904 { 6905 id: 'baseonball', 6906 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.baseonball.name', 6907 autoGenerateRunners: function (outline, seq, diamond, sequence) { 6908 var events = []; 6909 var baseNames = { 3: "b1", 4: "b2", 5: "b3", 6: "b4" }; 6910 6911 outline.forEach(function (outlineStep) { 6912 if (outlineStep.id == "runner") { 6913 var shouldMove = outlineStep.data.pos == 3; 6914 6915 if (outlineStep.data.pos > 3) { 6916 var playerCount = 0; 6917 for (var i = outlineStep.data.pos - 1; i > 2; i--) { 6918 if (_.find(diamond.offense, { pos: i })) { 6919 playerCount++; 6920 } 6921 } 6922 6923 shouldMove = playerCount == outlineStep.data.pos - 3; 6924 } 6925 6926 var runnerEvent = { 6927 seq: seq++, 6928 type: shouldMove ? "advance" : "none", 6929 category: null, 6930 playersproperties: [{ 6931 seq: 1, 6932 name: baseNames[outlineStep.data.pos + (shouldMove * 1)], 6933 id: outlineStep.data.id, 6934 pos: outlineStep.data.pos, 6935 row: outlineStep.data.row, 6936 number: outlineStep.data.playerNumber,
6937 teamid: outlineStep.data.teamId 6938 }] 6939 } 6940 6941 if (shouldMove && outlineStep.data.pos === 5) { 6942 var baseonballEvent = _.find(sequence, { type: 'baseonball' }); 6943 runnerEvent.playersproperties = runnerEvent.playersproperties.concat(baseonballEvent.playersproperties); 6944 baseonballEvent.playersproperties = []; 6945 } 6946 6947 events.push(runnerEvent); 6948 } 6949 }) 6950 6951 return events; 6952 }, 6953 step: { 6954 type: 'category', 6955 template: 'choice', 6956 options: [ 6957 { 6958 id: 'intentional', 6959 name: 'directives.scoreboard.baseball.tabStats.onBasesSubtypes.intentional.name', 6960 step: { 6961 type: 'playersproperties', 6962 template: 'properties', 6963 options: [], 6964 condition: function (diamond) { 6965 var thirdBasePlayer = _.findIndex(diamond.offense, { playerPosition: 'thirdbase' }) != -1; 6966 var shouldMove = false; 6967 if (thirdBasePlayer) { 6968 var playerCount = 0; 6969 for (var i = 4; i > 2; i--) { 6970 if (_.find(diamond.offense, { pos: i })) { 6971 playerCount++; 6972 } 6973 } 6974 6975 shouldMove = playerCount == 2; 6976 } 6977 return shouldMove; 6978 }, 6979 properties: [ 6980 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 6981 { 6982 name: 'pitcher', 6983 required: true, 6984 mode: 'number', 6985 getName: function (properties) { 6986 if (properties.earnedpoint.value === true) { 6987 return properties.earnedpoint.trueValue; 6988 } 6989 6990 return properties.earnedpoint.falseValue; 6991 }, 6992 defaultValue: function (selectedTeam) { 6993 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 6994 }, 6995 label: 'directives.scoreboard.baseball.tabStats.pitcher', 6996 list: function (selectedTeam) { 6997 var list = [] 6998 6999 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7000 if (pitcher) { 7001 list.push({ label: pitcher.number, data: pitcher }); 7002 } 7003 7004 selectedTeam.positions.forEach(function (position) { 7005 position.substitutions.forEach(function (substitution) { 7006 if (substitution.out.playerPosition == 'pitcher') { 7007 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7008 list.push({ label: substitution.out.number, data: substitution.out }); 7009 } 7010 } 7011 }) 7012 }) 7013 7014 return list; 7015 } 7016 } 7017 ] 7018 } 7019 }, 7020 { 7021 id: 'standard', 7022 name: 'directives.scoreboard.baseball.tabStats.onBasesSubtypes.standard.name', 7023 step: { 7024 type: 'playersproperties', 7025 template: 'properties', 7026 options: [], 7027 condition: function (diamond) { 7028 var thirdBasePlayer = _.findIndex(diamond.offense, { playerPosition: 'thirdbase' }) != -1; 7029 var shouldMove = false; 7030 if (thirdBasePlayer) { 7031 var playerCount = 0; 7032 for (var i = 4; i > 2; i--) { 7033 if (_.find(diamond.offense, { pos: i })) { 7034 playerCount++; 7035 } 7036 } 7037 7038 shouldMove = playerCount == 2; 7039 } 7040 return shouldMove; 7041 }, 7042 properties: [ 7043 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7044 { 7045 name: 'pitcher', 7046 required: true, 7047 mode: 'number', 7048 getName: function (properties) { 7049 if (properties.earnedpoint.value === true) { 7050 return properties.earnedpoint.trueValue; 7051 } 7052 7053 return properties.earnedpoint.falseValue; 7054 }, 7055 defaultValue: function (selectedTeam) { 7056 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7057 }, 7058 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7059 list: function (selectedTeam) { 7060 var list = [] 7061 7062 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7063 if (pitcher) { 7064 list.push({ label: pitcher.number, data: pitcher }); 7065 } 7066 7067 selectedTeam.positions.forEach(function (position) { 7068 position.substitutions.forEach(function (substitution) { 7069 if (substitution.out.playerPosition == 'pitcher') { 7070 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7071 list.push({ label: substitution.out.number, data: substitution.out }); 7072 } 7073 } 7074 }) 7075 }) 7076 7077 return list; 7078 } 7079 } 7080 ] 7081 } 7082 }, 7083 ] 7084 } 7085 }, 7086 { 7087 id: 'hitbypitch', 7088 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.hitbypitch.name', 7089 autoGenerateRunners: function (outline, seq, diamond, sequence) { 7090 var events = []; 7091 var baseNames = { 3: "b1", 4: "b2", 5: "b3", 6: "b4" }; 7092 7093 outline.forEach(function (outlineStep) { 7094 if (outlineStep.id == "runner") { 7095 var shouldMove = outlineStep.data.pos == 3; 7096 7097 if (outlineStep.data.pos > 3) { 7098 var playerCount = 0; 7099 for (var i = outlineStep.data.pos - 1; i > 2; i--) { 7100 if (_.find(diamond.offense, { pos: i })) { 7101 playerCount++; 7102 } 7103 } 7104 7105 shouldMove = playerCount == outlineStep.data.pos - 3; 7106 } 7107 7108 var runnerEvent = { 7109 seq: seq++, 7110 type: shouldMove ? "advance" : "none", 7111 category: null, 7112 playersproperties: [{ 7113 seq: 1, 7114 name: baseNames[outlineStep.data.pos + (shouldMove * 1)], 7115 id: outlineStep.data.id, 7116 pos: outlineStep.data.pos, 7117 row: outlineStep.data.row, 7118 number: outlineStep.data.playerNumber,
7119 teamid: outlineStep.data.teamId 7120 }] 7121 } 7122 7123 if (shouldMove && outlineStep.data.pos === 5) { 7124 var hitByPitchEvent = _.find(sequence, { type: 'hitbypitch' }); 7125 runnerEvent.playersproperties = runnerEvent.playersproperties.concat(hitByPitchEvent.playersproperties); 7126 hitByPitchEvent.playersproperties = []; 7127 } 7128 7129 events.push(runnerEvent); 7130 } 7131 }) 7132 7133 return events; 7134 }, 7135 step: { 7136 type: 'playersproperties', 7137 template: 'properties', 7138 options: [], 7139 condition: function (diamond) { 7140 var thirdBasePlayer = _.findIndex(diamond.offense, { playerPosition: 'thirdbase' }) != -1; 7141 var shouldMove = false; 7142 if (thirdBasePlayer) { 7143 var playerCount = 0; 7144 for (var i = 4; i > 2; i--) { 7145 if (_.find(diamond.offense, { pos: i })) { 7146 playerCount++; 7147 } 7148 } 7149 7150 shouldMove = playerCount == 2; 7151 } 7152 return shouldMove; 7153 }, 7154 properties: [ 7155 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7156 { 7157 name: 'pitcher', 7158 required: true, 7159 mode: 'number', 7160 getName: function (properties) { 7161 if (properties.earnedpoint.value === true) { 7162 return properties.earnedpoint.trueValue; 7163 } 7164 7165 return properties.earnedpoint.falseValue; 7166 }, 7167 defaultValue: function (selectedTeam) { 7168 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7169 }, 7170 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7171 list: function (selectedTeam) { 7172 var list = [] 7173 7174 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7175 if (pitcher) { 7176 list.push({ label: pitcher.number, data: pitcher }); 7177 } 7178 7179 selectedTeam.positions.forEach(function (position) { 7180 position.substitutions.forEach(function (substitution) { 7181 if (substitution.out.playerPosition == 'pitcher') { 7182 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7183 list.push({ label: substitution.out.number, data: substitution.out }); 7184 } 7185 } 7186 }) 7187 }) 7188 7189 return list; 7190 } 7191 } 7192 ] 7193 } 7194 }, 7195 { 7196 id: 'interferencereceiver', 7197 other: [function (player, diamond) { 7198 var other = { type: 'playersproperties' }; 7199
7200 other.name = 'receiver'; 7201 other.player = _.find(diamond.defense, { pos: 2 }); 7202 7203 return other; 7204 }], 7205 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.interference.name', 7206 }, 7207 { 7208 id: 'hitterdefenseerror', 7209 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.defenseerror.name', 7210 step: { 7211 type: 'playersproperties', 7212 template: 'choice', 7213 getData: function (diamond) { 7214 return _.find(diamond.offense, { pos: 2 }); 7215 }, 7216 options: [ 7217 { 7218 id: 'b1', 7219 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 7220 step: { 7221 type: 'playersproperties', 7222 template: 'properties', 7223 options: [], 7224 properties: [ 7225 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7226 { 7227 name: 'assist', 7228 label: 'directives.scoreboard.baseball.tabStats.assists', 7229 multiple: { 7230 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7231 getName: function (number) { 7232 return `assist${number + 1}`; 7233 }, 7234 max: 9 7235 }, 7236 required: false 7237 }, 7238 ] 7239 } 7240 }, 7241 { 7242 id: 'b2', 7243 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 7244 step: { 7245 type: 'playersproperties', 7246 template: 'properties', 7247 options: [], 7248 properties: [ 7249 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7250 { 7251 name: 'assist', 7252 label: 'directives.scoreboard.baseball.tabStats.assists', 7253 multiple: { 7254 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7255 getName: function (number) { 7256 return `assist${number + 1}`; 7257 }, 7258 max: 9 7259 }, 7260 required: false 7261 }, 7262 ] 7263 } 7264 }, 7265 { 7266 id: 'b3', 7267 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 7268 step: { 7269 type: 'playersproperties', 7270 template: 'properties', 7271 options: [], 7272 properties: [ 7273 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7274 { 7275 name: 'assist', 7276 label: 'directives.scoreboard.baseball.tabStats.assists', 7277 multiple: { 7278 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7279 getName: function (number) { 7280 return `assist${number + 1}`; 7281 }, 7282 max: 9 7283 }, 7284 required: false 7285 }, 7286 ] 7287 } 7288 }, 7289 { 7290 id: 'b4', 7291 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 7292 step: { 7293 type: 'playersproperties', 7294 template: 'properties', 7295 options: [], 7296 properties: [ 7297 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7298 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7299 { 7300 name: 'pitcher', 7301 required: true, 7302 mode: 'number', 7303 getName: function (properties) { 7304 if (properties.earnedpoint.value === true) { 7305 return properties.earnedpoint.trueValue; 7306 } 7307 7308 return properties.earnedpoint.falseValue; 7309 }, 7310 defaultValue: function (selectedTeam) { 7311 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7312 }, 7313 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7314 list: function (selectedTeam) { 7315 var list = [] 7316 7317 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7318 if (pitcher) { 7319 list.push({ label: pitcher.number, data: pitcher }); 7320 } 7321 7322 selectedTeam.positions.forEach(function (position) { 7323 position.substitutions.forEach(function (substitution) { 7324 if (substitution.out.playerPosition == 'pitcher') { 7325 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7326 list.push({ label: substitution.out.number, data: substitution.out }); 7327 } 7328 } 7329 }) 7330 }) 7331 7332 return list; 7333 } 7334 }, 7335 { 7336 name: 'assist', 7337 label: 'directives.scoreboard.baseball.tabStats.assists', 7338 multiple: { 7339 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7340 getName: function (number) { 7341 return `assist${number + 1}`; 7342 }, 7343 max: 9 7344 }, 7345 required: false 7346 } 7347 ] 7348 } 7349 } 7350 ] 7351 } 7352 }, 7353 { 7354 id: 'fielderchoice', 7355 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.fielderchoice.name', 7356 visible: function (diamond) { 7357 var hasRunner = false; 7358 var runner_pos = [5, 4, 3]; 7359 7360 for (var i = 0; i < diamond.offense.length && !hasRunner; i++) { 7361 hasRunner = _.indexOf(runner_pos, diamond.offense[i].pos) != -1; 7362 } 7363 7364 return hasRunner; 7365 } 7366 }, 7367 { 7368 id: 'sacerror', 7369 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.sacerror.name', 7370 step: { 7371 type: 'playersproperties', 7372 template: 'choice', 7373 getData: function (diamond) { 7374 return _.find(diamond.offense, { pos: 2 }); 7375 }, 7376 options: [ 7377 { 7378 id: 'b1', 7379 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 7380 step: { 7381 type: 'playersproperties', 7382 template: 'properties', 7383 options: [], 7384 properties: [ 7385 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7386 { 7387 name: 'assist', 7388 label: 'directives.scoreboard.baseball.tabStats.assists', 7389 multiple: { 7390 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7391 getName: function (number) { 7392 return `assist${number + 1}`; 7393 }, 7394 max: 9 7395 }, 7396 required: false 7397 }, 7398 ] 7399 } 7400 }, 7401 { 7402 id: 'b2', 7403 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 7404 step: { 7405 type: 'playersproperties', 7406 template: 'properties', 7407 options: [], 7408 properties: [ 7409 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7410 { 7411 name: 'assist', 7412 label: 'directives.scoreboard.baseball.tabStats.assists', 7413 multiple: { 7414 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7415 getName: function (number) { 7416 return `assist${number + 1}`; 7417 }, 7418 max: 9 7419 }, 7420 required: false 7421 }, 7422 ] 7423 } 7424 }, 7425 { 7426 id: 'b3', 7427 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 7428 step: { 7429 type: 'playersproperties', 7430 template: 'properties', 7431 options: [], 7432 properties: [ 7433 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7434 { 7435 name: 'assist', 7436 label: 'directives.scoreboard.baseball.tabStats.assists', 7437 multiple: { 7438 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7439 getName: function (number) { 7440 return `assist${number + 1}`; 7441 }, 7442 max: 9 7443 }, 7444 required: false 7445 }, 7446 ] 7447 } 7448 }, 7449 { 7450 id: 'b4', 7451 name: 'directives.scoreboard.baseball.tabStats.base
7451runnerTypes.b4.name', 7452 step: { 7453 type: 'playersproperties', 7454 template: 'properties', 7455 options: [], 7456 properties: [ 7457 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7458 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7459 { 7460 name: 'pitcher', 7461 required: true, 7462 mode: 'number', 7463 getName: function (properties) { 7464 if (properties.earnedpoint.value === true) { 7465 return properties.earnedpoint.trueValue; 7466 } 7467 7468 return properties.earnedpoint.falseValue; 7469 }, 7470 defaultValue: function (selectedTeam) { 7471 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7472 }, 7473 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7474 list: function (selectedTeam) { 7475 var list = [] 7476 7477 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7478 if (pitcher) { 7479 list.push({ label: pitcher.number, data: pitcher }); 7480 } 7481 7482 selectedTeam.positions.forEach(function (position) { 7483 position.substitutions.forEach(function (substitution) { 7484 if (substitution.out.playerPosition == 'pitcher') { 7485 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7486 list.push({ label: substitution.out.number, data: substitution.out }); 7487 } 7488 } 7489 }) 7490 }) 7491 7492 return list; 7493 } 7494 }, 7495 { 7496 name: 'assist', 7497 label: 'directives.scoreboard.baseball.tabStats.assists', 7498 multiple: { 7499 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7500 getName: function (number) { 7501 return `assist${number + 1}`; 7502 }, 7503 max: 9 7504 }, 7505 required: false 7506 } 7507 ] 7508 } 7509 } 7510 ] 7511 } 7512 } 7513 ] 7514 }, 7515 misc: { 7516 template: 'choice', 7517 options: [{ 7518 id: 'error', 7519 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.error.
7519name', 7520 other: [{ name: 'type', id: 'error' }, function (player) { 7521 var other = { type: 'playersproperties' }; 7522 7523 other.name = 'error'; 7524 other.player = player; 7525 7526 return other; 7527 }], 7528 }, 7529 ], 7530 }, 7531 baserunners: { 7532 title: 'directives.scoreboard.baseball.tabStats.baserunner', 7533 type: 'type', 7534 template: 'choice', 7535 onConfirm: function (selectedStep) { 7536 if (mode_self.selectedPlayerProperties() != null) { 7537 playerToData(selectedStep.type, mode_self.selectedPlayerProperties()); 7538 } 7539 7540 mode_self.createEvent(); 7541 }, 7542 options: [ 7543 { 7544 id: 'advance', 7545 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 7546 step: { 7547 type: 'playersproperties', 7548 template: 'choice', 7549 options: [ 7550 { 7551 id: 'b2', 7552 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 7553 visible: function (diamond, player) { 7554 return player.pos < 4; 7555 }, 7556 }, 7557 { 7558 id: 'b3', 7559 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 7560 visible: function (diamond, player) { 7561 return player.pos < 5; 7562 }, 7563 }, 7564 { 7565 id: 'b4', 7566 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 7567 step: { 7568 type: 'playersproperties', 7569 template: 'properties', 7570 options: [], 7571 properties: [ 7572 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7573 { 7574 name: 'pitcher', 7575 required: true, 7576 mode: 'number', 7577 getName: function (properties) { 7578 if (properties.earnedpoint.value === true) { 7579 return properties.earnedpoint.trueValue; 7580 } 7581 7582 return properties.earnedpoint.falseValue; 7583 }, 7584 defaultValue: function (selectedTeam) { 7585 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7586 }, 7587 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7588 list: function (selectedTeam) { 7589 var list = [] 7590 7591 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7592 if (pitcher) { 7593 list.push({ label: pitcher.number, data: pitcher }); 7594 } 7595 7596 selectedTeam.positions.forEach(function (position) { 7597 position.substitutions.forEach(function (substitution) { 7598 if (substitution.out.playerPosition == 'pitcher') { 7599 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7600 list.push({ label: substitution.out.number, data: substitution.out }); 7601 } 7602 } 7603 }) 7604 }) 7605 7606 return list; 7607 } 7608 } 7609 ] 7610 } 7611 } 7612 ] 7613 } 7614 }, 7615 { 7616 id: 'runnerout', 7617 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 7618 step: { 7619 type: 'playersproperties', 7620 template: 'choice', 7621 options: [ 7622 { 7623 id: 'b1', 7624 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 7625 step: { 7626 type: 'playersproperties', 7627 template: 'properties', 7628 options: [], 7629 properties: [ 7630 { 7631 name: 'assist', 7632 label: 'directives.scoreboard.baseball.tabStats.assists', 7633 multiple: { 7634 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7635 getName: function (number) { 7636 return `assist${number + 1}`; 7637 }, 7638 max: 9 7639 }, 7640 required: false 7641 }, 7642 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 7643 ] 7644 }, 7645 visible: function (diamond, player) { 7646 return player.pos <= 3; 7647 }, 7648 }, 7649 { 7650 id: 'b2', 7651 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 7652 step: { 7653 type: 'playersproperties', 7654 template: 'properties', 7655 options: [], 7656 properties: [ 7657 { 7658 name: 'assist', 7659 label: 'directives.scoreboard.baseball.tabStats.assists', 7660 multiple: { 7661 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7662 getName: function (number) { 7663 return `assist${number + 1}`; 7664 }, 7665 max: 9 7666 }, 7667 required: false 7668 }, 7669 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 7670 ] 7671 }, 7672 visible: function (diamond, player) { 7673 return player.pos <= 4; 7674 }, 7675 }, 7676 { 7677 id: 'b3', 7678 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 7679 step: { 7680 type: 'playersproperties', 7681 template: 'properties', 7682 options: [], 7683 properties: [ 7684 { 7685 name: 'assist', 7686 label: 'directives.scoreboard.baseball.tabStats.assists', 7687 multiple: { 7688 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7689 getName: function (number) { 7690 return `assist${number + 1}`; 7691 }, 7692 max: 9 7693 }, 7694 required: false 7695 }, 7696 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 7697 ] 7698 }, 7699 visible: function (diamond, player) { 7700 return player.pos <= 5; 7701 }, 7702 }, 7703 { 7704 id: 'b4', 7705 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 7706 step: { 7707 type: 'playersproperties', 7708 template: 'properties', 7709 options: [], 7710 properties: [ 7711 { 7712 name: 'assist', 7713 label: 'directives.scoreboard.baseball.tabStats.assists', 7714 multiple: { 7715 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7716 getName: function (number) { 7717 return `assist${number + 1}`; 7718 }, 7719 max: 9 7720 }, 7721 required: false 7722 }, 7723 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 7724 ] 7725 } 7726 } 7727 ] 7728 } 7729 }, 7730 { 7731 id: 'stealbase', 7732 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.stealbase.name', 7733 step: { 7734 type: 'category', 7735 template: 'choice', 7736 options: [ 7737 { 7738 id: '', 7739 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 7740 step: { 7741 type: 'playersproperties', 7742 template: 'choice', 7743 options: [ 7744 { 7745 id: 'b1', 7746 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 7747 visible: function (diamond, player) { 7748 return player.pos < 3; 7749 }, 7750 }, 7751 { 7752 id: 'b2', 7753 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 7754 visible: function (diamond, player) { 7755 return player.pos < 4; 7756 }, 7757 }, 7758 { 7759 id: 'b3', 7760 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 7761 visible: function (diamond, player) { 7762 return player.pos < 5; 7763 }, 7764 }, 7765 { 7766 id: 'b4', 7767 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 7768 step: { 7769 type: 'playersproperties', 7770 template: 'properties', 7771 options: [], 7772 properties: [ 7773 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7774 { 7775 name: 'pitcher', 7776 required: true, 7777 mode: 'number', 7778 getName: function (properties) { 7779
7779 if (properties.earnedpoint.value === true) { 7780 return properties.earnedpoint.trueValue; 7781 } 7782 7783 return properties.earnedpoint.falseValue; 7784 }, 7785 defaultValue: function (selectedTeam) { 7786 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7787 }, 7788 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7789 list: function (selectedTeam) { 7790 var list = [] 7791 7792 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7793 if (pitcher) { 7794 list.push({ label: pitcher.number, data: pitcher }); 7795 } 7796 7797 selectedTeam.positions.forEach(function (position) { 7798 position.substitutions.forEach(function (substitution) { 7799 if (substitution.out.playerPosition == 'pitcher') { 7800 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7801 list.push({ label: substitution.out.number, data: substitution.out }); 7802 } 7803 } 7804 }) 7805 }) 7806 7807 return list; 7808 } 7809 } 7810 ] 7811 } 7812 } 7813 ] 7814 } 7815 }, 7816 { 7817 id: 'error', 7818 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 7819 step: { 7820 type: 'playersproperties', 7821 template: 'choice', 7822 options: [ 7823 { 7824 id: 'b1', 7825 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 7826 step: { 7827 type: 'playersproperties', 7828 template: 'properties', 7829 options: [], 7830 properties: [ 7831 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7832 { 7833 name: 'assist', 7834 label: 'directives.scoreboard.baseball.tabStats.assists', 7835 multiple: { 7836 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7837 getName: function (number) { 7838 return `assist${number + 1}`; 7839 }, 7840 max: 9 7841 }, 7842 required: false 7843 } 7844 ] 7845 }, 7846 visible: function (diamond, player) { 7847 return player.pos <= 3; 7848 }, 7849 }, 7850 { 7851 id: 'b2', 7852 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 7853 step: { 7854 type: 'playersproperties', 7855 template: 'properties', 7856 options: [], 7857 properties: [ 7858 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7859 { 7860 name: 'assist', 7861 label: 'directives.scoreboard.baseball.tabStats.assists', 7862 multiple: { 7863 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7864 getName: function (number) { 7865 return `assist${number + 1}`; 7866 }, 7867 max: 9 7868 }, 7869 required: false 7870 } 7871 ] 7872 }, 7873 visible: function (diamond, player) { 7874 return player.pos <= 4; 7875 }, 7876 }, 7877 { 7878 id: 'b3', 7879 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 7880 step: { 7881 type: 'playersproperties', 7882 template: 'properties', 7883 options: [], 7884 properties: [ 7885 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7886 { 7887 name: 'assist', 7888 label: 'directives.scoreboard.baseball.tabStats.assists', 7889 multiple: { 7890 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7891 getName: function (number) { 7892 return `assist${number + 1}`; 7893 }, 7894 max: 9 7895 }, 7896 required: false 7897 } 7898 ] 7899 }, 7900 visible: function (diamond, player) { 7901 return player.pos <= 5; 7902 }, 7903 }, 7904 { 7905 id: 'b4', 7906 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 7907 step: { 7908 type: 'playersproperties', 7909 template: 'properties', 7910 options: [], 7911 properties: [ 7912 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 7913 { 7914 name: 'pitcher', 7915 required: true, 7916 mode: 'number', 7917 getName: function (properties) { 7918 if (properties.earnedpoint.value === true) { 7919 return properties.earnedpoint.trueValue; 7920 } 7921 7922 return properties.earnedpoint.falseValue; 7923 }, 7924 defaultValue: function (selectedTeam) { 7925 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 7926 }, 7927 label: 'directives.scoreboard.baseball.tabStats.pitcher', 7928 list: function (selectedTeam) { 7929 var list = [] 7930 7931 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 7932 if (pitcher) { 7933 list.push({ label: pitcher.number, data: pitcher }); 7934 } 7935 7936 selectedTeam.positions.forEach(function (position) { 7937 position.substitutions.forEach(function (substitution) { 7938 if (substitution.out.playerPosition == 'pitcher') { 7939 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 7940 list.push({ label: substitution.out.number, data: substitution.out }); 7941 } 7942 } 7943 }) 7944 }) 7945 7946 return list; 7947 } 7948 }, 7949 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 7950 { 7951 name: 'assist', 7952 label: 'directives.scoreboard.baseball.tabStats.assists', 7953 multiple: { 7954 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7955 getName: function (number) { 7956 return `assist${number + 1}`; 7957 }, 7958 max: 9 7959 }, 7960 required: false 7961 }, 7962 ] 7963 } 7964 } 7965 ] 7966 } 7967 }, 7968 { 7969 id: 'out', 7970 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 7971 step: { 7972 type: 'playersproperties', 7973 template: 'choice', 7974 options: [ 7975 { 7976 id: 'b1', 7977 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 7978 step: { 7979 type: 'playersproperties', 7980 template: 'properties', 7981 options: [], 7982 properties: [ 7983 { 7984 name: 'assist', 7985 label: 'directives.scoreboard.baseball.tabStats.assists', 7986 multiple: { 7987 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 7988
7988 getName: function (number) { 7989 return `assist${number + 1}`; 7990 }, 7991 max: 9 7992 }, 7993 required: false 7994 }, 7995 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 7996 ] 7997 }, 7998 visible: function (diamond, player) { 7999 return player.pos <= 3; 8000 }, 8001 }, 8002 { 8003 id: 'b2', 8004 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8005 step: { 8006 type: 'playersproperties', 8007 template: 'properties', 8008 options: [], 8009 properties: [ 8010 { 8011 name: 'assist', 8012 label: 'directives.scoreboard.baseball.tabStats.assists', 8013 multiple: { 8014 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8015 getName: function (number) { 8016 return `assist${number + 1}`; 8017 }, 8018 max: 9 8019 }, 8020 required: false 8021 }, 8022 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8023 ] 8024 }, 8025 visible: function (diamond, player) { 8026 return player.pos <= 4; 8027 }, 8028 }, 8029 { 8030 id: 'b3', 8031 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8032 step: { 8033 type: 'playersproperties', 8034 template: 'properties', 8035 options: [], 8036 properties: [ 8037 { 8038 name: 'assist', 8039 label: 'directives.scoreboard.baseball.tabStats.assists', 8040 multiple: { 8041 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8042 getName: function (number) { 8043 return `assist${number + 1}`; 8044 }, 8045 max: 9 8046 }, 8047 required: false 8048 }, 8049 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8050 ] 8051 }, 8052 visible: function (diamond, player) { 8053 return player.pos <= 5; 8054 }, 8055 }, 8056 { 8057 id: 'b4', 8058 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8059 step: { 8060 type: 'playersproperties', 8061 template: 'properties', 8062 options: [], 8063 properties: [ 8064 { 8065 name: 'assist', 8066 label: 'directives.scoreboard.baseball.tabStats.assists', 8067 multiple: { 8068 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8069 getName: function (number) { 8070 return `assist${number + 1}`; 8071 }, 8072 max: 9 8073 }, 8074 required: false 8075 }, 8076 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8077 ] 8078 } 8079 } 8080 ] 8081 } 8082 }, 8083 ] 8084 } 8085 }, 8086 { 8087 id: 'advance', 8088 other: [{ name: 'category', id: 'relay' }], 8089 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.relay.name', 8090 step: { 8091 type: 'playersproperties', 8092 template: 'choice', 8093 options: [ 8094 { 8095 id: 'b2', 8096 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8097 visible: function (diamond, player) { 8098 return player.pos < 4; 8099 }, 8100 }, 8101 { 8102 id: 'b3', 8103 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8104 visible: function (diamond, player) { 8105 return player.pos < 5; 8106 }, 8107 }, 8108 { 8109 id: 'b4', 8110 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8111 step: { 8112 type: 'playersproperties', 8113 template: 'properties', 8114 options: [], 8115 properties: [ 8116 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 8117 { 8118 name: 'pitcher', 8119 required: true, 8120 mode: 'number', 8121 getName: function (properties) { 8122 if (properties.earnedpoint.value === true) { 8123 return properties.earnedpoint.trueValue; 8124 } 8125 8126 return properties.earnedpoint.falseValue; 8127 }, 8128 defaultValue: function (selectedTeam) { 8129 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 8130 }, 8131 label: 'directives.scoreboard.baseball.tabStats.pitcher', 8132 list: function (selectedTeam) { 8133 var list = [] 8134 8135 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 8136 if (pitcher) { 8137 list.push({ label: pitcher.number, data: pitcher }); 8138 } 8139 8140 selectedTeam.positions.forEach(function (position) { 8141 position.substitutions.forEach(function (substitution) { 8142 if (substitution.out.playerPosition == 'pitcher') { 8143 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 8144 list.push({ label: substitution.out.number, data: substitution.out }); 8145 } 8146 } 8147 }) 8148 }) 8149 8150 return list; 8151 } 8152 } 8153 ] 8154 } 8155 } 8156 ] 8157 } 8158 }, 8159 { 8160 id: 'defenseerror', 8161 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.defenseerror.name', 8162 step: { 8163 type: 'category', 8164 template: 'choice', 8165 options: [ 8166 { 8167 id: '', 8168 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 8169 step: { 8170 type: 'playersproperties', 8171 template: 'choice', 8172 options: [ 8173 { 8174 id: 'b2', 8175 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8176 step: { 8177 type: 'playersproperties', 8178 template: 'properties', 8179 options: [], 8180 properties: [ 8181 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.defenseErrorNumber' } 8182 ] 8183 }, 8184 visible: function (diamond, player) { 8185 return player.pos < 4; 8186 }, 8187 }, 8188 { 8189 id: 'b3', 8190 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8191 step: { 8192 type: 'playersproperties', 8193 template: 'properties', 8194 options: [], 8195 properties: [ 8196 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.defenseErrorNumber' } 8197 ] 8198 }, 8199 visible: function (diamond, player) { 8200 return player.pos < 5; 8201 }, 8202 }, 8203 { 8204 id: 'b4', 8205 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8206 step: { 8207 type: 'playersproperties', 8208 template: 'properties', 8209 options: [], 8210 properties: [ 8211 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 8212 { 8213 name: 'pitcher', 8214 required: true, 8215 mode: 'number', 8216 getName: function (properties) { 8217 if (properties.earnedpoint.va
8217lue === true) { 8218 return properties.earnedpoint.trueValue; 8219 } 8220 8221 return properties.earnedpoint.falseValue; 8222 }, 8223 defaultValue: function (selectedTeam) { 8224 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 8225 }, 8226 label: 'directives.scoreboard.baseball.tabStats.pitcher', 8227 list: function (selectedTeam) { 8228 var list = [] 8229 8230 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 8231 if (pitcher) { 8232 list.push({ label: pitcher.number, data: pitcher }); 8233 } 8234 8235 selectedTeam.positions.forEach(function (position) { 8236 position.substitutions.forEach(function (substitution) { 8237 if (substitution.out.playerPosition == 'pitcher') { 8238 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 8239 list.push({ label: substitution.out.number, data: substitution.out }); 8240 } 8241 } 8242 }) 8243 }) 8244 8245 return list; 8246 } 8247 }, 8248 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.defenseErrorNumber' } 8249 ] 8250 } 8251 } 8252 ] 8253 } 8254 }, 8255 { 8256 id: 'error', 8257 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 8258 step: { 8259 type: 'playersproperties', 8260 template: 'choice', 8261 options: [ 8262 { 8263 id: 'b2', 8264 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8265 step: { 8266 type: 'playersproperties', 8267 template: 'properties', 8268 options: [], 8269 properties: [ 8270 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.defenseErrorNumber' }, 8271 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8272 ] 8273 }, 8274 visible: function (diamond, player) { 8275 return player.pos < 4; 8276 }, 8277 }, 8278 { 8279 id: 'b3', 8280 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8281 step: { 8282 type: 'playersproperties', 8283 template: 'properties', 8284 options: [], 8285 properties: [ 8286 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.defenseErrorNumber' }, 8287 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8288 ] 8289 }, 8290 visible: function (diamond, player) { 8291 return player.pos < 5; 8292 }, 8293 }, 8294 { 8295 id: 'b4', 8296 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8297 step: { 8298 type: 'playersproperties', 8299 template: 'properties', 8300 options: [], 8301 properties: [ 8302 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 8303 { 8304 name: 'pitcher', 8305 required: true, 8306 mode: 'number', 8307 getName: function (properties) { 8308 if (properties.earnedpoint.value === true) { 8309 return properties.earnedpoint.trueValue; 8310 } 8311 8312 return properties.earnedpoint.falseValue; 8313 }, 8314 defaultValue: function (selectedTeam) { 8315 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 8316 }, 8317 label: 'directives.scoreboard.baseball.tabStats.pitcher', 8318 list: function (selectedTeam) { 8319 var list = [] 8320 8321 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 8322 if (pitcher) { 8323 list.push({ label: pitcher.number, data: pitcher }); 8324 } 8325 8326 selectedTeam.positions.forEach(function (position) { 8327 position.substitutions.forEach(function (substitution) { 8328 if (substitution.out.playerPosition == 'pitcher') { 8329 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 8330 list.push({ label: substitution.out.number, data: substitution.out }); 8331 } 8332 } 8333 }) 8334 }) 8335 8336 return list; 8337 } 8338 }, 8339 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.defenseErrorNumber' }, 8340 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8341 ] 8342 } 8343 } 8344 ] 8345 } 8346 }, 8347 { 8348 id: 'out', 8349 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 8350 step: { 8351 type: 'playersproperties', 8352 template: 'choice', 8353 options: [ 8354 { 8355 id: 'b2', 8356 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8357 step: { 8358 type: 'playersproperties', 8359 template: 'properties', 8360 options: [], 8361 properties: [ 8362 { 8363 name: 'assist', 8364 label: 'directives.scoreboard.baseball.tabStats.assists', 8365 multiple: { 8366 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8367 getName: function (number) { 8368 return `assist${number + 1}`; 8369 }, 8370 max: 9 8371 }, 8372 required: false 8373 }, 8374 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8375 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 8376 ] 8377 }, 8378 visible: function (diamond, player) { 8379 return player.pos < 4; 8380 }, 8381 }, 8382 { 8383 id: 'b3', 8384 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8385 step: { 8386 type: 'playersproperties', 8387 template: 'properties', 8388 options: [], 8389 properties: [ 8390 { 8391 name: 'assist', 8392 label: 'directives.scoreboard.baseball.tabStats.assists', 8393 multiple: { 8394 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8395 getName: function (number) { 8396 return `assist${number + 1}`; 8397 }, 8398 max: 9 8399 }, 8400 required: false 8401 }, 8402 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8403 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 8404 ] 8405 }, 8406 visible: function (diamond, player) { 8407 return player.pos < 5; 8408 }, 8409 }, 8410 { 8411 id: 'b4', 8412 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8413 step: { 8414 type: 'playersproperties', 8415 template: 'properties', 8416 options: [], 8417 properties: [ 8418 { 8419 name: 'assist', 8420 label: 'directives.scoreboard.baseball.tabStats.assists', 8421 multiple: { 8422 label: 'directives.scoreboard.baseball.tabStats.assistNumb
8422erN', 8423 getName: function (number) { 8424 return `assist${number + 1}`; 8425 }, 8426 max: 9 8427 }, 8428 required: false 8429 }, 8430 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8431 { name: 'defenseerror', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 8432 ] 8433 } 8434 } 8435 ] 8436 } 8437 }, 8438 ] 8439 } 8440 }, 8441 { 8442 id: 'interference', 8443 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.interference.name', 8444 step: { 8445 type: 'category', 8446 template: 'choice', 8447 options: [ 8448 { 8449 id: '', 8450 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 8451 step: { 8452 type: 'playersproperties', 8453 template: 'choice', 8454 options: [ 8455 { 8456 id: 'b2', 8457 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8458 visible: function (diamond, player) { 8459 return player.pos < 4; 8460 }, 8461 }, 8462 { 8463 id: 'b3', 8464 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8465 visible: function (diamond, player) { 8466 return player.pos < 5 8467 }, 8468 }, 8469 { 8470 id: 'b4', 8471 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8472 step: { 8473 type: 'playersproperties', 8474 template: 'properties', 8475 options: [], 8476 properties: [ 8477 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 8478 { 8479 name: 'pitcher', 8480 required: true, 8481 mode: 'number', 8482 getName: function (properties) { 8483 if (properties.earnedpoint.value === true) { 8484 return properties.earnedpoint.trueValue; 8485 } 8486 8487 return properties.earnedpoint.falseValue; 8488 }, 8489 defaultValue: function (selectedTeam) { 8490 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 8491 }, 8492 label: 'directives.scoreboard.baseball.tabStats.pitcher', 8493 list: function (selectedTeam) { 8494 var list = [] 8495 8496 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 8497 if (pitcher) { 8498 list.push({ label: pitcher.number, data: pitcher }); 8499 } 8500 8501 selectedTeam.positions.forEach(function (position) { 8502 position.substitutions.forEach(function (substitution) { 8503 if (substitution.out.playerPosition == 'pitcher') { 8504 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 8505 list.push({ label: substitution.out.number, data: substitution.out }); 8506 } 8507 } 8508 }) 8509 }) 8510 8511 return list; 8512 } 8513 } 8514 ] 8515 } 8516 } 8517 ] 8518 } 8519 }, 8520 { 8521 id: 'error', 8522 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 8523 step: { 8524 type: 'playersproperties', 8525 template: 'choice', 8526 options: [ 8527 { 8528 id: 'b2', 8529 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8530 step: { 8531 type: 'playersproperties', 8532 template: 'properties', 8533 options: [], 8534 properties: [ 8535 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8536 ] 8537 }, 8538 visible: function (diamond, player) { 8539 return player.pos < 4; 8540 }, 8541 }, 8542 { 8543 id: 'b3', 8544 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8545 step: { 8546 type: 'playersproperties', 8547 template: 'properties', 8548 options: [], 8549 properties: [ 8550 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8551 ] 8552 }, 8553 visible: function (diamond, player) { 8554 return player.pos < 5; 8555 }, 8556 }, 8557 { 8558 id: 'b4', 8559 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8560 step: { 8561 type: 'playersproperties', 8562 template: 'properties', 8563 options: [], 8564 properties: [ 8565 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8566 ] 8567 } 8568 } 8569 ] 8570 } 8571 }, 8572 { 8573 id: 'out', 8574 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 8575 step: { 8576 type: 'playersproperties', 8577 template: 'choice', 8578 options: [ 8579 { 8580 id: 'b2', 8581 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8582 step: { 8583 type: 'playersproperties', 8584 template: 'properties', 8585 options: [], 8586 properties: [ 8587 { 8588 name: 'assist', 8589 label: 'directives.scoreboard.baseball.tabStats.assists', 8590 multiple: { 8591 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8592 getName: function (number) { 8593 return `assist${number + 1}`; 8594 }, 8595 max: 9 8596 }, 8597 required: false 8598 }, 8599 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8600 ] 8601 }, 8602 visible: function (diamond, player) { 8603 return player.pos < 4; 8604 }, 8605 }, 8606 { 8607 id: 'b3', 8608 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8609 step: { 8610 type: 'playersproperties', 8611 template: 'properties', 8612 options: [], 8613 properties: [ 8614 { 8615 name: 'assist', 8616 label: 'directives.scoreboard.baseball.tabStats.assists', 8617 multiple: { 8618 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8619 getName: function (number) { 8620 return `assist${number + 1}`; 8621 }, 8622 max: 9 8623 }, 8624 required: false 8625 }, 8626 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8627 ] 8628 }, 8629 visible: function (diamond, player) { 8630 return player.pos < 5; 8631 }, 8632 }, 8633 { 8634 id: 'b4', 8635 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8636 step: { 8637 type: 'playersproperties', 8638 template: 'properties', 8639 options: [], 8640 properties: [ 8641 { 8642 name: 'assist', 8643 label: 'directives.scoreboard.baseball.tabStats.assists', 8644 multiple: { 8645 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8646
8646 getName: function (number) { 8647 return `assist${number + 1}`; 8648 }, 8649 max: 9 8650 }, 8651 required: false 8652 }, 8653 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8654 ] 8655 } 8656 } 8657 ] 8658 } 8659 }, 8660 ] 8661 } 8662 }, 8663 { 8664 id: 'obstruction', 8665 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.obstruction.name', 8666 step: { 8667 type: 'category', 8668 template: 'choice', 8669 options: [ 8670 { 8671 id: '', 8672 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 8673 step: { 8674 type: 'playersproperties', 8675 template: 'choice', 8676 options: [ 8677 { 8678 id: 'b2', 8679 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8680 visible: function (diamond, player) { 8681 return player.pos < 4; 8682 }, 8683 }, 8684 { 8685 id: 'b3', 8686 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8687 visible: function (diamond, player) { 8688 return player.pos < 5; 8689 }, 8690 }, 8691 { 8692 id: 'b4', 8693 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name' 8694 } 8695 ] 8696 } 8697 }, 8698 { 8699 id: 'error', 8700 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 8701 step: { 8702 type: 'playersproperties', 8703 template: 'choice', 8704 options: [ 8705 { 8706 id: 'b2', 8707 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8708 step: { 8709 type: 'playersproperties', 8710 template: 'properties', 8711 options: [], 8712 properties: [ 8713 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8714 ] 8715 }, 8716 visible: function (diamond, player) { 8717 return player.pos < 4; 8718 }, 8719 }, 8720 { 8721 id: 'b3', 8722 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8723 step: { 8724 type: 'playersproperties', 8725 template: 'properties', 8726 options: [], 8727 properties: [ 8728 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8729 ] 8730 }, 8731 visible: function (diamond, player) { 8732 return player.pos < 5; 8733 }, 8734 }, 8735 { 8736 id: 'b4', 8737 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8738 step: { 8739 type: 'playersproperties', 8740 template: 'properties', 8741 options: [], 8742 properties: [ 8743 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 8744 ] 8745 } 8746 } 8747 ] 8748 } 8749 }, 8750 { 8751 id: 'out', 8752 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 8753 step: { 8754 type: 'playersproperties', 8755 template: 'choice', 8756 options: [ 8757 { 8758 id: 'b2', 8759 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8760 step: { 8761 type: 'playersproperties', 8762 template: 'properties', 8763 options: [], 8764 properties: [ 8765 { 8766 name: 'assist', 8767 label: 'directives.scoreboard.baseball.tabStats.assists', 8768 multiple: { 8769 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8770 getName: function (number) { 8771 return `assist${number + 1}`; 8772 }, 8773 max: 9 8774 }, 8775 required: false 8776 }, 8777 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8778 ] 8779 }, 8780 visible: function (diamond, player) { 8781 return player.pos < 4; 8782 }, 8783 }, 8784 { 8785 id: 'b3', 8786 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8787 step: { 8788 type: 'playersproperties', 8789 template: 'properties', 8790 options: [], 8791 properties: [ 8792 { 8793 name: 'assist', 8794 label: 'directives.scoreboard.baseball.tabStats.assists', 8795 multiple: { 8796 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8797 getName: function (number) { 8798 return `assist${number + 1}`; 8799 }, 8800 max: 9 8801 }, 8802 required: false 8803 }, 8804 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8805 ] 8806 }, 8807 visible: function (diamond, player) { 8808 return player.pos < 5; 8809 }, 8810 }, 8811 { 8812 id: 'b4', 8813 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8814 step: { 8815 type: 'playersproperties', 8816 template: 'properties', 8817 options: [], 8818 properties: [ 8819 { 8820 name: 'assist', 8821 label: 'directives.scoreboard.baseball.tabStats.assists', 8822 multiple: { 8823 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 8824 getName: function (number) { 8825 return `assist${number + 1}`; 8826 }, 8827 max: 9 8828 }, 8829 required: false 8830 }, 8831 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 8832 ] 8833 } 8834 } 8835 ] 8836 } 8837 }, 8838 ] 8839 } 8840 }, 8841 { 8842 id: 'balk', 8843 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.balk.name', 8844 other: [function (player, diamond) { 8845 var b4Player = _.find(diamond.offense, { pos: 5 }); 8846 8847 if (b4Player) { 8848 var other = { type: 'playersproperties' }; 8849 8850 other.name = 'b4'; 8851 other.player = b4Player; 8852 8853 return other; 8854 } 8855 8856 return null; 8857 }], 8858 step: { 8859 type: 'playersproperties', 8860 template: 'properties', 8861 options: [], 8862 condition: function (diamond) { 8863 return _.findIndex(diamond.offense, { playerPosition: 'thirdbase' }) != -1; 8864 }, 8865 properties: [ 8866 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 8867 { 8868 name: 'pitcher', 8869 required: true, 8870 mode: 'number', 8871 getName: function (properties) { 8872 if (properties.earnedpoint.value === true) { 8873 return properties.earnedpoint.trueValue; 8874 } 8875 8876 return properties.earnedpoint.falseValue; 8877 }, 8878 defaultValue: function (selectedTeam) { 8879 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 8880 }, 8881 label: 'directives.scoreboard.baseball.tabStats.pitcher', 8882 list: function (selectedTeam) { 8883 var list = [] 8884 8885 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 8886 if (pitcher) { 8887 list.push({ label: pitcher.number, data: pitcher }); 8888 } 8889 8890 selectedTeam.positions.forEach(function (position) { 8891 position.substitutions.forEach(functio
8891n (substitution) { 8892 if (substitution.out.playerPosition == 'pitcher') { 8893 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 8894 list.push({ label: substitution.out.number, data: substitution.out }); 8895 } 8896 } 8897 }) 8898 }) 8899 8900 return list; 8901 } 8902 } 8903 ] 8904 } 8905 }, 8906 { 8907 id: 'badpitch', 8908 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.badpitch.name', 8909 step: { 8910 type: 'category', 8911 template: 'choice', 8912 options: [ 8913 { 8914 id: '', 8915 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 8916 step: { 8917 type: 'playersproperties', 8918 template: 'choice', 8919 options: [ 8920 { 8921 id: 'b2', 8922 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8923 visible: function (diamond, player) { 8924 return player.pos < 4; 8925 }, 8926 }, 8927 { 8928 id: 'b3', 8929 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 8930 visible: function (diamond, player) { 8931 return player.pos < 5; 8932 }, 8933 }, 8934 { 8935 id: 'b4', 8936 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 8937 step: { 8938 type: 'playersproperties', 8939 template: 'properties', 8940 options: [], 8941 properties: [ 8942 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 8943 { 8944 name: 'pitcher', 8945 required: true, 8946 mode: 'number', 8947 getName: function (properties) { 8948 if (properties.earnedpoint.value === true) { 8949 return properties.earnedpoint.trueValue; 8950 } 8951 8952 return properties.earnedpoint.falseValue; 8953 }, 8954 defaultValue: function (selectedTeam) { 8955 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 8956 }, 8957 label: 'directives.scoreboard.baseball.tabStats.pitcher', 8958 list: function (selectedTeam) { 8959 var list = [] 8960 8961 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 8962 if (pitcher) { 8963 list.push({ label: pitcher.number, data: pitcher }); 8964 } 8965 8966 selectedTeam.positions.forEach(function (position) { 8967 position.substitutions.forEach(function (substitution) { 8968 if (substitution.out.playerPosition == 'pitcher') { 8969 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 8970 list.push({ label: substitution.out.number, data: substitution.out }); 8971 } 8972 } 8973 }) 8974 }) 8975 8976 return list; 8977 } 8978 } 8979 ] 8980 } 8981 } 8982 ] 8983 } 8984 }, 8985 { 8986 id: 'error', 8987 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 8988 step: { 8989 type: 'playersproperties', 8990 template: 'choice', 8991 options: [ 8992 { 8993 id: 'b2', 8994 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 8995 step: { 8996 type: 'playersproperties', 8997 template: 'properties', 8998 options: [], 8999 properties: [ 9000 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9001 ] 9002 }, 9003 visible: function (diamond, player) { 9004 return player.pos < 4; 9005 }, 9006 }, 9007 { 9008 id: 'b3', 9009 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9010 step: { 9011 type: 'playersproperties', 9012 template: 'properties', 9013 options: [], 9014 properties: [ 9015 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9016 ] 9017 }, 9018 visible: function (diamond, player) { 9019 return player.pos < 5; 9020 }, 9021 }, 9022 { 9023 id: 'b4', 9024 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9025 step: { 9026 type: 'playersproperties', 9027 template: 'properties', 9028 options: [], 9029 properties: [ 9030 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9031 { 9032 name: 'pitcher', 9033 required: true, 9034 mode: 'number', 9035 getName: function (properties) { 9036 if (properties.earnedpoint.value === true) { 9037 return properties.earnedpoint.trueValue; 9038 } 9039 9040 return properties.earnedpoint.falseValue; 9041 }, 9042 defaultValue: function (selectedTeam) { 9043 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9044 }, 9045 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9046 list: function (selectedTeam) { 9047 var list = [] 9048 9049 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9050 if (pitcher) { 9051 list.push({ label: pitcher.number, data: pitcher }); 9052 } 9053 9054 selectedTeam.positions.forEach(function (position) { 9055 position.substitutions.forEach(function (substitution) { 9056 if (substitution.out.playerPosition == 'pitcher') { 9057 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9058 list.push({ label: substitution.out.number, data: substitution.out }); 9059 } 9060 } 9061 }) 9062 }) 9063 9064 return list; 9065 } 9066 }, 9067 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9068 ] 9069 } 9070 } 9071 ] 9072 } 9073 }, 9074 { 9075 id: 'out', 9076 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 9077 step: { 9078 type: 'playersproperties', 9079 template: 'choice', 9080 options: [ 9081 { 9082 id: 'b2', 9083 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9084 step: { 9085 type: 'playersproperties', 9086 template: 'properties', 9087 options: [], 9088 properties: [ 9089 { 9090 name: 'assist', 9091 label: 'directives.scoreboard.baseball.tabStats.assists', 9092 multiple: { 9093 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9094 getName: function (number) { 9095 return `assist${number + 1}`; 9096 }, 9097 max: 9 9098 }, 9099 required: false 9100 }, 9101 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9102 ] 9103 }, 9104 visible: function (diamond, player) { 9105 return player.pos < 4; 9106 }, 9107 }, 9108 { 9109 id: 'b3', 9110 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9111
9111 step: { 9112 type: 'playersproperties', 9113 template: 'properties', 9114 options: [], 9115 properties: [ 9116 { 9117 name: 'assist', 9118 label: 'directives.scoreboard.baseball.tabStats.assists', 9119 multiple: { 9120 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9121 getName: function (number) { 9122 return `assist${number + 1}`; 9123 }, 9124 max: 9 9125 }, 9126 required: false 9127 }, 9128 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9129 ] 9130 }, 9131 visible: function (diamond, player) { 9132 return player.pos < 5; 9133 }, 9134 }, 9135 { 9136 id: 'b4', 9137 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9138 step: { 9139 type: 'playersproperties', 9140 template: 'properties', 9141 options: [], 9142 properties: [ 9143 { 9144 name: 'assist', 9145 label: 'directives.scoreboard.baseball.tabStats.assists', 9146 multiple: { 9147 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9148 getName: function (number) { 9149 return `assist${number + 1}`; 9150 }, 9151 max: 9 9152 }, 9153 required: false 9154 }, 9155 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9156 ] 9157 } 9158 } 9159 ] 9160 } 9161 }, 9162 ] 9163 } 9164 }, 9165 { 9166 id: 'runnerpassedball', 9167 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.passedball.name', 9168 other: [function (player, diamond) { 9169 var other = { type: 'playersproperties' }; 9170
9171 other.name = 'receiver'; 9172 other.player = _.find(diamond.defense, { pos: 2 }); 9173 9174 return other; 9175 }], 9176 step: { 9177 type: 'category', 9178 template: 'choice', 9179 options: [ 9180 { 9181 id: '', 9182 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 9183 step: { 9184 type: 'playersproperties', 9185 template: 'choice', 9186 options: [ 9187 { 9188 id: 'b1', 9189 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 9190 visible: function (diamond, player) { 9191 return player.pos <= 3; 9192 }, 9193 }, 9194 { 9195 id: 'b2', 9196 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9197 visible: function (diamond, player) { 9198 return player.pos <= 4; 9199 }, 9200 }, 9201 { 9202 id: 'b3', 9203 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9204 visible: function (diamond, player) { 9205 return player.pos <= 5; 9206 }, 9207 }, 9208 { 9209 id: 'b4', 9210 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9211 step: { 9212 type: 'playersproperties', 9213 template: 'properties', 9214 options: [], 9215 properties: [ 9216 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9217 { 9218 name: 'pitcher', 9219 required: true, 9220 mode: 'number', 9221 getName: function (properties) { 9222 if (properties.earnedpoint.value === true) { 9223 return properties.earnedpoint.trueValue; 9224 } 9225 9226 return properties.earnedpoint.falseValue; 9227 }, 9228 defaultValue: function (selectedTeam) { 9229 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9230 }, 9231 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9232 list: function (selectedTeam) { 9233 var list = [] 9234 9235 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9236 if (pitcher) { 9237 list.push({ label: pitcher.number, data: pitcher }); 9238 } 9239 9240 selectedTeam.positions.forEach(function (position) { 9241 position.substitutions.forEach(function (substitution) { 9242 if (substitution.out.playerPosition == 'pitcher') { 9243 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9244 list.push({ label: substitution.out.number, data: substitution.out }); 9245 } 9246 } 9247 }) 9248 }) 9249 9250 return list; 9251 } 9252 } 9253 ] 9254 } 9255 } 9256 ] 9257 } 9258 }, 9259 { 9260 id: 'out', 9261 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 9262 step: { 9263 type: 'playersproperties', 9264 template: 'choice', 9265 options: [ 9266 { 9267 id: 'b1', 9268 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 9269 step: { 9270 type: 'playersproperties', 9271 template: 'properties', 9272 options: [], 9273 properties: [ 9274 { 9275 name: 'assist', 9276 label: 'directives.scoreboard.baseball.tabStats.assists', 9277 multiple: { 9278 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9279 getName: function (number) { 9280 return `assist${number + 1}`; 9281 }, 9282 max: 9 9283 }, 9284 required: false 9285 }, 9286 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9287 ] 9288 }, 9289 visible: function (diamond, player) { 9290 return player.pos <= 3; 9291 }, 9292 }, 9293 { 9294 id: 'b2', 9295 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9296 step: { 9297 type: 'playersproperties', 9298 template: 'properties', 9299 options: [], 9300 properties: [ 9301 { 9302 name: 'assist', 9303 label: 'directives.scoreboard.baseball.tabStats.assists', 9304 multiple: { 9305 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9306 getName: function (number) { 9307 return `assist${number + 1}`; 9308 }, 9309 max: 9 9310 }, 9311 required: false 9312 }, 9313 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9314 ] 9315 }, 9316 visible: function (diamond, player) { 9317 return player.pos <= 4; 9318 }, 9319 }, 9320 { 9321 id: 'b3', 9322 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9323 step: { 9324 type: 'playersproperties', 9325 template: 'properties', 9326 options: [], 9327 properties: [ 9328 { 9329 name: 'assist', 9330 label: 'directives.scoreboard.baseball.tabStats.assists', 9331 multiple: { 9332 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9333 getName: function (number) { 9334 return `assist${number + 1}`; 9335 }, 9336 max: 9 9337 }, 9338 required: false 9339 }, 9340 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9341 ] 9342 }, 9343 visible: function (diamond, player) { 9344 return player.pos <= 5; 9345 }, 9346 }, 9347 { 9348 id: 'b4', 9349 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9350 step: { 9351 type: 'playersproperties', 9352 template: 'properties', 9353 options: [], 9354 properties: [ 9355 { 9356 name: 'assist', 9357 label: 'directives.scoreboard.baseball.tabStats.assists', 9358 multiple: { 9359 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9360 getName: function (number) { 9361 return `assist${number + 1}`; 9362 }, 9363 max: 9 9364 }, 9365 required: false 9366 }, 9367 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' }, 9368 ] 9369 } 9370 } 9371 ] 9372 } 9373 }, 9374 ] 9375 } 9376 }, 9377 { 9378 id: 'advance', 9379 other: [{ name: 'category', id: 'fielderchoice' }], 9380 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.fielderchoice.name', 9381 step: { 9382 type: 'playersproperties', 9383 template: 'choice', 9384 options: [ 9385 { 9386 id: 'b2', 9387 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9388 visible: function (diamond, player) { 9389 return player.pos < 4; 9390 }, 9391 }, 9392 { 9393 id: 'b3', 9394 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9395 visible: function (diamond, player) { 9396 return player.pos < 5; 9397 }, 9398
9398 }, 9399 { 9400 id: 'b4', 9401 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9402 step: { 9403 type: 'playersproperties', 9404 template: 'properties', 9405 options: [], 9406 properties: [ 9407 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9408 { 9409 name: 'pitcher', 9410 required: true, 9411 mode: 'number', 9412 getName: function (properties) { 9413 if (properties.earnedpoint.value === true) { 9414 return properties.earnedpoint.trueValue; 9415 } 9416 9417 return properties.earnedpoint.falseValue; 9418 }, 9419 defaultValue: function (selectedTeam) { 9420 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9421 }, 9422 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9423 list: function (selectedTeam) { 9424 var list = [] 9425 9426 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9427 if (pitcher) { 9428 list.push({ label: pitcher.number, data: pitcher }); 9429 } 9430 9431 selectedTeam.positions.forEach(function (position) { 9432 position.substitutions.forEach(function (substitution) { 9433 if (substitution.out.playerPosition == 'pitcher') { 9434 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9435 list.push({ label: substitution.out.number, data: substitution.out }); 9436 } 9437 } 9438 }) 9439 }) 9440 9441 return list; 9442 } 9443 } 9444 ] 9445 } 9446 } 9447 ] 9448 } 9449 } 9450 ] 9451 }, 9452 baseonball: { 9453 title: 'directives.scoreboard.baseball.tabStats.out', 9454 type: 'type', 9455 template: 'choice', 9456 name: 'directives.scoreboard.baseball.tabStats.onBasesTypes.baseonball.name', 9457 options: [ 9458 { 9459 id: 'ballLimit', 9460 autoGenerateRunners: function (outline, seq, diamond, sequence) { 9461 var events = []; 9462 var baseNames = { 3: "b1", 4: "b2", 5: "b3", 6: "b4" }; 9463 9464 outline.forEach(function (outlineStep) { 9465 if (outlineStep.id == "runner") { 9466 var shouldMove = outlineStep.data.pos == 3; 9467 9468 if (outlineStep.data.pos > 3) { 9469 var playerCount = 0; 9470 for (var i = outlineStep.data.pos - 1; i > 2; i--) { 9471 if (_.find(diamond.offense, { pos: i })) { 9472 playerCount++; 9473 } 9474 } 9475 9476 shouldMove = playerCount == outlineStep.data.pos - 3; 9477 } 9478 9479 var runnerEvent = { 9480 seq: seq++, 9481 type: shouldMove ? "advance" : "none", 9482 category: null, 9483 playersproperties: [{ 9484 seq: 1, 9485 name: baseNames[outlineStep.data.pos + (shouldMove * 1)], 9486 id: outlineStep.data.id, 9487 pos: outlineStep.data.pos, 9488 row: outlineStep.data.row, 9489 number: outlineStep.data.playerNumber,
9490 teamid: outlineStep.data.teamId 9491 }] 9492 } 9493 9494 if (shouldMove && outlineStep.data.pos === 5) { 9495 var ballLimitEvent = _.find(sequence, { type: 'ballLimit' }); 9496 runnerEvent.playersproperties = runnerEvent.playersproperties.concat(ballLimitEvent.playersproperties); 9497 _.remove(sequence, { type: 'ballLimit' }); 9498 } 9499 9500 events.push(runnerEvent); 9501 } 9502 }) 9503 9504 return events; 9505 }, 9506 step: { 9507 type: 'playersproperties', 9508 template: 'properties', 9509 options: [], 9510 condition: function (diamond) { 9511 var thirdBasePlayer = _.findIndex(diamond.offense, { playerPosition: 'thirdbase' }) != -1; 9512 var shouldMove = false; 9513 if (thirdBasePlayer) { 9514 var playerCount = 0; 9515 for (var i = 4; i > 2; i--) { 9516 if (_.find(diamond.offense, { pos: i })) { 9517 playerCount++; 9518 } 9519 } 9520 9521 shouldMove = playerCount == 2; 9522 } 9523 return shouldMove; 9524 }, 9525 properties: [ 9526 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9527 { 9528 name: 'pitcher', 9529 required: true, 9530 mode: 'number', 9531 getName: function (properties) { 9532 if (properties.earnedpoint.value === true) { 9533 return properties.earnedpoint.trueValue; 9534 } 9535 9536 return properties.earnedpoint.falseValue; 9537 }, 9538 defaultValue: function (selectedTeam) { 9539 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9540 }, 9541 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9542 list: function (selectedTeam) { 9543 var list = [] 9544 9545 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9546 if (pitcher) { 9547 list.push({ label: pitcher.number, data: pitcher }); 9548 } 9549 9550 selectedTeam.positions.forEach(function (position) { 9551 position.substitutions.forEach(function (substitution) { 9552 if (substitution.out.playerPosition == 'pitcher') { 9553 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9554 list.push({ label: substitution.out.number, data: substitution.out }); 9555 } 9556 } 9557 }) 9558 }) 9559 9560 return list; 9561 } 9562 } 9563 ] 9564 } 9565 } 9566 ], 9567 9568 step: {} 9569 },
9570 strikeout: { 9571 id: 'strikeout', 9572 name: 'directives.scoreboard.baseball.tabStats.outsTypes.strikeout.name', 9573 autoGenerateRunners: function (outline, seq) { 9574 var events = []; 9575 var baseNames = { 3: "b1", 4: "b2", 5: "b3" }; 9576 outline.forEach(function (outlineStep) { 9577 if (outlineStep.id == "runner") { 9578 var runnerEvent = { 9579 seq: seq++, 9580 type: "none", 9581 category: null, 9582 playersproperties: [{ 9583 seq: 1, 9584 name: baseNames[outlineStep.data.pos], 9585 id: outlineStep.data.id, 9586 pos: outlineStep.data.pos, 9587 row: outlineStep.data.row, 9588 number: outlineStep.data.playerNumber, 9589 teamid: outlineStep.data.teamId 9590 } 9591 ] 9592 9593 } 9594 events.push(runnerEvent); 9595 } 9596 }) 9597 9598 return events; 9599 }, 9600 type: '', 9601 template: 'choice', 9602 options: [ 9603 { 9604 id: 'out', 9605 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 9606 other: [{ name: 'category', id: 'uncaughtthirdstrike' }, { name: 'group', id: 'out' }, { name: 'type', id: 'strikeout' }], 9607 step: { 9608 type: 'playersproperties', 9609 template: 'properties', 9610 options: [], 9611 properties: [ 9612 { 9613 name: 'assist', 9614 label: 'directives.scoreboard.baseball.tabStats.assists', 9615 multiple: { 9616 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9617 getName: function (number) { 9618 return `assist${number + 1}`; 9619 }, 9620 max: 9 9621 }, 9622 required: false 9623 }, 9624 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 9625 ] 9626 } 9627 }, 9628 { 9629 id: 'advance', 9630 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 9631 other: [{ name: 'category', id: 'uncaughtthirdstrike' }, { name: 'group', id: 'out' }, { name: 'type', id: 'strikeout' }], 9632 step: { 9633 template: 'choice', 9634 options: [ 9635 { 9636 id: 'badpitch', 9637 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.badpitch.name', 9638 other: [function (player, diamond) { 9639 var other = { type: 'playersproperties' }; 9640 9641 other.name = 'pitcher'; 9642 other.player = _.find(diamond.defense, { pos: 1 }); 9643 9644 return other; 9645 9646 }], 9647 }, 9648 { 9649 id: 'passedball', 9650 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.passedball.name', 9651 other: [function (player, diamond) { 9652 var other = { type: 'playersproperties' }; 9653
9654 other.name = 'receiver'; 9655 other.player = _.find(diamond.defense, { pos: 2 }); 9656 9657 return other; 9658 9659 }], 9660 } 9661 ] 9662 } 9663 }, 9664 { 9665 id: 'error', 9666 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.error.name', 9667 other: [{ name: 'category', id: 'uncaughtthirdstrike' }, { name: 'group', id: 'out' }, { name: 'type', id: 'strikeout' }], 9668 step: { 9669 type: 'playersproperties', 9670 template: 'properties', 9671 options: [], 9672 properties: [ 9673 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9674 ] 9675 } 9676 } 9677 ] 9678 } 9679 }); 9680 9681 9682 angular 9683 .module('app.directives') 9684 .value('scoreboardBaseballRunnerSteps', { 9685 hitter: { 9686 title: 'directives.scoreboard.baseball.tabStats.baserunner', 9687 type: 'type', 9688 template: 'choice', 9689 onConfirm: function (selectedStep) { 9690 if (mode_self.selectedPlayerProperties() != null) { 9691 playerToData(selectedStep.type, mode_self.selectedPlayerProperties()); 9692 } 9693 9694 mode_self.createEvent(); 9695 }, 9696 options: [ 9697 { 9698 id: 'advance', 9699 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 9700 step: { 9701 type: 'playersproperties', 9702 template: 'choice', 9703 options: [ 9704 { 9705 id: 'b2', 9706 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9707 visible: function (diamond, player) { 9708 return player.pos < 4; 9709 }, 9710 }, 9711 { 9712 id: 'b3', 9713 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9714 visible: function (diamond, player) { 9715 return player.pos < 5; 9716 }, 9717 }, 9718 { 9719 id: 'b4', 9720 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9721 step: { 9722 type: 'playersproperties', 9723 template: 'properties', 9724 options: [], 9725 properties: [ 9726 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9727 { 9728 name: 'pitcher', 9729 required: true, 9730 mode: 'number', 9731 getName: function (properties) { 9732 if (properties.earnedpoint.value === true) { 9733 return properties.earnedpoint.trueValue; 9734 } 9735 9736 return properties.earnedpoint.falseValue; 9737 }, 9738 defaultValue: function (selectedTeam) { 9739 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9740 }, 9741 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9742 list: function (selectedTeam) { 9743 var list = [] 9744 9745 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9746 if (pitcher) { 9747 list.push({ label: pitcher.number, data: pitcher }); 9748 } 9749 9750 selectedTeam.positions.forEach(function (position) { 9751 position.substitutions.forEach(function (substitution) { 9752 if (substitution.out.playerPosition == 'pitcher') { 9753 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9754 list.push({ label: substitution.out.number, data: substitution.out }); 9755 } 9756 } 9757 }) 9758 }) 9759 9760 return list; 9761 } 9762 } 9763 ] 9764 } 9765 } 9766 ] 9767 } 9768 }, 9769 { 9770 id: 'advance', 9771 other: [{ name: 'category', id: 'error' }], 9772 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 9773 step: { 9774 type: 'playersproperties', 9775 template: 'choice', 9776 options: [ 9777 { 9778 id: 'b2', 9779 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9780 step: { 9781 type: 'playersproperties', 9782 template: 'properties', 9783 options: [], 9784 properties: [ 9785 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9786 ] 9787 }, 9788 visible: function (diamond, player) { 9789 return player.pos < 4; 9790 }, 9791 }, 9792 { 9793 id: 'b3', 9794 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9795 step: { 9796 type: 'playersproperties', 9797 template: 'properties', 9798 options: [], 9799 properties: [ 9800 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9801 ] 9802 }, 9803 visible: function (diamond, player) { 9804 return player.pos < 5; 9805 }, 9806 }, 9807 { 9808 id: 'b4', 9809 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9810 step: { 9811 type: 'playersproperties', 9812 template: 'properties', 9813 options: [], 9814 properties: [ 9815 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9816 { 9817 name: 'pitcher', 9818 required: true, 9819 mode: 'number', 9820 getName: function (properties) { 9821 if (properties.earnedpoint.value === true) { 9822 return properties.earnedpoint.trueValue; 9823 } 9824 9825 return properties.earnedpoint.falseValue; 9826 }, 9827 defaultValue: function (selectedTeam) { 9828 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9829 }, 9830 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9831 list: function (selectedTeam) { 9832 var list = [] 9833 9834 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9835 if (pitcher) { 9836 list.push({ label: pitcher.number, data: pitcher }); 9837 } 9838 9839 selectedTeam.positions.forEach(function (position) { 9840 position.substitutions.forEach(function (substitution) { 9841 if (substitution.out.playerPosition == 'pitcher') { 9842 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9843 list.push({ label: substitution.out.number, data: substitution.out }); 9844 } 9845 } 9846 }) 9847 }) 9848 9849 return list; 9850 } 9851 }, 9852 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 9853 ] 9854 } 9855 } 9856 ] 9857 } 9858 }, 9859 { 9860 id: 'advance', 9861 other: [{ name: 'category', id: 'relay' }], 9862 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.relay.name', 9863 step: { 9864 type: 'playersproperties', 9865 template: 'choice', 9866 options: [ 9867 { 9868 id: 'b2', 9869 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9870 visible: function (diamond, player) { 9871 return player.pos < 4; 9872 }, 9873 }, 9874 { 9875 id: 'b3', 9876 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9877 visible: function (diamond, player) { 9878 return player.pos < 5; 9879 }, 9880 }, 9881 { 9882 id: 'b4', 9883 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 9884 step: { 9885 type: 'playersproperties', 9886 template: 'properties', 9887 options: [], 9888 properties: [ 9889 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 9890 { 9891 name: 'pitcher', 9892 required: true, 9893 mode: 'number', 9894 getName: function (properties) { 9895 if (properties.earnedpoint.value === true) { 9896 return properties.earnedpoint.trueValue; 9897 } 9898 9899 return properties.earnedpoint.falseValue; 9900 }, 9901 defaultValue: function (selectedTeam) { 9902 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 9903 }, 9904 label: 'directives.scoreboard.baseball.tabStats.pitcher', 9905 list: function (selectedTeam) { 9906 var list = [] 9907 9908 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 9909 if (pitcher) { 9910 list.push({ label: pitcher.number, data: pitcher }); 9911 } 9912 9913 selectedTeam.positions.forEach(function (position) { 9914 position.substitutions.forEach(function (substitution) { 9915 if (substitution.out.playerPosition
9915 == 'pitcher') { 9916 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 9917 list.push({ label: substitution.out.number, data: substitution.out }); 9918 } 9919 } 9920 }) 9921 }) 9922 9923 return list; 9924 } 9925 } 9926 ] 9927 } 9928 } 9929 ] 9930 } 9931 }, 9932 { 9933 id: 'runnerout', 9934 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 9935 step: { 9936 type: 'playersproperties', 9937 template: 'choice', 9938 options: [ 9939 { 9940 id: 'b1', 9941 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 9942 step: { 9943 type: 'playersproperties', 9944 template: 'properties', 9945 options: [], 9946 properties: [ 9947 { 9948 name: 'assist', 9949 label: 'directives.scoreboard.baseball.tabStats.assists', 9950 multiple: { 9951 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9952 getName: function (number) { 9953 return `assist${number + 1}`; 9954 }, 9955 max: 9 9956 }, 9957 required: false 9958 }, 9959 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 9960 ] 9961 }, 9962 visible: function (diamond, player) { 9963 return player.pos <= 3; 9964 }, 9965 }, 9966 { 9967 id: 'b2', 9968 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 9969 step: { 9970 type: 'playersproperties', 9971 template: 'properties', 9972 options: [], 9973 properties: [ 9974 { 9975 name: 'assist', 9976 label: 'directives.scoreboard.baseball.tabStats.assists', 9977 multiple: { 9978 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 9979 getName: function (number) { 9980 return `assist${number + 1}`; 9981 }, 9982 max: 9 9983 }, 9984 required: false 9985 }, 9986 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 9987 ] 9988 }, 9989 visible: function (diamond, player) { 9990 return player.pos <= 4; 9991 }, 9992 }, 9993 { 9994 id: 'b3', 9995 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 9996 step: { 9997 type: 'playersproperties', 9998 template: 'properties', 9999 options: [], 10000 properties: [ 10001 { 10002 name: 'assist', 10003 label: 'directives.scoreboard.baseball.tabStats.assists', 10004 multiple: { 10005 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 10006 getName: function (number) { 10007 return `assist${number + 1}`; 10008 }, 10009 max: 9 10010 }, 10011 required: false 10012 }, 10013 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 10014 ] 10015 }, 10016 visible: function (diamond, player) { 10017 return player.pos <= 5; 10018 }, 10019 }, 10020 { 10021 id: 'b4', 10022 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 10023 step: { 10024 type: 'playersproperties', 10025 template: 'properties', 10026 options: [], 10027 properties: [ 10028 { 10029 name: 'assist', 10030 label: 'directives.scoreboard.baseball.tabStats.assists', 10031 multiple: { 10032 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 10033 getName: function (number) { 10034 return `assist${number + 1}`; 10035 }, 10036 max: 9 10037 }, 10038 required: false 10039 }, 10040 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 10041 ] 10042 } 10043 } 10044 ] 10045 } 10046 } 10047 ] 10048 }, 10049 runner: { 10050 id: 'runner', 10051 title: 'directives.scoreboard.baseball.tabStats.baserunner', 10052 type: 'type', 10053 template: 'choice', 10054 allowSelectRunner: false, 10055 onConfirm: function (selectedStep) { 10056 if (mode_self.selectedPlayerProperties() != null) { 10057 playerToData(selectedStep.type, mode_self.selectedPlayerProperties()); 10058 } 10059 10060 mode_self.createEvent(); 10061 }, 10062 options: [ 10063 { 10064 id: 'advance', 10065 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advance.name', 10066 step: { 10067 type: 'playersproperties', 10068 template: 'choice', 10069 options: [ 10070 { 10071 id: 'b2', 10072 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 10073 visible: function (diamond, player) { 10074 return player.pos < 4; 10075 }, 10076 }, 10077 { 10078 id: 'b3', 10079 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 10080 visible: function (diamond, player) { 10081 return player.pos < 5; 10082 }, 10083 }, 10084 { 10085 id: 'b4', 10086 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 10087 step: { 10088 type: 'playersproperties', 10089 template: 'properties', 10090 options: [], 10091 properties: [ 10092 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 10093 { 10094 name: 'pitcher', 10095 required: true, 10096 mode: 'number', 10097 getName: function (properties) { 10098 if (properties.earnedpoint.value === true) { 10099 return properties.earnedpoint.trueValue; 10100 } 10101 10102 return properties.earnedpoint.falseValue; 10103 }, 10104 defaultValue: function (selectedTeam) { 10105 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 10106 }, 10107 label: 'directives.scoreboard.baseball.tabStats.pitcher', 10108 list: function (selectedTeam) { 10109 var list = [] 10110 10111 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 10112 if (pitcher) { 10113 list.push({ label: pitcher.number, data: pitcher }); 10114 } 10115 10116 selectedTeam.positions.forEach(function (position) { 10117 position.substitutions.forEach(function (substitution) { 10118 if (substitution.out.playerPosition == 'pitcher') { 10119 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 10120 list.push({ label: substitution.out.number, data: substitution.out }); 10121 } 10122 } 10123 }) 10124 }) 10125 10126 return list; 10127 } 10128 }, 10129 { 10130 name: 'rbi', 10131 getPlayer: function (value, sequence) { 10132 if (value) { 10133 return sequence.hitter 10134 } 10135 10136 return null; 10137 }, 10138 required: true, 10139 defaultValue: true, 10140 type: 'checkbox', 10141 label: 'directives.scoreboard.baseball.tabStats.runBattedIn' 10142 }, 10143 ] 10144 } 10145 } 10146 ] 10147 } 10148 }, 10149 { 10150 id: 'advance', 10151 other: [{ name: 'category', id: 'error' }], 10152 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.advancewitherror.name', 10153 step: { 10154 type: 'playersproperties', 10155 template: 'choice', 10156 options: [ 10157 { 10158 id: 'b2', 10159 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 10160 step: { 10161 type: 'playersproperties', 10162 template: 'properties', 10163 options: [], 10164 properties: [ 10165 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' } 10166 ] 10167 }, 10168 visible: function (diamond, player) { 10169 return player.pos < 4; 10170 }, 10171 }, 10172 { 10173 id: 'b3', 10174 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 10175 step: { 10176 type: 'playersproperties', 10177 template: 'properties', 10178 options: [], 10179 properties: [ 10180 { name: 'error', required: true, label: 'directives.scoreboard.basebal
10180l.tabStats.errorNumber' } 10181 ] 10182 }, 10183 visible: function (diamond, player) { 10184 return player.pos < 5; 10185 }, 10186 }, 10187 { 10188 id: 'b4', 10189 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 10190 step: { 10191 type: 'playersproperties', 10192 template: 'properties', 10193 options: [], 10194 properties: [ 10195 { name: 'earnedpoint', required: true, defaultValue: true, trueValue: 'earnedruns', falseValue: 'unearnedruns', type: 'checkbox', label: 'directives.scoreboard.baseball.tabStats.earnedPoint' }, 10196 { 10197 name: 'pitcher', 10198 required: true, 10199 mode: 'number', 10200 getName: function (properties) { 10201 if (properties.earnedpoint.value === true) { 10202 return properties.earnedpoint.trueValue; 10203 } 10204 10205 return properties.earnedpoint.falseValue; 10206 }, 10207 defaultValue: function (selectedTeam) { 10208 return _.find(selectedTeam.positions, { playerPosition: 'pitcher' }) 10209 }, 10210 label: 'directives.scoreboard.baseball.tabStats.pitcher', 10211 list: function (selectedTeam) { 10212 var list = [] 10213 10214 var pitcher = angular.extend(_.find(selectedTeam.positions, { playerPosition: 'pitcher' })); 10215 if (pitcher) { 10216 list.push({ label: pitcher.number, data: pitcher }); 10217 } 10218 10219 selectedTeam.positions.forEach(function (position) { 10220 position.substitutions.forEach(function (substitution) { 10221 if (substitution.out.playerPosition == 'pitcher') { 10222 if (!list.filter(function (p) { return p.id === substitution.out.id; }).length > 0) { 10223 list.push({ label: substitution.out.number, data: substitution.out }); 10224 } 10225 } 10226 }) 10227 }) 10228 10229 return list; 10230 } 10231 }, 10232 { name: 'error', required: true, label: 'directives.scoreboard.baseball.tabStats.errorNumber' }, 10233 { 10234 name: 'rbi', 10235 getPlayer: function (value, sequence) { 10236 if (value) { 10237 return sequence.hitter 10238 } 10239 10240 return null; 10241 }, 10242 required: true, 10243 defaultValue: true, 10244 type: 'checkbox', 10245 label: 'directives.scoreboard.baseball.tabStats.runBattedIn' 10246 }, 10247 ] 10248 } 10249 } 10250 ] 10251 } 10252 }, 10253 { 10254 id: 'runnerout', 10255 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.runnerout.name', 10256 step: { 10257 type: 'playersproperties', 10258 template: 'choice', 10259 options: [ 10260 { 10261 id: 'b1', 10262 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b1.name', 10263 step: { 10264 type: 'playersproperties', 10265 template: 'properties', 10266 options: [], 10267 properties: [ 10268 { 10269 name: 'assist', 10270 label: 'directives.scoreboard.baseball.tabStats.assists', 10271 multiple: { 10272 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 10273 getName: function (number) { 10274 return `assist${number + 1}`; 10275 }, 10276 max: 9 10277 }, 10278 required: false 10279 }, 10280 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 10281 ] 10282 }, 10283 visible: function (diamond, player) { 10284 return player.pos <= 3; 10285 }, 10286 }, 10287 { 10288 id: 'b2', 10289 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b2.name', 10290 step: { 10291 type: 'playersproperties', 10292 template: 'properties', 10293 options: [], 10294 properties: [ 10295 { 10296 name: 'assist', 10297 label: 'directives.scoreboard.baseball.tabStats.assists', 10298 multiple: { 10299 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 10300 getName: function (number) { 10301 return `assist${number + 1}`; 10302 }, 10303 max: 9 10304 }, 10305 required: false 10306 }, 10307 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 10308 ] 10309 }, 10310 visible: function (diamond, player) { 10311 return player.pos <= 4; 10312 }, 10313 }, 10314 { 10315 id: 'b3', 10316 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b3.name', 10317 step: { 10318 type: 'playersproperties', 10319 template: 'properties', 10320 options: [], 10321 properties: [ 10322 { 10323 name: 'assist', 10324 label: 'directives.scoreboard.baseball.tabStats.assists', 10325 multiple: { 10326 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 10327 getName: function (number) { 10328 return `assist${number + 1}`; 10329 }, 10330 max: 9 10331 }, 10332 required: false 10333 }, 10334 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 10335 ] 10336 }, 10337 visible: function (diamond, player) { 10338 return player.pos <= 5; 10339 }, 10340 }, 10341 { 10342 id: 'b4', 10343 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.b4.name', 10344 step: { 10345 type: 'playersproperties', 10346 template: 'properties', 10347 options: [], 10348 properties: [ 10349 { 10350 name: 'assist', 10351 label: 'directives.scoreboard.baseball.tabStats.assists', 10352 multiple: { 10353 label: 'directives.scoreboard.baseball.tabStats.assistNumberN', 10354 getName: function (number) { 10355 return `assist${number + 1}`; 10356 }, 10357 max: 9 10358 }, 10359 required: false 10360 }, 10361 { name: 'out', required: true, label: 'directives.scoreboard.baseball.tabStats.outNumber' } 10362 ] 10363 } 10364 } 10365 ] 10366 } 10367 }, 10368 { 10369 id: 'none', 10370 other: [function (data) { 10371 var pos_name = { 10372 2: 'b4', 10373 3: 'b1', 10374 4: 'b2', 10375 5: 'b3' 10376 } 10377 10378 var other = { type: 'playersproperties' }; 10379 other.name = pos_name[data.pos]; 10380 other.player = data; 10381 10382 return other; 10383 }], 10384 10385 name: 'directives.scoreboard.baseball.tabStats.baserunnerTypes.none.name', 10386 }, 10387 ] 10388 } 10389 }); 10390})(); 10391; 10392(function () { 10393 'use strict'; 10394 10395 angular 10396 .module('app.directives') 10397 .controller('ScoreboardBaseballActionsController', ScoreboardBaseballActionsController); 10398 10399 ScoreboardBaseballActionsController.$inject = ['$rootScope', '$scope', '$timeout', '$localStorage', '$translate', 'ScoreboardBaseballService', 'scoreboardBaseballSteps', 'scoreboardBaseballRunnerSteps']; 10400 10401 function ScoreboardBaseballActionsController($rootScope, $scope, $timeout, $localStorage, $translate, scoreboardBaseballService, scoreboardBaseballSteps, scoreboardBaseballRunnerSteps) { 10402 var vm = this; 10403 10404 vm.formatInningName = function (period, pos) { 10405 if (pos == 1) { 10406 return $translate.instant('widgets.games.scoreboard.baseball.tab-stats.history.scoreboardBaseballHistory.startOf') + ' ' + period; 10407 } else { 10408 return $translate.instant('widgets.games.scoreboard.baseball.tab-stats.history.scoreboardBaseballHistory.endOf') + ' ' + period; 10409 } 10410 } 10411 10412 vm.isActionBoxShown = false; 10413 vm.selectedRootStep = null; 10414 vm.stepsTrace = []; 10415 vm.selectedPlayerProperties = null; 10416 vm.stepsOutline = []; 10417 10418 vm.currentOutline = 0; 10419 vm.sequence = $scope.sequence; 10420 vm.lineup = $scope.lineup; 10421 vm.target = null; 10422 vm.popupMode = 'list'; 10423 vm.selectedProperty = null; 10424 vm.defenseTeam = null; 10425 vm.offenseTeam = null; 10426 vm.diamond = null; 10427 vm.selectedTeam = null; 10428 vm.pitcherPitchCount = { pitch: 0, strike: 0, ball: 0 } 10429 10430 vm.playerPopup = { 10431 visible: false, 10432 top: 0, 10433 left: 0, 10434 calculatingOverflow: false 10435 }; 10436 10437 vm.getDefenseTeam = function () { 10438 var defenseTeamId = vm.diamond.defense[0].teamId; 10439 var defenseTeam = _.find(vm.lineup.teams, { teamId: defenseTeamId }); 10440 10441 return defenseTeam; 10442 } 10443 10444 vm.getOffenseTeam = function () { 10445 var defenseTeamId = vm.diamond.defense[0].teamId; 10446 var offenseTeam = _.find(vm.lineup.teams, function (team) { return team.teamId != defenseTeamId }); 10447 10448 return offenseTeam; 10449 } 10450 10451 $scope.$watchGroup(['sequence', 'lineup', 'diamond'], function (newValues) { 10452 vm.sequence = newValues[0]; 10453 vm.lineup = newValues[1]; 10454 vm.diamond = newValues[2]; 10455 10456 if (vm.sequence && vm.lineup && vm.diamond) { 10457 vm.defenseTeam = vm.getDefenseTeam(); 10458 vm.offenseTeam = vm.getOffenseTeam(); 10459 processSequence(vm.sequence); 10460 } 10461 }) 10462 10463 10464 10465 $scope.$watch(function () { 10466 return $scope.selectedPlayer; 10467 }, function (selectedPlayer) { 10468 if (selectedPlayer) { 10469 if (selectedPlayer.isDefense == false) { 10470 vm.showActionBox('baserunners', selectedPlayer, false) 10471 } 10472 else { 10473 vm.showActionBox('misc', selectedPlayer, false); 10474 } 10475 } 10476 }, true) 10477 10478 vm.closePopup = function () { 10479 vm.playerPopup.visible = false; 10480 } 10481 10482 vm.choosePlayer = function (player) { 10483 vm.selectedProper
10483ty.player = player; 10484 vm.closePopup(); 10485 } 10486 10487 vm.openPlayerPopup = function (playerPropertie, event) { 10488 event.stopPropagation(); 10489 vm.closePopup(); 10490 10491 vm.target = event.target; 10492 10493 vm.selectedProperty = playerPropertie; 10494 10495 if (playerPropertie.list) { 10496 vm.playerList = playerPropertie.list(vm.defenseTeam); 10497 } 10498 else { 10499 vm.playerList = vm.filterPositions(vm.defenseTeam.positions); 10500 } 10501 10502 vm.playerPopup.calculatingOverflow = true; 10503 vm.playerPopup.visible = true; 10504 vm.playerPopup.top = $(event.currentTarget).position().top; 10505 vm.playerPopup.left = $(event.currentTarget).position().left + $(event.currentTarget).outerWidth() + 1; 10506 vm.playerPopup.action = vm.choosePlayer; 10507 vm.playerPopup.team = vm.defenseTeam; 10508 10509 $timeout(function () { 10510 var overflow = vm.getPlayerPopupOverflow(); 10511 vm.playerPopup.top = vm.playerPopup.top - overflow; 10512 vm.playerPopup.calculatingOverflow = false; 10513 }) 10514 10515 vm.setDocumentEvent(); 10516 } 10517 10518 vm.openPitcherPopup = function (pitcher, event) { 10519 event.stopPropagation(); 10520 vm.closePopup(); 10521 10522 vm.selectedProperty = pitcher; 10523 vm.target = event.target; 10524 10525 var playerList = []; 10526 var pitcherTeam = _.find(vm.lineup.teams, { teamId: pitcher.teamId }) 10527 pitcherTeam.positions.forEach(function (player) { 10528 if (player.playerPosition == 'pitcher') { 10529 playerList.push({ label: player.number, data: player }); 10530 if(pitcher.seq !== 3) { 10531 vm.currentPitcherName = player.playerName 10532 } 10533 } 10534 10535 (player.substitutions || []).forEach(function (substitution) { 10536 if (substitution.out.playerPosition == 'pitcher') { 10537 playerList.push({ label: substitution.out.number, data: substitution.out }); 10538 } 10539 }) 10540 }) 10541 10542 vm.playerList = playerList; 10543 vm.playerPopup.visible = true; 10544 vm.playerPopup.top = $(event.target).position().top; 10545 vm.playerPopup.left = $(event.target).position().left + $(event.target).outerWidth() + 1; 10546 vm.playerPopup.action = function (newPitcher) { vm.choosePitcher(pitcher, newPitcher) }; 10547 vm.playerPopup.team = pitcherTeam; 10548 } 10549 10550 vm.choosePitcher = function (editedPitcher, newPitcher) { 10551 editedPitcher.id = newPitcher.id; 10552 editedPitcher.number = newPitcher.number; 10553 vm.closePopup(); 10554 } 10555 10556 vm.filterPositions = function (positions) { 10557 var positionToFilter = ['designatedhitter', 'extrahitter']; 10558 var sortedPositions = _.sortBy(_.filter(positions, function (position) { 10559 return _.indexOf(positionToFilter, position.playerPosition) == -1; 10560 }), 'pos'); 10561 10562 return _.map(sortedPositions, function (position) { 10563 return { label: position.pos, data: position } 10564 }); 10565 } 10566 10567 vm.showActionBox = function (type, data, showRunners) { 10568 var outline = []; 10569 var step = scoreboardBaseballSteps[type]; 10570 10571 if (data) { 10572 if (data.id == vm.sequence.hitter.id) { 10573 step = scoreboardBaseballRunnerSteps.hitter 10574 } 10575 10576 step = $.extend({}, step, { data: data }); 10577 } else { 10578 $scope.onSelectPlayer(vm.sequence.hitter.id); 10579 } 10580 10581 outline.push(step); 10582 10583 if (showRunners !== false) { 10584 vm.getRunners().forEach(function (runner) { 10585 var steps = $.extend({}, scoreboardBaseballRunnerSteps.runner, { data: runner }); 10586 10587 outline.push(steps); 10588 }); 10589 } 10590 10591 vm.currentOutline = 0; 10592 vm.stepsOutline = outline; 10593 vm.selectedRootStep = vm.stepsOutline[0]; 10594 vm.selectedStep = vm.stepsOutline[0]; 10595 vm.isActionBoxShown = true; 10596 } 10597 10598 vm.getRunners = function (offsetPlayers) { 10599 var runner_pos = [5, 4, 3]; 10600 var runners = []; 10601 10602 runner_pos.forEach(function (runner_pos) { 10603 var runner = _.find(vm.diamond.offense, { pos: runner_pos }); 10604 if (runner) { 10605 runners.push(runner); 10606 } 10607 }) 10608 10609 return runners; 10610 } 10611 10612 vm.optionIsVisible = function (option) { 10613 if (option.visible) { 10614 if (angular.isFunction(option.visible)) { 10615 return option.visible(vm.diamond, vm.stepsOutline[vm.currentOutline].data); 10616 } 10617 10618 return option.visible; 10619 } 10620 return true; 10621 } 10622 10623 vm.onAction = function (sequence) { 10624 if ($scope.onAction) { 10625 $scope.onAction(sequence); 10626 } 10627 } 10628 10629 vm.goToStep = function (type, option, data) { 10630 vm.selectedPlayerProperties = null; 10631 10632 if (type === 'playersproperties') { 10633 var properties = {}; 10634 properties.player = vm.stepsOutline[vm.currentOutline].data; 10635 if (vm.selectedStep.getData && angular.isFunction(vm.selectedStep.getData)) { 10636 properties.player = vm.selectedStep.getData(vm.diamond); 10637 } 10638 properties.name = vm.selectedStep.options[option].id; 10639 playerToData(type, [properties]); 10640 } 10641 else { 10642 var other = []; 10643 var extras = {}; 10644 10645 var chosenStep = vm.selectedStep.options[option]; 10646 if (chosenStep.other) { 10647 chosenStep.other.forEach(function (_other) { 10648 if (typeof _other == 'function') { 10649 var otherValue = _other(vm.stepsOutline[vm.currentOutline].data, vm.diamond); 10650 if (otherValue != null) { 10651 other.push(otherValue); 10652 } 10653 } 10654 else { 10655 other.push(_other); 10656 } 10657 }) 10658 } 10659 10660 if (chosenStep.autoGenerateRunners) { 10661 extras.autoGenerateRunners = chosenStep.autoGenerateRunners; 10662 } 10663 10664 vm.validateStep(type, option, data, other, extras); 10665 } 10666 10667 if (option != null) { 10668 var hasStep = vm.selectedStep.options[option].step 10669 if (vm.selectedStep.options[option].step && vm.selectedStep.options[option].step.condition) { 10670 hasStep = vm.selectedStep.options[option].step.condition(vm.diamond); 10671 } 10672 10673 if (hasStep) { 10674 vm.selectedStep = angular.extend(vm.selectedStep.options[option].step, { data: vm.selectedStep.data }); 10675 } 10676 else { 10677 vm.onConfirm(vm.selectedStep); 10678 } 10679 } 10680 10681 if (vm.selectedStep.properties) { 10682 10683 var player_properties = {};
10684 vm.selectedStep.properties.forEach(function (propertie) { 10685 propertie.player = undefined; 10686 propertie.players = []; 10687 10688 if (propertie.defaultValue) { 10689 if (angular.isFunction(propertie.defaultValue)) { 10690 propertie.player = propertie.defaultValue(vm.defenseTeam) || undefined; 10691 } 10692 else { 10693 propertie.value = propertie.defaultValue; 10694 } 10695 10696 } 10697 10698 10699 player_properties[propertie.name] = propertie; 10700 }) 10701 10702 vm.selectedPlayerProperties = player_properties; 10703 } 10704 } 10705 10706 vm.addPlayer = function (property) { 10707 property.players.push({ player: undefined }); 10708 } 10709 10710 vm.removePlayer = function (property, player) { 10711 _.remove(property.players, player); 10712 } 10713 10714 vm.validateStep = function (type, option, data, other, extras) { 10715 var node = {} 10716 node.type = type; 10717 node.option = option; 10718 node.data = data; 10719 node.other = other; 10720 node.extras = extras; 10721 10722 vm.stepsTrace.push(node); 10723 } 10724 10725 vm.createEvent = function () { 10726 var event = {}; 10727 var autoGenerateRunners = null; 10728 10729 var sequence = vm.sequence; 10730 10731 event.seq = (sequence.events || []).length + 1; 10732 10733 if (vm.stepsOutline[vm.currentOutline] && vm.stepsOutline[vm.currentOutline].autoGenerateRunners) { 10734 autoGenerateRunners = vm.stepsOutline[vm.currentOutline].autoGenerateRunners; 10735 } 10736 10737 vm.stepsTrace.forEach(function (node) { 10738 if (node.extras && node.extras.autoGenerateRunners) { 10739 autoGenerateRunners = node.extras.autoGenerateRunners; 10740 } 10741 10742 if (node.type === "playersproperties") { 10743 event[node.type] = (event[node.type] || []).concat(node.data); 10744 } 10745 else if(node.type) { 10746 event[node.type] = node.data; 10747 } 10748 10749 if (node.other) { 10750 node.other.forEach(function (other) { 10751 if (other.type && other.type == 'playersproperties') { 10752 var property = playerToProperty(other); 10753 event.playersproperties = (event.playersproperties || []).concat(property); 10754 } 10755 else { 10756 event[other.name] = other.id; 10757 } 10758 }) 10759 } 10760 }); 10761 10762 if (event.playersproperties) { 10763 var seq = 1; 10764 event.playersproperties.forEach(function (property) { 10765 property.seq = seq++; 10766 }) 10767 } 10768 10769 sequence.events.push(event); 10770 10771 var extraEvents = []; 10772 if (autoGenerateRunners) { 10773 extraEvents = autoGenerateRunners(vm.stepsOutline, (sequence.events || []).length + 1, vm.diamond, sequence.events); 10774 } 10775 10776 sequence.events = sequence.events.concat(extraEvents); 10777 vm.stepsTrace = []; 10778 10779 vm.onAction(sequence); 10780 10781 if (vm.currentOutline + 1 >= vm.stepsOutline.length) { 10782 vm.isActionBoxShown = false; 10783 } 10784 } 10785 10786 vm.onConfirm = function () { 10787 // TODO add validation of players properties required ********************* 10788 if (vm.selectedPlayerProperties != null) { 10789 playerToData(vm.selectedStep.type, vm.selectedPlayerProperties); 10790 } 10791 10792 vm.createEvent(); 10793 } 10794 10795 vm.nextHitter = function () { 10796 vm.sequence.status = 'closed'; 10797 vm.onAction(vm.sequence); 10798 } 10799 10800 vm.skipHitter = function () { 10801 var event = { type: 'skiphitter', seq: vm.sequence.events.length + 1 }; 10802 vm.sequence.events.push(event); 10803 vm.onAction(vm.sequence); 10804 } 10805 10806 vm.onCloseGame = function () { 10807 if ($scope.onCloseGame) { 10808 $scope.onCloseGame(); 10809 } 10810 10811 vm.hideConfirmClose(); 10812 } 10813 10814 vm.backStep = function () { 10815 vm.stepsTrace = vm.stepsTrace.slice(0, -1); 10816 10817 if (vm.stepsTrace.length == 0) { 10818 vm.selectedStep = vm.selectedRootStep; 10819 } 10820 else { 10821 var currentStep = vm.selectedRootStep; 10822 vm.stepsTrace.forEach(function (travelNode) { 10823 var stepIndex = travelNode.option; 10824 currentStep = currentStep.options[stepIndex].step; 10825 }); 10826 vm.selectedStep = currentStep; 10827 } 10828 } 10829 10830 vm.chooseStartHitter = function (hitter) { 10831 vm.sequence.hitter = hitter; 10832 vm.onAction(vm.sequence); 10833 } 10834 10835 function playerToData(type, properties) { 10836 var playersproperties = []; 10837 10838 if (type && type == 'playersproperties') { 10839 _.forEach(properties, function (selected_property) { 10840 if (selected_property.getPlayer) { 10841 selected_property.player = selected_property.getPlayer(selected_property.value, vm.sequence); 10842 } 10843 10844 if (selected_property.player) { 10845 var property = playerToProperty(selected_property); 10846 playersproperties.push(property); 10847 10848 if (selected_property.getName && angular.isFunction(selected_property.getName)) { 10849 property.name = selected_property.getName(properties); 10850 } 10851 } 10852 10853 if (selected_property.players && selected_property.players.length > 0) {
10854 selected_property.players.forEach(function (player, index) { 10855 if (player.player) { 10856 var property = playerToProperty(player); 10857 10858 if (selected_property.multiple.getName && angular.isFunction(selected_property.multiple.getName)) { 10859 property.name = selected_property.multiple.getName(index); 10860 } 10861 else { 10862 property.name = selected_property.name; 10863 } 10864 playersproperties.push(property); 10865 } 10866 }) 10867 } 10868 }); 10869 10870 vm.validateStep(type, null, playersproperties); 10871 } 10872 } 10873 10874 function playerToProperty(_property) { 10875 var property = {}; 10876 var player = _property.player || {}; 10877 10878 property.name = _property.name; 10879 property.number = player.number; 10880 property.id = player.id; 10881 property.pos = player.pos; 10882 property.row = player.row; 10883 property.teamId = player.teamId; 10884 10885 return property; 10886 } 10887 10888 function processSequence(sequence) { 10889 $scope.onSelectPlayer(null); 10890 var events = vm.sequence.events || []; 10891 vm.selectedStep = null; 10892 vm.selectedRootStep = null; 10893 $scope.onSelectPlayer(undefined); 10894 10895 var ballCount = (_.filter(vm.sequence.pitchs, { category: 'ball' }) || []).length; 10896 if (vm.sequence.status == 'active' && ballCount >= 4) { 10897 vm.sequence.status = 'ballLimit'; 10898 } 10899 10900 vm.pitcherPitchCount = vm.sequence.pitchers && vm.sequence.pitchers.length > 0 ? vm.sequence.pitchers[vm.sequence.pitchers.length - 1].pitchGame || { pitch: 0, strike: 0, ball: 0 } : { pitch: 0, strike: 0, ball: 0 }; 10901 10902 if (vm.sequence.status == 'starthitter') { 10903 vm.selectedTeam = _.find(vm.lineup.teams, { teamId: vm.sequence.hitter.teamId }); 10904 $scope.shouldAllowSelectRunner = false; 10905 } 10906 else if (vm.sequence.status == 'pitcherrequested') { 10907 $scope.shouldAllowSelectRunner = false; 10908 } 10909 else if (vm.sequence.status == 'ballLimit') { 10910 $scope.shouldAllowSelectRunner = false; 10911 vm.showActionBox('baseonball'); 10912 10913 events.forEach(function (event) { 10914 var eventGroup = event.group; 10915 var eventType = event.type; 10916 if (eventGroup == 'onbases' && event.type == 'baseonball') { 10917 vm.currentOutline = 0; 10918 vm.selectedRootStep = vm.stepsOutline[vm.currentOutline]; 10919 vm.selectedStep = vm.selectedRootStep; 10920 vm.goToStep(vm.selectedStep.type, 0, vm.selectedStep.options[0].id); 10921 10922 } 10923 else { 10924 vm.currentOutline = vm.currentOutline + 1; 10925 vm.selectedRootStep = vm.stepsOutline[vm.currentOutline]; 10926 vm.selectedStep = vm.selectedRootStep; 10927 } 10928 10929 if (vm.selectedStep && vm.selectedStep.data) { 10930 if ($scope.onSelectPlayer) { 10931 $scope.onSelectPlayer(vm.selectedStep.data.id); 10932 } 10933 } 10934 }); 10935 } 10936 else if (vm.sequence.status == 'strikeLimit') { 10937 $scope.shouldAllowSelectRunner = false; 10938 10939 vm.showActionBox('strikeout'); 10940 } 10941 else { 10942 if (events.length > 0 && vm.sequence.status != 'completed') { 10943 var boxShown = false; 10944
10945 events.forEach(function (event) { 10946 var eventGroup = event.group; 10947 10948 if (eventGroup == 'out' || eventGroup == 'onbases') { 10949 boxShown = true; 10950 vm.showActionBox(eventGroup); 10951 vm.currentOutline = 1; 10952 vm.selectedRootStep = vm.stepsOutline[vm.currentOutline]; 10953 vm.selectedStep = vm.selectedRootStep; 10954 } 10955 else { 10956 if (boxShown) { 10957 vm.currentOutline = vm.currentOutline + 1; 10958 vm.selectedRootStep = vm.stepsOutline[vm.currentOutline]; 10959 vm.selectedStep = vm.selectedRootStep; 10960 } 10961 } 10962 10963 if (vm.selectedStep && vm.selectedStep.data) { 10964 if ($scope.onSelectPlayer) { 10965 $scope.onSelectPlayer(vm.selectedStep.data.id); 10966 } 10967 } 10968 }); 10969 } 10970 else { 10971 vm.isActionBoxShown = false; 10972 } 10973 10974 if (vm.selectedRootStep) { 10975 $scope.shouldAllowSelectRunner = vm.selectedRootStep.allowSelectRunner !== false; 10976 } 10977 else { 10978 $scope.shouldAllowSelectRunner = true; 10979 } 10980 } 10981 } 10982 } 10983})(); 10984; 10985(function () { 10986 'use strict'; 10987 10988 angular 10989 .module('app.directives') 10990 .directive('scoreboardBaseballActions', scoreboardBaseballActions) 10991 10992 scoreboardBaseballActions.$inject = ['ModalService']; 10993 10994 function scoreboardBaseballActions(modalService) { 10995 return { 10996 restrict: 'E', 10997 scope: { 10998 onAction: '=', 10999 sequence: '=', 11000 lineup: '=', 11001 diamond: '=', 11002 selectedPlayer: '=', 11003 onSelectPlayer: '=', 11004 onCloseGame: '=', 11005 shouldAllowSelectRunner: '=', 11006 gameEnd: '=' 11007 }, 11008 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/actions/scoreboard-baseball-actions.tpl.html', 11009 controller: 'ScoreboardBaseballActionsController', 11010 controllerAs: 'scoreboardBaseballActions', 11011 link: function ($scope, element, attrs, controller) { 11012 var confirmCloseModal = modalService.init($("#confirm-close-game", element)); 11013 11014 $(document).on('click', '#scoreboardBaseballActions-closegame', function () { 11015 $scope.$apply(controller.closePopup()); 11016 }); 11017 11018 element.on('$destroy', function () { 11019 $(document).off('click'); 11020 }) 11021 11022 controller.setDocumentEvent = function () { 11023 $(document).on('click.playerPopup', function () { 11024 controller.playerPopup.visible = false; 11025 $scope.$apply(); 11026 $(document).off('click.playerPopup'); 11027 }) 11028 } 11029 11030 controller.getPlayerPopupOverflow = function () { 11031 var elem = $("#player-popup", element)[0]; 11032 11033 if (elem) { 11034 var popupRect = elem.getBoundingClientRect(); 11035 var windowHeight = $(window).height(); 11036 11037 if (popupRect && popupRect.bottom) { 11038 if (popupRect.bottom > windowHeight) { 11039 return popupRect.bottom - windowHeight + 10; 11040 } 11041 } 11042 11043 } 11044 11045 return 0; 11046 } 11047 11048 controller.showConfirmClose = confirmCloseModal.show; 11049 controller.hideConfirmClose = confirmCloseModal.hide; 11050 } 11051 }; 11052 } 11053})();; 11054(function () { 11055 'use strict'; 11056 11057 angular 11058 .module('app.directives') 11059 .controller('ScoreboardBaseballHistoryWidgetController', ScoreboardBaseballHistoryWidgetController); 11060 11061 ScoreboardBaseballHistoryWidgetController.$inject = ['$scope', '$translate', 'ScoreboardBaseballService']; 11062 11063 function ScoreboardBaseballHistoryWidgetController($scope, $translate, scoreboardBaseballService) { 11064 var vm = this; 11065 11066 vm.formatInningName = function (period, pos) { 11067 if (pos == 1) { 11068 return $translate.instant('widgets.games.scoreboard.baseball.tab-stats.history.scoreboardBaseballHistory.startOf') + " " + period; 11069 } else { 11070 return $translate.instant('widgets.games.scoreboard.baseball.tab-stats.history.scoreboardBaseballHistory.endOf') + " " + period; 11071 } 11072 } 11073 11074 vm.getSequenceLabel = function (group, type, category) { 11075 var groupType = $translate.instant(scoreboardBaseballService.getGroup(group)) + " - " + $translate.instant(scoreboardBaseballService.getType(type)) 11076 if (category) { 11077 groupType = groupType + " - " + $translate.instant(scoreboardBaseballService.getCategory(category)); 11078 } 11079 return groupType; 11080 } 11081 11082 vm.getTeamAvatar = function (teamId) { 11083 return _.get(_.find($scope.teams, { id: teamId }), 'avatar'); 11084 } 11085 } 11086})(); 11087; 11088(function () { 11089 'use strict'; 11090 11091 angular 11092 .module('app.directives') 11093 .directive('scoreboardBaseballHistory', scoreboardBaseballHistory) 11094 11095 scoreboardBaseballHistory.$inject = []; 11096 11097 function scoreboardBaseballHistory() { 11098 return { 11099 restrict: 'E', 11100 scope: { 11101 periods: '=', 11102 teams: '=' 11103 }, 11104 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/history/scoreboard-baseball-history.tpl.html', 11105 controller: 'ScoreboardBaseballHistoryWidgetController', 11106 controllerAs: 'scoreboardBaseballHistory' 11107 }; 11108 } 11109})();; 11110(function () { 11111 'use strict'; 11112 11113 angular 11114 .module('app.directives') 11115 .controller('ScoreboardBaseballEditPitchController', ScoreboardBaseballEditPitchController); 11116 11117 ScoreboardBaseballEditPitchController.$inject = ['$scope']; 11118 11119 function ScoreboardBaseballEditPitchController($scope) { 11120 var vm = this; 11121 var pitchType = { 11122 ball: 'directives.widgets.games.scoreboard.baseball.tabStats.scoreboardBaseballPitchCount.ball', 11123 decision: 'directives.widgets.games.scoreboard.baseball.tabStats.scoreboardBaseballPitchCount.strikeDecision', 11124 swing: 'directives.widgets.games.scoreboard.baseball.tabStats.scoreboardBaseballPitchCount.strikeSwing', 11125 foul: 'directives.widgets.games.scoreboard.baseball.tabStats.scoreboardBaseballPitchCount.foulBall' 11126 } 11127 11128 vm.showModal = false; 11129 vm.pitches = []; 11130 vm.pitchers = []; 11131 vm.hitter = null; 11132 11133 if ($scope.sequence) { 11134 vm.pitches = $scope.sequence.pitchs; 11135 vm.pitchers = $scope.sequence.pitchers; 11136 vm.hitter = $scope.sequence.hitter; 11137 } 11138 11139 vm.close = function () { 11140 $scope.show = false; 11141 vm.hideEditPitchPopup(); 11142 } 11143 11144 vm.getPitcherName = function (pitcherId) { 11145 return _.get(_.find(vm.pitchers, { id: pitcherId }), 'playerName'); 11146 } 11147 11148 vm.getPitchType = function (category, type) { 11149 switch (category) { 11150 case 'ball': 11151 return pitchType.ball; 11152 case 'strike': 11153 switch (type) { 11154 case 'decision': 11155 return pitchType.decision; 11156 case 'swing': 11157 return pitchType.swing; 11158 case 'foulball': 11159 return pitchType.foul; 11160 } 11161 } 11162 } 11163 11164 vm.deletePitch = function (pitch) { 11165 if (!$scope.disabled) { 11166 var sequence = $scope.sequence; 11167 _.remove(sequence.pitchs, pitch); 11168 11169 if ($scope.onUpdate) { 11170 $scope.onUpdate(sequence); 11171 } 11172 } 11173 } 11174 11175 $scope.$watchGroup(['show'], function (values) { 11176 if (values[0]) { 11177 vm.showEditPitchPopup(); 11178 } 11179 else { 11180 vm.hideEditPitchPopup(); 11181 } 11182 11183 vm.showModal = values[0]; 11184 }); 11185 11186 $scope.$watchGroup(['sequence'], function (values) { 11187 var sequence = values[0] || {}; 11188 11189 vm.pitches = sequence.pitchs || []; 11190 vm.pitchers = sequence.pitchers || []; 11191 vm.hitter = sequence.hitter; 11192 }) 11193 11194 } 11195})(); 11196; 11197(function () { 11198 'use strict'; 11199 11200 angular 11201 .module('app.directives') 11202 .directive('scoreboardBaseballEditPitch', scoreboardBaseballEditPitch) 11203 11204 scoreboardBaseballEditPitch.$inject = ['ModalService']; 11205 11206 function scoreboardBaseballEditPitch(modalService) { 11207 return { 11208 restrict: 'E', 11209 scope: { 11210 show: '=', 11211 sequence: '=', 11212 onUpdate: '=', 11213 loading: '=', 11214 disabled: '=' 11215 }, 11216 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/edit-pitch-count/scoreboard-baseball-edit-pitch.tpl.html', 11217 controller: 'ScoreboardBaseballEditPitchController', 11218 controllerAs: 'scoreboardBaseballEditPitch', 11219 link: function (scope, element, attrs, controller) { 11220 var modal = modalService.init($('.scoreboard-baseball-edit-pitch', element)); 11221 11222 element.on('$destroy', function () { 11223 $(document).off('click'); 11224 modal.element.off('hidden.bs.modal'); 11225 }); 11226 11227 controller.showEditPitchPopup = modal.show; 11228 controller.hideEditPitchPopup = modal.hide; 11229 11230 modal.element.on('hidden.bs.modal', function (e) { 11231 if (scope.show) { 11232 scope.show = false; 11233 scope.$apply(); 11234 } 11235 }) 11236 } 11237 }; 11238 } 11239})();; 11240(function () { 11241 'use strict'; 11242 11243 angular 11244 .module('app.directives') 11245 .controller('ScoreboardBaseballTabLineupWidgetController', ScoreboardBaseballTabLineupWidgetController); 11246 11247 ScoreboardBaseballTabLineupWidgetController.$inject = ['$rootScope', '$scope', 'ScoreboardBaseballService']; 11248 11249 function ScoreboardBaseballTabLineupWidgetController($rootScope, $scope, scoreboardBaseballService) { 11250 var vm = this; 11251 11252 vm.gameDetails = angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' ')); 11253 11254 // State variables 11255 vm.lineup = {
11256 "teams": [] 11257 }; 11258 vm.loadingSave = false; 11259 11260 vm.gameActive = vm.gameDetails.statusId !== 1 11261 11262 $rootScope.$on('onGameStatusChange', function (event, statusId) { 11263 vm.gameActive = statusId !== 1; 11264 }) 11265 11266 $scope.$watch(function () { return vm.lineup.teams }, function (teams) { 11267 vm.lineup.teams.forEach(function (team) { 11268 team.orderedPositions = buildPositions(team); 11269 }); 11270 }, true) 11271 11272 // State functions 11273 vm.movePosition = function (params) { 11274 const teamId = params.teamId; 11275 const to = params.to; 11276 const from = params.from; 11277 11278 const team = _.find(vm.lineup.teams, function (val) { 11279 return val.teamId === teamId; 11280 }); 11281 11282 if (team) { 11283 const positions = params.list; 11284 const temp = positions[to]; 11285 const toTemp = positions[to].row; 11286 const fromTemp = positions[from].row; 11287 positions[to] = positions[from]; 11288 positions[to].row = toTemp; 11289 positions[from] = temp; 11290 positions[from].row = fromTemp; 11291 11292 var index = 1; 11293 team.positions = _.reduce(positions, function (result, value) { 11294 value.players.forEach(function (player) { player.row = index }); 11295 index++; 11296 return result.concat(value.players); 11297 }, []) 11298 } 11299 } 11300 11301 vm.putLineup = function () { 11302 11303 var positions = scoreboardBaseballService.getDefensePositions(); 11304 vm.loadingSave = true; 11305 11306 vm.lineup.teams.forEach(function (team) { 11307 var index = 1; 11308 11309 team.positions = _.reduce(team.orderedPositions, function (result, value) { 11310 value.players.forEach(function (player) { player.row = index }); 11311 index++; 11312 return result.concat(value.players); 11313 }, []) 11314 }) 11315 11316 scoreboardBaseballService.putLineupBaseball(__solutionId__, vm.gameDetails.id, vm.lineup) 11317 .then(function (response) { 11318 vm.loadingSave = false; 11319 }) 11320 .catch(function (error) { 11321 vm.loadingSave = false; 11322 bugsnag.notify(error); 11323 }); 11324 } 11325 11326 //Component mount 11327 getLineup(); 11328 11329 // Helpers 11330 function sortBatters() { 11331 _.forEach(vm.lineup.teams, function (team) { 11332 team.positions.sort(function (a, b) { 11333 return a.row - b.row; 11334 }); 11335 }) 11336 } 11337 11338 function getLineup() { 11339 scoreboardBaseballService.getLineupBaseball(__solutionId__, vm.gameDetails.id) 11340 .then(function (response) { 11341 console.log(response); 11342 vm.lineup = response.data; 11343 sortBatters(); 11344 11345 vm.lineup.teams.forEach(function (team) { 11346 team.orderedPositions = buildPositions(team); 11347 }); 11348 }) 11349 .catch(function (error) { 11350 bugsnag.notify(error); 11351 }); 11352 } 11353 11354 function buildPositions(team) { 11355 var playerPositions = []; 11356 11357 var pitcherDesignatedHitter = _.filter(team.positions, function (position) { return position.playerPosition == 'pitcher' || position.playerPosition == 'designatedhitter' }); 11358 11359 team.positions.map(function (position) { 11360 var hasPitcher = _.find(pitcherDesignatedHitter, { playerPosition: 'pitcher' }); 11361 11362 if (position.playerPosition == 'pitcher') { 11363 playerPositions.push({ players: _.sortBy(pitcherDesignatedHitter, function (player) { return player.playerPosition != 'designatedhitter' }) }); 11364 } 11365 else if (position.playerPosition == 'designatedhitter' && !hasPitcher) { 11366 playerPositions.push({ players: [position] }) 11367 } 11368 else if (position.playerPosition != 'designatedhitter') { 11369 playerPositions.push({ players: [position] }) 11370 } 11371 }); 11372 11373 return playerPositions; 11374 } 11375 } 11376})(); 11377; 11378(function () { 11379 'use strict'; 11380 11381 angular 11382 .module('app.directives') 11383 .directive('scoreboardBaseballTabLineup', scoreboardBaseballTabLineup) 11384 11385 scoreboardBaseballTabLineup.$inject = []; 11386 11387 function scoreboardBaseballTabLineup() { 11388 return { 11389 restrict: 'E', 11390 scope: { 11391 widget: '=' 11392 }, 11393 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-lineup/scoreboard-baseball-tab-lineup.tpl.html', 11394 controller: 'ScoreboardBaseballTabLineupWidgetController', 11395 controllerAs: 'scoreboardBaseballTabLineup' 11396 }; 11397 } 11398})();; 11399(function () { 11400 'use strict'; 11401 11402 angular 11403 .module('app.directives') 11404 .controller('ScoreboardBaseballTabLineupBattersWidgetController', ScoreboardBaseballTabLineupBattersWidgetController); 11405 11406 ScoreboardBaseballTabLineupBattersWidgetController.$inject = ['$scope']; 11407 11408 function ScoreboardBaseballTabLineupBattersWidgetController($scope) { 11409 var vm = this; 11410 vm.gameActive = $scope.gameActive 11411 11412 $scope.$watch('gameActive', function (gameActive) { 11413 vm.gameActive = gameActive; 11414 }); 11415 11416 vm.arrayMove = function (from, to) { 11417 $scope.arrayMove({ params: { teamId: $scope.teamId, to: to, from: from, list: $scope.team.orderedPositions } }) 11418 } 11419} 11420})(); 11421; 11422(function () { 11423 'use strict'; 11424 11425 angular 11426 .module('app.directives') 11427 .directive('scoreboardBaseballTabLineupBatters', scoreboardBaseballTabLineupBatters) 11428 11429 scoreboardBaseballTabLineupBatters.$inject = []; 11430 11431 function scoreboardBaseballTabLineupBatters() { 11432 return { 11433 restrict: 'E', 11434 scope: { 11435 widget: '=', 11436 team: '=', 11437 arrayMove: '&', 11438 teamId: '=', 11439 gameActive: '=', 11440 }, 11441 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-lineup/batters/scoreboard-baseball-tab-lineup-batters.tpl.html', 11442 controller: 'ScoreboardBaseballTabLineupBattersWidgetController', 11443 controllerAs: 'scoreboardBaseballTabLineupBatters' 11444 }; 11445 } 11446})();; 11447(function () { 11448 'use strict'; 11449 11450 angular 11451 .module('app.directives') 11452 .controller('ScoreboardBaseballTabLineupPlayersWidgetController', ScoreboardBaseballTabLineupPlayersWidgetController); 11453 11454 ScoreboardBaseballTabLineupPlayersWidgetController.$inject = ['$scope', 'ScoreboardBaseballService']; 11455 11456 function ScoreboardBaseballTabLineupPlayersWidgetController($scope, scoreboardBaseballService) { 11457 var vm = this; 11458 11459 vm.errors = []; 11460 11461 // Constant variables 11462 vm.MAX_SELECTED_PLAYERS = Infinity; 11463 11464 vm.gameActive = $scope.gameActive 11465 11466 $scope.$watch('gameActive', function (gameActive) { 11467 vm.gameActive = gameActive; 11468 }); 11469 11470 // State variables 11471 vm.list = []; 11472 vm.allNumbers = []; 11473 vm.disabledNumbers = []; 11474 vm.positions = scoreboardBaseballService.getDefensePositions(); 11475 vm.isEditing = { 11476 player: null, 11477 value: false 11478 }; 11479 11480 vm.editNumber = function (player) { 11481 vm.isEditing.value = !vm.isEditing.value; 11482 vm.isEditing.player = player 11483 } 11484 11485 vm.getStyle = function (player) { 11486 let style = {}; 11487 style['color'] = '#919191' 11488 11489 if (vm.isEditing.value && player.id === vm.isEditing.player.id) { 11490 style['color'] = '#000'; 11491 } 11492 style['background'] = 'none'
11493 style['border'] = 'none' 11494 return style; 11495 } 11496 11497 vm.submitHandler = function (event, player) { 11498 vm.changeNumber(player.id, event.target[0].value) 11499 event.target[0].value = ''; 11500 vm.isEditing.value = !vm.isEditing.value; 11501 } 11502 11503 // State functions 11504 vm.changeNumber = function (id, num) { 11505 let tempPlayer = _.find($scope.team.positions, function (player) { 11506 return player.id == id 11507 }) 11508 tempPlayer ? tempPlayer.playerNumber = num : null; 11509 11510 let tempPlayerAvailable = _.find($scope.team.playersAvailable, function (player) { 11511 return player.id == id 11512 }) 11513 tempPlayerAvailable ? tempPlayerAvailable.playerNumber = num : null; 11514 getNumbers(); 11515 } 11516 11517 vm.checkPlayer = function (player) { 11518 if (player.checked) { 11519 _.remove($scope.team.playersAvailable, { id: player.id }); 11520 $scope.team.positions.push(player); 11521 11522 } else { 11523 _.remove($scope.team.positions, { id: player.id }); 11524 $scope.team.playersAvailable.unshift(player); 11525 } 11526 } 11527 11528 vm.sortSubstitution = function (item) { 11529 switch (item) { 11530 case 'number': 11531 vm.sortedBy = 1; 11532 vm.list = _.sortBy(vm.list, function (player) { 11533 return player.number; 11534 }) 11535 break; 11536 case 'name': 11537 vm.sortedBy = 2; 11538 vm.list = _.sortBy(vm.list, function (player) { 11539 return player.playerName; 11540 }) 11541 break; 11542 case 'position': 11543 vm.sortedBy = 3; 11544 vm.list = _.sortBy(vm.list, function (player) { 11545 return player.pos; 11546 }) 11547 break; 11548 case 'checked': 11549 vm.sortedBy = 4; 11550 vm.list = _.sortBy(vm.list, function (player) { 11551 return player.checked; 11552 }).reverse(); 11553 break; 11554 default: 11555 vm.sortedBy = 2; 11556 vm.list = _.sortBy(vm.list, function (player) { 11557 return player.playerName; 11558 }) 11559 break; 11560 } 11561 } 11562 vm.sortSubstitution(); 11563 11564 // Component mount 11565 $scope.$watch('team', function () { 11566 buildList(); 11567 getNumbers(); 11568 }); 11569 11570 $scope.$watch(function () { 11571 return vm.list; 11572 }, function () { 11573 validateLineup(); 11574 }, true) 11575 11576 function validateLineup() { 11577 var errors = []; 11578 var selectedList = _.filter(vm.list, { checked: true }); 11579 11580 selectedList.forEach(function (player) { 11581 if (player.playerPosition && player.playerPosition != 'infielder' && player.playerPosition != 'extrahitter') { 11582 var positionPlayers = _.filter(selectedList, { playerPosition: player.playerPosition }); 11583 if (positionPlayers.length > 1) { 11584 errors.push({ playerId: player.id, error: 'position' }) 11585 } 11586 } 11587 }) 11588 vm.errors = errors; 11589 } 11590 11591 vm.isError = function(playerId, error) { 11592 return _.findIndex(vm.errors, { playerId: playerId, error: error }) > -1; 11593 } 11594 11595 // Helpers 11596 function buildList() { 11597 const positions = $scope.team.positions.map(function (val) { 11598 val.checked = true; 11599 return val; 11600 }); 11601 const playersAvailable = $scope.team.playersAvailable.map(function (val) { 11602 val.checked = false; 11603 return val; 11604 }); 11605 vm.list = positions.concat(playersAvailable); 11606 } 11607 11608 function getNumbers() { 11609 vm.disabledNumbers = vm.list.map(function (player) { 11610 return player.playerNumber; 11611 }); 11612 vm.allNumbers = []; 11613 vm.allNumbers.push("0"); 11614 vm.allNumbers.push("00"); 11615 for (let i = 1; i <= 99; i++) { 11616 vm.allNumbers.push(i.toString()); 11617 } 11618 } 11619 11620 } 11621})(); 11622; 11623(function () { 11624 'use strict'; 11625 11626 angular 11627 .module('app.directives') 11628 .directive('scoreboardBaseballTabLineupPlayers', scoreboardBaseballTabLineupPlayers) 11629 11630 scoreboardBaseballTabLineupPlayers.$inject = []; 11631 11632 function scoreboardBaseballTabLineupPlayers() { 11633 return { 11634 restrict: 'E', 11635 scope: { 11636 widget: '=', 11637 team: '=', 11638 gameActive: '=', 11639 }, 11640 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-lineup/players/scoreboard-baseball-tab-lineup-players.tpl.html', 11641 controller: 'ScoreboardBaseballTabLineupPlayersWidgetController', 11642 controllerAs: 'scoreboardBaseballTabLineupPlayers' 11643 }; 11644 } 11645})();; 11646(function () { 11647 'use strict'; 11648 11649 angular 11650 .module('app.directives') 11651 .controller('ScoreboardBaseballSaveButtonWidgetController', ScoreboardBaseballSaveButtonWidgetController); 11652 11653 ScoreboardBaseballSaveButtonWidgetController.$inject = ['$scope']; 11654 11655 function ScoreboardBaseballSaveButtonWidgetController($scope) { 11656 var vm = this; 11657 vm.gameActive = $scope.gameActive 11658 11659 $scope.$watch('gameActive', function (gameActive) { 11660 vm.gameActive = gameActive; 11661 }) 11662 } 11663})(); 11664; 11665(function () { 11666 'use strict'; 11667 11668 angular 11669 .module('app.directives') 11670 .directive('scoreboardBaseballSaveButton', scoreboardBaseballSaveButton) 11671 11672 scoreboardBaseballSaveButton.$inject = ['$timeout']; 11673 11674 function scoreboardBaseballSaveButton($timeout) { 11675 return { 11676 restrict: 'E', 11677 scope: { 11678 widget: '=', 11679 onSave: '&', 11680 loading: '=', 11681 gameActive: '=', 11682 }, 11683 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/save/scoreboard-baseball-save-button.tpl.html', 11684 controller: 'ScoreboardBaseballSaveButtonWidgetController', 11685 controllerAs: 'scoreboardBaseballSaveButton', 11686 link: function (scope) { 11687 $timeout(function () { 11688 const savebar = $(`#save-${scope.widget}`); 11689 var breakpoint = undefined; 11690 function stickyHandler() { 11691 var wS = $(this).scrollTop(); 11692 var hT = $(`#save-${scope.widget}`).offset().top 11693 if (breakpoint === undefined && hT < 0) { 11694 breakpoint = wS; 11695 savebar.addClass("sticky-save-button") 11696 } else if (breakpoint !== undefined && wS > breakpoint) { 11697 savebar.addClass("sticky-save-button") 11698 } else { 11699 savebar.removeClass("sticky-save-button"); 11700 } 11701 } 11702 $(`#editWindow-${scope.widget}`).scroll(stickyHandler); 11703 }); 11704 } 11705 }; 11706 } 11707})();; 11708(function () { 11709 'use strict'; 11710 11711 angular 11712 .module('app.directives') 11713 .controller('NumberSelectWidgetController', NumberSelectWidgetController); 11714 11715 NumberSelectWidgetController.$inject = ['$scope']; 11716 11717 function NumberSelectWidgetController($scope) { 11718 var vm = this; 11719 vm.isDisabled = $scope.isDisabled 11720 11721 $scope.$watch('isDisabled', function (isDisabled) { 11722 vm.isDisabled = isDisabled; 11723 }); 11724 } 11725})(); 11726; 11727 11728(function () { 11729 'use strict'; 11730 11731 angular 11732 .module('app.directives') 11733 .directive('numberSelect', numberSelect) 11734 11735 numberSelect.$inject = ['$timeout', '$compile']; 11736 11737 function numberSelect($timeout, $compile) { 11738 return { 11739 restrict: 'E', 11740 scope: { 11741 itemId: '@', 11742 disabledNumbers: '=', 11743 allNumbers: '=', 11744 selectedNumber: '=', 11745 onNumberChange: '=', 11746 isDisabled: '=', 11747 popoverClass: '=' 11748 }, 11749 templateUrl: 'public/v2/app/core/directives/number-select/number-select.tpl.html', 11750 controller: 'NumberSelectWidgetController', 11751 controllerAs: 'numberSelect', 11752 link: function (scope) { 11753 scope.$watch('[allNumbers, selectedNumber, disabledNumbers, itemId]', function () { 11754 const compiled = $compile(` 11755 <div class='{{popoverClass}}'> 11756 <number-select-menu on-number-change="onNumberChange" all-numbers="allNumbers" selected-number="selectedNumber" disabled-numbers="disabledNumbers" item-id="itemId"></number-select-menu> 11757 </div> 11758 `)(scope); 11759 $timeout(function () { 11760 $(`#popover-id-${scope.itemId}`).popover({ 11761 trigger: 'focus', 11762 placement: 'bottom', 11763 html: true, 11764 content: compiled 11765 }); 11766 }); 11767 }) 11768 } 11769 }; 11770 } 11771})(); 11772 11773 11774 11775; 11776(function () { 11777 'use strict'; 11778 11779 angular 11780 .module('app.directives')
11781 .controller('NumberSelectMenuWidgetController', NumberSelectMenuWidgetController); 11782 11783 NumberSelectMenuWidgetController.$inject = ['$scope']; 11784 11785 function NumberSelectMenuWidgetController($scope) { 11786 var vm = this; 11787 vm.getClass = function (num) { 11788 if ($scope.selectedNumber === num) { 11789 return { 'popover-number-cell-selected': true }; 11790 } else if ($scope.disabledNumbers.includes(num)) { 11791 return { 'popover-number-cell-disabled': true }; 11792 } 11793 return false; 11794 } 11795 } 11796})(); 11797; 11798(function () { 11799 'use strict'; 11800 11801 angular 11802 .module('app.directives') 11803 .directive('numberSelectMenu', numberSelectMenu) 11804 11805 numberSelectMenu.$inject = []; 11806 11807 function numberSelectMenu() { 11808 return { 11809 restrict: 'E', 11810 scope: { 11811 itemId: '=', 11812 disabledNumbers: '=', 11813 allNumbers: '=', 11814 selectedNumber: '=', 11815 onNumberChange: '&' 11816 }, 11817 templateUrl: 'public/v2/app/core/directives/number-select/menu/number-select-menu.tpl.html', 11818 controller: 'NumberSelectMenuWidgetController', 11819 controllerAs: 'numberSelectMenu' 11820 }; 11821 } 11822})();; 11823(function () { 11824 'use strict'; 11825 11826 angular 11827 .module('app.directives') 11828 .controller('TemplateEditorController', TemplateEditorController); 11829 11830 TemplateEditorController.$inject = ['$scope', '$sce']; 11831 11832 function TemplateEditorController($scope, $sce) { 11833 var vm = this; 11834 vm.tempFiles = {}; 11835 vm.selectedItem = {}; 11836 11837 vm.sanitize = function (html) { 11838 return $sce.trustAsHtml(html); 11839 11840 } 11841 vm.fileChange = function (file) { 11842 vm.tempFiles[vm.selectedItem.id] = file; 11843 } 11844 11845 vm.getItem = function (type, item, listItemId) { 11846 switch (type) { 11847 case 'text': 11848 if (vm.editable && listItemId && item[listItemId]) { 11849 var fieldName = _.get(_.find(vm.listFields, { Id: item[listItemId] }), 'Name'); 11850 var element = angular.element(item.text); 11851 var newhtml = element.html().replace(element.text(), fieldName); 11852 element.html(newhtml); 11853 return vm.sanitize(element[0].outerHTML); 11854 } 11855 11856 if (vm.item && item[listItemId]) { 11857 var id = item[listItemId]; 11858 var element = angular.element(item.text); 11859 var newhtml = element.html().replace(element.text(), _.get(_.find(vm.item.content, { id: id }), 'value')); 11860 element.html(newhtml); 11861 return vm.sanitize(element[0].outerHTML); 11862 } 11863 11864 return vm.sanitize(item.text); 11865 11866 case 'image': 11867 if (vm.editable && listItemId && item[listItemId]) { 11868 return _.get(_.find(vm.listFields, { Id: item[listItemId] }), 'Name'); 11869 } 11870 11871 if (vm.item && item[listItemId]) { 11872 var id = item[listItemId]; 11873 return _.get(_.find(vm.item.content, { id: id }), 'value'); 11874 } 11875 11876 return item.url; 11877 case 'button': 11878 if (listItemId == 'listItem-url') { 11879 if (vm.item && item[listItemId]) { 11880 var id = item[listItemId]; 11881 return _.get(_.find(vm.item.content, { id: id }), 'value'); 11882 } 11883 11884 return item.url; 11885 } 11886 else if (listItemId == 'listItem-name') { 11887 if (vm.editable && listItemId && item[listItemId]) { 11888 var fieldName = _.get(_.find(vm.listFields, { Id: item[listItemId] }), 'Name'); 11889 var element = angular.element(item.text); 11890 var newhtml = element.html().replace(element.text(), fieldName); 11891 element.html(newhtml); 11892 return vm.sanitize(element[0].outerHTML); 11893 } 11894 11895 if (vm.item && item[listItemId]) { 11896 var id = item[listItemId]; 11897 var element = angular.element(item.text); 11898 var newhtml = element.html().replace(element.text(), _.get(_.find(vm.item.content, { id: id }), 'value')); 11899 element.html(newhtml); 11900 return vm.sanitize(element[0].outerHTML); 11901 } 11902 11903 return vm.sanitize(item.text); 11904 } 11905 return ''; 11906 11907 } 11908 11909 return item.text; 11910 } 11911 11912 vm.itemParameters = { 11913 text: [ 11914 { type: 'html', id: 'text', label: 'directives.templateEditor.templateEditor.parameters.text' }, 11915 { type: 'listItem', id: 'listItem', label: 'directives.templateEditor.templateEditor.parameters.listItem', t
11915ypes: ['text', 'link'] } 11916 ], 11917 image: [ 11918 { type: 'file', id: 'url', label: 'directives.templateEditor.templateEditor.parameters.image' }, 11919 { type: 'number', id: 'width', label: 'directives.templateEditor.templateEditor.parameters.width' }, 11920 { type: 'number', id: 'height', label: 'directives.templateEditor.templateEditor.parameters.height' }, 11921 { type: 'listItem', id: 'listItem', label: 'directives.templateEditor.templateEditor.parameters.listItem', types: ['image'] } 11922 ], 11923 line: [ 11924 { type: 'number', id: 'height', label: 'directives.templateEditor.templateEditor.parameters.height' }, 11925 { type: 'number', id: 'width', label: 'directives.templateEditor.templateEditor.parameters.widthPercent' }, 11926 { type: 'color', id: 'color', label: 'directives.templateEditor.templateEditor.parameters.color' } 11927 ], 11928 button: [ 11929 { type: 'string', id: 'url', label: 'directives.templateEditor.templateEditor.parameters.link' }, 11930 { type: 'html', id: 'text', label: 'directives.templateEditor.templateEditor.parameters.text' }, 11931 { type: 'color', id: 'backgroundColor', label: 'directives.templateEditor.templateEditor.parameters.backgroundColor' }, 11932 { type: 'number', id: 'borderRadius', label: 'directives.templateEditor.templateEditor.parameters.borderRadius' }, 11933 { type: 'checkbox', id: 'fullWidth', label: 'Full Width', trueValue: true, falseValue: false, label: 'directives.templateEditor.templateEditor.parameters.fullWidth' }, 11934 { type: 'listItem', id: 'listItem-url', label: 'directives.templateEditor.templateEditor.parameters.listUrl', types: ['link'] }, 11935 { type: 'listItem', id: 'listItem-name', label: 'directives.templateEditor.templateEditor.parameters.listText', types: ['link', 'text'] } 11936 ] 11937 } 11938 11939 vm.filterListItems = function (parameter) { 11940 var fields = vm.listFields; 11941 11942 if (!parameter.types) 11943 return fields; 11944 11945 return _.filter(fields, function (field) { return _.includes(parameter.types, field.Type) }); 11946 } 11947 } 11948})(); 11949; 11950 11951(function () { 11952 'use strict'; 11953 11954 angular 11955 .module('app.directives') 11956 .directive('templateEditor', templateEditor) 11957 11958 templateEditor.$inject = ['$timeout', '$compile']; 11959 11960 function templateEditor($timeout, $compile) { 11961 return { 11962 restrict: 'E', 11963 scope: { 11964 template: '=', 11965 templateItems: '=', 11966 editable: '=', 11967 beforeSave: '=', 11968 list: '=', 11969 selectedList: '=', 11970 item: '=' 11971 }, 11972 templateUrl: 'public/v2/app/core/directives/template-editor/template-editor.tpl.html', 11973 controller: 'TemplateEditorController', 11974 controllerAs: 'templateEditor', 11975 link: function (scope, element, attrs, controller) { 11976 var items = scope.templateItems; 11977 11978 controller.beforeSave = scope.beforeSave || {}; 11979 controller.editable = scope.editable !== false; 11980 controller.items = items; 11981 controller.item = scope.item; 11982 controller.showPopup = function (item) { 11983 controller.selectedItem = item; 11984 controller.clone = angular.copy(controller.items[item.id]); 11985 $('#parameterDialog', element).modal('show'); 11986 } 11987 11988 scope.$watch('templateItems', function (items) { 11989 controller.items = items; 11990 }); 11991 11992 scope.$watchGroup(['list', 'selectedList'], function (values) { 11993 11994 if (values[0] && values[1]) { 11995 var selectedList = _.find(values[0], { id: _.parseInt(values[1]) }); 11996 if (selectedList) { 11997 var listDefinition = angular.fromJson(selectedList.value); 11998 controller.listFields = listDefinition.Fields 11999 } 12000 } 12001 12002 }) 12003 12004 scope.$watch('item', function (item) { 12005 controller.item = item; 12006 }) 12007 12008 $('#parameterDialog', element).on('hide.bs.modal', function (event) { 12009 if (controller.save != true) { 12010 scope.$apply(controller.items[controller.selectedItem.id] = controller.clone); 12011 } 12012 controller.save = false 12013 }); 12014 12015 } 12016 }; 12017 } 12018})(); 12019 12020 12021 12022; 12023(function () { 12024 'use strict'; 12025 12026 angular 12027 .module('app.directives') 12028 .controller('ListFiltersController', ListFiltersController); 12029 12030 ListFiltersController.$inject = ['$scope']; 12031 12032 function ListFiltersController($scope) { 12033 var vm = this; 12034 12035 vm.addFilter = function() { 12036 vm.filters.push({ id: undefined, type: undefined, default: undefined }); 12037 } 12038 12039 vm.removeFilter = function (filter) { 12040 _.remove(vm.filters, filter); 12041 } 12042 12043 vm.getFilterTypes = function (field) { 12044 var field = _.find(vm.listFields, { Id: field }); 12045 12046 if (field) { 12047 return vm.filterTypes[field.Type]; 12048 } 12049 12050 return []; 12051 } 12052 } 12053})(); 12054; 12055 12056(function () { 12057 'use strict'; 12058 12059 angular 12060 .module('app.directives') 12061 .directive('listFilters', listFilters) 12062 12063 listFilters.$inject = ['$timeout', '$compile']; 12064 12065 function listFilters($timeout, $compile) { 12066 return { 12067 restrict: 'E', 12068 scope: { 12069 filters: '=', 12070 list: '=', 12071 selectedList: '=', 12072 }, 12073 templateUrl: 'public/v2/app/core/directives/widget/settings/control
12073s/filters/list-filters.tpl.html', 12074 controller: 'ListFiltersController', 12075 controllerAs: 'listFilters', 12076 link: function (scope, element, attrs, controller) { 12077 controller.filterTypes = { 12078 'text': [{ id: 'select', name: 'directives.listFilters.select' }, { id: 'search', name: 'directives.listFilters.search' }] 12079 } 12080 12081 controller.filters = scope.filters; 12082 controller.selectedList = scope.selectedList; 12083 controller.list = scope.list; 12084 12085 scope.$watchGroup(['list', 'selectedList'], function (values) { 12086 if (values[0] && values[1]) { 12087 var selectedList = _.find(values[0], { id: _.parseInt(values[1]) }); 12088 if (selectedList) { 12089 var listDefinition = angular.fromJson(selectedList.value); 12090 12091 controller.listFields = _.filter(listDefinition.Fields, function (field) { return controller.filterTypes[field.Type] }) 12092 } 12093 } 12094 12095 }) 12096 12097 } 12098 }; 12099 } 12100})(); 12101 12102 12103 12104; 12105(function () { 12106 'use strict'; 12107 12108 angular 12109 .module('app.directives') 12110 .controller('WidgetSettingsLanguageController', WidgetSettingsLanguageController); 12111 12112 WidgetSettingsLanguageController.$inject = ['$scope', '$localStorage']; 12113 12114 function WidgetSettingsLanguageController($scope, $localStorage) { 12115 var vm = this; 12116 vm.websiteLanguages = website.languages; 12117 vm.selectedLanguage = angular.isUndefined($localStorage.currentLanguage) 12118 ? __defaultLanguage__ 12119 : $localStorage.currentLanguage.culture; 12120 12121 $scope.onUpdateLanguage(vm.selectedLanguage); 12122 } 12123})(); 12124; 12125 12126(function () { 12127 'use strict'; 12128 12129 angular 12130 .module('app.directives') 12131 .directive('widgetSettingsLanguage', widgetSettingsLanguage) 12132 12133 widgetSettingsLanguage.$inject = ['$timeout', '$compile']; 12134 12135 function widgetSettingsLanguage($timeout, $compile) { 12136 return { 12137 restrict: 'E', 12138 scope: { 12139 onUpdateLanguage: '=' 12140 }, 12141 templateUrl: 'public/v2/app/core/directives/widget/settings/controls/language/widget-settings-language.tpl.html', 12142 controller: 'WidgetSettingsLanguageController', 12143 controllerAs: 'widgetSettingsLanguage', 12144 link: function (scope, element, attrs, controller) { 12145 } 12146 }; 12147 } 12148})(); 12149 12150 12151 12152; 12153(function () { 12154 'use strict'; 12155 12156 angular 12157 .module('app.directives') 12158 .controller('GameBroadcastWidgetController', GameBroadcastWidgetController); 12159 12160 GameBroadcastWidgetController.$inject = ['$rootScope', '$scope', '$sce', '$translate', 'WebsiteEditorService']; 12161 12162 function GameBroadcastWidgetController($rootScope, $scope, $sce, $translate, websiteEditorService) { 12163 var vm = this; 12164 12165 //State variable 12166 vm.widget = angular.fromJson(widgets[$scope.widget]); 12167 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 12168 .replace(/[\n\r]+/g, ' '))); 12169 vm.backgroundImage = 'https://cache.kreezee.com/images/v2/broadcast-widget-background.png'; 12170 vm.broadcastLink = extractYoutubeLinkOrReturnUrl(vm.broadcast); 12171 12172 //On component mount 12173 for (var parameter in vm.widget.parameters) { 12174 switch (vm.widget.parameters[parameter].id) { 12175 case 'widgetTransparency': 12176 vm.widgetTransparency = vm.widget.parameters[parameter].value; 12177 break; 12178 case 'roundedCorner': 12179 vm.roundedCorner = vm.widget.parameters[parameter].value; 12180 break; 12181 case 'backgroundColor': 12182 vm.backgroundColor = vm.widget.parameters[parameter].value; 12183 break; 12184 } 12185 } 12186 12187 12188 // Listener 12189 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 12190 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 12191 .then(function () {
12192 for (var parameter in vm.widget.parameters) { 12193 switch (vm.widget.parameters[parameter].id) { 12194 case 'widgetTransparency': 12195 vm.widget.parameters[parameter].value = data.widgetTransparency; 12196 vm.widgetTransparency = data.widgetTransparency; 12197 break; 12198 case 'roundedCorner': 12199 vm.widget.parameters[parameter].value = data.roundedCorner; 12200 vm.roundedCorner = data.roundedCorner; 12201 break; 12202 case 'backgroundColor': 12203 vm.widget.parameters[parameter].value = data.backgroundColor; 12204 vm.backgroundColor = data.backgroundColor; 12205 break; 12206 } 12207 } 12208 widgets[$scope.widget] = angular.toJson(vm.widget); 12209 }) 12210 .catch(function (error) { 12211 bugsnag.notify(error); 12212 }); 12213 }); 12214 12215 $scope.$on('$destroy', listener); 12216 12217 function extractYoutubeLinkOrReturnUrl(url) { 12218 var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/; 12219 var match = url.match(regExp); 12220 var finalResult = ''; 12221 if (match && match[7].length == 11) { 12222 finalResult = 'https://www.youtube.com/embed/' + match[7]; 12223 } 12224 if (finalResult == '') { 12225 vm.isYoutubeLink = false; 12226 return $sce.trustAsResourceUrl(url); 12227 } else { 12228 vm.isYoutubeLink = true; 12229 return $sce.trustAsResourceUrl(finalResult); 12230 } 12231 } 12232 } 12233})(); 12234; 12235(function () { 12236 'use strict'; 12237 12238 angular 12239 .module('app.directives') 12240 .directive('gameBroadcast', gameBroadcast) 12241 12242 gameBroadcast.$inject = []; 12243 12244 function gameBroadcast() { 12245 return { 12246 restrict: 'E', 12247 scope: { 12248 widget: '=' 12249 }, 12250 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-broadcast/game-broadcast.tpl.html', 12251 controller: 'GameBroadcastWidgetController', 12252 controllerAs: 'gameBroadcast' 12253 }; 12254 } 12255})();; 12256(function () { 12257 'use strict'; 12258 12259 angular 12260 .module('app.directives') 12261 .controller('GameDetailsLineupsController', GameDetailsLineupsController); 12262 12263 GameDetailsLineupsController.$inject = ['$rootScope', '$scope', '$translate', '$localStorage', 'UrlService', 'PlayerService', 'PositionService']; 12264 12265 function GameDetailsLineupsController($rootScope, $scope, $translate, $localStorage, urlService, playerService, positionService) { 12266 var vm = this; 12267 12268 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 12269 vm.url = urlService; 12270 vm.player = playerService; 12271 vm.position = positionService; 12272 vm.sportId = $localStorage.solution.sportId; 12273 12274 buildColumns($scope.lineupColumns); 12275 vm.teamList.sort(function (a, b) { 12276 if (a.id === vm.visitorTeamId) { 12277 return -1; 12278 } else { 12279 return 1; 12280 } 12281 }); 12282 12283 vm.showStat = function (column) { 12284 if (vm.isMobile && column.visibleMobile) { 12285 return true; 12286 } else if (!vm.isMobile && column.visibleDesktop) { 12287 return true; 12288 } 12289 return false; 12290 } 12291 12292 vm.getBirthday = function (birthday) { 12293 return birthday !== null ? moment(birthday).format($translate.instant('directives.widgets.team.details.lineup.format.birthday')) : ''; 12294 } 12295 12296 vm.getValue = function (player, teamName, colId) { 12297 switch (colId) { 12298 case 1:
12299 return { value: player.number, class: 'text-center', sortValue: _.parseInt(player.number) }; 12300 case 2: 12301 return { value: player.name, class: 'text-nowrap sticky-col', sortValue: _.kebabCase(player.name), url: vm.url.getPlayerUrl(player.name, player.id) }; 12302 case 3: 12303 return { value: positionService.getPosition(player.position, 'abbreviation'), class: 'text-center' }; 12304 case 4: 12305 return { value: teamName, class: 'text-nowrap', sortValue: _.kebabCase(teamName), url: vm.url.getTeamUrl(teamName, vm.id) }; 12306 case 5: 12307 return { value: playerService.getAge(player.birthday), class: 'text-center' }; 12308 case 6: 12309 return { value: player.height, class: 'text-center' }; 12310 case 7: 12311 return { value: player.weight, class: 'text-center' }; 12312 case 8: 12313 case 13: 12314 case 14: 12315 return { value: player.level, sortValue: _.kebabCase(player.level), class: 'text-center' }; 12316 case 9: 12317 return { value: vm.getBirthday(player.birthday), class: 'text-center' }; 12318 case 10: 12319 return { value: $translate.instant(playerService.getStatus(player.LineupStatus)), class: 'text-center' }; 12320 case 11: 12321 return { value: $translate.instant(playerService.getPlayerType(player.PlayerStatus)), sortValue: _.kebabCase(player.Type), class: 'text-center' } 12322 } 12323 12324 return { value: '', class: 'text-center' }; 12325 } 12326 12327 if(vm.statusId === 1){ 12328 _.forEach(vm.teamList, function(team){ 12329 _.forEach(team.playersCategories, function(category, catIdx){ 12330 const tempPlayers = _.filter(category.players, function (player) { return player.status === "Selected" }) 12331 if(tempPlayers.length > 0){ 12332 team.playersCategories[catIdx].players = tempPlayers 12333 } 12334 }) 12335 }) 12336 } 12337 12338 setTeams(); 12339 12340 $scope.$watch('localFirst', function () { 12341 setTeams(); 12342 }); 12343 12344 $scope.$watch('lineupColumns', function () { 12345 buildColumns($scope.lineupColumns); 12346 }) 12347 12348 function setTeams() { 12349 if ($scope.localFirst) { 12350 vm.teams = [vm.teamList[1], vm.teamList[0]]; 12351 } else { 12352 vm.teams = [vm.teamList[0], vm.teamList[1]]; 12353 } 12354 } 12355 12356 function buildColumns(columnsToDisplay) { 12357 vm.columns = []; 12358 12359 columnsToDisplay.forEach(function (col) { 12360 var stat = playerService.getPlayerColumn(col.id); 12361 vm.columns.push({ 12362 id: col.id, 12363 visibleDesktop: col.visibleDesktop, 12364 visibleMobile: col.visibleMobile, 12365 name: stat.name 12366 }); 12367 }); 12368 } 12369 } 12370})(); 12371; 12372(function () { 12373 'use strict'; 12374 12375 angular 12376 .module('app.directives') 12377 .directive('gameDetailsLineups', gameDetailsLineups) 12378 12379 gameDetailsLineups.$inject = []; 12380 12381 function gameDetailsLineups() { 12382 return { 12383 restrict: 'E', 12384 scope: { 12385 widget: '=', 12386 localFirst: '=', 12387 lineupColumns: '=', 12388 }, 12389 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-details/lineups/game-details-lineups.tpl.html', 12390 controller: 'GameDetailsLineupsController', 12391 controllerAs: 'lineups' 12392 }; 12393 } 12394})();; 12395(function () { 12396 'use strict'; 12397 12398 angular 12399 .module('app.directives') 12400 .controller('GamePlayersStats', GamePlayersStats); 12401 12402 GamePlayersStats.$inject = ['$rootScope', '$scope', '$localStorage', '$window', 'WebsiteEditorService', '$timeout', 'UrlService', 'StatisticService', 'PositionService', 'GoogleMapService', 'FacilityService', 'GameService']; 12403 12404 function GamePlayersStats($rootScope, $scope, $localStorage, $window, websiteEditorService, $timeout, urlService, statisticService, positionService, googleMapService, facilityService, gameService) { 12405 var vm = this; 12406 vm.widget = angular.fromJson(widgets[$scope.widget]); 12407 12408 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 12409 .replace(/[\n\r]+/g, ' '))); 12410 12411 vm.url = urlService 12412 vm.position = positionService 12413 vm.bothTeams = false 12414 vm.playersToShow = [] 12415 vm.allPosColumns = {} 12416 vm.allTeamPos = {} 12417 vm.sportId = $localStorage.solution.sportId; 12418 12419 // Set view model parameters.
12420 for (var parameter in vm.widget.parameters) { 12421 switch (vm.widget.parameters[parameter].id) { 12422 case 'selectedTeam': 12423 vm.selectedTeam = vm.widget.parameters[parameter].value; 12424 vm.teamName = vm.selectedTeam === 'bothTeams' ? 'bothTeams' : vm[`${vm.selectedTeam}Name`] 12425 vm.teamId = vm.selectedTeam === 'bothTeams' ? -1 : vm[`${vm.selectedTeam}Id`] 12426 break; 12427 case 'selectedPosition': 12428 vm.selectedPosition = vm.widget.parameters[parameter].value; 12429 $timeout(function () { 12430 vm.columns = vm.getColumns(vm.selectedPosition) 12431 }) 12432 break; 12433 case 'columnsDisplaySelect': 12434 vm.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 12435 $timeout(function () { 12436 buildColumns(vm.columnsDisplaySelect); 12437 }) 12438 break; 12439 } 12440 } 12441 12442 vm.clickFacility = function () { 12443 var url = googleMapService.getMapSearchUrl(vm.facility[0].facilityAddress); 12444 window.open(url, "_blank"); 12445 } 12446 12447 vm.getTeamInfo = function (teamId, detail) { 12448 let currentTeam = _.filter(vm.teamList, function (team) { 12449 return team.id === Number(teamId) 12450 }) 12451 if (detail === 'name') { return currentTeam[0].name } 12452 if (detail === 'img') { return currentTeam[0].avatar } 12453 } 12454 12455 vm.showStat = function (column) { 12456 if (isMobile() && column.visibleMobile) { 12457 return true; 12458 } else if (!isMobile() && column.visibleDesktop) { 12459 return true; 12460 } 12461 return false; 12462 } 12463 12464 vm.getStatisticValue = function (player, statisticId) { 12465 if (player.stats.length > 0) { 12466 var playerStat = _.find(player.stats, function (statistic) { 12467 return statistic.statTypeId === statisticId; 12468 }); 12469 12470 if (playerStat) { 12471 return playerStat.displayValue; 12472 } 12473 } 12474 12475 return '0'; 12476 }; 12477 12478 vm.getPlayers = function () { 12479 _.forEach(vm.teamList, function (team) { 12480 var teamPlayers = _.filter(team.players, { status: "Selected" }); 12481 if (vm.selectedPosition > 0) { 12482 if (vm.teamId > 0) { 12483 _.forEach(teamPlayers, function (player) { 12484 if (player.teamId == vm.teamId && player.categoryId == vm.selectedPosition) { 12485 vm.playersToShow.push(player) 12486 } 12487 }) 12488 } 12489 else { 12490 _.forEach(teamPlayers, function (player) { 12491 if (player.categoryId == vm.selectedPosition) { 12492 vm.playersToShow.push(player) 12493 } 12494 }) 12495 } 12496 } else { 12497 if (vm.teamId > 0) { 12498 _.forEach(teamPlayers, function (player) { 12499 if (player.teamId == vm.teamId) { 12500 vm.playersToShow.push(player) 12501 } 12502 }) 12503 } 12504 else { 12505 _.forEach(teamPlayers, function (player) { 12506 vm.playersToShow.push(player) 12507 }) 12508 } 12509 } 12510 }) 12511 12512 if (vm.selectedPosition > 0 && vm.teamId < 0) { 12513 vm.playersToShow = _.groupBy(vm.playersToShow, function (player) { 12514 return player.teamId 12515 }) 12516 } 12517 if (vm.selectedPosition < 0 && vm.teamId > 0) { 12518 vm.playersToShow = _.groupBy(vm.playersToShow, function (player) { 12519 return player.categoryId 12520 }) 12521 } 12522 if (vm.selectedPosition > 0 && vm.teamId > 0) { 12523 vm.playersToShow = _.groupBy(vm.playersToShow, function (player) { 12524 return player.teamId 12525 }) 12526 } 12527 if (vm.selectedPosition < 0 && vm.teamId < 0) { 12528 vm.allTeamPos[vm.teamList[0].id] = { 12529 8: [], 12530 9: [], 12531 10: [], 12532 21: [] 12533 } 12534 vm.allTeamPos[vm.teamList[1].id] = { 12535 8: [], 12536 9: [], 12537 10: [], 12538 21: [] 12539 } 12540 12541 _.forEach(vm.playersToShow, function (player) { 12542 vm.allTeamPos[player.teamId][player.categoryId].push(player) 12543 }) 12544 } 12545 12546 vm.hasData = Object.keys(vm.playersToShow).length > 0 12547 } 12548 12549 vm.getPlayers() 12550 12551 vm.getColumns = function (catId) { 12552 let columns; 12553 12554 switch (Number(catId)) { 12555 case 8: 12556 columns = statisticService.getPlayerStatisticColumnsByColumnIds([99, 100, 101, 91, 102, 93, 90, 96, 97, 98]); 12557 break; 12558 case 9: 12559 columns = statisticService.getPlayerStatisticColumnsByColumnIds([67, 77, 80, 75, 72]) 12560 break; 12561 case 10: 12562 columns = statisticService.getPlayerStatisticColumnsByColumnIds([134, 137, 140, 141, 142, 152, 154, 155, 162]) 12563 break; 12564 case 21: 12565 columns = statisticService.getPlayerStatisticColumnsByColumnIds([65, 105, 107, 108]) 12566 break; 12567 case -1: 12568 vm.allPosColumns[8] = statisticService.getPlayerStatisticColumnsByColumnIds([99, 100, 101, 91, 102, 93, 90, 96, 97, 98]) 12569 vm.allPosColumns[9] = statisticService.getPlayerStatisticColumnsByColumnIds([67, 77, 80, 75, 72]) 12570 vm.allPosColumns[10] = statisticService.getPlayerStatisticColumnsByColumnIds([134, 137, 140, 141, 142, 152, 154, 155, 162]) 12571 vm.allPosColumns[21] = statisticService.getPlayerStatisticColumnsByColumnIds([65, 105, 107, 108]) 12572 columns = vm.allPosColumns 12573 break; 12574 } 12575 12576 // TODO Initialize column sort / change hardcoded value. 12577 _.find(columns, function (column) { 12578 switch (Number(catId)) { 12579 case 8: 12580 column.id === 100; 12581 break; 12582 case 9: 12583 column.id === 81; 12584 break; 12585 case 10: 12586 column.id === 134; 12587 break; 12588 case 21: 12589 column.id === 65; 12590 break; 12591 } 12592 return column; 12593 }) 12594 return columns 12595 } 12596 // Triggered when parameters are changed. 12597 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 12598 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 12599 .then(function (response) { 12600 // Save parameters
12601 for (var parameter in vm.widget.parameters) { 12602 switch (vm.widget.parameters[parameter].id) { 12603 case 'selectedTeam': 12604 vm.widget.parameters[parameter].value = data.selectedTeam; 12605 vm.selectedTeam = data.selectedTeam; 12606 vm.teamName = vm.selectedTeam === 'bothTeams' ? 'bothTeams' : vm[`${vm.selectedTeam}Name`] 12607 vm.teamId = vm.selectedTeam === 'bothTeams' ? -1 : vm[`${vm.selectedTeam}Id`] 12608 break; 12609 case 'selectedPosition': 12610 vm.widget.parameters[parameter].value = data.selectedPosition; 12611 vm.selectedPosition = data.selectedPosition; 12612 vm.columns = vm.getColumns(vm.selectedPosition) 12613 break; 12614 case 'columnsDisplaySelect': 12615 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 12616 vm.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 12617 buildColumns(vm.columnsDisplaySelect); 12618 break; 12619 } 12620 } 12621 vm.playersToShow = [] 12622 vm.getPlayers() 12623 // Update the variable. 12624 widgets[$scope.widget] = angular.toJson(vm.widget); 12625 }) 12626 .catch(function (error) { 12627 bugsnag.notify(error); 12628 }); 12629 }); 12630 12631 function buildColumns(columnsToDisplay) { 12632 vm.columns = []; 12633 columnsToDisplay.forEach(function (col) { 12634 var stat = statisticService.getPlayerStatisticByStatId(col.id); 12635 if (stat) { 12636 vm.columns.push({ 12637 id: col.id, 12638 visibleDesktop: col.visibleDesktop, 12639 visibleMobile: col.visibleMobile, 12640 name: stat.name, 12641 abbreviation: stat.abbreviation 12642 }) 12643 } 12644 }); 12645 12646 switch (vm.selectedTeam) { 12647 case 'localTeam': 12648 vm.teamId = vm.localTeamId; 12649 vm.team = _.find(vm.teamList, { id: vm.teamId }); 12650 break; 12651 case 'visitorTeam': 12652 vm.teamId = vm.visitorTeamId; 12653 vm.team = _.find(vm.teamList, { id: vm.teamId }); 12654 break; 12655 } 12656 vm.teamId = vm[`${vm.selectedTeam}Id`]; 12657 vm.team = _.find(vm.teamList, { id: vm.teamId }); 12658 12659 var players = _.get(_.find(vm.team.playersCategories, { id: 10 }), 'players'); 12660 vm.players = players; 12661 12662 var teamSummaryStats = _.find(vm.team.players, { id: 0, categoryId: 10 }) 12663 if (teamSummaryStats) { 12664 vm.teamSummary = teamSummaryStats; 12665 } 12666 } 12667 12668 facilityService.getFacilitiesDetailsWithUpdateDate(__solutionId__) 12669 .then(function (response) { 12670 12671 vm.facility = _.filter(response.data.facilities, function (facility) { 12672 return facility.name === vm.sportCenterName 12673 }) 12674 }) 12675 .catch(function (error) { 12676 bugsnag.notify(error); 12677 }); 12678 $scope.$on('$destroy', listener); 12679 12680 function isMobile() { 12681 return $window.innerWidth <= 600; 12682 } 12683 } 12684})(); 12685; 12686(function () { 12687 'use strict'; 12688 12689 angular 12690 .module('app.directives') 12691 .directive('gamePlayersStats', gamePlayersStats) 12692 12693 gamePlayersStats.$inject = []; 12694 12695 function gamePlayersStats() { 12696 return { 12697 restrict: 'E', 12698 scope: { 12699 widget: '=' 12700 }, 12701 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-players-stats/game-players-stats.tpl.html', 12702 controller: 'GamePlayersStats', 12703 controllerAs: 'gamePlayersStats', 12704 }; 12705 } 12706})(); 12707; 12708(function () { 12709 'use strict'; 12710 12711 angular 12712 .module('app.directives') 12713 .controller('PlayByPlayWidgetController', PlayByPlayWidgetController); 12714 12715 PlayByPlayWidgetController.$inject = ['$rootScope', '$scope', 'UrlService', 'PositionService', 'EventService']; 12716 12717 function PlayByPlayWidgetController($rootScope, $scope, urlService, positionService, eventService) { 12718 var vm = this; 12719 var gameDetails = Object.assign(vm, angular.fromJson(__gameDetails__ 12720 .replace(/[\n\r]+/g, ' '))); 12721 vm.url = urlService; 12722 vm.periods = [ 12723 { number: 1 }, { number: 2 }, { number: 3 } 12724 ]; 12725 vm.selectedPeriod = 1; // Set default selected period to 1. 12726 12727 buildEvents(1); 12728 12729 // TODO Get parameter of the widget.... 12730 var widgetDefinition = angular.fromJson(widgets[$scope.widget]); 12731 12732 vm.selectPeriod = function(period) { 12733 // Update the selected period. 12734 vm.selectedPeriod = period.number; 12735 12736 // Get the events for the selected period. 12737 buildEvents(period.number); 12738 }; 12739 12740 function buildEvents(period) { 12741 vm.events = []; 12742 12743 _.forEach(gameDetails.eventList, function(event) { 12744 // Get events for the selected period. 12745 if (period == event.periodId) { 12746 var newEvent = null; 12747 var team = _.find(gameDetails.teamList, function(team) { 12748 return team.id === event.teamId; 12749 }); 12750 12751 switch (event.eventTypeId) { 12752 case 1: // Goal 12753 // Get scorer (Stat type = 6). 12754 // TODO Find a way to chained these finds functions. 12755 var scorer = _.find(event.statList, function(stat) { 12756 return stat.statTypeId === 6; 12757 }); 12758 12759 var goalScorer = null; 12760 if (scorer) { 12761 scorer = _.find(team.players, function (player) { 12762 return player.id === scorer.playerId; 12763 }); 12764 12765 goalScorer = { 12766 id: scorer.id, 12767 number: scorer.number, 12768 name: `${scorer.firstName} ${scorer.lastName}`, 12769 avatar: scorer.avatar, 12770 position: positionService.getPosition(scorer.position, 1), 12771 goals: scorer.stats && scorer.stats.length > 0 ? _.find(scorer.stats, function (stat) { return stat.statTypeId === 6; }).value : 0 12772 } 12773 } 12774 12775 // Get assists (Stat type = 7). 12776 var assists = _.filter(event.statList, function(stat) { 12777 return stat.statTypeId === 7; 12778 }); 12779 12780 newEvent = { 12781 qualifier: eventService.getEventById(event.qualifier), 12782 type: 'goal', 12783 time: event.time, 12784 team: { 12785 id: team.id, 12786 name: team.name, 12787 abbreviation: team.abbreviation, 12788 avatar: team.avatar, 12789 home: team.id === gameDetails.localTeamId ? true: false 12790 }, 12791 scorer: goalScorer, 12792 assists: [] 12793 }; 12794
12795 assists.forEach(function (assist) { 12796 var player = _.find(team.players, function(player) { 12797 return player.id === assist.playerId; 12798 }); 12799 12800 newEvent.assists.push({ 12801 id: player.id, 12802 number: player.number, 12803 name: `${player.firstName} ${player.lastName}`, 12804 avatar: player.avatar, 12805 position: positionService.getPosition(player.position, 1), 12806 assists: player.stats && player.stats.length > 0 ? _.find(player.stats, function(stat) { return stat.statTypeId === 7; }).value : 0 12807 }); 12808 }); 12809 break; 12810 12811 case 2: // Penalty 12812 var player = _.find(team.players, function(player) { 12813 return player.id === event.statList[0].playerId; 12814 }); 12815 12816 var penaltyPlayer = null; 12817 12818 if (player) { 12819 penaltyPlayer = { 12820 id: player.id, 12821 position: positionService.getPosition(player.position, 1), 12822 number: player.number, 12823 name: `${player.firstName} ${player.lastName}`, 12824 avatar: player.avatar 12825 } 12826 12827 } 12828 12829 newEvent = { 12830 qualifier: eventService.getPenaltyById(event.qualifier), 12831 secondQualifier: eventService.getPenaltyTypeById(event.secondQualifier), 12832 type: 'penalty', 12833 time: event.time, 12834 team: { 12835 id: team.id, 12836 name: team.name, 12837 abbreviation: team.abbreviation, 12838 avatar: team.avatar, 12839 home: team.id === gameDetails.localTeamId ? true: false 12840 }, 12841 player: penaltyPlayer 12842 } 12843 break; 12844 } 12845 12846 if (newEvent !== null) { 12847 vm.events.push(newEvent) 12848 } 12849 } 12850 }); 12851 12852 vm.events = _.orderBy(vm.events, ['time'], ['asc']); 12853 } 12854 } 12855})(); 12856; 12857(function () { 12858 'use strict'; 12859 12860 angular 12861 .module('app.directives') 12862 .directive('playByPlay', playByPlay) 12863 12864 playByPlay.$inject = []; 12865 12866 function playByPlay() { 12867 return { 12868 restrict: 'E', 12869 scope: { 12870 widget: '=', 12871 showPlayerStats: '=' 12872 }, 12873 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-details/play-by-play/play-by-play.tpl.html', 12874 controller: 'PlayByPlayWidgetController', 12875 controllerAs: 'playByPlay' 12876 }; 12877 } 12878})();; 12879(function () { 12880 'use strict'; 12881 12882 angular 12883 .module('app.directives') 12884 .controller('GameDetailsSummaryController', GameDetailsSummaryController); 12885 12886 GameDetailsSummaryController.$inject = ['$rootScope', '$scope', 'UrlService', 'PositionService', 'EventService', 'GameService']; 12887 12888 function GameDetailsSummaryController($rootScope, $scope, urlService, positionService, eventService, gameService) { 12889 var vm = this; 12890 var gameDetails = angular.fromJson(__gameDetails__ 12891 .replace(/[\n\r]+/g, ' ')); 12892 var seasonStatistics = []; 12893 vm.url = urlService; 12894 vm.event = eventService; 12895 12896 // TODO Get parameter of the widget.... 12897 var widgetDefinition = angular.fromJson(widgets[$scope.widget]); 12898 12899 // Get season statistics. 12900 gameService.getStatisticsReportByGameId(gameDetails.id) 12901 .then(function(response) { 12902 // Set season statistics. 12903 seasonStatistics = response.data; 12904 12905 // Build the game summary array. 12906 buildSummary(); 12907 12908 // Build the staff list. 12909 buildStaffList(); 12910 }) 12911 .catch(function(error) { 12912 // TODO Bugsnag... 12913 }); 12914 12915 function buildSummary() { 12916 var score = getInitialScore(); 12917 var period; 12918 vm.periods = [ 12919 { id: 1, goals: [], penalties: [] }, { id: 2, goals: [], penalties: [] }, { id: 3, goals: [], penalties: [] } 12920 ]; 12921 12922 // Sort the list by periodId. 12923 gameDetails.eventList = _.sortBy(gameDetails.eventList, 'periodId', 'time'); 12924 12925 _.forEach(gameDetails.eventList, function(event) { 12926 var team = _.find(gameDetails.teamList, function(team) { 12927 return team.id === event.teamId; 12928 }); 12929 12930 switch (event.eventTypeId) { 12931 case 1: // Goal 12932 // Goal, update the score. 12933 // TODO Probably a better way to do this... 12934 score = angular.fromJson(angular.toJson(score)); 12935 if (team.id === gameDetails.visitorTeamId) { 12936 score.visitor.value += 1; 12937 } else { 12938 score.home.value += 1; 12939 } 12940 12941 // Get scorer (Stat type = 6). 12942 // TODO Find a way to chained these finds functions. 12943 var scorer = _.find(event.statList, function(stat) { 12944 return stat.statTypeId === 6; 12945 }); 12946 12947 var goalScorer = null; 12948 12949 if (scorer) { 12950 scorer = _.find(team.players, function(player) { 12951 return player.id === scorer.playerId; 12952 }); 12953 12954 goalScorer = { 12955 id: scorer.id, 12956 number: scorer.number, 12957 name: `${scorer.firstName} ${scorer.lastName}`, 12958 avatar: scorer.avatar, 12959 position: positionService.getPosition(scorer.position, 1), 12960 goals: getCumulativeGoals(scorer) 12961 } 12962 } 12963 12964 // Get assists (Stat type = 7). 12965 var assists = _.filter(event.statList, function(stat) { 12966 return stat.statTypeId === 7; 12967 }); 12968 12969 var newGoal = { 12970 qualifier: eventService.getEventById(event.qualifier), 12971 time: event.time, 12972 team: { 12973 id: team.id, 12974 name: team.name, 12975 abbreviation: team.abbreviation, 12976 avatar: team.avatar, 12977 home: team.id === gameDetails.localTeamId ? true: false 12978 }, 12979 score: score, 12980 scorer: goalScorer, 12981 emptyNet: event.secondQualifier === 259, 12982 assists: [] 12983 }; 12984
12985 assists.forEach(function(assist) { 12986 var player = _.find(team.players, function(player) { 12987 return player.id === assist.playerId; 12988 }); 12989 12990 newGoal.assists.push({ 12991 id: player.id, 12992 number: player.number, 12993 name: `${player.firstName} ${player.lastName}`, 12994 avatar: player.avatar, 12995 position: positionService.getPosition(player.position, 1), 12996 assists: getCumulativeAssists(player) 12997 }); 12998 }); 12999 13000 period = _.find(vm.periods, function(period) { 13001 return period.id === event.periodId; 13002 }); 13003 13004 // Add the missing period and goal. 13005 if (angular.isUndefinedOrNull(period)) { 13006 vm.periods.push({ 13007 id: event.periodId, 13008 goals: [newGoal], 13009 penalties: [] 13010 }); 13011 } else { 13012 // Push the new goal into the current period. 13013 period.goals.push(newGoal); 13014 } 13015 break; 13016 13017 case 2: // Penalty 13018 var player = _.find(event.statList, function(stat) { 13019 return stat.statTypeId === 8; 13020 }); 13021 13022 var penaltyPlayer = null; 13023 13024 if (player) { 13025 // TODO Should support event without stats 13026 player = _.find(team.players, function (_player) { 13027 return _player.id === player.playerId; 13028 }); 13029 13030 penaltyPlayer = { 13031 id: player.id, 13032 number: player.number, 13033 name: `${player.firstName} ${player.lastName}`, 13034 avatar: player.avatar, 13035 position: positionService.getPosition(player.position, 1) 13036 } 13037 } 13038 13039 var newPenalty = { 13040 qualifier: eventService.getPenaltyById(event.qualifier), 13041 secondQualifier: eventService.getPenaltyTypeById(event.secondQualifier), 13042 time: event.time, 13043 team: { 13044 id: team.id, 13045 name: team.name, 13046 abbreviation: team.abbreviation, 13047 avatar: team.avatar, 13048 home: team.id === gameDetails.localTeamId ? true: false 13049 }, 13050 player: penaltyPlayer 13051 }; 13052 13053 period = _.find(vm.periods, function(period) { 13054 return period.id === event.periodId; 13055 }); 13056 13057 // Add the missing period and goal. 13058 if (angular.isUndefinedOrNull(period)) { 13059 vm.periods.push({ 13060 id: event.periodId, 13061 goals: [], 13062 penalties: [newPenalty] 13063 }); 13064 } else { 13065 // Push the new penalty into the current period. 13066 period.penalties.push(newPenalty); 13067 } 13068 13069 break; 13070
13071 case 6: // Shootout 13072 var shootoutEvent = _.find(event.statList, function (stat) { 13073 return stat.statTypeId === 12; 13074 }); 13075 13076 if (angular.isDefined(shootoutEvent)) { 13077 var shoutoutPlayer = _.find(team.players, function (_player) { 13078 return _player.id === shootoutEvent.playerId; 13079 }); 13080 13081 var home = team.id === gameDetails.localTeamId ? true : false; 13082 13083 var newShootout = { 13084 team: { 13085 id: team.id, 13086 name: team.name, 13087 abbreviation: team.abbreviation, 13088 avatar: team.avatar, 13089 home: home 13090 }, 13091 player: { 13092 id: shoutoutPlayer.id, 13093 number: shoutoutPlayer.number, 13094 name: `${shoutoutPlayer.firstName} ${shoutoutPlayer.lastName}`, 13095 avatar: shoutoutPlayer.avatar, 13096 position: positionService.getPosition(shoutoutPlayer.position, 1) 13097 }, 13098 goal: shootoutEvent.value === 1 13099 } 13100 13101 period = _.find(vm.periods, function (period) { 13102 return period.id === event.periodId; 13103 }); 13104 13105 // Add the missing shootout. 13106 if (angular.isUndefinedOrNull(period)) { 13107 vm.periods.push({ 13108 id: event.periodId, 13109 shootouts: [newShootout] 13110 }); 13111 } else { 13112 // Push the new shootout into the current period. 13113 period.shootouts.push(newShootout); 13114 } 13115 } 13116 13117 break; 13118 } 13119 }); 13120 } 13121 13122 function buildStaffList() { 13123 vm.staffList = []; 13124 13125 for(var staff in gameDetails.staffList) { 13126 var type = _.find(vm.staffList, function(currentStaff) { 13127 return currentStaff.type === gameDetails.staffList[staff].type 13128 }); 13129 13130 if (angular.isUndefinedOrNull(type)) { 13131 vm.staffList.push({ 13132 type: gameDetails.staffList[staff].type, 13133 name: positionService.getStaffPosition(gameDetails.staffList[staff].type), 13134 staff: [gameDetails.staffList[staff]] 13135 }); 13136 } else { 13137 type.staff.push(gameDetails.staffList[staff]) 13138 } 13139 } 13140 13141 } 13142 13143 function getInitialScore() { 13144 return { 13145 visitor: { 13146 abbreviation: _.find(gameDetails.teamList, function(team) { 13147 return team.id === gameDetails.visitorTeamId; 13148 }).abbreviation, 13149 value: 0 13150 }, 13151 home: { 13152 abbreviation: _.find(gameDetails.teamList, function(team) { 13153 return team.id === gameDetails.localTeamId; 13154 }).abbreviation, 13155 value: 0 13156 } 13157 }; 13158 } 13159 13160 function getCumulativeGoals(player) { 13161 var goals = 1; 13162 13163 _.forEach(vm.periods, function(period) { 13164 _.forEach(period.goals, function(goal) { 13165 if (goal.scorer && goal.scorer.id === player.id) { 13166 goals += 1; 13167 } 13168 }); 13169 }); 13170 13171 // Get current season goals total. 13172 var seasonStatistic = getSeasonStatistic(player, 6); 13173 13174 return goals + (angular.isDefined(seasonStatistic) ? seasonStatistic.Value : 0); 13175 } 13176 13177 function getCumulativeAssists(player) { 13178 var assists = 1; 13179 13180 _.forEach(vm.periods, function(period) { 13181 _.forEach(period.goals, function(goal) { 13182 _.forEach(goal.assists, function(assits) { 13183 if (assits.id === player.id) { 13184 assists += 1; 13185 } 13186 })
13187 }); 13188 }); 13189 13190 // Get current season goals total. 13191 var seasonStatistic = getSeasonStatistic(player, 7); 13192 13193 return assists + (angular.isDefined(seasonStatistic) ? seasonStatistic.Value : 0); 13194 } 13195 13196 function getSeasonStatistic(player, statisticId) { 13197 return _.find(seasonStatistics, function(seasonStatistic) { 13198 return (player.id === seasonStatistic.PlayerId && seasonStatistic.StatTypeId === statisticId) 13199 }); 13200 } 13201 } 13202})(); 13203; 13204(function () { 13205 'use strict'; 13206 13207 angular 13208 .module('app.directives') 13209 .directive('gameDetailsSummary', gameDetailsSummary) 13210 13211 gameDetailsSummary.$inject = []; 13212 13213 function gameDetailsSummary() { 13214 return { 13215 restrict: 'E', 13216 scope: { 13217 widget: '=', 13218 showPlayerStats: '=' 13219 }, 13220 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-details/summary/game-details-summary.tpl.html', 13221 controller: 'GameDetailsSummaryController', 13222 controllerAs: 'summary' 13223 }; 13224 } 13225})();; 13226(function () { 13227 'use strict'; 13228 13229 angular 13230 .module('app.directives') 13231 .controller('GameDetailsStatisticsController', GameDetailsStatisticsController); 13232 13233 GameDetailsStatisticsController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'PositionService', 'StatisticService', 'PlayerService']; 13234 13235 function GameDetailsStatisticsController($rootScope, $scope, $localStorage, urlService, positionService, statisticService, playerService) { 13236 var vm = this; 13237 var statsSportConfig = { 13238 1: { 13239 2: { 13240 order: 1, 13241 stats: [6, 7, 29, 8, 26, 27], 13242 sort: [29, 'desc'] 13243 }, 13244 1: { 13245 order: 2, 13246 stats: [23, 10, 22, 30, 24, 32, 8], 13247 sort: [22, 'desc'] 13248 } 13249 }, 13250 2: { 13251 9: { 13252 order: 1, 13253 stats: [66, 67, 68, 69, 70, 71, 72, 73, 77, 75, 78, 79, 80, 81, 82, 83, 86, 85], 13254 sort: [80, 'desc'] 13255 }, 13256 8: { 13257 order: 2, 13258 stats: [99, 100, 101, 91, 102, 93, 90, 96, 97, 98], 13259 sort: [100, 'desc'] 13260 }, 13261 }, 13262 4: { 13263 10: { 13264 order: 1, 13265 stats: [128, 131, 133, 136, 139, 142, 146, 157, 149, 150, 151, 156], 13266 sort: [128, 'desc'] 13267 }, 13268 }, 13269 6: { 13270 3: { 13271 order: 1, 13272 stats: [36, 37, 38, 39, 40, 41, 43, 44], 13273 sort: [37, 'desc'] 13274 }, 13275 4: { 13276 order: 2, 13277 stats: [46, 47, 48, 49, 50, 64], 13278 sort: [46, 'desc'] 13279 }, 13280 }, 13281 14: { 13282 16: { 13283 order: 1, 13284 stats: [53, 54, 55, 60, 57, 56, 58, 59], 13285 sort: [60, 'desc'] 13286 }, 13287 17: { 13288 order: 2, 13289 stats: [53, 54, 55, 60, 57, 56, 58, 59], 13290 sort: [60, 'desc'] 13291 } 13292 } 13293 } 13294 13295 //State variables 13296 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 13297 vm.url = urlService; 13298 vm.position = positionService; 13299 vm.sportId = $localStorage.solution.sportId; 13300 vm.playerCategories = {}; 13301 13302 var sportPlayerCategories = statsSportConfig[vm.sportId]; 13303 13304 //State functions 13305 vm.sort = function (playerCategory, column) { 13306 // Reset columns sort. 13307 _.forEach(playerCategory.columns, function (_column) { 13308 if (_column.id !== column.id) { 13309 _column.sort = ''; 13310 } 13311 }); 13312 13313 if (angular.isUndefined(column.sort)) { 13314 column.sort = 'desc'; 13315 } else { 13316 // Toggle sort order. 13317 column.sort = column.sort === 'desc' 13318 ? column.sort = 'asc' 13319 : column.sort = 'desc'; 13320 } 13321 13322 var players = _.filter(playerCategory.players, function (player) { 13323 return player.status === "Selected" || player.stats.length > 0;
13324 }); 13325 13326 if (players.length > 0) { 13327 // Get index of sorted column 13328 var index = _.findIndex(players[0].stats, function (statistic) { 13329 return statistic.statTypeId === _.find(playerCategory.columns, function (column) { return column.sort; }).id; 13330 }); 13331 13332 playerCategory.players = _.orderBy(players, function (player) { 13333 if (player.stats != null && player.stats[index] != null) { 13334 return player.stats[index].value; 13335 } else { 13336 return 0; 13337 } 13338 }, [column.sort]); 13339 } 13340 }; 13341 13342 vm.showStat = function (column) { 13343 if (vm.isMobile && column.visibleMobile) { 13344 return true; 13345 } else if (!vm.isMobile && column.visibleDesktop) { 13346 return true; 13347 } 13348 return false; 13349 } 13350 13351 vm.getBirthday = function (birthday) { 13352 return birthday !== null ? moment(birthday).format($translate.instant('directives.widgets.team.details.lineup.format.birthday')) : ''; 13353 } 13354 13355 vm.getStatisticValue = function (player, statisticId) { 13356 if (_.startsWith(statisticId, 'player')) { 13357 var playerParamId = _.parseInt(statisticId.match(/^player(\d+)$/)[1]); 13358 switch (playerParamId) { 13359 case 1: 13360 return { value: player.number, class: 'text-center', sortValue: _.parseInt(player.number) }; 13361 case 2: 13362 return { value: player.name, class: 'text-nowrap sticky-col', sortValue: _.kebabCase(player.name), url: vm.url.getPlayerUrl(player.name, player.id) }; 13363 case 3: 13364 return { value: positionService.getPosition(player.position, 'abbreviation'), class: 'text-center' }; 13365 case 4: 13366 return { value: player.teamName, class: 'text-nowrap', sortValue: _.kebabCase(player.teamName), url: vm.url.getTeamUrl(player.teamName, vm.id) }; 13367 case 5: 13368 return { value: playerService.getAge(player.birthday), class: 'text-center' }; 13369 case 6: 13370 return { value: player.height, class: 'text-center' }; 13371 case 7: 13372 return { value: player.weight, class: 'text-center' }; 13373 case 8: 13374 case 13: 13375 case 14: 13376 return { value: player.level, sortValue: _.kebabCase(player.level), class: 'text-center' }; 13377 case 9: 13378 return { value: vm.getBirthday(player.birthday), class: 'text-center' }; 13379 case 10: 13380 return { value: $translate.instant(playerService.getStatus(player.LineupStatus)), class: 'text-center' }; 13381 case 11: 13382 return { value: $translate.instant(playerService.getPlayerType(player.PlayerStatus)), sortValue: _.kebabCase(player.Type), class: 'text-center' } 13383 } 13384 13385 return { value: '', class: 'text-center' }; 13386 } 13387 else { 13388 if (player.stats.length > 0) { 13389 var playerStat = _.find(player.stats, function (statistic) { 13390 return statistic.statTypeId === statisticId; 13391 }); 13392 13393 if (playerStat) { 13394 return { value: playerStat.displayValue, class: 'text-center', sortValue: playerStat.value }; 13395 } 13396 } 13397 13398 return { value: '0', class: 'text-center' }; 13399 } 13400 }; 13401 13402 //Component mount 13403 // Sort team list (visitor first) 13404 vm.teamList.sort(function (a, b) { 13405 if (a.id === vm.visitorTeamId) { 13406 return -1; 13407 } else { 13408 return 1; 13409 } 13410 }); 13411 13412 setTeams(); 13413 13414 $scope.$watch('localFirst', function () { 13415 setTeams(); 13416 }) 13417 13418 buildTeams(); 13419 13420 //Functions 13421 function setTeams() { 13422 console.log('TEAMS') 13423 if ($scope.localFirst) { 13424 vm.teams = [vm.teamList[1], vm.teamList[0]]; 13425 } else { 13426 vm.teams = [vm.teamList[0], vm.teamList[1]]; 13427 } 13428 } 13429 13430 function buildTeams() { 13431 13432 _.forEach(vm.teams, function (team) { 13433 var teamCategories = { 13434 categories: [] 13435 }; 13436 13437 _.forEach(sportPlayerCategories, function (value, key) { 13438 13439 var categoryColumns = $scope.statsColumns[key].map(function (col) { 13440 if (_.startsWith(col.id, 'player')) { 13441 var stat = playerService.getPlayerColumn(_.parseInt(col.id.match(/^player(\d+)$/)[1])); 13442 } 13443 else { 13444 var stat = statisticService.getPlayerStatisticByStatId(col.id); 13445 } 13446 13447 return { 13448 id: col.id, 13449 visibleDesktop: col.visibleDesktop, 13450 visibleMobile: col.visibleMobile, 13451 stat: (stat || {}), 13452 } 13453 }); 13454 13455 var category = { 13456 id: _.parseInt(key), 13457 columns: categoryColumns, 13458 players: [], 13459 order: value.order 13460 }; 13461 13462 _.find(category.columns, function (column) { 13463 return column.id === value.sort[0]; 13464 }).sort = value.sort[1]; 13465 teamCategories.categories.push(category); 13466 }); 13467 13468 vm.playerCategories[team.id] = teamCategories; 13469 }) 13470 13471 _.forEach(vm.teams, function (team) { 13472 _.forEach(team.playersCategories, function (playerCategory) { 13473 var players = _.filter(playerCategory.players, function (player) { 13474 return player.status === 'Selected' || player.stats.length > 0;
13475 }); 13476 13477 if (players.length > 0) { 13478 // TODO Get index of sorted column 13479 var category = _.find(vm.playerCategories[team.id].categories, { id: playerCategory.id }); 13480 13481 if (category) { 13482 var index = _.findIndex(players[0].stats, function (statistic) { 13483 return statistic.statTypeId === _.find(category.columns, function (column) { return column.sort; }).id; 13484 }); 13485 13486 category.players = _.orderBy(players, function (player) { 13487 if (player.stats != null && player.stats[index] != null) { 13488 return player.stats[index].value; 13489 } else { 13490 return 0; 13491 } 13492 }, ['desc']); 13493 } 13494 } 13495 }); 13496 }); 13497 } 13498 } 13499})(); 13500; 13501(function () { 13502 'use strict'; 13503 13504 angular 13505 .module('app.directives') 13506 .directive('gameDetailsStatistics', gameDetailsStatistics) 13507 13508 gameDetailsStatistics.$inject = []; 13509 13510 function gameDetailsStatistics() { 13511 return { 13512 restrict: 'E', 13513 scope: { 13514 widget: '=', 13515 localFirst: '=', 13516 statsColumns: '=', 13517 }, 13518 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-details/statistics/game-details-statistics.tpl.html', 13519 controller: 'GameDetailsStatisticsController', 13520 controllerAs: 'statistics' 13521 }; 13522 } 13523})();; 13524(function () { 13525 'use strict'; 13526 13527 angular 13528 .module('app.directives') 13529 .controller('GameDetailsStatisticsBaseballController', GameDetailsStatisticsBaseballController); 13530 13531 GameDetailsStatisticsBaseballController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'ScoreboardBaseballService', 'StatisticService']; 13532 13533 function GameDetailsStatisticsBaseballController($rootScope, $scope, $localStorage, urlService, scoreboardBaseballService, statisticService) { 13534 var vm = this; 13535 13536 var statsSportConfig = { 13537 2: { 13538 //9: { 13539 // order: 1, 13540 // stats: [67, 80, 69, 71, 77, 75, 72, 79], 13541 // sort: ['row', 'asc'], 13542 // showPosRow: true 13543 //}, 13544 8: { 13545 order: 2, 13546 stats: [99, 95, 116, 93, 92, 91, 96, 97, 98], 13547 sort: [100, 'desc'], 13548 showPosRow: false 13549 }, 13550 } 13551 } 13552 13553 //State variables 13554 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 13555 vm.url = urlService; 13556 vm.sportId = $localStorage.solution.sportId; 13557 vm.playerCategories = {}; 13558 13559 var sportPlayerCategories = statsSportConfig[vm.sportId]; 13560 13561 //State functions 13562 vm.sort = function (playerCategory, columnId, defaultSort) { 13563 // Reset columns sort. 13564 13565 var columnSort = defaultSort || 'desc'; 13566 if (columnId == playerCategory.sort.id) { 13567 // Toggle sort order. 13568 columnSort = playerCategory.sort.sort === 'desc' 13569 ? 'asc' 13570 : 'desc'; 13571 } 13572 13573 var players = _.filter(playerCategory.players, function (player) { 13574 return player.status === "Selected" || player.stats.length > 0; 13575 }); 13576 13577 if (players.length > 0) { 13578 // Get index of sorted column 13579 if (columnId != 'row') { 13580 var index = _.findIndex(players[0].stats, function (statistic) { 13581 return statistic.statTypeId === columnId; 13582 }); 13583 13584 playerCategory.players = _.orderBy(players, function (player) { 13585 if (player.stats != null && player.stats[index] != null) { 13586 return player.stats[index].value; 13587 } else { 13588 return 0; 13589 } 13590 }, [columnSort]); 13591 13592 playerCategory.sort = { id: columnId, sort: columnSort }; 13593 } 13594 else { 13595 playerCategory.players = _.orderBy(players, function (player) { 13596 return vm.getRow(player); 13597 }, [columnSort]); 13598 13599 playerCategory.sort = { id: 'row', sort: columnSort }; 13600 } 13601 } 13602 }; 13603 13604 vm.getStatisticValue = function (player, statisticId) { 13605 if (player.stats.length > 0) { 13606 13607 var playerStat = _.find(player.stats, function (statistic) { 13608 return statistic.statTypeId === statisticId; 13609 }); 13610 13611 if (playerStat) { 13612 return playerStat.displayValue; 13613 } 13614 } 13615 13616 return '0'; 13617 }; 13618 13619 vm.getRow = function (player) { 13620 return _.get(_.find(player.properties, { name: 'row' }), 'value'); 13621 } 13622 13623 vm.getPosition = function (position) { 13624 return _.get(_.find(scoreboardBaseballService.getDefensePositions(), { id: position }), 'abbreviation'); 13625 } 13626 13627 //Component mount 13628 // Sort team list (visitor first) 13629 vm.teamList.sort(function (a, b) { 13630 if (a.id === vm.visitorTeamId) { 13631 return -1; 13632 } else { 13633 return 1; 13634 } 13635 }); 13636 13637 setTeams(); 13638 13639 $scope.$watch('localFirst', function () { 13640 setTeams(); 13641 }) 13642 13643 buildTeams(); 13644 13645 //Functions 13646 function setTeams() { 13647 if ($scope.localFirst) { 13648 vm.teams = [vm.teamList[1], vm.teamList[0]]; 13649 } else { 13650 vm.teams = [vm.teamList[0], vm.teamList[1]]; 13651 } 13652 } 13653 13654 function buildTeams() { 13655 13656 _.forEach(vm.teams, function (team) { 13657 var teamCategories = { 13658 categories: [] 13659 }; 13660 13661 _.forEach(sportPlayerCategories, function (value, key) { 13662 var category = { 13663 id: _.parseInt(key), 13664 columns: statisticService.getPlayerStatisticColumnsByColumnIds(value.stats), 13665 showPosRow: value.showPosRow, 13666 players: [], 13667 order: value.order, 13668 sort: { id: value.sort[0], sort: value.sort[1] } 13669 }; 13670 13671 teamCategories.categories.push(category); 13672 }); 13673 13674 vm.playerCategories[team.id] = teamCategories; 13675 13676 }) 13677 13678 _.forEach(vm.teams, function (team) { 13679 _.forEach(team.playersCategories, function (playerCategory) { 13680 var players = _.filter(playerCategory.players, function (player) { 13681 return player.status === "Selected" || player.stats.length > 0;
13682 }); 13683 13684 if (players.length > 0) { 13685 // TODO Get index of sorted column 13686 var category = _.find(vm.playerCategories[team.id].categories, { id: playerCategory.id }); 13687 13688 if (category) { 13689 if (category.sort.id == 'row') { 13690 category.players = _.orderBy(players, function (player) { 13691 return vm.getRow(player); 13692 }, [category.sort.sort]); 13693 } 13694 else { 13695 var index = _.findIndex(players[0].stats, function (statistic) { 13696 return statistic.statTypeId === category.sort.id; 13697 }); 13698 13699 category.players = _.orderBy(players, function (player) { 13700 if (player.stats != null && player.stats[index] != null) { 13701 return player.stats[index].value; 13702 } else { 13703 return 0; 13704 } 13705 }, [category.sort.sort]) 13706 } 13707 13708 var teamSummaryStats = _.find(team.players, { id: 0, categoryId: playerCategory.id }) 13709 if (teamSummaryStats) { 13710 category.teamSummary = teamSummaryStats; 13711 } 13712 } 13713 13714 } 13715 }); 13716 }); 13717 } 13718 } 13719})(); 13720; 13721(function () { 13722 'use strict'; 13723 13724 angular 13725 .module('app.directives') 13726 .directive('gameDetailsStatisticsBaseball', gameDetailsStatisticsBaseball) 13727 13728 gameDetailsStatisticsBaseball.$inject = []; 13729 13730 function gameDetailsStatisticsBaseball() { 13731 return { 13732 restrict: 'E', 13733 scope: { 13734 widget: '=', 13735 localFirst: '=' 13736 }, 13737 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-details/statistics/baseball/game-details-statistics.tpl.html', 13738 controller: 'GameDetailsStatisticsBaseballController', 13739 controllerAs: 'statistics' 13740 }; 13741 } 13742})();; 13743(function () { 13744 'use strict'; 13745 13746 angular 13747 .module('app.directives') 13748 .controller('GameDetailsWidgetController', GameDetailsWidgetController); 13749 13750 GameDetailsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'PlayerService', 'PositionService', 'SeasonService', 'WebsiteEditorService', 'GoogleMapService', 'FacilityService']; 13751 13752 function GameDetailsWidgetController($rootScope, $scope, $localStorage, urlService, playerService, positionService, seasonService, websiteEditorService, googleMapService, facilityService) { 13753 var vm = this; 13754 13755 //State variables 13756 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 13757 vm.widget = angular.fromJson(widgets[$scope.widget]); 13758 vm.showPlayerStats = false; 13759 vm.url = urlService; 13760 vm.player = playerService; 13761 vm.position = positionService; 13762 vm.sportId = $localStorage.solution.sportId; 13763 vm.localFirst = false; 13764 13765 vm.messageTypes = { 13766 1: { class: 'important-note' }, 13767 2: { class: 'warning-note' }, 13768 3: { class: 'message-note' }, 13769 4: { class: 'note-note' } 13770 } 13771 13772 //State functions 13773 vm.getTimeFormatted = function(time) { 13774 return moment(time, 'hh:mm').format('LT'); 13775 }; 13776 13777 vm.clickFacility = function () { 13778 var url = googleMapService.getMapSearchUrl(vm.facility[0].facilityAddress); 13779 window.open(url, "_blank"); 13780 } 13781 13782 facilityService.getFacilitiesDetailsWithUpdateDate(__solutionId__) 13783 .then(function (response) { 13784 vm.facility = _.filter(response.data.facilities, function (facility) { 13785 return facility.name === vm.sportCenterName 13786 }) 13787 }) 13788 .catch(function (error) { 13789 bugsnag.notify(error); 13790 }); 13791 13792 //On component mount
13793 for (var parameter in vm.widget.parameters) { 13794 switch (vm.widget.parameters[parameter].id) { 13795 case 'localFirst': 13796 vm.localFirst = vm.widget.parameters[parameter].value === 'true'; 13797 break; 13798 case 'columnsDisplayStatisticsSelect': 13799 vm.columnsStatisticsTab = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 13800 break; 13801 case 'columnsDisplayLineupSelect': 13802 vm.columnsLineupTab = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 13803 break; 13804 } 13805 } 13806 13807 // Listener 13808 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 13809 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 13810 .then(function (response) { 13811 for (var parameter in vm.widget.parameters) { 13812 switch (vm.widget.parameters[parameter].id) { 13813 case 'localFirst': 13814 vm.widget.parameters[parameter].value = data.localFirst.toString(); 13815 vm.localFirst = data.localFirst; 13816 break; 13817 13818 case 'columnsDisplayStatisticsSelect': 13819 vm.widget.parameters[parameter].value = data.columnsDisplayStatisticsSelect; 13820 vm.columnsStatisticsTab = angular.fromJson(data.columnsDisplayStatisticsSelect.replace(/\'/g, '"')); 13821 break; 13822 13823 case 'columnsDisplayLineupSelect': 13824 vm.widget.parameters[parameter].value = data.columnsDisplayLineupSelect; 13825 vm.columnsLineupTab = angular.fromJson(data.columnsDisplayLineupSelect.replace(/\'/g, '"')); 13826 break; 13827 } 13828 } 13829 widgets[$scope.widget] = angular.toJson(vm.widget); 13830 }) 13831 .catch(function (error) { 13832 bugsnag.notify(error); 13833 }); 13834 }); 13835 13836 $scope.$on('$destroy', listener); 13837 13838 seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId) 13839 .then(function(response) { 13840 const configShowPlayerStats = response.data.find(function(config){ 13841 return config.Code === 'SHOWPLAYERSTATS'; 13842 }) 13843 vm.showPlayerStats = configShowPlayerStats && configShowPlayerStats.Value !== '0'; 13844 }) 13845 .catch(function(error) { 13846 bugsnag.notify(error); 13847 }); 13848 } 13849})(); 13850; 13851(function () { 13852 'use strict'; 13853 13854 angular 13855 .module('app.directives') 13856 .directive('gameDetails', gameDetails) 13857 13858 gameDetails.$inject = []; 13859 13860 function gameDetails() { 13861 return { 13862 restrict: 'E', 13863 scope: { 13864 widget: '=' 13865 }, 13866 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-details/game-details.tpl.html', 13867 controller: 'GameDetailsWidgetController', 13868 controllerAs: 'gameDetails' 13869 }; 13870 } 13871})();; 13872(function () { 13873 'use strict'; 13874 13875 angular 13876 .module('app.directives') 13877 .controller('GameHittersStatsWidgetController', GameHittersStatsWidgetController); 13878 13879 GameHittersStatsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$translate', '$window', 'UrlService', 'PlayerService', 'PositionService', 'SeasonService', 'StatisticService', 'ScoreboardBaseballService', 'WebsiteEditorService', 'GoogleMapService', 'FacilityService', 'SignalrService']; 13880 13881 function GameHittersStatsWidgetController($rootScope, $scope, $localStorage, $translate, $window, urlService, playerService, positionService, seasonService, statisticService, scoreboardBaseballService, websiteEditorService, googleMapService, facilityService, signalrService) { 13882 var vm = this; 13883 13884 //State variables 13885 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 13886 vm.widget = angular.fromJson(widgets[$scope.widget]); 13887 vm.showPlayerStats = false; 13888 vm.url = urlService; 13889 vm.player = playerService; 13890 vm.position = positionService; 13891 vm.sportId = $localStorage.solution.sportId; 13892 vm.columnsDisplaySelect = []; 13893 vm.columns = []; 13894 vm.teamSummary = {}; 13895 13896 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.id)); 13897 13898 signalrConnection.on(signalrService.EVENTS.BaseballStatsUpdate, function (response) { 13899 var gameUpdated = angular.fromJson(response.replace(/[\n\r]+/g, ' ')); 13900 13901 if (gameUpdated.id == vm.id) { 13902 vm = Object.assign(vm, gameUpdated); 13903 buildColumns(vm.columnsDisplaySelect); 13904 $scope.$apply(); 13905 } 13906 }); 13907 13908 //State functions 13909 vm.getStatisticValue = function (player, statisticId) { 13910 if (player && player.stats && player.stats.length > 0) { 13911 13912 var playerStat = _.find(player.stats, function (statistic) { 13913 return statistic.statTypeId === statisticId; 13914 }); 13915 13916 if (playerStat) { 13917 return playerStat.displayValue; 13918 } 13919 } 13920 13921 return '0'; 13922 }; 13923 13924 vm.getRow = function (player) { 13925 return _.get(_.find(player.properties, { name: 'row' }), 'value'); 13926 } 13927 13928 var defensePositions = scoreboardBaseballService.getDefensePositions(); 13929 vm.getPosition = function (position, positions) { 13930 if (!positions) 13931 return ''; 13932 13933 var translatedPositions = []; 13934
13935 (positions || []).forEach(function (position) { 13936 if (position != 0) { 13937 translatedPositions.push($translate.instant(_.get(_.find(defensePositions, { id: position }), 'abbreviation'))); 13938 } 13939 }) 13940 13941 return translatedPositions.join(", "); 13942 } 13943 13944 vm.showStat = function (column) { 13945 if (isMobile() && column.visibleMobile) { 13946 return true; 13947 } else if (!isMobile() && column.visibleDesktop) { 13948 return true; 13949 } 13950 return false; 13951 } 13952 13953 vm.getStyle = function () { 13954 var style = {}; 13955 if (!vm.widgetTransparency) { 13956 style['background-color'] = vm.backgroundColor; 13957 style['background-size'] = 'cover'; 13958 style['background-position'] = 'center'; 13959 style['border-color'] = vm.border.color; 13960 } 13961 13962 style['border-width'] = `${vm.border.width}px`; 13963 style['border-color'] = vm.border.color; 13964 style['border-radius'] = `${vm.border.radius}px`; 13965 return style; 13966 } 13967 13968 //On component mount 13969 for (var parameter in vm.widget.parameters) { 13970 switch (vm.widget.parameters[parameter].id) { 13971 case 'selectedTeam': 13972 vm.selectedTeam = vm.widget.parameters[parameter].value; 13973 break; 13974 13975 case 'columnsDisplaySelect': 13976 vm.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 13977 break; 13978 13979 case 'widgetTransparency': 13980 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 13981 break; 13982 13983 case 'backgroundColor': 13984 vm.backgroundColor = vm.widget.parameters[parameter].value; 13985 break; 13986 13987 case 'border': 13988 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 13989 break; 13990 } 13991 } 13992 13993 buildColumns(vm.columnsDisplaySelect); 13994 13995 // Listener 13996 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 13997 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 13998 .then(function (response) { 13999 for (var parameter in vm.widget.parameters) { 14000 switch (vm.widget.parameters[parameter].id) { 14001 case 'selectedTeam': 14002 vm.widget.parameters[parameter].value = data.selectedTeam.toString(); 14003 vm.selectedTeam = data.selectedTeam; 14004 break 14005 14006 case 'columnsDisplaySelect': 14007 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 14008 vm.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 14009 break; 14010 14011 case 'widgetTransparency': 14012 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 14013 vm.widgetTransparency = data.widgetTransparency; 14014 break; 14015 14016 case 'backgroundColor': 14017 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 14018 vm.backgroundColor = data.backgroundColor; 14019 break; 14020 14021 case 'border': 14022 vm.widget.parameters[parameter].value = data.border; 14023 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 14024 break; 14025 } 14026 } 14027 widgets[$scope.widget] = angular.toJson(vm.widget); 14028 buildColumns(vm.columnsDisplaySelect); 14029 }) 14030 .catch(function (error) { 14031 bugsnag.notify(error); 14032 }); 14033 }); 14034 14035 $scope.$on('$destroy', listener); 14036 14037 seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId) 14038 .then(function(response) { 14039 const configShowPlayerStats = response.data.find(function(config){ 14040 return config.Code === 'SHOWPLAYERSTATS'; 14041 }) 14042 vm.showPlayerStats = configShowPlayerStats && configShowPlayerStats.Value !== '0'; 14043 }) 14044 .catch(function(error) { 14045 bugsnag.notify(error); 14046 }); 14047 14048 function buildColumns(columnsToDisplay) { 14049 vm.columns = []; 14050 columnsToDisplay.forEach(function (col) { 14051 var stat = statisticService.getPlayerStatisticByStatId(col.id); 14052 if (stat) { 14053 vm.columns.push({ 14054 id: col.id, 14055 visibleDesktop: col.visibleDesktop, 14056 visibleMobile: col.visibleMobile, 14057 name: stat.name, 14058 abbreviation: stat.abbreviation 14059 }) 14060 } 14061 }); 14062 14063 switch (vm.selectedTeam) { 14064 case 'localTeam': 14065 vm.teamId = vm.localTeamId; 14066 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14067 break; 14068 case 'visitorTeam': 14069 vm.teamId = vm.visitorTeamId; 14070 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14071 break; 14072 } 14073 vm.teamId = vm[`${vm.selectedTeam}Id`]; 14074 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14075 var players = [] 14076 14077 var categories = _.filter(_.orderBy(vm.team.playersCategories, 'id'), function (category) { 14078 return (category.id == 9 || category.id == 21); 14079 }); 14080 14081 _.forEach(categories, function (category) { 14082 _.forEach(category.players, function (player) { 14083 14084 var historyPosition = _.get(_.find(player.properties, { name: 'historyposition' }), 'value'); 14085 14086 if (historyPosition) { 14087 var positions = JSON.parse(historyPosition); 14088 14089 player.positions = positions || []; 14090 } 14091 else if (player.positionId) { 14092 player.positions = [player.positionId] 14093 } 14094 14095 var hidePlayer = false; 14096 var hasDesignatedHitter = _.findIndex(category.players, { positionId: 10 }) != -1; 14097 14098 if ((player.positionId == 1 && hasDesignatedHitter) || player.positions && player.positions.length == 2 && player.positions[0] == 1 && player.positions[1] == 0) { 14099 14100 hidePlayer = (_.get(_.find(player.stats, { statTypeId: 66 }), 'value') || 0) == 0 14101 } 14102 14103 if (!hidePlayer) { 14104 if (category.id == 9) { 14105 players.push(player); 14106 } 14107 else if (!_.find(players, (item) => item.id === player.id)) { 14108 players.push(player); 14109 } 14110 } 14111 }) 14112 }) 14113 14114 players = _.orderBy(players, function (player) { 14115 return _.parseInt(vm.getRow(player));
14116 }, ['ASC']); 14117 14118 var currentRow = -1; 14119 players.forEach(function (player) { 14120 var row = vm.getRow(player); 14121 if (row == currentRow) { 14122 player.isSubstitute = true; 14123 } 14124 14125 currentRow = row; 14126 }) 14127 14128 vm.players = players; 14129 14130 var teamSummaryStats = _.find(vm.team.players, { id: 0, categoryId: 9 }) 14131 if (teamSummaryStats) { 14132 vm.teamSummary = teamSummaryStats; 14133 } 14134 } 14135 14136 function isMobile() { 14137 return $window.innerWidth <= 600; 14138 } 14139 } 14140})(); 14141; 14142(function () { 14143 'use strict'; 14144 14145 angular 14146 .module('app.directives') 14147 .directive('gameHittersStats', gameHittersStats) 14148 14149 gameHittersStats.$inject = []; 14150 14151 function gameHittersStats() { 14152 return { 14153 restrict: 'E', 14154 scope: { 14155 widget: '=' 14156 }, 14157 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-hitters-stats/game-hitters-stats.tpl.html', 14158 controller: 'GameHittersStatsWidgetController', 14159 controllerAs: 'gameHittersStats' 14160 }; 14161 } 14162})();; 14163(function () { 14164 'use strict'; 14165 14166 angular 14167 .module('app.directives') 14168 .controller('GamePitchersStatsWidgetController', GamePitchersStatsWidgetController); 14169 14170 GamePitchersStatsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$window', 'UrlService', 'PlayerService', 'PositionService', 'SeasonService', 'StatisticService', 'ScoreboardBaseballService', 'WebsiteEditorService', 'GoogleMapService', 'FacilityService', 'SignalrService']; 14171 14172 function GamePitchersStatsWidgetController($rootScope, $scope, $localStorage, $window, urlService, playerService, positionService, seasonService, statisticService, scoreboardBaseballService, websiteEditorService, googleMapService, facilityService, signalrService) { 14173 var vm = this; 14174 14175 //State variables 14176 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 14177 vm.widget = angular.fromJson(widgets[$scope.widget]); 14178 vm.showPlayerStats = false; 14179 vm.url = urlService; 14180 vm.player = playerService; 14181 vm.position = positionService; 14182 vm.sportId = $localStorage.solution.sportId; 14183 vm.columnsDisplaySelect = []; 14184 vm.columns = []; 14185 vm.teamSummary = {}; 14186 14187 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.id)); 14188 14189 signalrConnection.on(signalrService.EVENTS.BaseballStatsUpdate, function (response) { 14190 var gameUpdated = angular.fromJson(response.replace(/[\n\r]+/g, ' ')); 14191 14192 if (gameUpdated.id == vm.id) { 14193 vm = Object.assign(vm, angular.fromJson(response.replace(/[\n\r]+/g, ' '))); 14194 buildColumns(vm.columnsDisplaySelect); 14195 $scope.$apply(); 14196 } 14197 }); 14198 14199 14200 //State functions 14201 14202 vm.getStatisticValue = function (player, statisticId) { 14203 if (player && player.stats && player.stats.length > 0) { 14204 14205 var playerStat = _.find(player.stats, function (statistic) { 14206 return statistic.statTypeId === statisticId; 14207 }); 14208 14209 if (playerStat) { 14210 return playerStat.displayValue; 14211 } 14212 } 14213 14214 return '0'; 14215 }; 14216 14217 vm.getPosition = function (position) { 14218 return _.get(_.find(scoreboardBaseballService.getDefensePositions(), { id: position }), 'abbreviation'); 14219 } 14220 14221 vm.showStat = function (column) { 14222 if (isMobile() && column.visibleMobile) { 14223 return true; 14224 } else if (!isMobile() && column.visibleDesktop) { 14225 return true; 14226 } 14227 return false; 14228 } 14229 14230 vm.getStyle = function () { 14231 var style = {}; 14232 if (!vm.widgetTransparency) { 14233 style['background-color'] = vm.backgroundColor; 14234 style['background-size'] = 'cover'; 14235 style['background-position'] = 'center'; 14236 style['border-color'] = vm.border.color; 14237 } 14238 14239 style['border-width'] = `${vm.border.width}px`; 14240 style['border-color'] = vm.border.color;
14241 style['border-radius'] = `${vm.border.radius}px`; 14242 return style; 14243 } 14244 14245 //On component mount 14246 for (var parameter in vm.widget.parameters) { 14247 switch (vm.widget.parameters[parameter].id) { 14248 case 'selectedTeam': 14249 vm.selectedTeam = vm.widget.parameters[parameter].value; 14250 break; 14251 14252 case 'columnsDisplaySelect': 14253 vm.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 14254 break; 14255 14256 case 'widgetTransparency': 14257 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 14258 break; 14259 14260 case 'backgroundColor': 14261 vm.backgroundColor = vm.widget.parameters[parameter].value; 14262 break; 14263 14264 case 'border': 14265 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 14266 break; 14267 } 14268 } 14269 14270 buildColumns(vm.columnsDisplaySelect); 14271 14272 // Listener 14273 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 14274 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 14275 .then(function (response) { 14276 for (var parameter in vm.widget.parameters) { 14277 switch (vm.widget.parameters[parameter].id) { 14278 case 'selectedTeam': 14279 vm.widget.parameters[parameter].value = data.selectedTeam.toString(); 14280 vm.selectedTeam = data.selectedTeam; 14281 break 14282 14283 case 'columnsDisplaySelect': 14284 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 14285 vm.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 14286 break; 14287 14288 case 'widgetTransparency': 14289 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 14290 vm.widgetTransparency = data.widgetTransparency; 14291 break; 14292 14293 case 'backgroundColor': 14294 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 14295 vm.backgroundColor = data.backgroundColor; 14296 break; 14297 14298 case 'border': 14299 vm.widget.parameters[parameter].value = data.border; 14300 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 14301 break; 14302 } 14303 } 14304 widgets[$scope.widget] = angular.toJson(vm.widget); 14305 buildColumns(vm.columnsDisplaySelect); 14306 }) 14307 .catch(function (error) { 14308 bugsnag.notify(error); 14309 }); 14310 }); 14311 14312 $scope.$on('$destroy', listener); 14313 14314 seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId) 14315 .then(function(response) { 14316 const configShowPlayerStats = response.data.find(function(config){ 14317 return config.Code === 'SHOWPLAYERSTATS'; 14318 }) 14319 vm.showPlayerStats = configShowPlayerStats && configShowPlayerStats.Value !== '0'; 14320 }) 14321 .catch(function(error) { 14322 bugsnag.notify(error); 14323 }); 14324 14325 function buildColumns(columnsToDisplay) { 14326 vm.columns = []; 14327 columnsToDisplay.forEach(function (col) { 14328 var stat = statisticService.getPlayerStatisticByStatId(col.id); 14329 if (stat) { 14330 vm.columns.push({ 14331 id: col.id, 14332 visibleDesktop: col.visibleDesktop, 14333 visibleMobile: col.visibleMobile, 14334 name: stat.name, 14335 abbreviation: stat.abbreviation 14336 }) 14337 } 14338 }); 14339 14340 switch (vm.selectedTeam) { 14341 case 'localTeam': 14342 vm.teamId = vm.localTeamId; 14343 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14344 break; 14345 case 'visitorTeam': 14346 vm.teamId = vm.visitorTeamId; 14347 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14348 break; 14349 } 14350 vm.teamId = vm[`${vm.selectedTeam}Id`]; 14351 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14352 14353 var players = _.get(_.find(vm.team.playersCategories, { id: 8 }), 'players'); 14354 vm.players = players; 14355 14356 var teamSummaryStats = _.find(vm.team.players, { id: 0, categoryId: 8 }) 14357 if (teamSummaryStats) { 14358 vm.teamSummary = teamSummaryStats; 14359 } 14360 } 14361 14362 function isMobile() { 14363 return $window.innerWidth <= 600; 14364 } 14365 } 14366})(); 14367; 14368(function () { 14369 'use strict'; 14370 14371 angular 14372 .module('app.directives') 14373 .directive('gamePitchersStats', gamePitchersStats) 14374 14375 gamePitchersStats.$inject = []; 14376 14377 function gamePitchersStats() { 14378 return { 14379 restrict: 'E', 14380 scope: { 14381 widget: '=' 14382 }, 14383 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-pitchers-stats/game-pitchers-stats.tpl.html', 14384 controller: 'GamePitchersStatsWidgetController', 14385 controllerAs: 'gamePitchersStats' 14386 }; 14387 } 14388})();; 14389(function () { 14390 'use strict'; 14391 14392 angular 14393 .module('app.directives') 14394 .controller('BoxScoreSummaryWidgetController', BoxScoreSummaryWidgetController); 14395 14396 BoxScoreSummaryWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$window', 'UrlService', 'PlayerService', 'PositionService', 'SeasonService', 'StatisticService', 'ScoreboardBaseballService', 'ScoreboardBasketballService', 'WebsiteEditorService', 'GoogleMapService', 'FacilityService', 'SignalrService']; 14397 14398 function BoxScoreSummaryWidgetController($rootScope, $scope, $localStorage, $window, urlService, playerService, positionService, seasonService, statisticService, scoreboardBaseballService, scoreboardBasketballService, websiteEditorService, googleMapService, facilityService, signalrService) { 14399 var vm = this; 14400 14401 //State variables 14402 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 14403 14404 vm.widget = angular.fromJson(widgets[$scope.widget]); 14405 vm.showPlayerStats = false; 14406 vm.url = urlService; 14407 vm.player = playerService; 14408 vm.position = positionService; 14409 vm.sportId = $localStorage.solution.sportId; 14410 vm.columnsDisplaySelect = []; 14411 vm.columns = []; 14412 vm.teamSummary = {}; 14413 vm.type = _.get(_.find(vm.widget.properties, { key: 'type' }), 'value'); 14414 14415 vm.filter = _.filter; 14416 14417 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.id)); 14418 14419 signalrConnection.on(signalrService.EVENTS.BaseballStatsUpdate, function (response) { 14420 var gameUpdated = angular.fromJson(response.replace(/[\n\r]+/g, ' ')); 14421 14422 if (gameUpdated.id == vm.id) { 14423 vm = Object.assign(vm, gameUpdated); 14424 buildColumns(vm.columnsDisplaySelect); 14425 $scope.$apply(); 14426 } 14427 }); 14428 14429 14430 //State functions 14431 14432 vm.getStatisticValue = function (player, statisticId) { 14433 if (player && player.stats && player.stats.length > 0) { 14434 14435 var playerStat = _.find(player.stats, function (statistic) { 14436 return statistic.statTypeId === statisticId; 14437 }); 14438 14439 if (playerStat) { 14440 return playerStat.displayValue; 14441 } 14442 } 14443 14444 return '0'; 14445 }; 14446 14447 vm.getPosition = function (position) { 14448 return _.get(_.find(scoreboardBaseballService.getDefensePositions(), { id: position }), 'abbreviation'); 14449 } 14450 14451 vm.showStat = function (column) { 14452 if (isMobile() && column.visibleMobile) { 14453 return true; 14454 } else if (!isMobile() && column.visibleDesktop) { 14455 return true; 14456 } 14457 return false; 14458 } 14459 14460 vm.hasVisibleColumns = function (columns) { 14461 var visibleColumns = _.filter(columns, function (column) { return vm.showStat(column) }); 14462 14463 return visibleColumns.length > 0;
14464 } 14465 14466 vm.getStyle = function () { 14467 var style = {}; 14468 if (!vm.widgetTransparency) { 14469 style['background-color'] = vm.backgroundColor; 14470 style['background-size'] = 'cover'; 14471 style['background-position'] = 'center'; 14472 style['border-color'] = vm.border.color; 14473 } 14474 14475 style['border-width'] = `${vm.border.width}px`; 14476 style['border-color'] = vm.border.color; 14477 style['border-radius'] = `${vm.border.radius}px`; 14478 return style; 14479 } 14480 14481 //On component mount 14482 for (var parameter in vm.widget.parameters) { 14483 switch (vm.widget.parameters[parameter].id) { 14484 case 'showTeamHeader': 14485 vm.showTeamHeader = vm.widget.parameters[parameter].value === 'true'; 14486 break; 14487 14488 case 'selectedTeam': 14489 vm.selectedTeam = vm.widget.parameters[parameter].value; 14490 break; 14491 14492 case 'columnsDisplaySelect': 14493 vm.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 14494 break; 14495 14496 case 'widgetTransparency': 14497 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 14498 break; 14499 14500 case 'backgroundColor': 14501 vm.backgroundColor = vm.widget.parameters[parameter].value; 14502 break; 14503 14504 case 'border': 14505 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 14506 break; 14507 } 14508 } 14509 14510 buildColumns(vm.columnsDisplaySelect); 14511 14512 // Listener 14513 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 14514 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 14515 .then(function (response) { 14516 for (var parameter in vm.widget.parameters) { 14517 switch (vm.widget.parameters[parameter].id) { 14518 case 'showTeamHeader': 14519 vm.widget.parameters[parameter].value = data.showTeamHeader.toString(); 14520 vm.showTeamHeader = data.showTeamHeader; 14521 break; 14522 14523 case 'selectedTeam': 14524 vm.widget.parameters[parameter].value = data.selectedTeam.toString(); 14525 vm.selectedTeam = data.selectedTeam; 14526 break 14527 14528 case 'columnsDisplaySelect': 14529 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 14530 vm.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 14531 break; 14532 14533 case 'widgetTransparency': 14534 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 14535 vm.widgetTransparency = data.widgetTransparency; 14536 break; 14537 14538 case 'backgroundColor': 14539 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 14540 vm.backgroundColor = data.backgroundColor; 14541 break; 14542 14543 case 'border': 14544 vm.widget.parameters[parameter].value = data.border; 14545 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 14546 break; 14547 } 14548 } 14549 widgets[$scope.widget] = angular.toJson(vm.widget); 14550 buildColumns(vm.columnsDisplaySelect); 14551 }) 14552 .catch(function (error) { 14553 bugsnag.notify(error); 14554 }); 14555 }); 14556 14557 $scope.$on('$destroy', listener); 14558 14559 seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId) 14560 .then(function(response) { 14561 const configShowPlayerStats = response.data.find(function(config){ 14562 return config.Code === 'SHOWPLAYERSTATS'; 14563 }) 14564 vm.showPlayerStats = configShowPlayerStats && configShowPlayerStats.Value !== '0'; 14565 }) 14566 .catch(function(error) { 14567 bugsnag.notify(error); 14568 }); 14569 14570 function buildColumns(columnsToDisplay) { 14571 switch (vm.selectedTeam) { 14572 case 'localTeam': 14573 vm.teamId = vm.localTeamId; 14574 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14575 break; 14576 case 'visitorTeam': 14577 vm.teamId = vm.visitorTeamId; 14578 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14579 break; 14580 } 14581 vm.teamId = vm[`${vm.selectedTeam}Id`]; 14582 vm.team = _.find(vm.teamList, { id: vm.teamId }); 14583 14584 var categoryId = _.parseInt(_.get(_.find(vm.widget.properties, { key: 'categoryId' }), 'value')); 14585 14586 var players = _.filter(_.get(_.find(vm.team.playersCategories, { id: categoryId }), 'players'), { status: 'Selected' }); 14587 var teamSummaryStats = null; 14588 switch (vm.sportId) { 14589 case 4: 14590 teamSummaryStats = _.find(vm.team.players, { categoryId: 10 }) 14591 break; 14592 default: 14593 teamSummaryStats = _.find(vm.team.players, { categoryId: 8 }) 14594 } 14595 if (teamSummaryStats) { 14596 vm.teamSummary = teamSummaryStats; 14597 } 14598 14599 var columns = []; 14600 columnsToDisplay.forEach(function (col) { 14601 var stat = statisticService.getPlayerStatisticByStatId(col.id); 14602 if (stat) { 14603 var columnPlayers = []; 14604
14605 players.forEach(function (player) { 14606 var hasStats = _.find(player.stats, function (stat) { return stat.statTypeId == col.id && stat.value }); 14607 14608 if (hasStats) { 14609 columnPlayers.push({ 14610 name: player.name, 14611 value: hasStats.displayValue 14612 }) 14613 } 14614 }) 14615 14616 columns.push({ 14617 id: col.id, 14618 visibleDesktop: col.visibleDesktop, 14619 visibleMobile: col.visibleMobile, 14620 name: stat.name, 14621 abbreviation: stat.abbreviation, 14622 players: columnPlayers 14623 }) 14624 } 14625 }); 14626 14627 vm.columns = _.filter(columns, function (column) { return column.players.length > 0 }) 14628 } 14629 14630 function isMobile() { 14631 return $window.innerWidth <= 600; 14632 } 14633 } 14634})(); 14635; 14636(function () { 14637 'use strict'; 14638 14639 angular 14640 .module('app.directives') 14641 .directive('boxScoreSummary', boxScoreSummary) 14642 14643 boxScoreSummary.$inject = []; 14644 14645 function boxScoreSummary() { 14646 return { 14647 restrict: 'E', 14648 scope: { 14649 widget: '=' 14650 }, 14651 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/box-score-summary/box-score-summary.tpl.html', 14652 controller: 'BoxScoreSummaryWidgetController', 14653 controllerAs: 'boxScoreSummary' 14654 }; 14655 } 14656})();; 14657(function () { 14658 'use strict'; 14659 14660 angular 14661 .module('app.directives') 14662 .controller('ShotsOnGoalWidgetController', ShotsOnGoalWidgetController); 14663 14664 ShotsOnGoalWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'StatisticService', 'WebsiteEditorService']; 14665 14666 function ShotsOnGoalWidgetController($rootScope, $scope, $localStorage, statisticService, websiteEditorService) { 14667 var vm = this; 14668 14669 //State variable 14670 vm.widget = angular.fromJson(widgets[$scope.widget]); 14671 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 14672 .replace(/[\n\r]+/g, ' '))); 14673 14674 vm.sportId = $localStorage.solution.sportId; 14675 vm.periods = []; 14676 14677 //State functions 14678 vm.getTotalShots = function(team) { 14679 return _.sumBy(team.periods, 'shotsOnGoal'); 14680 }; 14681 14682 //On component mount 14683 initializeSummary(); 14684 for (var parameter in vm.widget.parameters) { 14685 switch (vm.widget.parameters[parameter].id) { 14686 case 'visitorBottom': 14687 vm.visitorBottom = vm.widget.parameters[parameter].value === 'true'; 14688 break; 14689 } 14690 } 14691 14692 // Listener 14693 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 14694 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 14695 .then(function (response) { 14696 for (var parameter in vm.widget.parameters) { 14697 switch (vm.widget.parameters[parameter].id) { 14698 case 'visitorBottom': 14699 vm.widget.parameters[parameter].value = data.visitorBottom.toString(); 14700 vm.visitorBottom = data.visitorBottom; 14701 break; 14702 } 14703 } 14704 widgets[$scope.widget] = angular.toJson(vm.widget); 14705 }) 14706 .catch(function (error) { 14707 bugsnag.notify(error); 14708 }); 14709 }); 14710 14711 $scope.$on('$destroy', listener); 14712 14713 //Functions 14714 function initializeSummary() { 14715 var periods = []; 14716 14717 var numberOfPeriods = 3; 14718 var numberOfOvertimes = 0; 14719 14720 if ($localStorage.season.parameters && $localStorage.season.parameters.length > 0) { 14721 numberOfPeriods = parseInt(_.find($localStorage.season.parameters, function (parameter) {
14722 return parameter.Code === 'PERIODNUMBER' 14723 }).Value); 14724 14725 var overtimeParm = _.find($localStorage.season.parameters, function (parameter) { 14726 return parameter.Code === 'OVERTIMENUMBER' 14727 }); 14728 14729 if (overtimeParm != undefined) { 14730 numberOfOvertimes = parseInt(overtimeParm.Value); 14731 } 14732 } 14733 14734 for (var i = 1; i <= numberOfPeriods; i++) { 14735 periods.push({ 14736 number: i, 14737 regular: true 14738 }); 14739 } 14740 14741 if (vm.periodId >= 5 && vm.periodId <= 9) { 14742 for (i = 5; i <= vm.periodId; i++) { 14743 if (numberOfOvertimes > i - 5) { 14744 periods.push({ 14745 number: i, 14746 overtime: true 14747 }); 14748 } 14749 } 14750 } 14751 14752 vm.teams = { 14753 visitor: { 14754 name: vm.visitorTeamName, 14755 logo: vm.visitorTeamAvatar, 14756 abbreviation: _.find(vm.teamList, function(team) { 14757 return team.id === vm.visitorTeamId; 14758 }).abbreviation, 14759 periods: getPeriodEvents(periods, vm.localTeamId) 14760 }, 14761 local: { 14762 name: vm.localTeamName, 14763 logo: vm.localTeamAvatar, 14764 abbreviation: _.find(vm.teamList, function(team) { 14765 return team.id === vm.localTeamId; 14766 }).abbreviation, 14767 periods: getPeriodEvents(periods, vm.visitorTeamId) 14768 } 14769 }; 14770 14771 vm.periods = periods; 14772 } 14773 14774 function getPeriodEvents(periods, teamId) { 14775 var teamPeriods = angular.fromJson(angular.toJson(periods)); 14776 14777 for (var period in teamPeriods) { 14778 var events = _.filter(vm.eventList, function(event) { 14779 return event.eventTypeId === 7 && 14780 event.periodId === teamPeriods[period].number && 14781 event.teamId === teamId; 14782 }); 14783 14784 _.forEach(events, function(event) { 14785 var statistic = _.find(event.statList, function(statistic) { 14786 return statistic.statTypeId === 23; 14787 }); 14788 14789 if (angular.isUndefined(teamPeriods[period].shotsOnGoal)) { 14790 teamPeriods[period].shotsOnGoal = statistic.value; 14791 } else { 14792 teamPeriods[period].shotsOnGoal += statistic.value; 14793 } 14794 }); 14795 14796 var team = _.find(vm.teamList, { id: teamId }); 14797 var statsShots = _.filter(team.statsTeam, { teamId: teamId, statTypeId: statisticService.getSportTeamStatsByType('shotsOnGoal', vm.sportId) }); 14798 var totalShots = _.sumBy(statsShots, 'value'); 14799 14800 teamPeriods[period].shotsOnGoal = (teamPeriods[period].shotsOnGoal || 0) + totalShots; 14801 } 14802 14803 return teamPeriods 14804 } 14805 } 14806})(); 14807; 14808(function () { 14809 'use strict'; 14810 14811 angular 14812 .module('app.directives') 14813 .directive('shotsOnGoal', shotsOnGoal) 14814 14815 shotsOnGoal.$inject = []; 14816 14817 function shotsOnGoal() { 14818 return { 14819 restrict: 'E', 14820 scope: { 14821 widget: '=' 14822 }, 14823 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/shots-on-goal/shots-on-goal.tpl.html', 14824 controller: 'ShotsOnGoalWidgetController', 14825 controllerAs: 'shotsOnGoal' 14826 }; 14827 } 14828})();; 14829(function () { 14830 'use strict'; 14831 14832 angular 14833 .module('app.directives') 14834 .controller('ScoreboardBaseballWidgetController', ScoreboardBaseballWidgetController); 14835 14836 ScoreboardBaseballWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'StatisticService', 'WebsiteEditorService']; 14837 14838 function ScoreboardBaseballWidgetController($rootScope, $scope, $localStorage, statisticService, websiteEditorService) { 14839 var vm = this; 14840 } 14841})(); 14842; 14843(function () { 14844 'use strict'; 14845 14846 angular 14847 .module('app.directives') 14848 .directive('scoreboardBaseball', scoreboardBaseball) 14849 14850 scoreboardBaseball.$inject = []; 14851 14852 function scoreboardBaseball() { 14853 return { 14854 restrict: 'E', 14855 scope: { 14856 widget: '=' 14857 }, 14858 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/scoreboard-baseball.tpl.html', 14859 controller: 'ScoreboardBaseballWidgetController', 14860 controllerAs: 'scoreboardBaseball' 14861 }; 14862 } 14863})();; 14864(function () { 14865 'use strict'; 14866 14867 angular 14868 .module('app.directives') 14869 .controller('ScoreboardBaseballScoreWidgetController', ScoreboardBaseballScoreWidgetController); 14870 14871 ScoreboardBaseballScoreWidgetController.$inject = ['$rootScope', '$scope']; 14872 14873 function ScoreboardBaseballScoreWidgetController($rootScope, $scope) { 14874 var vm = this; 14875 } 14876})(); 14877; 14878(function () { 14879 'use strict'; 14880 14881 angular 14882 .module('app.directives') 14883 .directive('scoreboardBaseballScore', scoreboardBaseballScore) 14884 14885 scoreboardBaseballScore.$inject = []; 14886 14887 function scoreboardBaseballScore() { 14888 return { 14889 restrict: 'E', 14890 scope: { 14891 widget: '=', 14892 score: '=', 14893 active: '=' 14894 }, 14895 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/score/scoreboard-baseball-score.tpl.html', 14896 controller: 'ScoreboardBaseballScoreWidgetController', 14897 controllerAs: 'scoreboardBaseballScore' 14898 }; 14899 } 14900})();; 14901(function () { 14902 'use strict'; 14903 14904 angular 14905 .module('app.directives') 14906 .controller('ScoreboardBaseballLineupWidgetController', ScoreboardBaseballLineupWidgetController); 14907 14908 ScoreboardBaseballLineupWidgetController.$inject = ['$scope', 'ScoreboardBaseballService']; 14909 14910 function ScoreboardBaseballLineupWidgetController($scope, scoreboardBaseballService) { 14911 var vm = this; 14912 vm.openId = undefined; 14913 vm.selectedTeam = null; 14914 vm.selectedPlayer = null; 14915 vm.playerToSubstitute = null;
14916 vm.step = "1"; 14917 vm.gameStatus = $scope.gameStatus; 14918 vm.lineup = $scope.lineup; 14919 vm.positions = scoreboardBaseballService.getDefensePositions(); 14920 vm.numbers = Array.from(Array(100).keys()); 14921 vm.numbers.push('00'); 14922 vm.selectedTabTeam = null; 14923 14924 vm.possiblePositions = [1, 2, 3, 4, 5, 6, 7, 8, 9] 14925 vm.defensePositions = _.filter(vm.positions, function (pos) { return pos.name != 'pinchhitter' && pos.name != 'pinchrunner' }); 14926 vm.offensePositions = _.filter(vm.positions, function (pos) { return pos.name == 'pinchhitter' || pos.name == 'pinchrunner' || pos.name == 'designatedhitter' }); 14927 vm.displayedPositions = []; 14928 14929 vm.isOpen = function (id) { 14930 return vm.openId === id; 14931 } 14932 14933 vm.clickOpen = function (id) { 14934 if (vm.openId === id) { 14935 vm.openId = undefined; 14936 } else { 14937 vm.openId = id; 14938 } 14939 } 14940 $scope.$watch('gameStatus', function () { 14941 vm.gameStatus = $scope.gameStatus; 14942 }); 14943 14944 vm.showAvailablePlayers = function (team, player) { 14945 vm.selectedTeam = team; 14946 vm.subList = vm.selectedTeam.playersAvailable; 14947 vm.subList = _.sortBy(vm.subList, function (player) { 14948 return player.playerName; 14949 }) 14950 vm.sortedBy = 2; 14951 vm.selectedPlayer = player; 14952 vm.step = "1"; 14953 $scope.showAvailablePlayers(); 14954 } 14955 14956 vm.switchTab = function (teamId) { 14957 vm.selectedTeamTab = teamId; 14958 return false; 14959 } 14960 14961 vm.sortSubstitution = function (item) { 14962 switch (item) { 14963 case 'number': 14964 vm.sortedBy = 1; 14965 vm.subList = _.sortBy(vm.subList, function (player) { 14966 return player.number; 14967 }) 14968 break; 14969 case 'name': 14970 vm.sortedBy = 2; 14971 vm.subList = _.sortBy(vm.subList, function (player) { 14972 return player.playerName; 14973 }) 14974 break; 14975 case 'position': 14976 vm.sortedBy = 3; 14977 vm.subList = _.sortBy(vm.subList, function (player) { 14978 return player.pos; 14979 }) 14980 break; 14981 default: 14982 vm.sortedBy = 2; 14983 vm.subList = _.sortBy(vm.subList, function (player) { 14984 return player.playerName; 14985 }) 14986 break; 14987 } 14988 } 14989 14990 vm.selectPlayer = function (player) { 14991 vm.playerToSubstitute = _.cloneDeep(player); 14992 vm.playerToSubstitute.pos = vm.selectedPlayer.pos; 14993 vm.displayedPositions = player.teamId == $scope.offenseTeam ? vm.offensePositions : vm.defensePositions; 14994 14995 vm.step = "2"; 14996 } 14997 14998 vm.back = function () { 14999 vm.step = "1"; 15000 } 15001 15002 vm.closeConfirm = function () { 15003 $scope.hideConfirmPitcherSubstitution(); 15004 } 15005 15006 vm.substitutePlayer = function (force) { 15007 if (force || vm.selectedPlayer.playerPosition != 'pitcher') { 15008 if ($scope.onSubstitutePlayer) { 15009 $scope.onSubstitutePlayer(vm.selectedPlayer, vm.playerToSubstitute); 15010 $scope.hideAvailablePlayers(); 15011 $scope.hideConfirmPitcherSubstitution(); 15012 } 15013 } 15014 else { 15015 $scope.showConfirmPitcherSubstitution(); 15016 } 15017 } 15018 } 15019})(); 15020; 15021(function () { 15022 'use strict'; 15023 15024 angular 15025 .module('app.directives') 15026 .directive('scoreboardBaseballLineup', scoreboardBaseballLineup) 15027 15028 scoreboardBaseballLineup.$inject = ['ModalService']; 15029 15030 function scoreboardBaseballLineup(modalService) { 15031 return { 15032 restrict: 'E', 15033 scope: { 15034 widget: '=', 15035 lineup: '=', 15036 onSubstitutePlayer: '=', 15037 gameStatus: '=', 15038 offenseTeam: '=' 15039 }, 15040 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/lineup/scoreboard-baseball-lineup.tpl.html', 15041 controller: 'ScoreboardBaseballLineupWidgetController', 15042 controllerAs: 'scoreboardBaseballLineup', 15043 link: function (scope, element, attributes, controller) { 15044 var substitutionModal = modalService.init($('.substitution-modal', element)); 15045 var confirmPitcherSubstitutionModal = modalService.init($('.confirm-pitcher-sub
15045stitution-modal', element)); 15046 15047 scope.hideAvailablePlayers = function () { 15048 substitutionModal.hide(); 15049 } 15050 15051 scope.showAvailablePlayers = function () { 15052 substitutionModal.show(); 15053 } 15054 15055 scope.showConfirmPitcherSubstitution = function () { 15056 confirmPitcherSubstitutionModal.show(); 15057 } 15058 15059 scope.hideConfirmPitcherSubstitution = function () { 15060 confirmPitcherSubstitutionModal.hide(); 15061 } 15062 } 15063 }; 15064 } 15065})();; 15066(function () { 15067 'use strict'; 15068 15069 angular 15070 .module('app.directives') 15071 .controller('ScoreboardBaseballLogWidgetController', ScoreboardBaseballLogWidgetController); 15072 15073 ScoreboardBaseballLogWidgetController.$inject = ['$scope', '$translate', 'ordinalFilter', 'ScoreboardBaseballService'] 15074 15075 function ScoreboardBaseballLogWidgetController($scope, $translate, ordinalFilter, scoreboardBaseballService) { 15076 var vm = this; 15077 var selectedEvent = null; 15078 15079 vm.gameDetails = $scope.gameDetails; 15080 15081 vm.hitCategories = [ 15082 { id: 'b1', name: $translate.instant('widgets.games.scoreboard.baseball.log.1stBase') }, 15083 { id: 'b2', name: $translate.instant('widgets.games.scoreboard.baseball.log.2ndBase') }, 15084 { id: 'b3', name: $translate.instant('widgets.games.scoreboard.baseball.log.3rdBase') }, 15085 { id: 'b4', name: $translate.instant('widgets.games.scoreboard.baseball.log.homePlate') }, 15086 ] 15087 15088 vm.earnedRunsTypes = [ 15089 { id: 'earnedruns', name: $translate.instant('widgets.games.scoreboard.baseball.log.earnedRun') }, 15090 { id: 'unearnedruns', name: $translate.instant('widgets.games.scoreboard.baseball.log.unearnedRun') } 15091 ] 15092 15093 vm.rbiTypes = [ 15094 { id: 'rbi', name: $translate.instant('widgets.games.scoreboard.baseball.log.rbi') }, 15095 { id: 'noRbi', name: $translate.instant('widgets.games.scoreboard.baseball.log.noRbi') } 15096 ] 15097 15098 vm.basesTypes = { 15099 b1: { id: 'hit', name: $translate.instant('widgets.games.scoreboard.baseball.log.single') }, 15100 b2: { id: 'hit', name: $translate.instant('widgets.games.scoreboard.baseball.log.double') }, 15101 b3: { id: 'hit', name: $translate.instant('widgets.games.scoreboard.baseball.log.triple') }, 15102 b4: { id: 'hit', name: $translate.instant('widgets.games.scoreboard.baseball.log.homerun') } 15103 } 15104 15105 vm.eventTypes = [ 15106 { id: 'error', name: $translate.instant('widgets.games.scoreboard.baseball.log.error') }, 15107 { id: 'sacerror', name: $translate.instant('widgets.games.scoreboard.baseball.log.sacerror') }, 15108 ] 15109 15110 vm.optionalType = { id: 'optional', name: $translate.instant('widgets.games.scoreboard.baseball.log.optional') }; 15111 15112 vm.getEventTypes = function (event) { 15113 var types = []; 15114 var baseId; 15115 if (event.type == 'hit') { 15116 var baseId; 15117 switch (event.category) { 15118 case 'single': 15119 baseId = 'b1'; 15120 break; 15121 case 'double': 15122 baseId = 'b2'; 15123 break; 15124 case 'triple': 15125 baseId = 'b3'; 15126 break; 15127 case 'homerun': 15128 baseId = 'b4'; 15129 break; 15130 } 15131 } 15132 else { 15133 baseId = event.baseId; 15134 15135 } 15136 15137 types = [vm.basesTypes[event.baseId]]; 15138 types = types.concat(vm.eventTypes); 15139 15140 if (baseId == 'b1') { 15141 types.push(vm.optionalType); 15142 } 15143 15144 return types; 15145 } 15146 15147 vm.updateEvent = function (event) { 15148 if (!event.hasError()) { 15149 var content = event.formatEvent(); 15150 15151 let sequence; 15152 $scope.periods.forEach(function (period) { 15153
15154 period.sequences.forEach(function (_sequence) { 15155 if (_sequence.id == event.sequenceId) { 15156 sequence = _sequence; 15157 } 15158 }) 15159 }) 15160 let foundEvent = _.find(sequence.events, { seq: event.seq }); 15161 _.assign(foundEvent, content); 15162 15163 if ($scope.onUpdateEvent) { 15164 $scope.onUpdateEvent(sequence); 15165 } 15166 15167 event.editMode = false; 15168 } 15169 } 15170 15171 vm.getValue = function (id, list, type) { 15172 var item = _.find(list, { id: id }); 15173 if (type == 'player') { 15174 return (_.get(item, 'number') || '-') + ' - ' + _.get(item, 'name'); 15175 } 15176 15177 return _.get(item, 'name'); 15178 } 15179 15180 vm.formatInningName = function (period, pos) { 15181 if (pos == 1) { 15182 return $translate.instant('widgets.games.scoreboard.baseball.tab-stats.history.scoreboardBaseballHistory.startOf') + " " + period; 15183 } else { 15184 return $translate.instant('widgets.games.scoreboard.baseball.tab-stats.history.scoreboardBaseballHistory.endOf') + " " + period; 15185 } 15186 } 15187 15188 $scope.$watch('gameDetails', function (gameDetails) { 15189 vm.gameDetails = gameDetails; 15190 15191 vm.quarters = []; 15192 15193 _.range(vm.gameDetails.periodId).forEach(function (period) { 15194 vm.quarters.push({ id: period + 1, name: `${ordinalFilter(period + 1)} ${$translate.instant('widgets.games.scoreboard.basketball.history.quarter')}` }); 15195 }) 15196 15197 vm.range = _.range; 15198 vm.teams = {}; 15199 15200 vm.gameDetails.teamList.forEach(function (team) { 15201 vm.teams[team.id] = team; 15202 vm.teams[team.id].selectedPlayers = _.filter(vm.teams[team.id].players, { status: 'Selected' }); 15203 vm.teams[team.id].playerCollection = _.keyBy(vm.teams[team.id].selectedPlayers, 'id'); 15204 vm.teams[team.id].staffCollection = _.keyBy(vm.teams[team.id].staffs, 'id'); 15205 }); 15206 }) 15207 15208 $scope.$watch('periods', function (periods) { 15209 vm.events = {}; 15210 15211 periods.forEach(function (period) { 15212 var periodEvents = []; 15213 15214 period.sequences.forEach(function (sequence) { 15215 sequence.events.forEach(function (event) { 15216 event.hitter = sequence.hitter; 15217 15218 var earnedRuns = _.find(event.playersProperties, function (property) { return property.name == 'earnedruns' || property.name == 'unearnedruns' }); 15219 if (earnedRuns) { 15220 periodEvents.push(new EarnedRun(event, earnedRuns, sequence.id)); 15221 } 15222 15223 if (event.type == 'hit' || event.type == 'hitterdefenseerror' || event.type == 'fielderchoice' || event.type == 'sacerror') { 15224 periodEvents.push(new Hit(event, sequence.id)); 15225 } 15226 }); 15227 }); 15228 15229 vm.events[`${period.period}-${period.pos}`] = periodEvents; 15230 }); 15231 }) 15232 15233 function EarnedRun(_event, _earnedRuns, sequenceId) { 15234 var self = this; 15235 angular.extend(self, _.cloneDeep(_event)); 15236 15237 self.error = null; 15238 self.sequenceId = sequenceId; 15239 15240 var shooterProperty = _.find(self.properties, { name: 'shooter' }); 15241 15242 if (_event.type == 'hit') { 15243 self.scorerTeamId = _event.hitter.teamId; 15244 self.scorerId = _event.hitter.id; 15245 } 15246 else { 15247 var b4Property = _.find(_event.playersProperties, { name: 'b4' }); 15248 15249 if (b4Property) { 15250 self.scorerTeamId = b4Property.teamId; 15251 self.scorerId = b4Property.id; 15252 } 15253 } 15254 15255 self.eventType = 'earnedruns'; 15256 self.earnedRuns = _earnedRuns.name; 15257 self.earnedId = _earnedRuns.id; 15258 self.earnedTeamId = _earnedRuns.teamId; 15259 15260 self.hitterId = _event.hitter.id; 15261 self.hitterTeamId = _event.hitter.teamId; 15262 15263 var rbiProperty = _.find(self.playersProperties, { name: 'rbi' }); 15264 15265 if (rbiProperty) { 15266 self.rbi = 'rbi'; 15267 } 15268 else {
15269 self.rbi = 'noRbi'; 15270 } 15271 15272 self.hasError = function () { 15273 return false; 15274 } 15275 15276 self.formatEvent = function () { 15277 var eventContent = {}; 15278 eventContent.seq = self.seq; 15279 eventContent.type = self.type; 15280 eventContent.isProcess = self.isProcess; 15281 eventContent.group = self.group; 15282 eventContent.category = self.category; 15283 eventContent.hitter = self.hitter; 15284 eventContent.playersProperties = self.playersProperties; 15285 15286 var earnedRunProperty = _.find(eventContent.playersProperties, function (property) { return property.name == 'earnedruns' || property.name == 'unearnedruns' }); 15287 earnedRunProperty.name = self.earnedRuns; 15288 earnedRunProperty.id = self.earnedId; 15289 15290 if (self.rbi == 'noRbi') { 15291 eventContent.playersProperties = _.filter(eventContent.playersProperties, function (property) { return property.name != 'rbi' }); 15292 } 15293 else { 15294 var rbiProperty = _.find(eventContent.playersProperties, { name: 'rbi' }); 15295 if (!rbiProperty) { 15296 var newRbi = {}; 15297 newRbi.name = 'rbi'; 15298 newRbi.id = self.hitterId; 15299 newRbi.teamId = self.hitterTeamId; 15300 15301 eventContent.playersProperties.push(newRbi); 15302 } 15303 } 15304 15305 return eventContent; 15306 }; 15307 15308 self.editMode = false; 15309 } 15310 15311 function Hit(_event, sequenceId) { 15312 var self = this; 15313 angular.extend(self, _.cloneDeep(_event)); 15314 15315 self.eventType = 'hit'; 15316 self.sequenceId = sequenceId; 15317 15318 var baseId; 15319 var eventTypeId; 15320 15321 if (_event.type == "hitterdefenseerror") { 15322 var baseProperty = _.get(_.find(_event.playersProperties, function (property) { 15323 return _.includes(['b1', 'b2', 'b3', 'b4'], property.name); 15324 }), 'name'); 15325 baseId = baseProperty || 'b1'; 15326 eventTypeId = 'error'; 15327 } 15328 else if (_event.type == "sacerror") { 15329 var baseProperty = _.get(_.find(_event.playersProperties, function (property) { 15330 return _.includes(['b1', 'b2', 'b3', 'b4'], property.name); 15331 }), 'name'); 15332 baseId = baseProperty || 'b1'; 15333 eventTypeId = 'sacerror'; 15334 } 15335 else if (_event.type == "fielderchoice") { 15336 baseId = 'b1'; 15337 eventTypeId = 'optional'; 15338 } 15339 else if (_event.type == 'hit') { 15340 switch (_event.category) { 15341 case 'single': 15342 baseId = 'b1'; 15343 break; 15344 case 'double': 15345 baseId = 'b2'; 15346 break; 15347 case 'triple': 15348 baseId = 'b3'; 15349 break; 15350 case 'homerun': 15351 baseId = 'b4'; 15352 break; 15353 } 15354 15355 eventTypeId = 'hit'; 15356 } 15357 15358 var defenseErrorProperty = _.find(_event.playersProperties, { name: 'defenseerror' }) || {}; 15359 self.defenseErrorId = defenseErrorProperty.id; 15360 var team = _.filter(vm.teams, function (team) { return team.id != _event.hitter.teamId }); 15361 self.defenseErrorTeamId = team[0].id; 15362 15363 self.baseId = baseId; 15364 self.eventTypeId = eventTypeId; 15365 15366 self.hitterId = _event.hitter.id; 15367 self.hitterTeamId = _event.hitter.teamId; 15368 15369 self.playersProperties = _event.playersProperties; 15370 15371 self.hasError = function () { 15372 if (self.eventTypeId == 'error') { 15373 if (!self.defenseErrorId) { 15374 self.error = { type: 'player' } 15375 return true; 15376 } 15377 15378 var collection = _.filter(vm.teams, function (team) { return team.id != _event.hitter.teamId })[0].playerCollection; 15379 15380 if (!collection[self.defenseErrorId]) { 15381 self.error = { type: 'player' } 15382 return true; 15383 } 15384 } 15385 15386 self.error = null; 15387 return false; 15388 } 15389 15390 self.formatEvent = function () { 15391 var eventContent = {}; 15392 15393 var playersProperties = _.filter(self.playersProperties, function (property) { return property.name != 'defenseerror' && !_.includes(['b1', 'b2', 'b3', 'b4'], property.name); }); 15394 15395 if (self.eventTypeId == 'error' || self.eventTypeId == 'sacerror') { 15396 eventContent.category = null; 15397 eventContent.group = 'onbases'; 15398 eventContent.seq = self.seq; 15399 eventContent.type = self.eventTypeId == 'error' ? "hitterdefenseerror" : "sacerror"; 15400 15401 var team = _.filter(vm.teams, function (team) { return team.id != _event.hitter.teamId }); 15402 eventContent.playersProperties = playersProperties; 15403 15404 var defenseProperty = {} 15405 defenseProperty.id = self.defenseErrorId; 15406 defenseProperty.teamId = team[0].id; 15407 defenseProperty.name = "defenseerror"; 15408 15409 var baseProperty = {}; 15410 baseProperty.id = self.hitterId; 15411 baseProperty.teamId = self.hitterTeamId; 15412 baseProperty.name = self.baseId; 15413 15414 eventContent.playersProperties.push(defenseProperty); 15415 eventContent.playersProperties.push(baseProperty) 15416 } 15417 else if (self.eventTypeId == 'optional') { 15418 eventContent.seq = self.seq; 15419 eventContent.type = 'fielderchoice'; 15420 eventContent.group = 'onbases'; 15421 eventContent.playersProperties = playersProperties; 15422 eventContent.category = null; 15423 } 15424 else if (self.eventTypeId == 'hit') { 15425 eventContent.seq = self.seq; 15426 eventContent.type = 'hit'; 15427 eventContent.group = 'onbases'; 15428 eventContent.playersProperties = playersProperties; 15429 15430 var category; 15431 switch (self.baseId) { 15432 case 'b1': 15433 category = 'single'; 15434 break; 15435 case 'b2': 15436 category = 'double;' 15437 break; 15438 case 'b3': 15439 category = 'triple'; 15440 break; 15441 case 'b4': 15442 category = 'homerun'; 15443 break; 15444 } 15445 15446 eventContent.category = category; 15447 } 15448 15449 return eventContent; 15450 } 15451 15452 self.editMode = false; 15453 } 15454 } 15455})(); 15456; 15457(function () { 15458 'use strict'; 15459 15460 angular 15461 .module('app.directives') 15462 .directive('scoreboardBaseballLog', scoreboardBaseballLog) 15463 15464 scoreboardBaseballLog.$inject = ['ModalService']; 15465 15466 function scoreboardBaseballLog(modalService) { 15467 return { 15468 restrict: 'E', 15469 scope: { 15470 gameDetails: '=', 15471 onUpdateEvent: '=', 15472 periods: '=' 15473 }, 15474 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/log/scoreboard-baseball-log.tpl.html', 15475 controller: 'ScoreboardBaseballLogWidgetController', 15476 controllerAs: 'scoreboardBaseballLog', 15477 }; 15478 } 15479})();; 15480(function () { 15481 'use strict'; 15482 15483 angular 15484 .module('app.directives') 15485 .controller('ScoreboardBaseballPitchCountWidgetController', ScoreboardBaseballPitchCountWidgetController); 15486 15487 ScoreboardBaseballPitchCountWidgetController.$inject = ['$rootScope', '$scope']; 15488 15489 function ScoreboardBaseballPitchCountWidgetController($rootScope, $scope) { 15490 var vm = this; 15491 15492 vm.balls = 0; 15493 vm.strikes = 0; 15494 vm.strikeouts = 0; 15495 15496 vm.addBall = function (category) { 15497 if (!$scope.disabled) { 15498 if ($scope.onPitch) { 15499 $scope.onPitch({ category: 'ball', type: null }, category); 15500 } 15501 } 15502 } 15503 15504 vm.addStrike = function (type, category) { 15505 if (!$scope.disabled) { 15506 if ($scope.onPitch) { 15507 $scope.onPitch({ category: 'strike', type: type }, category) 15508 } 15509 } 15510 } 15511 15512 $scope.$watch('pitchs', function (pitchs) { 15513 vm.balls = 0; 15514 vm.strikes = 0; 15515
15516 (pitchs || []).forEach(function (pitch) { 15517 if (pitch.category == 'ball') { 15518 vm.balls++; 15519 } 15520 else if (pitch.category == 'strike') { 15521 if (pitch.type != 'foulball' || vm.strikes != 2) { 15522 vm.strikes++; 15523 } 15524 } 15525 }) 15526 }) 15527 15528 $scope.$watch('strikeouts', function (strikeouts) { 15529 vm.strikeouts = strikeouts || 0; 15530 }) 15531 } 15532})(); 15533; 15534(function () { 15535 'use strict'; 15536 15537 angular 15538 .module('app.directives') 15539 .directive('scoreboardBaseballPitchCount', scoreboardBaseballPitchCount) 15540 15541 scoreboardBaseballPitchCount.$inject = []; 15542 15543 function scoreboardBaseballPitchCount() { 15544 return { 15545 restrict: 'E', 15546 scope: { 15547 widget: '=', 15548 onPitch: '=', 15549 pitchs: '=', 15550 disabled: '=', 15551 strikeouts: '=', 15552 }, 15553 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/baseball/tab-stats/pitch-count/scoreboard-baseball-pitch-count.tpl.html', 15554 controller: 'ScoreboardBaseballPitchCountWidgetController', 15555 controllerAs: 'scoreboardBaseballPitchCount' 15556 }; 15557 } 15558})();; 15559(function () { 15560 'use strict'; 15561 15562 angular 15563 .module('app.directives') 15564 .controller('ScoreboardAddPlayerController', ScoreboardAddPlayerController); 15565 15566 ScoreboardAddPlayerController.$inject = ['$scope', '$localStorage', 'PositionService', 'GameService']; 15567 15568 function ScoreboardAddPlayerController($scope, $localStorage, positionService, gameService) { 15569 var vm = this; 15570 var sportId = $localStorage.solution.sportId; 15571 15572 vm.showModal = false; 15573 vm.playerId = null; 15574 vm.firstName = ""; 15575 vm.lastName = ""; 15576 vm.number = "0"; 15577 vm.position = ""; 15578 vm.status = ""; 15579 vm.positions = positionService.getPositions(sportId); 15580 vm.teams = $scope.teams; 15581 vm.team = $scope.selectedTeamId.toString(); 15582 vm.birthdate = null; 15583 vm.gameId = $scope.gameId; 15584 15585 vm.errors = { 15586 firstname: false, 15587 lastname: false, 15588 team: false 15589 } 15590 15591 vm.validatePlayer = function () { 15592 var isValid = true; 15593 vm.errors = { firstname: false, lastname: false, team: false }; 15594 15595 if (vm.firstName == "") { 15596 vm.errors.firstname = true; 15597 isValid = false; 15598 } 15599 15600 if (vm.lastName == "") { 15601 vm.errors.lastname = true; 15602 isValid = false; 15603 } 15604 15605 if (vm.team == null) { 15606 vm.errors.team = true; 15607 isValid = false; 15608 } 15609 15610 return isValid; 15611 } 15612 15613 vm.allNumbers = []; 15614 vm.allNumbers.push("0"); 15615 vm.allNumbers.push("00"); 15616 15617 for (let i = 1; i <= 99; i++) { 15618 vm.allNumbers.push(i.toString()); 15619 } 15620 15621 vm.changeNumber = function (id, number) { 15622 vm.number = number 15623 } 15624 15625 vm.addPlayer = function () { 15626 var isValid = vm.validatePlayer(); 15627 if (isValid) { 15628 var player = { firstName: vm.firstName, lastName: vm.lastName, number: vm.number, positionId: vm.position, teamId: vm.team, status: vm.status }; 15629 gameService.addPlayer(__solutionId__, vm.gameId, player).then(function (result) { 15630 if ($scope.afterChange) { 15631 $scope.afterChange(result); 15632 } 15633 }); 15634 $scope.show = false; 15635 vm.hideAddPlayerPopup(); 15636 } 15637 } 15638 15639 vm.editPlayer = function () { 15640 var isValid = vm.validatePlayer(); 15641 if (isValid) { 15642 var player = { id: vm.playerId, firstName: vm.firstName, lastName: vm.lastName, number: vm.number, positionId: vm.position, teamId: vm.team, status: vm.status }; 15643 gameService.updatePlayer(__solutionId__, vm.gameId, player).then(function (result) { 15644 if ($scope.afterChange) { 15645 $scope.afterChange(result); 15646 } 15647 }); 15648 $scope.show = false; 15649 vm.hideAddPlayerPopup(); 15650 } 15651 } 15652 15653 vm.close = function () { 15654 $scope.show = false; 15655 vm.hideAddPlayerPopup(); 15656 } 15657 15658 $scope.$watchGroup(['show', 'player'], function (values) { 15659 vm.playerId = null; 15660 vm.position = ""; 15661 vm.number = "0"; 15662 vm.firstName = ""; 15663 vm.lastName = ""; 15664 vm.status = ""; 15665 vm.team = $scope.selectedTeamId.toString(); 15666 15667 if (values[1]) { 15668 var player = values[1]; 15669 15670 vm.playerId = player.id; 15671 vm.lastName = player.lastName; 15672 vm.firstName = player.firstName; 15673 vm.position = player.positionId.toString(); 15674 vm.number = player.number; 15675 vm.status = player.status; 15676 vm.team = player.teamId.toString(); 15677 } 15678 15679 if (vm.showModal != values[0]) { 15680 vm.errors = { firstname: false, lastname: false, team: false }; 15681 15682 if (values[0]) { 15683 vm.showAddPlayerPopup(); 15684 } 15685 else { 15686 vm.hideAddPlayerPopup(); 15687 } 15688 15689 vm.showModal = values[0]; 15690 } 15691 }); 15692 } 15693})(); 15694; 15695(function () { 15696 'use strict'; 15697 15698 angular 15699 .module('app.directives') 15700 .directive('scoreboardAddPlayer', scoreboardAddPlayer) 15701 15702 scoreboardAddPlayer.$inject = ['ModalService']; 15703 15704 function scoreboardAddPlayer(modalService) { 15705 return { 15706 restrict: 'E', 15707 scope: { 15708 show: '=', 15709 teams: '=', 15710 selectedTeamId: '=', 15711 player: '=', 15712 gameId: '=', 15713 afterChange: '=', 15714 }, 15715 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/add-player/add-player.tpl.html', 15716 controller: 'ScoreboardAddPlayerController', 15717 controllerAs: 'scoreboardAddPlayer', 15718 link: function (scope, element, attrs, controller) { 15719 var modal = modalService.init($('.add-player', element)); 15720 15721 element.on('$destroy', function () { 15722 $(document).off('click'); 15723 modal.element.off('hidden.bs.modal'); 15724 }); 15725 15726 controller.showAddPlayerPopup = modal.show; 15727 controller.hideAddPlayerPopup = modal.hide; 15728 15729 modal.element.on('hidden.bs.modal', function (e) { 15730 if (scope.show) { 15731 scope.show = false; 15732 scope.$apply(); 15733 } 15734 }) 15735 } 15736 }; 15737 } 15738})();; 15739(function () { 15740 'use strict'; 15741 15742 angular 15743 .module('app.directives') 15744 .controller('ScoreboardAddStaffController', ScoreboardAddStaffController); 15745 15746 ScoreboardAddStaffController.$inject = ['$scope', 'PositionService', 'GameService', 'StaffService']; 15747 15748 function ScoreboardAddStaffController($scope, positionService, gameService, staffService) { 15749 var vm = this; 15750 15751 vm.showModal = false; 15752 vm.staffId = null; 15753 vm.firstName = ""; 15754 vm.lastName = ""; 15755 vm.title = ""; 15756 vm.titles = $scope.isSolution ? positionService.getStaffSolutionPositions() : positionService.getStaffTeamPositions(); 15757 vm.teams = $scope.teams; 15758 vm.team = $scope.selectedTeamId ? $scope.selectedTeamId.toString() : ""; 15759 vm.gameId = $scope.gameId; 15760 15761 vm.errors = { 15762 firstname: false, 15763 lastname: false, 15764 title: false 15765 } 15766 15767 vm.validateStaff = function () { 15768 var isValid = true; 15769 vm.errors = { firstname: false, lastname: false, title: false }; 15770 15771 if (vm.firstName == "") { 15772 vm.errors.firstname = true; 15773 isValid = false; 15774 } 15775 15776 if (vm.lastName == "") { 15777 vm.errors.lastname = true; 15778 isValid = false; 15779 } 15780 15781 if (vm.title == "") { 15782 vm.errors.title = true; 15783 isValid = false; 15784 } 15785 15786 return isValid; 15787 } 15788 15789 vm.addStaff = function () { 15790 var isValid = vm.validateStaff(); 15791 if (isValid) { 15792 var linkId = $scope.isSolution ? __solutionId__ : vm.team; 15793 var staff = { firstName: vm.firstName, lastName: vm.lastName, type: vm.title, linkId: linkId, status: vm.status }; 15794 15795 var promise; 15796 if ($scope.isSolution) { 15797 promise = staffService.create(__solutionId__, staff); 15798 } 15799 else { 15800 promise = gameService.addStaff(__solutionId__, vm.gameId, staff); 15801 } 15802 15803 promise.then(function (result) { 15804 if ($scope.afterChange) { 15805 $scope.afterChange(result); 15806 } 15807 }); 15808 $scope.show = false; 15809 vm.hideAddStaffPopup(); 15810 } 15811 } 15812 15813 vm.editStaff = function () { 15814 var isValid = vm.validateStaff(); 15815 if (isValid) { 15816 var linkId = $scope.isSolution ? __solutionId__ : vm.team; 15817 var staff = { id: vm.staffId, firstName: vm.firstName, lastName: vm.lastName, type: vm.title, linkId: linkId, status: vm.status }; 15818 gameService.updateStaff(__solutionId__, vm.gameId, staff).then(function (result) { 15819 if ($scope.afterChange) { 15820 $scope.afterChange(result); 15821 } 15822 }); 15823 $scope.show = false; 15824 vm.hideAddStaffPopup(); 15825 } 15826 } 15827 15828 vm.close = function () { 15829 $scope.show = false; 15830 vm.hideAddStaffPopup(); 15831 } 15832 15833 $scope.$watchGroup(['show', 'staff'], function (values) { 15834 vm.staffId = null; 15835 vm.title = ""; 15836 vm.firstName = ""; 15837 vm.lastName = ""; 15838 vm.status = ""; 15839 vm.team = $scope.selectedTeamId ? $scope.selectedTeamId.toString() : ""; 15840 15841 if (values[1]) { 15842 var staff = values[1]; 15843 15844 vm.staffId = staff.id; 15845 vm.title = staff.type; 15846 vm.firstName = staff.firstName; 15847 vm.lastName = staff.lastName; 15848 vm.status = staff.status; 15849 vm.team = staff.linkId.toString(); 15850 } 15851 15852 if (vm.showModal != values[0]) { 15853 vm.errors = { firstname: false, lastname: false, title: false }; 15854 15855 if (values[0]) { 15856 vm.showAddStaffPopup(); 15857 } 15858 else { 15859 vm.hideAddStaffPopup(); 15860 } 15861 15862 vm.showModal = values[0]; 15863 } 15864 }); 15865 } 15866})(); 15867; 15868(function () { 15869 'use strict'; 15870 15871 angular 15872 .module('app.directives') 15873 .directive('scoreboardAddStaff', scoreboardAddStaff) 15874 15875 scoreboardAddStaff.$inject = ['ModalService']; 15876 15877 function scoreboardAddStaff(modalService) { 15878 return { 15879 restrict: 'E', 15880 scope: { 15881 show: '=', 15882 teams: '=', 15883 selectedTeamId: '=', 15884 staff: '=', 15885 afterChange: '=', 15886 isSolution: '=', 15887 gameId: '=' 15888 }, 15889 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/add-staff/add-staff.tpl.html', 15890 controller: 'ScoreboardAddStaffController', 15891 controllerAs: 'scoreboardAddStaff', 15892 link: function (scope, element, attrs, controller) { 15893 var modal = modalService.init($('.add-staff', element)); 15894 15895 element.on('$destroy', function () { 15896 $(document).off('click'); 15897 modal.element.off('hidden.bs.modal'); 15898 }); 15899 15900 controller.showAddStaffPopup = modal.show; 15901 controller.hideAddStaffPopup = modal.hide; 15902 15903 modal.element.on('hidden.bs.modal', function (e) { 15904 if (scope.show) { 15905 scope.show = false; 15906 scope.$apply(); 15907 } 15908 }) 15909 } 15910 }; 15911 } 15912})();; 15913(function () { 15914 'use strict'; 15915 15916 angular 15917 .module('app.directives') 15918 .controller('ScoreboardGameStaffPopupController', ScoreboardGameStaffPopupController); 15919 15920 ScoreboardGameStaffPopupController.$inject = ['$scope', 'PositionService']; 15921 15922 function ScoreboardGameStaffPopupController($scope, positionService) { 15923 var vm = this; 15924 15925 vm.gameDetails = $scope.gameDetails; 15926 vm.getStaffPosition = positionService.getStaffPosition; 15927 vm.showModal = false; 15928 vm.showAddStaff = false; 15929 vm.staff = $scope.staff; 15930 vm.selectedStaff = []; 15931 15932 vm.close = function () { 15933 $scope.show = false; 15934 vm.hideGameStaffPopup(); 15935 } 15936 15937 vm.openAddStaff = function () { 15938 vm.showAddStaff = true; 15939 } 15940 15941 vm.addStaff = function (staff) { 15942 _.remove(vm.staff, staff); 15943 15944 if (staff.status == 'Deleted') { 15945 staff.status = ''; 15946 } 15947 else if (staff.status == "") { 15948 staff.status = 'Created'; 15949 } 15950
15951 vm.selectedStaff.push(staff); 15952 } 15953 15954 vm.removeStaff = function (staff) { 15955 _.remove(vm.selectedStaff, staff); 15956 15957 if (staff.status == 'Created') { 15958 staff.status = ''; 15959 } 15960 else if (staff.status == '') { 15961 staff.status = 'Deleted'; 15962 } 15963 15964 vm.staff.push(staff); 15965 } 15966 15967 vm.saveStaff = function () { 15968 if ($scope.onUpdate) { 15969 var staff = vm.selectedStaff.concat(vm.staff); 15970 15971 $scope.onUpdate(staff); 15972 } 15973 15974 vm.close(); 15975 } 15976 15977 vm.onStaffCreated = function () { 15978 if ($scope.refreshStaff) { 15979 $scope.refreshStaff(); 15980 } 15981 } 15982 15983 $scope.$watchGroup(['show'], function (values) { 15984 if (values[0]) { 15985 vm.showGameStaffPopup(); 15986 } 15987 else { 15988 vm.hideGameStaffPopup(); 15989 } 15990 15991 vm.showModal = values[0]; 15992 }); 15993 15994 $scope.$watchGroup(['staff', 'gameDetails'], function (values) { 15995 var staff = values[0] || []; 15996 var gameDetails = values[1]; 15997 vm.gameDetails = gameDetails; 15998 15999 if (gameDetails) { 16000 var signedStaff = angular.fromJson(_.get(_.find(gameDetails.properties, { name: 'StaffSigned' }), 'value')) || []; 16001 var selectedStaff = gameDetails.staffList; 16002 staff.forEach(function (staff) { 16003 staff.status = ''; 16004 staff.signed = function (sign) { 16005 var isSigned = _.indexOf(signedStaff, staff.id) != -1; 16006 16007 if (angular.isDefined(sign)) { 16008 if (sign && !isSigned) { 16009 signedStaff.push(staff.id); 16010 $scope.onStaffSignedChange(signedStaff); 16011 } 16012 else if (!sign && isSigned) { 16013 signedStaff = _.without(signedStaff, staff.id); 16014 $scope.onStaffSignedChange(signedStaff); 16015 } 16016 } 16017 16018 return isSigned; 16019 }}); 16020 16021 vm.staff = _.filter(staff, function (staffMember) { 16022 var isSelected = _.find(selectedStaff, { id: staffMember.id }) != null; 16023 return !isSelected; 16024 }); 16025 16026 vm.selectedStaff = _.filter(staff, function (staffMember) { 16027 var isSelected = _.find(selectedStaff, { id: staffMember.id }) != null; 16028 return isSelected; 16029 }); ; 16030 } 16031 }) 16032 } 16033})(); 16034; 16035(function () { 16036 'use strict'; 16037 16038 angular 16039 .module('app.directives') 16040 .directive('scoreboardGameStaffPopup', scoreboardGameStaffPopup) 16041 16042 scoreboardGameStaffPopup.$inject = ['ModalService']; 16043 16044 function scoreboardGameStaffPopup(modalService) { 16045 return { 16046 restrict: 'E', 16047 scope: { 16048 show: '=', 16049 staff: '=', 16050 gameDetails: '=', 16051 onUpdate: '=', 16052 onStaffSignedChange: '=', 16053 refreshStaff: '=', 16054 }, 16055 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/game-staff-popup/game-staff-popup.tpl.html', 16056 controller: 'ScoreboardGameStaffPopupController', 16057 controllerAs: 'scoreboardGameStaffPopup', 16058 link: function (scope, element, attrs, controller) { 16059 var modal = modalService.init($('.game-staff-popup', element)); 16060 16061 element.on('$destroy', function () { 16062 $(document).off('click'); 16063 modal.element.off('hidden.bs.modal'); 16064 }); 16065 16066 controller.showGameStaffPopup = modal.show; 16067 controller.hideGameStaffPopup = modal.hide; 16068 16069 modal.element.on('hidden.bs.modal', function (e) { 16070 if (scope.show) { 16071 scope.show = false; 16072 scope.$apply(); 16073 } 16074 }) 16075 } 16076 }; 16077 } 16078})();; 16079(function () { 16080 'use strict'; 16081 16082 angular 16083 .module('app.directives') 16084 .controller('ScoreboardBasketballWidgetController', ScoreboardBasketballWidgetController); 16085 16086 ScoreboardBasketballWidgetController.$inject = ['$scope', '$q', 'ScoreboardBasketballService', 'SeasonService', 'StaffService', 'GameService', 'UrlService']; 16087 16088 function ScoreboardBasketballWidgetController($scope, $q, scoreboardBasketballService, seasonService, staffService, gameService, urlService) { 16089 var vm = this; 16090 16091 var details = angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' ')); 16092 vm.gameId = _.get(details, 'id'); 16093 vm.seasonId = _.get(details, 'seasonId'); 16094 vm.gameDetails = null; 16095 vm.seasonParameters = null; 16096 vm.reverseTeams = false; 16097 vm.staff = []; 16098 16099 vm.url = urlService; 16100 16101 getGameDetails(true); 16102 16103 seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId).then(function (parameters) { 16104 vm.seasonParameters = parameters.data || []; 16105 }) 16106 16107 staffService.getBySolutionId(__solutionId__).then(function (staff) { 16108 vm.staff = staff.data; 16109 }); 16110 16111 vm.showGameStaffPopup = false; 16112 16113 vm.openGameStaffPopup = function () { 16114 vm.showGameStaffPopup = true; 16115 } 16116 16117 vm.createEvent = function (event) { 16118 scoreboardBasketballService.createEvent(__solutionId__, vm.gameDetails.id, event) 16119 .then(function () { 16120 getGameDetails();
16121 //vm.showToast({ type: 'success', message: $translate.instant('widgets.games.scoreboard.basketball.actions.eventCreated') }); 16122 }) 16123 .catch(function () { 16124 //vm.showToast({ type: 'error', message: $translate.instant('widgets.games.scoreboard.basketball.actions.errorHasOccured') }); 16125 }); 16126 } 16127 16128 vm.onUpdateStaff = function (staff) { 16129 scoreboardBasketballService.updateStaffList(__solutionId__, vm.gameId, staff).then(function () { 16130 getGameDetails(); 16131 }) 16132 } 16133 16134 vm.onUpdateNote = function (note) { 16135 gameService.updateNote(vm.gameId, note).then(function () { 16136 $scope.$emit(`onNoteChange-${vm.gameId}`, note); 16137 }); 16138 } 16139 16140 vm.onStaffSignedChange = function (staffSigned) { 16141 gameService.updateStaffSigned(vm.gameId, staffSigned); 16142 } 16143 16144 vm.refreshStaff = function () { 16145 staffService.getBySolutionId(__solutionId__).then(function (staff) { 16146 vm.staff = staff.data; 16147 }); 16148 } 16149 16150 vm.startGame = function () { 16151 scoreboardBasketballService.startGame(__solutionId__, vm.gameId).then(function (result) { 16152 getGameDetails(); 16153 }); 16154 } 16155 16156 vm.onRosterChange = function () { 16157 var allPlayers = vm.visitorTeam.players.concat(vm.localTeam.players); 16158 var allStaff = vm.visitorTeam.staffs.concat(vm.localTeam.staffs); 16159 16160 var lineup = {}; 16161 lineup.gameId = vm.gameId; 16162 lineup.players = allPlayers; 16163 lineup.staffs = allStaff; 16164 16165 scoreboardBasketballService.updateLineup(__solutionId__, vm.gameId, lineup); 16166 } 16167 16168 vm.onPlayerStaffChange = function () { 16169 getGameDetails(); 16170 } 16171 16172 vm.updateProperties = function (teamId) { 16173 var team = _.find(vm.gameDetails.teamList, { id: teamId }); 16174 var onCourtPlayers = _.filter(team.players, { onField: true, status: 'Selected' }); 16175 var properties = []; 16176 16177 properties.push({ name: 'color', value: team.teamColor }); 16178 properties.push({ name: 'playerList', value: JSON.stringify(_.map(onCourtPlayers, function (player) { return player.id })) }); 16179 properties.push({ name: 'bonusPts', value: team.bonus }); 16180 properties.push({ name: 'signedStaff', value: JSON.stringify(team.signedStaff) }); 16181 scoreboardBasketballService.updateProperties(__solutionId__, vm.gameId, teamId, properties); 16182 } 16183 16184 vm.onCloseGame = function () { 16185 scoreboardBasketballService.closeGame(__solutionId__, vm.gameId).then(function () { 16186 getGameDetails(); 16187 }); 16188 } 16189 16190 vm.onGameUpdate = function () { 16191 scoreboardBasketballService.updateGame(__solutionId__, vm.gameId, vm.gameDetails).then(function () { 16192 getGameDetails(); 16193 }) 16194 } 16195 16196 vm.onGamePeriodUpdate = function (periodId) { 16197 scoreboardBasketballService.updatePeriod(__solutionId__, vm.gameId, periodId).then(function () { 16198 getGameDetails(); 16199 }) 16200 } 16201 16202 vm.onGameRollback = function () { 16203 scoreboardBasketballService.rollback(__solutionId__, vm.gameId).then(function () { 16204 getGameDetails(); 16205 }); 16206 } 16207 16208 vm.onReverseTeam = function () { 16209 vm.gameDetails.properties = vm.gameDetails.properties || []; 16210 16211 var reverseTeamProperty = _.find(vm.gameDetails.properties, { name: "reverse" }); 16212 16213 if (reverseTeamProperty) { 16214 reverseTeamProperty.value = vm.reverseTeams; 16215 } 16216 else { 16217 vm.gameDetails.properties.push({ name: "reverse", value: vm.reverseTeams }) 16218 } 16219 16220 vm.onGameUpdate(); 16221 } 16222 16223 vm.onUpdateEvent = function (content) { 16224 scoreboardBasketballService.updateEvent(__solutionId__, vm.gameId, content).then(function () { 16225 getGameDetails(); 16226 }); 16227 } 16228 16229 vm.onDeleteEvent = function (eventId) { 16230 scoreboardBasketballService.deleteEvent(__solutionId__, vm.gameId, eventId).then(function () { 16231 getGameDetails(); 16232 }); 16233 } 16234 16235 function getGameDetails() { 16236 scoreboardBasketballService.getDetails(__solutionId__, vm.gameId).then(function (response) { 16237 16238 vm.gameDetails = response.data; 16239 16240 vm.visitorTeam = _.find(vm.gameDetails.teamList, { id: vm.gameDetails.visitorTeamId }); 16241 vm.localTeam = _.find(vm.gameDetails.teamList, { id: vm.gameDetails.localTeamId }); 16242 16243 vm.visitorTeam.teamColor = _.get(_.find(vm.visitorTeam.teamProperties || [], { name: 'color' }), 'value'); 16244 vm.localTeam.teamColor = _.get(_.find(vm.localTeam.teamProperties || [], { name: 'color' }), 'value'); 16245 16246 vm.visitorTeam.bonus = _.get(_.find(vm.visitorTeam.teamProperties || [], { name: 'bonusPts' }), 'value'); 16247 vm.localTeam.bonus = _.get(_.find(vm.localTeam.teamProperties || [], { name: 'bonusPts' }), 'value'); 16248 16249 vm.visitorTeam.signedStaff = angular.fromJson(_.get(_.find(vm.visitorTeam.teamProperties || [], { name: 'signedStaff' }), 'value')) || []; 16250 vm.localTeam.signedStaff = angular.fromJson(_.get(_.find(vm.localTeam.teamProperties || [], { name: 'signedStaff' }), 'value')) || []; 16251 16252 var visitorOnFields = angular.fromJson(_.get(_.find(vm.visitorTeam.teamProperties || [], { name: 'playerList' }), 'value')); 16253 var localOnFields = angular.fromJson(_.get(_.find(vm.localTeam.teamProperties || [], { name: 'playerList' }), 'value')); 16254 16255 _.forEach(visitorOnFields || [], function (playerId) { 16256 var teamPlayer = _.find(vm.visitorTeam.players, { id: playerId }) 16257 if (teamPlayer.status == 'Selected') { 16258 teamPlayer.onField = true; 16259 } 16260 }) 16261 16262 _.forEach(localOnFields || [], function (playerId) { 16263 var teamPlayer = _.find(vm.localTeam.players, { id: playerId }) 16264 if (teamPlayer.status == 'Selected') { 16265 teamPlayer.onField = true; 16266 } 16267 }) 16268 16269 vm.timeouts = {}; 16270 vm.timeouts[vm.visitorTeam.id] = []; 16271 vm.timeouts[vm.localTeam.id] = []; 16272 16273 var timeouts = _.clone(vm.timeouts); 16274 var timeoutsData = _.filter(response.data.eventList, { eventtypeid: 15 }); 16275 16276 timeoutsData.forEach(function (timeout) { 16277 var timeoutContent = angular.fromJson(timeout.content); 16278 var teamId = _.get(_.find(timeoutContent.properties, { name: 'team' }), 'id') 16279 16280 timeoutContent.id = timeout.id; 16281 timeouts[teamId].push(timeoutContent); 16282 }) 16283 16284 vm.timeouts = timeouts; 16285 16286 if (!vm.visitorTeam.teamColor) { 16287 vm.visitorTeam.teamColor = '#000000'; 16288 } 16289 16290 if (!vm.localTeam.teamColor) { 16291 vm.localTeam.teamColor = '#FFFFFF'; 16292 } 16293 16294 document.documentElement.style.setProperty(`--team-color-${vm.visitorTeam.id}`, vm.visitorTeam.teamColor); 16295 document.documentElement.style.setProperty(`--team-color-${vm.localTeam.id}`, vm.localTeam.teamColor); 16296 16297 var reverseProperty = _.find(vm.gameDetails.properties || [], { name: 'reverse' }) 16298 if (reverseProperty) { 16299 var reverseTeams = reverseProperty.value === "true"; 16300 vm.gameDetails.reverseTeams = reverseTeams 16301 vm.reverseTeams = reverseTeams; 16302 } 16303 }); 16304 } 16305 } 16306})(); 16307; 16308(function () { 16309 'use strict'; 16310 16311 angular 16312 .module('app.directives') 16313 .directive('scoreboardBasketball', scoreboardBasketball) 16314 16315 scoreboardBasketball.$inject = []; 16316 16317 function scoreboardBasketball() { 16318 return { 16319 restrict: 'E', 16320 scope: { 16321 widget: '=' 16322 }, 16323 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/scoreboard-basketball.tpl.html', 16324 controller: 'ScoreboardBasketballWidgetController', 16325 controllerAs: 'scoreboardBasketball' 16326 }; 16327 } 16328})();; 16329(function () { 16330 'use strict'; 16331 16332 angular 16333 .module('app.directives') 16334 .controller('ScoreboardBasketballSummaryWidgetController', ScoreboardBasketballSummaryWidgetController); 16335 16336 ScoreboardBasketballSummaryWidgetController.$inject = ['$scope', '$translate', 'ordinalFilter'] 16337 16338 function ScoreboardBasketballSummaryWidgetController($scope, $translate, ordinalFilter) { 16339 var vm = this; 16340 16341 vm.gameDetails = $scope.gameDetails; 16342 vm.gameDetails.visitorPeriods = { 1: 26, 2: 31, 3: 6, 4: 0 }; 16343 vm.gameDetails.localPeriods = { 1: 20, 2: 12, 3: 20, 4: 3 }; 16344 vm.range = _.range; 16345 vm.useTime = false; 16346 vm.period = ''; 16347 16348 vm.periodNumber = _.parseInt(_.get(_.find($scope.seasonParameters, { Code: 'PERIODNUMBER' }), 'Value')); 16349 vm.overtimeNumber = _.parseInt(_.get(_.find($scope.seasonParameters, { Code: 'OVERTIMENUMBER' }), 'Value')); 16350 16351 var useTimeParameter = _.get(_.find($scope.seasonParameters, { Code: 'USETIME' }), 'Value'); 16352 if (useTimeParameter) { 16353 vm.useTime = useTimeParameter === "1" 16354 } 16355 16356 setTeams(); 16357 16358 $scope.$watch('gameDetails', function (gameDetails) { 16359 vm.gameDetails = gameDetails; 16360 vm.gameDetails.visitorPeriods = { 1: 26, 2: 31, 3: 6, 4: 0 }; 16361 vm.gameDetails.localPeriods = { 1: 20, 2: 12, 3: 20, 4: 3 }; 16362 16363 vm.period = vm.gameDetails.periodId; 16364 16365 if (vm.gameDetails.periodId <= vm.periodNumber) { 16366 vm.period = ordinalFilter(vm.gameDetails.periodId); 16367 } 16368 else { 16369 vm.period = $translate.instant('widgets.games.scoreboard.basketball.timing.OT') + ' ' + (vm.gameDetails.periodId - vm.periodNumber); 16370 } 16371 16372 setTeams(); 16373 }, true) 16374 16375 function setTeams() { 16376 var visitorTeam = { result: vm.gameDetails.visitorResult, avatar: vm.gameDetails.visitorTeamAvatar, name: vm.gameDetails.visitorTeamName }; 16377 var localTeam = { result: vm.gameDetails.localResult, avatar: vm.gameDetails.localTeamAvatar, name: vm.gameDetails.localTeamName }; 16378 16379 vm.leftTeam = visitorTeam; 16380 vm.rightTeam = localTeam; 16381 if (vm.gameDetails.reverseTeams) { 16382 vm.leftTeam = localTeam; 16383 vm.rightTeam = visitorTeam; 16384 } 16385 } 16386 } 16387})(); 16388; 16389(function () { 16390 'use strict'; 16391 16392 angular 16393 .module('app.directives') 16394 .directive('scoreboardBasketballSummary', scoreboardBasketballSummary) 16395 16396 scoreboardBasketballSummary.$inject = []; 16397 16398 function scoreboardBasketballSummary() { 16399 return { 16400 restrict: 'E', 16401 scope: { 16402 widget: '=', 16403 gameDetails: '=', 16404 seasonParameters: '=' 16405 }, 16406 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/summary/scoreboard-basketball-summary.tpl.html', 16407 controller: 'ScoreboardBasketballSummaryWidgetController', 16408 controllerAs: 'scoreboardBasketballSummary' 16409 }; 16410 } 16411})();; 16412(function () { 16413 'use strict'; 16414 16415 angular 16416 .module('app.directives') 16417 .controller('ScoreboardBasketballTimingWidgetController', ScoreboardBasketballTimingWidgetController); 16418 16419 ScoreboardBasketballTimingWidgetController.$inject = ['$scope', '$translate']; 16420 16421 function ScoreboardBasketballTimingWidgetController($scope, $translate) { 16422 var vm = this; 16423 16424 vm.periodNumber = _.parseInt(_.get(_.find($scope.seasonParameters, { Code: 'PERIODNUMBER' }), 'Value')); 16425 vm.overtimeNumber = _.parseInt(_.get(_.find($scope.seasonParameters, { Code: 'OVERTIMENUMBER' }), 'Value')); 16426 vm.repeatOvertime = _.get(_.find($scope.seasonParameters, { Code: 'OVERTIMEREPEAT' }), 'Value') == '1'; 16427 16428 vm.useTime = false; 16429 vm.period = ""; 16430 16431 var useTimeParameter = _.get(_.find($scope.seasonParameters, { Code: 'USETIME' }), 'Value'); 16432 if (useTimeParameter) { 16433 vm.useTime = useTimeParameter === "1" 16434 } 16435 16436 vm.showEndOfQuarter = function () { 16437 return (vm.gameDetails.periodId < vm.overtimeNumber + vm.periodNumber) || vm.repeatOvertime; 16438 } 16439 16440 vm.showCancelEndOfQuarter = function () { 16441 var periodEvents = _.filter(vm.gameDetails.eventList, { periodid: vm.gameDetails.periodId }); 16442 16443 return vm.gameDetails.periodId > 1 && periodEvents.length == 0; 16444 } 16445 16446 vm.errors = { 16447 time: { error: false, value: '' } 16448 } 16449 16450 vm.gameDetails = $scope.gameDetails; 16451 vm.time = function (time) { 16452 if (angular.isDefined(time)) { 16453 vm.errors.time.error = false; 16454 if (time.match(/^\d$/)) { 16455 time = `0${time}:00`; 16456 } 16457 16458 if (time.match(/^\d{4}$/)) { 16459 time = time.slice(0, 2) + ':' + time.slice(2); 16460 } 16461 16462 if (time.match(/^\d{2}:\d{2}$/)) { 16463 vm.gameDetails.time = `00:${time}`; 16464 16465 if ($scope.onGameUpdate) { 16466 $scope.onGameUpdate(); 16467 } 16468 } 16469 else { 16470 vm.errors.time.error = true; 16471 vm.errors.time.value = time; 16472 } 16473 } 16474 16475 if (vm.errors.time.error) { 16476 return vm.errors.time.value; 16477 } 16478 16479 return vm.gameDetails.time.slice(-5); 16480 } 16481 16482 vm.closeGame = function () { 16483 if ($scope.onCloseGame) { 16484 $scope.onCloseGame(); 16485 } 16486 } 16487 16488 vm.endQuarter = function () { 16489 if ($scope.onPeriodUpdate) { 16490 $scope.onPeriodUpdate(vm.gameDetails.periodId + 1); 16491 } 16492 } 16493 16494 vm.cancelEndQuarter = function () { 16495 if ($scope.onPeriodUpdate) { 16496 if (vm.gameDetails.periodId > 1) { 16497 $scope.onPeriodUpdate(vm.gameDetails.periodId - 1); 16498 } 16499 } 16500 } 16501 16502 vm.cancelEndGame = function () { 16503 if ($scope.onRollback) { 16504 $scope.onRollback(); 16505 } 16506 } 16507 16508 vm.onTimeKeypress = function (event) { 16509 var newchar = String.fromCharCode(event.charCode || event.keyCode); 16510 16511 if (!newchar.match(/[0-9:]/)) { 16512 event.preventDefault(); 16513 } 16514 } 16515 16516 $scope.$watch('gameDetails', function (gameDetails) { 16517 vm.gameDetails = gameDetails; 16518 vm.period = vm.gameDetails.periodId; 16519 16520 if (vm.gameDetails.periodId <= vm.periodNumber) { 16521 vm.period = vm.gameDetails.periodId; 16522 } 16523 else { 16524 vm.period = $translate.instant('widgets.games.scoreboard.basketball.timing.OT') + ' ' + (vm.gameDetails.periodId - vm.periodNumber); 16525 } 16526 }) 16527 } 16528})(); 16529; 16530(function () { 16531 'use strict'; 16532 16533 angular 16534 .module('app.directives') 16535
16535 .directive('scoreboardBasketballTiming', scoreboardBasketballTiming) 16536 16537 scoreboardBasketballTiming.$inject = []; 16538 16539 function scoreboardBasketballTiming() { 16540 return { 16541 restrict: 'E', 16542 scope: { 16543 widget: '=', 16544 gameDetails: '=', 16545 seasonParameters: '=', 16546 onCloseGame: '=', 16547 onGameUpdate: '=', 16548 onPeriodUpdate: '=', 16549 onRollback: '=', 16550 }, 16551 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/timing/scoreboard-basketball-timing.tpl.html', 16552 controller: 'ScoreboardBasketballTimingWidgetController', 16553 controllerAs: 'scoreboardBasketballTiming' 16554 }; 16555 } 16556})();; 16557(function () { 16558 'use strict'; 16559 16560 angular 16561 .module('app.directives') 16562 .controller('ScoreboardBasketballActionsWidgetController', ScoreboardBasketballActionsWidgetController); 16563 16564 ScoreboardBasketballActionsWidgetController.$inject = ['$scope', '$translate', 'ScoreboardBasketballService', 'SolutionService']; 16565 16566 function ScoreboardBasketballActionsWidgetController($scope, $translate, scoreboardBasketballService, solutionService) { 16567 var vm = this; 16568 var FOUL_EVENT_ID = 14; 16569 16570 vm.gameDetails = $scope.gameDetails; 16571 vm.showPopup = false; 16572 vm.showStaff = false; 16573 vm.showFreeThrows = false; 16574 vm.target = null; 16575 vm.selectedAction = null; 16576 vm.selectedValue = null; 16577 vm.bonusConfig = 8; 16578 16579 vm.foulsLimitConfig = _.get(_.find($scope.seasonParameters, { Code: 'FOULSLIMIT' }), 'Value') || 5; 16580 vm.periodNumber = _.parseInt(_.get(_.find($scope.seasonParameters, { Code: 'PERIODNUMBER' }), 'Value') || "0"); 16581 16582 vm.usePresence = false; 16583 16584 solutionService.getSolutionById(__solutionId__).then(function (result) { 16585 var configs = result.data.configs; 16586 var usePresence = false 16587 var scoreboardSettingsConfig = _.find(configs, { code: 'SCOREBOARDSETTINGS' }); 16588 if (scoreboardSettingsConfig) { 16589 var parsedScoreboardSettingsConfig = JSON.parse(scoreboardSettingsConfig.value); 16590 var usePresenceConfig = _.find(parsedScoreboardSettingsConfig, { name: 'USEPRESENCE' }); 16591 if (usePresenceConfig) { 16592 usePresence = usePresenceConfig.value == 1; 16593 } 16594 } 16595 16596 vm.usePresence = usePresence; 16597 }); 16598 16599 processBonusConfig(); 16600 16601 vm.bonusReachedTeam = null; 16602 vm.selectedPlayer = null; 16603 vm.toast = {}; 16604 16605 vm.teams = vm.gameDetails.teamList; 16606 vm.visitorTeam = _.find(vm.teams, { id: vm.gameDetails.visitorTeamId }); 16607 vm.localTeam = _.find(vm.teams, { id: vm.gameDetails.localTeamId }); 16608 setFouls(); 16609 16610 $scope.$watch('gameDetails', function (gameDetails) { 16611 vm.gameDetails = gameDetails; 16612 vm.teams = vm.gameDetails.teamList; 16613 processBonusConfig(); 16614 setFouls(); 16615 }, true) 16616 16617 vm.teams.sort(function (a, b) { 16618 if (a.id == vm.gameDetails.visitorTeamId) { 16619 return -1; 16620 } 16621 else if (b.id == vm.gameDetails.visitorTeamId) { 16622 return 1; 16623 } 16624 16625 return 0; 16626 }) 16627 16628 vm.clickAction = function (action, value) { 16629 vm.showPopup = true; 16630 vm.target = $(event.currentTarget); 16631 vm.selectedAction = action; 16632 vm.selectedValue = value; 16633 16634 if (action == 'foul') { 16635 vm.showStaff = true; 16636 vm.showFreeThrows = true; 16637 if (value == 'technical') { 16638 vm.showTechnicalFoulType = true; 16639 } 16640 else { 16641 vm.showTechnicalFoulType = false; 16642 } 16643 } 16644 else { 16645 vm.showStaff = false; 16646 vm.showFreeThrows = false; 16647 } 16648 } 16649 16650 vm.closePopup = function () { 16651 vm.showPopup = false; 16652 vm.selectedAction = null; 16653 vm.selectedValue = null; 16654 } 16655 16656 vm.playerSelect = function (player, type, freeThrows, technicalFoulType) { 16657 vm.selectedPlayer = player; 16658 switch (vm.selectedAction) { 16659 case 'points': 16660 case 'missed': 16661 var event = { type: 'shoot', period: vm.gameDetails.periodId, properties: [], details: [], time: vm.gameDetails.time }; 16662 event.properties.push({ id: player.id, teamId: player.teamId, name: 'shooter' }); 16663 event.details.push({ name: 'success', value: vm.selectedAction == 'points' }); 16664 event.details.push({ name: 'pointsCount', value: vm.selectedValue });
16665 break; 16666 case 'foul': 16667 var event = { type: 'fault', period: vm.gameDetails.periodId, properties: [], details: [], time: vm.gameDetails.time }; 16668 event.properties.push({ id: player.id, teamId: player.teamId, name: type }); 16669 event.details.push({ name: 'type', value: vm.selectedValue }); 16670 event.details.push({ name: 'freeThrows', value: freeThrows }); 16671 16672 if (technicalFoulType) { 16673 event.details.push({ name: 'technicalFoulType', value: technicalFoulType }); 16674 } 16675 16676 if (type == 'player') { 16677 player.fouls = player.fouls + 1; 16678 if (player.fouls == vm.foulsLimitConfig || player.fouls == vm.foulsLimitConfig - 1) { 16679 vm.showFoulsLimitReached(); 16680 } 16681 16682 if (player.teamId == vm.visitorTeam.id) { 16683 vm.visitorTeam.fouls++; 16684 16685 if (vm.visitorTeam.fouls == vm.bonusConfig || vm.visitorTeam.fouls == vm.bonusConfig - 1) { 16686 vm.bonusReachedTeam = vm.visitorTeam; 16687 vm.showBonusReached(); 16688 } 16689 } 16690 else if (player.teamId == vm.localTeam.id) { 16691 vm.localTeam.fouls++; 16692 16693 if (vm.localTeam.fouls == vm.bonusConfig || vm.localTeam.fouls == vm.bonusConfig - 1) { 16694 vm.bonusReachedTeam = vm.localTeam; 16695 vm.showBonusReached(); 16696 } 16697 } 16698 } 16699 16700 break; 16701 case 'rebound':
16702 var event = { type: 'rebound', period: vm.gameDetails.periodId, properties: [], details: [], time: vm.gameDetails.time }; 16703 event.properties.push({ id: player.id, teamId: player.teamId, name: 'shooter' }); 16704 event.details.push({ name: 'type', value: vm.selectedValue }); 16705 break; 16706 case 'presence': 16707 var event = { type: 'presence', period: vm.gameDetails.periodId, properties: [], details: [], time: vm.gameDetails.time }; 16708 event.properties.push({ id: player.id, teamId: player.teamId, name: 'player' }); 16709 break; 16710 } 16711 16712 if ($scope.createEvent && event) { 16713 $scope.createEvent(event) 16714 } 16715 } 16716 16717 function setFouls() { 16718 vm.visitorTeam.fouls = 0; 16719 vm.localTeam.fouls = 0; 16720 16721 vm.gameDetails.eventList.forEach(function (event) { 16722 if (event.eventtypeid == FOUL_EVENT_ID && 16723 ((vm.gameDetails.periodId <= vm.periodNumber && event.periodid == vm.gameDetails.periodId) || 16724 (vm.gameDetails.periodId > vm.periodNumber && event.periodid >= vm.periodNumber))) { 16725 var content = JSON.parse(event.content); 16726 var isStaff = _.find(content.properties, { name: 'staff' }) != null; 16727 16728 if (!isStaff) { 16729 if (event.teamid == vm.visitorTeam.id) { 16730 vm.visitorTeam.fouls++; 16731 } 16732 else if (event.teamid == vm.localTeam.id) { 16733 vm.localTeam.fouls++; 16734 } 16735 } 16736 } 16737 }) 16738 } 16739 16740 function processBonusConfig() 16741 { 16742 vm.bonusConfig = 8; 16743 var bonusSeasonConfig = _.get(_.find($scope.seasonParameters, { Code: 'BONUSFOULS' }), 'Value'); 16744 if (bonusSeasonConfig) { 16745 bonusSeasonConfig = angular.fromJson(bonusSeasonConfig) || []; 16746 16747 var period = vm.gameDetails.periodId <= vm.periodNumber ? vm.gameDetails.periodId : vm.periodNumber; 16748 var bonusPeriod = _.get(_.find(bonusSeasonConfig, { period: period }), 'value'); 16749 if (bonusPeriod) { 16750 vm.bonusConfig = bonusPeriod; 16751 } 16752 } 16753 } 16754 } 16755})(); 16756; 16757(function () { 16758 'use strict'; 16759 16760 angular 16761 .module('app.directives') 16762 .directive('scoreboardBasketballActions', scoreboardBasketballActions) 16763 16764 scoreboardBasketballActions.$inject = ['ModalService']; 16765 16766 function scoreboardBasketballActions(modalService) { 16767 return { 16768 restrict: 'E', 16769 replace: true, 16770 scope: { 16771 widget: '=', 16772 createEvent: '=', 16773 gameDetails: '=', 16774 seasonParameters: '=' 16775 }, 16776 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/actions/scoreboard-basketball-actions.tpl.html', 16777 controller: 'ScoreboardBasketballActionsWidgetController', 16778 controllerAs: 'scoreboardBasketballActions', 16779 link: function ($scope, element, attrs, controller) { 16780 var bonusModal = modalService.init($("#scoreboard-basketball-bonus-modal", element)); 16781 var foulsLimitReachedModal = modalService.init($("#scoreboard-basketball-player-fouls-limit", element)); 16782 16783 element.on('$destroy', function () { 16784 $(document).off('click'); 16785 }); 16786 16787 controller.showBonusReached = bonusModal.show; 16788 controller.hideBonusReached = bonusModal.hide; 16789 16790 controller.showFoulsLimitReached = foulsLimitReachedModal.show; 16791 controller.hideFoulsLimitReached = foulsLimitReachedModal.hide; 16792 16793 controller.showToast = function (toast) { 16794 controller.toast = toast; 16795 $('.toast', element).toast('show'); 16796 } 16797 } 16798 }; 16799 } 16800})();; 16801(function () { 16802 'use strict'; 16803 16804 angular 16805 .module('app.directives') 16806 .controller('ScoreboardBasketballRosterWidgetController', ScoreboardBasketballRosterWidgetController); 16807 16808 ScoreboardBasketballRosterWidgetController.$inject = ['$scope', '$translate', '$interval', 'PositionService', 'SolutionService', 'ScoreboardBasketballService'] 16809 16810 function ScoreboardBasketballRosterWidgetController($scope, $translate, $interval, positionService, solutionService, scoreboardBasketballService) { 16811 var vm = this; 16812 var FOULS_ID = 156; 16813 var POINTS_ID = 132; 16814 var PRESENCE_ID = 169; 16815 var timeoutsTypes = { 16816 GAME: 'game', 16817 HALF: 'half', 16818 QUARTER: 'quarter' 16819 } 16820 16821 vm.MAX_TIMEOUTS = 2; 16822 16823 vm.gameDetails = $scope.gameDetails; 16824 vm.team = $scope.team; 16825 vm.btnColor = '#000000'; 16826 vm.showRoster = false; 16827 vm.sort = 'number'; 16828 vm.direction = 'asc'; 16829 vm.sortStaff = 'name'; 16830 vm.directionStaff = 'asc'; 16831 vm.sortedFieldPlayers = sortFieldPlayers(vm.team.players); 16832 vm.staffPositions = positionService.getStaffTeamPositions(); 16833 vm.foulsLimitConfig = _.get(_.find($scope.seasonParameters, { Code: 'FOULSLIMIT' }), 'Value') || 5; 16834 vm.periodNumber = _.get(_.find($scope.seasonParameters, { Code: 'PERIODNUMBER' }), 'Value'); 16835 vm.timeoutsConfig = _.get(_.find($scope.seasonParameters, { Code: 'TIMEOUTS' }), 'Value'); 16836 vm.timeoutsDuration = 0; 16837 vm.timeoutsDurationOvertime = 0; 16838 vm.timer = 0; 16839 vm.timerInterval = null; 16840 vm.half = vm.gameDetails.periodId > vm.periodNumber / 2; 16841 vm.isOvertime = vm.gameDetails.periodId > vm.periodNumber; 16842 vm.showAddPlayer = false; 16843 vm.showAddStaff = false; 16844 vm.selectedTeamId = null; 16845 vm.selectedPlayer = null; 16846 vm.selectedStaff = null; 16847 vm.showLevel = false; 16848 vm.usePresence = false; 16849 16850 solutionService.getSolutionById(__solutionId__).then(function (result) { 16851 var configs = result.data.configs; 16852 var showLevel = false; 16853 var usePresence = false 16854 var scoreboardSettingsConfig = _.find(configs, { code: 'SCOREBOARDSETTINGS' }); 16855 if (scoreboardSettingsConfig) { 16856 var parsedScoreboardSettingsConfig = JSON.parse(scoreboardSettingsConfig.value); 16857 var showLevelConfig = _.find(parsedScoreboardSettingsConfig, { name: 'SHOWLEVEL' });
16858 if (showLevelConfig) { 16859 showLevel = showLevelConfig.value == 1 16860 } 16861 16862 var usePresenceConfig = _.find(parsedScoreboardSettingsConfig, { name: 'USEPRESENCE' }); 16863 if (usePresenceConfig) { 16864 usePresence = usePresenceConfig.value == 1; 16865 } 16866 } 16867 vm.showLevel = showLevel; 16868 vm.usePresence = usePresence; 16869 }); 16870 16871 processPlayers(); 16872 16873 processTimeoutsConfig() 16874 16875 vm.allNumbers = []; 16876 vm.disabledNumbers = []; 16877 vm.selectedInfo = 'faults'; 16878 16879 vm.disabledNumbers = vm.team.players.map(function (player) { 16880 return player.number; 16881 }); 16882 vm.allNumbers = []; 16883 vm.allNumbers.push("0"); 16884 vm.allNumbers.push("00"); 16885 16886 for (let i = 1; i <= 99; i++) { 16887 vm.allNumbers.push(i.toString()); 16888 } 16889 16890 vm.changeNumber = function (playerId, number) { 16891 var player = _.find(vm.team.players, { id: _.parseInt(playerId) }); 16892 if (player.status == 'Selected') { 16893 var oldNumber = player.number; 16894 player.number = number; 16895 vm.disabledNumbers = vm.team.players.map(function (player) { 16896 return player.number; 16897 }); 16898 16899 if (oldNumber != player.number) { 16900 vm.onRosterChange(); 16901 } 16902 } 16903 } 16904 16905 vm.onRosterChange = function () { 16906 if ($scope.onRosterChange) { 16907 $scope.onRosterChange(); 16908 } 16909 } 16910 16911 vm.onPlayerStaffChange = function () { 16912 if ($scope.onPlayerStaffChange) { 16913 $scope.onPlayerStaffChange(); 16914 } 16915 } 16916 16917 vm.range = _.range; 16918 16919 vm.getStaffPosition = positionService.getStaffPosition; 16920 16921 vm.setOnField = function (player) { 16922 player.onField = !player.onField; 16923 if ($scope.onPropertiesUpdate) { 16924 $scope.onPropertiesUpdate(vm.team.id); 16925 } 16926 } 16927 16928 vm.setTimeouts = function (timeout) { 16929 var currentTimeout = _.clone(timeout); 16930 16931 if (timeout.number == 1 && (vm.half == true && !vm.isOvertime) && timeout.active == false && !timeout.ongoing) { 16932 timeout.active = true; 16933 timeout.ongoing = true; 16934 } 16935 else { 16936 var compareNumber; 16937 if (timeout.active) { 16938 compareNumber = timeout.number + 1; 16939 } 16940 else { 16941 compareNumber = timeout.number - 1; 16942 } 16943 16944 var preventChange = false; 16945 var prevTimeout = vm.getTimeout(compareNumber); 16946 if (prevTimeout) { 16947 if (prevTimeout.active != !timeout.active) { 16948 preventChange = true; 16949 } 16950 } 16951 16952 if (!preventChange) { 16953 16954 if (timeout.ongoing) { 16955 timeout.active = true; 16956 } 16957 else { 16958 timeout.active = !timeout.active; 16959 } 16960 timeout.ongoing = false; 16961 } 16962 16963 if ((!currentTimeout.active || currentTimeout.ongoing) && (timeout.active && !timeout.ongoing)) { 16964 vm.showTimeoutTimer(); 16965 } 16966 } 16967 16968 vm.updateTimeout(currentTimeout, timeout); 16969 } 16970 16971 vm.showTimeoutTimer = function () { 16972 vm.showTimerModal(); 16973 16974 var duration = 0; 16975 if (!vm.isOvertime) { 16976 duration = vm.timeoutsDuration; 16977 } 16978 else { 16979 duration = vm.timeoutsDurationOvertime; 16980 } 16981 16982 vm.timer = duration - 10; 16983 16984 vm.timer = vm.timer < 0 ? 0 : vm.timer; 16985 16986 vm.timerInterval = $interval(function () { 16987 if (vm.timer > 0) { 16988 vm.timer -= 1; 16989 } 16990 16991 if (vm.timer == 0) { 16992 $interval.cancel(vm.timerInterval); 16993 } 16994 }, 1000); 16995 } 16996 16997 vm.updateTimeout = function (timeout, newTimeout) { 16998 var event = { type: 'timeout', period: vm.gameDetails.periodId, properties: [], details: [], time: vm.gameDetails.time }; 16999 event.properties.push({ id: vm.team.id, name: 'team' }); 17000 event.details.push({ name: 'number', value: newTimeout.number }); 17001 event.details.push({ name: 'ongoing', value: newTimeout.ongoing }); 17002 17003 if (!timeout.active && newTimeout.active) { 17004 scoreboardBasketballService.createEvent(__solutionId__, vm.gameDetails.id, event) 17005 .then(function (response) { 17006 var event = response.data; 17007 var timeout = _.find(vm.timeouts, { number: newTimeout.number })
17008 timeout.id = event.id; 17009 // vm.showToast({ type: 'success', message: $translate.instant('widgets.games.scoreboard.basketball.actions.eventCreated') }); 17010 }) 17011 .catch(function () { 17012 // vm.showToast({ type: 'error', message: $translate.instant('widgets.games.scoreboard.basketball.actions.errorHasOccured') }); 17013 }); 17014 } 17015 else if (timeout.ongoing != newTimeout.ongoing) { 17016 event.id = newTimeout.id; 17017 scoreboardBasketballService.updateEvent(__solutionId__, vm.gameDetails.id, event) 17018 .then(function () { 17019 //vm.showToast({ type: 'success', message: $translate.instant('widgets.games.scoreboard.basketball.actions.eventCreated') }); 17020 }) 17021 .catch(function () { 17022 //vm.showToast({ type: 'error', message: $translate.instant('widgets.games.scoreboard.basketball.actions.errorHasOccured') }); 17023 }); 17024 } 17025 else if (timeout.active && !newTimeout.active) { 17026 scoreboardBasketballService.deleteEvent(__solutionId__, vm.gameDetails.id, newTimeout.id) 17027 .then(function () { 17028 newTimeout.id = null; 17029 // vm.showToast({ type: 'success', message: $translate.instant('widgets.games.scoreboard.basketball.actions.eventCreated') }); 17030 }) 17031 .catch(function () { 17032 // vm.showToast({ type: 'error', message: $translate.instant('widgets.games.scoreboard.basketball.actions.errorHasOccured') }); 17033 }); 17034 } 17035 } 17036 17037 vm.getTimeout = function (number) { 17038 var timeout = _.find(vm.timeouts, { number: number }); 17039 return timeout; 17040 } 17041 17042 vm.addPlayer = function (player) { 17043 vm.selectedPlayer = player; 17044 vm.showAddPlayer = true; 17045 } 17046 17047 vm.addStaff = function (staff) { 17048 vm.selectedStaff = staff; 17049 vm.showAddStaff = true; 17050 } 17051 17052 $scope.$watch(function () { 17053 return vm.team.teamColor; 17054 }, function (newColor) { 17055 if (newColor.length == 4) { 17056 var subresult = /^#?([a-f\d]{3})$/i.exec(newColor); 17057 newColor = `#${subresult[1]}${subresult[1]}` 17058 } 17059 17060 document.documentElement.style.setProperty(`--team-color-${vm.team.id}`, newColor); 17061 if (newColor.toUpperCase() == '#FFFFFF') { 17062 document.documentElement.style.setProperty(`--team-border-${vm.team.id}`, '#888888'); 17063 } 17064 else { 17065 document.documentElement.style.setProperty(`--team-border-${vm.team.id}`, newColor); 17066 } 17067 17068 var rgb = hexToRgb(newColor); 17069 17070 var colorContrast = (299 * rgb.r + 587 * rgb.g + 114 * rgb.b) / 1000; 17071 17072 if (Math.abs(0 - colorContrast) > Math.abs(255 - colorContrast)) { 17073 vm.btnColor = '#000000'; 17074 } 17075 else { 17076 vm.btnColor = '#FFFFFF' 17077 } 17078 }); 17079 17080 $scope.$watch('team', function (team) { 17081 vm.team = team; 17082 vm.sortedFieldPlayers = _.filter(sortFieldPlayers(vm.team.players), { status: 'Selected' }); 17083 _.forEach(vm.team.players, function (player) { 17084 player.points = _.reduce(player.stats, function (prev, value) { 17085 if (value.statTypeId == POINTS_ID) { 17086 return prev + value.value; 17087 } 17088 return prev; 17089 }, 0); 17090 17091 player.fouls = _.reduce(player.stats, function (prev, value) { 17092 if (value.statTypeId == FOULS_ID) { 17093 return prev + value.value; 17094 } 17095 return prev; 17096 }, 0); 17097 17098 player.presences = _.reduce(player.stats, function (prev, value) { 17099 if (value.statTypeId == PRESENCE_ID) { 17100 return prev + value.value; 17101 } 17102 return prev; 17103 }, 0); 17104 }) 17105 }, true) 17106 17107 $scope.$watch('gameDetails', function (gameDetails) { 17108 vm.gameDetails = gameDetails; 17109 vm.half = vm.gameDetails.periodId > vm.periodNumber / 2; 17110 vm.isOvertime = vm.gameDetails.periodId > vm.periodNumber; 17111 17112 processPlayers(); 17113 processTimeoutsConfig(); 17114 }) 17115 17116 $scope.$watch(function () { 17117 return $scope.timeouts 17118 }, setTimeouts, true) 17119 17120 function setTimeouts(timeoutsData) { 17121 var filteredData = []; 17122 var mode = timeoutsTypes.GAME; 17123 if (vm.timeoutsConfig) { 17124 mode = vm.timeoutsConfig.type; 17125 } 17126 17127 if (mode === timeoutsTypes.GAME || vm.gameDetails.periodId <= vm.periodNumber) { 17128 switch (mode) { 17129 case timeoutsTypes.GAME: 17130 filteredData = timeoutsData; 17131 break; 17132 case timeoutsTypes.HALF: 17133 filteredData = _.filter(timeoutsData, function (timeout) { 17134 if (!vm.half) { 17135 return timeout.period <= vm.periodNumber / 2; 17136 } 17137 else { 17138 return timeout.period > vm.periodNumber / 2; 17139 } 17140 }) 17141 break; 17142 case timeoutsTypes.QUARTER: 17143 filteredData = _.filter(timeoutsData, { period: vm.gameDetails.periodId }); 17144 break; 17145 } 17146 } 17147 else { 17148 filteredData = _.filter(timeoutsData, function (timeout) { 17149 return timeout.period === vm.gameDetails.periodId; 17150 }); 17151 } 17152 17153 filteredData.forEach(function (timeoutData) { 17154 var numberData = _.get(_.find(timeoutData.details, { name: 'number' }), 'value'); 17155 var timeout = _.find(vm.timeouts, { number: parseInt(numberData) }); 17156 var ongoingData = _.get(_.find(timeoutData.details, { name: 'ongoing' }), 'value'); 17157 17158 if (timeout) { 17159 timeout.ongoing = ongoingData == 'true'; 17160 timeout.active = true; 17161 timeout.id = timeoutData.id; 17162 } 17163 }) 17164 } 17165 17166 vm.onColorChange = function () { 17167 if ($scope.onPropertiesUpdate) { 17168 $scope.onPropertiesUpdate(vm.team.id) 17169 } 17170 } 17171 17172 function hexToRgb(hex) { 17173 var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 17174 return result ? { 17175 r: parseInt(result[1], 16), 17176 g: parseInt(result[2], 16), 17177 b: parseInt(result[3], 16) 17178 } : null; 17179 } 17180 17181 function sortFieldPlayers(players) { 17182 return _.orderBy(players, [function (player) { 17183 return player && player.number ? _.parseInt(player.number) : Infinity; 17184 }], ['asc']); 17185 } 17186 17187 function processTimeoutsConfig() { 17188 var maxTimeouts = vm.MAX_TIMEOUTS; 17189 vm.timeoutsConfig = _.get(_.find($scope.seasonParameters, { Code: 'TIMEOUTS' }), 'Value'); 17190 17191 if (vm.timeoutsConfig) { 17192 vm.timeoutsConfig = angular.fromJson(vm.timeoutsConfig); 17193 17194 if (vm.timeoutsConfig.type === timeoutsTypes.GAME || vm.gameDetails.periodId <= vm.periodNumber) { 17195 switch (vm.timeoutsConfig.type) { 17196 case timeoutsTypes.GAME: 17197 maxTimeouts = _.get(_.find(vm.timeoutsConfig.timeouts, { period: 1 }), 'value') || vm.MAX_TIMEOUTS; 17198 break; 17199 case timeoutsTypes.HALF: 17200 if (vm.half) { 17201 maxTimeouts = _.get(_.find(vm.timeoutsConfig.timeouts, { period: 2 }), 'value') || vm.MAX_TIMEOUTS; 17202 } 17203 else { 17204 maxTimeouts = _.get(_.find(vm.timeoutsConfig.timeouts, { period: 1 }), 'value') || vm.MAX_TIMEOUTS; 17205 } 17206 break; 17207 case timeoutsTypes.QUARTER: 17208 maxTimeouts = _.get(_.find(vm.timeoutsConfig.timeouts, { period: vm.gameDetails.periodId }), 'value') || vm.MAX_TIMEOUTS; 17209 break; 17210 } 17211 } 17212 else { 17213 maxTimeouts = vm.timeoutsConfig.timeoutsOvertime || 0; 17214 } 17215 17216 vm.timeoutsDuration = vm.timeoutsConfig.duration || 60; 17217 vm.timeoutsDurationOvertime = vm.timeoutsConfig.durationOvertime || 60; 17218 } 17219 17220 vm.timeouts = [] 17221 for (var i = 0; i < maxTimeouts; i++) { 17222 vm.timeouts.push({ id: null, number: i + 1, ongoing: false, active: false }); 17223 } 17224 17225 setTimeouts($scope.timeouts); 17226 } 17227 17228 function processPlayers() { 17229 _.forEach(vm.team.players, function (player) { 17230 player.points = _.reduce(player.stats, function (prev, value) { 17231 if (value.statTypeId == POINTS_ID) { 17232 return prev + value.value; 17233 } 17234 return prev; 17235 }, 0); 17236 17237 player.fouls = _.reduce(player.stats, function (prev, value) { 17238 if (value.statTypeId == FOULS_ID) { 17239 return prev + value.value; 17240 } 17241 return prev; 17242 }, 0); 17243 17244 player.presences = _.reduce(player.stats, function (prev, value) { 17245 if (value.statTypeId == PRESENCE_ID ) { 17246 return prev + value.value; 17247 } 17248 return prev; 17249 }, 0); 17250 17251 player.selected = function (checked) { 17252 if (angular.isDefined(checked)) { 17253 if (checked) { 17254 player.status = 'Selected'; 17255 } 17256 else { 17257 player.status = ''; 17258 } 17259 } 17260 17261 return player.status == 'Selected'; 17262 } 17263 }) 17264 17265 _.forEach(vm.team.staffs, function (staff) { 17266 staff.selected = function (checked) { 17267 if (angular.isDefined(checked)) { 17268 if (checked) { 17269 staff.status = 'Selected'; 17270 } 17271 else { 17272 staff.status = ''; 17273 } 17274 } 17275 17276 return staff.status == 'Selected'; 17277 } 17278 17279 staff.signed = function (sign) { 17280 var isSigned = _.indexOf(vm.team.signedStaff, staff.id) != -1; 17281 17282 if (angular.isDefined(sign)) { 17283 if (sign && !isSigned) {
17284 vm.team.signedStaff.push(staff.id); 17285 $scope.onPropertiesUpdate(vm.team.id); 17286 } 17287 else if(!sign && isSigned) { 17288 vm.team.signedStaff = _.without(vm.team.signedStaff, staff.id); 17289 $scope.onPropertiesUpdate(vm.team.id); 17290 } 17291 } 17292 17293 return isSigned; 17294 } 17295 }) 17296 } 17297 17298 vm.sortPlayers = function(sort) { 17299 if (vm.sort != sort) { 17300 vm.sort = sort; 17301 vm.direction = 'asc'; 17302 } 17303 else { 17304 vm.direction = vm.direction == 'asc' ? 'desc' : 'asc'; 17305 } 17306 } 17307 17308 vm.sortStaffItem = function (sort) { 17309 if (vm.sortStaff != sort) { 17310 vm.sortStaff = sort; 17311 vm.directionStaff = 'asc'; 17312 } 17313 else { 17314 vm.directionStaff = vm.directionStaff == 'asc' ? 'desc' : 'asc'; 17315 } 17316 } 17317 17318 vm.comparator = function (v1, v2) { 17319 if (vm.sort == 'number') { 17320 return _.parseInt(v1.value) < _.parseInt(v2.value) ? -1 : 1; 17321 } 17322 if (vm.sort == 'selected') { 17323 return !!v1.value < !!v2.value ? -1 : 1; 17324 } 17325 17326 return v1.value < v2.value ? -1 : 1; 17327 }; 17328 17329 vm.comparatorStaff = function (v1, v2) { 17330 if (vm.sortStaff == 'type') { 17331 return _.parseInt(v1.value) < _.parseInt(v2.value) ? -1 : 1; 17332 } 17333 if (vm.sortStaff == 'selected') { 17334 return !!v1.value < !!v2.value ? -1 : 1; 17335 } 17336 17337 return v1.value < v2.value ? -1 : 1; 17338 }; 17339 } 17340})(); 17341; 17342(function () { 17343 'use strict'; 17344 17345 angular 17346 .module('app.directives') 17347 .directive('scoreboardBasketballRoster', scoreboardBasketballRoster) 17348 17349 scoreboardBasketballRoster.$inject = ['ModalService', '$interval']; 17350 17351 function scoreboardBasketballRoster(modalService, $interval) { 17352 return { 17353 restrict: 'E', 17354 scope: { 17355 widget: '=', 17356 team: '=', 17357 timeouts: '=', 17358 gameDetails: '=', 17359 seasonParameters: '=', 17360 onRosterChange: '=', 17361 onPropertiesUpdate: '=', 17362 onPlayerStaffChange: '=', 17363 }, 17364 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/roster/scoreboard-basketball-roster.tpl.html', 17365 controller: 'ScoreboardBasketballRosterWidgetController', 17366 controllerAs: 'scoreboardBasketballRoster', 17367 link: function ($scope, element, attrs, controller) { 17368 var timerModal = modalService.init($("#scoreboard-basketball-roster-timer", element)); 17369 17370 element.on('$destroy', function () { 17371 $(document).off('click'); 17372 }); 17373 17374 controller.showTimerModal = timerModal.show; 17375 controller.hideTimerModal = timerModal.hide; 17376 17377 timerModal.element.on('hidden.bs.modal', function (e) { 17378 controller.timer = 0; 17379 $interval.cancel(controller.timerInterval); 17380 }) 17381 } 17382 }; 17383 } 17384})();; 17385(function () { 17386 'use strict'; 17387 17388 angular 17389 .module('app.directives') 17390 .controller('ScoreboardBasketballSelectPlayerController', ScoreboardBasketballSelectPlayerController); 17391 17392 ScoreboardBasketballSelectPlayerController.$inject = ['$scope']; 17393 17394 function ScoreboardBasketballSelectPlayerController($scope) { 17395 var vm = this; 17396 vm.showPopup = false; 17397 vm.target = null; 17398 vm.teams = $scope.teams; 17399 vm.showStaff = $scope.showStaff; 17400 vm.showFreeThrows = $scope.showFreeThrows; 17401 self.showTechnicalFoulType = $scope.showTechnicalFoulType; 17402 vm.selectedType = null; 17403 vm.selectedItem = null; 17404 vm.selectedTechnicalFoulType = null; 17405 vm.isInFlow = false; 17406 vm.filter = _.filter; 17407 vm.reverseTeams = $scope.reverseTeams; 17408 17409 sortPlayers(vm.teams); 17410 17411 $scope.$watch('teams', function (teams) { 17412 sortPlayers(teams); 17413 }, true) 17414 17415 vm.closePopup = function (e) { 17416 if ($scope.onClose) { 17417 $scope.onClose(); 17418 17419 if (e) { 17420 $scope.$apply(); 17421 e.stopPropagation(); 17422 } 17423 }; 17424 } 17425 17426 vm.selectPlayer = function (player, type) { 17427 vm.selectedType = type; 17428 vm.selectedItem = player; 17429 vm.selectedTechnicalFoulType = null; 17430 17431 if (type == 'staff') { 17432 vm.selectedItem.teamId = player.linkId; 17433 } 17434 17435 if (vm.showTechnicalFoulType && type == 'staff') { 17436 vm.isInFlow = true; 17437 vm.hideSelectPlayerPopup(); 17438 vm.showTechnicalFoulTypePopup(); 17439 } 17440 else { 17441 if (vm.showFreeThrows) { 17442 vm.isInFlow = true; 17443 vm.hideSelectPlayerPopup(); 17444 vm.showFreeThrowsPopup(); 17445 } 17446 else if ($scope.onPlayerSelect) { 17447 $scope.onPlayerSelect(vm.selectedItem, vm.selectedType); 17448 vm.closePopup(); 17449 } 17450 } 17451 } 17452 17453 vm.selectTechnicalFoulType = function (type) { 17454 vm.selectedTechnicalFoulType = type; 17455 vm.isInFlow = true; 17456 vm.hideTechnicalFoulTypePopup(); 17457 vm.showFreeThrowsPopup(); 17458 17459 } 17460 17461 vm.selectFreeThrows = function (freeThrows) { 17462 if ($scope.onPlayerSelect) { 17463 $scope.onPlayerSelect(vm.selectedItem, vm.selectedType, freeThrows, vm.selectedTechnicalFoulType); 17464 vm.closePopup(); 17465 } 17466 } 17467 17468 $scope.$watchGroup(['showPopup'], function (values) { 17469 if (values[0]) { 17470 vm.selectedType = null; 17471 vm.selectedItem = null; 17472 vm.showSelectPlayerPopup(); 17473 } 17474 else { 17475 vm.hideSelectPlayerPopup(); 17476 vm.hideFreeThrowsPopup(); 17477 } 17478 vm.showPopup = values[0]; 17479 }); 17480 17481 $scope.$watch('showStaff', function (showStaff) { 17482 vm.showStaff = showStaff; 17483 }) 17484 17485 $scope.$watch('showFreeThrows', function (showFreeThrows) { 17486 vm.showFreeThrows = showFreeThrows; 17487 }) 17488 17489 $scope.$watch('showTechnicalFoulType', function (showTechnicalFoulType) { 17490 vm.showTechnicalFoulType = showTechnicalFoulType; 17491 console.log(showTechnicalFoulType); 17492 }) 17493 17494 $scope.$watch('reverseTeams', function (reverseTeams) { 17495 vm.reverseTeams = reverseTeams; 17496 }) 17497 17498 function sortPlayers(teams) { 17499 var teams = _.cloneDeep(teams); 17500
17501 teams.forEach(function (team) { 17502 team.players = _.orderBy(team.players, [function (player) { 17503 return player.onField ? 1 : 0; 17504 }, 17505 function (player) { 17506 return player && player.number ? _.parseInt(player.number) : Infinity; 17507 }], ['desc', 'asc']); 17508 }) 17509 17510 vm.teams = teams.sort(function (a, b) { 17511 if (a.id == $scope.visitorTeamId) { 17512 return -1; 17513 } 17514 else if (b.id == $scope.visitorTeamId) { 17515 return 1; 17516 } 17517 17518 return 0; 17519 }); 17520 17521 } 17522 } 17523})(); 17524; 17525(function () { 17526 'use strict'; 17527 17528 angular 17529 .module('app.directives') 17530 .directive('scoreboardBasketballSelectPlayer', scoreboardBasketballSelectPlayer) 17531 17532 scoreboardBasketballSelectPlayer.$inject = ['ModalService']; 17533 17534 function scoreboardBasketballSelectPlayer(modalService) { 17535 return { 17536 restrict: 'E', 17537 transclude: true, 17538 scope: { 17539 widget: '=', 17540 teams: '=', 17541 target: '=', 17542 visitorTeamId: '=', 17543 reverseTeams: '=', 17544 showPopup: '=', 17545 showStaff: '=', 17546 showTechnicalFoulType: '=', 17547 showFreeThrows: '=', 17548 onClose: '=', 17549 onPlayerSelect: '=' 17550 }, 17551 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/popup/scoreboard-basketball-select-player.tpl.html', 17552 controller: 'ScoreboardBasketballSelectPlayerController', 17553 controllerAs: 'scoreboardBasketballSelectPlayer', 17554 link: function (scope, element, attrs, controller) { 17555 var modal = modalService.init($('.scoreboard-basketball-select-player', element)); 17556 var freeThrowsModal = modalService.init($('.scoreboard-basketball-free-throws-modal', element)); 17557 var technicalFoulModal = modalService.init($('.scoreboard-basketball-technical-foul-modal', element)); 17558 17559 element.on('$destroy', function () { 17560 $(document).off('click'); 17561 modal.element.off('hidden.bs.modal'); 17562 freeThrowsModal.element.off('hidden.bs.modal'); 17563 }); 17564 17565 controller.showSelectPlayerPopup = modal.show; 17566 controller.hideSelectPlayerPopup = modal.hide; 17567 17568 controller.showFreeThrowsPopup = freeThrowsModal.show; 17569 controller.hideFreeThrowsPopup = freeThrowsModal.hide; 17570 17571 controller.showTechnicalFoulTypePopup = technicalFoulModal.show; 17572 controller.hideTechnicalFoulTypePopup = technicalFoulModal.hide; 17573 17574 var hiddenEvent = function (e) { 17575 if (scope.showPopup && !controller.isInFlow) { 17576 scope.showPopup = false; 17577 scope.$apply(); 17578 } 17579 17580 controller.isInFlow = false; 17581 } 17582 17583 modal.element.on('hidden.bs.modal', hiddenEvent) 17584 freeThrowsModal.element.on('hidden.bs.modal', hiddenEvent) 17585 technicalFoulModal.element.on('hidden.bs.modal', hiddenEvent) 17586 } 17587 }; 17588 } 17589})();; 17590(function () { 17591 'use strict'; 17592 17593 angular 17594 .module('app.directives') 17595 .controller('ScoreboardBasketballBonusWidgetController', ScoreboardBasketballBonusWidgetController); 17596 17597 ScoreboardBasketballBonusWidgetController.$inject = ['$scope']; 17598 17599 function ScoreboardBasketballBonusWidgetController($scope) { 17600 var vm = this; 17601 17602 vm.gameDetails = $scope.gameDetails; 17603 17604 setTeams(); 17605 17606 vm.onBonusBlur = function (teamId) { 17607 if ($scope.onBonusUpdate) { 17608 $scope.onBonusUpdate(teamId); 17609 } 17610 } 17611 17612 $scope.$watch('gameDetails', function (gameDetails) { 17613 vm.gameDetails = gameDetails; 17614 17615 setTeams(); 17616 }, true) 17617 17618 function setTeams() { 17619 var visitorTeam = _.find(vm.gameDetails.teamList, { id: vm.gameDetails.visitorTeamId }); 17620 var localTeam = _.find(vm.gameDetails.teamList, { id: vm.gameDetails.localTeamId }); 17621 17622 vm.leftTeam = visitorTeam; 17623 vm.rightTeam = localTeam; 17624 17625 if (vm.gameDetails.reverseTeams) { 17626 vm.leftTeam = localTeam; 17627 vm.rightTeam = visitorTeam; 17628 } 17629 } 17630 } 17631})(); 17632; 17633(function () { 17634 'use strict'; 17635 17636 angular 17637 .module('app.directives') 17638 .directive('scoreboardBasketballBonus', scoreboardBasketballBonus) 17639 17640 scoreboardBasketballBonus.$inject = []; 17641 17642 function scoreboardBasketballBonus() { 17643 return { 17644 restrict: 'E', 17645 scope: { 17646 widget: '=', 17647 gameDetails: '=', 17648 onBonusUpdate: '=', 17649 }, 17650 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/bonus/scoreboard-basketball-bonus.tpl.html', 17651 controller: 'ScoreboardBasketballBonusWidgetController', 17652 controllerAs: 'scoreboardBasketballBonus' 17653 }; 17654 } 17655})();; 17656(function () { 17657 'use strict'; 17658 17659 angular 17660 .module('app.directives') 17661 .controller('ScoreboardBasketballHistoryWidgetController', ScoreboardBasketballHistoryWidgetController); 17662 17663 ScoreboardBasketballHistoryWidgetController.$inject = ['$scope', '$translate', 'ordinalFilter'] 17664 17665 function ScoreboardBasketballHistoryWidgetController($scope, $translate, ordinalFilter) { 17666 var vm = this; 17667 var selectedEvent = null; 17668 17669 vm.gameDetails = $scope.gameDetails; 17670 vm.useTime = false; 17671 17672 var useTimeParameter = _.get(_.find($scope.seasonParameters, { Code: 'USETIME' }), 'Value'); 17673 if (useTimeParameter) { 17674 vm.useTime = useTimeParameter === "1" 17675 } 17676 17677 vm.points = [ 17678 { id: '1', name: $translate.instant('widgets.games.scoreboard.basketball.history.freeThrow') }, 17679 { id: '2', name: $translate.instant('widgets.games.scoreboard.basketball.history.2pts') }, 17680 { id: '3', name: $translate.instant('widgets.games.scoreboard.basketball.history.3pts') } 17681 ] 17682 17683 vm.success = [ 17684 { id: 'true', name: $translate.instant('widgets.games.scoreboard.basketball.history.made') }, 17685 { id: 'false', name: $translate.instant('widgets.games.scoreboard.basketball.history.missed') }, 17686 ] 17687 17688 vm.foulTypes = [ 17689 { id: 'personnal', name: $translate.instant('widgets.games.scoreboard.basketball.history.personalFoul') }, 17690 { id: 'technical', name: $translate.instant('widgets.games.scoreboard.basketball.history.technicalFoul') }, 17691 { id: 'disqualifying', name: $translate.instant('widgets.games.scoreboard.basketball.history.disqualifyingFoul') }, 17692 { id: 'unsportsmanlike', name: $translate.instant('widgets.games.scoreboard.basketball.history.unsportsmanlikeFoul') }, 17693 ] 17694 17695 vm.reboundTypes = [ 17696 { id: 'offensive', name: $translate.instant('widgets.games.scoreboard.basketball.history.offensiveRebound') }, 17697 { id: 'defensive', name: $translate.instant('widgets.games.scoreboard.basketball.history.defensiveRebound') }, 17698 ] 17699 17700 vm.freeThrows = [ 17701 { id: '0', name: '0' }, 17702 { id: '1', name: '1' }, 17703 { id: '2', name: '2' }, 17704 { id: '3', name: '3' }, 17705 ] 17706 17707 vm.updateEvent = function (event) { 17708 var content = event.formatEvent(); 17709 17710 if ($scope.onUpdateEvent && !event.hasError()) { 17711 $scope.onUpdateEvent(content); 17712 event.editMode = false; 17713 } 17714 17715 } 17716 17717 vm.clickDeleteEvent = function (event) { 17718 selectedEvent = event; 17719 vm.showConfirmDelete(); 17720 } 17721 17722 vm.deleteEvent = function () { 17723 if ($scope.onDeleteEvent) { 17724 $scope.onDeleteEvent(selectedEvent.id) 17725 } 17726 vm.hideConfirmDelete(); 17727 } 17728 17729 vm.onTimeKeypress = function (event) { 17730 var newchar = String.fromCharCode(event.charCode || event.keyCode); 17731 17732 if (!newchar.match(/[0-9:]/)) { 17733 event.preventDefault(); 17734 } 17735 } 17736 17737 vm.getValue = function (id, list) { 17738 return _.get(_.find(list, { id: id }), 'name'); 17739 } 17740 17741 vm.getName = function (id, list) { 17742 var player = _.find(list, { id: id }); 17743 return `${_.get(player, 'number')}
17743 - ${_.get(player, 'name')}` 17744 } 17745 17746 $scope.$watch('gameDetails', function (gameDetails) { 17747 vm.gameDetails = gameDetails; 17748 17749 vm.quarters = []; 17750 17751 _.range(vm.gameDetails.periodId).forEach(function (period) { 17752 vm.quarters.push({ id: period + 1, name: `${ordinalFilter(period + 1)} ${$translate.instant('widgets.games.scoreboard.basketball.history.quarter')}` }); 17753 }) 17754 17755 vm.range = _.range; 17756 vm.teams = {}; 17757 17758 vm.gameDetails.teamList.forEach(function (team) { 17759 vm.teams[team.id] = team; 17760 vm.teams[team.id].selectedPlayers = _.filter(vm.teams[team.id].players, { status: 'Selected' }); 17761 vm.teams[team.id].selectedStaffs = _.filter(vm.teams[team.id].staffs, { status: 'Selected' });; 17762 vm.teams[team.id].playerCollection = _.keyBy(vm.teams[team.id].selectedPlayers, 'id'); 17763 vm.teams[team.id].staffCollection = _.keyBy(vm.teams[team.id].staffs, 'id'); 17764 }); 17765 17766 vm.events = _.groupBy( 17767 _.map(_.filter(vm.gameDetails.eventList, function (event) { return event.eventtypeid == 14 || event.eventtypeid == 13 || event.eventtypeid == 16 || event.eventtypeid == 18 }), 17768 function (event) { 17769 var eventDefinition = JSON.parse(event.content); 17770 if (eventDefinition.type == 'shoot') { 17771 var shoot = new Shoot(eventDefinition, event.id); 17772 return shoot; 17773 } 17774 17775 if (eventDefinition.type == 'fault') { 17776 var foul = new Foul(eventDefinition, event.id); 17777 return foul; 17778 } 17779 17780 if (eventDefinition.type == 'rebound') { 17781 var rebound = new Rebound(eventDefinition, event.id); 17782 return rebound; 17783 } 17784 17785 if (eventDefinition.type == 'presence') { 17786 var presence = new Presence(eventDefinition, event.id); 17787 return presence; 17788 } 17789 17790 return null; 17791 17792 }), 'period'); 17793 }) 17794 17795 function Shoot(_event, eventId) { 17796 var self = this; 17797 angular.extend(self, _event); 17798 17799 self.error = null; 17800 self.id = eventId; 17801 17802 var shooterProperty = _.find(self.properties, { name: 'shooter' }); 17803 17804 self.team = vm.teams[shooterProperty.teamid]; 17805 self.teamId = self.team.id; 17806 self.shooterPlayer = self.team.playerCollection[shooterProperty.id]; 17807 self.propertyId = _.get(self.shooterPlayer, 'id'); 17808 self.pointsCount = _.get(_.find(self.details, { 'name': 'pointsCount' }), 'value'); 17809 self.success = _.get(_.find(self.details, { 'name': 'success' }), 'value'); 17810 17811 self.hasError = function () { 17812 if (!self.propertyId) { 17813 self.error = { type: 'player' } 17814 return true; 17815 } 17816 17817 if (!vm.teams[self.teamId].playerCollection[self.propertyId]) { 17818 self.error = { type: 'player' } 17819 return true; 17820 } 17821 17822 self.error = null; 17823 return false; 17824 } 17825 17826 self.formatEvent = function () { 17827 var eventContent = {}; 17828 eventContent.id = self.id; 17829 eventContent.type = 'shoot'; 17830 eventContent.period = self.period; 17831 eventContent.time = self.time; 17832 17833 eventContent.details = []; 17834 eventContent.details.push({ name: 'success', value: self.success }); 17835 eventContent.details.push({ name: 'pointsCount', value: self.pointsCount }); 17836 17837 eventContent.properties = []; 17838 eventContent.properties.push({ id: self.propertyId, name: 'shooter', teamid: self.teamId }); 17839 17840 return eventContent; 17841 } 17842 17843 self.timeSetter = function (time) { 17844 if (angular.isDefined(time)) { 17845 if (time.match(/^\d$/)) { 17846 time = `0${time}:00`; 17847 } 17848 17849 if (time.match(/^\d{4}$/)) { 17850 time = time.slice(0, 2) + ':' + time.slice(2); 17851 } 17852 17853 if (time.match(/^\d{2}:\d{2}$/)) { 17854 self.time = `00:${time}`; 17855 } 17856 } 17857 17858 return self.time.slice(-5); 17859 } 17860 17861 self.editMode = false; 17862 } 17863 17864 function Foul(_event, eventId) { 17865 var self = this; 17866 angular.extend(self, _event); 17867 17868 self.id = eventId; 17869 self.error = null; 17870 17871 var playerProperty = _.find(self.properties, { name: 'player' }); 17872 var staffProperty = _.find(self.properties, { name: 'staff' }); 17873
17874 var teamId = playerProperty ? playerProperty.teamid : staffProperty.teamid; 17875 17876 self.isPlayer = !!playerProperty; 17877 17878 self.player = null; 17879 self.staff = null; 17880 self.propertyId = null; 17881 17882 self.team = vm.teams[teamId]; 17883 self.teamId = self.team.id; 17884 17885 if (self.isPlayer) { 17886 self.player = self.team.playerCollection[playerProperty.id] 17887 self.propertyId = _.get(self.player, 'id'); 17888 } 17889 else { 17890 self.staff = self.team.staffCollection[staffProperty.id]; 17891 self.propertyId = _.get(self.staff, 'id'); 17892 } 17893 17894 self.foulType = _.get(_.find(self.details, { 'name': 'type' }), 'value'); 17895 self.freeThrows = _.get(_.find(self.details, { 'name': 'freeThrows' }), 'value'); 17896 17897 self.timeSetter = function (time) { 17898 if (angular.isDefined(time)) { 17899 if (time.match(/^\d$/)) { 17900 time = `0${time}:00`; 17901 } 17902 17903 if (time.match(/^\d{4}$/)) { 17904 time = time.slice(0, 2) + ':' + time.slice(2); 17905 } 17906 17907 if (time.match(/^\d{2}:\d{2}$/)) { 17908 self.time = `00:${time}`; 17909 } 17910 } 17911 17912 return self.time.slice(-5); 17913 } 17914 17915 self.hasError = function () { 17916 if (!self.propertyId) { 17917 self.error = { type: 'player' } 17918 return true; 17919 } 17920 17921 var collection = self.isPlayer ? vm.teams[self.teamId].playerCollection : vm.teams[self.teamId].staffCollection; 17922 17923 if (!collection[self.propertyId]) { 17924 self.error = { type: 'player' } 17925 return true; 17926 } 17927 17928 self.error = null; 17929 return false; 17930 } 17931 17932 self.formatEvent = function () { 17933 var eventContent = {}; 17934 eventContent.id = self.id; 17935 eventContent.type = 'fault'; 17936 eventContent.period = self.period; 17937 eventContent.time = self.time; 17938 17939 eventContent.details = []; 17940 eventContent.details.push({ name: 'type', value: self.foulType }); 17941 eventContent.details.push({ name: 'freeThrows', value: self.freeThrows }); 17942 17943 eventContent.properties = []; 17944 eventContent.properties.push({ id: self.propertyId, name: self.isPlayer ? 'player' : 'staff', teamid: self.teamId }); 17945 17946 return eventContent; 17947 } 17948 17949 self.editMode = false; 17950 } 17951 17952 function Rebound(_event, eventId) { 17953 var self = this; 17954 angular.extend(self, _event); 17955 17956 self.error = null; 17957 self.id = eventId; 17958 17959 var shooterProperty = _.find(self.properties, { name: 'shooter' }); 17960 17961 self.team = vm.teams[shooterProperty.teamid]; 17962 self.teamId = self.team.id; 17963 self.shooterPlayer = self.team.playerCollection[shooterProperty.id]; 17964 self.propertyId = _.get(self.shooterPlayer, 'id'); 17965 self.reboundType = _.get(_.find(self.details, { 'name': 'type' }), 'value'); 17966 17967 self.hasError = function () { 17968 if (!self.propertyId) { 17969 self.error = { type: 'player' } 17970 return true; 17971 } 17972 17973 if (!vm.teams[self.teamId].playerCollection[self.propertyId]) { 17974 self.error = { type: 'player' } 17975 return true; 17976 } 17977 17978 self.error = null; 17979 return false; 17980 } 17981 17982 self.formatEvent = function () { 17983 var eventContent = {}; 17984 eventContent.id = self.id; 17985 eventContent.type = 'rebound'; 17986 eventContent.period = self.period; 17987 eventContent.time = self.time; 17988 17989 eventContent.details = []; 17990 eventContent.details.push({ name: 'type', value: self.reboundType }); 17991 17992 eventContent.properties = []; 17993 eventContent.properties.push({ id: self.propertyId, name: 'shooter', teamid: self.teamId }); 17994 17995 return eventContent; 17996 } 17997 17998 self.timeSetter = function (time) { 17999 if (angular.isDefined(time)) { 18000 if (time.match(/^\d$/)) { 18001 time = `0${time}:00`; 18002 } 18003 18004 if (time.match(/^\d{4}$/)) { 18005 time = time.slice(0, 2) + ':' + time.slice(2); 18006 } 18007 18008 if (time.match(/^\d{2}:\d{2}$/)) { 18009 self.time = `00:${time}`; 18010 } 18011 } 18012 18013 return self.time.slice(-5); 18014 } 18015 18016 self.editMode = false; 18017 } 18018 18019 18020 function Presence(_event, eventId) { 18021 var self = this; 18022 angular.extend(self, _event); 18023 18024 self.error = null; 18025 self.id = eventId; 18026 18027 var playerProperty = _.find(self.properties, { name: 'player' }); 18028
18029 self.team = vm.teams[playerProperty.teamid]; 18030 self.teamId = self.team.id; 18031 self.player = self.team.playerCollection[playerProperty.id]; 18032 self.propertyId = _.get(self.player, 'id'); 18033 18034 self.hasError = function () { 18035 if (!self.propertyId) { 18036 self.error = { type: 'player' } 18037 return true; 18038 } 18039 18040 if (!vm.teams[self.teamId].playerCollection[self.propertyId]) { 18041 self.error = { type: 'player' } 18042 return true; 18043 } 18044 18045 self.error = null; 18046 return false; 18047 } 18048 18049 self.formatEvent = function () { 18050 var eventContent = {}; 18051 eventContent.id = self.id; 18052 eventContent.type = 'presence'; 18053 eventContent.period = self.period; 18054 eventContent.time = self.time; 18055 18056 eventContent.properties = []; 18057 eventContent.properties.push({ id: self.propertyId, name: 'player', teamid: self.teamId }); 18058 18059 return eventContent; 18060 } 18061 18062 self.timeSetter = function (time) { 18063 if (angular.isDefined(time)) { 18064 if (time.match(/^\d$/)) { 18065 time = `0${time}:00`; 18066 } 18067 18068 if (time.match(/^\d{4}$/)) { 18069 time = time.slice(0, 2) + ':' + time.slice(2); 18070 } 18071 18072 if (time.match(/^\d{2}:\d{2}$/)) { 18073 self.time = `00:${time}`; 18074 } 18075 } 18076 18077 return self.time.slice(-5); 18078 } 18079 18080 self.editMode = false; 18081 } 18082 } 18083})(); 18084; 18085(function () { 18086 'use strict'; 18087 18088 angular 18089 .module('app.directives') 18090 .directive('scoreboardBasketballHistory', scoreboardBasketballHistory) 18091 18092 scoreboardBasketballHistory.$inject = ['ModalService']; 18093 18094 function scoreboardBasketballHistory(modalService) { 18095 return { 18096 restrict: 'E', 18097 scope: { 18098 gameDetails: '=', 18099 onUpdateEvent: '=', 18100 onDeleteEvent: '=', 18101 seasonParameters: '=' 18102 }, 18103 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/history/scoreboard-basketball-history.tpl.html', 18104 controller: 'ScoreboardBasketballHistoryWidgetController', 18105 controllerAs: 'scoreboardBasketballHistory', 18106 link: function ($scope, element, attrs, controller) { 18107 var confirmDeleteModal = modalService.init($("#confirm-delete-event", element)); 18108 18109 element.on('$destroy', function () { 18110 $(document).off('click'); 18111 }) 18112 18113 controller.showConfirmDelete = confirmDeleteModal.show; 18114 controller.hideConfirmDelete = confirmDeleteModal.hide; 18115 } 18116 }; 18117 } 18118})();; 18119(function () { 18120 'use strict'; 18121 18122 angular 18123 .module('app.directives') 18124 .controller('ScoreboardBasketballNoteWidgetController', ScoreboardBasketballNoteWidgetController); 18125 18126 ScoreboardBasketballNoteWidgetController.$inject = ['$scope']; 18127 18128 function ScoreboardBasketballNoteWidgetController($scope) { 18129 var vm = this; 18130 18131 vm.gameDetails = $scope.gameDetails; 18132 18133 var cancelNote = _.get(_.find(vm.gameDetails.properties, { name: 'Comment' }), 'value'); 18134 vm.note = _.get(_.find(vm.gameDetails.properties, { name: 'Comment' }), 'value'); 18135 18136 vm.editMode = false; 18137 18138 vm.saveNote = function () { 18139 vm.editMode = false; 18140 if ($scope.onUpdateNote) { 18141 $scope.onUpdateNote(vm.note); 18142 cancelNote = vm.note; 18143 } 18144 } 18145 18146 vm.cancelNote = function () { 18147 vm.editMode = false; 18148 vm.note = cancelNote; 18149 } 18150 } 18151})(); 18152; 18153(function () { 18154 'use strict'; 18155 18156 angular 18157 .module('app.directives') 18158 .directive('scoreboardBasketballNote', scoreboardBasketballNote) 18159 18160 scoreboardBasketballNote.$inject = []; 18161
18162 function scoreboardBasketballNote() { 18163 return { 18164 restrict: 'E', 18165 scope: { 18166 widget: '=', 18167 gameDetails: '=', 18168 onUpdateNote: '=', 18169 }, 18170 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/scoreboard/basketball/note/scoreboard-basketball-note.tpl.html', 18171 controller: 'ScoreboardBasketballNoteWidgetController', 18172 controllerAs: 'scoreboardBasketballNote' 18173 }; 18174 } 18175})();; 18176(function () { 18177 'use strict'; 18178 18179 angular 18180 .module('app.directives') 18181 .controller('StarsOfTheGameWidgetController', StarsOfTheGameWidgetController); 18182 18183 StarsOfTheGameWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$translate', 'UrlService', 'WebsiteEditorService']; 18184 18185 function StarsOfTheGameWidgetController($rootScope, $scope, $localStorage, $translate, urlService, websiteEditorService) { 18186 var vm = this; 18187 vm.url = urlService; 18188 vm.background = { image: '', position: '' }; 18189 18190 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 18191 .replace(/[\n\r]+/g, ' '))); 18192 vm.widget = angular.fromJson(widgets[$scope.widget]); 18193 vm.starList = _.orderBy(vm.starList, 'typeStarId', 'asc'); 18194 vm.threeStars = _.filter(vm.starList, function (star) { return star.typeStarId <= 3 }); 18195 vm.playersOfTheGame = _.filter(vm.starList, function (star) { return star.typeStarId > 3 }); 18196 18197 // TODO Get parameter of the widget.... 18198 var widgetDefinition = angular.fromJson(widgets[$scope.widget]); 18199 18200 vm.getStars = function(nbStars) { 18201 return new Array(nbStars); 18202 }; 18203 18204 // Set view model parameters. 18205 for (var parameter in vm.widget.parameters) { 18206 switch (vm.widget.parameters[parameter].id) { 18207 case 'title': 18208 vm.title = vm.widget.parameters[parameter].value; 18209 break; 18210 18211 case 'showTitle': 18212 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 18213 break; 18214 18215 case 'showPlayerAvatars': 18216 vm.showPlayerAvatars = vm.widget.parameters[parameter].value === 'true'; 18217 break; 18218 18219 case 'widgetTransparency': 18220 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 18221 break; 18222 18223 case 'backgroundColor': 18224 vm.backgroundColor = vm.widget.parameters[parameter].value; 18225 break; 18226 18227 case 'border': 18228 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 18229 break; 18230 18231 case 'backgroundImage': 18232 vm.background.image = vm.widget.parameters[parameter].value; 18233 break; 18234 18235 case 'backgroundImagePosition': 18236 vm.background.position = vm.widget.parameters[parameter].value; 18237 break; 18238 } 18239 } 18240 18241 vm.getStyle = function () { 18242 var style = {}; 18243 if (!vm.widgetTransparency) { 18244 style['background-color'] = vm.backgroundColor; 18245 style['border-color'] = vm.border.color; 18246 18247 if (vm.background && vm.background.image) { 18248 style['background-image'] = `url("${vm.background.image}")`; 18249 style['background-repeat'] = 'no-repeat'; 18250 style['background-position'] = vm.background.position || 'center center'; 18251 } 18252 18253 } 18254 18255 style['border-width'] = `${vm.border.width}px`; 18256 style['border-color'] = vm.border.color; 18257 style['border-radius'] = `${vm.border.radius}px`; 18258 18259 return style; 18260 } 18261 18262 vm.widgetStyle = vm.getStyle(); 18263 18264 18265 // Triggered when parameters are changed. 18266 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 18267 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 18268 .then(function (response) { 18269 // Save parameters. 18270
18271 for (var parameter in vm.widget.parameters) { 18272 switch (vm.widget.parameters[parameter].id) { 18273 case 'title': 18274 vm.widget.parameters[parameter].value = data.title; 18275 vm.title = data.title; 18276 break; 18277 18278 case 'showTitle': 18279 vm.widget.parameters[parameter].value = data.showTitle.toString(); 18280 vm.showTitle = data.showTitle; 18281 break; 18282 18283 case 'showPlayerAvatars': 18284 vm.widget.parameters[parameter].value = data.showPlayerAvatars.toString(); 18285 vm.showPlayerAvatars = data.showPlayerAvatars; 18286 break; 18287 18288 case 'widgetTransparency': 18289 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 18290 vm.widgetTransparency = data.widgetTransparency; 18291 break; 18292 18293 case 'backgroundColor': 18294 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 18295 vm.backgroundColor = data.backgroundColor; 18296 break; 18297 18298 case 'border': 18299 vm.widget.parameters[parameter].value = data.border; 18300 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 18301 break; 18302 18303 case 'backgroundImage': 18304 vm.widget.parameters[parameter].value = data.backgroundImage.toString(); 18305 vm.background.image = data.backgroundImage; 18306 break; 18307 18308 case 'backgroundImagePosition': 18309 vm.widget.parameters[parameter].value = data.backgroundImagePosition.toString(); 18310 vm.background.position = data.backgroundImagePosition; 18311 break; 18312 18313 } 18314 } 18315 18316 vm.widgetStyle = vm.getStyle(); 18317 18318 // Update the variable. 18319 widgets[$scope.widget] = angular.toJson(vm.widget); 18320 }) 18321 .catch(function (error) { 18322 bugsnag.notify(error); 18323 }); 18324 }); 18325 18326 $scope.$on('$destroy', listener); 18327 } 18328})(); 18329; 18330(function () { 18331 'use strict'; 18332 18333 angular 18334 .module('app.directives') 18335 .directive('starsOfTheGame', starsOfTheGame) 18336 18337 starsOfTheGame.$inject = []; 18338 18339 function starsOfTheGame() { 18340 return { 18341 restrict: 'E', 18342 scope: { 18343 widget: '=' 18344 }, 18345 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/stars-of-the-game/stars-of-the-game.tpl.html', 18346 controller: 'StarsOfTheGameWidgetController', 18347 controllerAs: 'starsOfTheGame' 18348 }; 18349 } 18350})();; 18351(function () { 18352 'use strict'; 18353 18354 angular 18355 .module('app.directives') 18356 .controller('TeamMatchupWidgetController', TeamMatchupWidgetController); 18357 18358 TeamMatchupWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$translate', 'StatisticService', 'WebsiteEditorService']; 18359 18360 function TeamMatchupWidgetController($rootScope, $scope, $localStorage, $translate, statisticService, websiteEditorService) { 18361 var vm = this; 18362 18363 //State variables 18364 vm.widget = angular.fromJson(widgets[$scope.widget]); 18365 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 18366 .replace(/[\n\r]+/g, ' '))); 18367 vm.periods = []; 18368 vm.sportId = $localStorage.solution.sportId; 18369 vm.visitorBottom = false; 18370 18371 //State functions 18372 vm.getFormatTime = function() { 18373 switch (vm.statusId) { 18374 case 2: 18375 //var periodDuration = parseInt(_.find($localStorage.season.parameters, function(parameter) { 18376 // if ((vm.periodId >= 1) && (vm.periodId <= 4)) { 18377 // return parameter.Code === `PERIOD${vm.periodId}`; 18378 // } else if ((vm.periodId >= 5) && (vm.periodId <= 8)) { 18379 // return parameter.Code === `OVERTIME${vm.periodId}`; 18380 // } 18381 // }).Value); 18382 18383 return moment(new Date(/*moment(`00:${periodDuration}:00`, 'hh:mm:ss') - */moment(vm.time, 'hh:mm:ss')), 'hh:mm:ss') 18384 .format('mm:ss'); //moment(vm.time, 'hh:mm:ss').format('LTS').substr(3, 5); 18385 } 18386 }; 18387 18388 //On component mount 18389 initializeSummary();
18390 for (var parameter in vm.widget.parameters) { 18391 switch (vm.widget.parameters[parameter].id) { 18392 case 'visitorBottom': 18393 vm.visitorBottom = vm.widget.parameters[parameter].value === 'true'; 18394 break; 18395 } 18396 } 18397 18398 // Listener 18399 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 18400 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 18401 .then(function (response) { 18402 for (var parameter in vm.widget.parameters) { 18403 switch (vm.widget.parameters[parameter].id) { 18404 case 'visitorBottom': 18405 vm.widget.parameters[parameter].value = data.visitorBottom.toString(); 18406 vm.visitorBottom = data.visitorBottom; 18407 break; 18408 } 18409 } 18410 widgets[$scope.widget] = angular.toJson(vm.widget); 18411 }) 18412 .catch(function (error) { 18413 bugsnag.notify(error); 18414 }); 18415 }); 18416 18417 $scope.$on('$destroy', listener); 18418 18419 //Functions 18420 function initializeSummary() { 18421 var periods = []; 18422 18423 var numberOfPeriods = 3; 18424 18425 if ($localStorage.season.parameters && $localStorage.season.parameters.length > 0) { 18426 numberOfPeriods = parseInt(_.find($localStorage.season.parameters, function (parameter) { 18427 return parameter.Code === 'PERIODNUMBER' 18428 }).Value); 18429 } 18430 18431 if ($localStorage.solution.sportId == 2 || $localStorage.solution.sportId == 7) { 18432 numberOfPeriods = Math.max(numberOfPeriods, vm.periodId); 18433 18434 for (var i = 1; i <= numberOfPeriods; i++) { 18435 periods.push({ 18436 number: i, 18437 regular: true 18438 }); 18439 } 18440 } 18441 else { 18442 for (var i = 1; i <= numberOfPeriods; i++) { 18443 periods.push({ 18444 number: i, 18445 regular: true 18446 }); 18447 } 18448 18449 if (vm.periodId >= 5 && vm.periodId <= 8) { 18450 for (i = 5; i <= vm.periodId; i++) { 18451 periods.push({ 18452 number: i, 18453 overtime: true 18454 }); 18455 } 18456 } 18457 18458 if (vm.periodId === 9) { // Shootout 18459 periods.push({ 18460 number: 9, 18461 shootout: true 18462 }); 18463 } 18464 } 18465 18466 vm.teams = { 18467 visitor: { 18468 name: vm.visitorTeamName, 18469 logo: vm.visitorTeamAvatar, 18470 abbreviation: _.find(vm.teamList, function(team) { 18471 return team.id === vm.visitorTeamId; 18472 }).abbreviation, 18473 periods: getPeriodEvents(periods, vm.visitorTeamId) 18474 }, 18475 local: { 18476 name: vm.localTeamName, 18477 logo: vm.localTeamAvatar, 18478 abbreviation: _.find(vm.teamList, function(team) { 18479 return team.id === vm.localTeamId; 18480 }).abbreviation, 18481 periods: getPeriodEvents(periods, vm.localTeamId) 18482 } 18483 }; 18484 18485 // Get total goals / total shoutout goals. 18486 vm.teams.visitor.total = getTotalGoals(vm.teams.visitor, true); 18487 vm.teams.visitor.shootout = getTotalShootoutGoals(vm.teams.visitor); 18488 18489 vm.teams.local.total = getTotalGoals(vm.teams.local, false); 18490 vm.teams.local.shootout = getTotalShootoutGoals(vm.teams.local); 18491 18492 if (vm.periodId === 9) {// Calculate the shootout +1 goal. 18493 vm.teams.visitor.total += vm.teams.visitor.shootout > vm.teams.local.shootout ? 1 : 0; 18494 vm.teams.local.total += vm.teams.local.shootout > vm.teams.visitor.shootout ? 1 : 0; 18495 } 18496 18497 vm.periods = periods; 18498 } 18499 18500 function getPeriodEvents(periods, teamId) { 18501 var teamPeriods = angular.fromJson(angular.toJson(periods)); 18502 18503 for (var period in teamPeriods) { 18504 var periodGoals = 0; 18505 var events = _.filter(vm.eventList, function (event) { 18506 if (event.periodId == teamPeriods[period].number && event.teamId == teamId) { 18507 if (event.eventTypeId == statisticService.getSportTeamStatsByType('scorePerio
18507d', vm.sportId)) { 18508 periodGoals += event.value; 18509 } 18510 18511 return (event.eventTypeId === 1 || isShootOutGoal(event)); 18512 } 18513 18514 return false; 18515 }); 18516 18517 if (teamPeriods[period].shootout) { 18518 var count = (_.filter(vm.eventList, function (event) { 18519 if (event.periodId == teamPeriods[period].number && event.teamId == teamId) { 18520 return event.eventTypeId === 6; 18521 } 18522 18523 return false; 18524 })).length; 18525 teamPeriods[period].count = count; 18526 18527 } 18528 18529 teamPeriods[period].goals = events.length + periodGoals; 18530 } 18531 18532 return teamPeriods 18533 } 18534 18535 function isShootOutGoal(event) { 18536 if (event.eventTypeId === 6) { // Shootout 18537 18538 if (vm.sportId == 1) { 18539 return event.qualifier === 257; 18540 } 18541 else { 18542 var goalStatistic = _.find(event.statList, function (statistic) { 18543 return statistic.statTypeId === 12; // Shootout goal 18544 }); 18545 18546 if (goalStatistic) { 18547 return goalStatistic.value === 1; 18548 } else { 18549 return true; 18550 } 18551 } 18552 } 18553 18554 return false; 18555 } 18556 18557 function getTotalGoals(team, isVisitor) { 18558 if ($localStorage.solution.sportId === 7) { 18559 if (isVisitor) { 18560 return vm.visitorResult; 18561 } 18562 else { 18563 return vm.localResult; 18564 } 18565 } 18566 18567 return _.sumBy(team.periods, function(period) { 18568 return period.number != 9 ? period.goals : 0; 18569 }); 18570 } 18571 18572 function getTotalShootoutGoals(team) { 18573 return _.sumBy(team.periods, function(period) { 18574 return period.number === 9 ? period.goals : 0; 18575 }); 18576 } 18577 } 18578})(); 18579; 18580(function () { 18581 'use strict'; 18582 18583 angular 18584 .module('app.directives') 18585 .directive('teamMatchup', teamMatchup) 18586 18587 teamMatchup.$inject = []; 18588 18589 function teamMatchup() { 18590 return { 18591 restrict: 'E', 18592 scope: { 18593 widget: '=' 18594 }, 18595 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/team-matchup/team-matchup.tpl.html', 18596 controller: 'TeamMatchupWidgetController', 18597 controllerAs: 'teamMatchup' 18598 }; 18599 } 18600})();; 18601(function () { 18602 'use strict'; 18603 18604 angular 18605 .module('app.directives') 18606 .controller('GameScoreWidgetController', GameScoreWidgetController); 18607 18608 GameScoreWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$translate', 'StatisticService', 'WebsiteEditorService']; 18609 18610 function GameScoreWidgetController($rootScope, $scope, $localStorage, $translate, statisticService, websiteEditorService) { 18611 var vm = this; 18612 18613 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 18614 vm.widget = angular.fromJson(widgets[$scope.widget]); 18615 vm.periods = []; 18616 vm.sportId = $localStorage.solution.sportId; 18617 vm.visitorBottom = false; 18618 18619 for (var parameter in vm.widget.parameters) { 18620 switch (vm.widget.parameters[parameter].id) { 18621 case 'visitorBottom': 18622 vm.visitorBottom = vm.widget.parameters[parameter].value === 'true'; 18623 break; 18624 } 18625 } 18626 18627 initializeSummary(); 18628 18629 // Listener 18630 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 18631 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 18632 .then(function (response) {
18633 for (var parameter in vm.widget.parameters) { 18634 switch (vm.widget.parameters[parameter].id) { 18635 case 'visitorBottom': 18636 vm.widget.parameters[parameter].value = data.visitorBottom.toString(); 18637 vm.visitorBottom = data.visitorBottom; 18638 break; 18639 } 18640 } 18641 widgets[$scope.widget] = angular.toJson(vm.widget); 18642 initializeSummary(); 18643 }) 18644 .catch(function (error) { 18645 bugsnag.notify(error); 18646 }); 18647 }); 18648 18649 $scope.$on('$destroy', listener); 18650 18651 vm.getFormatTime = function () { 18652 switch (vm.statusId) { 18653 case 2: 18654 var periodDuration = parseInt(_.find($localStorage.season.parameters, function (parameter) { 18655 if ((vm.periodId >= 1) && (vm.periodId <= 4)) { 18656 return parameter.Code === `PERIOD${vm.periodId}`; 18657 } else if ((vm.periodId >= 5) && (vm.periodId <= 8)) { 18658 return parameter.Code === `OVERTIME${vm.periodId}`; 18659 } 18660 }).Value); 18661 18662 return moment(new Date(/*moment(`00:${periodDuration}:00`, 'hh:mm:ss') - */moment(vm.time, 'hh:mm:ss')), 'hh:mm:ss') 18663 .format('mm:ss'); //moment(vm.time, 'hh:mm:ss').format('LTS').substr(3, 5); 18664 } 18665 }; 18666 18667 vm.getFormatDate = function () { 18668 if (!vm.date) { 18669 return ''; 18670 } 18671 18672 if (vm.startTime) { 18673 var dateString = vm.date.split('T')[0]; 18674 date = moment(dateString + 'T' + vm.startTime); 18675 18676 return date.format($translate.instant('directives.widgets.games.gameScore.labels.datetimeformat')); 18677 } 18678 else { 18679 var date = moment(vm.date); 18680 return date.format($translate.instant('directives.widgets.games.gameScore.labels.dateformat')); 18681 } 18682 } 18683 18684 function initializeSummary() { 18685 var periods = []; 18686 18687 var numberOfPeriods = 3; 18688 18689 if ($localStorage.season.parameters && $localStorage.season.parameters.length > 0) { 18690 numberOfPeriods = parseInt(_.find($localStorage.season.parameters, function (parameter) { 18691 return parameter.Code === 'PERIODNUMBER' 18692 }).Value); 18693 } 18694 18695 for (var i = 1; i <= numberOfPeriods; i++) { 18696 periods.push({ 18697 number: i, 18698 regular: true 18699 }); 18700 } 18701 18702 if (vm.periodId >= 5 && vm.periodId <= 8) { 18703 for (i = 5; i <= vm.periodId; i++) { 18704 periods.push({ 18705 number: i, 18706 overtime: true 18707 }); 18708 } 18709 } 18710 18711 if (vm.periodId === 9) { // Shootout 18712 periods.push({ 18713 number: 9, 18714 shootout: true 18715 }); 18716 } 18717 18718 const local = { 18719 name: vm.localTeamName, 18720 logo: vm.localTeamAvatar, 18721 abbreviation: _.find(vm.teamList, function (team) { 18722 return team.id === vm.localTeamId; 18723 }).abbreviation, 18724 score: vm.localResult 18725 }; 18726 18727 const visitor = { 18728 name: vm.visitorTeamName, 18729 logo: vm.visitorTeamAvatar, 18730 abbreviation: _.find(vm.teamList, function (team) { 18731 return team.id === vm.visitorTeamId; 18732 }).abbreviation, 18733 score: vm.visitorResult 18734 } 18735 18736 if (vm.visitorBottom) { 18737 vm.teams = [local, visitor]; 18738 } else { 18739 vm.teams = [visitor, local]; 18740 } 18741 18742 } 18743 18744 } 18745})(); 18746; 18747(function () { 18748 'use strict'; 18749 18750 angular 18751 .module('app.directives') 18752 .directive('gameScore', gameScore) 18753 18754 gameScore.$inject = []; 18755 18756 function gameScore() { 18757 return { 18758 restrict: 'E', 18759 scope: { 18760 widget: '=' 18761 }, 18762 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-score/game-score.tpl.html', 18763 controller: 'GameScoreWidgetController', 18764 controllerAs: 'gameScore' 18765 }; 18766 } 18767})();; 18768(function () { 18769 'use strict'; 18770 18771 angular 18772 .module('app.directives') 18773 .controller('GameNoteWidgetController', GameNoteWidgetController); 18774 18775 GameNoteWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 18776 18777 function GameNoteWidgetController($rootScope, $scope, websiteEditorService) { 18778 var vm = this; 18779 18780 vm = Object.assign(vm, angular.fromJson(__gameDetails__.replace(/[\n\r]+/g, ' '))); 18781 vm.widget = angular.fromJson(widgets[$scope.widget]); 18782 console.log(vm.widget); 18783 vm.note = _.get(_.find(vm.properties, { name: 'Comment' }), 'value'); 18784 18785 // Set view model parameters.
18786 for (var parameter in vm.widget.parameters) { 18787 switch (vm.widget.parameters[parameter].id) { 18788 case 'title': 18789 vm.title = vm.widget.parameters[parameter].value; 18790 break; 18791 18792 case 'showTitle': 18793 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 18794 break; 18795 18796 case 'widgetTransparency': 18797 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 18798 break; 18799 18800 case 'backgroundColor': 18801 vm.backgroundColor = vm.widget.parameters[parameter].value; 18802 break; 18803 case 'titleColor': 18804 vm.titleColor = vm.widget.parameters[parameter].value; 18805 break; 18806 case 'border': 18807 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 18808 break; 18809 } 18810 } 18811 18812 vm.getStyle = function () { 18813 var style = {}; 18814 if (!vm.widgetTransparency) { 18815 style['background-color'] = vm.backgroundColor; 18816 style['border-color'] = vm.border.color; 18817 } 18818 18819 style['border-width'] = `${vm.border.width}px`; 18820 style['border-color'] = vm.border.color; 18821 style['border-radius'] = `${vm.border.radius}px`; 18822 18823 return style; 18824 } 18825 18826 vm.getTitleStyle = function () { 18827 var style = {}; 18828 18829 style['color'] = `${vm.titleColor}`; 18830 18831 return style; 18832 } 18833 18834 // Triggered when parameters are changed. 18835 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 18836 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 18837 .then(function (response) { 18838 // Save parameters. 18839 18840 for (var parameter in vm.widget.parameters) { 18841 switch (vm.widget.parameters[parameter].id) { 18842 case 'title': 18843 vm.widget.parameters[parameter].value = data.title; 18844 vm.title = data.title; 18845 break; 18846 18847 case 'showTitle': 18848 vm.widget.parameters[parameter].value = data.showTitle.toString(); 18849 vm.showTitle = data.showTitle; 18850 break; 18851 18852 case 'widgetTransparency': 18853 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 18854 vm.widgetTransparency = data.widgetTransparency; 18855 break; 18856 18857 case 'backgroundColor': 18858 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 18859 vm.backgroundColor = data.backgroundColor; 18860 break; 18861 case 'titleColor': 18862 vm.widget.parameters[parameter].value = data.titleColor.toString(); 18863 vm.titleColor = data.titleColor; 18864 break; 18865 case 'border': 18866 vm.widget.parameters[parameter].value = data.border; 18867 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 18868 } 18869 } 18870 18871 // Update the variable. 18872 widgets[$scope.widget] = angular.toJson(vm.widget); 18873 }) 18874 .catch(function (error) { 18875 bugsnag.notify(error); 18876 }); 18877 }); 18878 18879 var noteListener = $rootScope.$on(`onNoteChange-${vm.id}`, function (event, note) { 18880 vm.note = note; 18881 }) 18882 18883 $scope.$on('$destroy', listener); 18884 $scope.$on('$destroy', noteListener); 18885 } 18886})(); 18887; 18888(function () { 18889 'use strict'; 18890 18891 angular 18892 .module('app.directives') 18893 .directive('gameNote', gameNote) 18894 18895 gameNote.$inject = []; 18896
18897 function gameNote() { 18898 return { 18899 restrict: 'E', 18900 scope: { 18901 widget: '=' 18902 }, 18903 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/games/game-note/game-note.tpl.html', 18904 controller: 'GameNoteWidgetController', 18905 controllerAs: 'gameNote' 18906 }; 18907 } 18908})();; 18909(function () { 18910 'use strict'; 18911 18912 angular 18913 .module('app.directives') 18914 .controller('GameStatusWidgetController', GameStatusWidgetController); 18915 18916 GameStatusWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$timeout', '$translate', '$filter', 'ScoreboardBaseballService', 'FacilityService', 'GoogleMapService', 'SignalrService']; 18917 18918 function GameStatusWidgetController($rootScope, $scope, $localStorage, $timeout, $translate, $filter, scoreboardBaseballService, facilityService, googleMapService, signalrService) { 18919 var vm = this; 18920 vm.widget = angular.fromJson(widgets[$scope.widget]) 18921 vm.isPair = true; 18922 vm.isMobile = false; 18923 18924 vm.clickFacility = function () { 18925 var url = googleMapService.getMapSearchUrl(vm.facility[0].facilityAddress); 18926 window.open(url, "_blank"); 18927 } 18928 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 18929 .replace(/[\n\r]+/g, ' '))); 18930 18931 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.BaseballGameUpdate(vm.id)); 18932 18933 signalrConnection.on(signalrService.EVENTS.BaseballScoreboardUpdate, function (response) { 18934 var gameUpdated = angular.fromJson(response); 18935 18936 if (gameUpdated.gameId == vm.id) { 18937 vm.response = gameUpdated.score; 18938 vm.hasGame = vm.response && true; 18939 $scope.$apply(); 18940 } 18941 }); 18942 18943 vm.getStatusGame = function () { 18944 var gameStatus = ''; 18945 switch (vm.sportId) { 18946 // Baseball 18947 case 2: 18948 if (vm.properties) { 18949 var gameStatusProperty = _.find(vm.properties, { name: 'GameStatus' }); 18950 if (gameStatusProperty) { 18951 var gameStatusProperties = _.split(gameStatusProperty.value, '-'); 18952 if (gameStatusProperties) { 18953 switch (vm.statusId) { 18954 case 2: 18955 gameStatus = $translate.instant('directives.widgets.scores.labels.' + gameStatusProperties[0]) + ' ' + $filter('ordinal')(gameStatusProperties[1], true) + ' - ' + gameStatusProperties[2] + $translate.instant('directives.widgets.scores.labels.out'); 18956 break; 18957 case 3: 18958 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 18959 gameStatus += ' ' + gameStatusProperties[1]; 18960 break; 18961 } 18962 } 18963 } 18964 } 18965 break; 18966 default: 18967 { 18968 switch (vm.statusId) { 18969 case 2: 18970 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 18971 break; 18972 case 3: 18973 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 18974 if (vm.periodId > 4) { 18975 gameStatus += ' / '; 18976 } 18977 if (vm.periodId >= 5 && vm.periodId <= 8) { 18978 gameStatus += $translate.instant('directives.widgets.scores.labels.overtime'); 18979 } 18980 if (vm.periodId == 9) { 18981 gameStatus += $translate.instant('directives.widgets.scores.labels.shootout'); 18982 } 18983 break; 18984 } 18985 } 18986 } 18987 return gameStatus; 18988 } 18989 vm.gameTime = vm.date.slice(0, 11) + vm.startTime; 18990 18991 18992 vm.getStyle = function (i) { 18993 let style = {}; 18994 if (i % 2 != 0) { 18995 style['background-color'] = '#f0f0f0'; 18996 vm.isPair = false; 18997 } 18998 else { 18999 style['background-color'] = '#fff'; 19000 style['border-bottom'] = '1px solid lightgrey'; 19001 vm.isPair = true; 19002 } 19003 return style; 19004 } 19005 19006 vm.getFormatTime = function (score) { 19007 switch (score.statusId) { 19008 case 3: 19009 case 1: 19010 return moment(score.startTime, 'hh:mm').format('LT'); 19011 19012 case 2: 19013 return moment(score.time, 'hh:mm:ss').format('LTS').substr(3, 5); 19014 } 19015 }; 19016 19017 $scope.$on('score:update-gameDetails', function (event, version) { 19018 getScoreboard(version); 19019 }) 19020 19021 getScoreboard(); 19022 function getScoreboard(version) { 19023 scoreboardBaseballService.getScoreboardBaseball(__solutionId__, vm.id, version) 19024 .then(function (response) { 19025 vm.response = response.data.score; 19026 vm.hasGame = vm.response && true; 19027 }) 19028 .catch(function (error) { 19029 // TODO Bugsnag 19030 // console.log(error) 19031 }); 19032 } 19033 19034 facilityService.getFacilitiesDetailsWithUpdateDate(__solutionId__) 19035 .then(function (response) { 19036 vm.facility = _.filter(response.data.facilities, function (facility) { 19037 return facility.name === vm.sportCenterName 19038 }) 19039 }) 19040 .catch(function (error) { 19041 bugsnag.notify(error); 19042 }); 19043 19044 vm.getStat = function (teamId, statId, categoryId) { 19045 for (const team of vm.teamList) { 19046 if (team.id === teamId) { 19047 for (const player of team.players) { 19048 if (!player.id && player.categoryId === categoryId) { 19049 var stat = _.find(player.stats, { statTypeId: statId }); 19050 if (stat) { 19051 return stat.displayValue; 19052 } 19053 } 19054 } 19055 return "0"; 19056 } 19057 } 19058 } 19059 } 19060})(); 19061; 19062(function () { 19063 'use strict'; 19064 19065 angular 19066 .module('app.directives') 19067 .directive('gameStatus', gameStatus) 19068 19069 gameStatus.$inject = []; 19070 19071 function gameStatus() { 19072 return { 19073 restrict: 'E', 19074 scope: { 19075 widget: '=' 19076 }, 19077 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/game-status/game-status.tpl.html', 19078 controller: 'GameStatusWidgetController', 19079 controllerAs: 'gameStatus', 19080 link: function (scope, element, attribut, controller) { 19081 scope.$watch(function () { 19082 if (element.find('.game-status')[0]) { 19083 return element.find('.game-status')[0].clientWidth 19084 } 19085 }, function (container) { 19086 if (container <= 910) { 19087 controller.isMobile = true; 19088 } 19089 else if (container > 910) { 19090 controller.isMobile = false; 19091 } 19092 }); 19093 } 19094 }; 19095 } 19096})(); 19097; 19098(function () { 19099 'use strict'; 19100 19101 angular 19102 .module('app.directives') 19103 .controller('GameStatusBasketballWidgetController', GameStatusBasketballWidgetController); 19104 19105 GameStatusBasketballWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$timeout', '$translate', '$filter', '$q', 'SeasonService', 'ScoreboardBasketballService', 'FacilityService', 'UrlService', 'GoogleMapService']; 19106 19107 function GameStatusBasketballWidgetController($rootScope, $scope, $localStorage, $timeout, $translate, $filter, $q, seasonService, scoreboardBasketballService, facilityService, urlService, googleMapService) { 19108 var vm = this; 19109 vm.widget = angular.fromJson(widgets[$scope.widget]) 19110 vm.isPair = true; 19111 vm.isMobile = false; 19112 19113 vm.url = urlService; 19114 19115 vm.clickFacility = function () { 19116 var url = googleMapService.getMapSearchUrl(vm.facility[0].facilityAddress); 19117 window.open(url, "_blank"); 19118 } 19119 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 19120 .replace(/[\n\r]+/g, ' '))); 19121 19122 var seasonParametersPromise = seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId); 19123 var detailsPromise = scoreboardBasketballService.getDetails(__solutionId__, vm.id); 19124 var facilityPromise = facilityService.getFacilitiesDetailsWithUpdateDate(__solutionId__); 19125 19126 $q.all([seasonParametersPromise, detailsPromise, facilityPromise]).then(function (results) { 19127 19128 //season parameters promise 19129 19130 var parameters = results[0]; 19131 vm.seasonParameters = parameters.data || []; 19132 19133 //details promise 19134 19135 vm.scoreboardResponse = results[1].data; 19136 19137 vm.localTeamColor = getTeamColor(true); 19138 vm.visitorTeamColor = getTeamColor(false); 19139 vm.localBonusPts = getTeamBonusPts(true); 19140 vm.visitorBonusPts = getTeamBonusPts(false); 19141 19142 vm.hasGame = vm.scoreboardResponse && true; 19143 vm.quarters = [] 19144 19145 vm.periodNumber = parseInt(_.get(_.find(vm.seasonParameters, { Code: 'PERIODNUMBER' }), 'Value')); 19146 vm.periodNumberGame = vm.periodNumber; 19147 vm.useTime = parseInt(_.get(_.find(vm.seasonParameters, { Code: 'USETIME' }), 'Value')); 19148 19149 if (vm.scoreboardResponse.periodId > vm.periodNumber) { 19150 vm.periodNumberGame = vm.scoreboardResponse.periodId; 19151 } 19152 19153 for (var i = 0; i < vm.periodNumberGame; i++) { 19154 vm.quarters.push({ period: (i + 1), localScore: 0, visitorScore: 0 }); 19155 } 19156 19157 var shootEvents = _.filter(vm.scoreboardResponse.eventList, (event) => { return event.eventtypeid == 13 }); 19158 19159 vm.events = _.groupBy( 19160 _.map(shootEvents, 19161 (event) => { 19162 var eventDefinition = JSON.parse(event.content); 19163 if (eventDefinition.type == 'shoot') { 19164 var shoot = new Shoot(eventDefinition, event.id); 19165 return shoot; 19166 } 19167 19168 return null; 19169 19170 }), 'period'); 19171 _.forEach(vm.events, (event) => { 19172 _.forEach(event, (shot) => { 19173 if (shot.success == "true") { 19174 if (shot.teamId == vm.scoreboardResponse.localTeamId) { 19175 vm.quarters[shot.period - 1].localScore += parseInt(shot.pointsCount) 19176 } else { 19177 vm.quarters[shot.period - 1].visitorScore += parseInt(shot.pointsCount) 19178 } 19179 } 19180 }) 19181 }) 19182 19183 //facility promise 19184 vm.facility = _.filter(results[2].data.facilities, function (facility) { 19185 return facility.name === vm.sportCenterName 19186 }) 19187 }) 19188 19189 vm.getStatusGame = function () { 19190 var gameStatus = ''; 19191 switch (vm.sportId) { 19192 case 4: 19193 { 19194 switch (vm.statusId) { 19195 case 2: 19196 if (vm.periodId > vm.periodNumber) { 19197 gameStatus += ($translate.instant('directives.widgets.scores.labels.overtime') + '. ' + (vm.periodId - vm.periodNumber) + ' - ' + vm.getFormatTime(vm)); 19198 } else { 19199 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 19200 } 19201 break; 19202 case 3: 19203 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 19204 if (vm.periodId > vm.periodNumber) { 19205 gameStatus += (' / ' + $translate.instant('directives.widgets.scores.labels.overtime') + (vm.periodId - vm.periodNumber)); 19206 } else { 19207 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 19208 } 19209 break; 19210 } 19211 break; 19212 } 19213 default: 19214 { 19215 switch (vm.statusId) { 19216 case 2: 19217 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 19218 break; 19219 case 3: 19220 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 19221 if (vm.periodId > 4) { 19222 gameStatus += ' / '; 19223 } 19224 if (vm.periodId >= 5 && vm.periodId <= 8) { 19225 gameStatus += $translate.instant('directives.widgets.scores.labels.overtime'); 19226 } 19227 if (vm.periodId == 9) { 19228 gameStatus += $translate.instant('directives.widgets.scores.labels.shootout'); 19229 } 19230 break; 19231 } 19232 break; 19233 } 19234 } 19235 return gameStatus; 19236 } 19237 vm.gameTime = vm.date.slice(0, 11) + vm.startTime; 19238 19239 vm.getStyle = function (i) { 19240 let style = {}; 19241 if (i % 2 != 0) { 19242 style['background-color'] = '#f0f0f0'; 19243 vm.isPair = false; 19244 } 19245 else { 19246 style['background-color'] = '#fff'; 19247 style['border-bottom'] = '1px solid lightgrey'; 19248 vm.isPair = true; 19249 } 19250 return style; 19251 } 19252 19253 vm.getFormatTime = function (score) { 19254 switch (score.statusId) { 19255 case 3: 19256 case 1: 19257 return moment(score.startTime, 'hh:mm').format('LT'); 19258 19259 case 2: 19260 return moment(score.time, 'hh:mm:ss').format('LTS').substr(3, 5); 19261 } 19262 }; 19263 19264 vm.getStat = function (teamId, statId, categoryId) { 19265 for (const team of vm.teamList) { 19266 if (team.id === teamId) { 19267 for (const player of team.players) { 19268 if (!player.id && player.categoryId === categoryId) { 19269 var stat = _.find(player.stats, { statTypeId: statId }); 19270 if (stat) { 19271 return stat.displayValue; 19272 } 19273 } 19274 } 19275 return '0'; 19276 } 19277 } 19278 } 19279 19280 function Shoot(_event, eventId) { 19281 var self = this; 19282
19282 angular.extend(self, _event); 19283 19284 self.error = null; 19285 self.id = eventId; 19286 19287 var shooterProperty = _.find(self.properties, { name: 'shooter' }); 19288 19289 self.team = shooterProperty.teamid == vm.scoreboardResponse.teamList[0].id ? vm.scoreboardResponse.teamList[0] : vm.scoreboardResponse.teamList[1]; 19290 self.teamId = self.team.id; 19291 self.shooterPlayer = _.find(self.team.players, { id: shooterProperty.id }); 19292 self.propertyId = _.get(self.shooterPlayer, 'id'); 19293 self.pointsCount = _.get(_.find(self.details, { 'name': 'pointsCount' }), 'value'); 19294 self.success = _.get(_.find(self.details, { 'name': 'success' }), 'value'); 19295 19296 self.hasError = function () { 19297 if (!self.propertyId) { 19298 self.error = { type: 'player' } 19299 return true; 19300 } 19301 19302 if (!vm.teams[self.teamId].playerCollection[self.propertyId]) { 19303 self.error = { type: 'player' } 19304 return true; 19305 } 19306 19307 self.error = null; 19308 return false; 19309 } 19310 19311 self.formatEvent = function () { 19312 var eventContent = {}; 19313 eventContent.id = self.id; 19314 eventContent.type = 'shoot'; 19315 eventContent.period = self.period; 19316 eventContent.time = self.time; 19317 19318 eventContent.details = []; 19319 eventContent.details.push({ name: 'success', value: self.success }); 19320 eventContent.details.push({ name: 'pointsCount', value: self.pointsCount }); 19321 19322 eventContent.properties = []; 19323 eventContent.properties.push({ id: self.propertyId, name: 'shooter', teamid: self.teamId }); 19324 19325 return eventContent; 19326 } 19327 19328 self.timeSetter = function (time) { 19329 if (angular.isDefined(time)) { 19330 if (time.match(/^\d$/)) { 19331 time = `0${time}:00`; 19332 } 19333 19334 if (time.match(/^\d{4}$/)) { 19335 time = time.slice(0, 2) + ':' + time.slice(2); 19336 } 19337 19338 if (time.match(/^\d{2}:\d{2}$/)) { 19339 self.time = `00:${time}`; 19340 } 19341 } 19342 19343 return self.time.slice(-5); 19344 } 19345 19346 self.editMode = false; 19347 } 19348 19349 function getTeamBonusPts(isLocal) { 19350 var bonusPoints = '0' 19351 if (isLocal) { 19352 var localTeam = _.find(vm.scoreboardResponse.teamList, { name: vm.scoreboardResponse.localTeamName }); 19353 if (localTeam) { 19354 bonusPoints = _.get(_.find(localTeam.teamProperties, { name: 'bonusPts' }), "value"); 19355 } 19356 } else { 19357 var visitorTeam = _.find(vm.scoreboardResponse.teamList, { name: vm.scoreboardResponse.visitorTeamName }); 19358 if (visitorTeam) { 19359 bonusPoints = _.get(_.find(visitorTeam.teamProperties, { name: 'bonusPts' }), "value"); 19360 } 19361 } 19362 return bonusPoints != null ? bonusPoints : '0'; 19363 } 19364 19365 function getTeamColor(isLocal) { 19366 var color = ''; 19367 if (isLocal) { 19368 var localTeam = _.find(vm.scoreboardResponse.teamList, { name: vm.scoreboardResponse.localTeamName }); 19369 if (localTeam) { 19370 color = _.get(_.find(localTeam.teamProperties, { name: 'color' }), "value"); 19371 } 19372 return color != null ? color : 'black'; 19373 19374 } else { 19375 var visitorTeam = _.find(vm.scoreboardResponse.teamList, { name: vm.scoreboardResponse.visitorTeamName }); 19376 if (visitorTeam) { 19377 color = _.get(_.find(visitorTeam.teamProperties, { name: 'color' }), "value"); 19378 } 19379 return color != null ? color : 'white'; 19380 } 19381 } 19382 } 19383})(); 19384; 19385(function () { 19386 'use strict'; 19387 19388 angular 19389 .module('app.directives') 19390 .directive('gameStatusBasketball', gameStatusBasketball) 19391 19392 gameStatusBasketball.$inject = []; 19393 19394 function gameStatusBasketball() { 19395 return { 19396 restrict: 'E', 19397 scope: { 19398 widget: '=' 19399 }, 19400 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/game-status/basketball/game-status-basketball.tpl.html', 19401 controller: 'GameStatusBasketballWidgetController', 19402 controllerAs: 'gameStatusBasketball', 19403 link: function (scope, element, attribut, controller) { 19404 scope.$watch(function () { 19405 if (element.find('.game-status-baskletball')[0]) { 19406 return element.find('.game-status-basketball')[0].clientWidth 19407 } 19408 }, function (container) { 19409 if (container <= 910) { 19410 controller.isMobile = true; 19411 } 19412 else if (container > 910) { 19413 controller.isMobile = false; 19414 } 19415 }); 19416 } 19417 }; 19418 } 19419})(); 19420; 19421(function () { 19422 'use strict'; 19423 19424 angular 19425 .module('app.directives') 19426 .controller('GameStatusGenericWidgetController', GameStatusGenericWidgetController); 19427 19428 GameStatusGenericWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$timeout', '$translate', '$filter', '$q', 'SeasonService', 'StatisticService', 'FacilityService', 'UrlService', 'GoogleMapService']; 19429 19430 function GameStatusGenericWidgetController($rootScope, $scope, $localStorage, $timeout, $translate, $filter, $q, seasonService, statisticService, facilityService, urlService, googleMapService) { 19431 var vm = this; 19432 vm.widget = angular.fromJson(widgets[$scope.widget]) 19433 vm.isPair = true; 19434 vm.isMobile = false; 19435 vm.bonusPointsStat = { 3: 182 } 19436 19437 vm.url = urlService; 19438 19439 vm.clickFacility = function () { 19440 var url = googleMapService.getMapSearchUrl(vm.facility[0].facilityAddress); 19441 window.open(url, "_blank"); 19442 } 19443 vm = Object.assign(vm, angular.fromJson(__gameDetails__ 19444 .replace(/[\n\r]+/g, ' '))); 19445 19446 vm.localBonusPts = getTeamBonusPts(true); 19447 vm.visitorBonusPts = getTeamBonusPts(false); 19448 19449 var seasonParametersPromise = seasonService.getSeasonParametersBySeasonId(__solutionId__, vm.seasonId); 19450 var facilityPromise = facilityService.getFacilitiesDetailsWithUpdateDate(__solutionId__); 19451 19452 $q.all([seasonParametersPromise, facilityPromise]).then(function (results) { 19453 19454 //season parameters promise 19455 19456 var parameters = results[0]; 19457 vm.seasonParameters = parameters.data || []; 19458 19459 //details promise 19460 19461 vm.hasGame = true; 19462 vm.quarters = [] 19463 19464 vm.periodNumber = parseInt(_.get(_.find(vm.seasonParameters, { Code: 'PERIODNUMBER' }), 'Value')); 19465 vm.periodNumberGame = vm.periodNumber; 19466 vm.useTime = parseInt(_.get(_.find(vm.seasonParameters, { Code: 'USETIME' }), 'Value')); 19467 19468 if (vm.periodId > vm.periodNumber) { 19469 vm.periodNumberGame = vm.periodId; 19470 } 19471 19472 for (var i = 0; i < vm.periodNumberGame; i++) { 19473 vm.quarters.push({ period: (i + 1), localScore: 0, visitorScore: 0 }); 19474 } 19475 19476 19477 var teamPeriods = angular.fromJson(angular.toJson(vm.quarters)); 19478 19479 for (var period of teamPeriods) { 19480 var periodGoals = 0; 19481 var events = _.filter(vm.eventList, function (event) { 19482 return event.periodId == period.period && event.eventTypeId == statisticService.getSportTeamStatsByType('scorePerio
19482d', vm.sportId); 19483 }); 19484 19485 events.forEach(function (event) { 19486 if (event.teamId == vm.localTeamId) { 19487 vm.quarters[event.periodId - 1].localScore += event.value; 19488 } 19489 else { 19490 vm.quarters[event.periodId - 1].visitorScore += event.value; 19491 } 19492 }) 19493 } 19494 19495 //facility promise 19496 vm.facility = _.filter(results[1].data.facilities, function (facility) { 19497 return facility.name === vm.sportCenterName 19498 }) 19499 }) 19500 19501 vm.getStatusGame = function () { 19502 var gameStatus = ''; 19503 switch (vm.sportId) { 19504 case 4: 19505 { 19506 switch (vm.statusId) { 19507 case 2: 19508 if (vm.periodId > vm.periodNumber) { 19509 gameStatus += ($translate.instant('directives.widgets.scores.labels.overtime') + '. ' + (vm.periodId - vm.periodNumber) + ' - ' + vm.getFormatTime(vm)); 19510 } else { 19511 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 19512 } 19513 break; 19514 case 3: 19515 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 19516 if (vm.periodId > vm.periodNumber) { 19517 gameStatus += (' / ' + $translate.instant('directives.widgets.scores.labels.overtime') + (vm.periodId - vm.periodNumber)); 19518 } else { 19519 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 19520 } 19521 break; 19522 } 19523 break; 19524 } 19525 default: 19526 { 19527 switch (vm.statusId) { 19528 case 2: 19529 gameStatus = $filter('ordinal')(vm.periodId, true) + ' - ' + vm.getFormatTime(vm); 19530 break; 19531 case 3: 19532 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 19533 if (vm.periodId > 4) { 19534 gameStatus += ' / '; 19535 } 19536 if (vm.periodId >= 5 && vm.periodId <= 8) { 19537 gameStatus += $translate.instant('directives.widgets.scores.labels.overtime'); 19538 } 19539 if (vm.periodId == 9) { 19540 gameStatus += $translate.instant('directives.widgets.scores.labels.shootout'); 19541 } 19542 break; 19543 } 19544 break; 19545 } 19546 } 19547 return gameStatus; 19548 } 19549
19550 vm.gameTime = vm.date.slice(0, 11) + (vm.startTime ? vm.startTime : '00:00:00'); 19551 19552 vm.getStyle = function (i) { 19553 let style = {}; 19554 if (i % 2 != 0) { 19555 style['background-color'] = '#f0f0f0'; 19556 vm.isPair = false; 19557 } 19558 else { 19559 style['background-color'] = '#fff'; 19560 style['border-bottom'] = '1px solid lightgrey'; 19561 vm.isPair = true; 19562 } 19563 return style; 19564 } 19565 19566 vm.getFormatTime = function (score) { 19567 switch (score.statusId) { 19568 case 3: 19569 case 1: 19570 return moment(score.startTime, 'hh:mm').format('LT'); 19571 19572 case 2: 19573 return moment(score.time, 'hh:mm:ss').format('LTS').substr(3, 5); 19574 } 19575 }; 19576 19577 function getTeamBonusPts(isLocal) { 19578 var bonusPoints = '0' 19579 if (isLocal) { 19580 var localTeam = _.find(vm.teamList, { id: vm.localTeamId }); 19581 if (localTeam) { 19582 bonusPoints = _.get(_.find(localTeam.stats, { statTypeId: vm.bonusPointsStat[vm.sportId] }), "value"); 19583 } 19584 } else { 19585 var visitorTeam = _.find(vm.teamList, { id: vm.visitorTeamId }); 19586 if (visitorTeam) { 19587 bonusPoints = _.get(_.find(visitorTeam.stats, { statTypeId: vm.bonusPointsStat[vm.sportId] }), "value"); 19588 } 19589 } 19590 return bonusPoints != null ? bonusPoints : '0'; 19591 } 19592 } 19593})(); 19594; 19595(function () { 19596 'use strict'; 19597 19598 angular 19599 .module('app.directives') 19600 .directive('gameStatusGeneric', gameStatusGeneric) 19601 19602 gameStatusGeneric.$inject = []; 19603 19604 function gameStatusGeneric() { 19605 return { 19606 restrict: 'E', 19607 scope: { 19608 widget: '=' 19609 }, 19610 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/game-status/generic/game-status-generic.tpl.html', 19611 controller: 'GameStatusGenericWidgetController', 19612 controllerAs: 'gameStatusGeneric', 19613 link: function (scope, element, attribut, controller) { 19614 scope.$watch(function () { 19615 if (element.find('.game-status-generic')[0]) { 19616 return element.find('.game-status-generic')[0].clientWidth 19617 } 19618 }, function (container) { 19619 if (container <= 910) { 19620 controller.isMobile = true; 19621 } 19622 else if (container > 910) { 19623 controller.isMobile = false; 19624 } 19625 }); 19626 } 19627 }; 19628 } 19629})(); 19630; 19631(function () { 19632 'use strict'; 19633 19634 angular 19635 .module('app.directives') 19636 .controller('LoginWidgetController', LoginWidgetController); 19637 19638 LoginWidgetController.$inject = ['$rootScope', '$scope', '$window', '$location', '$localStorage', 'AuthenticationService']; 19639 19640 function LoginWidgetController($rootScope, $scope, $window, $location, $localStorage, authenticationService) { 19641 var vm = this; 19642 vm.submit = false; 19643 vm.failedValidation = false; 19644 vm.stayConnected = true; 19645 19646 if ($location.search().uid) { 19647 vm.submit = true; 19648 19649 authenticationService.loginWithToken($location.search().uid).then(function (response) { 19650 vm.submit = false; 19651 if (response.data.signIn) { 19652 acceptSignIn(response); 19653 } 19654 }).catch(function (error) { 19655 vm.failedValidation = true; 19656 vm.submit = false; 19657 bugsnag.notify(new Error(error.data.Message)); 19658 }); 19659 } 19660 else { 19661 vm.isAuthenticated = angular.isDefined($localStorage.__KreezeeSession__); 19662 if (vm.isAuthenticated) { 19663 $window.location.href = ''; 19664 } 19665 } 19666 19667 19668 vm.signIn = function() { 19669 vm.form.$setSubmitted(); 19670 19671 if (vm.form.$valid) { 19672 vm.submit = true; 19673 vm.failedValidation = false; 19674 19675 var credential = { 19676 username: vm.email, 19677 password: vm.password, 19678 stayconnected: vm.stayConnected 19679 }; 19680 19681 authenticationService.loginSolution(credential, $localStorage.solution.id) 19682 .then(function(response) { 19683 vm.submit = false; 19684 if (response.data.signIn) { 19685 acceptSignIn(response); 19686 } else { 19687 vm.failedValidation = true; 19688 } 19689 19690 }).catch(function(error) { 19691 vm.failedValidation = true; 19692 vm.submit = false; 19693 bugsnag.notify(new Error(error.data.Message)); 19694 }); 19695 } 19696 }; 19697 19698 function acceptSignIn(response) { 19699 var redirect = '/'; 19700 19701 if ($location.search().page) { 19702 redirect += $location.search().page; 19703 } 19704 19705 if ($location.search().redirect) { 19706 redirect += `?section=${$location.search().redirect}`; 19707 } 19708 19709 $localStorage.__KreezeeSession__ = angular.fromJson(response.headers('__KreezeeSession__')); 19710 $window.location.href = redirect; 19711 } 19712 19713 } 19714})(); 19715; 19716(function () { 19717 'use strict'; 19718 19719 angular 19720 .module('app.directives') 19721 .directive('login', login); 19722 19723 login.$inject = []; 19724 19725 function login() { 19726 return { 19727 restrict: 'E', 19728 scope: { 19729 widget: '=' 19730 }, 19731 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/login/login.tpl.html', 19732 controller: 'LoginWidgetController', 19733 controllerAs: 'login' 19734 }; 19735 } 19736})();; 19737(function () { 19738 'use strict'; 19739 19740 angular 19741 .module('app.directives') 19742 .controller('ImageBoxWidgetController', ImageBoxWidgetController); 19743 19744 ImageBoxWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService']; 19745 19746 function ImageBoxWidgetController($rootScope, $scope, $localStorage, websiteEditorService) { 19747 var vm = this; 19748 19749 // Apply website values to view model object. 19750 vm.widget = angular.fromJson(widgets[$scope.widget]); 19751 19752 // Set view model parameters.
19753 for (var parameter in vm.widget.parameters) { 19754 switch (vm.widget.parameters[parameter].id) { 19755 case 'title': 19756 vm.title = vm.widget.parameters[parameter].value; 19757 break; 19758 19759 case 'showTitle': 19760 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 19761 break; 19762 19763 case 'src': 19764 if (angular.isJson(vm.widget.parameters[parameter].value)) { 19765 var src = _.filter(angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')), function (image) { 19766 return image.culture == $localStorage.currentLanguage.culture; 19767 }); 19768 19769 vm.image = { 19770 url: src[0].value 19771 }; 19772 } else { 19773 vm.image = { 19774 url: vm.widget.parameters[parameter].value 19775 }; 19776 } 19777 break; 19778 19779 case 'href': 19780 if (angular.isJson(vm.widget.parameters[parameter].value)) { 19781 var href = _.filter(angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')), function (image) { 19782 return image.culture == $localStorage.currentLanguage.culture; 19783 }); 19784 19785 vm.href = href[0].value; 19786 } else { 19787 vm.href = vm.widget.parameters[parameter].value; 19788 } 19789 break; 19790 19791 case 'openTab': 19792 vm.openTab = vm.widget.parameters[parameter].value === 'true'; 19793 break; 19794 19795 case 'widgetTransparency': 19796 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 19797 break; 19798 19799 case 'showMobile': 19800 vm.showMobile = vm.widget.parameters[parameter].value === 'true'; 19801 break; 19802 case 'border': 19803 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 19804 break; 19805 } 19806 } 19807 19808 vm.getStyle = function () { 19809 var style = {}; 19810 if (!vm.widgetTransparency) { 19811 style['border-color'] = vm.border.color; 19812 } 19813 19814 style['border-width'] = `${vm.border.width}px`; 19815 style['border-color'] = vm.border.color; 19816 style['border-radius'] = `${vm.border.radius}px`; 19817 return style; 19818 } 19819 19820 // Triggered when parameters are changed. 19821 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 19822 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 19823 .then(function (response) { 19824 // Save parameters. 19825 for (var parameter in vm.widget.parameters) { 19826 switch (vm.widget.parameters[parameter].id) { 19827 case 'title': 19828 vm.widget.parameters[parameter].value = data.title; 19829 vm.title = data.title; 19830 break; 19831 19832 case 'showTitle': 19833 vm.widget.parameters[parameter].value = data.showTitle.toString(); 19834 vm.showTitle = data.showTitle; 19835 break; 19836 19837 case 'src': 19838 vm.widget.parameters[parameter].value = data.src; 19839 vm.image.url = data.src; 19840 break; 19841 19842 case 'href': 19843 vm.widget.parameters[parameter].value = data.href; 19844 vm.href = data.href; 19845 break; 19846 19847 case 'openTab': 19848 vm.widget.parameters[parameter].value = data.openTab.toString(); 19849 vm.openTab = data.openTab; 19850 break; 19851 19852 case 'widgetTransparency': 19853 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 19854 vm.widgetTransparency = data.widgetTransparency; 19855 break; 19856 19857 case 'showMobile': 19858 vm.widget.parameters[parameter].value = data.showMobile.toString(); 19859 vm.showMobile = data.showMobile; 19860 break; 19861 19862 case 'border': 19863 vm.widget.parameters[parameter].value = data.border; 19864 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 19865 break; 19866 19867 } 19868 } 19869 19870 // Update the variable. 19871 widgets[$scope.widget] = angular.toJson(vm.widget); 19872 }) 19873 .catch(function (error) { 19874 bugsnag.notify(error); 19875 }); 19876 }); 19877 19878 $scope.$on('$destroy', listener); 19879 } 19880})(); 19881; 19882(function () { 19883 'use strict'; 19884 19885 angular 19886 .module('app.directives') 19887 .directive('imageBox', imageBox) 19888 19889 imageBox.$inject = []; 19890 19891 function imageBox() { 19892 return { 19893 restrict: 'E', 19894 scope: { 19895 widget: '=' 19896 }, 19897 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/image/box/image-box.tpl.html', 19898 controller: 'ImageBoxWidgetController', 19899 controllerAs: 'imageBox' 19900 }; 19901 } 19902})();; 19903(function () { 19904 'use strict'; 19905 19906 angular 19907 .module('app.directives') 19908 .directive('imageBar', imageBar) 19909 19910 imageBar.$inject = ['$timeout']; 19911 19912 function imageBar($timeout) { 19913 return { 19914 restrict: 'E', 19915 scope: { 19916 widget: '=' 19917 }, 19918 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/image-bar/image-bar.tpl.html', 19919 controller: 'ImageBarWidgetController', 19920 controllerAs: 'imageBar', 19921 link: function (scope, element, attr, controller) { 19922 var vm = controller; 19923 $timeout(function () { 19924 vm.imageContainer = element.find('div.images-container') 19925 vm.clickNext = function () { 19926 let tempRight = element.find('div.images-container').css('right') // Get the 'right' value of images-container 19927 if (Number(tempRight.replace("px", "")) < 0) { // Checks if the 'right' side is below 0. If so, we can move the images-container by vm.widgetHeight pixels 19928 vm.currentPosition -= Number(vm.widgetHeight) 19929 element.find('div.images-container').css('left', vm.currentPosition) // Set the new position 19930 } 19931 } 19932 19933 vm.clickPrev = function () { 19934 let tempLeft = element.find('div.images-container').css('left') 19935 if (Number(tempLeft.replace("px", "")) < 0) { 19936 vm.currentPosition += Number(vm.widgetHeight) 19937 element.find('div.images-container').css('left', vm.currentPosition) 19938 } 19939 } 19940 19941 vm.resetPosition = function () { 19942 element.find('div.images-container').css('left', 'initial') // Resets the images-container each time we add/remove images 19943 } 19944 }) 19945 } 19946 }; 19947 } 19948})(); 19949; 19950(function () { 19951 'use strict'; 19952 19953 angular 19954 .module('app.directives') 19955 .controller('ImageBarWidgetController', ImageBarWidgetController); 19956 19957 ImageBarWidgetController.$inject = ['$rootScope', '$scope', 'GameService', 'WebsiteEditorService', '$timeout']; 19958 19959 function ImageBarWidgetController($rootScope, $scope, gameService, websiteEditorService, $timeout) { 19960 var vm = this; 19961 vm.widget = angular.fromJson(widgets[$scope.widget]); 19962 vm.images = []; 19963 vm.currentPosition = 0 19964 19965 // Set view model parameters.
19966 for (var parameter in vm.widget.parameters) { 19967 switch (vm.widget.parameters[parameter].id) { 19968 case 'backgroundColor': 19969 vm.backgroundColor = vm.widget.parameters[parameter].value 19970 break; 19971 case 'widgetTransparency': 19972 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 19973 break; 19974 case 'colorNavigationArrow': 19975 vm.colorNavigationArrow = vm.widget.parameters[parameter].value; 19976 break; 19977 case 'widgetHeight': 19978 vm.widgetHeight = vm.widget.parameters[parameter].value; 19979 break; 19980 case 'navigation': 19981 vm.navigation = vm.widget.parameters[parameter].value === 'true'; 19982 break; 19983 case 'multipleImageUpload': 19984 vm.images = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 19985 break; 19986 case 'openTab': 19987 vm.openTab = vm.widget.parameters[parameter].value === 'true'; 19988 break; 19989 case 'showMobile': 19990 vm.showMobile = vm.widget.parameters[parameter].value === 'true'; 19991 break; 19992 } 19993 } 19994 19995 vm.getStyle = function () { 19996 let style = {}; 19997 if (!vm.widgetTransparency) { 19998 style['background-color'] = vm.backgroundColor; 19999 } 20000 20001 if (vm.navigation) { 20002 style['height'] = `${vm.widgetHeight}px` 20003 } 20004 20005 return style; 20006 } 20007 20008 vm.getNavArrowStyle = function () { 20009 let style = {}; 20010 style['color'] = vm.colorNavigationArrow; 20011 return style; 20012 } 20013 20014 20015 // Triggered when parameters are changed. 20016 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 20017 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 20018 .then(function (response) { 20019 // Save parameters 20020 for (var parameter in vm.widget.parameters) { 20021 switch (vm.widget.parameters[parameter].id) { 20022 case 'backgroundColor': 20023 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 20024 vm.backgroundColor = data.backgroundColor; 20025 break; 20026 case 'widgetTransparency': 20027 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 20028 vm.widgetTransparency = data.widgetTransparency; 20029 break; 20030 case 'colorNavigationArrow': 20031 vm.widget.parameters[parameter].value = data.colorNavigationArrow.toString(); 20032 vm.colorNavigationArrow = data.colorNavigationArrow; 20033 break; 20034 case 'widgetHeight': 20035 vm.widget.parameters[parameter].value = data.widgetHeight.toString(); 20036 vm.widgetHeight = data.widgetHeight; 20037 break; 20038 case 'multipleImageUpload': 20039 vm.images = angular.fromJson(data.multipleImageUpload.replace(/\'/g, '"')); 20040 vm.widget.parameters[parameter].value = data.multipleImageUpload; 20041 vm.resetPosition() 20042 break; 20043 case 'navigation': 20044 vm.widget.parameters[parameter].value = data.navigation.toString(); 20045 vm.navigation = data.navigation; 20046 break; 20047 case 'openTab': 20048 vm.widget.parameters[parameter].value = data.openTab.toString(); 20049 vm.openTab = data.openTab; 20050 break; 20051 case 'showMobile': 20052 vm.widget.parameters[parameter].value = data.showMobile.toString(); 20053 vm.showMobile = data.showMobile; 20054 break; 20055 20056 } 20057 } 20058 // Update the variable. 20059 widgets[$scope.widget] = angular.toJson(vm.widget); 20060 }) 20061 .catch(function (error) { 20062 bugsnag.notify(error); 20063 }); 20064 }); 20065 $scope.$on('$destroy', listener); 20066 } 20067})(); 20068; 20069(function () { 20070 'use strict'; 20071 20072 angular 20073 .module('app.directives') 20074 .directive('spacer', spacer) 20075 20076 spacer.$inject = []; 20077 20078 function spacer() { 20079 return { 20080 restrict: 'E', 20081 scope: { 20082 widget: '=' 20083 }, 20084 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/spacer/spacer.tpl.html', 20085 controller: 'SpacerWidgetController', 20086 controllerAs: 'spacer', 20087 }; 20088 } 20089})(); 20090; 20091(function () { 20092 'use strict'; 20093 20094 angular 20095 .module('app.directives') 20096 .controller('SpacerWidgetController', SpacerWidgetController); 20097 20098 SpacerWidgetController.$inject = ['$rootScope', '$scope', '$window', 'WebsiteEditorService']; 20099 20100 function SpacerWidgetController($rootScope, $scope, $window, websiteEditorService) { 20101 var vm = this; 20102 vm.widget = angular.fromJson(widgets[$scope.widget]); 20103 20104 // Set view model parameters.
20105 for (var parameter in vm.widget.parameters) { 20106 switch (vm.widget.parameters[parameter].id) { 20107 case 'backgroundColor': 20108 vm.backgroundColor = vm.widget.parameters[parameter].value 20109 break; 20110 case 'widgetTransparency': 20111 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 20112 break; 20113 case 'widgetHeight': 20114 vm.widgetHeight = vm.widget.parameters[parameter].value; 20115 break; 20116 } 20117 } 20118 20119 vm.isMobile = function () { 20120 return $window.innerWidth <= 575; 20121 } 20122 20123 vm.getStyle = function () { 20124 var style = {}; 20125 if (!vm.widgetTransparency) { 20126 style['background-color'] = vm.backgroundColor; 20127 } 20128 style['height'] = `${vm.widgetHeight}px` 20129 return style; 20130 } 20131 20132 // Triggered when parameters are changed. 20133 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 20134 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 20135 .then(function (response) { 20136 // Save parameters 20137 for (var parameter in vm.widget.parameters) { 20138 switch (vm.widget.parameters[parameter].id) { 20139 case 'backgroundColor': 20140 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 20141 vm.backgroundColor = data.backgroundColor; 20142 break; 20143 case 'widgetTransparency': 20144 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 20145 vm.widgetTransparency = data.widgetTransparency; 20146 break; 20147 case 'widgetHeight': 20148 vm.widget.parameters[parameter].value = data.widgetHeight.toString(); 20149 vm.widgetHeight = data.widgetHeight; 20150 break; 20151 } 20152 } 20153 // Update the variable. 20154 widgets[$scope.widget] = angular.toJson(vm.widget); 20155 }) 20156 .catch(function (error) { 20157 bugsnag.notify(error); 20158 }); 20159 }); 20160 $scope.$on('$destroy', listener); 20161 } 20162})(); 20163; 20164(function () { 20165 'use strict'; 20166 20167 angular 20168 .module('app.directives') 20169 .controller('TextZoneWidgetController', TextZoneWidgetController); 20170 20171 TextZoneWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$sce', 'WebsiteEditorService']; 20172 20173 function TextZoneWidgetController($rootScope, $scope, $localStorage, $sce, websiteEditorService) { 20174 var vm = this; 20175 20176 // Apply website values to view model object. 20177 vm.widget = angular.fromJson(widgets[$scope.widget]); 20178 20179 // Set view model parameters. 20180 for (var parameter in vm.widget.parameters) { 20181 switch (vm.widget.parameters[parameter].id) { 20182 case 'title': 20183 vm.title = vm.widget.parameters[parameter].value; 20184 break; 20185 20186 case 'content': 20187 vm.content = $sce.trustAsHtml(vm.widget.parameters[parameter].value); 20188 break; 20189 20190 case 'showTitle': 20191 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 20192 break; 20193 20194 case 'widgetTransparency': 20195 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 20196 break; 20197 20198 case 'backgroundColor': 20199 vm.backgroundColor = vm.widget.parameters[parameter].value; 20200 break; 20201 case 'border': 20202 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 20203 break; 20204 } 20205 } 20206 20207 vm.getStyle = function () { 20208 var style = {}; 20209 if (!vm.widgetTransparency) { 20210 style['background-color'] = vm.backgroundColor; 20211 style['border-color'] = vm.border.color; 20212 } 20213 20214 style['border-width'] = `${vm.border.width}px`; 20215 style['border-color'] = vm.border.color;
20216 style['border-radius'] = `${vm.border.radius}px`; 20217 20218 return style; 20219 } 20220 20221 20222 // Triggered when parameters are changed. 20223 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 20224 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 20225 .then(function (response) { 20226 // Save parameters. 20227 20228 for (var parameter in vm.widget.parameters) { 20229 switch (vm.widget.parameters[parameter].id) { 20230 case 'title': 20231 vm.widget.parameters[parameter].value = data.title; 20232 vm.title = data.title; 20233 break; 20234 20235 case 'content': 20236 vm.widget.parameters[parameter].value = data.content; 20237 vm.content = $sce.trustAsHtml(data.content); 20238 break; 20239 20240 case 'showTitle': 20241 vm.widget.parameters[parameter].value = data.showTitle.toString(); 20242 vm.showTitle = data.showTitle; 20243 break; 20244 20245 case 'widgetTransparency': 20246 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 20247 vm.widgetTransparency = data.widgetTransparency; 20248 break; 20249 20250 case 'backgroundColor': 20251 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 20252 vm.backgroundColor = data.backgroundColor; 20253 break; 20254 20255 case 'border': 20256 vm.widget.parameters[parameter].value = data.border; 20257 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 20258 } 20259 } 20260 20261 // Update the variable. 20262 widgets[$scope.widget] = angular.toJson(vm.widget); 20263 }) 20264 .catch(function (error) { 20265 bugsnag.notify(error); 20266 }); 20267 }); 20268 20269 $scope.$on('$destroy', listener); 20270 } 20271})(); 20272; 20273(function () { 20274 'use strict'; 20275 20276 angular 20277 .module('app.directives') 20278 .directive('textZone', textZone) 20279 20280 textZone.$inject = []; 20281 20282 function textZone() { 20283 return { 20284 restrict: 'E', 20285 scope: { 20286 widget: '=' 20287 }, 20288 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/text/zone/text-zone.tpl.html', 20289 controller: 'TextZoneWidgetController', 20290 controllerAs: 'textZone' 20291 }; 20292 } 20293})();; 20294(function () { 20295 'use strict'; 20296 20297 angular 20298 .module('app.directives') 20299 .controller('CardWidgetController', CardWidgetController); 20300 20301 CardWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$sce', 'WebsiteEditorService', 'TemplateService']; 20302 20303 function CardWidgetController($rootScope, $scope, $localStorage, $sce, websiteEditorService, templateService) { 20304 var vm = this; 20305 var templateList = []; 20306 20307 // Apply website values to view model object. 20308 vm.widget = angular.fromJson(widgets[$scope.widget]); 20309 vm.hover = false; 20310 20311 // Set view model parameters. 20312 for (var parameter in vm.widget.parameters) { 20313 switch (vm.widget.parameters[parameter].id) { 20314 case 'title': 20315 vm.title = vm.widget.parameters[parameter].value; 20316 break; 20317 20318 case 'content': 20319 vm.content = $sce.trustAsHtml(vm.widget.parameters[parameter].value); 20320 break; 20321 20322 case 'showTitle': 20323 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 20324 break; 20325 20326 case 'widgetTransparency': 20327 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 20328 break; 20329 20330 case 'backgroundImage': 20331 vm.backgroundImage = vm.widget.parameters[parameter].value; 20332 break; 20333 20334 case 'hyperlink': 20335 vm.hyperlink = vm.widget.parameters[parameter].value; 20336 break; 20337 20338 case 'backgroundImageHover': 20339 vm.backgroundImageHover = vm.widget.parameters[parameter].value; 20340 break; 20341 20342 case 'backgroundColor': 20343 vm.backgroundColor = vm.widget.parameters[parameter].value; 20344 break; 20345 case 'border': 20346 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 20347 break; 20348 case 'template': 20349 var templateParameter = parameter; 20350 templateService.getCardWidgetTemplates(__solutionId__).then(function (templates) { 20351 templateList = []; 20352 var listProperty = _.get(_.find(vm.widget.parameters[templateParameter].properties, { key: 'list' }), 'value'); 20353 var filteredTemplates = _.filter(templates.data, { type: listProperty }); 20354
20355 filteredTemplates.forEach(function (template) { 20356 templateList.push(angular.fromJson(template.value)) 20357 }) 20358 20359 vm.template = _.find(templateList, { id: vm.widget.parameters[templateParameter].value }); 20360 }); 20361 20362 break 20363 case 'templateItems': 20364 vm.templateItems = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\\\\'/g, '\\\"').replace(/\'/g, '"')); 20365 break; 20366 } 20367 } 20368 20369 vm.getStyle = function () { 20370 var style = {}; 20371 if (!vm.widgetTransparency) { 20372 style['background-color'] = vm.backgroundColor; 20373 style['background-size'] = 'cover'; 20374 style['background-position'] = 'center'; 20375 style['border-color'] = vm.border.color; 20376 } 20377 20378 style['border-width'] = `${vm.border.width}px`; 20379 style['border-color'] = vm.border.color; 20380 style['border-radius'] = `${vm.border.radius}px`; 20381 return style; 20382 } 20383 20384 20385 20386 // Triggered when parameters are changed. 20387 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 20388 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 20389 .then(function (response) { 20390 // Save parameters 20391 for (var parameter in vm.widget.parameters) { 20392 switch (vm.widget.parameters[parameter].id) { 20393 case 'title': 20394 vm.widget.parameters[parameter].value = data.title; 20395 vm.title = data.title; 20396 break; 20397 20398 case 'content': 20399 vm.widget.parameters[parameter].value = data.content; 20400 vm.content = $sce.trustAsHtml(data.content); 20401 break; 20402 20403 case 'showTitle': 20404 vm.widget.parameters[parameter].value = data.showTitle.toString(); 20405 vm.showTitle = data.showTitle; 20406 break; 20407 20408 case 'widgetTransparency': 20409 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 20410 vm.widgetTransparency = data.widgetTransparency; 20411 break; 20412 20413 case 'backgroundColor': 20414 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 20415 vm.backgroundColor = data.backgroundColor; 20416 break; 20417 20418 case 'backgroundImage': 20419 vm.widget.parameters[parameter].value = data.backgroundImage; 20420 vm.backgroundImage = data.backgroundImage; 20421 break; 20422 20423 case 'hyperlink': 20424 vm.widget.parameters[parameter].value = data.hyperlink; 20425 vm.hyperlink = data.hyperlink; 20426 break; 20427 20428 case 'backgroundImageHover': 20429 vm.widget.parameters[parameter].value = data.backgroundImageHover; 20430 vm.backgroundImageHover = data.backgroundImageHover; 20431 break; 20432 20433 case 'border': 20434 vm.widget.parameters[parameter].value = data.border; 20435 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 20436 break; 20437 20438 case 'template': 20439 vm.widget.parameters[parameter].value = data.template; 20440 vm.template = _.find(templateList, { id: data.template }); 20441 break; 20442 20443 case 'templateItems': 20444 vm.widget.parameters[parameter].value = data.templateItems; 20445 vm.templateItems = angular.fromJson(data.templateItems.replace(/\\\\'/g, '\\\'').replace(/\'/g, '"')); 20446 break; 20447 } 20448 } 20449 20450 // Update the variable. 20451 widgets[$scope.widget] = angular.toJson(vm.widget); 20452 }) 20453 .catch(function (error) { 20454 bugsnag.notify(error); 20455 }); 20456 }); 20457 20458 $scope.$on('$destroy', listener); 20459 } 20460})(); 20461; 20462(function () { 20463 'use strict'; 20464 20465 angular 20466 .module('app.directives') 20467 .directive('card', card) 20468 20469 card.$inject = []; 20470 20471 function card() { 20472 return { 20473 restrict: 'E', 20474 scope: { 20475 widget: '=' 20476 }, 20477 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/card/card.tpl.html', 20478 controller: 'CardWidgetController', 20479 controllerAs: 'card', 20480 link: function (scope, element, attr, controller) { 20481 let vm = controller 20482 vm.currentCard = element.find('img.background-image') 20483 vm.currentCardHover = element.find('img.background-image-hover') 20484 20485 vm.getImgStyle = function () { 20486 if (vm.hover && vm.backgroundImageHover) { 20487 vm.currentCard.css('opacity', 0) 20488 vm.currentCardHover.css('opacity', 1) 20489 } else { 20490 vm.currentCard.css('opacity', 1) 20491 vm.currentCardHover.css('opacity', 0) 20492 } 20493 if (vm.widgetTransparency) { 20494 vm.currentCard.css('display', 'none') 20495 vm.currentCardHover.css('display', 'none') 20496 } 20497 } 20498 } 20499 }; 20500 } 20501})();; 20502(function () { 20503 'use strict'; 20504 20505 angular 20506 .module('app.directives') 20507 .controller('CardListWidgetController', CardListWidgetController); 20508 20509 CardListWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$sce', 'WebsiteEditorService', 'TemplateService', 'ListService']; 20510 20511 function CardListWidgetController($rootScope, $scope, $localStorage, $sce, websiteEditorService, templateService, listService) { 20512 var vm = this; 20513 var templateList = []; 20514 20515 // Apply website values to view model object. 20516 vm.widget = angular.fromJson(widgets[$scope.widget]); 20517 20518 vm.hover = false; 20519 vm.filters = []; 20520 vm.selectedFilters = []; 20521 vm.page = 1; 20522 vm.totalPages = 0; 20523 20524 // Set view model parameters.
20525 for (var parameter in vm.widget.parameters) { 20526 switch (vm.widget.parameters[parameter].id) { 20527 case 'title': 20528 vm.title = vm.widget.parameters[parameter].value; 20529 break; 20530 20531 case 'content': 20532 vm.content = $sce.trustAsHtml(vm.widget.parameters[parameter].value); 20533 break; 20534 20535 case 'showTitle': 20536 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 20537 break; 20538 20539 case 'widgetTransparency': 20540 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 20541 break; 20542 20543 case 'backgroundImage': 20544 vm.backgroundImage = vm.widget.parameters[parameter].value; 20545 break; 20546 20547 case 'backgroundColor': 20548 vm.backgroundColor = vm.widget.parameters[parameter].value; 20549 break; 20550 case 'border': 20551 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 20552 break; 20553 case 'template': 20554 var templateParameter = parameter; 20555 templateService.getCardWidgetTemplates(__solutionId__).then(function (templates) { 20556 templateList = []; 20557 var listProperty = _.get(_.find(vm.widget.parameters[templateParameter].properties, { key: 'list' }), 'value'); 20558 var filteredTemplates = _.filter(templates.data, { type: listProperty }); 20559
20560 filteredTemplates.forEach(function (template) { 20561 templateList.push(angular.fromJson(template.value)) 20562 }) 20563 20564 vm.template = _.find(templateList, { id: vm.widget.parameters[templateParameter].value }); 20565 }); 20566 20567 break 20568 case 'templateItems': 20569 vm.templateItems = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\\\\'/g, '\\\"').replace(/\'/g, '"')); 20570 break; 20571 case 'filters': 20572 vm.filters = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\\\\'/g, '\\\"').replace(/\'/g, '"')); 20573 break; 20574 case 'list': 20575 vm.listId = vm.widget.parameters[parameter].value; 20576 vm.list = []; 20577 break; 20578 case 'pagesize': 20579 vm.pagesize = vm.widget.parameters[parameter].value; 20580 break; 20581 case 'linecount': 20582 vm.linecount = vm.widget.parameters[parameter].value; 20583 break; 20584 case 'cardTransparency': 20585 vm.cardTransparency = vm.widget.parameters[parameter].value === 'true'; 20586 break; 20587 case 'cardBackgroundImage': 20588 vm.cardBackgroundImage = vm.widget.parameters[parameter].value; 20589 break; 20590 case 'cardBackgroundImageHover': 20591 vm.cardBackgroundImageHover = vm.widget.parameters[parameter].value; 20592 break; 20593 case 'cardBackgroundColor': 20594 vm.cardBackgroundColor = vm.widget.parameters[parameter].value; 20595 break; 20596 case 'cardBorder': 20597 vm.cardBorder = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 20598 break; 20599 } 20600 } 20601 20602 getItems(); 20603 20604 vm.onFilterChange = function (filters) { 20605 vm.page = 1; 20606 vm.selectedFilters = filters; 20607 getItems(); 20608 } 20609 20610 vm.onPageChange = function (page) { 20611 if (page >= 1 && page <= vm.totalPages && vm.page != page) { 20612 vm.page = page; 20613 getItems(); 20614 } 20615 } 20616 20617 vm.getPageRange = function () { 20618 return _.range(Math.max(vm.page - 2, 1), Math.min(vm.page + 3, vm.totalPages + 1)) 20619 } 20620 20621 vm.getStyle = function () { 20622 var style = {}; 20623 if (!vm.widgetTransparency) { 20624 20625 style['background-color'] = vm.backgroundColor; 20626 style['background-size'] = 'cover'; 20627 style['background-position'] = 'center'; 20628 20629 if (vm.backgroundImage) { 20630 style['background-image'] = `url(${vm.backgroundImage})`; 20631 } 20632 20633 style['border-color'] = vm.border.color; 20634 } 20635 20636 style['border-width'] = `${vm.border.width}px`; 20637 style['border-color'] = vm.border.color; 20638 style['border-radius'] = `${vm.border.radius}px`; 20639 20640 return style; 20641 } 20642 20643 vm.getCardStyle = function () { 20644 var style = {}; 20645 if (!vm.cardTransparency) { 20646 style['background-color'] = vm.cardBackgroundColor; 20647 style['background-size'] = 'cover'; 20648 style['background-position'] = 'center'; 20649 style['border-color'] = vm.cardBorder.color; 20650 20651 if (vm.cardBackgroundImage) { 20652 style['background-image'] = `url(${vm.cardBackgroundImage})`; 20653 } 20654
20655 if (vm.cardBackgroundImageHover && vm.hover) { 20656 style['background-image'] = `url(${vm.cardBackgroundImageHover})`; 20657 } 20658 } 20659 20660 style['border-width'] = `${vm.cardBorder.width}px`; 20661 style['border-color'] = vm.cardBorder.color; 20662 style['border-radius'] = `${vm.cardBorder.radius}px`; 20663 return style; 20664 } 20665 20666 vm.getImgStyle = function (item, hover) { 20667 var style = {}; 20668 var hoverStyle = {}; 20669 if (vm.cardTransparency) { 20670 style = { 'display': 'none' }; 20671 hoverStyle = { 'display': 'none' }; 20672 } 20673 else if (item.hover && vm.cardBackgroundImageHover) { 20674 style = { 'opacity': 0 }; 20675 hoverStyle = { 'opacity': 1 }; 20676 } else { 20677 style = { 'opacity': 1 }; 20678 hoverStyle = { 'opacity': 0 }; 20679 } 20680 20681 if (hover) { 20682 return hoverStyle 20683 } 20684 20685 return style; 20686 } 20687 20688 function getItems() { 20689 if(vm.listId) { 20690 return listService.getListItems(__solutionId__, vm.listId, vm.page, vm.pagesize, _.filter(vm.selectedFilters, function (filter) { return filter.name !== undefined })).then(function (list) { 20691 vm.list = list.data.results; 20692 vm.totalPages = Math.ceil(list.data.totalCount / vm.pagesize); 20693 }) 20694 } 20695 } 20696 20697 // Triggered when parameters are changed. 20698 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 20699 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 20700 .then(function (response) { 20701 // Save parameters 20702 for (var parameter in vm.widget.parameters) { 20703 switch (vm.widget.parameters[parameter].id) { 20704 case 'title': 20705 vm.widget.parameters[parameter].value = data.title; 20706 vm.title = data.title; 20707 break; 20708 20709 case 'content': 20710 vm.widget.parameters[parameter].value = data.content; 20711 vm.content = $sce.trustAsHtml(data.content); 20712 break; 20713 20714 case 'showTitle': 20715 vm.widget.parameters[parameter].value = data.showTitle.toString(); 20716 vm.showTitle = data.showTitle; 20717 break; 20718 20719 case 'widgetTransparency': 20720 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 20721 vm.widgetTransparency = data.widgetTransparency; 20722 break; 20723 20724 case 'backgroundColor': 20725 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 20726 vm.backgroundColor = data.backgroundColor; 20727 break; 20728 20729 case 'backgroundImage': 20730 vm.widget.parameters[parameter].value = data.backgroundImage; 20731 vm.backgroundImage = data.backgroundImage; 20732 break; 20733 20734 case 'border': 20735 vm.widget.parameters[parameter].value = data.border; 20736 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 20737 break; 20738 20739 case 'template': 20740 vm.widget.parameters[parameter].value = data.template; 20741 vm.template = _.find(templateList, { id: data.template }); 20742 break; 20743 20744 case 'templateItems': 20745 vm.widget.parameters[parameter].value = data.templateItems; 20746 vm.templateItems = angular.fromJson(data.templateItems.replace(/\\\\'/g, '\\\'').replace(/\'/g, '"')); 20747 break; 20748 20749 case 'filters': 20750 vm.widget.parameters[parameter].value = data.filters; 20751 vm.filters = angular.fromJson(data.filters.replace(/\\\\'/g, '\\\"').replace(/\'/g, '"')); 20752 break 20753 20754 case 'list': 20755 vm.widget.parameters[parameter].value = data.list; 20756 vm.listId = data.list; 20757 vm.list = {}; 20758 break; 20759 20760 case 'pagesize': 20761 vm.widget.parameters[parameter].value = data.pagesize; 20762 vm.pagesize = data.pagesize; 20763 break 20764 20765 case 'linecount': 20766 vm.widget.parameters[parameter].value = data.linecount; 20767 vm.linecount = data.linecount; 20768 break; 20769 20770 case 'cardTransparency': 20771 vm.widget.parameters[parameter].value = data.cardTransparency.toString(); 20772 vm.cardTransparency = data.cardTransparency; 20773 break; 20774
20775 case 'cardBackgroundImage': 20776 vm.widget.parameters[parameter].value = data.cardBackgroundImage; 20777 vm.cardBackgroundImage = data.cardBackgroundImage; 20778 break; 20779 20780 case 'cardBackgroundImageHover': 20781 vm.widget.parameters[parameter].value = data.cardBackgroundImageHover; 20782 vm.cardBackgroundImageHover = data.cardBackgroundImageHover; 20783 break; 20784 20785 case 'cardBackgroundColor': 20786 vm.widget.parameters[parameter].value = data.cardBackgroundColor.toString(); 20787 vm.cardBackgroundColor = data.cardBackgroundColor; 20788 break; 20789 20790 case 'cardBorder': 20791 vm.widget.parameters[parameter].value = data.cardBorder; 20792 vm.cardBorder = angular.fromJson(data.cardBorder.replace(/\'/g, '"')); 20793 break; 20794 } 20795 } 20796 20797 vm.page = 1; 20798 vm.selectedFilters = []; 20799 getItems(); 20800 20801 // Update the variable. 20802 widgets[$scope.widget] = angular.toJson(vm.widget); 20803 }) 20804 .catch(function (error) { 20805 bugsnag.notify(error); 20806 }); 20807 }); 20808 20809 $scope.$on('$destroy', listener); 20810 } 20811})(); 20812; 20813(function () { 20814 'use strict'; 20815 20816 angular 20817 .module('app.directives') 20818 .directive('cardList', cardList) 20819 20820 cardList.$inject = []; 20821 20822 function cardList() { 20823 return { 20824 restrict: 'E', 20825 scope: { 20826 widget: '=' 20827 }, 20828 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/card-list/card-list.tpl.html', 20829 controller: 'CardListWidgetController', 20830 controllerAs: 'cardList' 20831 }; 20832 } 20833})();; 20834(function () { 20835 'use strict'; 20836 20837 angular 20838 .module('app.directives') 20839 .controller('CardListFiltersController', CardListFiltersController); 20840 20841 CardListFiltersController.$inject = ['$scope', '$translate', 'ListService']; 20842 20843 function CardListFiltersController($scope, $translate, listService) { 20844 var vm = this; 20845 vm.fields = []; 20846 20847 getFilters($scope.listId, $scope.filters); 20848 20849 $scope.$watchGroup(['listId', 'filters'], function (values) { 20850 getFilters(values[0], values[1]); 20851 }); 20852 20853 vm.filterChange = function (item) { 20854 if ($scope.onFilter) { 20855 var filters = _.map(vm.fields, function (field) { return field.filter }); 20856 $scope.onFilter(filters); 20857 } 20858 } 20859 20860 vm.searchFilter = function (text, filter) { 20861 filter.filter.name = text; 20862 vm.filterChange(); 20863 } 20864 20865 vm.selectFilter = function (item, filter) { 20866 filter.filter.name = item.Id 20867 vm.filterChange(); 20868 } 20869 20870 function getFilters(listId, filters) { 20871 if (listId && filters) { 20872 listService.getFilterOptions(__solutionId__, listId, filters).then(function (response) { 20873 var filters = response.data; 20874 vm.fields = _.map(filters, function (filter) { 20875 var field = {}; 20876 field.filter = { id: filter.id, type: filter.type }; 20877 field.options = []; 20878 field.name = filter.name; 20879 20880 if (filter.type == 'select') { 20881 var options = []; 20882 20883 field.options = [{ Id: undefined, Name: $translate.instant('directives.widgets.cardList.all') }].concat(_.map(filter.values, function (option) { return { Id: option, Name: option } })); 20884 } 20885 return field; 20886 }); 20887 }); 20888 } 20889 } 20890 } 20891})(); 20892; 20893(function () { 20894 'use strict'; 20895 20896 angular 20897 .module('app.directives') 20898 .directive('cardListFilters', cardListFilters) 20899 20900 cardListFilters.$inject = ['$translate', 'ListService', 'GuidService']; 20901 20902 function cardListFilters($translate, listService, guidService) { 20903 return { 20904 restrict: 'E', 20905 scope: { 20906 filters: '=', 20907 fields: '=', 20908 items: '=', 20909 listId: '=', 20910 onFilter: '=', 20911 }, 20912 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/card-list/filters/card-list-filters.tpl.html', 20913 controller: 'CardListFiltersController', 20914 controllerAs: 'cardListFilters', 20915 link: function (scope, element, attributes, controller) { 20916 20917 } 20918 }; 20919 } 20920})();; 20921(function () { 20922 'use strict'; 20923 20924 angular 20925 .module('app.directives') 20926 .controller('HtmlWidgetAdminWidgetController', HtmlWidgetAdminWidgetController); 20927 20928 HtmlWidgetAdminWidgetController.$inject = ['$scope', '$rootScope', '$sce', 'WebsiteEditorService']; 20929 20930 function HtmlWidgetAdminWidgetController($scope, $rootScope, $sce, websiteEditorService) { 20931 var vm = this; 20932 vm.widget = angular.fromJson(widgets[$scope.widget]); 20933 vm.config = {}; 20934 20935 //On component mount
20936 for (var parameter in vm.widget.parameters) { 20937 switch (vm.widget.parameters[parameter].id) { 20938 case 'html': 20939 vm.config = angular.fromJson(unescape(vm.widget.parameters[parameter].value)); 20940 vm.html = $sce.trustAsHtml(vm.config.data); 20941 vm.fixedHeight = vm.config.fixedHeight; 20942 vm.height = vm.config.height; 20943 break; 20944 } 20945 } 20946 20947 //Listener 20948 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 20949 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 20950 .then(function () { 20951 for (var parameter in vm.widget.parameters) { 20952 switch (vm.widget.parameters[parameter].id) { 20953 case 'html': 20954 vm.widget.parameters[parameter].value = data.html; 20955 vm.config = angular.fromJson(unescape(data.html)); 20956 vm.html = $sce.trustAsHtml(vm.config.data); 20957 vm.fixedHeight = vm.config.fixedHeight; 20958 vm.height = vm.config.height; 20959 break; 20960 } 20961 } 20962 widgets[$scope.widget] = angular.toJson(vm.widget); 20963 }) 20964 .catch(function (error) { 20965 bugsnag.notify(error); 20966 }); 20967 }); 20968 20969 $scope.$on('$destroy', listener); 20970 } 20971})(); 20972; 20973(function () { 20974 'use strict'; 20975 20976 angular 20977 .module('app.directives') 20978 .directive('htmlWidgetAdmin', htmlWidgetAdmin) 20979 20980 htmlWidgetAdmin.$inject = []; 20981 20982 function htmlWidgetAdmin() { 20983 return { 20984 restrict: 'E', 20985 scope: { 20986 widget: '=' 20987 }, 20988 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/html-admin/html-widget-admin.tpl.html', 20989 controller: 'HtmlWidgetAdminWidgetController', 20990 controllerAs: 'htmlWidgetAdmin' 20991 }; 20992 } 20993})();; 20994(function () { 20995 'use strict'; 20996 20997 angular 20998 .module('app.directives') 20999 .controller('HtmlWidgetWidgetController', HtmlWidgetWidgetController); 21000 21001 HtmlWidgetWidgetController.$inject = ['$scope', '$rootScope', '$sce', 'WebsiteEditorService']; 21002 21003 function HtmlWidgetWidgetController($scope, $rootScope, $sce, websiteEditorService) { 21004 var vm = this; 21005 vm.widget = angular.fromJson(widgets[$scope.widget]); 21006 vm.config = {}; 21007 21008 //On component mount 21009 for (var parameter in vm.widget.parameters) { 21010 switch (vm.widget.parameters[parameter].id) { 21011 case 'html': 21012 vm.config = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\\\\'/g, '\\\"').replace(/\'/g, '"')); 21013 vm.html = $sce.trustAsHtml(vm.config.data); 21014 vm.fixedHeight = vm.config.fixedHeight; 21015 vm.height = vm.config.height; 21016 break; 21017 } 21018 } 21019 21020 //Listener 21021 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 21022 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 21023 .then(function () { 21024 for (var parameter in vm.widget.parameters) { 21025 switch (vm.widget.parameters[parameter].id) { 21026 case 'html': 21027 vm.widget.parameters[parameter].value = data.html; 21028 vm.config = angular.fromJson(data.html.replace(/\\\\'/g, '\\\'').replace(/\'/g, '"')); 21029 vm.html = $sce.trustAsHtml(vm.config.data); 21030 vm.fixedHeight = vm.config.fixedHeight; 21031 vm.height = vm.config.height; 21032 break; 21033 } 21034 } 21035 widgets[$scope.widget] = angular.toJson(vm.widget); 21036 }) 21037 .catch(function (error) { 21038 bugsnag.notify(error); 21039 }); 21040 }); 21041 21042 $scope.$on('$destroy', listener); 21043 } 21044})(); 21045; 21046(function () { 21047 'use strict'; 21048 21049 angular 21050 .module('app.directives') 21051 .directive('htmlWidget', htmlWidget) 21052 21053 htmlWidget.$inject = []; 21054 21055 function htmlWidget() { 21056 return { 21057 restrict: 'E', 21058 scope: { 21059 widget: '=' 21060 }, 21061 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/html/html-widget.tpl.html', 21062 controller: 'HtmlWidgetWidgetController', 21063 controllerAs: 'htmlWidget' 21064 }; 21065 } 21066})();; 21067(function () { 21068 'use strict'; 21069 21070 angular 21071 .module('app.directives') 21072 .controller('HtmlWidgetAdminTranslatableController', HtmlWidgetAdminTranslatableController); 21073 21074 HtmlWidgetAdminTranslatableController.$inject = ['$scope', '$rootScope', '$sce', '$localStorage', 'WebsiteEditorService', 'TextService']; 21075 21076 function HtmlWidgetAdminTranslatableController($scope, $rootScope, $sce, $localStorage, websiteEditorService, textService) { 21077 var vm = this; 21078 vm.widget = angular.fromJson(widgets[$scope.widget]); 21079 vm.config = {}; 21080 21081 vm.selectedLanguage = angular.isUndefined($localStorage.currentLanguage) 21082 ? __defaultLanguage__ 21083 : $localStorage.currentLanguage.culture; 21084 21085 vm.getLocalizedValue = function (array, isHtml) { 21086 var value = ""; 21087 if (array && vm.selectedLanguage) { 21088 if (_.isArray(array)) { 21089 21090 var localizedText = _.find(array, { culture: vm.selectedLanguage }); 21091 if (localizedText) { 21092 value = localizedText.value; 21093 } 21094 else { 21095 value = (array[0] || {}).value || ""; 21096 } 21097 } 21098 else { 21099 value = array; 21100 } 21101 } 21102 21103 if (isHtml) { 21104 return value; 21105 } 21106 21107 return value; 21108 } 21109 21110 //On component mount
21111 for (var parameter in vm.widget.parameters) { 21112 switch (vm.widget.parameters[parameter].id) { 21113 case 'html': 21114 vm.config = angular.fromJson(unescape(vm.widget.parameters[parameter].value)); 21115 if (vm.config.data) { 21116 vm.html = angular.fromJson(textService.atob(vm.config.data)); 21117 } 21118 else { 21119 vm.html = []; 21120 } 21121 vm.fixedHeight = vm.config.fixedHeight; 21122 vm.height = vm.config.height; 21123 break; 21124 } 21125 } 21126 21127 //Listener 21128 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 21129 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 21130 .then(function () { 21131 for (var parameter in vm.widget.parameters) { 21132 switch (vm.widget.parameters[parameter].id) { 21133 case 'html': 21134 vm.widget.parameters[parameter].value = data.html; 21135 vm.config = angular.fromJson(unescape(data.html)); 21136 if (vm.config.data) { 21137 vm.html = angular.fromJson(textService.atob(vm.config.data)); 21138 } 21139 else { 21140 vm.html = []; 21141 } 21142 vm.fixedHeight = vm.config.fixedHeight; 21143 vm.height = vm.config.height; 21144 break; 21145 } 21146 } 21147 widgets[$scope.widget] = angular.toJson(vm.widget); 21148 }) 21149 .catch(function (error) { 21150 bugsnag.notify(error); 21151 }); 21152 }); 21153 21154 $scope.$on('$destroy', listener); 21155 } 21156})(); 21157; 21158(function () { 21159 'use strict'; 21160 21161 angular 21162 .module('app.directives') 21163 .directive('htmlWidgetAdminTranslatable', htmlWidgetAdminTranslatable) 21164 21165 htmlWidgetAdminTranslatable.$inject = []; 21166 21167 function htmlWidgetAdminTranslatable() { 21168 return { 21169 restrict: 'E', 21170 scope: { 21171 widget: '=' 21172 }, 21173 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/html-widget-admin-translatable/html-widget-admin-translatable.tpl.html', 21174 controller: 'HtmlWidgetAdminTranslatableController', 21175 controllerAs: 'htmlWidgetAdminTranslatable' 21176 }; 21177 } 21178})(); 21179; 21180(function () { 21181 'use strict'; 21182 21183 angular 21184 .module('app.directives') 21185 .controller('SponsorBoxWidgetController', SponsorBoxWidgetController); 21186 21187 SponsorBoxWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$timeout', 'WebsiteEditorService']; 21188 21189 function SponsorBoxWidgetController($rootScope, $scope, $localStorage, $timeout, websiteEditorService) { 21190 var vm = this; 21191 21192 //State variables ----- 21193 vm.widget = angular.fromJson(widgets[$scope.widget]); 21194 vm.images = []; 21195 vm.randomOrder = false; 21196 vm.title = ""; 21197 vm.animation = "slide"; 21198 vm.showTitle = false; 21199 21200 //Component mount ----- 21201 for (var parameter in vm.widget.parameters) { 21202 switch (vm.widget.parameters[parameter].id) { 21203 case 'title': 21204 vm.title = vm.widget.parameters[parameter].value; 21205 break; 21206 21207 case 'showTitle': 21208 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 21209 break; 21210 21211 case 'imageDuration': 21212 vm.imageDuration = parseInt(vm.widget.parameters[parameter].value); 21213 break; 21214 21215 case 'randomOrder': 21216 vm.randomOrder = vm.widget.parameters[parameter].value === 'true'; 21217 break; 21218 21219 case 'animation': 21220 vm.animation = vm.widget.parameters[parameter].value; 21221 break; 21222 21223 case 'multipleImageUpload': 21224 vm.images = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 21225 break; 21226 } 21227 } 21228 21229 formatImages(); 21230 carousel(); 21231 21232 // Listener 21233 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 21234 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 21235 .then(function () {
21236 for (var parameter in vm.widget.parameters) { 21237 switch (vm.widget.parameters[parameter].id) { 21238 case 'title': 21239 vm.title = data.title; 21240 vm.widget.parameters[parameter].value = data.title; 21241 break; 21242 21243 case 'showTitle': 21244 vm.showTitle = data.showTitle; 21245 vm.widget.parameters[parameter].value = data.showTitle.toString(); 21246 break; 21247 21248 case 'imageDuration': 21249 vm.imageDuration = parseInt(data.imageDuration); 21250 vm.widget.parameters[parameter].value = data.imageDuration; 21251 break; 21252 21253 case 'randomOrder': 21254 vm.randomOrder = data.randomOrder; 21255 vm.widget.parameters[parameter].value = data.randomOrder.toString(); 21256 break; 21257 21258 case 'animation': 21259 vm.animation = data.animation; 21260 vm.widget.parameters[parameter].value = data.animation; 21261 break; 21262 21263 case 'multipleImageUpload': 21264 vm.images = angular.fromJson(data.multipleImageUpload.replace(/\'/g, '"')); 21265 vm.widget.parameters[parameter].value = data.multipleImageUpload; 21266 break; 21267 } 21268 } 21269 widgets[$scope.widget] = angular.toJson(vm.widget); 21270 formatImages(); 21271 setTimeCarousel(); 21272 }) 21273 .catch(function (error) { 21274 bugsnag.notify(error); 21275 }); 21276 }); 21277 21278 $scope.$on('$destroy', listener); 21279 21280 // Helpers 21281 function formatImages() { 21282 if (vm.randomOrder) { 21283 vm.images = _.shuffle(vm.images); 21284 } 21285 } 21286 function carousel() { 21287 $timeout(function () { 21288 vm.logImpression(0); //Log impression on first image 21289 vm.startCarousel(vm.imageDuration * 1000); 21290 }, 2000); 21291 } 21292 21293 function setTimeCarousel() { 21294 vm.pauseCarousel(); 21295 $timeout(function () { 21296 vm.startCarousel(vm.imageDuration * 1000); 21297 }, 1000); 21298 } 21299 } 21300})(); 21301; 21302(function () { 21303 'use strict'; 21304 21305 angular 21306 .module('app.directives') 21307 .directive('sponsorBox', sponsorBox) 21308 21309 sponsorBox.$inject = []; 21310 21311 function sponsorBox() { 21312 return { 21313 restrict: 'E', 21314 scope: { 21315 widget: '=' 21316 }, 21317 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/image/sponsor/sponsor-box.tpl.html', 21318 controller: 'SponsorBoxWidgetController', 21319 controllerAs: 'sponsorBox', 21320 link: function (scope, element, attr, controller) { 21321 var vm = controller; 21322 vm.currentIndex = 0; 21323 21324 document.addEventListener('scroll', function () { 21325 if (isInViewport()) { 21326 vm.logImpression(vm.currentIndex); 21327 } 21328 }, { 21329 passive: true 21330 }); 21331 21332 vm.logImpression = function (index) { 21333 if (vm.images[index] && !vm.images[index].impression && isInViewport()) { 21334 if (gtag) { 21335 gtag('event', 'impression', { 21336 'event_category': 'sponsorwidget', 21337 'event_label': 'impression', 21338 'event_value': `solutionid:${__solutionId__},imageid:${vm.images[index].id}` 21339 }); 21340 } else { 21341 console.log('send', 'event', 'sponsorwidget', 'impression', `solutionid:${__solutionId__},imageid:${vm.images[index].id}`); 21342 } 21343 vm.images[index].impression = true; 21344 } 21345 } 21346 21347 vm.clickSponsor = function (index) { 21348 if (vm.images.length > index) { 21349 if (gtag) { 21350 gtag('event', 'click', { 21351 'event_category': 'sponsorwidget', 21352 'event_label': 'click', 21353 'event_value': `solutionid:${__solutionId__},imageid:${vm.images[index].id}` 21354 }); 21355 } else { 21356 console.log('send', 'event', 'sponsorwidget', 'click', `solutionid:${__solutionId__},imageid:${vm.images[index].id}`); 21357 } 21358 } 21359 } 21360 21361 vm.startCarousel = function (time) { 21362 $(`#carousel-${scope.widget}`).carousel({ 21363 interval: time, 21364 keyboard: false, 21365 pause: false 21366 }); 21367 $(`#carousel-${scope.widget}`).on('slide.bs.carousel', function (e, a, b) { 21368 vm.currentIndex = e.to; 21369 vm.logImpression(e.to); 21370 }) 21371 } 21372 21373 vm.pauseCarousel = function () { 21374 $(`#carousel-${scope.widget}`).carousel('dispose'); 21375 } 21376 21377 function isInViewport() { 21378 if (angular.element.find(`#carousel-${scope.widget}`)[0]) { 21379 const rect = angular.element.find(`#carousel-${scope.widget}`)[0].getBoundingClientRect(); 21380 return ( 21381 rect.top >= 0 && 21382 rect.left >= 0 && 21383 rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && 21384 rect.right <= (window.innerWidth || document.documentElement.clientWidth) 21385 ); 21386 } 21387 return false; 21388 } 21389 } 21390 }; 21391 } 21392})();; 21393(function () { 21394 'use strict'; 21395 21396 angular 21397 .module('app.directives') 21398 .controller('ImageCarouselWidgetController', ImageCarouselWidgetController); 21399 21400 ImageCarouselWidgetController.$inject = ['$rootScope', '$scope', '$timeout', 'WebsiteEditorService']; 21401 21402 function ImageCarouselWidgetController($rootScope, $scope, $timeout, websiteEditorService) { 21403 var vm = this; 21404 21405 //State variables ----- 21406 vm.widget = angular.fromJson(widgets[$scope.widget]); 21407 vm.images = []; 21408 vm.randomOrder = false; 21409 vm.title = ""; 21410 vm.animation = "slide"; 21411 vm.showTitle = false; 21412 21413 //Component mount -----
21414 for (var parameter in vm.widget.parameters) { 21415 switch (vm.widget.parameters[parameter].id) { 21416 case 'title': 21417 vm.title = vm.widget.parameters[parameter].value; 21418 break; 21419 21420 case 'showTitle': 21421 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 21422 break; 21423 21424 case 'imageDuration': 21425 vm.imageDuration = parseInt(vm.widget.parameters[parameter].value); 21426 break; 21427 21428 case 'randomOrder': 21429 vm.randomOrder = vm.widget.parameters[parameter].value === 'true'; 21430 break; 21431 21432 case 'animation': 21433 vm.animation = vm.widget.parameters[parameter].value; 21434 break; 21435 21436 case 'multipleImageUpload': 21437 vm.images = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 21438 break; 21439 } 21440 } 21441 21442 formatImages(); 21443 carousel(); 21444 21445 // Listener 21446 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 21447 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 21448 .then(function () { 21449 for (var parameter in vm.widget.parameters) { 21450 switch (vm.widget.parameters[parameter].id) { 21451 case 'title': 21452 vm.title = data.title; 21453 vm.widget.parameters[parameter].value = data.title; 21454 break; 21455 21456 case 'showTitle': 21457 vm.showTitle = data.showTitle; 21458 vm.widget.parameters[parameter].value = data.showTitle.toString(); 21459 break; 21460 21461 case 'imageDuration': 21462 vm.imageDuration = parseInt(data.imageDuration); 21463 vm.widget.parameters[parameter].value = data.imageDuration; 21464 break; 21465 21466 case 'randomOrder': 21467 vm.randomOrder = data.randomOrder; 21468 vm.widget.parameters[parameter].value = data.randomOrder.toString(); 21469 break; 21470 21471 case 'animation': 21472 vm.animation = data.animation; 21473 vm.widget.parameters[parameter].value = data.animation; 21474 break; 21475 21476 case 'multipleImageUpload': 21477 vm.images = angular.fromJson(data.multipleImageUpload.replace(/\'/g, '"')); 21478 vm.widget.parameters[parameter].value = data.multipleImageUpload; 21479 break; 21480 } 21481 } 21482 widgets[$scope.widget] = angular.toJson(vm.widget); 21483 formatImages(); 21484 setTimeCarousel(); 21485 }) 21486 .catch(function (error) { 21487 bugsnag.notify(error); 21488 }); 21489 }); 21490 21491 $scope.$on('$destroy', listener); 21492 21493 // Helpers 21494 function formatImages() { 21495 if (vm.randomOrder) { 21496 vm.images = _.shuffle(vm.images); 21497 } 21498 } 21499 function carousel() { 21500 $timeout(function () { 21501 vm.startCarousel(vm.imageDuration * 1000); 21502 }, 2000); 21503 } 21504 21505 function setTimeCarousel() { 21506 vm.pauseCarousel(); 21507 $timeout(function () { 21508 vm.startCarousel(vm.imageDuration * 1000); 21509 }, 1000); 21510 } 21511 } 21512})(); 21513; 21514(function () { 21515 'use strict'; 21516 21517 angular 21518 .module('app.directives') 21519 .directive('imageCarousel', imageCarousel) 21520 21521 imageCarousel.$inject = []; 21522 21523 function imageCarousel() { 21524 return { 21525 restrict: 'E', 21526 scope: { 21527 widget: '=' 21528 }, 21529 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/image/carousel/image-carousel.tpl.html', 21530 controller: 'ImageCarouselWidgetController', 21531 controllerAs: 'imageCarousel', 21532 link: function (scope, element, attr, controller) { 21533 var vm = controller; 21534 21535 vm.startCarousel = function (time) { 21536 $(`#carousel-${scope.widget}`).carousel({ 21537 interval: time, 21538 keyboard: false, 21539 pause: false 21540 }); 21541 } 21542 21543 vm.pauseCarousel = function () { 21544 $(`#carousel-${scope.widget}`).carousel('dispose'); 21545 } 21546 } 21547 }; 21548 } 21549})();; 21550(function () { 21551 'use strict'; 21552 21553 angular 21554 .module('app.directives')
21555 .controller('NewsDetailsWidgetController', NewsDetailsWidgetController); 21556 21557 NewsDetailsWidgetController.$inject = ['$scope', '$sce']; 21558 21559 function NewsDetailsWidgetController($scope, $sce) { 21560 var vm = this; 21561 21562 // Apply website values to view model object. 21563 vm.widget = angular.fromJson(widgets[$scope.widget]); 21564 21565 Object.assign(vm, __news__); 21566 21567 vm.text = $sce.trustAsHtml(vm.text.replace(/\\"/g, '"')); 21568 } 21569})(); 21570; 21571(function () { 21572 'use strict'; 21573 21574 angular 21575 .module('app.directives') 21576 .directive('newsDetails', newsDetails); 21577 21578 newsDetails.$inject = []; 21579 21580 function newsDetails() { 21581 return { 21582 restrict: 'E', 21583 scope: { 21584 widget: '=' 21585 }, 21586 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/news/details/news-details.tpl.html', 21587 controller: 'NewsDetailsWidgetController', 21588 controllerAs: 'news', 21589 link: function (scope, element, attribute, controller) { 21590 21591 } 21592 }; 21593 } 21594})();; 21595(function () { 21596 'use strict'; 21597 21598 angular 21599 .module('app.directives') 21600 .controller('LatestNewsWidgetController', LatestNewsWidgetController); 21601 21602 LatestNewsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService', 'UrlService', 'NewsService']; 21603 21604 function LatestNewsWidgetController($rootScope, $scope, $localStorage, websiteEditorService, urlService, newsService) { 21605 var vm = this; 21606 vm.url = urlService; 21607 vm.all = []; 21608 21609 // Apply website values to view model object. 21610 vm.widget = angular.fromJson(widgets[$scope.widget]); 21611 21612 // Triggered when parameters are changed. 21613 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function(event, data) { 21614 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 21615 .then(function(response) { 21616 // Update the news feed. 21617 getLatestNews(parseInt(data["nbNewsDisplayed"]), data["tags"]); 21618 21619 // Update widget variable. 21620 var newsDisplayedParam = _.find(vm.widget.parameters, { id: 'nbNewsDisplayed' }); 21621 if (newsDisplayedParam) { 21622 newsDisplayedParam.value = parseInt(data["nbNewsDisplayed"]); 21623 } 21624 21625 var tagsParam = _.find(vm.widget.parameters, { id: 'tags' }); 21626 if (tagsParam) { 21627 tagsParam.value = data["tags"]; 21628 } 21629 21630 widgets[$scope.widget] = angular.toJson(vm.widget); 21631 }) 21632 .catch(function(error) { 21633 bugsnag.notify(error); 21634 }); 21635 }); 21636 21637 $scope.$on('$destroy', listener); 21638 21639 // Load the latest news 21640 var nbNewsDisplayedParam = _.get(_.find(vm.widget.parameters, { id: 'nbNewsDisplayed' }), 'value'); 21641 var tagsParam = _.get(_.find(vm.widget.parameters, { id: 'tags' }), 'value'); 21642 getLatestNews(parseInt(nbNewsDisplayedParam), tagsParam); 21643 21644 function getLatestNews(nbNewsDisplayed, tags) { 21645 var tagsList = []; 21646 21647 if (tags) { 21648 tagsList = angular.fromJson(tags.replace(/'/g, '"')); 21649 } 21650 21651 if (tagsList.length > 0) { 21652 newsService.getNewsBySolutionTags(__solutionId__, { page: 1, pageSize: nbNewsDisplayed, culture: $localStorage.currentLanguage.culture, tags: tagsList }) 21653 .then(function (response) { 21654 vm.all = response.data.Results; // All latest news. 21655 }) 21656 .catch(function (error) { 21657 bugsnag.notify(error); 21658 }); 21659 } 21660 else { 21661 newsService.getNewsBySolutionId(__solutionId__, { page: 1, pageSize: nbNewsDisplayed, culture: $localStorage.currentLanguage.culture }) 21662 .then(function (response) { 21663 vm.all = response.data.Results; // All latest news. 21664 }) 21665 .catch(function (error) { 21666 bugsnag.notify(error); 21667 }); 21668 } 21669 } 21670 } 21671})(); 21672; 21673(function () { 21674 'use strict'; 21675 21676 angular 21677 .module('app.directives') 21678 .directive('latestNews', latestNews) 21679 21680 latestNews.$inject = []; 21681 21682 function latestNews() { 21683 return { 21684 restrict: 'E', 21685 scope: { 21686 widget: '=' 21687 }, 21688 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/news/latest/latest-news.tpl.html', 21689 controller: 'LatestNewsWidgetController', 21690 controllerAs: 'latestNews' 21691 }; 21692 } 21693})();; 21694(function () { 21695 'use strict'; 21696 21697 angular 21698 .module('app.directives') 21699 .controller('LatestNewsPremiumWidgetController', LatestNewsPremiumWidgetController); 21700 21701 LatestNewsPremiumWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService', 'UrlService', 'NewsService']; 21702 21703 function LatestNewsPremiumWidgetController($rootScope, $scope, $localStorage, websiteEditorService, urlService, newsService) { 21704 var vm = this; 21705 vm.url = urlService; 21706 vm.all = []; 21707 21708 vm.colors = { primary: { background: "#FFFFFF", text: "#000000", title: "#000000" }, secondary: { background: '#000000', text: '#FFFFFF', title: '#FFFFFF' } }; 21709 vm.background = { image: '', position: '' } 21710 21711 // Apply website values to view model object. 21712 vm.widget = angular.fromJson(widgets[$scope.widget]); 21713 21714 vm.getStyle = function () { 21715 var style = {}; 21716 if (!vm.widgetTransparency) { 21717 style['background-color'] = vm.backgroundColor; 21718 style['border-color'] = vm.border.color; 21719 } 21720 21721 style['border-width'] = `${vm.border.width}px`; 21722 style['border-color'] = vm.border.color;
21723 style['border-radius'] = `${vm.border.radius}px`; 21724 return style; 21725 } 21726 21727 var tagsParam = []; 21728 for (var parameter in vm.widget.parameters) { 21729 switch (vm.widget.parameters[parameter].id) { 21730 case 'tags': 21731 tagsParam = vm.widget.parameters[parameter].value; 21732 break; 21733 case 'widgetTransparency': 21734 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 21735 break; 21736 case 'backgroundColor': 21737 vm.backgroundColor = vm.widget.parameters[parameter].value; 21738 break; 21739 case 'backgroundImage': 21740 vm.background.image = vm.widget.parameters[parameter].value; 21741 break; 21742 case 'backgroundImagePosition': 21743 vm.background.position = vm.widget.parameters[parameter].value; 21744 break; 21745 case 'titleColor': 21746 vm.titleColor = vm.widget.parameters[parameter].value; 21747 break; 21748 case 'border': 21749 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 21750 break; 21751 case 'primaryBackgroundColor': 21752 vm.colors.primary.background = vm.widget.parameters[parameter].value; 21753 break; 21754 case 'primaryTitleColor': 21755 vm.colors.primary.title = vm.widget.parameters[parameter].value; 21756 break; 21757 case 'primaryTextColor': 21758 vm.colors.primary.text = vm.widget.parameters[parameter].value; 21759 break; 21760 case 'secondaryBackgroundColor': 21761 vm.colors.secondary.background = vm.widget.parameters[parameter].value; 21762 break; 21763 case 'secondaryTitleColor': 21764 vm.colors.secondary.title = vm.widget.parameters[parameter].value; 21765 break; 21766 case 'secondaryTextColor': 21767 vm.colors.secondary.text = vm.widget.parameters[parameter].value; 21768 break; 21769 } 21770 } 21771 21772 // Triggered when parameters are changed. 21773 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function(event, data) { 21774 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 21775 .then(function(response) { 21776 // Update the news feed. 21777 getLatestNews(data["tags"]); 21778 21779 var tagsParam = _.find(vm.widget.parameters, { id: 'tags' }); 21780 if (tagsParam) { 21781 tagsParam.value = data["tags"]; 21782 } 21783 21784 for (var parameter in vm.widget.parameters) { 21785 switch (vm.widget.parameters[parameter].id) { 21786 case 'widgetTransparency': 21787 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 21788 vm.widgetTransparency = data.widgetTransparency; 21789 break; 21790 case 'backgroundColor': 21791 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 21792 vm.backgroundColor = data.backgroundColor; 21793 break; 21794 case 'backgroundImage': 21795 vm.widget.parameters[parameter].value = data.backgroundImage.toString(); 21796 vm.background.image = data.backgroundImage; 21797 break; 21798 case 'backgroundImagePosition': 21799 vm.widget.parameters[parameter].value = data.backgroundImagePosition.toString(); 21800 vm.background.position = data.backgroundImagePosition; 21801 break; 21802 case 'titleColor': 21803 vm.widget.parameters[parameter].value = data.titleColor.toString(); 21804 vm.titleColor = data.titleColor; 21805 break; 21806 case 'border': 21807 vm.widget.parameters[parameter].value = data.border; 21808 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 21809 break;
21810 case 'primaryBackgroundColor': 21811 vm.widget.parameters[parameter].value = data.primaryBackgroundColor.toString(); 21812 vm.colors.primary.background = data.primaryBackgroundColor; 21813 break; 21814 case 'primaryTitleColor': 21815 vm.widget.parameters[parameter].value = data.primaryTitleColor.toString(); 21816 vm.colors.primary.title = data.primaryTitleColor; 21817 break; 21818 case 'primaryTextColor': 21819 vm.widget.parameters[parameter].value = data.primaryTextColor.toString(); 21820 vm.colors.primary.text = data.primaryTextColor; 21821 break; 21822 case 'secondaryBackgroundColor': 21823 vm.widget.parameters[parameter].value = data.secondaryBackgroundColor.toString(); 21824 vm.colors.secondary.background = data.secondaryBackgroundColor; 21825 break; 21826 case 'secondaryTitleColor': 21827 vm.widget.parameters[parameter].value = data.secondaryTitleColor.toString(); 21828 vm.colors.secondary.title = data.secondaryTitleColor; 21829 break; 21830 case 'secondaryTextColor': 21831 vm.widget.parameters[parameter].value = data.secondaryTextColor.toString(); 21832 vm.colors.secondary.text = data.secondaryTextColor; 21833 break; 21834 } 21835 } 21836 21837 widgets[$scope.widget] = angular.toJson(vm.widget); 21838 }) 21839 .catch(function(error) { 21840 bugsnag.notify(error); 21841 }); 21842 }); 21843 21844 $scope.$on('$destroy', listener); 21845 21846 getLatestNews(tagsParam); 21847 21848 function getLatestNews(tags) { 21849 var tagsList = []; 21850 21851 if (tags) { 21852 tagsList = angular.fromJson(tags.replace(/'/g, '"')); 21853 } 21854 21855 if (tagsList.length > 0) { 21856 newsService.getNewsBySolutionTags(__solutionId__, { page: 1, pageSize: 3, culture: $localStorage.currentLanguage.culture, tags: tagsList }) 21857 .then(function (response) { 21858 vm.all = response.data.Results; // All latest news. 21859 }) 21860 .catch(function (error) { 21861 bugsnag.notify(error); 21862 }); 21863 } 21864 else { 21865 newsService.getNewsBySolutionId(__solutionId__, { page: 1, pageSize: 3, culture: $localStorage.currentLanguage.culture }) 21866 .then(function (response) { 21867 vm.all = response.data.Results; // All latest news. 21868 }) 21869 .catch(function (error) { 21870 bugsnag.notify(error); 21871 }); 21872 } 21873 } 21874 } 21875})(); 21876; 21877(function () { 21878 'use strict'; 21879 21880 angular 21881 .module('app.directives') 21882 .directive('latestNewsPremium', latestNewsPremium) 21883 21884 latestNewsPremium.$inject = []; 21885 21886 function latestNewsPremium() { 21887 return { 21888 restrict: 'E', 21889 scope: { 21890 widget: '=' 21891 }, 21892 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/news/latest-premium/latest-news-premium.tpl.html', 21893 controller: 'LatestNewsPremiumWidgetController', 21894 controllerAs: 'latestNewsPremium' 21895 }; 21896 } 21897})();; 21898(function () { 21899 'use strict'; 21900 21901 angular 21902 .module('app.directives') 21903 .controller('LatestNewPremiumWidgetController', LatestNewPremiumWidgetController); 21904 21905 LatestNewPremiumWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService', 'UrlService', 'NewsService']; 21906 21907 function LatestNewPremiumWidgetController($rootScope, $scope, $localStorage, websiteEditorService, urlService, newsService) { 21908 var vm = this; 21909 vm.url = urlService; 21910 vm.news = $scope.news; 21911
21912 vm.getBackgroundStyle = function () { 21913 var style = {}; 21914 21915 if ($scope.background && $scope.background.image) { 21916 style['background-image'] = `url(${$scope.background.image})`; 21917 style['background-repeat'] = 'no-repeat'; 21918 style['background-position'] = $scope.background.position || 'center center'; 21919 } 21920 21921 return style; 21922 } 21923 21924 $scope.$watch('news', function (news) { 21925 vm.news = news; 21926 if (news) { 21927 vm.clampLead(); 21928 } 21929 }) 21930 } 21931})(); 21932; 21933(function () { 21934 'use strict'; 21935 21936 angular 21937 .module('app.directives') 21938 .directive('latestNewPremium', latestNewPremium) 21939 21940 latestNewPremium.$inject = ['$timeout']; 21941 21942 function latestNewPremium($timeout) { 21943 return { 21944 restrict: 'E', 21945 replace: true, 21946 scope: { 21947 news: '=', 21948 primary: '=', 21949 colors: '=', 21950 background: '=', 21951 }, 21952 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/news/latest-premium/latest-new-premium/latest-new-premium.tpl.html', 21953 controller: 'LatestNewPremiumWidgetController', 21954 controllerAs: 'latestNewPremium', 21955 21956 link: function (scope, element, attributes, controller) { 21957 controller.clampLead = function () { 21958 $timeout(function () { 21959 $clamp(element[0].getElementsByClassName('lead')[0], { clamp: 'auto' }); 21960 }) 21961 } 21962 } 21963 }; 21964 } 21965})();; 21966(function () { 21967 'use strict'; 21968 21969 angular 21970 .module('app.directives') 21971 .controller('NewsCarouselWidgetController', NewsCarouselWidgetController); 21972 21973 NewsCarouselWidgetController.$inject = ['$rootScope', '$timeout', '$scope', '$localStorage', 'WebsiteEditorService', 'UrlService', 'NewsService']; 21974 21975 function NewsCarouselWidgetController($rootScope, $timeout, $scope, $localStorage, websiteEditorService, urlService, newsService) { 21976 var vm = this; 21977 21978 //State variables 21979 vm.startedCarousel = false; 21980 vm.url = urlService; 21981 vm.news = []; 21982 vm.imageDuration = 5000; 21983 vm.nbNewsDisplayed = 4; 21984 vm.animation = 'slide'; 21985 vm.tags = []; 21986 vm.widget = angular.fromJson(widgets[$scope.widget]); 21987 21988 //Component mount ----- 21989 for (var parameter in vm.widget.parameters) { 21990 switch (vm.widget.parameters[parameter].id) { 21991 case 'nbNewsDisplayed': 21992 vm.nbNewsDisplayed = parseInt(vm.widget.parameters[parameter].value); 21993 break; 21994 21995 case 'imageDuration': 21996 vm.imageDuration = parseInt(vm.widget.parameters[parameter].value); 21997 break; 21998 21999 case 'animation': 22000 vm.animation = vm.widget.parameters[parameter].value; 22001 break; 22002 22003 case 'tags': 22004 vm.tags = angular.fromJson(vm.widget.parameters[parameter].value.replace(/'/g, '"')); 22005 break; 22006 } 22007 } 22008 22009 getLatestNews(); 22010 22011 // Listener 22012 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 22013 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 22014 .then(function () { 22015 for (var parameter in vm.widget.parameters) { 22016 switch (vm.widget.parameters[parameter].id) { 22017 case 'nbNewsDisplayed': 22018 vm.nbNewsDisplayed = parseInt(data.nbNewsDisplayed); 22019 vm.widget.parameters[parameter].value = data.nbNewsDisplayed; 22020 break; 22021 22022 case 'imageDuration': 22023 vm.imageDuration = parseInt(data.imageDuration); 22024 vm.widget.parameters[parameter].value = data.imageDuration; 22025 break; 22026 22027 case 'animation': 22028 vm.animation = data.animation; 22029 vm.widget.parameters[parameter].value = data.animation; 22030 break; 22031 22032 case 'tags': 22033 vm.tags = angular.fromJson(data.tags.replace(/\'/g, '"')); 22034 vm.widget.parameters[parameter].value = data.tags; 22035 break; 22036 22037 } 22038 } 22039 widgets[$scope.widget] = angular.toJson(vm.widget); 22040 getLatestNews(); 22041 }) 22042 .catch(function (error) { 22043 bugsnag.notify(error); 22044 }); 22045 }); 22046 22047 $scope.$on('$destroy', listener); 22048 22049 22050 // Helpers 22051 function getLatestNews() { 22052 if (vm.tags.length > 0) { 22053 newsService.getNewsBySolutionTags(__solutionId__, { page: 1, pageSize: vm.nbNewsDisplayed, culture: $localStorage.currentLanguage.culture, tags: vm.tags }) 22054 .then(function (response) { 22055 vm.news = response.data.Results; 22056 carousel(); 22057 }) 22058 .catch(function (error) { 22059 bugsnag.notify(error); 22060 }); 22061 } 22062 else { 22063 newsService.getNewsBySolutionId(__solutionId__, { page: 1, pageSize: vm.nbNewsDisplayed, culture: $localStorage.currentLanguage.culture }) 22064 .then(function (response) { 22065 vm.news = response.data.Results; 22066 console.log(vm.news); 22067 carousel(); 22068 }) 22069 .catch(function (error) { 22070 bugsnag.notify(error); 22071 }); 22072 } 22073 } 22074 22075 22076 function carousel() { 22077 if (vm.startedCarousel) { 22078 vm.pauseCarousel(); 22079 } else { 22080 vm.startedCarousel = true; 22081 } 22082 $timeout(function () { 22083 vm.startCarousel(vm.imageDuration * 1000); 22084 }, 1000); 22085 } 22086 } 22087})(); 22088; 22089(function () { 22090 'use strict'; 22091 22092 angular 22093 .module('app.directives') 22094 .directive('newsCarousel', newsCarousel) 22095 22096 newsCarousel.$inject = []; 22097 22098 function newsCarousel() { 22099 return { 22100 restrict: 'E', 22101 scope: { 22102 widget: '=' 22103 }, 22104 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/news/carousel/news-carousel.tpl.html', 22105 controller: 'NewsCarouselWidgetController', 22106 controllerAs: 'newsCarousel', 22107 link: function (scope, element, attr, controller) { 22108 var vm = controller; 22109 22110 vm.startCarousel = function (time) { 22111 $("#carouselExampleCaptions").carousel({ 22112 interval: time, 22113 keyboard: false, 22114 pause: false 22115 }); 22116 } 22117 22118 vm.pauseCarousel = function () { 22119 $("#carouselExampleCaptions").carousel('dispose'); 22120 } 22121 } 22122 }; 22123 } 22124})();; 22125(function () { 22126 'use strict'; 22127 22128 angular 22129 .module('app.directives') 22130 .controller('NewsListWidgetController', NewsListWidgetController); 22131 22132 NewsListWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService', 'UrlService', 'NewsService']; 22133 22134 function NewsListWidgetController($rootScope, $scope, $localStorage, websiteEditorService, urlService, newsService) { 22135 var vm = this; 22136 vm.url = urlService; 22137 22138 // Apply website values to view model object. 22139 vm.widget = angular.fromJson(widgets[$scope.widget]); 22140 22141 var tagsList = []; 22142 var tags = _.get(_.find(vm.widget.parameters, { id: 'tags' }), 'value'); 22143 if (tags) { 22144 tagsList = angular.fromJson(tags.replace(/'/g, '"')); 22145 } 22146 22147 Object.assign(vm, { 22148 all: { 22149 currentPage: 1, 22150 pageSize: parseInt(_.get(_.find(vm.widget.parameters, { id: 'nbNewsDisplayedByPage' }), 'value')) || 0, // TODO Create global method to get parameter by name. 22151 tags: tagsList, 22152 totalCount: 0, 22153 results: [], 22154 clickPage: clickPage, 22155 clickPrevious: clickPrevious, 22156 clickNext: clickNext 22157 } 22158 }); 22159 22160 // Triggered when parameters are changed. 22161 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function(event, data) { 22162 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 22163 .then(function (response) { 22164 vm.all.tags = angular.fromJson(data["tags"].replace(/'/g, '"'));; 22165 vm.all.pageSize = data["nbNewsDisplayedByPage"]; 22166 22167 // Update the news feed. 22168 getNews(); 22169 22170 // Update widget variable. 22171 var newsDisplayedParam = _.find(vm.widget.parameters, { id: 'nbNewsDisplayed' });
22172 if (newsDisplayedParam) { 22173 newsDisplayedParam.value = parseInt(data["nbNewsDisplayed"]); 22174 } 22175 22176 var tagsParam = _.find(vm.widget.parameters, { id: 'tags' }); 22177 if (tagsParam) { 22178 tagsParam.value = data["tags"]; 22179 } 22180 22181 widgets[$scope.widget] = angular.toJson(vm.widget); 22182 }) 22183 .catch(function (error) { 22184 bugsnag.notify(error); 22185 }); 22186 }); 22187 22188 $scope.$on('$destroy', listener); 22189 22190 // Load the news. 22191 getNews(); 22192 22193 function getNews() { 22194 if (vm.all.tags.length > 0) { 22195 newsService.getNewsBySolutionTags(__solutionId__, { page: vm.all.currentPage, pageSize: vm.all.pageSize, culture: $localStorage.currentLanguage.culture, tags: vm.all.tags }) 22196 .then(function (response) { 22197 vm.all.results = response.data.Results; // All the news. 22198 vm.all.totalCount = response.data.TotalCount; 22199 }) 22200 .catch(function (error) { 22201 bugsnag.notify(error); 22202 }); 22203 } 22204 else { 22205 newsService.getNewsBySolutionId(__solutionId__, { page: vm.all.currentPage, pageSize: vm.all.pageSize, culture: $localStorage.currentLanguage.culture }) 22206 .then(function (response) { 22207 vm.all.results = response.data.Results; // All the news. 22208 vm.all.totalCount = response.data.TotalCount; 22209 }) 22210 .catch(function (error) { 22211 bugsnag.notify(error); 22212 }); 22213 } 22214 } 22215 22216 function clickPrevious() { 22217 vm.all.currentPage -= 1; 22218 22219 // Get news for the selected page. 22220 getNews(); 22221 } 22222 22223 function clickNext() { 22224 vm.all.currentPage += 1; 22225 22226 // Get news for the selected page. 22227 getNews(); 22228 } 22229 22230 function clickPage(page) { 22231 vm.all.currentPage = page; 22232 22233 // Get news for the selected page. 22234 getNews(); 22235 } 22236 } 22237})(); 22238; 22239(function () { 22240 'use strict'; 22241 22242 angular 22243 .module('app.directives') 22244 .directive('newsList', newsList); 22245 22246 newsList.$inject = []; 22247 22248 function newsList() { 22249 return { 22250 restrict: 'E', 22251 scope: { 22252 widget: '=' 22253 }, 22254 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/news/list/news-list.tpl.html', 22255 controller: 'NewsListWidgetController', 22256 controllerAs: 'news' 22257 }; 22258 } 22259})();; 22260(function () { 22261 'use strict'; 22262 22263 angular 22264 .module('app.directives') 22265 .controller('PhotoListWidgetController', PhotoListWidgetController); 22266 22267 PhotoListWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService', 'UrlService', 'PhotoService']; 22268 22269 function PhotoListWidgetController($rootScope, $scope, websiteEditorService, urlService, photoService) { 22270 var vm = this; 22271 vm.url = urlService; 22272 22273 // Apply website values to view model object. 22274 vm.widget = angular.fromJson(widgets[$scope.widget]); 22275 22276 Object.assign(vm, { 22277 all: { 22278 currentPage: 1, 22279 pageSize: parseInt(vm.widget.parameters[0].value), // TODO Create global method to get parameter by name. 22280 totalCount: 0, 22281 results: [], 22282 clickPage: clickPage, 22283 clickPrevious: clickPrevious, 22284 clickNext: clickNext 22285 } 22286 }); 22287 22288 // Triggered when parameters are changed. 22289 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function(event, data) { 22290 /*websiteEditorService.updatePage(__solutionId__, __pageId__, page, { uuid: vm.widget.uuid, parameters: data }) 22291 .then(function(response) { 22292 // Update the news feed. 22293 getLatestNews(parseInt(data["nbNewsDisplayed"])); 22294 22295 // Update widget variable. 22296 // TODO Improve mechanism. 22297 vm.widget.parameters[0].value = parseInt(data["nbNewsDisplayed"]); 22298 widgets[$scope.widget] = angular.toJson(vm.widget); 22299 })
22300 .catch(function(error) { 22301 bugsnag.notify(error); 22302 });*/ 22303 }); 22304 22305 // Destroy the listener. 22306 $scope.$on('$destroy', listener); 22307 22308 vm.displayPhoto = function(photo) { 22309 vm.photoSelected = photo.Image.AbsoluteUrl; 22310 vm.open(); 22311 }; 22312 22313 // Load the latest news. 22314 getPhotos(parseInt(vm.widget.parameters[0].value)); 22315 22316 function getPhotos() { 22317 photoService.getPhotosBySolutionId(__solutionId__, { page: vm.all.currentPage, pageSize: vm.all.pageSize }) 22318 .then(function(response) { 22319 vm.all.results = response.data.Results; // All photos. 22320 vm.all.totalCount = response.data.TotalCount; 22321 }) 22322 .catch(function(error) { 22323 bugsnag.notify(error); 22324 }); 22325 } 22326 22327 function clickPrevious() { 22328 vm.all.currentPage -= 1; 22329 22330 // Get photos for the selected page. 22331 getPhotos(); 22332 } 22333 22334 function clickNext() { 22335 vm.all.currentPage += 1; 22336 22337 // Get photos for the selected page. 22338 getPhotos(); 22339 } 22340 22341 function clickPage(page) { 22342 vm.all.currentPage = page; 22343 22344 // Get photos for the selected page. 22345 getPhotos(); 22346 } 22347 } 22348})(); 22349; 22350(function () { 22351 'use strict'; 22352 22353 angular 22354 .module('app.directives') 22355 .directive('photoList', photoList); 22356 22357 photoList.$inject = ['$document']; 22358 22359 function photoList($document) { 22360 return { 22361 restrict: 'E', 22362 scope: { 22363 widget: '=' 22364 }, 22365 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/photo/list/photo-list.tpl.html', 22366 controller: 'PhotoListWidgetController', 22367 controllerAs: 'photos', 22368 link: function (scope, element, attribute, controller) { 22369 var vm = controller; 22370 vm.fullscreen = false; 22371 22372 vm.open = function() { 22373 vm.fullscreen = true; 22374 22375 $($document[0].body).addClass('overflow-hidden'); 22376 }; 22377 22378 vm.close = function() { 22379 vm.fullscreen = false; 22380 22381 $($document[0].body).removeClass('overflow-hidden'); 22382 }; 22383 } 22384 }; 22385 } 22386})();; 22387(function () { 22388 'use strict'; 22389 22390 angular 22391 .module('app.directives') 22392 .controller('PlayerDetailsWidgetController', PlayerDetailsWidgetController); 22393 22394 PlayerDetailsWidgetController.$inject = ['$rootScope', '$scope', '$sce', '$location', '$translate', 'UrlService', 'PositionService', 'WebsiteEditorService']; 22395 22396 function PlayerDetailsWidgetController($rootScope, $scope, $sce, $location, $translate, urlService, positionService, websiteEditorService) { 22397 var vm = this; 22398 var iframecode = ''; 22399 22400 //State variables ----- 22401 vm.url = urlService; 22402 vm._position = positionService; 22403 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 22404 vm.widget = angular.fromJson(widgets[$scope.widget]); 22405 Object.assign(vm, __player__); 22406 vm.defaultTab = _.find(vm.tabs, { default: true }); 22407 vm.otherTabs = _.filter(vm.tabs, { default: false }); 22408 vm.tabs.forEach(function (tab) { 22409 tab.content = $sce.trustAsHtml(tab.content); 22410 }); 22411 vm.showAge = true; 22412 vm.showHeight = true; 22413 vm.showWeight = true; 22414 vm.showNotes = true; 22415 vm.showBirthday = false; 22416 vm.showCumulativeStatsTab = true; 22417 vm.showGameLogTab = false; 22418 22419 //State functions ----- 22420 vm.getAge = function (birthday) { 22421 return birthday !== null 22422 ? moment().diff(birthday, 'years') 22423 : ''; 22424 }; 22425 22426 vm.getBirthday = function (birthday) { 22427 return birthday !== null ? moment(birthday).format($translate.instant('directives.widgets.player.details.format.birthday')) : ''; 22428 } 22429 22430 //On component mount
22431 for (var parameter in vm.widget.parameters) { 22432 switch (vm.widget.parameters[parameter].id) { 22433 case 'showAge': 22434 vm.showAge = (vm.widget.parameters[parameter].value === 'true'); 22435 break; 22436 22437 case 'showHeight': 22438 vm.showHeight = (vm.widget.parameters[parameter].value === 'true'); 22439 break; 22440 22441 case 'showWeight': 22442 vm.showWeight = (vm.widget.parameters[parameter].value === 'true'); 22443 break; 22444 22445 case 'showNotes': 22446 vm.showNotes = (vm.widget.parameters[parameter].value === 'true'); 22447 break; 22448 22449 case 'showBirthday': 22450 vm.showBirthday = (vm.widget.parameters[parameter].value === 'true'); 22451 break; 22452 22453 case 'showCumulativeStatsTab': 22454 vm.showCumulativeStatsTab = (vm.widget.parameters[parameter].value === 'true'); 22455 break; 22456 22457 case 'showGameLogTab': 22458 vm.showGameLogTab = (vm.widget.parameters[parameter].value === 'true'); 22459 break; 22460 22461 case 'columnsDisplayGameLog': 22462 vm.columnsGameLogStats = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 22463 break; 22464 } 22465 } 22466 22467 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 22468 console.log('HERE') 22469 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 22470 .then(function (response) { 22471 for (var parameter in vm.widget.parameters) { 22472 switch (vm.widget.parameters[parameter].id) { 22473 case 'showAge': 22474 vm.widget.parameters[parameter].value = data.showAge.toString(); 22475 vm.showAge = data.showAge; 22476 break; 22477 22478 case 'showHeight': 22479 vm.widget.parameters[parameter].value = data.showHeight.toString(); 22480 vm.showHeight = data.showHeight; 22481 break; 22482 22483 case 'showWeight': 22484 vm.widget.parameters[parameter].value = data.showWeight.toString(); 22485 vm.showWeight = data.showWeight; 22486 break; 22487 22488 case 'showNotes': 22489 vm.widget.parameters[parameter].value = data.showNotes.toString(); 22490 vm.showNotes = data.showNotes; 22491 break; 22492 22493 case 'showBirthday': 22494 vm.widget.parameters[parameter].value = data.showBirthday.toString(); 22495 vm.showBirthday = data.showBirthday; 22496 break; 22497 22498 case 'showCumulativeStatsTab': 22499 vm.widget.parameters[parameter].value = data.showCumulativeStatsTab.toString(); 22500 vm.showCumulativeStatsTab = data.showCumulativeStatsTab; 22501 break; 22502 case 'showGameLogTab': 22503 vm.widget.parameters[parameter].value = data.showGameLogTab.toString(); 22504 vm.showGameLogTab = data.showGameLogTab; 22505 break; 22506 case 'columnsDisplayGameLog': 22507 vm.widget.parameters[parameter].value = data.columnsDisplayGameLog; 22508 vm.columnsGameLogStats = angular.fromJson(data.columnsDisplayGameLog.replace(/\'/g, '"')); 22509 console.log(data); 22510 break; 22511 } 22512 } 22513 widgets[$scope.widget] = angular.toJson(vm.widget); 22514 }) 22515 .catch(function (error) { 22516 bugsnag.notify(error); 22517 }); 22518 }); 22519 22520 $scope.$on('$destroy', listener); 22521 } 22522})(); 22523; 22524(function () { 22525 'use strict'; 22526 22527 angular 22528 .module('app.directives') 22529 .directive('playerDetails', playerDetails); 22530 22531 playerDetails.$inject = []; 22532 22533 function playerDetails() { 22534 return { 22535 restrict: 'E', 22536 scope: { 22537 widget: '=' 22538 }, 22539 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/detail
22539s/player-details.tpl.html', 22540 controller: 'PlayerDetailsWidgetController', 22541 controllerAs: 'playerDetails' 22542 }; 22543 } 22544})();; 22545(function () { 22546 'use strict'; 22547 22548 angular 22549 .module('app.directives') 22550 .controller('PlayerAllTimeStatisticsController', PlayerAllTimeStatisticsController); 22551 PlayerAllTimeStatisticsController.$inject = ['$scope', '$localStorage', 'UrlService', 'StatisticService', 'PositionService']; 22552 22553 function PlayerAllTimeStatisticsController($scope, $localStorage, urlService, statisticService, positionService) { 22554 var vm = this; 22555 vm.url = urlService; 22556 vm.category = positionService; 22557 vm.sportId = $localStorage.solution.sportId; 22558 vm.columns = [] 22559 vm.categories = {} 22560 Object.assign(vm, __player__); 22561 22562 vm.getColumns = function (catId) { 22563 let columns; 22564 switch (vm.sportId) { 22565 case 1: 22566 // TODO Move default columns into service 22567 // TODO Implement columns parameters into the widget. 22568 columns = Number(catId) === 2 22569 ? statisticService.getPlayerStatisticColumnsByColumnIds([14, 6, 7, 29, 8, 26, 27, 31]) 22570 : statisticService.getPlayerStatisticColumnsByColumnIds([62, 15, 16, 17, 19, 21, 22, 32, 25, 24, 30, 8]); 22571 // TODO Initialize column sort / change hardcoded value. 22572 _.find(columns, function (column) { 22573 return Number(catId) === 2 ? column.id === 29 : column.id === 32; 22574 }).sort = 'desc'; 22575 return columns 22576 22577 case 2: 22578 // TODO Move default columns into service 22579 // TODO Implement columns parameters into the widget. 22580 switch (Number(catId)) { 22581 case 8: 22582 columns = statisticService.getPlayerStatisticColumnsByColumnIds([96, 97, 98, 100, 99, 94, 127, 95, 101, 116, 93, 117, 91, 92, 114, 126, 103]); 22583 break; 22584 case 9: 22585 columns = statisticService.getPlayerStatisticColumnsByColumnIds([65, 67, 77, 80, 69, 70, 71, 75, 72, 73, 76, 79, 106, 81, 83, 82, 86, 85]) 22586 break; 22587 case 21: 22588 columns = statisticService.getPlayerStatisticColumnsByColumnIds([65, 105, 107, 108, 167]) 22589 break; 22590 } 22591 // TODO Initialize column sort / change hardcoded value. 22592 _.find(columns, function (column) { 22593 switch (Number(catId)) { 22594 case 8: 22595 column.id === 100; 22596 break; 22597 case 9: 22598 column.id === 81; 22599 break; 22600 case 21: 22601 column.id === 65; 22602 break; 22603 } 22604 return column; 22605 }).sort = 'desc'; 22606 return columns 22607 22608 22609 case 4: 22610 // TODO Move default columns into service 22611 // TODO Implement columns parameters into the widget. 22612 columns = statisticService.getPlayerStatisticColumnsByColumnIds([132, 134, 137, 140, 141, 142, 152, 153, 154, 155, 162]); 22613 22614 // TODO Initialize column sort / change hardcoded value. 22615 _.find(columns, function (column) { 22616 return 132; 22617 }).sort = 'desc'; 22618 return columns 22619 22620 case 6: 22621 // TODO Move default columns into service 22622 // TODO Implement columns parameters into the widget. 22623 columns = statisticService.getPlayerStatisticColumnsBySportId(vm.sportId, Number(catId)) 22624 22625 // TODO Initialize column sort / change hardcoded value. 22626 _.find(columns, function (column) { 22627 return Number(catId) === 3 ? column.id === 37 : column.id === 46; 22628 }).sort = 'desc'; 22629 return columns 22630 22631 case 14: 22632 // TODO Move default columns into service 22633 // TODO Implement columns parameters into the widget. 22634 columns = statisticService.getPlayerStatisticColumnsByColumnIds([53, 54, 55, 60, 57, 56, 58, 59]); 22635 // TODO Initialize column sort / change hardcoded value. 22636 _.find(columns, function (column) { 22637 return column.id === 60; 22638 }).sort = 'desc'; 22639 22640 return columns 22641 } 22642 } 22643 22644 // TODO Move into service 22645 vm.getStatisticValue = function (player, statisticId) { 22646 if (player.Stats.length > 0) { 22647 22648 var playerStat = _.find(player.Stats, function (statistic) { 22649 return statistic.StatTypeId === statisticId; 22650 }); 22651 22652 if (playerStat) { 22653 return playerStat.DisplayValue; 22654 } 22655 } 22656 return '0'; 22657 }; 22658 22659 statisticService.getPlayerAllStatisticsByPlayerId(__solutionId__, vm.id) 22660 .then(function (response) { 22661 //Filtering by categoryId 22662 let categories = _.groupBy(response.data, function (res) { 22663 return res.CategoryId 22664 }) 22665 _.forEach(categories, function (data, catId) { 22666 let tempTotal = _.filter(data, function (item) { 22667 return item.SeasonName === null; 22668 }) 22669 let tempData = _.filter(data, function (item) { 22670 return item.SeasonName !== null; 22671 }) 22672 let tempSeasonType = _.groupBy(data, function (item) { 22673 return item.SeasonType 22674 }) 22675 vm.categories[catId] = { data: tempData, columns: vm.getColumns(catId), totals: tempTotal, seasonsType: tempSeasonType } 22676 }) 22677 vm.hasData = !_.isEmpty(vm.categories); 22678 }) 22679 22680 .then(function () { 22681 _.forEach(vm.categories, function (position) { 22682 _.forEach(position.columns, function (col) { 22683 vm.columns.push(col) 22684 }) 22685 }) 22686 }) 22687 .catch(function (error) { 22688 // TODO Bugsnag 22689 }); 22690 } 22691})(); 22692; 22693(function () { 22694 'use strict'; 22695 22696 angular 22697 .module('app.directives') 22698 .directive('playerAllTimeStatistics', playerAllTimeStatistics); 22699 22700 playerAllTimeStatistics.$inject = []; 22701 22702 function playerAllTimeStatistics() { 22703 return { 22704 restrict: 'E', 22705 scope: { 22706 widget: '=' 22707 }, 22708 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/detail
22708s/all-time-statistics/player-all-time-statistics.tpl.html', 22709 controller: 'PlayerAllTimeStatisticsController', 22710 controllerAs: 'playerAllTimeStatistics' 22711 }; 22712 } 22713})();; 22714(function () { 22715 'use strict'; 22716 22717 angular 22718 .module('app.directives') 22719 .controller('PlayerGameLogController', PlayerGameLogController); 22720 22721 PlayerGameLogController.$inject = ['$scope', '$localStorage', '$translate', 'UrlService', 'StatisticService', 'PositionService', 'GameService', 'PlayerService']; 22722 22723 function PlayerGameLogController($scope, $localStorage, $translate, urlService, statisticService, positionService, gameService, playerService) { 22724 var vm = this; 22725 var statsSportConfig = { 22726 1: { 22727 2: { 22728 order: 1, 22729 stats: [6, 7, 8, 9, 11, 12, 24, 26, 27, 28, 29], 22730 sort: [29, 'desc'] 22731 }, 22732 1: { 22733 order: 2, 22734 stats: [8, 10, 13, 22, 23, 24, 30], 22735 sort: [23, 'desc'] 22736 } 22737 }, 22738 2: { 22739 9: { 22740 order: 1, 22741 stats: [66, 67, 68, 69, 70, 71, 72, 73, 77, 75, 78, 79, 80, 81, 82, 83, 86, 85], 22742 sort: [80, 'desc'] 22743 }, 22744 8: { 22745 order: 2, 22746 stats: [99, 100, 101, 91, 102, 93, 90, 96, 97, 98], 22747 sort: [100, 'desc'] 22748 }, 22749 }, 22750 6: { 22751 3: { 22752 order: 1, 22753 stats: [36, 37, 38, 39, 40, 41, 43, 44], 22754 sort: [37, 'desc'] 22755 }, 22756 4: { 22757 order: 2, 22758 stats: [46, 47, 48, 49, 50, 64], 22759 sort: [46, 'desc'] 22760 }, 22761 }, 22762 14: { 22763 16: { 22764 order: 1, 22765 stats: [53, 54, 55, 60, 61, 57, 56, 58, 59], 22766 sort: [60, 'desc'] 22767 }, 22768 17: { 22769 order: 2, 22770 stats: [53, 54, 55, 60, 61, 57, 56, 58, 59], 22771 sort: [60, 'desc'] 22772 } 22773 } 22774 } 22775 22776 vm.url = urlService; 22777 vm.position = positionService; 22778 vm.playerService = playerService; 22779 vm.sportId = $localStorage.solution.sportId; 22780 vm.options = {}; 22781 vm.playerCategory = {}; 22782 vm.isMobile = false; 22783 vm.playerGames = []; 22784 vm.statList = {}; 22785 Object.assign(vm, angular.fromJson(__player__)); 22786 22787 var gameStatistics = []; 22788 22789 var sportPlayerCategories = statsSportConfig[vm.sportId]; 22790 vm.options.seasonId = $localStorage.solution.defaultSeasonId; 22791 getPlayerGames(); 22792 22793 $scope.$watch('playerColumns', function () { 22794 buildColumns(); 22795 }); 22796 22797 vm.showStat = function (column) { 22798 if (vm.isMobile && column.visibleMobile) { 22799 return true; 22800 } else if (!vm.isMobile && column.visibleDesktop) { 22801 return true; 22802 } 22803 return false; 22804 } 22805 22806 vm.getBackgroundStyle = function (i) { 22807 let style = {}; 22808 if (i % 2 != 0) { 22809 style['background-color'] = '#f0f0f0'; 22810 vm.isPair = false; 22811 } 22812 else { 22813 style['background-color'] = '#fff'; 22814 vm.isPair = true; 22815 } 22816 return style; 22817 } 22818 22819 22820 vm.filter = function (filter) { 22821 vm.options.seasonId = filter.season; 22822 22823 getPlayerGames(); 22824 }; 22825 22826 vm.getStatisticValue = function (game, statisticId) { 22827 vm.statList = game.stats; 22828 if (game.stats.length > 0) { 22829 var playerStat = _.find(game.stats, function (statistic) { 22830 return statistic.statTypeId === statisticId; 22831 }); 22832 22833 if (playerStat) { 22834 return { value: playerStat.displayValue, class: 'text-center'}; 22835 } 22836 } 22837 return { value: '0', class: 'text-center' }; 22838 } 22839 22840 vm.sort = function (playerCategory, column) { 22841 //Reset columns sort. 22842 _.forEach(playerCategory.columns, function (_column) { 22843 if (column.stat.name !== "Date" && column.stat.name !== $translate.instant('directives.widgets.player.details.gameLog.labels.team')) { 22844 if (_column.id !== column.id) { 22845 _column.sort = ''; 22846 } 22847 } 22848 if (_column.stat.name !== column.stat.name) { 22849 _column.sort = ''; 22850 } 22851 }); 22852 22853 if (angular.isUndefined(column.sort)) { 22854 column.sort = 'desc'; 22855 } else { 22856 // Toggle sort order. 22857 column.sort = column.sort === 'desc' 22858 ? column.sort = 'asc' 22859 : column.sort = 'desc'; 22860 } 22861 22862 var games = _.filter(playerCategory.games, function (game) { 22863 return game.stats.length > 0;
22864 }); 22865 22866 if (games.length > 0) { 22867 playerCategory.games = _.orderBy(games, function (game) { 22868 switch (column.stat.name) { 22869 case "Date": 22870 return game.date; 22871 case $translate.instant('directives.widgets.player.details.gameLog.labels.team'): 22872 return game.opponentTeamName; 22873 default: 22874 var statisticValue = vm.getStatisticValue(game, column.id) 22875 return statisticValue.value; 22876 } 22877 }, [column.sort]); 22878 } 22879 }; 22880 22881 function getPlayerGames() { 22882 vm.playerGames = []; 22883 playerService.getPlayerGameLog(vm.id, vm.options.seasonId) 22884 .then(function (response) { 22885 var games = response.data; 22886 _.forEach(games, function (game) { 22887 vm.playerGames.push(game); 22888 }); 22889 buildColumns(); 22890 vm.sort(vm.playerCategory, vm.playerCategory.columns[0]); 22891 }) 22892 .catch(function (error) { 22893 bugsnag.notify(error); 22894 }); 22895 } 22896 22897 vm.getDate = function (game) { 22898 return game.date !== null ? moment(game.date).format($translate.instant('directives.widgets.player.details.gameLog.format.date')) : ''; 22899 } 22900 22901 vm.getOpponentTeam = function (game) { 22902 if (game.isLocal) { 22903 return $translate.instant('directives.widgets.player.details.gameLog.labels.opponentTeamVisitor', { teamName: game.opponentTeamName }); 22904 } 22905 else { 22906 return $translate.instant('directives.widgets.player.details.gameLog.labels.opponentTeamLocal', { teamName: game.opponentTeamName }); 22907 } 22908 } 22909 22910 function buildColumns() { 22911 var playerCategory = []; 22912 var categoryColumns = $scope.playerColumns[vm.categoryId].map(function (col) { 22913 var stat = statisticService.getPlayerStatisticByStatId(col.id); 22914 22915 return { 22916 id: col.id, 22917 visibleDesktop: col.visibleDesktop, 22918 visibleMobile: col.visibleMobile, 22919 stat: (stat || {}), 22920 } 22921 }); 22922 22923 categoryColumns.unshift({ 22924 id: '', 22925 visibleDesktop: true, 22926 visibleMobile: true, 22927 stat: { 22928 abbreviation: $translate.instant('directives.widgets.player.details.gameLog.labels.team'), 22929 name: $translate.instant('directives.widgets.player.details.gameLog.labels.team') 22930 }, 22931 }); 22932 categoryColumns.unshift({ 22933 id: '', 22934 visibleDesktop: true, 22935 visibleMobile: true, 22936 stat: { abbreviation: "Date", name: "Date" }, 22937 }); 22938 22939 var category = { 22940 columns: categoryColumns, 22941 games: vm.playerGames 22942 }; 22943 22944 vm.playerCategory = category; 22945 } 22946 } 22947})(); 22948; 22949(function () { 22950 'use strict'; 22951 22952 angular 22953 .module('app.directives') 22954 .directive('playerGameLog', playerGameLog); 22955 22956 playerGameLog.$inject = []; 22957 22958 function playerGameLog() { 22959 return { 22960 restrict: 'E', 22961 scope: { 22962 widget: '=', 22963 playerColumns: '=' 22964 }, 22965 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/details/game-log/player-game-log.tpl.html', 22966 controller: 'PlayerGameLogController', 22967 controllerAs: 'playerGameLog', 22968 link: function (scope, element, attribut, controller) { 22969 scope.$watch(function () { 22970 if (element.find('.player-game-log')[0]) { 22971 return element.find('.player-game-log')[0].clientWidth 22972 } 22973 }, function (container) { 22974 if (container <= 800) { 22975 controller.isMobile = true; 22976 } 22977 else if (container > 800) { 22978 controller.isMobile = false; 22979 } 22980 }); 22981 } 22982 }; 22983 } 22984})();; 22985(function () { 22986 'use strict'; 22987 22988 angular 22989 .module('app.directives') 22990 .controller('TeamPlayerStatisticsController', TeamPlayerStatisticsController); 22991 TeamPlayerStatisticsController.$inject = ['$scope', '$localStorage', 'UrlService', 'StatisticService', 'PositionService']; 22992 22993 function TeamPlayerStatisticsController($scope, $localStorage, urlService, statisticService, positionService) { 22994 var vm = this; 22995 vm.url = urlService; 22996 vm.category = positionService; 22997 vm.sportId = $localStorage.solution.sportId; 22998 vm.columns = [] 22999 vm.categories = {} 23000 Object.assign(vm, __team__); 23001 23002 vm.getColumns = function (catId) { 23003 let columns; 23004 var sportId = $localStorage.solution.sportId; 23005 switch (sportId) { 23006 case 1: 23007 // TODO Move default columns into service 23008 // TODO Implement columns parameters into the widget. 23009 columns = Number(catId) === 2 23010 ? statisticService.getPlayerStatisticColumnsByColumnIds([14, 6, 7, 29, 8, 26, 27, 31]) 23011 : statisticService.getPlayerStatisticColumnsByColumnIds([62, 15, 16, 17, 19, 21, 22, 32, 25, 24, 30, 8]); 23012 // TODO Initialize column sort / change hardcoded value. 23013 _.find(columns, function (column) { 23014 return Number(catId) === 2 ? column.id === 29 : column.id === 32; 23015 }).sort = 'desc'; 23016 return columns 23017 23018 case 2: 23019 // TODO Move default columns into service 23020 // TODO Implement columns parameters into the widget. 23021 switch (Number(catId)) { 23022 case 8: 23023 columns = statisticService.getPlayerStatisticColumnsByColumnIds([99, 100, 101, 91, 102, 93, 90, 96, 97, 98]); 23024 break; 23025 case 9: 23026 columns = statisticService.getPlayerStatisticColumnsByColumnIds([66, 67, 68, 69, 70, 71, 72, 73, 77, 75, 78, 79, 80, 81, 82, 83, 86, 85
23026]) 23027 break; 23028 case 21: 23029 columns = statisticService.getPlayerStatisticColumnsByColumnIds([65, 105, 107, 108]) 23030 break; 23031 } 23032 // TODO Initialize column sort / change hardcoded value. 23033 _.find(columns, function (column) { 23034 switch (Number(catId)) { 23035 case 8: 23036 column.id === 100; 23037 break; 23038 case 9: 23039 column.id === 81; 23040 break; 23041 case 21: 23042 column.id === 65; 23043 break; 23044 } 23045 return column; 23046 }).sort = 'desc'; 23047 return columns; 23048 23049 case 4: 23050 // TODO Move default columns into service 23051 // TODO Implement columns parameters into the widget. 23052 columns = statisticService.getPlayerStatisticColumnsBySportId(sportId, Number(catId)) 23053 23054 // TODO Initialize column sort / change hardcoded value. 23055 _.find(columns, function (column) { 23056 return 60; 23057 }).sort = 'desc'; 23058 23059 return columns 23060 23061 case 6: 23062 // TODO Move default columns into service 23063 // TODO Implement columns parameters into the widget. 23064 columns = statisticService.getPlayerStatisticColumnsBySportId(sportId, Number(catId)) 23065 23066 // TODO Initialize column sort / change hardcoded value. 23067 _.find(columns, function (column) { 23068 return Number(catId) === 3 ? column.id === 37 : column.id === 46; 23069 }).sort = 'desc'; 23070 return columns 23071 23072 case 14: 23073 // TODO Move default columns into service 23074 // TODO Implement columns parameters into the widget. 23075 columns = statisticService.getPlayerStatisticColumnsBySportId(sportId, Number(catId)) 23076 23077 // TODO Initialize column sort / change hardcoded value. 23078 _.find(columns, function (column) { 23079 return 60; 23080 }).sort = 'desc'; 23081 23082 return columns 23083 } 23084 } 23085 23086 // TODO Move into service 23087 vm.getStatisticValue = function (player, statisticId) { 23088 if (player.Stats.length > 0) { 23089 var playerStat = _.find(player.Stats, function (statistic) { 23090 return statistic.StatTypeId === statisticId; 23091 }); 23092 23093 if (playerStat) { 23094 return playerStat.DisplayValue; 23095 } 23096 } 23097 return '0'; 23098 }; 23099 23100 statisticService.getTeamPlayerStatisticsByTeamId(__solutionId__, vm.id) 23101 .then(function (response) { 23102 //Filtering by categoryId 23103 let categories = _.groupBy(response.data, function (res) { 23104 return res.CategoryId 23105 }) 23106 _.forEach(categories, function (data, catId) { 23107 let tempTotal = _.filter(data, function (item) { 23108 return item.SeasonName === null; 23109 }) 23110 let tempData = _.filter(data, function (item) { 23111 return item.SeasonName !== null; 23112 }) 23113 let tempSeasonType = _.groupBy(data, function (item) { 23114 return item.SeasonType 23115 }) 23116 vm.categories[catId] = { data: tempData, columns: vm.getColumns(catId), totals: tempTotal, seasonsType: tempSeasonType } 23117 }) 23118 vm.hasData = !_.isEmpty(vm.categories); 23119 }) 23120 23121 .then(function () { 23122 _.forEach(vm.categories, function (position) { 23123 _.forEach(position.columns, function (col) { 23124 vm.columns.push(col) 23125 }) 23126 }) 23127 }) 23128 .catch(function (error) { 23129 // TODO Bugsnag 23130 }); 23131 } 23132})(); 23133; 23134(function () { 23135 'use strict'; 23136 23137 angular 23138 .module('app.directives') 23139 .directive('teamPlayerStatistics', teamPlayerStatistics); 23140 23141 teamPlayerStatistics.$inject = []; 23142 23143 function teamPlayerStatistics() { 23144 return { 23145 restrict: 'E', 23146 scope: { 23147 widget: '=' 23148 }, 23149 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/detail
23149s/team-statistics/team-statistics.tpl.html', 23150 controller: 'TeamPlayerStatisticsController', 23151 controllerAs: 'teamPlayerStatistics' 23152 }; 23153 } 23154})();; 23155(function () { 23156 'use strict'; 23157 23158 angular 23159 .module('app.directives') 23160 .controller('PlayerStatisticsController', PlayerStatisticsController); 23161 23162 PlayerStatisticsController.$inject = ['$scope', 'StatisticService']; 23163 23164 function PlayerStatisticsController($scope, statisticService) { 23165 var vm = this; 23166 23167 /*vm.datatable = { 23168 columns: [ 23169 { id: } 23170 ] 23171 };*/ 23172 //playerStatistics 23173 vm.columns = statisticService.getPlayerStatisticColumnsByColumnIds([14, 6, 7, 29, 8, 26, 27, 31]); 23174 } 23175})(); 23176; 23177(function () { 23178 'use strict'; 23179 23180 angular 23181 .module('app.directives') 23182 .directive('playerStatistics', playerStatistics); 23183 23184 playerStatistics.$inject = []; 23185 23186 function playerStatistics() { 23187 return { 23188 restrict: 'E', 23189 scope: { 23190 widget: '=' 23191 }, 23192 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/details/statistics/player-statistics.tpl.html', 23193 controller: 'PlayerStatisticsController', 23194 controllerAs: 'playerStatistics' 23195 }; 23196 } 23197})();; 23198(function () { 23199 'use strict'; 23200 23201 angular 23202 .module('app.directives') 23203 .controller('PlayerListWidgetController', PlayerListWidgetController); 23204 23205 PlayerListWidgetController.$inject = ['$rootScope', '$timeout', '$localStorage', '$scope', '$translate', '$window', 'WebsiteEditorService', 'UrlService', 'PlayerService', 'PositionService']; 23206 23207 function PlayerListWidgetController($rootScope, $timeout, $localStorage, $scope, $translate, $window, websiteEditorService, urlService, playerService, positionService) { 23208 var vm = this; 23209 var searchText; 23210 var sportId = $localStorage.solution.sportId; 23211 23212 //State variables 23213 vm.widget = angular.fromJson(widgets[$scope.widget]); 23214 vm.url = urlService; 23215 vm.position = positionService; 23216 vm.columns = []; 23217 23218 vm.currentPage = 1; 23219 vm.pageSize = 12; 23220 vm.defaultListEmpty = false; 23221 vm.totalCount = 0; 23222 vm.results = []; 23223 23224 vm.positions = [{ Id: 'all', Name: $translate.instant('directives.widgets.player.list.labels.allPositions') }].concat(positionService.getPositions(sportId).map(function (pos) { 23225 return { 23226 Id: pos.id, 23227 Name: pos.text 23228 } 23229 })); 23230 23231 vm.statuses = [ 23232 { Id: 'active', Name: $translate.instant('directives.widgets.player.list.status.active') }, 23233 { Id: 'all', Name: $translate.instant('directives.widgets.player.list.labels.allStatuses') } 23234 ] 23235 23236 vm.selectedPosition = 'all'; 23237 vm.selectedStatus = 'active'; 23238 23239 //State functions 23240 vm.search = function (text) { 23241 searchText = text; 23242 getPlayers(); 23243 }; 23244 23245 vm.getAge = function (birthday) { 23246 return birthday !== null ? moment().diff(birthday, 'years') : ''; 23247 }; 23248 23249 vm.getBirthday = function (birthday) { 23250 return birthday !== null ? moment(birthday).format($translate.instant('directives.widgets.player.list.format.birthday')) : ''; 23251 } 23252 23253 vm.getStatus = playerService.getStatus; 23254 23255 vm.showStat = function (column) { 23256 if (isMobile() && column.visibleMobile) { 23257 return true; 23258 } else if (!isMobile() && column.visibleDesktop) { 23259 return true; 23260 } 23261 return false; 23262 } 23263 23264 vm.selectPosition = function (item) { 23265 vm.currentPage = 1; 23266 vm.selectedPosition = item.Id; 23267 getPlayers(); 23268 }; 23269 23270 vm.selectStatus = function (item) { 23271 vm.currentPage = 1; 23272 vm.selectedStatus = item.Id; 23273 getPlayers(); 23274 } 23275 23276 vm.clickPrevious = function () { 23277 vm.currentPage -= 1;
23278 getPlayers(); 23279 } 23280 23281 vm.clickNext = function () { 23282 vm.currentPage += 1; 23283 getPlayers(); 23284 } 23285 23286 vm.clickPage = function (page) { 23287 vm.currentPage = page; 23288 getPlayers(); 23289 } 23290 23291 //Component mount. 23292 for (var parameter in vm.widget.parameters) { 23293 switch (vm.widget.parameters[parameter].id) { 23294 case 'columnsDisplaySelect': 23295 var columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 23296 buildColumns(columnsDisplaySelect); 23297 break; 23298 case 'nbPlayersDisplayed': 23299 vm.pageSize = vm.widget.parameters[parameter].value; 23300 break; 23301 case 'defaultListEmpty': 23302 vm.initialDefaultListEmpty = vm.widget.parameters[parameter].value === 'true'; 23303 vm.defaultListEmpty = vm.widget.parameters[parameter].value === 'true'; 23304 break; 23305 } 23306 } 23307 23308 getPlayers(); 23309 23310 // Listener 23311 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 23312 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 23313 .then(function () { 23314 for (var parameter in vm.widget.parameters) { 23315 switch (vm.widget.parameters[parameter].id) { 23316 case 'columnsDisplaySelect': 23317 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 23318 var columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 23319 buildColumns(columnsDisplaySelect); 23320 break; 23321 case 'nbPlayersDisplayed': 23322 vm.widget.parameters[parameter].value = data.nbPlayersDisplayed; 23323 vm.pageSize = data.nbPlayersDisplayed; 23324 break; 23325 case 'defaultListEmpty': 23326 vm.widget.parameters[parameter].value = data.defaultListEmpty.toString(); 23327 vm.defaultListEmpty = data.defaultListEmpty; 23328 vm.initialDefaultListEmpty = data.defaultListEmpty; 23329 break; 23330 } 23331 } 23332 widgets[$scope.widget] = angular.toJson(vm.widget); 23333 getPlayers(); 23334 }) 23335 .catch(function (error) { 23336 bugsnag.notify(error); 23337 }); 23338 }); 23339 23340 $scope.$on('$destroy', listener); 23341 23342 //Functions 23343 function buildColumns(columnsToDisplay) { 23344 vm.columns = []; 23345 columnsToDisplay.forEach(function (col) { 23346 var stat = playerService.getPlayerColumn(col.id); 23347 vm.columns.push({ 23348 id: col.id, 23349 visibleDesktop: col.visibleDesktop, 23350 visibleMobile: col.visibleMobile, 23351 name: stat.name 23352 }); 23353 }); 23354 } 23355 23356 function getPlayers() { 23357 if (vm.selectedPosition === 'all' && !searchText && vm.initialDefaultListEmpty) { 23358 $timeout(function () { 23359 vm.defaultListEmpty = true; 23360 }); 23361 } else { 23362 var options = { 23363 page: vm.currentPage, 23364 pageSize: vm.pageSize 23365 }; 23366 23367 if (angular.isDefined(searchText)) { 23368 options.search = searchText; // TODO standardise Team search parameter «searchText» 23369 } 23370 23371 if (angular.isDefined(vm.selectedPosition)) { 23372 options.positionId = vm.selectedPosition; 23373 } 23374 23375 if (angular.isDefined(vm.selectedStatus) && vm.selectedStatus != "active") { 23376 options.status = vm.selectedStatus; 23377 } 23378 23379 playerService.getPlayersBySolutionId(__solutionId__, options) 23380 .then(function (response) { 23381 vm.results = response.data.Results; 23382 vm.totalCount = response.data.TotalCount; 23383 vm.defaultListEmpty = false; 23384 }) 23385 .catch(function (error) { 23386 bugsnag.notify(error); 23387 vm.defaultListEmpty = false; 23388 }); 23389 } 23390 } 23391 23392 function isMobile() { 23393 return $window.innerWidth <= 600; 23394 } 23395 } 23396})(); 23397; 23398(function () { 23399 'use strict'; 23400 23401 angular 23402 .module('app.directives') 23403 .directive('playerList', playerList); 23404 23405 playerList.$inject = []; 23406 23407 function playerList() { 23408 return { 23409 restrict: 'E', 23410 scope: { 23411 widget: '=' 23412 }, 23413 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/list/player-list.tpl.html', 23414 controller: 'PlayerListWidgetController', 23415 controllerAs: 'playerList' 23416 }; 23417 } 23418})();; 23419(function () { 23420 'use strict'; 23421 23422 angular 23423 .module('app.directives') 23424 .controller('PlayerPageWidgetController', PlayerPageWidgetController); 23425 23426 PlayerPageWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 23427 23428 function PlayerPageWidgetController($rootScope, $scope, websiteEditorService) { 23429 var vm = this; 23430 23431 // Apply website values to view model object. 23432 vm.widget = angular.fromJson(widgets[$scope.widget]); 23433 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="950"></iframe>`; 23434 } 23435})(); 23436; 23437(function () { 23438 'use strict'; 23439 23440 angular 23441 .module('app.directives') 23442 .directive('playerPage', playerPage); 23443 23444 playerPage.$inject = []; 23445 23446 function playerPage() { 23447 return { 23448 restrict: 'E', 23449 scope: { 23450 widget: '=' 23451 }, 23452 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/page/player-page.tpl.html', 23453 controller: 'PlayerPageWidgetController', 23454 controllerAs: 'playerPage' 23455 }; 23456 } 23457})();; 23458(function () { 23459 'use strict'; 23460 23461 angular 23462 .module('app.directives') 23463 .controller('GameResultsController', GameResultsController); 23464 23465 GameResultsController.$inject = ['$scope', '$translate', '$filter', 'UrlService']; 23466 23467 function GameResultsController($scope, $translate, $filter, urlService) { 23468 var vm = this; 23469 23470 //State variables 23471 Object.assign(vm, $scope.game); 23472 vm.url = urlService; 23473 23474 vm.messageTypes = { 23475 1: { class: 'important-note' }, 23476 2: { class: 'warning-note' }, 23477 3: { class: 'message-note' }, 23478 } 23479 23480 vm.firstDivision = undefined; 23481 vm.firstDivisionId = undefined; 23482 vm.firstResult = undefined; 23483 vm.firstTeamAvatar = undefined; 23484 vm.firstTeamId = undefined; 23485 vm.firstTeamName = undefined; 23486 23487 vm.secondDivision = undefined; 23488 vm.secondDivisionId = undefined; 23489 vm.secondResult = undefined; 23490 vm.secondTeamAvatar = undefined; 23491 vm.secondTeamId = undefined; 23492 vm.secondTeamName = undefined; 23493 23494 vm.getStatusGame = function () { 23495 var gameStatus = ''; 23496 switch (vm.SportId) { 23497 case 2: 23498 if (vm.Properties) { 23499 var gameStatusProperty = _.find(vm.Properties, { name: 'GameStatus' }); 23500 if (gameStatusProperty) { 23501 var gameStatusProperties = _.split(gameStatusProperty.value, '-'); 23502 if (gameStatusProperties) { 23503 gameStatus = $translate.instant('directives.widgets.scores.labels.' + gameStatusProperties[0]) + ' ' + $filter('ordinal')(gameStatusProperties[1], true) + ' - ' + gameStatusProperties[2] + $translate.instant('directives.widgets.scores.labels.out'); 23504 } 23505 } 23506 } 23507 break; 23508 default: 23509 { 23510 gameStatus = $filter('ordinal')(vm.PeriodId, true) + ' - ' + vm.getFormatTime(); 23511 } 23512 } 23513 return gameStatus; 23514 } 23515 23516 //State functions 23517 vm.getFormatTime = function () { 23518 switch (vm.StatusId) { 23519 case 3: 23520 case 1: 23521 return moment(vm.StartTime, 'hh:mm').format('LT'); 23522 23523 case 2: 23524 return moment(vm.Time, 'hh:mm:ss').format('LTS').substr(3, 5); 23525 } 23526 }; 23527 23528 vm.teamSummary = function (teamId, statistics) { 23529 var summary = ''; 23530 23531 _.forEach(statistics, function (statistic) { 23532 if (statistic.TeamId === teamId && statistic.StatTypeId === 6) { // 6 = Goal 23533 if (summary.length === 0) { 23534 summary = `${statistic.FirstName.charAt(0)}. ${statistic.LastName} (${statistic.Value})`; 23535 } else { 23536 summary += `, ${statistic.FirstName.charAt(0)}. ${statistic.LastName} (${statistic.Value})`; 23537 } 23538 } 23539 }); 23540 23541 return summary; 23542 }; 23543 23544 //On component mount 23545 setLocalAndVisitorPosition(); 23546 $scope.$watch('visitorBottom', function () { 23547 setLocalAndVisitorPosition(); 23548 }) 23549 23550 function setLocalAndVisitorPosition() { 23551 if ($scope.visitorBottom) { 23552 vm.firstDivision = vm.LocalDivision; 23553 vm.firstDivisionId = vm.LocalDivisionId; 23554 vm.firstResult = vm.LocalResult; 23555 vm.firstTeamAvatar = vm.LocalTeamAvatar; 23556 vm.firstTeamId = vm.LocalTeamId; 23557 vm.firstTeamName = vm.LocalTeamName; 23558 23559 vm.secondDivision = vm.VisitorDivision; 23560 vm.secondDivisionId = vm.VisitorDivisionId; 23561 vm.secondResult = vm.VisitorResult; 23562 vm.secondTeamAvatar = vm.VisitorTeamAvatar; 23563 vm.secondTeamId = vm.VisitorTeamId; 23564 vm.secondTeamName = vm.VisitorTeamName; 23565 } else { 23566 vm.firstDivision = vm.VisitorDivision; 23567 vm.firstDivisionId = vm.VisitorDivisionId; 23568 vm.firstResult = vm.VisitorResult; 23569 vm.firstTeamAvatar = vm.VisitorTeamAvatar; 23570 vm.firstTeamId = vm.VisitorTeamId; 23571 vm.firstTeamName = vm.VisitorTeamName; 23572 23573 vm.secondDivision = vm.LocalDivision; 23574 vm.secondDivisionId = vm.LocalDivisionId; 23575 vm.secondResult = vm.LocalResult; 23576 vm.secondTeamAvatar = vm.LocalTeamAvatar; 23577 vm.secondTeamId = vm.LocalTeamId; 23578 vm.secondTeamName = vm.LocalTeamName; 23579 } 23580 } 23581 } 23582})(); 23583; 23584(function () { 23585 'use strict'; 23586 23587 angular 23588 .module('app.directives') 23589 .directive('gameResults', gameResults); 23590 23591 gameResults.$inject = []; 23592 23593 function gameResults() { 23594 return { 23595 restrict: 'E', 23596 scope: { 23597 game: '=', 23598 visitorBottom: '=' 23599 }, 23600 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/result/list/game/game-results.tpl.html', 23601 controller: 'GameResultsController', 23602 controllerAs: 'gameResults' 23603 }; 23604 } 23605})();; 23606(function () { 23607 'use strict'; 23608 23609 angular 23610 .module('app.directives') 23611 .controller('ResultListWidgetController', ResultListWidgetController); 23612 23613 ResultListWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService', 'GameService']; 23614 23615 function ResultListWidgetController($rootScope, $scope, websiteEditorService, gameService) { 23616 var vm = this; 23617 23618 //Local variables 23619 var games; 23620 var currentPageIndex = 1; 23621 const pageSize = 12; // TODO Parameter? Page length 23622 var selectedSeason = null; 23623 var selectedDivision = null; 23624 var selectedFacility = null; 23625 var selectedTeam = null; 23626 23627 //State variables 23628 vm.view; 23629 vm.dateRange; 23630 vm.games = []; 23631 vm.widget = angular.fromJson(widgets[$scope.widget]); 23632 vm.defaultView = 'week'; 23633 vm.visitorBottom = false; 23634 23635 //State functions 23636 vm.viewToday = function (dateRange) { 23637 vm.dateRange = dateRange; 23638 var options = { 23639 startDate: moment(dateRange.startDate).format('YYYY-MM-DD HH:mm:ss'), 23640 endDate: moment(dateRange.endDate).format('YYYY-MM-DD HH:mm:ss') 23641 }; 23642 currentPageIndex = 1; 23643 getGames(selectedSeason, options); 23644 }; 23645 23646 vm.viewChange = function (view, dateRange) { 23647 var options = {}; 23648 vm.view = view; 23649 vm.dateRange = dateRange; 23650 if (dateRange !== null) { 23651 options = { 23652 startDate: moment(dateRange.startDate).format('YYYY-MM-DD HH:mm:ss'), 23653 endDate: moment(dateRange.endDate).format('YYYY-MM-DD HH:mm:ss') 23654 }; 23655 } 23656 currentPageIndex = 1; 23657 getGames(selectedSeason, options); 23658 }; 23659 23660 vm.loadMoreGames = function () { 23661 currentPageIndex += 1;
23662 vm.gamesDisplayed = vm.games.slice(0, currentPageIndex * pageSize); 23663 }; 23664 23665 vm.filter = function (filter) { 23666 currentPageIndex = 1; 23667 23668 selectedDivision = filter.division; 23669 selectedTeam = filter.team; 23670 selectedFacility = filter.facility; 23671 23672 if (filter.season !== selectedSeason) { 23673 selectedSeason = filter.season; 23674 var options = {}; 23675 if (vm.dateRange !== null) { 23676 options = { 23677 startDate: moment(vm.dateRange.startDate).format('YYYY-MM-DD HH:mm:ss'), 23678 endDate: moment(vm.dateRange.endDate).format('YYYY-MM-DD HH:mm:ss') 23679 }; 23680 } 23681 getGames(selectedSeason, options); 23682 } else { 23683 filterLocally(); 23684 } 23685 }; 23686 23687 //On component mount 23688 for (var parameter in vm.widget.parameters) { 23689 switch (vm.widget.parameters[parameter].id) { 23690 case 'defaultView': 23691 vm.defaultView = vm.widget.parameters[parameter].value; 23692 break; 23693 case 'visitorBottom': 23694 vm.visitorBottom = (vm.widget.parameters[parameter].value === 'true'); 23695 break; 23696 } 23697 } 23698 23699 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 23700 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 23701 .then(function (response) { 23702 for (var parameter in vm.widget.parameters) { 23703 switch (vm.widget.parameters[parameter].id) { 23704 case 'defaultView': 23705 vm.widget.parameters[parameter].value = data.defaultView; 23706 vm.defaultView = data.defaultView; 23707 break; 23708 case 'visitorBottom': 23709 vm.widget.parameters[parameter].value = data.visitorBottom.toString(); 23710 vm.visitorBottom = data.visitorBottom; 23711 break; 23712 } 23713 } 23714 currentPageIndex = 1; 23715 filterLocally(); 23716 widgets[$scope.widget] = angular.toJson(vm.widget); 23717 }) 23718 .catch(function (error) { 23719 bugsnag.notify(error); 23720 }); 23721 }); 23722 23723 $scope.$on('$destroy', listener); 23724 23725 // API calls 23726 function getGames(seasonId, options) { 23727 if (seasonId) { 23728 gameService.getGamesBySeasonId(__solutionId__, seasonId, options) 23729 .then(function (response) { 23730 games = response.data.Results; 23731 vm.games = response.data.Results; 23732 filterLocally(); 23733 }) 23734 .catch(function (error) { 23735 bugsnag.notify(error); 23736 }); 23737 } 23738 } 23739 23740 // Helper functions 23741 function filterLocally() { 23742 vm.games = []; 23743 _.forEach(games, function (game) { 23744 if (selectedDivision === 'general' || selectedDivision === 'divisions' || game.LocalDivisionId == selectedDivision || game.VisitorDivisionId == selectedDivision) { 23745 if (selectedFacility === 'all' || game.SportCenterId == selectedFacility) { 23746 if (selectedTeam === 'all' || game.LocalTeamId == selectedTeam || game.VisitorTeamId == selectedTeam) { 23747 vm.games.push(game); 23748 } 23749 } 23750 } 23751 }); 23752 vm.gamesDisplayed = vm.games.length > pageSize 23753 ? vm.games.slice(0, currentPageIndex * pageSize) 23754 : vm.games; 23755 } 23756 } 23757})(); 23758; 23759(function () { 23760 'use strict'; 23761 23762 angular 23763 .module('app.directives') 23764 .directive('resultList', resultList); 23765 23766 resultList.$inject = ['$window']; 23767 23768 function resultList($window) { 23769 return { 23770 restrict: 'E', 23771 scope: { 23772 widget: '=' 23773 }, 23774 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/result/list/result-list.tpl.html', 23775 controller: 'ResultListWidgetController', 23776 controllerAs: 'resultList' 23777 }; 23778 } 23779})();; 23780(function () { 23781 'use strict'; 23782 23783 angular 23784 .module('app.directives') 23785 .controller('ScheduleActionsWidgetController', ScheduleActionsWidgetController); 23786 23787 ScheduleActionsWidgetController.$inject = ['$scope']; 23788 23789 function ScheduleActionsWidgetController($scope) { 23790 var vm = this; 23791 /*vm.views = ['day', '3days', 'week', 'month', 'season']; 23792 vm.selected = 'week'; // TODO Get a value from parameter / local or session storage. 23793 23794 vm.today = function() { 23795 if (typeof $scope.today == 'function') { 23796 $scope.today(); 23797 } 23798 }; 23799 23800 vm.change = function(view) { 23801 if (vm.selected !== view) { 23802 vm.selected = view; 23803 23804 if (typeof $scope.change == 'function') { 23805 $scope.change({ view: vm.selected }); 23806 } 23807 } 23808 };*/ 23809 } 23810})(); 23811; 23812(function () { 23813 'use strict'; 23814 23815 angular 23816 .module('app.directives') 23817 .directive('scheduleActions', scheduleActions); 23818 23819 scheduleActions.$inject = []; 23820 23821 function scheduleActions() { 23822 return { 23823 restrict: 'E', 23824 scope: { 23825 23826 }, 23827 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/actions/schedule-actions.tpl.html', 23828 controller: 'ScheduleActionsWidgetController', 23829 controllerAs: 'scheduleActions' 23830 }; 23831 } 23832})();; 23833(function () { 23834 'use strict'; 23835 23836 angular 23837 .module('app.directives') 23838 .controller('ScheduleFiltersWidgetController', ScheduleFiltersWidgetController); 23839 23840 ScheduleFiltersWidgetController.$inject = ['$scope', '$localStorage', 'SeasonService', 'DivisionService', 'TeamService', 'FacilityService']; 23841 23842 function ScheduleFiltersWidgetController($scope, $localStorage, seasonService, divisionService, teamService, facilityService) { 23843 var vm = this; 23844 var teams; 23845 var defaultSeasonId = $localStorage.solution.defaultSeasonId; 23846 vm.seasons = []; 23847 vm.seasonSelected = undefined; 23848 vm.divisions = []; 23849 vm.divisionSelected = undefined; 23850 vm.teams = []; 23851 vm.teamSelected = undefined; 23852 vm.facilities = []; 23853 vm.facilitySelected = undefined; 23854 23855 // Get seasons from the current solution. 23856 seasonService.getSeasonsBySolutionId(__solutionId__) 23857 .then(function(response) { 23858 // Transform data before adding to dropdown. 23859 response.data.forEach(function(season) { 23860 if (defaultSeasonId === season.Id) { 23861 vm.seasonSelected = season.Id; 23862 vm.seasons.unshift(season); 23863 } else { 23864 vm.seasons.push(season); 23865 } 23866 }); 23867 }) 23868 .catch(function(error) { 23869 bugsnag.notify(error); 23870 }); 23871 23872 // Get divisions from the current season. 23873 divisionService.getDivisionsBySeasonId(__solutionId__, defaultSeasonId) 23874 .then(function(response) { 23875 response.data.forEach(function(division) { 23876 // Display the parent level only. 23877 if (angular.isUndefinedOrNull(division.ParentId)) { 23878 vm.divisions.push(division); 23879 } 23880 }); 23881 }) 23882 .catch(function(error) { 23883 bugsnag.notify(error); 23884 }); 23885 23886 // Get active teams from the current solution. 23887 teamService.getTeamsBySolutionId(__solutionId__) 23888 .then(function(response) { 23889 // Transform data before adding to dropdown.
23890 response.data.results.forEach(function(team) { 23891 vm.teams.push({ 23892 Id: team.id, 23893 Name: team.fullName, 23894 division: { 23895 id: team.divisionId, 23896 name: team.division 23897 } 23898 }); 23899 }); 23900 23901 teams = vm.teams; // Keep local backup of data. 23902 23903 if (angular.isDefined($scope.team)) { 23904 vm.teamSelected = $scope.team.id; 23905 23906 if (typeof $scope.teamChange == 'function') { 23907 $scope.teamChange({ teamId: $scope.team.id }); 23908 } 23909 } 23910 }) 23911 .catch(function(error) { 23912 bugsnag.notify(error); 23913 }); 23914 23915 // Get facilities from the current solution. 23916 facilityService.getFacilitiesBySolutionId(__solutionId__) 23917 .then(function (response) { 23918 vm.facilities = response.data; 23919 }) 23920 .catch(function(error) { 23921 bugsnag.notify(error); 23922 }); 23923 23924 vm.seasonChange = function(item) { 23925 vm.seasonSelected = item.Id; 23926 if (typeof $scope.seasonChange == 'function') { 23927 $scope.seasonChange({ seasonId: item.Id }); 23928 } 23929 }; 23930 23931 vm.divisionChange = function(division) { 23932 vm.divisionSelected = division.Id; 23933 23934 // Filter the teams displayed from teams list backup. 23935 vm.teams = _.filter(teams, function(team) { 23936 return team.division.id === division.Id 23937 }); 23938 23939 // Raise the division id to filter the schedule. 23940 if (typeof $scope.divisionChange == 'function') { 23941 $scope.divisionChange({ divisionId: division.Id }); 23942 } 23943 }; 23944 23945 vm.teamChange = function(item) { 23946 vm.teamSelected = item.Id; 23947 if (typeof $scope.teamChange == 'function') { 23948 $scope.teamChange({ teamId: item.Id }); 23949 } 23950 }; 23951 23952 vm.facilityChange = function(item) { 23953 vm.facilitySelected = item.Id; 23954 if (typeof $scope.facilityChange == 'function') { 23955 $scope.facilityChange({ facilityId: item.Id }); 23956 } 23957 }; 23958 } 23959})(); 23960; 23961(function () { 23962 'use strict'; 23963 23964 angular 23965 .module('app.directives') 23966 .directive('scheduleFilters', scheduleFilters); 23967 23968 scheduleFilters.$inject = []; 23969 23970 function scheduleFilters() { 23971 return { 23972 restrict: 'E', 23973 scope: { 23974 team: '=', 23975 seasonChange: '&', 23976 divisionChange: '&', 23977 teamChange: '&', 23978 facilityChange: '&' 23979 }, 23980 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/filters/schedule-filters.tpl.html', 23981 controller: 'ScheduleFiltersWidgetController', 23982 controllerAs: 'scheduleFilters' 23983 }; 23984 } 23985})();; 23986(function () { 23987 'use strict'; 23988 23989 angular 23990 .module('app.directives') 23991 .controller('ScheduleGameWidgetController', ScheduleGameWidgetController); 23992 23993 ScheduleGameWidgetController.$inject = ['$scope', '$translate', '$filter', 'UrlService', 'GoogleMapService']; 23994 23995 function ScheduleGameWidgetController($scope, $translate, $filter, urlService, googleMapService) { 23996 var vm = this; 23997 23998 //State variables 23999 Object.assign(vm, $scope.game); 24000 vm.solutionId = __solutionId__; 24001 vm.url = urlService; 24002 vm.messageTypes = { 24003 1: { class: 'important-note' }, 24004 2: { class: 'warning-note' }, 24005 3: { class: 'message-note' }, 24006 } 24007 24008 vm.firstDivision = undefined; 24009 vm.firstDivisionId = undefined; 24010 vm.firstResult = undefined; 24011 vm.firstTeamAvatar = undefined; 24012 vm.firstTeamId = undefined; 24013 vm.firstTeamName = undefined; 24014 24015 vm.secondDivision = undefined; 24016 vm.secondDivisionId = undefined; 24017 vm.secondResult = undefined; 24018 vm.secondTeamAvatar = undefined; 24019 vm.secondTeamId = undefined; 24020 vm.secondTeamName = undefined; 24021 24022 vm.gameType = _.get(_.find(vm.Properties, { name: 'GameType' }), 'value'); 24023 24024 vm.clickFacility = function () { 24025 if ($scope.facility && $scope.facility.facilityAddress) { 24026 var url = googleMapService.getMapSearchUrl($scope.facility.facilityAddress); 24027 window.open(url, "_blank"); 24028 } 24029 } 24030 24031 vm.getStatusGame = function () { 24032 var gameStatus = ''; 24033 switch (vm.SportId) { 24034 // Baseball 24035 case 2: 24036 if (vm.Properties) { 24037 var gameStatusProperty = _.find(vm.Properties, { name: 'GameStatus' }); 24038 if (gameStatusProperty) { 24039 var gameStatusProperties = _.split(gameStatusProperty.value, '-'); 24040 24041 if (gameStatusProperties) { 24042 switch (vm.StatusId) { 24043 case 2: 24044 gameStatus = $translate.instant('directives.widgets.scores.labels.' + gameStatusProperties[0]) + ' ' + $filter('ordinal')(gameStatusProperties[1], true) + ' - ' + gameStatusProperties[2] + $translate.instant('directives.widgets.scores.labels.out'); 24045 break; 24046 case 3: 24047 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 24048 gameStatus = gameStatus + ' ' + gameStatusProperties[1]; 24049 break; 24050 } 24051 } 24052 } 24053 } 24054 break; 24055 default: 24056 { 24057 switch (vm.StatusId) { 24058 case 2: 24059 gameStatus = $filter('ordinal')(vm.PeriodId, true); 24060 if (vm.IsUseTime) { 24061 gameStatus += ' - ' + vm.getFormatTime(vm); 24062 } 24063 break; 24064 case 3: 24065 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 24066 if (vm.PeriodId > 4) { 24067 gameStatus += ' / '; 24068 } 24069 if (vm.PeriodId >= 5 && vm.PeriodId <= 8) { 24070 gameStatus += $translate.instant('directives.widgets.scores.labels.overtime'); 24071 } 24072 if (vm.PeriodId == 9) { 24073 gameStatus += $translate.instant('directives.widgets.scores.labels.shootout'); 24074 } 24075 break; 24076 } 24077 } 24078 } 24079 return gameStatus; 24080 } 24081 24082 //State functions 24083 vm.getFormatTime = function(score) { 24084 switch (score.StatusId) { 24085 case 3: 24086 case 1: 24087 return moment(score.StartTime, 'hh:mm').format('LT'); 24088 24089 case 2: 24090 return moment(score.Time, 'hh:mm:ss').format('LTS').substr(3, 5); 24091 } 24092 }; 24093 24094 24095 vm.getFormatStartTime = function(startTime) { 24096 return moment(startTime, 'hh:mm').format('LT'); 24097 }; 24098 24099 //On component mount 24100 setLocalAndVisitorPosition(); 24101 $scope.$watch('visitorRight', function() { 24102 setLocalAndVisitorPosition(); 24103 }) 24104 24105 function setLocalAndVisitorPosition() { 24106 if ($scope.visitorRight) { 24107 vm.firstDivision = vm.LocalDivision; 24108 vm.firstDivisionId = vm.LocalDivisionId; 24109 vm.firstResult = vm.LocalResult; 24110 vm.firstTeamAvatar = vm.LocalTeamId ? vm.LocalTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 24111 vm.firstTeamId = vm.LocalTeamId; 24112 vm.firstTeamName = vm.LocalTeamName; 24113 24114 vm.secondDivision = vm.VisitorDivision; 24115 vm.secondDivisionId = vm.VisitorDivisionId; 24116 vm.secondResult = vm.VisitorResult; 24117 vm.secondTeamAvatar = vm.VisitorTeamId ? vm.VisitorTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 24118 vm.secondTeamId = vm.VisitorTeamId; 24119 vm.secondTeamName = vm.VisitorTeamName; 24120 } else { 24121 vm.firstDivision = vm.VisitorDivision; 24122 vm.firstDivisionId = vm.VisitorDivisionId; 24123 vm.firstResult = vm.VisitorResult; 24124 vm.firstTeamAvatar = vm.VisitorTeamId ? vm.VisitorTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 24125 vm.firstTeamId = vm.VisitorTeamId; 24126 vm.firstTeamName = vm.VisitorTeamName; 24127 24128 vm.secondDivision = vm.LocalDivision; 24129 vm.secondDivisionId = vm.LocalDivisionId; 24130 vm.secondResult = vm.LocalResult; 24131 vm.secondTeamAvatar = vm.LocalTeamId ? vm.LocalTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 24132 vm.secondTeamId = vm.LocalTeamId; 24133 vm.secondTeamName = vm.LocalTeamName; 24134 } 24135 } 24136 } 24137})(); 24138; 24139(function () { 24140 'use strict'; 24141 24142 angular 24143 .module('app.directives') 24144 .directive('scheduleGame', scheduleGame); 24145 24146 scheduleGame.$inject = []; 24147 24148 function scheduleGame() { 24149 return { 24150 restrict: 'E', 24151 scope: { 24152 game: '=', 24153 visitorRight: '=', 24154 showFollow: '=', 24155 facility: '=' 24156 }, 24157 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/game/schedule-game.tpl.html', 24158 controller: 'ScheduleGameWidgetController', 24159 controllerAs: 'scheduleGame' 24160 }; 24161 } 24162})();; 24163(function () { 24164 'use strict'; 24165 24166 angular 24167 .module('app.directives') 24168 .controller('ScheduleEventWidgetController', ScheduleEventWidgetController); 24169 24170 ScheduleEventWidgetController.$inject = ['$scope', 'UrlService']; 24171 24172 function ScheduleEventWidgetController($scope, urlService) { 24173 var vm = this; 24174 24175 //State variables 24176 Object.assign(vm, $scope.event); 24177 vm.solutionId = __solutionId__; 24178 vm.url = urlService; 24179 24180 //State functions 24181 vm.getFormatTime = function(score) { 24182 switch (score.StatusId) { 24183 case 3: 24184 case 1: 24185 return moment(score.StartTime, 'hh:mm').format('LT'); 24186 24187 case 2: 24188 return moment(score.Time, 'hh:mm:ss').format('LTS').substr(3, 5); 24189 } 24190 }; 24191 24192 vm.getFormatStartTime = function(startTime) { 24193 return moment(startTime, 'hh:mm').format('LT'); 24194 }; 24195 24196 } 24197})(); 24198; 24199(function () { 24200 'use strict'; 24201 24202 angular 24203 .module('app.directives') 24204 .directive('scheduleEvent', scheduleEvent); 24205 24206 scheduleEvent.$inject = []; 24207 24208 function scheduleEvent() { 24209 return { 24210 restrict: 'E', 24211 scope: { 24212 event: '=', 24213 visitorRight: '=' 24214 }, 24215 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/event/schedule-event.tpl.html', 24216 controller: 'ScheduleEventWidgetController', 24217 controllerAs: 'scheduleEvent' 24218 }; 24219 } 24220})();; 24221(function () { 24222 'use strict'; 24223 24224 angular 24225 .module('app.directives') 24226 .controller('ScheduleNavigationWidgetController', ScheduleNavigationWidgetController); 24227 24228 ScheduleNavigationWidgetController.$inject = ['$scope']; 24229 24230 function ScheduleNavigationWidgetController($scope) { 24231 var vm = this; 24232 var currentView; 24233 vm.tabs = []; 24234 24235 $scope.$watch('view', function (newValue, oldValue) { 24236 currentView = newValue; 24237 24238 renderTabs(newValue); 24239 }); 24240 24241 $scope.$watch('dateRange', function (newValue, oldValue) { 24242 renderTabs(currentView); 24243 }); 24244 24245 vm.click = function(tab) { 24246 var dateRange; 24247 24248 // TODO Move into service Schedule 24249 switch ($scope.view) { 24250 case 'day': 24251 dateRange = getDateRange('day', tab.date); // TODO Eventually, add possibility to pass custom date. 24252 break; 24253 24254 case '3days': 24255 dateRange = get3DaysRange(tab.date); 24256 break; 24257 24258 case 'week': 24259 dateRange = getDateRange('isoWeek', tab.date); // TODO Eventually, add possibility to pass custom date. 24260 break; 24261 24262 case 'month': 24263 dateRange = getDateRange('month', tab.date); // TODO Eventually, add possibility to pass custom date. 24264 break; 24265 } 24266 24267 $scope.change({ view: $scope.view, dateRange: dateRange }); 24268 }; 24269 24270 function renderTabs(view) { 24271 // TODO Create function 24272 var tabs = []; 24273 var previousDate; 24274 var nextDate; 24275 24276 switch (view) { 24277 case 'day': 24278 // Previous day 24279 previousDate = moment($scope.dateRange.date).subtract(1, 'day').toDate(); 24280 tabs.push({ 24281 text: moment(previousDate).format('LL'), 24282 date: previousDate 24283 }); 24284 24285 // Current day 24286 tabs.push({ 24287 text: moment($scope.dateRange.date).format('LL'), 24288 date: $scope.dateRange.date 24289 }) 24290 24291 // Next day 24292 nextDate = moment($scope.dateRange.date).add(1, 'day').toDate(); 24293 tabs.push({ 24294 text: moment(nextDate).format('LL'), 24295 date: nextDate 24296 }); 24297 break; 24298 24299 case '3days': 24300 // Previous 3 days 24301 previousDate = moment($scope.dateRange.date).subtract(3, 'day').toDate(); 24302 tabs.push({ 24303 text: moment(previousDate).format('LL'), 24304 date: previousDate 24305 }); 24306 24307 // Current 3 days 24308 tabs.push({ 24309 text: moment($scope.dateRange.date).format('LL'), 24310 date: $scope.dateRange.date 24311 }) 24312 24313 // Next 3 days 24314 nextDate = moment($scope.dateRange.date).add(3, 'day').toDate(); 24315 tabs.push({ 24316 text: moment(nextDate).format('LL'), 24317 date: nextDate 24318 }); 24319 break; 24320 24321 case 'week': 24322 // Previous week 24323 previousDate = moment($scope.dateRange.startDate).subtract(1, 'week').toDate(); 24324 tabs.push({ 24325 text: momen
24325t(previousDate).format('LL'), 24326 date: previousDate 24327 }); 24328 24329 // Current week 24330 tabs.push({ 24331 text: moment($scope.dateRange.startDate).format('LL'), 24332 date: $scope.dateRange.date 24333 }) 24334 24335 // Next week 24336 nextDate = moment($scope.dateRange.startDate).add(1, 'week').toDate(); 24337 tabs.push({ 24338 text: moment(nextDate).format('LL'), 24339 date: nextDate 24340 }); 24341 break; 24342 24343 case 'month': 24344 // Previous month 24345 previousDate = moment($scope.dateRange.date).subtract(1, 'month').toDate(); 24346 tabs.push({ 24347 text: moment(previousDate).format('MMMM YYYY'), 24348 date: previousDate 24349 }); 24350 24351 // Current month 24352 tabs.push({ 24353 text: moment($scope.dateRange.date).format('MMMM YYYY'), 24354 date: $scope.dateRange.date 24355 }) 24356 24357 // Next month 24358 nextDate = moment($scope.dateRange.date).add(1, 'month').toDate(); 24359 tabs.push({ 24360 text: moment(nextDate).format('MMMM YYYY'), 24361 date: nextDate 24362 }); 24363 break; 24364 24365 case 'season': 24366 console.log('Not implemented yet!'); 24367 break; 24368 } 24369 vm.tabs = tabs; 24370 } 24371 24372 function getDateRange(type, date) { 24373 return { 24374 date: date, 24375 startDate: moment(date).startOf(type).toDate(), 24376 endDate: moment(date).endOf(type).toDate() 24377 }; 24378 } 24379 24380 function get3DaysRange(date) { 24381 return { 24382 date: date, 24383 startDate: moment(date).subtract(1, 'day').startOf('day').toDate(), 24384 endDate: moment(date).add(1, 'day').endOf('day').toDate() 24385 }; 24386 } 24387 } 24388})(); 24389; 24390(function () { 24391 'use strict'; 24392 24393 angular 24394 .module('app.directives') 24395 .directive('scheduleNavigation', scheduleNavigation); 24396 24397 scheduleNavigation.$inject = []; 24398 24399 function scheduleNavigation() { 24400 return { 24401 restrict: 'E', 24402 scope: { 24403 dateRange: '=', 24404 view: '=', 24405 change: '&' 24406 }, 24407 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/navigation/schedule-navigation.tpl.html', 24408 controller: 'ScheduleNavigationWidgetController', 24409 controllerAs: 'scheduleNavigation' 24410 }; 24411 } 24412})();; 24413(function () { 24414 'use strict'; 24415 24416 angular 24417 .module('app.directives') 24418 .controller('ScheduleViewsWidgetController', ScheduleViewsWidgetController); 24419 24420 ScheduleViewsWidgetController.$inject = ['$scope']; 24421 24422 function ScheduleViewsWidgetController($scope) { 24423 var vm = this; 24424 vm.defaultView = $scope.defaultView; 24425 vm.selected = vm.defaultView; 24426 24427 $scope.$watch('defaultView', function(newValue, oldValue) { 24428 vm.defaultView = newValue; 24429 vm.change(vm.defaultView); 24430 }) 24431 24432 vm.views = [ 24433 { value: 'day', class: 'd-block d-sm-none', text: 'dayAbbr' }, 24434 { value: '3days', class: 'd-block d-sm-none', text: '3daysAbbr' }, 24435 { value: 'week', class: 'd-block d-sm-none', text: 'weekAbbr' }, 24436 { value: 'month', class: 'd-block d-sm-none', text: 'monthAbbr' }, 24437 { value: 'season', class: 'd-block d-sm-none', text: 'seasonAbbr' }, 24438 24439 { value: 'day', class: 'd-none d-sm-block', text: 'day' }, 24440 { value: '3days', class: 'd-none d-sm-block', text: '3days' }, 24441 { value: 'week', class: 'd-none d-sm-block', text: 'week' }, 24442 { value: 'month', class: 'd-none d-sm-block', text: 'month' }, 24443 { value: 'season', class: 'd-none d-sm-block', text: 'season' } 24444 ]; 24445 24446 vm.today = function () { 24447 if (typeof $scope.today == 'function') { 24448 $scope.today({ dateRange: getDateRange('day', new Date()) }); 24449 } 24450 }; 24451 24452 vm.change = function (view) { 24453 if (vm.selected !== view || vm.selected == vm.defaultView) { 24454 vm.selected = view; 24455 24456 if (typeof $scope.change == 'function') { 24457 var dateRange = null; 24458 24459 switch (view) { 24460 case 'day': 24461 dateRange = getDateRange('day', new Date()); // TODO Eventually, add possibility to pass custom date. 24462 break; 24463 24464 case '3days': 24465 dateRange = get3DaysRange(new Date()); 24466 break; 24467 24468 case 'week': 24469 dateRange = getDateRange('isoWeek', new Date()); // TODO Eventually, add possibility to pass custom date. 24470 break; 24471 24472 case 'month': 24473 dateRange = getDateRange('month', new Date()); // TODO Eventually, add possibility to pass custom date. 24474 break; 24475 } 24476 24477 $scope.change({ view: vm.selected, dateRange: dateRange }); 24478 } 24479 } 24480 }; 24481 24482 // Initialize the schedule view with default view. 24483 vm.change(vm.defaultView); 24484 24485 function getDateRange(type, date) { 24486 return { 24487 date: date, 24488 startDate: moment(date).startOf(type).toDate(), 24489 endDate: moment(date).endOf(type).toDate() 24490 }; 24491 } 24492 24493 function get3DaysRange(date) { 24494 return { 24495 date: date, 24496 startDate: moment(date).subtract(1, 'day').startOf('day').toDate(), 24497 endDate: moment(date).add(1, 'day').endOf('day').toDate() 24498 }; 24499 } 24500 } 24501})(); 24502; 24503(function () { 24504 'use strict'; 24505 24506 angular 24507 .module('app.directives') 24508 .directive('scheduleViews', scheduleViews); 24509 24510 scheduleViews.$inject = []; 24511 24512 function scheduleViews() { 24513 return { 24514 restrict: 'E', 24515 scope: { 24516 change: '&', 24517 today: '&', 24518 widget: '=', 24519 defaultView: "=" 24520 }, 24521 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/views/schedule-views.tpl.html', 24522 controller: 'ScheduleViewsWidgetController', 24523 controllerAs: 'scheduleViews' 24524 }; 24525 } 24526})();; 24527(function () { 24528 'use strict'; 24529 24530 angular 24531 .module('app.directives') 24532 .controller('ScheduleWidgetController', ScheduleWidgetController); 24533 24534 ScheduleWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$window', 'WebsiteEditorService', 'ScheduleService']; 24535 24536 function ScheduleWidgetController($rootScope, $scope, $localStorage, $window, websiteEditorService, scheduleService) { 24537 var vm = this; 24538 24539 //State variables 24540 vm.widget = angular.fromJson(widgets[$scope.widget]); 24541 24542 vm.parameters = { 24543 pageSize: 20, 24544 defaultView: $scope.defaultScheduleTab, 24545 visitorRight: false 24546 }; 24547 vm.season = undefined; 24548 vm.division = undefined; 24549 vm.container = undefined; 24550 vm.divisions = undefined; 24551 vm.team = 'all'; 24552 vm.facility = 'all'; 24553 vm.dateRange = undefined; 24554 vm.teamDefined = false; 24555 vm.view = undefined; 24556 24557 //State functions 24558 vm.viewToday = function (dateRange) { 24559 vm.dateRange = dateRange; 24560 }; 24561 24562 vm.viewChange = function (view, dateRange) { 24563 vm.dateRange = dateRange; 24564 vm.view = view; 24565 }; 24566 24567 vm.filter = function (filter) { 24568 vm.season = filter.season; 24569 vm.division = filter.division; 24570 vm.container = filter.container; 24571 vm.team = filter.team; 24572 vm.facility = filter.facility;
24573 vm.divisions = filter.divisions; 24574 if (angular.isDefined($scope.team)) { 24575 vm.team = $scope.team.id; 24576 vm.division = 'divisions'; 24577 } 24578 }; 24579 24580 vm.filterTeam = function (filter) { 24581 vm.season = filter.season; 24582 vm.division = filter.division; 24583 vm.team = filter.team; 24584 vm.facility = filter.facility; 24585 vm.container = filter.container; 24586 vm.divisions = filter.divisions; 24587 if (angular.isDefined($scope.team)) { 24588 vm.team = $scope.team.id; 24589 vm.division = 'divisions'; 24590 } 24591 }; 24592 24593 vm.printSchedule = function () { 24594 var calendarSheetUrl = '/handlers/CalendarSheet.ashx?solutionId=' + __solutionId__; 24595 24596 if (vm.view == 'season') { 24597 calendarSheetUrl += '&seasonId=' + vm.season; 24598 } else { 24599 var startDate = moment(vm.dateRange.startDate).format('YYYY-MM-DD HH:mm:ss'); 24600 var endDate = moment(vm.dateRange.endDate).format('YYYY-MM-DD HH:mm:ss'); 24601 24602 if (startDate) { 24603 calendarSheetUrl += '&startDate=' + startDate; 24604 } 24605 24606 if (endDate) { 24607 calendarSheetUrl += '&endDate=' + endDate; 24608 } 24609 } 24610 24611 if (vm.team && vm.team != 'all') { 24612 calendarSheetUrl += '&teamId=' + vm.team; 24613 } 24614 24615 if (vm.facility && vm.facility != 'all') { 24616 calendarSheetUrl += '&sportCenterId=' + vm.facility; 24617 } 24618 24619 $window.open(calendarSheetUrl, '_blank'); 24620 } 24621 24622 //On component mount 24623 if (angular.isDefined($scope.team)) { 24624 vm.teamDefined = true; 24625 const configuration = $localStorage.solution.configs.find((config) => { 24626 return config.code === 'DEFAULTTEAMCALENDARMODE'; 24627 }); 24628 if (configuration) { 24629 vm.parameters.defaultView = configuration.value; 24630 } 24631 } 24632 24633 if ($scope.widget) { 24634 for (var parameter in vm.widget.parameters) { 24635 switch (vm.widget.parameters[parameter].id) { 24636 case 'defaultTeamsDisplayed': 24637 vm.parameters.pageSize = vm.widget.parameters[parameter].value; 24638 break; 24639 case 'defaultView': 24640 vm.parameters.defaultView = vm.widget.parameters[parameter].value; 24641 break; 24642 case 'visitorRight': 24643 vm.parameters.visitorRight = (vm.widget.parameters[parameter].value === 'true'); 24644 break; 24645 } 24646 } 24647 } 24648 24649 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 24650 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 24651 .then(function (response) { 24652 for (var parameter in vm.widget.parameters) { 24653 switch (vm.widget.parameters[parameter].id) { 24654 case 'defaultTeamsDisplayed': 24655 vm.widget.parameters[parameter].value = data.defaultTeamsDisplayed; 24656 vm.parameters.pageSize = data.defaultTeamsDisplayed; 24657 break; 24658 case 'defaultView': 24659 vm.widget.parameters[parameter].value = data.defaultView; 24660 vm.parameters.defaultView = data.defaultView; 24661 break; 24662 case 'visitorRight': 24663 vm.widget.parameters[parameter].value = data.visitorRight.toString(); 24664 vm.parameters.visitorRight = data.visitorRight; 24665 break; 24666 } 24667 } 24668 widgets[$scope.widget] = angular.toJson(vm.widget); 24669 }) 24670 .catch(function (error) { 24671 bugsnag.notify(error); 24672 }); 24673 }); 24674 24675 $scope.$on('$destroy', listener); 24676 } 24677})(); 24678; 24679(function () { 24680 'use strict'; 24681 24682 angular 24683 .module('app.directives') 24684 .directive('schedule', schedule); 24685 24686 schedule.$inject = []; 24687 24688 function schedule() { 24689 return { 24690 restrict: 'E', 24691 scope: { 24692 team: '=', 24693 defaultScheduleTab: '=', 24694 widget: '=' 24695 }, 24696 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/schedule.tpl.html', 24697 controller: 'ScheduleWidgetController', 24698 controllerAs: 'schedule' 24699 }; 24700 } 24701})();; 24702(function () { 24703 'use strict'; 24704 24705 angular 24706 .module('app.directives') 24707 .controller('SchedulePageWidgetController', SchedulePageWidgetController); 24708 24709 SchedulePageWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 24710 24711 function SchedulePageWidgetController($rootScope, $scope, websiteEditorService) { 24712 var vm = this; 24713 24714 // Apply website values to view model object. 24715 vm.widget = angular.fromJson(widgets[$scope.widget]); 24716 24717 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 24718 } 24719})(); 24720; 24721(function () { 24722 'use strict'; 24723 24724 angular 24725 .module('app.directives') 24726 .directive('schedulePage', schedulePage); 24727 24728 schedulePage.$inject = []; 24729 24730 function schedulePage() { 24731 return { 24732 restrict: 'E', 24733 scope: { 24734 widget: '=' 24735 }, 24736 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/page/schedule-page.tpl.html', 24737 controller: 'SchedulePageWidgetController', 24738 controllerAs: 'schedulePage' 24739 }; 24740 } 24741})();; 24742(function () { 24743 'use strict'; 24744 24745 angular 24746 .module('app.directives') 24747 .controller('ScheduleListWidgetController', ScheduleListWidgetController); 24748 24749 ScheduleListWidgetController.$inject = ['$scope', 'ScheduleService', 'SolutionService', 'FacilityService', 'GoogleMapService']; 24750 24751 function ScheduleListWidgetController($scope, scheduleService, solutionService, facilityService, googleMapService) { 24752 var vm = this; 24753 24754 //Local variables 24755 var games; 24756 var currentPageIndex = 1; 24757 24758 //State 24759 vm.games = []; 24760 vm.gamesDisplayed = undefined; 24761 vm.showFollowButton = true; 24762 vm.facilities = []; 24763 24764 //State functions 24765 vm.loadMoreGames = function () { 24766 currentPageIndex += 1;
24767 vm.gamesDisplayed = vm.games.slice(0, currentPageIndex * $scope.parameters.pageSize); 24768 }; 24769 24770 vm.viewChange = function (view, dateRange) { 24771 $scope.view = view; 24772 $scope.dateRange = dateRange; 24773 }; 24774 24775 solutionService.getSolutionById(__solutionId__).then(function (result) { 24776 var configs = result.data.configs; 24777 var hideFollowConfig = _.find(configs, { code: 'HIDESCHEDULEFOLLOWBUTTON' }); 24778 if (hideFollowConfig) { 24779 vm.showFollowButton = hideFollowConfig.value != '1'; 24780 } 24781 }) 24782 24783 facilityService.getFacilitiesDetailsBySolutionId(__solutionId__) 24784 .then(function (response) { 24785 vm.facilities = response.data; 24786 }) 24787 .catch(function (error) { 24788 bugsnag.notify(error); 24789 }); 24790 24791 vm.getFacility = function (facility) { 24792 if (facility) { 24793 return _.find(vm.facilities, { id: facility }); 24794 } 24795 24796 return null; 24797 } 24798 24799 //Watchers 24800 $scope.$watch('dateRange', function () { 24801 currentPageIndex = 1; 24802 if ($scope.dateRange) { 24803 vm.options = { 24804 startDate: moment($scope.dateRange.startDate).format('YYYY-MM-DD HH:mm:ss'), 24805 endDate: moment($scope.dateRange.endDate).format('YYYY-MM-DD HH:mm:ss') 24806 }; 24807 } else { 24808 vm.options = {}; 24809 } 24810 getSchedule(); 24811 }, true); 24812 24813 $scope.$watch('[season, division, team, facility, divisions, container]', function () { 24814 currentPageIndex = 1; 24815 getSchedule(); 24816 }); 24817 24818 $scope.$watch('parameters', function () { 24819 currentPageIndex = 1; 24820 filterLocally(); 24821 }, true); 24822 24823 // Helper Functions 24824 function getSchedule() { 24825 if ($scope.season === 'all') { 24826 var options = _.cloneDeep(vm.options); 24827 24828 if ($scope.container) { 24829 options.masterSeasonId = $scope.container; 24830 } 24831 24832 scheduleService.getScheduleBySolutionId(__solutionId__, options) 24833 .then(function (response) { 24834 games = response.data; 24835 filterLocally(); 24836 }) 24837 .catch(function (error) { 24838 bugsnag.notify(error); 24839 }); 24840 } else if ($scope.season) { 24841 scheduleService.getScheduleBySeasonId(__solutionId__, $scope.season, vm.options) 24842 .then(function (response) { 24843 games = response.data; 24844 filterLocally(); 24845 }) 24846 .catch(function (error) { 24847 bugsnag.notify(error); 24848 }); 24849 } 24850 } 24851 24852 function filterLocally() { 24853 vm.games = []; 24854 _.forEach(games, function (game) { 24855 if (divisionDone(game) && ($scope.facility === 'all' || game.SportCenterId == $scope.facility)) { 24856 if ($scope.team === 'all' || game.LocalTeamId == $scope.team || game.VisitorTeamId == $scope.team || game.TeamList.find(t => t.Id === $scope.team)) { 24857 vm.games.push(game); 24858 } 24859 } 24860 }); 24861 vm.gamesDisplayed = vm.games.length > $scope.parameters.pageSize 24862 ? vm.games.slice(0, currentPageIndex * $scope.parameters.pageSize) 24863 : vm.games; 24864 } 24865 24866 function divisionDone(game) { 24867 var divisionsFilter = _.filter($scope.divisions, function (division) { return division.Id == $scope.division || division.ParentId == $scope.division }); 24868 24869 var divisionDone = $scope.division === 'general' || 24870 $scope.division === 'divisions' || 24871 (_.find(divisionsFilter, { Id: game.LocalDivisionId }) !== undefined) || 24872 (_.find(divisionsFilter, { Id: game.VisitorDivisionId }) !== undefined); 24873 24874 if (divisionDone != true && game.DivisionList !== null && game.DivisionList.length > 0) { 24875 var resultDivisions = _.intersectionWith(divisionsFilter, game.DivisionList, function (filterDivision, gameDivision) { return filterDivision.Id == gameDivision.Id }); 24876 divisionDone = resultDivisions !== null && resultDivisions.length > 0;
24877 } 24878 24879 return divisionDone; 24880 } 24881 } 24882})();; 24883(function () { 24884 'use strict'; 24885 24886 angular 24887 .module('app.directives') 24888 .directive('scheduleList', scheduleList) 24889 24890 scheduleList.$inject = []; 24891 24892 function scheduleList() { 24893 return { 24894 restrict: 'E', 24895 scope: { 24896 container: '=', 24897 parameters: '=', 24898 season: '=', 24899 division: '=', 24900 divisions: '=', 24901 team: '=', 24902 facility: '=', 24903 dateRange: '=', 24904 view: '=' 24905 }, 24906 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/schedule/list/schedule-list.tpl.html', 24907 controller: 'ScheduleListWidgetController', 24908 controllerAs: 'scheduleList' 24909 }; 24910 } 24911})();; 24912(function () { 24913 'use strict'; 24914 24915 angular 24916 .module('app.directives') 24917 .controller('ScoresWidgetController', ScoresWidgetController); 24918 24919 ScoresWidgetController.$inject = ['$rootScope', '$scope', '$document', '$interval', '$localStorage', 'GameService', 'WebsiteEditorService', 'SignalrService']; 24920 24921 function ScoresWidgetController($rootScope, $scope, $document, $interval, $localStorage, gameService, websiteEditorService, signalrService) { 24922 var vm = this; 24923 24924 //State variables 24925 vm.visitorBottom = false; 24926 vm.maxGame = 30; 24927 vm.currentPosition = 0; 24928 vm.startingPositionFound = false; 24929 vm.delayDay = 30; 24930 vm.widget = getScoresWidget(); 24931 24932 if ($localStorage && $localStorage.solution && $localStorage.solution.sportId == 2) { 24933 var signalrConnection = signalrService.getConnection(signalrService.GROUPS.GamebarUpdate(__solutionId__)); 24934 24935 signalrConnection.on(signalrService.EVENTS.GameUpdate, function (response) { 24936 var gameUpdated = angular.fromJson(response); 24937 24938 var index = _.findIndex(vm.allScores, { Id: gameUpdated.Id }); 24939 if (index > -1) { 24940 vm.allScores.splice(index, 1, gameUpdated); 24941 $scope.$apply(); 24942 } 24943 }); 24944 } 24945 24946 //On component mount 24947 for (var parameter in vm.widget.parameters) { 24948 switch (vm.widget.parameters[parameter].id) { 24949 case 'visitorBottom': 24950 vm.visitorBottom = (vm.widget.parameters[parameter].value === 'true'); 24951 break; 24952 case 'maxGame': 24953 vm.maxGame = parseInt(vm.widget.parameters[parameter].value); 24954 break; 24955 case 'delayDay': 24956 vm.delayDay = parseInt(vm.widget.parameters[parameter].value); 24957 break; 24958 case 'details': 24959 vm.details = vm.widget.parameters[parameter].value; 24960 break; 24961 24962 } 24963 } 24964 24965 getScores(); 24966 24967 //Listener 24968 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 24969 for (var parameter in vm.widget.parameters) { 24970 switch (vm.widget.parameters[parameter].id) { 24971 case 'visitorBottom': 24972 vm.widget.parameters[parameter].value = data.visitorBottom.toString(); 24973 vm.visitorBottom = data.visitorBottom; 24974 break; 24975 case 'maxGame': 24976 vm.widget.parameters[parameter].value = data.maxGame; 24977 vm.maxGame = data.maxGame; 24978 break; 24979 case 'delayDay': 24980 vm.widget.parameters[parameter].value = data.delayDay; 24981 vm.delayDay = data.delayDay; 24982 break; 24983 case 'details': 24984 vm.widget.parameters[parameter].value = data.details; 24985 vm.details = data.details 24986 } 24987 } 24988 websiteEditorService.updateWebsite(__solutionId__, website) 24989 .then(function() { 24990 vm.currentPosition = 0; 24991 vm.allScores = []; 24992 getScores(); 24993 widgets[$scope.widget] = angular.toJson(vm.widget); 24994 })
24995 .catch(function(error) { 24996 bugsnag.notify(error); 24997 }); 24998 }); 24999 25000 $scope.$on('$destroy', listener); 25001 25002 25003 //var scoresVisible = true; 25004 //var scoresShouldUpdate = false; 25005 25006 //$document[0].addEventListener("visibilitychange", () => { 25007 // if ($document[0].hidden) { 25008 // scoresVisible = false; 25009 // } else { 25010 // scoresVisible = true; 25011 25012 // if (scoresShouldUpdate) { 25013 // getScores(); 25014 // } 25015 // } 25016 //}); 25017 25018 //$interval(function () { 25019 // if (scoresVisible) { 25020 // getScores() 25021 // } 25022 // else { 25023 // scoresShouldUpdate = true; 25024 // } 25025 //}, 30000) 25026 25027 //Helpers 25028 function getScores() { 25029 gameService.getGamesBySolutionId(__solutionId__, { maxGame: vm.maxGame, delayDay: vm.delayDay }) // TODO Parameters 25030 .then(function (results) { 25031 vm.allScores = results.data; 25032 }) 25033 .catch(function (error) { 25034 bugsnag.notify(error); 25035 }); 25036 } 25037 25038 function getScoresWidget() { 25039 const widget = website.widgets.find(function(w) { 25040 return w.id === 'scores'; 25041 }); 25042 return angular.fromJson(widget); 25043 } 25044 } 25045})(); 25046; 25047(function () { 25048 'use strict'; 25049 25050 angular 25051 .module('app.directives') 25052 .directive('scores', scores); 25053 25054 scores.$inject = ['$window']; 25055 25056 function scores($window) { 25057 return { 25058 restrict: 'E', 25059 scope: { 25060 widget: '=' 25061 }, 25062 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/scores/scores.tpl.html', 25063 controller: 'ScoresWidgetController', 25064 controllerAs: 'scores', 25065 link: function (scope, element, attribute, controller) { 25066 var vm = controller; 25067 var translationValue = 500; 25068 25069 vm.clickPrevious = function () { 25070 // Get the bargame element. 25071 var bargame = element.find('div.bargame'); 25072 25073 // Calculate the new left position. 25074 vm.currentPosition = vm.currentPosition + translationValue < 0 25075 ? vm.currentPosition + translationValue 25076 : 0; 25077 25078 bargame.css({ left: `${vm.currentPosition}px` }); // TODO Use template 25079 }; 25080 25081 vm.clickNext = function () { 25082 // Get the bargame element. 25083 var bargame = element.find('div.bargame'); 25084 25085 // Calculate the maximum left bound 25086 var leftBound = (bargame.width() - $window.innerWidth) * -1; 25087 25088 // Calculate the new left position. 25089 vm.currentPosition = vm.currentPosition - translationValue > leftBound 25090 ? vm.currentPosition - translationValue 25091 : leftBound - 112; 25092 25093 // Set the Css attribute. 25094 bargame.css({ left: `${vm.currentPosition}px` }); 25095 }; 25096 25097 vm.getStartingDate = function ($index, date) { 25098 var today = new Date(); 25099 var month = today.getMonth(); 25100 var day = today.getDate(); 25101 var year = today.getFullYear(); 25102 25103 today = new Date(year, month, day); 25104 25105 //var startingDate = element.find('li.starting-date.bargame'); 25106 25107 if (vm.startingPositionFound === false && today <=new Date(date)) { 25108 // Get the bargame element. 25109 var bargame = element.find('div.bargame'); 25110 25111 // Get the starting position. 25112 var startingPosition = element.find('li.date')[$index]; 25113 25114 // Set the current position. 25115 vm.currentPosition = startingPosition.offsetLeft * -1; 25116 vm.startingPositionFound = true; 25117 25118 // Set the Css attribute. 25119 bargame.css({ left: `${vm.currentPosition}px` }); 25120 25121 return true; 25122 } 25123 25124 return false; 25125 } 25126 } 25127 }; 25128 } 25129})();; 25130(function () { 25131 'use strict'; 25132 25133 angular 25134 .module('app.directives') 25135 .controller('ScoresGameWidgetController', ScoresGameWidgetController); 25136 25137 ScoresGameWidgetController.$inject = ['$scope', '$filter', '$translate', 'UrlService','ScoreboardBaseballService']; 25138 25139 function ScoresGameWidgetController($scope, $filter, $translate, urlService, scoreboardBaseballService) { 25140 var vm = this; 25141 25142 //State variables 25143 Object.assign(vm, $scope.score); 25144 vm.url = urlService; 25145 vm.messageTypes = { 25146 1: { class: 'important-note' }, 25147 2: { class: 'warning-note' }, 25148 3: { class: 'message-note' }, 25149 } 25150 25151 vm.firstDivision = undefined; 25152 vm.firstDivisionId = undefined; 25153 vm.firstResult = undefined; 25154 vm.firstTeamAvatar = undefined; 25155 vm.firstTeamId = undefined; 25156 vm.firstTeamName = undefined; 25157 vm.firstPitcher = undefined; 25158 25159 vm.secondDivision = undefined; 25160 vm.secondDivisionId = undefined; 25161 vm.secondResult = undefined; 25162 vm.secondTeamAvatar = undefined; 25163 vm.secondTeamId = undefined; 25164 vm.secondTeamName = undefined; 25165 vm.secondPitcher = undefined; 25166 25167 vm.gameType = _.get(_.find(vm.Properties, { name: 'GameType' }), 'value'); 25168 25169 function getDetailsToShow() { 25170 switch ($scope.details) { 25171 case 'starterPitcher': 25172 scoreboardBaseballService.getLineupBaseball(__solutionId__, vm.Id) 25173 .then(function(response){ 25174 if (response.data.teams.length > 0) { 25175 _.forEach(response.data.teams, function (team) { 25176 let player = _.find(team.positions, { playerPosition: 'pitcher' }) 25177 if (player) { 25178 if (player.teamId === vm.firstTeamId) { 25179 vm.firstPitcher = player.playerName 25180 } else { 25181 vm.secondPitcher = player.playerName 25182 } 25183 } 25184 }) 25185 } 25186 vm.detailsToShow = { 25187 local: vm.secondPitcher, 25188 visitor: vm.firstPitcher 25189 } 25190 }) 25191 break; 25192 25193 case 'nothing': 25194 vm.detailsToShow = { 25195 local:'', 25196 visitor:'' 25197 } 25198 break; 25199 25200 case 'division': 25201 default: 25202 vm.detailsToShow = { 25203 local: vm.secondDivision, 25204 visitor: vm.firstDivision 25205 } 25206 break; 25207 } 25208 } 25209 25210 vm.getStatusGame = function () { 25211 var gameStatus = ''; 25212 switch ($scope.score.SportId) { 25213 // Baseball 25214 case 2: 25215 if ($scope.score.Properties) { 25216 var gameStatusProperty = _.find($scope.score.Properties, { name: 'GameStatus' }); 25217 if (gameStatusProperty) { 25218 var gameStatusProperties = _.split(gameStatusProperty.value, '-'); 25219 if (gameStatusProperties) { 25220 switch ($scope.score.StatusId) { 25221 case 2: 25222 gameStatus = $translate.instant('directives.widgets.scores.labels.' + gameStatusProperties[0]) + ' ' + $filter('ordinal')(gameStatusProperties[1], true) + ' - ' + gameStatusProperties[2] + $translate.instant('directives.widgets.scores.labels.out'); 25223 break; 25224 case 3: 25225 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 25226 gameStatus += ' ' + gameStatusProperties[1]; 25227 break; 25228 } 25229 } 25230 } 25231 } 25232 break; 25233 default: 25234 { 25235 switch ($scope.score.StatusId) { 25236 case 2: 25237 if ($scope.score.PeriodId >= 5 && $scope.score.PeriodId <= 8) { 25238 gameStatus += $translate.instant('directives.widgets.scores.labels.overtime'); 25239 } 25240 else if ($scope.score.PeriodId == 9) { 25241 gameStatus += $translate.instant('directives.widgets.scores.labels.shootout'); 25242 } 25243 else { 25244 gameStatus = $filter('ordinal')($scope.score.PeriodId, true) 25245 if ($scope.score.IsUseTime) { 25246 gameStatus += ' - ' + vm.getFormatTime(); 25247 } 25248 } 25249 break; 25250 case 3: 25251 gameStatus = $translate.instant('directives.widgets.scores.labels.final'); 25252 if ($scope.score.PeriodId > 4) { 25253 gameStatus += ' / '; 25254 } 25255 if ($scope.score.PeriodId >= 5 && $scope.score.PeriodId <= 8) { 25256 gameStatus += $translate.instant('directives.widgets.scores.labels.overtime'); 25257 } 25258 if ($scope.score.PeriodId == 9) { 25259 gameStatus += $translate.instant('directives.widgets.scores.labels.shootout'); 25260 } 25261 break; 25262 } 25263 } 25264 } 25265 return gameStatus; 25266 } 25267 25268 //State functions 25269 // TODO Move into service 25270 vm.getFormatTime = function() { 25271 switch ($scope.score.StatusId) { 25272 case 1: 25273 return moment($scope.score.StartTime, 'hh:mm').format('LT'); 25274 25275 case 2: 25276 return moment($scope.score.Time, 'hh:mm:ss').format('LTS').substr(3, 5); 25277 } 25278 }; 25279 25280 //On component mount 25281 setLocalAndVisitorPosition(); 25282 $scope.$watch('visitorBottom', function() { 25283 setLocalAndVisitorPosition(); 25284 getDetailsToShow(); 25285 }) 25286 25287 function setLocalAndVisitorPosition() { 25288 if ($scope.visitorBottom) { 25289 vm.firstDivision = vm.LocalDivision; 25290 vm.firstDivisionId = vm.LocalDivisionId; 25291 vm.firstResult = vm.LocalResult; 25292 vm.firstTeamAvatar = vm.LocalTeamId ? vm.LocalTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 25293 vm.firstTeamId = vm.LocalTeamId; 25294 vm.firstTeamName = vm.LocalTeamId ? vm.LocalTeamName : $translate.instant('directives.widgets.schedule.game.labels.tbdName'); 25295 25296 vm.secondDivision = vm.VisitorDivision; 25297 vm.secondDivisionId = vm.VisitorDivisionId; 25298 vm.secondResult = vm.VisitorResult; 25299 vm.secondTeamAvatar = vm.VisitorTeamId ? vm.VisitorTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 25300 vm.secondTeamId = vm.VisitorTeamId; 25301 vm.secondTeamName = vm.VisitorTeamId ? vm.VisitorTeamName : $translate.instant('directives.widgets.schedule.game.labels.tbdName'); 25302 } else { 25303 vm.firstDivision = vm.VisitorDivision; 25304 vm.firstDivisionId = vm.VisitorDivisionId; 25305 vm.firstResult = vm.VisitorResult; 25306 vm.firstTeamAvatar = vm.VisitorTeamId ? vm.VisitorTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 25307 vm.firstTeamId = vm.VisitorTeamId; 25308 vm.firstTeamName = vm.VisitorTeamId ? vm.VisitorTeamName : $translate.instant('directives.widgets.schedule.game.labels.tbdName'); 25309 25310 vm.secondDivision = vm.LocalDivision; 25311 vm.secondDivisionId = vm.LocalDivisionId; 25312 vm.secondResult = vm.LocalResult; 25313 vm.secondTeamAvatar = vm.LocalTeamId ? vm.LocalTeamAvatar : $translate.instant('directives.widgets.schedule.game.labels.tbdImage'); 25314 vm.secondTeamId = vm.LocalTeamId; 25315 vm.secondTeamName = vm.LocalTeamId ? vm.LocalTeamName : $translate.instant('directives.widgets.schedule.game.labels.tbdName'); 25316 } 25317 } 25318 25319 } 25320})(); 25321; 25322(function () { 25323 'use strict'; 25324 25325 angular 25326 .module('app.directives') 25327 .directive('scoresGame', scoresGame); 25328 25329 scoresGame.$inject = []; 25330 25331 function scoresGame() { 25332 return { 25333 restrict: 'E', 25334 scope: { 25335 score: '=', 25336 visitorBottom: '=', 25337 details: '=' 25338 }, 25339 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/scores/scores-game/scores-game.tpl.html', 25340 controller: 'ScoresGameWidgetController', 25341 controllerAs: 'scoresGame' 25342 }; 25343 } 25344})();; 25345(function () { 25346 'use strict'; 25347 25348 angular 25349 .module('app.directives') 25350 .controller('FacebookSocialPagePluginController', FacebookSocialPagePluginController); 25351 25352 FacebookSocialPagePluginController.$inject = []; 25353 25354 function FacebookSocialPagePluginController() { 25355 25356 } 25357})(); 25358; 25359(function () { 25360 'use strict'; 25361 25362 angular 25363 .module('app.directives') 25364 .directive('facebookSocialPagePlugin', facebookSocialPagePlugin) 25365 25366 facebookSocialPagePlugin.$inject = []; 25367 25368 function facebookSocialPagePlugin() { 25369 return { 25370 restrict: 'E', 25371 scope: { 25372 widget: '=' 25373 }, 25374 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/social-medias/facebook/page/facebook-social-page-plugin.tpl.html' 25375 }; 25376 } 25377})();; 25378(function () { 25379 'use strict'; 25380 25381 angular 25382 .module('app.directives') 25383 .directive('fbPage', fbPage) 25384
25385 fbPage.$inject = ['$rootScope', 'WebsiteEditorService']; 25386 25387 function fbPage($rootScope, websiteEditorService) { 25388 return { 25389 restrict: 'C', 25390 link: function(scope, element) { 25391 var widgetToRender = angular.fromJson(widgets[scope.widget]); 25392 25393 // Set view model parameters. 25394 for(var parameter in widgetToRender.parameters) { 25395 switch (widgetToRender.parameters[parameter].id) { 25396 case 'facebookUrl': 25397 element[0].dataset.href = widgetToRender.parameters[parameter].value; 25398 break; 25399 } 25400 } 25401 25402 var listener = $rootScope.$on(`onParametersChange-${scope.widget}`, function(event, data) { 25403 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: scope.widget, parameters: data }) 25404 .then(function() { 25405 // Save parameters. 25406 for (var parameter in widgetToRender.parameters) { 25407 switch (widgetToRender.parameters[parameter].id) { 25408 case 'facebookUrl': 25409 element[0].dataset.href = data['facebookUrl']; 25410 25411 // Recreacte the Facebook Page plugin. 25412 FB.XFBML.parse(element.parent()[0]); 25413 break; 25414 } 25415 } 25416 }) 25417 .catch(function(error) { 25418 bugsnag.notify(error); 25419 }); 25420 }); 25421 25422 scope.$on('$destroy', listener); 25423 25424 return angular.isDefined(FB) && FB !== null ? FB.XFBML.parse(element.parent()[0]) : void 0; 25425 } 25426 }; 25427 } 25428})();; 25429(function () { 25430 'use strict'; 25431 25432 angular 25433 .module('app.directives') 25434 .directive('socialMedias', socialMedias) 25435 25436 socialMedias.$inject = ['$compile']; 25437 25438 function socialMedias($compile) { 25439 return { 25440 restrict: 'E', 25441 scope: { 25442 widget: '=' 25443 }, 25444 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/social-medias/social-medias.tpl.html', 25445 controller: 'SocialMediasWidgetController', 25446 controllerAs: 'socialMedias', 25447 link: function (scope, element, attributes, controller) { 25448 var vm = controller; 25449 25450 vm.refresh = function() { 25451 //scope.$destroy(); 25452 25453 // Remove the actual ngTweet wrapper. 25454 var ngTweetWrapper = element.find('.ngtweet-wrapper'); 25455 ngTweetWrapper.remove(); 25456 25457 // Add a twitter timeline. 25458 var twitter = element.find('div.twitter'); 25459 var twitterTimeline = $compile('<twitter-timeline><a class="twitter-timeline" href="{{ socialMedias.getTwitterUrl() }}">...</a></twitter-timeline>')(scope); 25460 twitter.append(twitterTimeline); 25461 }; 25462 } 25463 }; 25464 } 25465})();; 25466(function () { 25467 'use strict'; 25468 25469 angular 25470 .module('app.directives') 25471 .controller('SocialMediasWidgetController', SocialMediasWidgetController); 25472 25473 SocialMediasWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 25474 25475 function SocialMediasWidgetController($rootScope, $scope, websiteEditorService) { 25476 var vm = this; 25477 25478 var widgetDefinition = angular.fromJson(widgets[$scope.widget]); 25479 25480 // Set view model parameters. 25481 for(var parameter in widgetDefinition.parameters) { 25482 switch (widgetDefinition.parameters[parameter].id) { 25483 case 'twitterUsername': 25484 vm.twitter = { 25485 username: widgetDefinition.parameters[parameter].value 25486 }; 25487 break; 25488 case 'facebookUrl': 25489 vm.facebook = { 25490 url: widgetDefinition.parameters[parameter].value 25491 }; 25492 break; 25493 } 25494 } 25495 25496 vm.getTwitterUrl = function() { 25497 return `https://twitter.com/${vm.twitter.username}`; 25498 }; 25499 25500 // Triggered when parameters are changed. 25501 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function(event, data) { 25502 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: $scope.widget, parameters: data }) 25503 .then(function() { 25504 // Save parameters. 25505 for (var parameter in widgetDefinition.parameters) { 25506 switch (widgetDefinition.parameters[parameter].id) { 25507 case 'twitterUsername': 25508 widgetDefinition.parameters[parameter].value = data.twitterUsername; 25509 vm.twitter = { 25510 username: data.twitterUsername 25511 }; 25512 25513 // TODO Destroy the ngTweet. 25514 vm.refresh();
25515 break; 25516 case 'facebookUrl': 25517 widgetDefinition.parameters[parameter].value = data.facebookUrl; 25518 vm.facebook = { 25519 url: data.facebookUrl 25520 }; 25521 break; 25522 } 25523 } 25524 25525 // Update the variable. 25526 widgets[$scope.widget] = angular.toJson(widgetDefinition); 25527 }) 25528 .catch(function(error) { 25529 bugsnag.notify(error); 25530 }); 25531 }); 25532 25533 $scope.$on('$destroy', listener); 25534 } 25535})(); 25536; 25537(function () { 25538 'use strict'; 25539 25540 angular 25541 .module('app.directives') 25542 .controller('SocialMediaIconsWidgetController', SocialMediaIconsWidgetController); 25543 25544 SocialMediaIconsWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 25545 25546 function SocialMediaIconsWidgetController($rootScope, $scope, websiteEditorService) { 25547 var vm = this; 25548 25549 // Apply website values to view model object. 25550 vm.widget = angular.fromJson(widgets[$scope.widget]); 25551 25552 // Triggered when parameters are changed. 25553 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 25554 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 25555 .then(function (response) { 25556 // Save parameters. 25557 for (var parameter in vm.widget.parameters) { 25558 switch (vm.widget.parameters[parameter].id) { 25559 case 'facebookPage': 25560 vm.widget.parameters[parameter].value = data.facebookPage; 25561 break; 25562 25563 case 'twitterPage': 25564 vm.widget.parameters[parameter].value = data.twitterPage; 25565 break; 25566 25567 case 'instagramPage': 25568 vm.widget.parameters[parameter].value = data.instagramPage; 25569 break; 25570 25571 case 'youtubePage': 25572 vm.widget.parameters[parameter].value = data.youtubePage; 25573 break; 25574 } 25575 } 25576 25577 // Build the list of social medias. 25578 buildSocialMediasList(); 25579 25580 // Update the variable. 25581 widgets[$scope.widget] = angular.toJson(vm.widget); 25582 }) 25583 .catch(function (error) { 25584 bugsnag.notify(error); 25585 }); 25586 }); 25587 25588 $scope.$on('$destroy', listener); 25589 25590 // Build the list of social medias. 25591 buildSocialMediasList(); 25592 25593 function buildSocialMediasList() { 25594 vm.all = []; 25595 25596 // Set view model parameters. 25597 for (var parameter in vm.widget.parameters) { 25598 switch (vm.widget.parameters[parameter].id) { 25599 case 'facebookPage': 25600 if (vm.widget.parameters[parameter].value.length > 0) { 25601 vm.all.push({ 25602 name: 'Facebook', 25603 url: vm.widget.parameters[parameter].value, 25604 class: 'mdi-facebook' 25605 }); 25606 } 25607 break; 25608 25609 case 'twitterPage': 25610 if (vm.widget.parameters[parameter].value.length > 0) { 25611 vm.all.push({ 25612 name: 'Twitter', 25613 url: vm.widget.parameters[parameter].value, 25614 class: 'mdi-twitter' 25615 }); 25616 } 25617 break; 25618 25619 case 'instagramPage': 25620 if (vm.widget.parameters[parameter].value.length > 0) { 25621 vm.all.push({ 25622 name: 'Instagram', 25623 url: vm.widget.parameters[parameter].value, 25624 class: 'mdi-instagram' 25625 }); 25626 } 25627 break; 25628 25629 case 'youtubePage': 25630 if (vm.widget.parameters[parameter].value.length > 0) { 25631 vm.all.push({ 25632 name: 'YouTube', 25633 url: vm.widget.parameters[parameter].value, 25634 class: 'mdi-youtube' 25635 }); 25636 } 25637 break; 25638 } 25639 } 25640 } 25641 } 25642})(); 25643; 25644(function () { 25645 'use strict'; 25646 25647 angular 25648 .module('app.directives') 25649 .directive('socialMediaIcons', socialMediaIcons) 25650 25651 socialMediaIcons.$inject = []; 25652 25653 function socialMediaIcons($compile) { 25654 return { 25655 restrict: 'E', 25656 scope: { 25657 widget: '=' 25658 }, 25659 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/social-medias/icons/social-media-icons.tpl.html', 25660 controller: 'SocialMediaIconsWidgetController', 25661 controllerAs: 'socialMediaIcons' 25662 }; 25663 } 25664})();; 25665(function () { 25666 'use strict'; 25667 25668 angular 25669 .module('app.directives') 25670 .controller('SocialMediasPremiumWidgetController', SocialMediasPremiumWidgetController); 25671 25672 SocialMediasPremiumWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService', 'SocialMediaService']; 25673 25674 function SocialMediasPremiumWidgetController($rootScope, $scope, websiteEditorService, socialMediaService) { 25675 var vm = this; 25676 25677 vm.widget = angular.fromJson(widgets[$scope.widget]); 25678 vm.tiktokAccount = null; 25679 vm.instagramAccount = null; 25680 vm.facebookAccount = null; 25681 vm.posts = []; 25682 vm.colors = { spacer: "#000000", icons: "#000000", text: "#000000" }; 25683 25684 vm.getStyle = function () { 25685 var style = {}; 25686 if (!vm.widgetTransparency) { 25687 style['background-color'] = vm.backgroundColor; 25688 style['background-size'] = 'cover'; 25689 style['background-position'] = 'center'; 25690 style['border-color'] = vm.border.color; 25691 } 25692 25693 style['border-width'] = `${vm.border.width}px`; 25694 style['border-color'] = vm.border.color;
25695 style['border-radius'] = `${vm.border.radius}px`; 25696 return style; 25697 } 25698 25699 // Set view model parameters. 25700 for (var parameter in vm.widget.parameters) { 25701 switch (vm.widget.parameters[parameter].id) { 25702 case 'tiktokAccount': 25703 vm.tiktokAccount = vm.widget.parameters[parameter].value; 25704 break; 25705 case 'instagramAccount': 25706 vm.instagramAccount = vm.widget.parameters[parameter].value; 25707 break; 25708 case 'facebookAccount': 25709 vm.facebookAccount = vm.widget.parameters[parameter].value; 25710 break; 25711 case 'facebookPage': 25712 vm.facebookPage = vm.widget.parameters[parameter].value; 25713 break; 25714 case 'widgetTransparency': 25715 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 25716 break; 25717 case 'backgroundColor': 25718 vm.backgroundColor = vm.widget.parameters[parameter].value; 25719 break; 25720 case 'border': 25721 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 25722 break; 25723 case 'spacerColor': 25724 vm.colors.spacer = vm.widget.parameters[parameter].value; 25725 break; 25726 case 'iconsColor': 25727 vm.colors.icons = vm.widget.parameters[parameter].value; 25728 break; 25729 case 'textColor': 25730 vm.colors.text = vm.widget.parameters[parameter].value; 25731 break; 25732 } 25733 } 25734 25735 getSocialMedias(); 25736 25737 // Triggered when parameters are changed. 25738 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 25739 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 25740 .then(function (response) { 25741 // Save parameters. 25742 25743 for (var parameter in vm.widget.parameters) { 25744 switch (vm.widget.parameters[parameter].id) { 25745 case 'tiktokAccount': 25746 vm.widget.parameters[parameter].value = data.tiktokAccount; 25747 vm.tiktokAccount = data.tiktokAccount; 25748 break; 25749 case 'instagramAccount': 25750 vm.widget.parameters[parameter].value = data.instagramAccount; 25751 vm.instagramAccount = data.instagramAccount; 25752 break; 25753 case 'facebookAccount': 25754 vm.widget.parameters[parameter].value = data.facebookAccount; 25755 vm.facebookAccount = data.facebookAccount; 25756 break; 25757 case 'facebookPage': 25758 vm.widget.parameters[parameter].value = data.facebookPage; 25759 vm.facebookPage = data.facebookPage; 25760 break; 25761 case 'widgetTransparency': 25762 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 25763 vm.widgetTransparency = data.widgetTransparency; 25764 break; 25765 case 'backgroundColor': 25766 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 25767 vm.backgroundColor = data.backgroundColor; 25768 break; 25769 case 'border': 25770 vm.widget.parameters[parameter].value = data.border; 25771 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 25772 break; 25773 case 'spacerColor': 25774 vm.widget.parameters[parameter].value = data.spacerColor.toString(); 25775 vm.colors.spacer = data.spacerColor; 25776 break; 25777 case 'iconsColor': 25778 vm.widget.parameters[parameter].value = data.iconsColor.toString(); 25779 vm.colors.icons = data.iconsColor; 25780 break; 25781 case 'textColor': 25782 vm.widget.parameters[parameter].value = data.textColor.toString(); 25783 vm.colors.text = data.textColor; 25784 break; 25785 } 25786 } 25787 25788 // Update the variable. 25789 widgets[$scope.widget] = angular.toJson(vm.widget); 25790 25791 getSocialMedias(); 25792 }) 25793 .catch(function (error) { 25794 bugsnag.notify(error); 25795 }); 25796 }); 25797 25798 function getSocialMedias() { 25799 var socialMedia = []; 25800 25801 if (vm.facebookAccount && vm.facebookPage) { 25802 socialMedia.push(`${vm.facebookAccount}_${vm.facebookPage}`) 25803 } 25804 25805 if (vm.tiktokAccount) 25806 socialMedia.push(vm.tiktokAccount); 25807 25808 if (vm.instagramAccount) 25809 socialMedia.push(vm.instagramAccount); 25810 25811 if (socialMedia.length > 0) { 25812 socialMediaService.getLatestPosts(__solutionId__, socialMedia).then(function (response) { 25813 vm.posts = response.data; 25814 }); 25815 } 25816 } 25817 } 25818})(); 25819; 25820(function () { 25821 'use strict'; 25822 25823 angular 25824 .module('app.directives') 25825 .directive('socialMediasPremium', socialMediasPremium) 25826 25827 socialMediasPremium.$inject = ['$compile']; 25828 25829 function socialMediasPremium($compile) { 25830 return { 25831 restrict: 'E', 25832 scope: { 25833 widget: '=' 25834 }, 25835 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/social-medias-premium/social-medias-premium.tpl.html', 25836 controller: 'SocialMediasPremiumWidgetController', 25837 controllerAs: 'socialMediasPremium', 25838 link: function (scope, element, attributes, controller) { 25839 var vm = controller; 25840 25841 } 25842 }; 25843 } 25844})();; 25845(function () { 25846 'use strict'; 25847 25848 angular 25849 .module('app.directives') 25850 .controller('SocialMediaPremiumWidgetController', SocialMediaPremiumWidgetController); 25851 25852 SocialMediaPremiumWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService', 'SocialMediaService']; 25853 25854 function SocialMediaPremiumWidgetController($rootScope, $scope, websiteEditorService, socialMediaService) { 25855 var vm = this; 25856 vm.truncate = _.truncate; 25857 } 25858})(); 25859; 25860(function () { 25861 'use strict'; 25862 25863 angular 25864 .module('app.directives') 25865 .directive('socialMediaPremium', socialMediaPremium) 25866 25867 socialMediaPremium.$inject = ['$compile']; 25868 25869 function socialMediaPremium($compile) { 25870 return { 25871 restrict: 'E', 25872 scope: { 25873 socialMedia: '=', 25874 colors: '=' 25875 }, 25876 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/social-medias-premium/social-media-premium/social-media-premium.tpl.html', 25877 controller: 'SocialMediaPremiumWidgetController', 25878 controllerAs: 'socialMediaPremium', 25879 link: function (scope, element, attributes, controller) { 25880 var vm = controller; 25881 25882 } 25883 }; 25884 } 25885})();; 25886(function () { 25887 'use strict'; 25888 25889 angular 25890 .module('app.directives') 25891 .controller('StatisticsWidgetController', StatisticsWidgetController); 25892 25893 StatisticsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$translate', 'HashService', 'WebsiteEditorService']; 25894 25895 function StatisticsWidgetController($rootScope, $scope, $localStorage, $translate, hashService, websiteEditorService) { 25896 //State variables ---------- 25897 var vm = this; 25898 25899 vm.tabs = hashService.STATISTICS_TABS; 25900 vm.selectedDirectly = false; 25901 vm.activeTab = vm.tabs.LEADERS; 25902 vm.sportId = $localStorage.solution.sportId; 25903 vm.showGoalies = false; 25904 vm.showLeaders = false; 25905 vm.showPlayers = false; 25906 vm.showSuspensions = false; 25907 vm.showTeams = false; 25908 vm.showPitchers = false; 25909 vm.showDefense = false; 25910 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 25911 25912 // TODO Get stats to displayed. 25913 // TODO => widget... 25914 // TODO Get parameter of the widget.... 25915 vm.widget = angular.fromJson(widgets[$scope.widget]); 25916 25917 // Default value (temp) 25918 vm.nbPlayersDisplayedPerPage = 12; 25919 vm.nbGoalersDisplayedPerPage = 12; 25920 25921 //State functions ---------- 25922 vm.clickTab = function (tab) { 25923 vm.selectedDirectly = true; 25924 vm.activeTab = vm.tabs[tab]; 25925 hashService.setParams({ tab: vm.tabs[tab] }, true); 25926 } 25927 25928 vm.isActive = function (tab) { 25929 return vm.activeTab === vm.tabs[tab]; 25930 } 25931 25932 // Set view model parameters.
25933 for (var parameter in vm.widget.parameters) { 25934 switch (vm.widget.parameters[parameter].id) { 25935 case 'showPlayers': 25936 vm.showPlayers = (vm.widget.parameters[parameter].value === 'true'); 25937 break; 25938 case 'showLeaders': 25939 vm.showLeaders = (vm.widget.parameters[parameter].value === 'true'); 25940 break; 25941 case 'showTeams': 25942 vm.showTeams = (vm.widget.parameters[parameter].value === 'true'); 25943 break; 25944 case 'showGoalies': 25945 vm.showGoalies = (vm.widget.parameters[parameter].value === 'true'); 25946 break; 25947 case 'showPitchers': 25948 vm.showPitchers = (vm.widget.parameters[parameter].value === 'true'); 25949 break; 25950 case 'showDefense': 25951 vm.showDefense = (vm.widget.parameters[parameter].value === 'true'); 25952 break; 25953 case 'showSuspensions': 25954 vm.showSuspensions = (vm.widget.parameters[parameter].value === 'true'); 25955 break; 25956 case 'nbPlayersDisplayedPerPage': 25957 vm.nbPlayersDisplayedPerPage = vm.widget.parameters[parameter].value; 25958 break; 25959 case 'nbGoalersDisplayedPerPage': 25960 vm.nbGoalersDisplayedPerPage = vm.widget.parameters[parameter].value; 25961 break; 25962 case 'columnsDisplaySelectPlayers': 25963 vm.playersColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 25964 break; 25965 case 'columnsDisplaySelectGoalies': 25966 vm.goaliesColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 25967 break; 25968 case 'columnsDisplaySelectTeams': 25969 vm.teamsColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 25970 break; 25971 case 'columnsDisplaySelectPitchers': 25972 vm.pitchersColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 25973 break; 25974 case 'columnsDisplaySelectDefense': 25975 vm.defenseColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 25976 break; 25977 } 25978 25979 } 25980 25981 setDefaultActiveTab(); 25982 25983 //On component mount ---------- 25984 locationChange(); 25985 25986 //Listeners ---------- 25987 25988 /* 25989 Trigger locationChange() when tab changed 25990 */ 25991 $scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) { 25992 if (hashService.hasStatisticsTabsChanged(newUrl, oldUrl)) { 25993 locationChange(); 25994 } 25995 }); 25996 25997 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 25998 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 25999 .then(function (response) { 26000 for (var parameter in vm.widget.parameters) { 26001 switch (vm.widget.parameters[parameter].id) { 26002 case 'showPlayers': 26003 vm.widget.parameters[parameter].value = data.showPlayers.toString(); 26004 vm.showPlayers = data.showPlayers; 26005 break; 26006 case 'showLeaders': 26007 vm.widget.parameters[parameter].value = data.showLeaders.toString(); 26008 vm.showLeaders = data.showLeaders; 26009 break; 26010 case 'showTeams': 26011 vm.widget.parameters[parameter].value = data.showTeams.toString(); 26012 vm.showTeams = data.showTeams; 26013 break; 26014 case 'showGoalies': 26015 vm.widget.parameters[parameter].value = data.showGoalies.toString(); 26016 vm.showGoalies = data.showGoalies; 26017 break; 26018 case 'showPitchers': 26019 vm.widget.parameters[parameter].value = data.showPitchers.toString(); 26020 vm.showPitchers = data.showPitchers; 26021 break; 26022 case 'showDefense': 26023 vm.widget.parameters[parameter].value = data.showDefense.toString(); 26024 vm.showDefense = data.showDefense; 26025 break; 26026 case 'showSuspensions': 26027 vm.widget.parameters[parameter].value = data.showSuspensions.toString(); 26028 vm.showSuspensions = data.showSuspensions; 26029 break; 26030 case 'columnsDisplaySelectTeams': 26031 vm.widget.parameters[parameter].value = data.columnsDisplaySelectTeams; 26032 vm.teamsColumns= angular.fromJson(data.columnsDisplaySelectTeams.replace(/\'/g, '"')); 26033 break; 26034 case 'columnsDisplaySelectPlayers': 26035 vm.widget.parameters[parameter].value = data.columnsDisplaySelectPlayers; 26036 vm.playersColumns = angular.fromJson(data.columnsDisplaySelectPlayers.replace(/\'/g, '"')); 26037 break; 26038 case 'columnsDisplaySelectGoalies': 26039 vm.widget.parameters[parameter].value = data.columnsDisplaySelectGoalies; 26040 vm.goaliesColumns = angular.fromJson(data.columnsDisplaySelectGoalies.replace(/\'/g, '"')); 26041 break; 26042 case 'columnsDisplaySelectPitchers': 26043 vm.widget.parameters[parameter].value = data.columnsDisplaySelectPitchers; 26044 vm.pitchersColumns = angular.fromJson(data.columnsDisplaySelectPitchers.replace(/\'/g, '"')); 26045 break; 26046 case 'columnsDisplaySelectDefense': 26047 vm.widget.parameters[parameter].value = data.columnsDisplaySelectDefense; 26048 vm.defenseColumns = angular.fromJson(data.columnsDisplaySelectDefense.replace(/\'/g, '"')); 26049 break; 26050 26051 } 26052 } 26053 widgets[$scope.widget] = angular.toJson(vm.widget); 26054 }) 26055 .catch(function (error) { 26056 bugsnag.notify(error); 26057 }); 26058 }); 26059 26060 26061 $scope.$on('$destroy', listener); 26062 26063 function setDefaultActiveTab() { 26064 if (vm.showLeaders) { 26065 vm.activeTab = vm.tabs.LEADERS; 26066 } 26067 else if (vm.showTeams) { 26068 vm.activeTab = vm.tabs.TEAMS; 26069 } 26070 else if (vm.showPlayers) { 26071 vm.activeTab = vm.tabs.PLAYERS; 26072 } 26073 else if (vm.showGoalies) { 26074 vm.activeTab = vm.tabs.GOALIES; 26075 } 26076 else if (vm.showSuspensions) { 26077 vm.activeTab = vm.tabs.SUSPENSIONS; 26078 } 26079 } 26080 26081 function locationChange() { 26082 if (!vm.selectedDirectly) { 26083 const filtersUrl = hashService.getParams(); 26084 26085 const activeKey = Object.keys(vm.tabs).find(function (tab) { 26086 return vm.tabs[tab] === filtersUrl.tab; 26087 }) 26088 26089 if (activeKey) { 26090 vm.activeTab = vm.tabs[activeKey]; 26091 } else { 26092 setDefaultActiveTab(); 26093 } 26094 } 26095 vm.selectedDirectly = false; 26096 } 26097 } 26098})(); 26099; 26100(function () { 26101 'use strict'; 26102 26103 angular 26104 .module('app.directives') 26105 .directive('statistics', statistics) 26106 26107 statistics.$inject = []; 26108 26109 function statistics() { 26110 return { 26111 restrict: 'E', 26112 scope: { 26113 widget: '=' 26114 }, 26115 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/statistics.tpl.html', 26116 controller: 'StatisticsWidgetController', 26117 controllerAs: 'statistics' 26118 }; 26119 } 26120})();; 26121(function () { 26122 'use strict'; 26123 26124 angular 26125 .module('app.directives') 26126 .controller('LeadersViewWidgetController', LeadersViewWidgetController); 26127 26128 LeadersViewWidgetController.$inject = ['$scope', '$localStorage', 'StatisticService']; 26129 26130 function LeadersViewWidgetController($scope, $localStorage, statisticService) { 26131 var vm = this; 26132 vm.options = {}; 26133 vm.playerStatistics = []; 26134 vm.goalieStatistics = []; 26135 vm.sportId = $localStorage.solution.sportId; 26136 26137 $scope.$watch('[season, division]', function () { 26138 if ($scope.season && $scope.division) { 26139 vm.options = { 26140 seasonTypeId: 1, //filter.calendar, 26141 seasonId: $scope.season 26142 }; 26143 26144 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 26145 // Set the division identifier. 26146 vm.options.divisionId = $scope.division; 26147 } else { 26148 // Remove the property from options. 26149 delete vm.options.divisionId; 26150 } 26151 // Update leaders list. 26152 getLeaders(); 26153 } 26154 }); 26155 26156 function getLeaders() { 26157 // Get players statistics. 26158 switch (vm.sportId) { 26159 case 1: 26160 vm.options.statisticIds = [29, 6, 7, 31, 8]; 26161 break; 26162 26163 case 2: 26164 vm.options.statisticIds = [81, 77, 80, 69, 70, 71, 75, 79, 83, 82]; 26165 break; 26166 26167 case 4: 26168 vm.options.statisticIds = [133, 157, 139, 146]; 26169 break; 26170 26171 case 6: 26172 vm.options.statisticIds = [37, 38, 39, 40]; 26173 break; 26174 } 26175 26176 26177 // Players 26178 statisticService.getPlayerLeadersByStatisticId(__solutionId__, vm.options) 26179 .then(function (response) { 26180 vm.playerStatistics = []; 26181 _.forEach(response.data, function (statistic) { 26182 vm.playerStatistics.push({ 26183 id: statistic.StatTypeId, 26184 name: statisticService.getPlayerStatisticByStatId(statistic.StatTypeId).name, 26185 players: formatValues(statistic.StatTypeId, statistic.Players
26185) 26186 }); 26187 }); 26188 }) 26189 .catch(function (error) { 26190 bugsnag.notify(error); 26191 }); 26192 26193 switch (vm.sportId) { 26194 case 1: // Get goaltender statistics 26195 vm.options.statisticIds = [15, 25, 30, 32]; 26196 break; 26197 26198 case 2: // Get pitcher statistics 26199 vm.options.statisticIds = [96, 100, 98, 126, 91]; 26200 break; 26201 26202 case 6: //Get goalkeeper statistics 26203 vm.options.statisticIds = [46]; 26204 break; 26205 } 26206 26207 if (vm.sportId !== 4) { 26208 statisticService.getPlayerLeadersByStatisticId(__solutionId__, vm.options) 26209 .then(function (response) { 26210 vm.goalieStatistics = []; 26211 26212 _.forEach(response.data, function (statistic) { 26213 vm.goalieStatistics.push({ 26214 id: statistic.StatTypeId, 26215 name: statisticService.getPlayerStatisticByStatId(statistic.StatTypeId).name, 26216 players: formatValues(statistic.StatTypeId, statistic.Players) 26217 }); 26218 }); 26219 }) 26220 .catch(function (error) { 26221 bugsnag.notify(error); 26222 }); 26223 } 26224 } 26225 26226 function formatValues(statisticId, players) { 26227 switch (statisticId) { 26228 case 30: // Save Percentage 26229 _.forEach(players, function (player) { 26230 player.Value = parseFloat(player.Value / 1000).toFixed(3); 26231 }); 26232 break; 26233 26234 case 31: // Points per game 26235 case 32: // Points per game 26236 _.forEach(players, function (player) { 26237 player.Value = parseFloat(player.Value / 100).toFixed(2); 26238 }); 26239 break; 26240 } 26241 26242 return players; 26243 } 26244 } 26245})(); 26246; 26247(function () { 26248 'use strict'; 26249 26250 angular 26251 .module('app.directives') 26252 .directive('leadersView', leadersView) 26253 26254 leadersView.$inject = []; 26255 26256 function leadersView() { 26257 return { 26258 restrict: 'E', 26259 scope: { 26260 season: '=', 26261 division: '=' 26262 }, 26263 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/leaders/view/leaders-view.tpl.html', 26264 controller: 'LeadersViewWidgetController', 26265 controllerAs: 'leadersView' 26266 }; 26267 } 26268})();; 26269(function () { 26270 'use strict'; 26271 26272 angular 26273 .module('app.directives') 26274 .controller('LeaderController', LeaderController); 26275 26276 LeaderController.$inject = ['$rootScope', '$scope', 'UrlService']; 26277 26278 function LeaderController($rootScope, $scope, urlService) { 26279 var vm = this; 26280 vm.url = urlService; 26281 26282 vm.playerSelected = $scope.players[0]; // Initialize the leader as the one selected. 26283 26284 var listener = $rootScope.$on(`${$scope.statisticId}`, function(e, args) { 26285 //debugger; 26286 vm.playerSelected = $scope.players[parseInt(args)]; 26287 $scope.$apply(); 26288 }); 26289 26290 $scope.$on('$destroy', listener); 26291 } 26292})();; 26293(function () { 26294 'use strict'; 26295 26296 angular 26297 .module('app.directives') 26298 .directive('leader', leader) 26299 26300 leader.$inject = []; 26301 26302 function leader() { 26303 return { 26304 restrict: 'E', 26305 scope: { 26306 players: '=', 26307 statisticId: '=' 26308 }, 26309 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/leaders/leader/leader.tpl.html', 26310 controller: 'LeaderController', 26311 controllerAs: 'leader' 26312 }; 26313 } 26314})();; 26315(function () { 26316 'use strict'; 26317 26318 angular 26319 .module('app.directives') 26320 .controller('LeaderListController', LeaderListController); 26321 26322 LeaderListController.$inject = ['$scope']; 26323 26324 function LeaderListController($scope) { 26325 var vm = this; 26326 vm.players = $scope.players; 26327 vm.playerSelected = vm.players[0]; // Initialize the selected player. 26328 } 26329})(); 26330; 26331(function () { 26332 'use strict'; 26333 26334 angular 26335 .module('app.directives') 26336 .directive('leaderList', leaderList) 26337 26338 leaderList.$inject = ['$rootScope']; 26339 26340 function leaderList(rootScope) { 26341 return { 26342 restrict: 'E', 26343 scope: { 26344 players: '=', 26345 statisticId: '=' 26346 }, 26347 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/leaders/list/leader-list.tpl.html', 26348 controller: 'LeaderListController', 26349 controllerAs: 'leaderList', 26350 link: function(scope, element, attr, controller) { 26351 var vm = controller; 26352 var maxBound = 0; 26353 var minBound = 0; 26354 var gaugeStep = 80; 26355 if (scope.players && scope.players.length > 0) { 26356 maxBound = scope.players[0].DisplayValue; 26357 minBound = scope.players[scope.players.length - 1].DisplayValue; 26358 gaugeStep = 80 / (maxBound - minBound); // 80 = 80% 26359 } 26360 26361 vm.getStatisticGaugeValue = function(value) { 26362 if (value === maxBound) { 26363 return '100%'; 26364 } else if (value === minBound) { 26365 return '20%'; 26366 } else { 26367 var gaugeValue = (gaugeStep * (value - minBound)) + 20; 26368 return `${gaugeValue}%`; 26369 } 26370 }; 26371 26372 angular.element(function () { 26373 var playerElements = element.find('li.player'); 26374 playerElements.on('mouseover', selectPlayer); 26375 }); 26376 26377 function selectPlayer(e) { 26378 // Clear «active» class. 26379 var playerElements = element.find('li.player'); 26380 _.forEach(playerElements, function(playerElements) { 26381 playerElements.classList.remove('active'); 26382 }); 26383 26384 // Set «active» class name. 26385 e.currentTarget.classList.add('active'); 26386 26387 // hrow event with the selected player. 26388 vm.playerSelected = scope.players[parseInt(e.currentTarget.attributes.id.value)]; 26389 26390 // Emit the index of the selected element. 26391 rootScope.$emit(`${scope.statisticId}`, e.currentTarget.attributes.id.value); 26392 } 26393 } 26394 }; 26395 } 26396})();; 26397(function () { 26398 'use strict'; 26399 26400 angular 26401 .module('app.directives') 26402 .controller('LeadersWidgetController', LeadersWidgetController); 26403 26404 LeadersWidgetController.$inject = ['$scope']; 26405 26406 function LeadersWidgetController($scope) { 26407 var vm = this; 26408 vm.season = undefined; 26409 vm.division = undefined; 26410 26411 vm.filter = function(filter) { 26412 vm.season = filter.season; 26413 vm.division = filter.division; 26414 }; 26415 } 26416})(); 26417; 26418(function () { 26419 'use strict'; 26420 26421 angular 26422 .module('app.directives') 26423 .directive('leaders', leaders) 26424 26425 leaders.$inject = []; 26426 26427 function leaders() { 26428 return { 26429 restrict: 'E', 26430 scope: { 26431 widget: '=', 26432 }, 26433 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/leaders/leaders.tpl.html', 26434 controller: 'LeadersWidgetController', 26435 controllerAs: 'leaders' 26436 }; 26437 } 26438})();; 26439(function () { 26440 'use strict'; 26441 26442 angular 26443 .module('app.directives') 26444 .controller('GoalerStatisticsController', GoalerStatisticsController); 26445 26446 GoalerStatisticsController.$inject = ['$scope', '$translate']; 26447 26448 function GoalerStatisticsController($scope, $translate) { 26449 var vm = this; 26450 vm.season = undefined; 26451 vm.division = undefined; 26452 vm.startDate = undefined; 26453 vm.endDate = undefined; 26454 vm.prependSeasons = [ 26455 { Id: 'career-regular', Name: $translate.instant('directives.widgets.statistics.filters.season.careerRegularSeason') }, 26456 { Id: 'career-playoffs', Name: $translate.instant('directives.widgets.statistics.filters.season.careerPlayoffs') }, 26457 { Id: 'career-total', Name: $translate.instant('directives.widgets.statistics.filters.season.careerTotal') } 26458 ] 26459 26460 vm.applyMoreFilters = function (filter) { 26461 vm.season = filter.season; 26462 vm.division = filter.division; 26463 vm.startDate = filter.startDate; 26464 vm.endDate = filter.endDate; 26465 }; 26466 26467 vm.filter = function(filter) { 26468 vm.season = filter.season; 26469 vm.division = filter.division; 26470 }; 26471 } 26472})(); 26473; 26474(function () { 26475 'use strict'; 26476 26477 angular 26478 .module('app.directives') 26479 .directive('goalerStatistics', goalerStatistics) 26480 26481 goalerStatistics.$inject = []; 26482 26483 function goalerStatistics() { 26484 return { 26485 restrict: 'E', 26486 scope: { 26487 pageSize: '=', 26488 columns: '=', 26489 }, 26490 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/goaler/goaler-statistics.tpl.html', 26491 controller: 'GoalerStatisticsController', 26492 controllerAs: 'goalerStatistics' 26493 }; 26494 } 26495})();; 26496(function () { 26497 'use strict'; 26498 26499 angular 26500 .module('app.directives') 26501 .controller('GoalerStatisticsViewWidgetController', GoalerStatisticsViewWidgetController); 26502 26503 GoalerStatisticsViewWidgetController.$inject = ['$scope', '$localStorage', '$window', 'UrlService', 'StatisticService']; 26504 26505 function GoalerStatisticsViewWidgetController($scope, $localStorage, $window, urlService, statisticService) { 26506 var vm = this; 26507 vm.url = urlService; 26508 vm.columns = undefined; 26509 vm.options = undefined; 26510 vm.sportId = $localStorage.solution.sportId; 26511 26512 buildColumns($scope.columns); 26513 26514 vm.showStat = function (column) { 26515 if (isMobile() && column.visibleMobile) { 26516 return true; 26517 } else if (!isMobile() && column.visibleDesktop) { 26518 return true; 26519 } 26520 return false; 26521 } 26522 26523 //Watchers 26524 $scope.$watch('[season, division]', function () { 26525 if ($scope.season && $scope.division) { 26526 vm.appliedFilters = false; 26527 clearMoreFilters(); 26528 26529 if ($scope.season == "career-regular") { 26530 vm.options.seasonId = null; 26531 vm.options.seasonTypeId = 1; 26532 } 26533 else if ($scope.season == "career-playoffs") { 26534 vm.options.seasonId = null; 26535 vm.options.seasonTypeId = 2; 26536 } 26537 else if ($scope.season == "career-total") { 26538 vm.options.seasonId = null; 26539 vm.options.seasonTypeId = null; 26540 } 26541 else { 26542 vm.options.seasonId = $scope.season; 26543 } 26544 26545 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 26546 // Set the division identifier. 26547 vm.options.divisionId = $scope.division; 26548 } else { 26549 // Remove the property from options. 26550 delete vm.options.divisionId; 26551 } 26552 26553 // Update goaler statistics list. 26554 getGoalerStatistics(); 26555 } 26556 }); 26557 26558 $scope.$watch('[startDate, endDate]', function (newValue, oldValue) { 26559 if ($scope.startDate && $scope.endDate) { 26560 vm.appliedFilters = true; 26561 vm.options.seasonId = $scope.season; 26562 vm.options.startDate = $scope.startDate; 26563 vm.options.endDate = $scope.endDate; 26564 26565 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 26566 // Set the division identifier. 26567 vm.options.divisionId = $scope.division; 26568 } else { 26569 // Remove the property from options. 26570 delete vm.options.divisionId; 26571 } 26572 26573 // Update player statistics list. 26574 getGoalerStatistics(); 26575 } else if (oldValue[0] || oldValue[1]) { 26576 vm.appliedFilters = false; 26577 vm.options.startDate = undefined; 26578 vm.options.endDate = undefined; 26579 getGoalerStatistics(); 26580 } 26581 }); 26582 26583 $scope.$watch('columns', function (columns) { 26584 buildColumns(columns); 26585 }) 26586 26587 //Component mount 26588 switch (vm.sportId) { 26589 case 1: 26590 // TODO Initialize column sort / change hardcoded value. 26591 _.find(vm.columns, function (column) { 26592 return column.id === 32; 26593 }).sort = 'asc'; 26594 26595 vm.options = { 26596 page: 1, 26597 pageSize: $scope.pageSize, 26598 sortOrder: 'asc', 26599 sortStatId: 32, 26600 positionType: 1 26601 }; 26602 break; 26603 26604 case 6: 26605 // TODO Initialize column sort / change hardcoded value. 26606 _.find(vm.columns, function (column) { 26607 return column.id === 46; 26608 }).sort = 'desc'; 26609 26610 vm.options = { 26611 page: 1, 26612 pageSize: $scope.pageSize, 26613 sortOrder: 'desc', 26614 sortStatId: 46, 26615 positionType: 4 26616 }; 26617 break; 26618 26619 case 14: 26620 // TODO Initialize column sort / change hardcoded value. 26621 _.find(vm.columns, function (column) { 26622 return column.id === 60; 26623 }).sort = 'desc'; 26624 26625 vm.options = { 26626 page: 1, 26627 pageSize: $scope.pageSize, 26628 sortOrder: 'desc', 26629 sortStatId: 60, 26630 positionType: 17 26631 }; 26632 break; 26633 26634 } 26635 26636 //State functions 26637 vm.getStatisticValue = function (player, statisticId) { 26638 if (player.Stats.length > 0) { 26639 26640 var playerStat = _.find(player.Stats, function (statistic) { 26641 return statistic.StatTypeId === statisticId; 26642 }); 26643 26644 if (playerStat) { 26645 return playerStat.DisplayValue; 26646 } 26647 } 26648 26649 return '0'; 26650 }; 26651 26652 vm.sort = function (column) { 26653 // Reset columns sort. 26654 _.forEach(vm.columns, function (_column) { 26655 if (_column.id !== column.id) { 26656 _column.sort = ''; 26657 } 26658 }); 26659 26660 if (angular.isUndefined(column.sort)) { 26661 column.sort = 'desc'; 26662 vm.options.sortOrder = column.sort; 26663 } else { 26664 // Toggle sort order. 26665 column.sort = column.sort === 'desc' 26666 ? column.sort = 'asc' 26667 : column.sort = 'desc'; 26668 26669 vm.options.sortOrder = column.sort;
26669 26670 } 26671 26672 // Set the sort statistic id. 26673 vm.options.sortStatId = column.id; 26674 26675 // Update goaler statistics list. 26676 getGoalerStatistics(); 26677 }; 26678 26679 vm.clickPage = function (page) { 26680 // Set the page number. 26681 vm.options.page = page; 26682 26683 // Update goaler statistics list. 26684 getGoalerStatistics(); 26685 }; 26686 26687 vm.clickPrevious = function () { 26688 // Decrement the page number. 26689 vm.options.page -= 1; 26690 26691 // Update goaler statistics list. 26692 getGoalerStatistics(); 26693 }; 26694 26695 vm.clickNext = function () { 26696 // Increment the page number. 26697 vm.options.page += 1; 26698 26699 // Update goaler statistics list. 26700 getGoalerStatistics(); 26701 }; 26702 26703 //Helper functions 26704 function getGoalerStatistics() { 26705 if (vm.appliedFilters) { 26706 statisticService.getPlayerStatisticsDateRangeBySolutionId(__solutionId__, vm.options) 26707 .then(function (response) { 26708 // Get the total count of goalers. 26709 vm.totalCount = response.data.TotalCount; 26710 vm.goalers = response.data.Results; // All goalers. 26711 }) 26712 .catch(function (error) { 26713 // TODO Bugsnag 26714 }); 26715 } else { 26716 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, vm.options) 26717 .then(function (response) { 26718 // Get the total count of goalers. 26719 vm.totalCount = response.data.TotalCount; 26720 26721 vm.goalers = response.data.Results; 26722 }) 26723 .catch(function (error) { 26724 // TODO Bugsnag 26725 }); 26726 } 26727 } 26728 26729 function clearMoreFilters() { 26730 delete vm.options.startDate; 26731 delete vm.options.endDate; 26732 } 26733 26734 // TODO Move somewhere in a service... 26735 function isMobile() { 26736 return $window.innerWidth <= 575; 26737 } 26738 26739 function buildColumns(columnsToDisplay) { 26740 vm.columns = []; 26741 columnsToDisplay.forEach(function (col) { 26742 var stat = statisticService.getPlayerStatisticByStatId(col.id); 26743 if (stat) { 26744 vm.columns.push({ 26745 id: col.id, 26746 visibleDesktop: col.visibleDesktop, 26747 visibleMobile: col.visibleMobile, 26748 name: stat.name, 26749 abbreviation: stat.abbreviation 26750 }) 26751 } 26752 }); 26753 } 26754 } 26755})(); 26756; 26757(function () { 26758 'use strict'; 26759 26760 angular 26761 .module('app.directives') 26762 .directive('goalerStatisticsView', goalerStatisticsView) 26763 26764 goalerStatisticsView.$inject = []; 26765 26766 function goalerStatisticsView() { 26767 return { 26768 restrict: 'E', 26769 scope: { 26770 season: '=', 26771 division: '=', 26772 startDate: '=', 26773 endDate: '=', 26774 pageSize: '=', 26775 columns: '=', 26776 }, 26777 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/goaler/view/goaler-statistics-view.tpl.html', 26778 controller: 'GoalerStatisticsViewWidgetController', 26779 controllerAs: 'goalerStatisticsView' 26780 }; 26781 } 26782})();; 26783(function () { 26784 'use strict'; 26785 26786 angular 26787 .module('app.directives') 26788 .controller('PitcherStatisticsController', PitcherStatisticsController); 26789 26790 PitcherStatisticsController.$inject = ['$scope', '$translate']; 26791 26792 function PitcherStatisticsController($scope, $translate) { 26793 var vm = this; 26794 vm.season = undefined; 26795 vm.division = undefined; 26796 vm.startDate = undefined; 26797 vm.endDate = undefined; 26798 vm.prependSeasons = [ 26799 { Id: 'career-regular', Name: $translate.instant('directives.widgets.statistics.filters.season.careerRegularSeason') }, 26800 { Id: 'career-playoffs', Name: $translate.instant('directives.widgets.statistics.filters.season.careerPlayoffs') }, 26801 { Id: 'career-total', Name: $translate.instant('directives.widgets.statistics.filters.season.careerTotal') } 26802 ] 26803 26804 vm.applyMoreFilters = function (filter) { 26805 vm.season = filter.season; 26806 vm.division = filter.division; 26807 vm.startDate = filter.startDate; 26808 vm.endDate = filter.endDate; 26809 }; 26810 26811 vm.filter = function(filter) { 26812 vm.season = filter.season; 26813 vm.division = filter.division; 26814 }; 26815 26816 } 26817})(); 26818; 26819(function () { 26820 'use strict'; 26821 26822 angular 26823 .module('app.directives') 26824 .directive('pitcherStatistics', pitcherStatistics) 26825 26826 pitcherStatistics.$inject = []; 26827 26828 function pitcherStatistics() { 26829 return { 26830 restrict: 'E', 26831 scope: { 26832 widget: '=', 26833 columns: '=', 26834 }, 26835 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/pitcher/pitcher-statistics.tpl.html', 26836 controller: 'PitcherStatisticsController', 26837 controllerAs: 'pitcherStatistics' 26838 }; 26839 } 26840})();; 26841(function () { 26842 'use strict'; 26843 26844 angular 26845 .module('app.directives') 26846 .controller('PitcherStatisticsViewWidgetController', PitcherStatisticsViewWidgetController); 26847 26848 PitcherStatisticsViewWidgetController.$inject = ['$scope', '$window', 'UrlService', 'StatisticService']; 26849 26850 function PitcherStatisticsViewWidgetController($scope, $window, urlService, statisticService) { 26851 var vm = this; 26852 vm.url = urlService; 26853 26854 buildColumns($scope.columns); 26855 26856 vm.showStat = function (column) { 26857 if (isMobile() && column.visibleMobile) { 26858 return true; 26859 } else if (!isMobile() && column.visibleDesktop) { 26860 return true; 26861 } 26862 return false; 26863 } 26864 26865 // TODO Initialize column sort / change hardcoded value. 26866 _.find(vm.columns, function (column) { 26867 return column.id === 100; 26868 }).sort = 'asc'; 26869 26870 vm.options = { 26871 page: 1, 26872 pageSize: 10, 26873 sortOrder: 'asc', 26874 sortStatId: 100, 26875 positionType: 8 26876 }; 26877 26878 //Watchers 26879 $scope.$watch('[season, division]', function () { 26880 if ($scope.season && $scope.division) { 26881 vm.appliedFilters = false; 26882 clearMoreFilters(); 26883 26884 if ($scope.season == "career-regular") { 26885 vm.options.seasonId = null; 26886 vm.options.seasonTypeId = 1; 26887 } 26888 else if ($scope.season == "career-playoffs") { 26889 vm.options.seasonId = null; 26890 vm.options.seasonTypeId = 2; 26891 } 26892 else if ($scope.season == "career-total") { 26893 vm.options.seasonId = null; 26894 vm.options.seasonTypeId = null; 26895 } 26896 else { 26897 vm.options.seasonId = $scope.season; 26898 } 26899 26900 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 26901 // Set the division identifier. 26902 vm.options.divisionId = $scope.division; 26903 } else { 26904 // Remove the property from options. 26905 delete vm.options.divisionId; 26906 } 26907 26908 // Update pitcher statistics list. 26909 getPitcherStatistics(); 26910 } 26911 }); 26912 26913 $scope.$watch('[startDate, endDate]', function (newValue, oldValue) { 26914 if ($scope.startDate && $scope.endDate) { 26915 vm.appliedFilters = true; 26916 vm.options.seasonId = $scope.season; 26917 vm.options.startDate = $scope.startDate; 26918 vm.options.endDate = $scope.endDate; 26919 26920 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 26921 // Set the division identifier. 26922 vm.options.divisionId = $scope.division; 26923 } else { 26924 // Remove the property from options. 26925 delete vm.options.divisionId; 26926 } 26927 26928 // Update player statistics list. 26929 getPitcherStatistics(); 26930 } else if (oldValue[0] || oldValue[1]) { 26931 vm.appliedFilters = false; 26932 vm.options.startDate = undefined; 26933 vm.options.endDate = undefined; 26934 getPitcherStatistics(); 26935 } 26936 }); 26937 26938 $scope.$watch('columns', function (columns) { 26939 buildColumns(columns); 26940 }) 26941 26942 //State functions 26943 // TODO Move into service 26944 vm.getStatisticValue = function (player, statisticId) { 26945 if (player.Stats.length > 0) { 26946 26947 var playerStat = _.find(player.Stats, function (statistic) { 26948 return statistic.StatTypeId === statisticId; 26949 }); 26950 26951 if (playerStat) { 26952 return playerStat.DisplayValue; 26953 } 26954 } 26955 26956 return '0'; 26957 }; 26958 26959 vm.sort = function (column) { 26960 // Reset columns sort. 26961 _.forEach(vm.columns, function (_column) { 26962 if (_column.id !== column.id) { 26963 _column.sort = ''; 26964 } 26965 }); 26966 26967 if (angular.isUndefined(column.sort)) { 26968 column.sort = 'desc'; 26969 vm.options.sortOrder = column.sort; 26970 } else { 26971 // Toggle sort order. 26972 column.sort = column.sort === 'desc' 26973 ? column.sort = 'asc' 26974 : column.sort = 'desc'; 26975 26976 vm.options.sortOrder = column.sort; 26977 } 26978 26979 // Set the sort statistic id. 26980 vm.options.sortStatId = column.id; 26981 26982 // Update pitcher statistics list. 26983 getPitcherStatistics(); 26984 }; 26985 26986 vm.clickPage = function (page) { 26987 // Set the page number. 26988 vm.options.page = page; 26989 26990 // Update pitcher statistics list. 26991 getPitcherStatistics(); 26992 }; 26993 26994 vm.clickPrevious = function () { 26995 // Decrement the page number. 26996 vm.options.page -= 1;
26997 26998 // Update pitcher statistics list. 26999 getPitcherStatistics(); 27000 }; 27001 27002 vm.clickNext = function () { 27003 // Increment the page number. 27004 vm.options.page += 1; 27005 27006 // Update pitcher statistics list. 27007 getPitcherStatistics(); 27008 }; 27009 27010 function clearMoreFilters() { 27011 delete vm.options.startDate; 27012 delete vm.options.endDate; 27013 } 27014 27015 //Helpers 27016 function getPitcherStatistics() { 27017 if(vm.appliedFilters){ 27018 statisticService.getPlayerStatisticsDateRangeBySolutionId(__solutionId__, vm.options) 27019 .then(function (response) { 27020 // Get the total count of players. 27021 vm.totalCount = response.data.TotalCount; 27022 vm.pitchers = response.data.Results; // All pitchers 27023 }) 27024 .catch(function (error) { 27025 // TODO Bugsnag 27026 }); 27027 27028 }else{ 27029 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, vm.options) 27030 .then(function (response) { 27031 // Get the total count of pitchers. 27032 vm.totalCount = response.data.TotalCount; 27033 vm.pitchers = response.data.Results; // All pitchers 27034 27035 }) 27036 .catch(function (error) { 27037 // TODO Bugsnag 27038 }); 27039 27040 } 27041 } 27042 27043 function isMobile() { 27044 return $window.innerWidth <= 575; 27045 } 27046 27047 function buildColumns(columnsToDisplay) { 27048 console.log(columnsToDisplay); 27049 vm.columns = []; 27050 columnsToDisplay.forEach(function (col) { 27051 var stat = statisticService.getPlayerStatisticByStatId(col.id); 27052 if (stat) { 27053 vm.columns.push({ 27054 id: col.id, 27055 visibleDesktop: col.visibleDesktop, 27056 visibleMobile: col.visibleMobile, 27057 name: stat.name, 27058 abbreviation: stat.abbreviation 27059 }) 27060 } 27061 }); 27062 } 27063 } 27064})(); 27065; 27066(function () { 27067 'use strict'; 27068 27069 angular 27070 .module('app.directives') 27071 .directive('pitcherStatisticsView', pitcherStatisticsView) 27072 27073 pitcherStatisticsView.$inject = []; 27074 27075 function pitcherStatisticsView() { 27076 return { 27077 restrict: 'E', 27078 scope: { 27079 season: '=', 27080 division: '=', 27081 startDate: '=', 27082 endDate: '=', 27083 columns: '=', 27084 }, 27085 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/pitcher/view/pitcher-statistics-view.tpl.html', 27086 controller: 'PitcherStatisticsViewWidgetController', 27087 controllerAs: 'pitcherStatisticsView' 27088 }; 27089 } 27090})();; 27091(function () { 27092 'use strict'; 27093 27094 angular 27095 .module('app.directives') 27096 .controller('DefenseStatisticsController', DefenseStatisticsController); 27097 27098 DefenseStatisticsController.$inject = ['$scope', '$translate']; 27099 27100 function DefenseStatisticsController($scope, $translate) { 27101 var vm = this; 27102 vm.season = undefined; 27103 vm.division = undefined; 27104 vm.startDate = undefined; 27105 vm.endDate = undefined; 27106 vm.prependSeasons = [ 27107 { Id: 'career-regular', Name: $translate.instant('directives.widgets.statistics.filters.season.careerRegularSeason') }, 27108 { Id: 'career-playoffs', Name: $translate.instant('directives.widgets.statistics.filters.season.careerPlayoffs') }, 27109 { Id: 'career-total', Name: $translate.instant('directives.widgets.statistics.filters.season.careerTotal') } 27110 ] 27111 27112 vm.applyMoreFilters = function (filter) { 27113 vm.season = filter.season; 27114 vm.division = filter.division; 27115 vm.startDate = filter.startDate; 27116 vm.endDate = filter.endDate; 27117 }; 27118 vm.filter = function(filter) { 27119 vm.season = filter.season; 27120 vm.division = filter.division; 27121 }; 27122 27123 } 27124})(); 27125; 27126(function () { 27127 'use strict'; 27128 27129 angular 27130 .module('app.directives') 27131 .directive('defenseStatistics', defenseStatistics) 27132 27133 defenseStatistics.$inject = []; 27134 27135 function defenseStatistics() { 27136 return { 27137 restrict: 'E', 27138 scope: { 27139 widget: '=', 27140 columns: '=' 27141 }, 27142 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/defense/defense-statistics.tpl.html', 27143 controller: 'DefenseStatisticsController', 27144 controllerAs: 'defenseStatistics' 27145 }; 27146 } 27147})();; 27148(function () { 27149 'use strict'; 27150 27151 angular 27152 .module('app.directives') 27153 .controller('DefenseStatisticsViewWidgetController', DefenseStatisticsViewWidgetController); 27154 27155 DefenseStatisticsViewWidgetController.$inject = ['$scope', '$window', 'UrlService', 'StatisticService']; 27156 27157 function DefenseStatisticsViewWidgetController($scope, $window, urlService, statisticService) { 27158 var vm = this; 27159 vm.url = urlService; 27160 27161 buildColumns($scope.columns); 27162 27163 vm.showStat = function (column) { 27164 if (isMobile() && column.visibleMobile) { 27165 return true; 27166 } else if (!isMobile() && column.visibleDesktop) { 27167 return true; 27168 } 27169 return false; 27170 } 27171 27172 // TODO Initialize column sort / change hardcoded value. 27173 _.find(vm.columns, function (column) { 27174 return column.id === 65; 27175 }).sort = 'asc'; 27176 27177 vm.options = { 27178 page: 1, 27179 pageSize: 10, 27180 sortOrder: 'asc', 27181 sortStatId: 100, 27182 positionType: 21 27183 }; 27184 27185 //Watchers 27186 $scope.$watch('[season, division]', function () { 27187 if ($scope.season && $scope.division) { 27188 vm.appliedFilters = false; 27189 clearMoreFilters(); 27190 27191 if ($scope.season == "career-regular") { 27192 vm.options.seasonId = null; 27193 vm.options.seasonTypeId = 1; 27194 } 27195 else if ($scope.season == "career-playoffs") { 27196 vm.options.seasonId = null; 27197 vm.options.seasonTypeId = 2; 27198 } 27199 else if ($scope.season == "career-total") { 27200 vm.options.seasonId = null; 27201 vm.options.seasonTypeId = null; 27202 } 27203 else { 27204 vm.options.seasonId = $scope.season; 27205 } 27206 27207 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 27208 // Set the division identifier. 27209 vm.options.divisionId = $scope.division; 27210 } else { 27211 // Remove the property from options. 27212 delete vm.options.divisionId; 27213 } 27214 27215 // Update defense statistics list. 27216 getDefenseStatistics(); 27217 } 27218 }); 27219 27220 $scope.$watch('[startDate, endDate]', function (newValue, oldValue) { 27221 if ($scope.startDate && $scope.endDate) { 27222 vm.appliedFilters = true; 27223 vm.options.seasonId = $scope.season; 27224 vm.options.startDate = $scope.startDate; 27225 vm.options.endDate = $scope.endDate; 27226 27227 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 27228 // Set the division identifier. 27229 vm.options.divisionId = $scope.division; 27230 } else { 27231 // Remove the property from options. 27232 delete vm.options.divisionId; 27233 } 27234 27235 // Update player statistics list. 27236 getDefenseStatistics(); 27237 } else if (oldValue[0] || oldValue[1]) { 27238 vm.appliedFilters = false; 27239 vm.options.startDate = undefined; 27240 vm.options.endDate = undefined; 27241 getDefenseStatistics(); 27242 } 27243 }); 27244 27245 $scope.$watch('columns', function (columns) { 27246 buildColumns(columns); 27247 }) 27248 27249 //State functions 27250 // TODO Move into service 27251 vm.getStatisticValue = function (player, statisticId) { 27252 if (player.Stats.length > 0) { 27253 27254 var playerStat = _.find(player.Stats, function (statistic) { 27255 return statistic.StatTypeId === statisticId; 27256 }); 27257 27258 if (playerStat) { 27259 return playerStat.DisplayValue; 27260 } 27261 } 27262 27263 return '0'; 27264 }; 27265 27266 vm.sort = function (column) { 27267 // Reset columns sort. 27268 _.forEach(vm.columns, function (_column) { 27269 if (_column.id !== column.id) { 27270 _column.sort = ''; 27271 } 27272 }); 27273 27274 if (angular.isUndefined(column.sort)) { 27275 column.sort = 'desc'; 27276 vm.options.sortOrder = column.sort; 27277 } else { 27278 // Toggle sort order. 27279 column.sort = column.sort === 'desc' 27280 ? column.sort = 'asc' 27281 : column.sort = 'desc'; 27282 27283 vm.options.sortOrder = column.sort; 27284 } 27285 27286 // Set the sort statistic id. 27287 vm.options.sortStatId = column.id; 27288 27289 // Update defense statistics list. 27290 getDefenseStatistics(); 27291 }; 27292 27293 vm.clickPage = function (page) { 27294 // Set the page number. 27295 vm.options.page = page; 27296 27297 // Update defense statistics list. 27298 getDefenseStatistics(); 27299 }; 27300 27301 vm.clickPrevious = function () { 27302 // Decrement the page number. 27303 vm.options.page -= 1;
27304 27305 // Update defense statistics list. 27306 getDefenseStatistics(); 27307 }; 27308 27309 vm.clickNext = function () { 27310 // Increment the page number. 27311 vm.options.page += 1; 27312 27313 // Update defense statistics list. 27314 getDefenseStatistics(); 27315 }; 27316 27317 function clearMoreFilters() { 27318 delete vm.options.startDate; 27319 delete vm.options.endDate; 27320 } 27321 27322 //Helpers 27323 function getDefenseStatistics() { 27324 if(vm.appliedFilters){ 27325 statisticService.getPlayerStatisticsDateRangeBySolutionId(__solutionId__, vm.options) 27326 .then(function (response) { 27327 // Get the total count of defensers. 27328 vm.totalCount = response.data.TotalCount; 27329 27330 vm.defense = response.data.Results; // All defense 27331 }) 27332 .catch(function (error) { 27333 // TODO Bugsnag 27334 }); 27335 }else{ 27336 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, vm.options) 27337 .then(function (response) { 27338 // Get the total count of defensers. 27339 vm.totalCount = response.data.TotalCount; 27340 27341 vm.defense = response.data.Results; // All defense 27342 }) 27343 .catch(function (error) { 27344 // TODO Bugsnag 27345 }); 27346 } 27347 } 27348 27349 function isMobile() { 27350 return $window.innerWidth <= 575; 27351 } 27352 27353 function buildColumns(columnsToDisplay) { 27354 console.log(columnsToDisplay); 27355 vm.columns = []; 27356 columnsToDisplay.forEach(function (col) { 27357 var stat = statisticService.getPlayerStatisticByStatId(col.id); 27358 if (stat) { 27359 vm.columns.push({ 27360 id: col.id, 27361 visibleDesktop: col.visibleDesktop, 27362 visibleMobile: col.visibleMobile, 27363 name: stat.name, 27364 abbreviation: stat.abbreviation 27365 }) 27366 } 27367 }); 27368 } 27369 } 27370})(); 27371; 27372(function () { 27373 'use strict'; 27374 27375 angular 27376 .module('app.directives') 27377 .directive('defenseStatisticsView', defenseStatisticsView) 27378 27379 defenseStatisticsView.$inject = []; 27380 27381 function defenseStatisticsView() { 27382 return { 27383 restrict: 'E', 27384 scope: { 27385 season: '=', 27386 division: '=', 27387 startDate: '=', 27388 endDate: '=', 27389 columns: '=' 27390 }, 27391 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/defense/view/defense-statistics-view.tpl.html', 27392 controller: 'DefenseStatisticsViewWidgetController', 27393 controllerAs: 'defenseStatisticsView' 27394 }; 27395 } 27396})();; 27397(function () { 27398 'use strict'; 27399 27400 angular 27401 .module('app.directives') 27402 .controller('PlayerStatisticsController', PlayerStatisticsController); 27403 27404 PlayerStatisticsController.$inject = ['$scope', '$translate']; 27405 27406 function PlayerStatisticsController($scope, $translate) { 27407 var vm = this; 27408 vm.season = undefined; 27409 vm.division = undefined; 27410 vm.startDate = undefined; 27411 vm.endDate = undefined; 27412 vm.prependSeasons = [ 27413 { Id: 'career-regular', Name: $translate.instant('directives.widgets.statistics.filters.season.careerRegularSeason') }, 27414 { Id: 'career-playoffs', Name: $translate.instant('directives.widgets.statistics.filters.season.careerPlayoffs') }, 27415 { Id: 'career-total', Name: $translate.instant('directives.widgets.statistics.filters.season.careerTotal') } 27416 ] 27417 27418 vm.applyMoreFilters = function (filter) { 27419 vm.season = filter.season; 27420 vm.division = filter.division; 27421 vm.startDate = filter.startDate; 27422 vm.endDate = filter.endDate; 27423 }; 27424 27425 vm.filter = function (filter) { 27426 vm.season = filter.season; 27427 vm.division = filter.division; 27428 }; 27429 } 27430})(); 27431; 27432(function () { 27433 'use strict'; 27434 27435 angular 27436 .module('app.directives') 27437 .directive('playersStatistics', playersStatistics) 27438 27439 playersStatistics.$inject = []; 27440 27441 function playersStatistics() { 27442 return { 27443 restrict: 'E', 27444 scope: { 27445 pageSize: '=', 27446 columns: '=', 27447 }, 27448 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/player/player-statistics.tpl.html', 27449 controller: 'PlayerStatisticsController', 27450 controllerAs: 'playerStatistics' 27451 }; 27452 } 27453})();; 27454(function () { 27455 'use strict'; 27456 27457 angular 27458 .module('app.directives') 27459 .controller('PlayerStatisticsViewWidgetController', PlayerStatisticsViewWidgetController); 27460 27461 PlayerStatisticsViewWidgetController.$inject = ['$scope', '$window', '$localStorage', 'UrlService', 'PositionService', 'StatisticService']; 27462 27463 function PlayerStatisticsViewWidgetController($scope, $window, $localStorage, urlService, positionService, statisticService) { 27464 var vm = this; 27465 vm.url = urlService; 27466 vm.position = positionService; 27467 vm.sportId = $localStorage.solution.sportId; 27468 vm.appliedFilters = false; 27469 vm.columns = undefined; 27470 vm.options = undefined; 27471 27472 buildColumns($scope.columns); 27473 27474 vm.showStat = function (column) { 27475 if (isMobile() && column.visibleMobile) { 27476 return true; 27477 } else if (!isMobile() && column.visibleDesktop) { 27478 return true; 27479 } 27480 return false; 27481 } 27482 27483 //Watchers 27484 $scope.$watch('[season, division]', function () { 27485 if ($scope.season && $scope.division) { 27486 vm.appliedFilters = false; 27487 clearMoreFilters(); 27488 27489 if ($scope.season == "career-regular") { 27490 vm.options.seasonId = null; 27491 vm.options.seasonTypeId = 1; 27492 } 27493 else if ($scope.season == "career-playoffs") { 27494 vm.options.seasonId = null; 27495 vm.options.seasonTypeId = 2; 27496 } 27497 else if ($scope.season == "career-total") { 27498 vm.options.seasonId = null; 27499 vm.options.seasonTypeId = null; 27500 } 27501 else { 27502 vm.options.seasonId = $scope.season; 27503 } 27504 27505 27506 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 27507 // Set the division identifier. 27508 vm.options.divisionId = $scope.division; 27509 } else { 27510 // Remove the property from options. 27511 delete vm.options.divisionId; 27512 } 27513 27514 // Update player statistics list. 27515 getPlayerStatistics(); 27516 } 27517 }); 27518 27519 $scope.$watch('[startDate, endDate]', function (newValue, oldValue) { 27520 if ($scope.startDate && $scope.endDate) { 27521 vm.appliedFilters = true; 27522 vm.options.seasonId = $scope.season; 27523 vm.options.startDate = $scope.startDate; 27524 vm.options.endDate = $scope.endDate; 27525 27526 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 27527 // Set the division identifier. 27528 vm.options.divisionId = $scope.division; 27529 } else { 27530 // Remove the property from options. 27531 delete vm.options.divisionId; 27532 } 27533 27534 // Update player statistics list. 27535 getPlayerStatistics(); 27536 } else if (oldValue[0] || oldValue[1]) { 27537 vm.appliedFilters = false; 27538 vm.options.startDate = undefined; 27539 vm.options.endDate = undefined; 27540 getPlayerStatistics(); 27541 } 27542 }); 27543 27544 $scope.$watch('columns', function (columns) { 27545 buildColumns(columns); 27546 }) 27547 27548 //Component mount 27549 switch ($localStorage.solution.sportId) { 27550 case 1: 27551 // TODO Initialize column sort / change hardcoded value. 27552 _.find(vm.columns, function (column) { 27553 return column.id === 29; 27554 }).sort = 'desc'; 27555 27556 vm.options = { 27557 page: 1, 27558 pageSize: $scope.pageSize, 27559 sortOrder: 'desc', 27560 sortStatId: 29, 27561 positionType: 2 27562 }; 27563 break; 27564 27565 case 2: 27566 _.find(vm.columns, function (column) { 27567 return column.id === 81; 27568 }).sort = 'desc'; 27569 27570 vm.options = { 27571 page: 1, 27572 pageSize: $scope.pageSize, 27573 sortOrder: 'desc', 27574 sortStatId: 81, 27575 positionType: 9 27576 }; 27577 break; 27578 case 4: 27579 // TODO Initialize column sort / change hardcoded value. 27580 _.find(vm.columns, function (column) { 27581 return column.id === 128; 27582 }).sort = 'desc'; 27583 27584 vm.options = { 27585 page: 1, 27586 pageSize: $scope.pageSize, 27587 sortOrder: 'desc', 27588 sortStatId: 128, 27589 positionType: 10 27590 }; 27591 break; 27592 case 6: 27593 // TODO Initialize column sort / change hardcoded value. 27594 _.find(vm.columns, function (column) { 27595 return column.id === 37; 27596 }).sort = 'desc'; 27597 27598 vm.options = { 27599 page: 1, 27600 pageSize: $scope.pageSize, 27601 sortOrder: 'desc', 27602 sortStatId: 37, 27603 positionType: 3 27604 }; 27605 break; 27606 case 14: 27607 // TODO Initialize column sort / change hardcoded value. 27608 _.find(vm.columns, function (column) { 27609 return column.id === 60; 27610 }).sort = 'desc'; 27611 27612 vm.options = { 27613 page: 1, 27614 pageSize: $scope.pageSize, 27615 sortOrder: 'desc', 27616 sortStatId: 60, 27617 positionType: 16 27618 }; 27619 break; 27620 } 27621 27622 27623 //State functions 27624 vm.getStatisticValue = function (player, statisticId) { 27625 if (player.Stats.length > 0) { 27626 27627 var playerStat = _.find(player.Stats, function (statistic) { 27628 return statistic.StatTypeId === statisticId; 27629 }); 27630 27631 if (playerStat) { 27632 return playerStat.DisplayValue; 27633 } 27634 } 27635 27636 return '0'; 27637 }; 27638 27639 vm.sort = function (column) { 27640 // Reset columns sort. 27641 _.forEach(vm.columns, function (_column) { 27642 if (_column.id !== column.id) { 27643 _column.sort = ''; 27644 } 27645 }); 27646 27647 if (angular.isUndefined(column.sort)) { 27648 column.sort = 'desc'; 27649 vm.options.sortOrder = column.sort; 27650 } else { 27651 // Toggle sort order. 27652 column.sort = column.sort === 'desc' 27653 ? column.sort = 'asc' 27654 : column.sort = 'desc'; 27655 27656 vm.options.sortOrder = column.sort; 27657 } 27658 27659 // Set the sort statistic id. 27660 vm.options.sortStatId = column.id; 27661 27662 // Update player statistics list. 27663 getPlayerStatistics(); 27664 }; 27665 27666 vm.clickPage = function (page) { 27667 // Set the page number. 27668 vm.options.page = page; 27669 27670 // Update player statistics list. 27671 getPlayerStatistics(); 27672 }; 27673 27674 vm.clickPrevious = function () { 27675 // Decrement the page number. 27676 vm.options.page -= 1;
27677 27678 // Update player statistics list. 27679 getPlayerStatistics(); 27680 }; 27681 27682 vm.clickNext = function () { 27683 // Increment the page number. 27684 vm.options.page += 1; 27685 27686 // Update player statistics list. 27687 getPlayerStatistics(); 27688 }; 27689 27690 //Helpers 27691 function getPlayerStatistics() { 27692 if (vm.appliedFilters) { 27693 statisticService.getPlayerStatisticsDateRangeBySolutionId(__solutionId__, vm.options) 27694 .then(function (response) { 27695 // Get the total count of players. 27696 vm.totalCount = response.data.TotalCount; 27697 vm.players = response.data.Results; // All players. 27698 }) 27699 .catch(function (error) { 27700 // TODO Bugsnag 27701 }); 27702 } else { 27703 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, vm.options) 27704 .then(function (response) { 27705 // Get the total count of players. 27706 vm.totalCount = response.data.TotalCount; 27707 27708 vm.players = response.data.Results; // All players. 27709 }) 27710 .catch(function (error) { 27711 // TODO Bugsnag 27712 }); 27713 } 27714 } 27715 27716 function clearMoreFilters() { 27717 delete vm.options.startDate; 27718 delete vm.options.endDate; 27719 } 27720 27721 // TODO Move somewhere in a service... 27722 function isMobile() { 27723 return $window.innerWidth <= 575; 27724 } 27725 27726 function buildColumns(columnsToDisplay) { 27727 vm.columns = []; 27728 columnsToDisplay.forEach(function (col) { 27729 var stat = statisticService.getPlayerStatisticByStatId(col.id); 27730 if (stat) { 27731 vm.columns.push({ 27732 id: col.id, 27733 visibleDesktop: col.visibleDesktop, 27734 visibleMobile: col.visibleMobile, 27735 name: stat.name, 27736 abbreviation: stat.abbreviation 27737 }) 27738 } 27739 }); 27740 } 27741 } 27742})(); 27743; 27744(function () { 27745 'use strict'; 27746 27747 angular 27748 .module('app.directives') 27749 .directive('playerStatisticsView', playerStatisticsView) 27750 27751 playerStatisticsView.$inject = []; 27752 27753 function playerStatisticsView() { 27754 return { 27755 restrict: 'E', 27756 scope: { 27757 season: '=', 27758 division: '=', 27759 startDate: '=', 27760 endDate: '=', 27761 pageSize: '=', 27762 columns: '=' 27763 }, 27764 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/player/view/player-statistics-view.tpl.html', 27765 controller: 'PlayerStatisticsViewWidgetController', 27766 controllerAs: 'playerStatisticsView' 27767 }; 27768 } 27769})();; 27770(function () { 27771 'use strict'; 27772 27773 angular 27774 .module('app.directives') 27775 .controller('SuspensionStatisticsController', SuspensionStatisticsController); 27776 27777 SuspensionStatisticsController.$inject = ['$scope']; 27778 27779 function SuspensionStatisticsController($scope) { 27780 var vm = this; 27781 vm.season = undefined; 27782 vm.division = undefined; 27783 27784 vm.filter = function(filter) { 27785 vm.season = filter.season; 27786 vm.division = filter.division; 27787 }; 27788 } 27789})(); 27790; 27791(function () { 27792 'use strict'; 27793 27794 angular 27795 .module('app.directives') 27796 .directive('suspensionStatistics', suspensionStatistics) 27797 27798 suspensionStatistics.$inject = []; 27799 27800 function suspensionStatistics() { 27801 return { 27802 restrict: 'E', 27803 scope: { 27804 widget: '=' 27805 }, 27806 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/suspension/su
27806spension-statistics.tpl.html', 27807 controller: 'SuspensionStatisticsController', 27808 controllerAs: 'suspensionStatistics' 27809 }; 27810 } 27811})();; 27812(function () { 27813 'use strict'; 27814 27815 angular 27816 .module('app.directives') 27817 .controller('SuspensionStatisticsViewWidgetController', SuspensionStatisticsViewWidgetController); 27818 27819 SuspensionStatisticsViewWidgetController.$inject = ['$scope', 'UrlService', 'SuspensionService']; 27820 27821 function SuspensionStatisticsViewWidgetController($scope, urlService, suspensionService) { 27822 var vm = this; 27823 vm.url = urlService; 27824 vm.options = { 27825 page: 1, 27826 pageSize: 10, 27827 sortOrder: 'asc', 27828 sortStatId: 32, 27829 positionType: 1 27830 }; 27831 27832 //Watchers 27833 $scope.$watch('[season, division]', function () { 27834 if ($scope.season && $scope.division) { 27835 vm.options.seasonId = $scope.season; 27836 27837 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 27838 // Set the division identifier. 27839 vm.options.divisionId = $scope.division; 27840 } else { 27841 // Remove the property from options. 27842 delete vm.options.divisionId; 27843 } 27844 27845 // Update goaler statistics list. 27846 getSuspensions(); 27847 } 27848 }); 27849 27850 27851 //State functions 27852 vm.sort = function (column) { 27853 // Reset columns sort. 27854 _.forEach(vm.columns, function (_column) { 27855 if (_column.id !== column.id) { 27856 _column.sort = ''; 27857 } 27858 }); 27859 27860 if (angular.isUndefined(column.sort)) { 27861 column.sort = 'desc'; 27862 vm.options.sortOrder = column.sort; 27863 } else { 27864 // Toggle sort order. 27865 column.sort = column.sort === 'desc' 27866 ? column.sort = 'asc' 27867 : column.sort = 'desc'; 27868 27869 vm.options.sortOrder = column.sort; 27870 } 27871 27872 // Set the sort statistic id. 27873 //vm.options.sortStatId = column.id; 27874 27875 // Update suspension statistics list. 27876 getSuspensions(); 27877 }; 27878 27879 vm.clickPage = function (page) { 27880 // Set the page number. 27881 vm.options.page = page; 27882 27883 // Update suspension statistics list. 27884 getSuspensions(); 27885 }; 27886 27887 vm.clickPrevious = function () { 27888 // Decrement the page number. 27889 vm.options.page -= 1; 27890 27891 // Update suspension statistics list. 27892 getSuspensions(); 27893 }; 27894 27895 vm.clickNext = function () { 27896 // Increment the page number. 27897 vm.options.page += 1; 27898 27899 // Update suspension statistics list. 27900 getSuspensions(); 27901 }; 27902 27903 //Helpers 27904 function getSuspensions() { 27905 suspensionService.getSuspensionsBySolutionId(__solutionId__, vm.options) 27906 .then(function (response) { 27907 // Get the total count of suspensions. 27908 vm.totalCount = response.data.TotalCount; 27909 27910 vm.suspensions = response.data.Results; // All suspensions. 27911 }) 27912 .catch(function (error) { 27913 // TODO Bugsnag 27914 }); 27915 } 27916 } 27917})(); 27918; 27919(function () { 27920 'use strict'; 27921 27922 angular 27923 .module('app.directives') 27924 .directive('suspensionStatisticsView', suspensionStatisticsView) 27925 27926 suspensionStatisticsView.$inject = []; 27927 27928 function suspensionStatisticsView() { 27929 return { 27930 restrict: 'E', 27931 scope: { 27932 season: '=', 27933 division: '=' 27934 }, 27935 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/suspension/view/suspension-statistics-view.tpl.html', 27936 controller: 'SuspensionStatisticsViewWidgetController', 27937 controllerAs: 'suspensionStatisticsView' 27938 }; 27939 } 27940})();; 27941(function () { 27942 'use strict'; 27943 27944 angular 27945 .module('app.directives') 27946 .controller('TeamStatisticsController', TeamStatisticsController); 27947 27948 TeamStatisticsController.$inject = ['$scope']; 27949 27950 function TeamStatisticsController($scope) { 27951 var vm = this; 27952 vm.season = undefined; 27953 vm.division = undefined; 27954 27955 vm.filter = function(filter) { 27956 vm.season = filter.season; 27957 vm.division = filter.division; 27958 }; 27959 } 27960})(); 27961; 27962(function () { 27963 'use strict'; 27964 27965 angular 27966 .module('app.directives') 27967 .directive('teamStatistics', teamStatistics) 27968 27969 teamStatistics.$inject = []; 27970 27971 function teamStatistics() { 27972 return { 27973 restrict: 'E', 27974 scope: { 27975 widget: '=', 27976 columns: '=' 27977 }, 27978 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/team/team-statistics.tpl.html', 27979 controller: 'TeamStatisticsController', 27980 controllerAs: 'teamStatistics' 27981 }; 27982 } 27983})();; 27984(function () { 27985 'use strict'; 27986 27987 angular 27988 .module('app.directives') 27989 .controller('TeamStatisticsViewWidgetController', TeamStatisticsViewWidgetController); 27990 27991 TeamStatisticsViewWidgetController.$inject = ['$scope', '$window', '$localStorage', 'UrlService', 'StatisticService']; 27992 27993 function TeamStatisticsViewWidgetController($scope, $window, $localStorage, urlService, statisticService) { 27994 var vm = this; 27995 vm.url = urlService; 27996 vm.sportId = $localStorage.solution.sportId; 27997 vm.options = undefined; 27998 27999 buildColumns($scope.columns); 28000 28001 vm.showStat = function (column) { 28002 if (isMobile() && column.visibleMobile) { 28003 return true; 28004 } else if (!isMobile() && column.visibleDesktop) { 28005 return true; 28006 } 28007 return false; 28008 } 28009 28010 //Watch for filter changes 28011 $scope.$watch('[season, division]', function () { 28012 if ($scope.season && $scope.division) { 28013 vm.options.seasonId = $scope.season; 28014 28015 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 28016 // Set the division identifier. 28017 vm.options.divisionId = $scope.division; 28018 } else { 28019 // Remove the property from options. 28020 delete vm.options.divisionId; 28021 } 28022 28023 // Update team statistics list. 28024 getTeamStatistics(); 28025 } 28026 }); 28027 28028 $scope.$watch('columns', function (columns) { 28029 buildColumns(columns); 28030 }) 28031 28032 //Component mount 28033 switch ($localStorage.solution.sportId) { 28034 case 1: 28035 // TODO Initialize column sort / change hardcoded value. 28036 _.find(vm.columns, function (column) { 28037 return column.id === 15; 28038 }).sort = 'desc'; 28039 28040 vm.options = { 28041 page: 1, 28042 pageSize: 10, 28043 sortOrder: 'desc', 28044 sortStatId: 15 28045 }; 28046 break; 28047 28048 case 2: 28049 // TODO Initialize column sort / change hardcoded value. 28050 _.find(vm.columns, function (column) { 28051 return column.id === 57; 28052 }).sort = 'desc'; 28053 28054 vm.options = { 28055 page: 1, 28056 pageSize: 10, 28057 sortOrder: 'desc', 28058 sortStatId: 57 28059 }; 28060 break; 28061 28062 case 4: 28063 // TODO Initialize column sort / change hardcoded value. 28064 _.find(vm.columns, function (column) { 28065 return column.id === 75; 28066 }).sort = 'desc'; 28067 28068 vm.options = { 28069 page: 1, 28070 pageSize: 10, 28071 sortOrder: 'desc', 28072 sortStatId: 75 28073 }; 28074 break; 28075 28076 case 6: 28077 // TODO Initialize column sort / change hardcoded value. 28078 _.find(vm.columns, function (column) { 28079 return column.id === 42; 28080 }).sort = 'desc'; 28081 28082 vm.options = { 28083 page: 1, 28084 pageSize: 10, 28085 sortOrder: 'desc', 28086 sortStatId: 42 28087 }; 28088 break; 28089 28090 case 14: 28091 // TODO Initialize column sort / change hardcoded value. 28092 _.find(vm.columns, function (column) { 28093 return column.id === 152; 28094 }).sort = 'desc'; 28095 28096 vm.options = { 28097 page: 1, 28098 pageSize: 10, 28099 sortOrder: 'desc', 28100 sortStatId: 152 28101 }; 28102 break; 28103 } 28104 28105 //State functions 28106 // TODO Move into service 28107 vm.getStatisticValue = function (team, statisticId) { 28108 return _.find(team.stats, function (statistic) { 28109 return statistic.statTypeId === statisticId; 28110 }).displayValue; 28111 }; 28112 28113 vm.sort = function (column) { 28114 // Reset columns sort. 28115 _.forEach(vm.columns, function (_column) { 28116 if (_column.id !== column.id) { 28117 _column.sort = ''; 28118 } 28119 }); 28120 28121 if (angular.isUndefined(column.sort)) { 28122 column.sort = 'desc'; 28123 vm.options.sortOrder = column.sort; 28124 } else { 28125 // Toggle sort order. 28126 column.sort = column.sort === 'desc' 28127 ? column.sort = 'asc' 28128 : column.sort = 'desc'; 28129 28130 vm.options.sortOrder = column.sort; 28131 } 28132 28133 // Set the sort statistic id. 28134 vm.options.sortStatId = column.id; 28135 28136 // Update team statistics list. 28137 getTeamStatistics(); 28138 }; 28139 28140 vm.clickPage = function (page) { 28141 // Set the page number. 28142 vm.options.page = page; 28143 28144 // Update team statistics list. 28145 getTeamStatistics(); 28146 }; 28147 28148 vm.clickPrevious = function () { 28149 // Decrement the page number. 28150 vm.options.page -= 1;
28151 28152 // Update team statistics list. 28153 getTeamStatistics(); 28154 }; 28155 28156 vm.clickNext = function () { 28157 // Increment the page number. 28158 vm.options.page += 1; 28159 28160 // Update team statistics list. 28161 getTeamStatistics(); 28162 }; 28163 28164 //Helpers 28165 function getTeamStatistics() { 28166 statisticService.getTeamStatisticsBySolutionId(__solutionId__, vm.options) 28167 .then(function (response) { 28168 // Get the total count of goalers. 28169 vm.totalCount = response.data.totalCount; 28170 28171 vm.teams = _.forEach(response.data.results, function (team) { 28172 _.forEach(team.stats, function (statistic) { 28173 statistic.Value = statistic.displayValue; 28174 }) 28175 }); // All goalers. 28176 }) 28177 .catch(function (error) { 28178 // TODO Bugsnag 28179 }); 28180 } 28181 28182 // TODO Move somewhere in a service... 28183 function isMobile() { 28184 return $window.innerWidth <= 575; 28185 } 28186 28187 function buildColumns(columnsToDisplay) { 28188 vm.columns = []; 28189 columnsToDisplay.forEach(function (col) { 28190 var stat = statisticService.getTeamStatisticByStatId(col.id); 28191 if (stat) { 28192 vm.columns.push({ 28193 id: col.id, 28194 visibleDesktop: col.visibleDesktop, 28195 visibleMobile: col.visibleMobile, 28196 name: stat.name, 28197 abbreviation: stat.abbreviation 28198 }) 28199 } 28200 }); 28201 } 28202 } 28203})(); 28204; 28205(function () { 28206 'use strict'; 28207 28208 angular 28209 .module('app.directives') 28210 .directive('teamStatisticsView', teamStatisticsView) 28211 28212 teamStatisticsView.$inject = []; 28213 28214 function teamStatisticsView() { 28215 return { 28216 restrict: 'E', 28217 scope: { 28218 season: '=', 28219 division: '=', 28220 columns: '=', 28221 }, 28222 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/team/view/team-statistics-view.tpl.html?version=1', 28223 controller: 'TeamStatisticsViewWidgetController', 28224 controllerAs: 'teamStatisticsView' 28225 }; 28226 } 28227})();; 28228(function () { 28229 'use strict'; 28230 28231 angular 28232 .module('app.directives') 28233 .controller('PlayerLeadersWidgetController', PlayerLeadersWidgetController); 28234 28235 PlayerLeadersWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'PositionService', 'SeasonService', 'StatisticService', 'WebsiteEditorService', 'TranslationService']; 28236 28237 function PlayerLeadersWidgetController($rootScope, $scope, $localStorage, urlService, positionService, seasonService, statisticService, websiteEditorService, translationService) { 28238 var vm = this; 28239 28240 //State variables 28241 vm.translation = translationService; 28242 vm.widget = angular.fromJson(widgets[$scope.widget]); 28243 vm.url = urlService; 28244 vm.position = positionService; 28245 28246 vm.seasonId = undefined; 28247 vm.showPlayers = false; 28248 vm.nbPlayersDisplayed = 0; 28249 vm.playerStatisticDisplayed = 0; 28250 vm.playerPositionType = 2; 28251 vm.showGoaltenders = 0; 28252 vm.nbGoaltendersDisplayed = 0; 28253 vm.goaltenderPositionType = 1; 28254 vm.goaltenderStatisticDisplayed = 0; 28255 vm.showPlayerAvatars = true; 28256 28257 //State functions 28258 vm.getStatisticValue = function (player, statisticId) { 28259 if (player.Stats.length > 0) { 28260 28261 var playerStat = _.find(player.Stats, function (statistic) { 28262 return statistic.StatTypeId === statisticId; 28263 }); 28264 28265 if (playerStat) { 28266 return playerStat.DisplayValue; 28267 } 28268 } 28269 return 'N/A'; 28270 }; 28271 28272 //On component mount
28273 for (var parameter in vm.widget.parameters) { 28274 switch (vm.widget.parameters[parameter].id) { 28275 case 'seasonId': 28276 vm.seasonId = vm.widget.parameters[parameter].value; 28277 break; 28278 case 'showPlayers': 28279 vm.showPlayers = vm.widget.parameters[parameter].value === 'true'; 28280 break; 28281 case 'nbPlayersDisplayed': 28282 vm.nbPlayersDisplayed = vm.widget.parameters[parameter].value; 28283 break; 28284 case 'playerStatisticDisplayed': 28285 vm.playerPositionType = getProperties(vm.widget.parameters[parameter].properties).categoryId; 28286 vm.playerStatisticDisplayed = statisticService.getPlayerStatisticByStatId(parseInt(vm.widget.parameters[parameter].value)); 28287 break; 28288 case 'showGoaltenders': 28289 vm.showGoaltenders = vm.widget.parameters[parameter].value === 'true'; 28290 break; 28291 case 'nbGoaltendersDisplayed': 28292 vm.nbGoaltendersDisplayed = vm.widget.parameters[parameter].value; 28293 break; 28294 case 'goaltenderStatisticDisplayed': 28295 vm.goaltenderPositionType = getProperties(vm.widget.parameters[parameter].properties).categoryId; 28296 vm.goaltenderStatisticDisplayed = statisticService.getPlayerStatisticByStatId(parseInt(vm.widget.parameters[parameter].value)); 28297 break; 28298 28299 case 'showPlayerAvatars': 28300 vm.showPlayerAvatars = vm.widget.parameters[parameter].value === 'true'; 28301 break; 28302 28303 } 28304 } 28305 28306 if (!$localStorage.solution.defaultSeasonId) { 28307 solutionService.getSolutionById(__solutionId__) 28308 .then(function (response) { 28309 $localStorage.solution = response.data; 28310 getAllStats(); 28311 }) 28312 .catch(function (error) { 28313 bugsnag.notify(error); 28314 }); 28315 } else { 28316 getAllStats(); 28317 } 28318 28319 // Listener 28320 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 28321 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 28322 .then(function (response) { 28323 for (var parameter in vm.widget.parameters) { 28324 switch (vm.widget.parameters[parameter].id) { 28325 case 'seasonId': 28326 vm.widget.parameters[parameter].value = data.seasonId; 28327 vm.seasonId = data.seasonId; 28328 break; 28329 case 'showPlayers': 28330 vm.widget.parameters[parameter].value = data.showPlayers.toString(); 28331 vm.showPlayers = data.showPlayers; 28332 break; 28333 case 'nbPlayersDisplayed': 28334 vm.widget.parameters[parameter].value = data.nbPlayersDisplayed; 28335 vm.nbPlayersDisplayed = data.nbPlayersDisplayed; 28336 break; 28337 case 'playerStatisticDisplayed': 28338 vm.widget.parameters[parameter].value = data.playerStatisticDisplayed; 28339 vm.playerStatisticDisplayed = statisticService.getPlayerStatisticByStatId(parseInt(data.playerStatisticDisplayed)); 28340 break; 28341 case 'showGoaltenders': 28342 vm.widget.parameters[parameter].value = data.showGoaltenders.toString(); 28343 vm.showGoaltenders = data.showGoaltenders; 28344 break; 28345 case 'nbGoaltendersDisplayed': 28346 vm.widget.parameters[parameter].value = data.nbGoaltendersDisplayed; 28347 vm.nbGoaltendersDisplayed = data.nbGoaltendersDisplayed; 28348 break; 28349 case 'goaltenderStatisticDisplayed': 28350 vm.widget.parameters[parameter].value = data.goaltenderStatisticDisplayed; 28351 vm.goaltenderStatisticDisplayed = statisticService.getPlayerStatisticByStatId(parseInt(data.goaltenderStatisticDisplayed)); 28352 break; 28353 28354 case 'showPlayerAvatars': 28355 vm.widget.parameters[parameter].value = data.showPlayerAvatars.toString(); 28356 vm.showPlayerAvatars = data.showPlayerAvatars; 28357 break; 28358 } 28359 } 28360 widgets[$scope.widget] = angular.toJson(vm.widget); 28361 getAllStats(); 28362 }) 28363 .catch(function (error) { 28364 bugsnag.notify(error); 28365 }); 28366 }); 28367 28368 $scope.$on('$destroy', listener); 28369 28370 //Functionss 28371 function getAllStats() { 28372 if (vm.seasonId === 'default') { 28373 vm.seasonId = $localStorage.solution.defaultSeasonId.toString(); 28374 } 28375 if (vm.showPlayers) { 28376 getPlayerLeaders({ 28377 page: 1, 28378 pageSize: vm.nbPlayersDisplayed, 28379 sortOrder: 'desc', 28380 sortStatId: vm.playerStatisticDisplayed.id, 28381 positionType: vm.playerPositionType, 28382 seasonId: vm.seasonId 28383 }); 28384 } 28385 if (vm.showGoaltenders) { 28386 getGoaltenderLeaders({ 28387 page: 1, 28388 pageSize: vm.nbGoaltendersDisplayed, 28389 sortOrder: 'desc', 28390 sortStatId: vm.goaltenderStatisticDisplayed.id, 28391 positionType: vm.goaltenderPositionType, 28392 seasonId: vm.seasonId 28393 }); 28394 } 28395 } 28396 28397 function getPlayerLeaders(options) { 28398 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, options) 28399 .then(function (response) { 28400 vm.players = response.data.Results; 28401 }) 28402 .catch(function (error) { 28403 bugsnag.notify(error); 28404 }); 28405 } 28406 28407 function getGoaltenderLeaders(options) { 28408 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, options) 28409 .then(function (response) { 28410 vm.goaltenders = _.forEach(response.data.Results, function (goaler) { 28411 _.forEach(goaler.Stats, function (statistic) { 28412 statistic.Value = formatValues(statistic.StatTypeId, statistic.Value); 28413 }); 28414 }); 28415 }) 28416 .catch(function (error) { 28417 bugsnag.notify(error); 28418 }); 28419 } 28420 28421 function formatValues(statisticId, value) { 28422 switch (statisticId) { 28423 case 30: // Save Percentage 28424 return parseFloat(value / 1000).toFixed(3); 28425 28426 case 31: // Points per game 28427 case 32: // Points per game 28428 return parseFloat(value / 100).toFixed(2); 28429 28430 default: 28431 return value; 28432 } 28433 } 28434 28435 function getProperties(properties) { 28436 var obj = {}; 28437 if (properties) {
28438 properties.forEach(function (item) { 28439 obj[item.key] = item.value; 28440 }); 28441 } 28442 return obj; 28443 } 28444 } 28445})(); 28446; 28447(function () { 28448 'use strict'; 28449 28450 angular 28451 .module('app.directives') 28452 .directive('playerLeaders', playerLeaders); 28453 28454 playerLeaders.$inject = []; 28455 28456 function playerLeaders() { 28457 return { 28458 restrict: 'E', 28459 scope: { 28460 widget: '=' 28461 }, 28462 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/statistics/players/leaders/player-leaders.tpl.html', 28463 controller: 'PlayerLeadersWidgetController', 28464 controllerAs: 'playerLeaders' 28465 }; 28466 } 28467})();; 28468(function () { 28469 'use strict'; 28470 28471 angular 28472 .module('app.directives') 28473 .controller('SuspensionListWidgetController', SuspensionListWidgetController); 28474 28475 SuspensionListWidgetController.$inject = ['$rootScope', '$scope', 'UrlService', 'SuspensionService']; 28476 28477 function SuspensionListWidgetController($rootScope, $scope, urlService, suspensionService) { 28478 var vm = this; 28479 vm.url = urlService; 28480 28481 // Apply website values to view model object. 28482 vm.widget = angular.fromJson(widgets[$scope.widget]); 28483 28484 Object.assign(vm, { 28485 all: { 28486 totalCount: 0, 28487 results: [], 28488 clickPage: clickPage, 28489 clickPrevious: clickPrevious, 28490 clickNext: clickNext 28491 } 28492 }); 28493 28494 vm.options = { 28495 page: 1, 28496 pageSize: 10 28497 }; 28498 28499 vm.filter = function(filter) { 28500 vm.options.seasonId = filter.season; 28501 28502 if (filter.division !== 'general' && filter.division !== 'divisions') { 28503 // Set the division identifier. 28504 vm.options.divisionId = filter.division; 28505 } else { 28506 // Remove the property from options. 28507 delete vm.options.divisionId; 28508 } 28509 28510 // Update goaler statistics list. 28511 getSuspensions(); 28512 }; 28513 28514 function clickPage(page) { 28515 // Set the page number. 28516 vm.options.page = page; 28517 28518 // Update suspension statistics list. 28519 getSuspensions(); 28520 } 28521 28522 function clickPrevious() { 28523 // Decrement the page number. 28524 vm.options.page -= 1; 28525 28526 // Update suspension statistics list. 28527 getSuspensions(); 28528 } 28529 28530 function clickNext(){ 28531 // Increment the page number. 28532 vm.options.page += 1; 28533 28534 // Update suspension statistics list. 28535 getSuspensions(); 28536 } 28537 28538 function getSuspensions() { 28539 suspensionService.getSuspensionsBySolutionId(__solutionId__, vm.options) 28540 .then(function(response) { 28541 vm.all.results = response.data.Results; // All suspensions. 28542 vm.all.totalCount = response.data.TotalCount; 28543 }) 28544 .catch(function(error) { 28545 // TODO Bugsnag 28546 }); 28547 } 28548 } 28549})(); 28550; 28551(function () { 28552 'use strict'; 28553 28554 angular 28555 .module('app.directives') 28556 .directive('suspensionList', suspensionList) 28557 28558 suspensionList.$inject = []; 28559 28560 function suspensionList() { 28561 return { 28562 restrict: 'E', 28563 scope: { 28564 widget: '=' 28565 }, 28566 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/suspension/list/suspension-list.tpl.html', 28567 controller: 'SuspensionListWidgetController', 28568 controllerAs: 'suspensionList' 28569 }; 28570 } 28571})();; 28572(function () { 28573 'use strict'; 28574 28575 angular 28576 .module('app.directives') 28577 .controller('TeamDetailsWidgetController', TeamDetailsWidgetController); 28578 28579 TeamDetailsWidgetController.$inject = ['$rootScope', '$scope', '$sce', '$localStorage', 'TeamService', 'WebsiteEditorService', 'PositionService']; 28580 28581 function TeamDetailsWidgetController($rootScope, $scope, $sce, $localStorage, teamService, websiteEditorService, positionService) { 28582 var vm = this; 28583 28584 // State variables 28585 vm.widget = angular.fromJson(widgets[$scope.widget]); 28586 Object.assign(vm, __team__); 28587 28588 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`;
28589 vm.tabs.forEach(function (tab) { 28590 tab.content = $sce.trustAsHtml(tab.content); 28591 }) 28592 vm.defaultTab = _.find(vm.tabs, { default: true }); 28593 vm.otherTabs = _.filter(vm.tabs, { default: false }); 28594 vm.columnsLineup = []; 28595 vm.activeTab = 'allTimeStatistics'; 28596 vm.activeScheduleTab = 'week'; 28597 vm.position = positionService; 28598 vm.total = (_.filter(vm.players, { 'lineupStatus': 1 }) || []).length; 28599 console.log(vm.total); 28600 28601 28602 vm.normalTabs = [ 28603 { 'id': 'allTimeStatistics', 'label': 'directives.widgets.team.details.tabs.allTimeStatistics' }, 28604 { 'id': 'schedule', 'label': 'directives.widgets.team.details.tabs.schedule' }, 28605 { 'id': 'lineup', 'label': 'directives.widgets.team.details.tabs.lineup' }, 28606 { 'id': 'teamStatistics', 'label': 'directives.widgets.team.details.tabs.teamStatistics', visible: $localStorage.solution.sportId == 2 }, 28607 { 'id': 'playersStatistics', 'label': 'directives.widgets.team.details.tabs.playersStatistics' }, 28608 { 'id': 'staff', 'label': 'directives.widgets.team.details.tabs.staff' } 28609 ]; //Should be the same id/labels as properties of the widget parameter 28610 28611 28612 //State functions 28613 vm.clickTab = function (tab) { 28614 vm.activeTab = tab; 28615 } 28616 28617 vm.isTabActive = function (id) { 28618 return vm.activeTab === id; 28619 } 28620 28621 //Component mount. 28622 teamService.getTeamLineupById(__solutionId__, vm.id) 28623 .then(function (response) { 28624 vm.playerCategories = response.data; // Get all player categories. 28625 }) 28626 .catch(function (error) { 28627 bugsnag.notify(error); 28628 }); 28629 28630 for (var parameter in vm.widget.parameters) { 28631 switch (vm.widget.parameters[parameter].id) { 28632 case 'columnsDisplaySelect': 28633 vm.columnsLineup = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 28634 break; 28635 case 'defaultTab': 28636 vm.activeTab = vm.widget.parameters[parameter].value; 28637 formatNormalTabs(); 28638 break; 28639 case 'defaultScheduleTab': 28640 vm.activeScheduleTab = vm.widget.parameters[parameter].value; 28641 break; 28642 case 'columnsDisplayPlayersStatsSelect': 28643 vm.columnsPlayerStats = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 28644 break; 28645 } 28646 } 28647 28648 if (vm.defaultTab) { 28649 vm.activeTab = vm.defaultTab.id; 28650 } 28651 28652 // Listener 28653 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 28654 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 28655 .then(function () { 28656 for (var parameter in vm.widget.parameters) { 28657 switch (vm.widget.parameters[parameter].id) { 28658 case 'columnsDisplaySelect': 28659 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 28660 vm.columnsLineup = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 28661 break; 28662 case 'defaultTab': 28663 vm.widget.parameters[parameter].value = data.defaultTab; 28664 vm.activeTab = data.defaultTab; 28665 formatNormalTabs(); 28666 break; 28667 case 'defaultScheduleTab': 28668 vm.widget.parameters[parameter].value = data.defaultScheduleTab; 28669 vm.activeScheduleTab = data.defaultScheduleTab; 28670 break; 28671 case 'columnsDisplayPlayersStatsSelect': 28672 vm.widget.parameters[parameter].value = data.columnsDisplayPlayersStatsSelect; 28673 vm.columnsPlayerStats= angular.fromJson(data.columnsDisplayPlayersStatsSelect.replace(/\'/g, '"')); 28674 break; 28675 28676 } 28677 } 28678 widgets[$scope.widget] = angular.toJson(vm.widget); 28679 }) 28680 .catch(function (error) { 28681 bugsnag.notify(error); 28682 }); 28683 }); 28684 28685 $scope.$on('$destroy', listener); 28686 28687 function formatNormalTabs() { 28688 var defaultTab = _.filter(vm.normalTabs, { id: vm.activeTab });
28689 var otherTabs = _.filter(vm.normalTabs, function (normalTab) { 28690 return normalTab.id !== vm.activeTab; 28691 }); 28692 vm.normalTabs = defaultTab.concat(otherTabs); 28693 } 28694 } 28695})(); 28696; 28697(function () { 28698 'use strict'; 28699 28700 angular 28701 .module('app.directives') 28702 .directive('teamDetails', teamDetails); 28703 28704 teamDetails.$inject = []; 28705 28706 function teamDetails() { 28707 return { 28708 restrict: 'E', 28709 scope: { 28710 widget: '=' 28711 }, 28712 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/details/team-details.tpl.html', 28713 controller: 'TeamDetailsWidgetController', 28714 controllerAs: 'team' 28715 }; 28716 } 28717})();; 28718(function () { 28719 'use strict'; 28720 28721 angular 28722 .module('app.directives') 28723 .controller('TeamAllTimeStatisticsController', TeamAllTimeStatisticsController); 28724 28725 TeamAllTimeStatisticsController.$inject = ['$scope', '$localStorage', 'UrlService', 'StatisticService']; 28726 28727 function TeamAllTimeStatisticsController($scope, $localStorage, urlService, statisticService) { 28728 var vm = this; 28729 vm.url = urlService; 28730 28731 Object.assign(vm, angular.fromJson(__team__)); 28732 vm.sportId = $localStorage.solution.sportId; 28733 switch (vm.sportId) { 28734 case 1: 28735 // TODO Move default columns into service 28736 // TODO Implement columns parameters into the widget. 28737 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds([5, 6, 7, 8, 9, 10, 15, 1, 2, 3, 4, 16, 13]); 28738 // TODO Initialize column sort / change hardcoded value. 28739 _.find(vm.columns, function (column) { 28740 return column.id === 15; 28741 }).sort = 'desc'; 28742 break; 28743 28744 case 2: 28745 // TODO Move default columns into service 28746 // TODO Implement columns parameters into the widget. 28747 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds([55, 56, 57, 58, 73, 60, 61]); 28748 // TODO Initialize column sort / change hardcoded value. 28749 _.find(vm.columns, function (column) { 28750 return column.id === 57; 28751 }).sort = 'desc'; 28752 break; 28753 case 4: 28754 // TODO Move default columns into service 28755 // TODO Implement columns parameters into the widget. 28756 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds([75, 76, 77, 78, 79, 80, 81, 81, 83, 195]); 28757 // TODO Initialize column sort / change hardcoded value. 28758 _.find(vm.columns, function (column) { 28759 return column.id === 75; 28760 }).sort = 'desc'; 28761 break; 28762 case 6: // TODO Move default columns into service 28763 // TODO Implement columns parameters into the widget. 28764 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds([38, 39, 40, 41, 42, 50, 48, 49]); 28765 // TODO Initialize column sort / change hardcoded value. 28766 _.find(vm.columns, function (column) { 28767 return column.id === 39; 28768 }).sort = 'desc'; 28769 break; 28770 28771 case 14: // TODO Move default columns into service 28772 // TODO Implement columns parameters into the widget. 28773 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds([148, 149, 150, 151, 174, 153, 154, 155]); 28774 // TODO Initialize column sort / change hardcoded value. 28775 _.find(vm.columns, function (column) { 28776 return column.id === 149; 28777 }).sort = 'desc'; 28778 break; 28779 28780 } 28781 28782 28783 // TODO Move into service 28784 vm.getStatisticValue = function (team, statisticId) { 28785 return _.find(team.Stats, function (statistic) { 28786 return statistic.StatTypeId === statisticId; 28787 }).DisplayValue; 28788 }; 28789 28790 28791 statisticService.getTeamAllStatisticsByTeamId(__solutionId__, vm.id) 28792 .then(function (response) { 28793 28794 //REGULAR SEASON 28795 vm.regularSeasons = _.filter(response.data, function (season) { 28796 return season.SeasonTypeId === 1; 28797 }); 28798 if (vm.regularSeasons.length > 0) { 28799 vm.regularSeasonsTotalData = (_.filter(response.data, function (season) { 28800 return season.SeasonName === null && season.SeasonTypeId === 1; 28801 }))[0]; 28802 vm.regularSeasons.splice(vm.regularSeasons.indexOf(vm.regularSeasonsTotalData), 1) 28803 // Clone the columns array. 28804 vm.regularSeasonsTotal = angular.fromJson(angular.toJson(vm.columns)); 28805 vm.regularSeasonsTotalStats = [] 28806 _.forEach(vm.regularSeasonsTotal, function (column) { 28807 _.forEach(vm.regularSeasonsTotalData.Stats, function (total) { 28808 if (column.id === total.StatTypeId) { vm.regularSeasonsTotalStats.push(total) } 28809 }) 28810 }) 28811 } 28812 28813 //PLAYOFFS 28814 vm.playoffs = _.filter(response.data, function (season) { 28815 return season.SeasonTypeId === 2 || season.SeasonTypeId === 8; 28816 }); 28817 if (vm.playoffs.length > 0) { 28818 vm.playoffsTotalData = (_.filter(response.data, function (season) { 28819 return season.SeasonName === null && season.SeasonTypeId === 2 || season.SeasonTypeId === 8; 28820 }))[0]; 28821 vm.playoffs.splice(vm.playoffs.indexOf(vm.playoffsTotalData), 1) 28822 // Clone the columns array. 28823 vm.playoffsTotal = angular.fromJson(angular.toJson(vm.columns)); 28824 vm.playoffsTotalStats = [] 28825 _.forEach(vm.playoffsTotal, function (column) { 28826 _.forEach(vm.playoffsTotalData.Stats, function (total) { 28827 if (column.id === total.StatTypeId) { vm.playoffsTotalStats.push(total) } 28828 }) 28829 }) 28830 } 28831 28832 //PRESEASONS 28833 28834 vm.preSeasons = _.filter(response.data, function (season) { 28835 return season.SeasonTypeId === 3; 28836 }); 28837 if (vm.preSeasons.length > 0) { 28838 vm.preSeasonsTotalData = _.filter(response.data, function (season) { 28839 return season.SeasonName === null && season.SeasonTypeId === 3; 28840 })[0]; 28841 vm.preSeasons.splice(vm.preSeasons.indexOf(vm.preSeasonsTotalData), 1) 28842 // Clone the columns array. 28843 vm.preSeasonsTotal = angular.fromJson(angular.toJson(vm.columns)); 28844 vm.preSeasonsTotalStats = [] 28845 _.forEach(vm.preSeasonsTotal, function (column) { 28846 _.forEach(vm.preSeasonsTotalData.Stats, function (total) { 28847 if (column.id === total.StatTypeId) { vm.preSeasonsTotalStats.push(total) } 28848 }) 28849 }) 28850 } 28851 28852 //CHAMPIONSHIPS 28853 vm.championships = _.filter(response.data, function (season) { 28854 return season.SeasonTypeId === 4 28855 }); 28856 if (vm.championships.length > 0) { 28857 vm.championshipsTotalData = _.filter(response.data, function (season) { 28858 return season.SeasonName === null && season.SeasonTypeId === 4 28859 })[0]; 28860 vm.championships.splice(vm.championships.indexOf(vm.championshipsTotalData), 1) 28861 // Clone the columns array. 28862 vm.championshipsTotal = angular.fromJson(angular.toJson(vm.columns)); 28863 vm.championshipsTotalStats = [] 28864 _.forEach(vm.championshipsTotal, function (column) { 28865 _.forEach(vm.championshipsTotalData.Stats, function (total) { 28866 if (column.id === total.StatTypeId) { vm.championshipsTotalStats.push(total) } 28867 }) 28868 }) 28869 }
28870 //TOURNAMENTS 28871 vm.tournaments = _.filter(response.data, function (season) { 28872 return season.SeasonTypeId === 5 28873 }); 28874 if (vm.tournaments.length > 0) { 28875 vm.tournamentsTotalData = _.filter(response.data, function (season) { 28876 return season.SeasonName === null && season.SeasonTypeId === 5 28877 })[0]; 28878 vm.tournaments.splice(vm.tournaments.indexOf(vm.tournamentsTotalData), 1) 28879 // Clone the columns array. 28880 vm.tournamentsTotal = angular.fromJson(angular.toJson(vm.columns)); 28881 vm.tournamentsTotalStats = [] 28882 _.forEach(vm.tournamentsTotal, function (column) { 28883 _.forEach(vm.tournamentsTotalData.Stats, function (total) { 28884 if (column.id === total.StatTypeId) { vm.tournamentsTotalStats.push(total) } 28885 }) 28886 }) 28887 } 28888 // SINGLE ELIMINATION TOURNAMENTS 28889 vm.singleElimTournaments = _.filter(response.data, function (season) { 28890 return season.SeasonTypeId === 6; 28891 }); 28892 if (vm.singleElimTournaments.length > 0) { 28893 vm.singleElimTournamentsTotalData = _.filter(response.data, function (season) { 28894 return season.SeasonName === null && season.SeasonTypeId === 6 28895 })[0]; 28896 vm.singleElimTournaments.splice(vm.singleElimTournaments.indexOf(vm.singleElimTournamentsTotalData), 1) 28897 // Clone the columns array. 28898 vm.singleElimTournamentsTotal = angular.fromJson(angular.toJson(vm.columns)); 28899 vm.singleElimTournamentsTotalStats = [] 28900 _.forEach(vm.singleElimTournamentsTotal, function (column) { 28901 _.forEach(vm.singleElimTournamentsTotalData.Stats, function (total) { 28902 if (column.id === total.StatTypeId) { vm.singleElimTournamentsTotalStats.push(total) } 28903 }) 28904 }) 28905 } 28906 //PLAYOFFS ROUNDS 28907 vm.playoffsRounds = _.filter(response.data, function (season) { 28908 return season.SeasonTypeId === 7; 28909 }); 28910 if (vm.playoffsRounds.length > 0) { 28911 vm.playoffsRoundsTotalData = _.filter(response.data, function (season) { 28912 return season.SeasonName === null && season.SeasonTypeId === 7; 28913 })[0]; 28914 vm.playoffsRounds.splice(vm.playoffsRounds.indexOf(vm.playoffsRoundsTotalData), 1) 28915 // Clone the columns array. 28916 vm.playoffsRoundsTotal = angular.fromJson(angular.toJson(vm.columns)); 28917 vm.playoffsRoundsTotalStats = [] 28918 _.forEach(vm.playoffsRoundsTotal, function (column) { 28919 _.forEach(vm.playoffsRoundsTotalData.Stats, function (total) { 28920 if (column.id === total.StatTypeId) { vm.playoffsRoundsTotalStats.push(total) } 28921 }) 28922 }) 28923 } 28924 }) 28925 .catch(function (error) { 28926 // TODO Bugsnag 28927 }); 28928 } 28929})(); 28930; 28931(function () { 28932 'use strict'; 28933 28934 angular 28935 .module('app.directives') 28936 .directive('teamAllTimeStatistics', teamAllTimeStatistics); 28937 28938 teamAllTimeStatistics.$inject = []; 28939 28940 function teamAllTimeStatistics() { 28941 return { 28942 restrict: 'E', 28943 scope: { 28944 widget: '=' 28945 }, 28946 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/detail
28946s/all-time-statistics/team-all-time-statistics.tpl.html', 28947 controller: 'TeamAllTimeStatisticsController', 28948 controllerAs: 'teamAllTimeStatistics' 28949 }; 28950 } 28951})();; 28952 28953(function () { 28954 'use strict'; 28955 28956 angular 28957 .module('app.directives') 28958 .controller('FiltersTeamController', FiltersTeamController); 28959 28960 FiltersTeamController.$inject = ['$scope', '$translate', '$localStorage', 'SeasonService', 'DivisionService', 'ContainerService', 'TeamService', 'FacilityService', 'HashService']; 28961 28962 function FiltersTeamController($scope, $translate, $localStorage, seasonService, divisionService, containerService, teamService, facilityService, hashService) { 28963 var vm = this; 28964 // State variables 28965 vm.filters = { 28966 container: undefined, 28967 season: 'all', 28968 facility: 'all' 28969 } 28970 28971 vm.containers = undefined; 28972 vm.seasons = [{ Id: 'all', Name: $translate.instant('directives.widgets.team.details.filtersTeam.labels.allseasons') }]; 28973 vm.facilities = [{ Id: 'all', Name: $translate.instant('directives.widgets.team.details.filtersTeam.labels.allfacilities') }]; 28974 28975 // State functions 28976 vm.selectContainer = function (item) { 28977 vm.filters.container = item.Id; 28978 vm.filters.facility = 'all'; 28979 if (!item.Id || item.Id === 0) { 28980 getSeasons(); 28981 } else { 28982 getSeasonsByContainerId(vm.filters.container); 28983 } 28984 }; 28985 28986 vm.selectSeason = function (item) { 28987 vm.filters.season = item.Id; 28988 vm.filters.facility = 'all'; 28989 change(); 28990 }; 28991 28992 vm.selectFacility = function (item) { 28993 vm.filters.facility = item.Id; 28994 change(); 28995 } 28996 28997 // Component mount 28998 getContainers(); 28999 getFacilities(); 29000 29001 // API calls 29002 function getContainers() { 29003 containerService.getContainersBySolutionId(__solutionId__) 29004 .then(function (response) { 29005 if (response.data.containers && response.data.containers.length > 0) { 29006 vm.containers = [{ Id: 0, Name: $translate.instant('directives.widgets.team.details.filtersTeam.labels.allyears') }] 29007 vm.containers = vm.containers.concat(response.data.containers); 29008 vm.filters.container = response.data.defaultcontainerid ? response.data.defaultcontainerid : 0; 29009 29010 29011 if (vm.filters.container == 0) { 29012 getSeasons(response.data.defaultseasonid); 29013 } else { 29014 getSeasonsByContainerId(vm.filters.container); 29015 } 29016 } else { 29017 getSeasons(response.data.defaultseasonid); 29018 } 29019 }) 29020 .catch(function (error) { 29021 bugsnag.notify(error); 29022 }); 29023 } 29024 29025 function getSeasonsByContainerId(defaultContainerId) { 29026 seasonService.getSeasonsByContainerId(__solutionId__, defaultContainerId) 29027 .then(function (response) { 29028 vm.seasons = vm.seasons.concat(response.data.seasons); 29029 vm.filters.season = 'all'; 29030 change(); 29031 }) 29032 .catch(function (error) { 29033 bugsnag.notify(error); 29034 }); 29035 } 29036 29037 function getSeasons(defaultSeasonId) { 29038 seasonService.getSeasonsBySolutionId(__solutionId__) 29039 .then(function (response) { 29040 vm.seasons = response.data; 29041 vm.filters.season = defaultSeasonId ? defaultSeasonId : $localStorage.solution.defaultSeasonId.toString(); 29042 change(); 29043 }) 29044 .catch(function (error) { 29045 bugsnag.notify(error); 29046 }); 29047 } 29048 29049 function getFacilities() { 29050 facilityService.getFacilitiesBySolutionId(__solutionId__) 29051 .then(function (response) { 29052 vm.facilities = vm.facilities.concat(response.data); 29053 }) 29054 .catch(function (error) { 29055 bugsnag.notify(error); 29056 }); 29057 29058 } 29059 29060 function change() { 29061 if (typeof $scope.change == 'function') { 29062 $scope.change({ 29063 filter: { 29064 season: vm.filters.season, 29065 facility: vm.filters.facility, 29066 container: vm.filters.container 29067 } 29068 }); 29069 } 29070 } 29071 } 29072})();; 29073(function () { 29074 'use strict'; 29075 29076 angular 29077 .module('app.directives') 29078 .directive('filtersTeam', filtersTeam); 29079 29080 filtersTeam.$inject = []; 29081 29082 function filtersTeam() { 29083 return { 29084 restrict: 'E', 29085 replace: true, 29086 scope: { 29087 change: '&' 29088 }, 29089 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/detail
29089s/filters-team/filters-team.tpl.html', 29090 controller: 'FiltersTeamController', 29091 controllerAs: 'filtersTeam', 29092 link: function (scope) { 29093 29094 } 29095 }; 29096 } 29097})();; 29098(function () { 29099 'use strict'; 29100 29101 angular 29102 .module('app.directives') 29103 .controller('TeamLineupWidgetController', TeamLineupWidgetController); 29104 29105 TeamLineupWidgetController.$inject = ['$scope', '$translate', '$window', 'UrlService', 'PlayerService', 'PositionService']; 29106 29107 function TeamLineupWidgetController($scope, $translate, $window, urlService, playerService, positionService) { 29108 var vm = this; 29109 29110 vm.url = urlService; 29111 vm.player = playerService; 29112 vm.position = positionService; 29113 vm.columns = []; 29114 vm.getStatus = playerService.getStatus; 29115 vm.teamId = $scope.teamId 29116 vm.players = $scope.players; 29117 29118 vm.getAge = function (birthday) { 29119 return birthday !== null ? moment().diff(birthday, 'years') : ''; 29120 }; 29121 29122 vm.getBirthday = function (birthday) { 29123 return birthday !== null ? moment(birthday).format($translate.instant('directives.widgets.team.details.lineup.format.birthday')) : ''; 29124 } 29125 29126 vm.getPlayerType = function (type) { 29127 return type !== null ? $translate.instant(playerService.getPlayerType(type)) : 'test'; 29128 } 29129 29130 vm.showStat = function (column) { 29131 if (isMobile() && column.visibleMobile) { 29132 return true; 29133 } else if (!isMobile() && column.visibleDesktop) { 29134 return true; 29135 } 29136 return false; 29137 } 29138 29139 vm.sort = function (column) { 29140 // Reset columns sort. 29141 _.forEach(vm.columns, function (_column) { 29142 if (_column.id !== column.id) { 29143 _column.sort = ''; 29144 } 29145 }); 29146 29147 if (angular.isUndefined(column.sort)) { 29148 column.sort = 'desc'; 29149 } else { 29150 // Toggle sort order. 29151 column.sort = column.sort === 'desc' 29152 ? column.sort = 'asc' 29153 : column.sort = 'desc'; 29154 } 29155 29156 if (vm.players.length > 0) { 29157 vm.players = _.orderBy(vm.players, [function (player) { 29158 switch (column.id) { 29159 case 1: 29160 return player.Number ? parseInt(player.Number) : Infinity; 29161 case 2: 29162 return _.kebabCase(player.Name); 29163 case 3: 29164 return positionService.getPosition(player.Position, 'abbreviation'); 29165 case 4: 29166 return _.kebabCase(player.TeamName); 29167 case 5: 29168 return player.Birthday ? parseInt(vm.getAge(player.Birthday)) : -1; 29169 case 6: 29170 var height = -1; 29171 if (player.Height) { 29172 var numbers = _.kebabCase(player.Height).split('-'); 29173 height = parseInt(numbers[0] + _.padStart(numbers[1] || '0', 2, '0')); 29174 } 29175 29176 return height; 29177 case 7: 29178 return player.Weight ? parseInt(player.Weight) : -1; 29179 case 8: 29180 case 14: 29181 return _.kebabCase(player.Level); 29182 case 9: 29183 return player.Birthday ? moment(player.Birthday).unix() : Number.NEGATIVE_INFINITY; 29184 case 10: 29185 return _.kebabCase(vm.getStatus(player.LineupStatus)); 29186 case 11: 29187 return _.kebabCase(vm.getPlayerType(player.PlayerStatus)); 29188 } 29189 }, function (player) { return _.kebabCase(player.LastName); }], [column.sort, 'asc']); 29190 } 29191 }; 29192 29193 buildColumns($scope.columns); 29194 vm.columns[0].sort = 'desc'; 29195 vm.sort(vm.columns[0]); 29196 29197 $scope.$watch('columns', function () { 29198 buildColumns($scope.columns); 29199 vm.columns[0].sort = 'desc'; 29200 vm.sort(vm.columns[0]); 29201 }); 29202 29203 function buildColumns(columnsToDisplay) { 29204 vm.columns = []; 29205 columnsToDisplay.forEach(function (col) { 29206 var stat = playerService.getPlayerColumn(col.id); 29207 vm.columns.push({ 29208 id: col.id, 29209 visibleDesktop: col.visibleDesktop, 29210 visibleMobile: col.visibleMobile, 29211 name: stat.name 29212 }); 29213 }); 29214 } 29215 29216 function isMobile() { 29217 return $window.innerWidth <= 600; 29218 } 29219 } 29220})(); 29221; 29222(function () { 29223 'use strict'; 29224 29225 angular 29226 .module('app.directives') 29227 .directive('teamLineup', teamLineup);
29228 29229 teamLineup.$inject = []; 29230 29231 function teamLineup() { 29232 return { 29233 restrict: 'E', 29234 scope: { 29235 players: '=', 29236 columns: '=', 29237 teamId:'=' 29238 }, 29239 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/details/lineup/team-lineup.tpl.html', 29240 controller: 'TeamLineupWidgetController', 29241 controllerAs: 'teamLineup' 29242 }; 29243 } 29244})();; 29245(function () { 29246 'use strict'; 29247 29248 angular 29249 .module('app.directives') 29250 .controller('TeamPlayersStatisticsController', TeamPlayersStatisticsController); 29251 29252 TeamPlayersStatisticsController.$inject = ['$scope', '$localStorage', '$translate', 'UrlService', 'PositionService', 'PlayerService', 'StatisticService']; 29253 29254 function TeamPlayersStatisticsController($scope, $localStorage, $translate, urlService, positionService, playerService, statisticService) { 29255 var vm = this; 29256 var statsSportConfig = { 29257 1: { 29258 2: { 29259 order: 1, 29260 stats: [14, 6, 7, 29, 8, 26, 27, 28, 31], 29261 sort: [29, 'desc'] 29262 }, 29263 1: { 29264 order: 2, 29265 stats: [62, 15, 16, 17, 19, 21, 22, 32, 25, 24, 30, 8], 29266 sort: [15, 'desc'] 29267 } 29268 }, 29269 3: { 29270 22: { 29271 order: 1, 29272 stats: [165], 29273 sort: [165, 'desc'] 29274 } 29275 }, 29276 2: { 29277 9: { 29278 order: 1, 29279 stats: [65, 67, 77, 80, 69, 70, 71, 75, 72, 73, 76, 79, 106, 81, 83, 82, 86, 85], 29280 sort: [81, 'desc'] 29281 }, 29282 8: { 29283 order: 2, 29284 stats: [99, 100, 101, 91, 102, 93, 90, 96, 97, 98], 29285 sort: [100, 'asc'] 29286 }, 29287 }, 29288 4: { 29289 10: { 29290 order: 1, 29291 stats: [128, 131, 133, 136, 139, 142, 146, 157, 149, 150, 151, 156], 29292 sort: [128, 'desc'] 29293 }, 29294 }, 29295 6: { 29296 3: { 29297 order: 1, 29298 stats: [36, 37, 38, 39, 40, 41, 43, 44], 29299 sort: [37, 'desc'] 29300 }, 29301 4: { 29302 order: 2, 29303 stats: [46, 47, 48, 49, 50], 29304 sort: [46, 'desc'] 29305 }, 29306 }, 29307 14: { 29308 16: { 29309 order: 1, 29310 stats: [53, 54, 55, 60, 61, 57, 56, 58, 59], 29311 sort: [60, 'desc'] 29312 }, 29313 17: { 29314 order: 2, 29315 stats: [53, 54, 55, 60, 61, 57, 56, 58, 59], 29316 sort: [60, 'desc'] 29317 } 29318 } 29319 } 29320 29321 vm.url = urlService; 29322 vm.position = positionService; 29323 vm.playerService = playerService; 29324 vm.options = {}; 29325 vm.columns = [[], []]; 29326 vm.sportId = $localStorage.solution.sportId; 29327 vm.playerCategories = []; 29328 vm.isMobile = false; 29329 vm.startsWith = _.startsWith; 29330 29331 var sportPlayerCategories = statsSportConfig[vm.sportId]; 29332 $scope.$watch('playerColumns', function () { 29333 buildColumns(); 29334 getStatistics(); 29335 }); 29336 29337 vm.showStat = function (column) { 29338 if (vm.isMobile && column.visibleMobile) { 29339 return true; 29340 } else if (!vm.isMobile && column.visibleDesktop) { 29341 return true; 29342 } 29343 return false; 29344 } 29345 29346 vm.getBackgroundStyle = function (i) { 29347 let style = {}; 29348 if (i % 2 != 0) { 29349 style['background-color'] = '#f0f0f0'; 29350 vm.backgroundColor = '#f0f0f0'; 29351 vm.isPair = false; 29352 } 29353 else { 29354 style['background-color'] = '#fff'; 29355 vm.backgroundColor = '#fff'; 29356 vm.isPair = true; 29357 } 29358 return style; 29359 } 29360 29361 vm.getBirthday = function (birthday) { 29362 return birthday !== null ? moment(birthday).format($translate.instant('directives.widgets.team.details.lineup.format.birthday')) : ''; 29363 } 29364 29365 Object.assign(vm, angular.fromJson(__team__)); 29366 29367 vm.filter = function (filter) { 29368 vm.options.seasonId = filter.season; 29369 29370 getStatistics(); 29371 }; 29372 29373 29374 vm.getStatisticValue = function (player, statisticId) { 29375 if (_.startsWith(statisticId, 'player')) { 29376 var playerParamId = _.parseInt(statisticId.match(/^player(\d+)$/)[1]); 29377 switch (playerParamId) { 29378 case 1:
29379 return { value: player.Number, class: 'text-center', sortValue: _.parseInt(player.Number) }; 29380 case 2: 29381 return { value: player.Name, class: 'text-nowrap sticky-col', sortValue: _.kebabCase(player.Name), url: vm.url.getPlayerUrl(player.Name, player.Id) }; 29382 case 3: 29383 return { value: positionService.getPosition(player.Position, 'abbreviation'), class: 'text-center'}; 29384 case 4: 29385 return { value: player.TeamName, class: 'text-nowrap', sortValue: _.kebabCase(player.TeamName), url: vm.url.getTeamUrl(player.TeamName, vm.id)}; 29386 case 5: 29387 return { value: playerService.getAge(player.Birthday), class: 'text-center' }; 29388 case 6: 29389 return { value: player.Height, class: 'text-center' }; 29390 case 7: 29391 return { value: player.Weight, class: 'text-center' }; 29392 case 8: 29393 case 13: 29394 case 14: 29395 return { value: player.Level, sortValue: _.kebabCase(player.Level), class: 'text-center' }; 29396 case 9: 29397 return { value: vm.getBirthday(player.Birthday), class: 'text-center' }; 29398 case 10: 29399 return { value: $translate.instant(playerService.getStatus(player.LineupStatus)), class: 'text-center' }; 29400 case 11: 29401 return { value: $translate.instant(playerService.getPlayerType(player.PlayerStatus)), sortValue: _.kebabCase(player.Type), class: 'text-center' } 29402 } 29403 29404 return { value: '', class: 'text-center' }; 29405 } 29406 else { 29407 if (player.Stats.length > 0) { 29408 var playerStat = _.find(player.Stats, function (statistic) { 29409 return statistic.StatTypeId === statisticId; 29410 }); 29411 29412 if (playerStat) { 29413 return { value: playerStat.DisplayValue, class: 'text-center', sortValue: playerStat.Value }; 29414 } 29415 } 29416 29417 return { value: '0', class: 'text-center' }; 29418 } 29419 }; 29420 29421 vm.sort = function (playerCategory, column) { 29422 // Reset columns sort. 29423 _.forEach(playerCategory.columns, function (_column) { 29424 if (_column.id !== column.id) { 29425 _column.sort = ''; 29426 } 29427 }); 29428 29429 if (angular.isUndefined(column.sort)) { 29430 column.sort = 'desc'; 29431 } else { 29432 // Toggle sort order. 29433 column.sort = column.sort === 'desc' 29434 ? column.sort = 'asc' 29435 : column.sort = 'desc'; 29436 } 29437 29438 var players = _.filter(playerCategory.players, function (player) { 29439 return player.Stats.length > 0; 29440 }); 29441 29442 if (players.length > 0) { 29443 playerCategory.players = _.orderBy(players, function (player) { 29444 var statisticValue = vm.getStatisticValue(player, column.id) 29445 return statisticValue.sortValue || statisticValue.value; 29446 }, [column.sort]); 29447 } 29448 }; 29449 29450 function getStatistics() { 29451 statisticService.getPlayersStatisticsByTeamId(__solutionId__, vm.id, vm.options) 29452 .then(function (response) { 29453 // Get all player categories. 29454 var categories = response.data.PlayersCategories; 29455 29456 _.forEach(categories, function (category) { 29457 var playerCategory = _.find(vm.playerCategories, { id: category.Id }); 29458 if (playerCategory) { 29459 var sort = sportPlayerCategories[playerCategory.id].sort; 29460 29461 var players = _.filter(category.Players, function (player) { 29462 return player.Stats.length >= 0; 29463 }); 29464 playerCategory.players = [] 29465 if (players.length > 0) { 29466 // Get index of sorted column 29467 var index = _.findIndex(players[0].Stats, function (statistic) { 29468 return statistic.StatTypeId === _.find(playerCategory.columns, function (column) { return column.sort; }).id; 29469 }); 29470 29471 _.find(playerCategory.columns, function (column) { 29472 return column.id === sort[0]; 29473 }).sort = sort[1]; 29474 29475 playerCategory.players = _.orderBy(players, function (player) { 29476 return player.Stats[index].Value; 29477 }, [sort[1]]); 29478 } 29479 } 29480 }) 29481 29482 29483 }) 29484 .catch(function (error) { 29485 // TODO Bugsnag 29486 }); 29487 } 29488 29489 function buildColumns() { 29490 var playerCategories = []; 29491 _.forEach(sportPlayerCategories, function (value, key) { 29492 var categoryColumns = $scope.playerColumns[key].map(function (col) { 29493 if (_.startsWith(col.id, 'player')) { 29494 var stat = playerService.getPlayerColumn(_.parseInt(col.id.match(/^player(\d+)$/)[1])); 29495 } 29496 else { 29497 var stat = statisticService.getPlayerStatisticByStatId(col.id); 29498 } 29499 29500 return { 29501 id: col.id, 29502 visibleDesktop: col.visibleDesktop, 29503 visibleMobile: col.visibleMobile, 29504 stat: (stat || {}), 29505 } 29506 }); 29507 29508 var category = { 29509 id: _.parseInt(key), 29510 columns: categoryColumns, 29511 players: [], 29512 order: value.order 29513 }; 29514 29515 _.find(category.columns, function (column) { 29516 return column.id === value.sort[0]; 29517 }).sort = value.sort[1]; 29518 playerCategories.push(category); 29519 }); 29520 29521 vm.playerCategories = playerCategories; 29522 } 29523 } 29524})(); 29525; 29526(function () { 29527 'use strict'; 29528 29529 angular 29530 .module('app.directives') 29531 .directive('teamPlayersStatistics', teamPlayersStatistics); 29532 29533 teamPlayersStatistics.$inject = []; 29534 29535 function teamPlayersStatistics() { 29536 return { 29537 restrict: 'E', 29538 scope: { 29539 widget: '=', 29540 playerColumns: '=' 29541 }, 29542 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/detail
29542s/players-statistics/team-players-statistics.tpl.html', 29543 controller: 'TeamPlayersStatisticsController', 29544 controllerAs: 'teamPlayersStatistics' 29545 }; 29546 } 29547})();; 29548(function () { 29549 'use strict'; 29550 29551 angular 29552 .module('app.directives') 29553 .controller('TeamStaffWidgetController', TeamStaffWidgetController); 29554 29555 TeamStaffWidgetController.$inject = ['$scope', 'PositionService', 'StaffService']; 29556 29557 function TeamStaffWidgetController($scope, positionService, staffService) { 29558 var vm = this; 29559 29560 vm.position = positionService; 29561 vm.staff = staffService; 29562 29563 Object.assign(vm, angular.fromJson(__team__)); 29564 29565 staffService.getStaffByTeamId(vm.id) 29566 .then(function(response) { 29567 vm.staff = response.data; // All the staff from the team. 29568 }) 29569 .catch(function(error) { 29570 bugsnag.notify(error); 29571 }); 29572 } 29573})(); 29574; 29575(function () { 29576 'use strict'; 29577 29578 angular 29579 .module('app.directives') 29580 .directive('teamStaff', teamStaff); 29581 29582 teamStaff.$inject = []; 29583 29584 function teamStaff() { 29585 return { 29586 restrict: 'E', 29587 scope: { 29588 players: '=' 29589 }, 29590 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/detail
29590s/staff/team-staff.tpl.html', 29591 controller: 'TeamStaffWidgetController', 29592 controllerAs: 'teamStaff' 29593 }; 29594 } 29595})();; 29596(function () { 29597 'use strict'; 29598 29599 angular 29600 .module('app.directives') 29601 .controller('TeamLeadersWidgetController', TeamLeadersWidgetController); 29602 29603 TeamLeadersWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'DivisionService', 'StatisticService', '$translate', 'WebsiteEditorService', 'SolutionService']; 29604 29605 function TeamLeadersWidgetController($rootScope, $scope, $localStorage, urlService, divisionService, statisticService, $translate, websiteEditorService, solutionService) { 29606 var vm = this; 29607 vm.url = urlService; 29608 vm.options = { 29609 page: 1, 29610 pageSize: 10000, 29611 seasonId: $localStorage.solution.defaultSeasonId, 29612 sortStatId: 15, 29613 sortOrder: 'desc', 29614 automatedStats: false 29615 }; 29616 29617 // Get parameters of the widget. 29618 vm.widget = angular.fromJson(widgets[$scope.widget]); 29619 29620 var section = null 29621 29622 for (var i = 0; i < page.rows.length && !section; i++) { 29623 var row = page.rows[i]; 29624 section = _.find(row.sections, { uuid: $scope.section }); 29625 } 29626 29627 vm.section = section; 29628 vm.nbTeamsDisplayed = undefined; 29629 29630 vm.columnsToDisplay = [5, 6, 7, 8, 10, 12, 15]; 29631 29632 switch ($localStorage.solution.sportId) { 29633 case 1: // Hockey 29634 var section = null; 29635 29636 vm.options.sortStatId = 15; 29637 vm.options.sortOrder = 'desc'; 29638 vm.columnsToDisplay = [5, 6, 7, 8, 15]; 29639 29640 if ((vm.section.md || vm.section.sm) > 4) { 29641 vm.columnsToDisplay = [5, 6, 7, 8, 10, 12, 15]; 29642 } 29643 29644 break; 29645 29646 case 2: // Baseball 29647 vm.options.sortStatId = 73; 29648 vm.options.sortOrder = 'desc'; 29649 vm.columnsToDisplay = [55, 56, 57, 73]; 29650 break; 29651 29652 case 3: //Football 29653 vm.options.sortStatId = 68; 29654 vm.options.sortOrder = 'desc'; 29655 vm.columnsToDisplay = [64, 65, 66, 67, 68]; 29656 break; 29657 29658 case 4: // Basketball 29659 vm.options.sortStatId = 79; 29660 vm.options.sortOrder = 'desc'; 29661 vm.columnsToDisplay = [75, 76, 77, 78, 79]; 29662 break; 29663 29664 case 6: // Soccer 29665 vm.options.sortStatId = 42; 29666 vm.options.sortOrder = 'desc'; 29667 vm.columnsToDisplay = [38, 39, 40, 41, 42]; 29668 break; 29669 29670 case 7: // Volleyball 29671 vm.options.sortStatId = 88; 29672 vm.options.sortOrder = 'desc'; 29673 vm.columnsToDisplay = [84, 85, 86, 87, 88]; 29674 break; 29675 } 29676 29677 $scope.$watch(function () { return vm.section.md }, function (width) { 29678 switch ($localStorage.solution.sportId) { 29679 case 1: 29680 if ((vm.section.md || vm.section.sm) > 4) { 29681 vm.columnsToDisplay = [5, 6, 7, 8, 10, 12, 15]; 29682 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds(vm.columnsToDisplay); 29683 } 29684 else { 29685 vm.columnsToDisplay = [5, 6, 7, 8, 15]; 29686 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds(vm.columnsToDisplay); 29687 } 29688 break; 29689 } 29690 }) 29691 29692 // Set view model parameters. 29693 for (var parameter in vm.widget.parameters) { 29694 switch (vm.widget.parameters[parameter].id) { 29695 case 'seasonDivisionId': 29696 if(vm.widget.parameters[parameter].value === 'default'){ 29697 vm.options.seasonId = $localStorage.solution.defaultSeasonId.toString() 29698 vm.options.defaultDivision = 'divisions' 29699 vm.selectedDivision = vm.options.defaultDivision 29700 } else { 29701 vm.options.defaultDivision = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')).division 29702 vm.options.seasonId = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')).season 29703 vm.selectedDivision = vm.options.defaultDivision 29704 } 29705 break; 29706 29707 case 'nbTeamsDisplayed': 29708 vm.nbTeamsDisplayed = vm.widget.parameters[parameter].value; 29709 break; 29710 } 29711 } 29712 29713 // Triggered when parameters are changed. 29714 //TODO Probably better to switch to a service... 29715 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 29716 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 29717 .then(function (response) { 29718 // Save parameters.
29719 for (var parameter in vm.widget.parameters) { 29720 switch (vm.widget.parameters[parameter].id) { 29721 case 'seasonDivisionId': 29722 vm.widget.parameters[parameter].value = data.seasonDivisionId 29723 vm.options.defaultDivision = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')).division 29724 vm.options.seasonId = angular.fromJson(data.seasonDivisionId.replace(/\'/g, '"')).season 29725 vm.selectedDivision = vm.options.defaultDivision 29726 break; 29727 29728 case 'nbTeamsDisplayed': 29729 vm.widget.parameters[parameter].value = data.nbTeamsDisplayed; 29730 vm.nbTeamsDisplayed = data.nbTeamsDisplayed; 29731 break; 29732 } 29733 } 29734 // Update the variable. 29735 widgets[$scope.widget] = angular.toJson(vm.widget); 29736 getDivisions(); 29737 }) 29738 .catch(function (error) { 29739 bugsnag.notify(error); 29740 }); 29741 }); 29742 29743 $scope.$on('$destroy', listener); 29744 29745 // TODO Get sport id 29746 // TODO Move default columns into service 29747 // TODO Implement columns parameters into the widget. 29748 vm.columns = statisticService.getTeamStatisticColumnsByColumnIds(vm.columnsToDisplay); 29749 // TODO Initialize column sort / change hardcoded value. 29750 _.find(vm.columns, function (column) { 29751 return column.id === vm.options.sortStatId; 29752 }).sort = vm.options.sortOrder; 29753 29754 vm.showDivisions = function (division) { 29755 return (!isNaN(division.Id) && division.Id === parseInt(vm.selectedDivision)) || 29756 (vm.selectedDivision === 'divisions' && !isNaN(division.Id)); 29757 } 29758 29759 vm.getStatisticValue = function (team, statisticId) { 29760 return _.find(team.stats, function (statistic) { 29761 return statistic.statTypeId === statisticId; 29762 }).displayValue; 29763 }; 29764 29765 if (!$localStorage.solution.defaultSeasonId) { 29766 solutionService.getSolutionById(__solutionId__) 29767 .then(function (response) { 29768 $localStorage.solution = response.data; 29769 getDivisions(); 29770 }) 29771 .catch(function (error) { 29772 bugsnag.notify(error); 29773 }); 29774 } else { 29775 getDivisions(); 29776 } 29777 29778 function getDivisions() { 29779 if (vm.options.seasonId === 'default') { 29780 vm.options.seasonId = $localStorage.solution.defaultSeasonId.toString(); 29781 } 29782 divisionService.getDivisionsBySeasonId(__solutionId__, vm.options.seasonId) 29783 .then(function (response) { 29784 vm.seasonNotSet = true; 29785 vm.teams = new Array(5); 29786 29787 if (response.data.length <= 1) { 29788 vm.divisions = [ 29789 { Id: 'general', Name: $translate.instant('directives.widgets.team.standings.labels.general') } 29790 ]; 29791 vm.selectedDivision = 'general'; 29792 } else { 29793 vm.divisions = [ 29794 { Id: 'general', Name: $translate.instant('directives.widgets.team.standings.labels.general') }, 29795 { Id: 'divisions', Name: $translate.instant('directives.widgets.team.standings.labels.divisions') } 29796 ]; 29797 Array.prototype.push.apply(vm.divisions, response.data); 29798 // vm.selectedDivision = response.data[0].Id; // Select the first division 29799 } 29800 29801 getStatistics(); 29802 }) 29803 .catch(function (error) { 29804 bugsnag.notify(error); 29805 }); 29806 } 29807 29808 function getStatistics() { 29809 // TODO Should be by season Id 29810 statisticService.getTeamStatisticsBySolutionId(__solutionId__, vm.options) 29811 .then(function (response) { 29812 if (!angular.isUndefinedOrNull(response.data.results)) { 29813 vm.seasonNotSet = false; 29814 // Get all the teams from the statistics. 29815 vm.teams = response.data.results; 29816 // Fill divisions with teams. 29817 _.forEach(vm.divisions, function (division) { 29818 division.teams = []; 29819 division.divisions = []; 29820 29821 _.forEach(vm.teams, function (team) { 29822 if (team.divisionId === division.Id) { 29823 if (angular.isUndefined(division.teams)) { 29824 division.teams = []; 29825 } 29826 29827 division.teams.push(team); 29828 } 29829 }) 29830 29831 var parentDivision = _.find(vm.divisions, { Id: division.ParentId }); 29832 if (parentDivision) { 29833 parentDivision.divisions.push(division); 29834 } 29835 }); 29836 } else { 29837 // Season is not ready. 29838 vm.seasonNotSet = true; 29839 29840 // Set empty teams array. 29841 vm.teams = new Array(5); 29842 } 29843 }) 29844 .catch(function (error) { 29845 bugsnag.notify(error); 29846 }); 29847 } 29848 29849 vm.selectDivision = function (item) { 29850 vm.selectedDivision = item.Id; 29851 }; 29852 29853 /*vm.getStatisticValue = function(player, statisticId) { 29854 return _.find(player.Stats, function(statistic) { 29855 return statistic.StatTypeId === statisticId; 29856 }).Value; 29857 }; 29858 29859 seasonService.getSeasonsBySolutionId(__solutionId__, { active: true }) 29860 .then(function(response) { 29861 vm.options = { 29862 page: 1, 29863 pageSize: vm.nbGoaltendersDisplayed, 29864 sortOrder: 'desc', 29865 sortStatId: vm.playerStatisticDisplayed, 29866 positionType: 2, 29867 seasonId: seasonId //response.data.Id 29868 }; 29869 29870 // Display player leaders. 29871 getPlayerLeaders(); 29872 29873 vm.options = { 29874 page: 1, 29875 pageSize: vm.nbGoaltendersDisplayed, 29876 sortOrder: 'asc', // TODO Depending the stat request... 29877 sortStatId: vm.goaltenderStatisticDisplayed, 29878 positionType: 1, 29879 seasonId: seasonId //response.data.Id 29880 }; 29881 29882 // Display goaltender leaders. 29883 getGoaltenderLeaders(); 29884 }) 29885 .catch(function(error) { 29886 29887 }); 29888 //getPlayers(parseInt(widgetDefinition.parameters[0].value)); // TODO Need method to get paramaters by name. 29889 29890 /*function getPlayers(nbPlayersDisplayed) { 29891 // TODO Replace slice with REST call. 29892 vm.allPlayers = players.slice(0, nbPlayersDisplayed); 29893 }*/ 29894 29895 /*function getPlayerLeaders() { 29896 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, vm.options) 29897 .then(function(response) { 29898 // Get the total count of players. 29899 //vm.totalCount = response.data.TotalCount; 29900 29901 vm.players = response.data.Results; // All players. 29902 }) 29903 .catch(function(error) { 29904 // TODO Bugsnag 29905 }); 29906 } 29907 29908 function getGoaltenderLeaders() { 29909 statisticService.getPlayerStatisticsBySolutionId(__solutionId__, vm.options) 29910 .then(function(response) { 29911 vm.goaltenders = _.forEach(response.data.Results, function(goaler) { 29912 _.forEach(goaler.Stats, function(statistic) { 29913 statistic.Value = formatValues(statistic.StatTypeId, statistic.Value); 29914 }); 29915 }); // All goaltenders. 29916 }) 29917 .catch(function(error) { 29918 // TODO Bugsnag 29919 }); 29920 } 29921 29922 function formatValues(statisticId, value) { 29923 switch (statisticId) { 29924 case 30: // Save Percentage 29925 return parseFloat(value / 1000).toFixed(3); 29926 29927 case 31: // Points per game 29928 case 32: // Points per game 29929 return parseFloat(value / 100).toFixed(2); 29930 29931 default: 29932 return value; 29933 } 29934 }*/ 29935 } 29936})(); 29937; 29938(function () { 29939 'use strict'; 29940 29941 angular 29942 .module('app.directives') 29943 .directive('teamLeaders', teamLeaders); 29944 29945 teamLeaders.$inject = []; 29946 29947 function teamLeaders() { 29948 return { 29949 restrict: 'E', 29950 scope: { 29951 section: '=', 29952 widget: '=', 29953 }, 29954 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/leaders/team-leaders.tpl.html?version=1', 29955 controller: 'TeamLeadersWidgetController', 29956 controllerAs: 'teamLeaders' 29957 }; 29958 } 29959})();; 29960(function () { 29961 'use strict'; 29962 29963 angular 29964 .module('app.directives') 29965 .controller('TeamLeadersDivisionWidgetController', TeamLeadersDivisionWidgetController); 29966 29967 TeamLeadersDivisionWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'DivisionService', 'StatisticService', '$translate', 'WebsiteEditorService', 'SolutionService']; 29968 29969 function TeamLeadersDivisionWidgetController($rootScope, $scope, $localStorage, urlService, divisionService, statisticService, $translate, websiteEditorService, solutionService) { 29970 var vm = this; 29971 vm.url = urlService; 29972 console.log($scope); 29973 29974 vm.getStatisticValue = function (team, statisticId) { 29975 return _.find(team.stats, function (statistic) { 29976 return statistic.statTypeId === statisticId; 29977 }).displayValue; 29978 }; 29979 29980 } 29981})(); 29982 ; 29983(function () { 29984 'use strict'; 29985 29986 angular 29987 .module('app.directives') 29988 .directive('teamLeadersDivision', teamLeadersDivision); 29989 29990 teamLeadersDivision.$inject = []; 29991 29992 function teamLeadersDivision() { 29993 return { 29994 restrict: 'E', 29995 scope: { 29996 division: '=', 29997 level: '=', 29998 columns: '=', 29999 selectedDivision: '=', 30000 nbTeamsDisplayed: '=' 30001 }, 30002 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/leaders/team-leaders-division.tpl.html?version=1', 30003 controller: 'TeamLeadersDivisionWidgetController', 30004 controllerAs: 'teamLeadersDivision' 30005 }; 30006 } 30007})();; 30008(function () { 30009 'use strict'; 30010 30011 angular 30012 .module('app.directives') 30013 .controller('TeamHeadToHeadWidgetController', TeamHeadToHeadWidgetController); 30014 30015 TeamHeadToHeadWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService', 'DivisionService', 'StatisticService', '$translate', 'WebsiteEditorService', 'SolutionService', 'TeamService']; 30016 30017 function TeamHeadToHeadWidgetController($rootScope, $scope, $localStorage, urlService, divisionService, statisticService, $translate, websiteEditorService, solutionService, teamService) { 30018 var vm = this; 30019 vm.widget = angular.fromJson(widgets[$scope.widget]); 30020 vm.url = urlService; 30021 vm.options = {}; 30022 vm.parameters = {}; 30023 vm.teams = []; 30024 vm.teamsStats = []; 30025 vm.columns = []; 30026 vm.statList = []; 30027 vm.isMobile = false; 30028 Object.assign(vm, angular.fromJson(__team__)); 30029 30030 //Component Mount
30031 for (var parameter in vm.widget.parameters) { 30032 switch (vm.widget.parameters[parameter].id) { 30033 case 'columnsDisplaySelect': 30034 vm.parameters.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30035 break; 30036 } 30037 } 30038 30039 vm.seasonId = $localStorage.solution.defaultSeasonId; 30040 30041 buildColumns(); 30042 30043 // Listener 30044 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 30045 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 30046 .then(function () { 30047 for (var parameter in vm.widget.parameters) { 30048 switch (vm.widget.parameters[parameter].id) { 30049 case 'columnsDisplaySelect': 30050 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 30051 vm.parameters.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 30052 break; 30053 } 30054 } 30055 widgets[$scope.widget] = angular.toJson(vm.widget); 30056 buildColumns(); 30057 }) 30058 .catch(function (error) { 30059 bugsnag.notify(error); 30060 }); 30061 }); 30062 30063 $scope.$on('$destroy', listener); 30064 30065 vm.getBackgroundStyle = function (i) { 30066 let style = {}; 30067 if (i % 2 != 0) { 30068 style['background-color'] = '#f0f0f0'; 30069 vm.isPair = false; 30070 } 30071 else { 30072 style['background-color'] = '#fff'; 30073 vm.isPair = true; 30074 } 30075 return style; 30076 } 30077 30078 vm.showStat = function (column) { 30079 if (vm.isMobile && column.visibleMobile) { 30080 return true; 30081 } else if (!vm.isMobile && column.visibleDesktop) { 30082 return true; 30083 } 30084 return false; 30085 } 30086 30087 vm.filter = function (filter) { 30088 vm.seasonId = filter.season; 30089 vm.options.divisionId = filter.division; 30090 getTeams(); 30091 }; 30092 30093 vm.sort = function (column) { 30094 //Reset columns sort. 30095 _.forEach(vm.columns, function (_column) { 30096 30097 if (_column.id !== column.id) { 30098 _column.sort = ''; 30099 30100 } 30101 if (_column.name !== column.name) { 30102 _column.sort = ''; 30103 } 30104 }); 30105 30106 if (angular.isUndefined(column.sort)) { 30107 column.sort = 'asc'; 30108 } else { 30109 // Toggle sort order. 30110 column.sort = column.sort === 'desc' 30111 ? column.sort = 'asc' 30112 : column.sort = 'desc'; 30113 } 30114 30115 vm.teams = _.orderBy(vm.teams, function (team) { 30116 switch (column.id) { 30117 case "": 30118 return _.kebabCase(team.name); 30119 default: 30120 var statisticValue = vm.getStatisticValue(team , column.id) 30121 return statisticValue.value; 30122 } 30123 }, [column.sort]); 30124 }; 30125 30126 function getTeams() { 30127 vm.teams = []; 30128 teamService.getTeamsBySeasonId(__solutionId__, vm.seasonId) 30129 .then(function (response) { 30130 _.forEach(response.data, function (team) { 30131 if (team.id !== vm.id) { 30132 if (team.divisionId == vm.options.divisionId || vm.options.divisionId == "divisions") { 30133 vm.teams.push(team); 30134 } 30135 } 30136 }); 30137 getStats(); 30138 }) 30139 .catch(function (error) { 30140 bugsnag.notify(error); 30141 }); 30142 } 30143 30144 function getStats() { 30145 vm.teamsStats = []; 30146 statisticService.getSummarizedTeamStatisticsBySolutionId(__solutionId__, vm.id, vm.seasonId) 30147 .then(function (response) { 30148 vm.teamsStats = response.data; 30149 }) 30150 .catch(function (error) { 30151 bugsnag.notify(error); 30152 }); 30153 } 30154 30155 vm.getStatisticValue = function (team, statisticId) { 30156 vm.statList = team.stats; 30157 var teamPlayedAgainst = _.find(vm.teamsStats, function (otherTeam) { 30158 return otherTeam.id === team.id; 30159 }); 30160 if (teamPlayedAgainst) { 30161 30162 if (teamPlayedAgainst.stats.length > 0) { 30163 var playerStat = _.find(teamPlayedAgainst.stats, function (statistic) { 30164 return statistic.statTypeId === statisticId; 30165 }); 30166 30167 if (playerStat) { 30168 return { value: playerStat.displayValue, class: 'text-center' }; 30169 } 30170 } 30171 } 30172 return { value: '0', class: 'text-center' }; 30173 } 30174 30175 function buildColumns() { 30176 vm.columns = []; 30177 _.forEach(vm.parameters.columnsDisplaySelect, function (col) { 30178 var stat = statisticService.getTeamStatisticByStatId(col.id); 30179 vm.columns.push({ 30180 id: col.id, 30181 visibleDesktop: col.visibleDesktop, 30182 visibleMobile: col.visibleMobile, 30183 name: stat.name, 30184 abbreviation: stat.abbreviation 30185 }) 30186 }); 30187 vm.columns.unshift({ 30188 id: '', 30189 visibleDesktop: true, 30190 visibleMobile: true, 30191 abbreviation: $translate.instant('directives.widgets.team.headToHead.columns.team'), 30192 name: $translate.instant('directives.widgets.team.headToHead.columns.team') 30193 }); 30194 } 30195 } 30196})(); 30197; 30198(function () { 30199 'use strict'; 30200 30201 angular 30202 .module('app.directives') 30203 .directive('teamHeadToHead', teamHeadToHead); 30204 30205 teamHeadToHead.$inject = []; 30206 30207 function teamHeadToHead() { 30208 return { 30209 restrict: 'E', 30210 scope: { 30211 widget: '=', 30212 season: '=', 30213 division: '=', 30214 parameters: '=', 30215 divisions: '=' 30216 }, 30217 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/head-to-head/team-head-to-head.tpl.html?version=1', 30218 controller: 'TeamHeadToHeadWidgetController', 30219 controllerAs: 'teamHeadToHead' 30220 }; 30221 } 30222})();; 30223(function () { 30224 'use strict'; 30225 30226 angular 30227 .module('app.directives') 30228 .controller('TeamListWidgetController', TeamListWidgetController); 30229 30230 TeamListWidgetController.$inject = ['$rootScope', '$timeout', '$scope', '$translate', '$localStorage', 'WebsiteEditorService', 'UrlService', 'TeamService', 'DivisionService', 'SeasonService']; 30231 30232 function TeamListWidgetController($rootScope, $timeout, $scope, $translate, $localStorage, websiteEditorService, urlService, teamService, divisionService, seasonService) { 30233 var vm = this; 30234 30235 // State variables definition ---------- 30236 vm.widget = angular.fromJson(widgets[$scope.widget]); 30237 vm.defaultListEmpty = false; 30238 vm.initialDefaultListEmpty = false; 30239 vm.url = urlService; 30240 vm.page = 1; 30241 vm.pageSize = 12; 30242 vm.searchText = ""; 30243 vm.divisionId = undefined; 30244 vm.seasonId = undefined; 30245 vm.results = []; 30246 vm.totalCount = 0; 30247 vm.isFirstCall = true; 30248 vm.defaultSeason = undefined; 30249 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="950"></iframe>`; 30250 30251 //Component mount.
30252 for (var parameter in vm.widget.parameters) { 30253 switch (vm.widget.parameters[parameter].id) { 30254 case 'defaultListEmpty': 30255 vm.initialDefaultListEmpty = vm.widget.parameters[parameter].value === 'true'; 30256 vm.defaultListEmpty = vm.widget.parameters[parameter].value === 'true'; 30257 break; 30258 } 30259 } 30260 30261 // Listener 30262 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 30263 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 30264 .then(function () { 30265 for (var parameter in vm.widget.parameters) { 30266 switch (vm.widget.parameters[parameter].id) { 30267 case 'defaultListEmpty': 30268 vm.widget.parameters[parameter].value = data.defaultListEmpty.toString(); 30269 vm.defaultListEmpty = data.defaultListEmpty; 30270 vm.initialDefaultListEmpty = data.defaultListEmpty; 30271 break; 30272 } 30273 } 30274 widgets[$scope.widget] = angular.toJson(vm.widget); 30275 vm.page = 1; 30276 vm.isFirstCall = true; 30277 getTeams(); 30278 }) 30279 .catch(function (error) { 30280 bugsnag.notify(error); 30281 }); 30282 }); 30283 30284 $scope.$on('$destroy', listener); 30285 30286 // State methods ---------- 30287 vm.filter = function (filter) { 30288 vm.searchText = filter.searchText; 30289 vm.divisionId = filter.division; 30290 vm.seasonId = filter.season; 30291 vm.page = 1; 30292 getTeams(); 30293 } 30294 30295 function getTeams() { 30296 if (vm.isFirstCall) { 30297 vm.defaultSeason = vm.seasonId; 30298 vm.isFirstCall = false; 30299 } 30300 30301 if (!vm.searchText && vm.divisionId === 'divisions' && vm.seasonId == vm.defaultSeason && vm.initialDefaultListEmpty) { 30302 $timeout(function () { 30303 vm.defaultListEmpty = true; 30304 }); 30305 } else { 30306 var options = { 30307 page: vm.page, 30308 pageSize: vm.pageSize 30309 }; 30310 30311 if (angular.isDefined(vm.searchText)) { 30312 options.searchText = vm.searchText; 30313 } 30314 30315 if (angular.isDefined(vm.divisionId) && vm.divisionId !== "divisions" && vm.divisionId !== "general") { 30316 options.divisionId = vm.divisionId; 30317 } 30318 30319 if (angular.isDefined(vm.seasonId)&& vm.seasonId !== "all") { 30320 options.seasonId = vm.seasonId; 30321 } 30322 teamService.getTeamsBySolutionIdWithOptions(__solutionId__, options) 30323 .then(function (response) { 30324 var teamsResult = []; 30325 response.data.results.forEach(function (team) { 30326 teamsResult.push({ 30327 Id: team.id, 30328 Name: team.name, 30329 Avatar: team.avatar, 30330 Abbreviation: team.abbreviation, 30331 Division: team.division 30332 }); 30333 }); 30334 vm.results = teamsResult; 30335 vm.totalCount = response.data.totalCount; 30336 vm.defaultListEmpty = false; 30337 }) 30338 .catch(function (error) { 30339 bugsnag.notify(error); 30340 vm.defaultListEmpty = false; 30341 }); 30342 } 30343 } 30344 30345 vm.clickPage = function (page) { 30346 vm.page = page; 30347 getTeams(); 30348 }; 30349 30350 vm.clickPrevious = function () { 30351 vm.page -= 1;
30352 getTeams(); 30353 }; 30354 30355 vm.clickNext = function () { 30356 vm.page += 1; 30357 getTeams(); 30358 }; 30359 } 30360})(); 30361; 30362(function () { 30363 'use strict'; 30364 30365 angular 30366 .module('app.directives') 30367 .directive('teamList', teamList); 30368 30369 teamList.$inject = []; 30370 30371 function teamList() { 30372 return { 30373 restrict: 'E', 30374 scope: { 30375 widget: '=' 30376 }, 30377 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/list/team-list.tpl.html', 30378 controller: 'TeamListWidgetController', 30379 controllerAs: 'teamList' 30380 }; 30381 } 30382})();; 30383(function () { 30384 'use strict'; 30385 30386 angular 30387 .module('app.directives') 30388 .controller('TeamStandingsWidgetController', TeamStandingsWidgetController); 30389 30390 TeamStandingsWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 30391 30392 function TeamStandingsWidgetController($rootScope, $scope, websiteEditorService) { 30393 var vm = this; 30394 30395 //State variables 30396 vm.widget = angular.fromJson(widgets[$scope.widget]); 30397 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 30398 vm.parameters = {}; 30399 vm.season = undefined; 30400 vm.division = undefined; 30401 vm.divisions = undefined; 30402 vm.container = undefined; 30403 30404 //Component mount. 30405 for (var parameter in vm.widget.parameters) { 30406 switch (vm.widget.parameters[parameter].id) { 30407 case 'columnsDisplaySelect': 30408 vm.parameters.columnsDisplaySelect = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30409 break; 30410 30411 case 'sortDirection': 30412 vm.parameters.sortOrder = vm.widget.parameters[parameter].value; 30413 break; 30414 30415 case 'sortStat': 30416 vm.parameters.sortStatId = vm.widget.parameters[parameter].value; 30417 break; 30418 } 30419 } 30420 30421 // Listener 30422 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 30423 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 30424 .then(function () { 30425 for (var parameter in vm.widget.parameters) { 30426 switch (vm.widget.parameters[parameter].id) { 30427 case 'columnsDisplaySelect': 30428 vm.widget.parameters[parameter].value = data.columnsDisplaySelect; 30429 vm.parameters.columnsDisplaySelect = angular.fromJson(data.columnsDisplaySelect.replace(/\'/g, '"')); 30430 break; 30431 30432 case 'sortDirection': 30433 vm.widget.parameters[parameter].value = data.sortDirection; 30434 vm.parameters.sortOrder = data.sortDirection; 30435 break; 30436 30437 case 'sortStat': 30438 vm.widget.parameters[parameter].value = data.sortStat; 30439 vm.parameters.sortStatId = data.sortStat; 30440 break; 30441 } 30442 } 30443 widgets[$scope.widget] = angular.toJson(vm.widget); 30444 }) 30445 .catch(function (error) { 30446 bugsnag.notify(error); 30447 }); 30448 }); 30449 30450 $scope.$on('$destroy', listener); 30451 30452 //State functions 30453 vm.filter = function (filter) { 30454 vm.divisions = filter.divisions; 30455 vm.division = filter.division; 30456 vm.season = filter.season; 30457 vm.container = filter.container; 30458 } 30459 30460 } 30461})(); 30462; 30463(function () { 30464 'use strict'; 30465 30466 angular 30467 .module('app.directives') 30468 .directive('teamStandings', teamStandings); 30469 30470 teamStandings.$inject = []; 30471 30472 function teamStandings() { 30473 return { 30474 restrict: 'E', 30475 scope: { 30476 widget: '=' 30477 }, 30478 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/standings/team-standings.tpl.html', 30479 controller: 'TeamStandingsWidgetController', 30480 controllerAs: 'teamStandings' 30481 }; 30482 } 30483})();; 30484(function () { 30485 'use strict'; 30486 30487 angular 30488 .module('app.directives') 30489 .controller('TeamStandingsTableWidgetController', TeamStandingsTableWidgetController); 30490 30491 TeamStandingsTableWidgetController.$inject = ['$scope', '$window', '$localStorage', 'UrlService', 'StatisticService']; 30492 30493 function TeamStandingsTableWidgetController($scope, $window, $localStorage, urlService, statisticService) { 30494 var vm = this; 30495 30496 //State variables 30497 vm.url = urlService; 30498 vm.options = { 30499 page: 1, 30500 pageSize: 10000, 30501 sortStatId: null, 30502 sortOrder: null, 30503 automatedStats: false, 30504 seasonId: $localStorage.solution.defaultSeasonId.toString() 30505 }; 30506 vm.columns = []; 30507 vm.divisionsToShow = undefined; 30508 30509 //Component mount. 30510 buildColumns($scope.parameters.columnsDisplaySelect); 30511 vm.options.sortOrder = $scope.parameters.sortOrder; 30512 vm.options.sortStatId = $scope.parameters.sortStatId; 30513 formatColumns(); 30514 30515 // Listener 30516 $scope.$watch('parameters', function () { 30517 buildColumns($scope.parameters.columnsDisplaySelect); 30518 vm.options.sortOrder = $scope.parameters.sortOrder; 30519 vm.options.sortStatId = $scope.parameters.sortStatId; 30520 formatColumns(); 30521 getStatistics(); 30522 }, true); 30523 30524 $scope.$watch('[season, division]', function () { 30525 vm.options.seasonId = $scope.season; 30526 getStatistics(); 30527 }) 30528 30529 vm.sort = function (column) { 30530 // Reset columns sort. 30531 _.forEach(vm.columns, function (_column) { 30532 if (_column.id !== column.id) { 30533 _column.sort = ''; 30534 } 30535 }); 30536 30537 if (angular.isUndefined(column.sort)) { 30538 column.sort = 'desc'; 30539 } else { 30540 // Toggle sort order. 30541 column.sort = column.sort === 'desc' 30542 ? column.sort = 'asc' 30543 : column.sort = 'desc'; 30544 } 30545 30546 // Get the statistics order by column selected. 30547 vm.options.sortStatId = column.id; 30548 vm.options.sortOrder = column.sort; 30549 getStatistics(); 30550 }; 30551 30552 vm.getStatisticValue = function (team, statisticId) { 30553 try { 30554 return _.find(team.stats, function (statistic) { 30555 return statistic.statTypeId === statisticId; 30556 }).displayValue; 30557 } 30558 catch (error) { 30559 return 0; 30560 } 30561 }; 30562 30563 vm.showStat = function (column) { 30564 if (isMobile() && column.visibleMobile) { 30565 return true; 30566 } else if (!isMobile() && column.visibleDesktop) { 30567 return true; 30568 } 30569 return false; 30570 } 30571 30572 //Functions 30573 function formatColumns() { 30574 vm.columns.forEach(function (col) {
30575 if (col.id == vm.options.sortStatId) { 30576 col.sort = vm.options.sortOrder; 30577 } 30578 }) 30579 } 30580 30581 function buildColumns(columnsToDisplay) { 30582 vm.columns = []; 30583 columnsToDisplay.forEach(function (col) { 30584 var stat = statisticService.getTeamStatisticByStatId(col.id); 30585 vm.columns.push({ 30586 id: col.id, 30587 visibleDesktop: col.visibleDesktop, 30588 visibleMobile: col.visibleMobile, 30589 name: stat.name, 30590 abbreviation: stat.abbreviation 30591 }) 30592 }); 30593 } 30594 30595 function formatDivisionsToShow() { 30596 vm.divisionsToShow = []; 30597 30598 if ($scope.division === 'container') { 30599 const newdivisions = []; 30600 var seasons = null; 30601 _.forEach($scope.divisions, function (division) { 30602 if (division.Id === 'general') { 30603 seasons = _.groupBy(division.teams, 'seasonId'); 30604 } 30605 }); 30606 _.forEach(seasons, function (season) { 30607 var division = {}; 30608 division.id = season[0].id; 30609 division.Name = season[0].seasonName; 30610 division.teams = season; 30611 newdivisions.push(division); 30612 }); 30613 vm.divisionsToShow = newdivisions; 30614 } 30615 else if ($scope.division === 'general') { 30616 _.forEach($scope.divisions, function (division) { 30617 if (division.Id === 'general') { 30618 vm.divisionsToShow = [division]; 30619 } 30620 }); 30621 } else { 30622 const newdivisions = []; 30623 _.forEach($scope.divisions, function (division) { 30624 if (division.Id != 'general' && division.Id != 'divisions') { 30625 if (!division.ParentId && $scope.division === 'divisions' || $scope.division == division.Id) { 30626 newdivisions.push(division); 30627 } 30628 } 30629 }); 30630 _.forEach(newdivisions, function (newdivision) { 30631 newdivision.divisions = []; 30632 _.forEach($scope.divisions, function (division) { 30633 if (division.ParentId && division.ParentId === newdivision.Id) { 30634 newdivision.divisions.push(division); 30635 } 30636 }); 30637 }); 30638 vm.divisionsToShow = newdivisions; 30639 } 30640 } 30641 30642 function getStatistics() { 30643 if ($scope.season === 'all') { 30644 vm.options.masterSeasonId = $scope.container; 30645 vm.options.seasonId = 0; 30646 $scope.division = 'container' 30647 } 30648 30649 // TODO Should be by season Id 30650 if ($scope.season) { 30651 statisticService.getTeamStatisticsBySolutionId(__solutionId__, vm.options) 30652 .then(function (response) { 30653 vm.teams = response.data.results; 30654 // Fill divisions with teams. 30655 _.forEach($scope.divisions, function (division) { 30656 division.divisions = []; 30657 division.teams = []; 30658 _.forEach(vm.teams, function (team) { 30659 if (team.divisionId === division.Id || division.Id === 'general') { 30660 division.teams.push(team); 30661 } 30662 }) 30663 30664 var parentDivision = _.find($scope.divisions, { Id: division.ParentId }); 30665 if (parentDivision) { 30666 parentDivision.divisions.push(division); 30667 } 30668 30669 }); 30670 30671 formatDivisionsToShow(); 30672 }) 30673 .catch(function (error) { 30674 bugsnag.notify(error); 30675 }); 30676 } 30677 } 30678 30679 function isMobile() { 30680 return $window.innerWidth <= 600; 30681 } 30682 } 30683})(); 30684; 30685(function () { 30686 'use strict'; 30687 30688 angular 30689 .module('app.directives') 30690 .directive('teamStandingsTable', teamStandingsTable) 30691
30692 teamStandingsTable.$inject = []; 30693 30694 function teamStandingsTable() { 30695 return { 30696 restrict: 'E', 30697 scope: { 30698 container: '=', 30699 season: '=', 30700 division: '=', 30701 parameters: '=', 30702 divisions: '=' 30703 }, 30704 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/standings/table/team-standings-table.tpl.html?version=1', 30705 controller: 'TeamStandingsTableWidgetController', 30706 controllerAs: 'teamStandingsTable' 30707 }; 30708 } 30709})();; 30710(function () { 30711 'use strict'; 30712 30713 angular 30714 .module('app.directives') 30715 .controller('TeamStandingsDivisionWidgetController', TeamStandingsDivisionWidgetController); 30716 30717 TeamStandingsDivisionWidgetController.$inject = ['$rootScope', '$scope', 'UrlService']; 30718 30719 function TeamStandingsDivisionWidgetController($rootScope, $scope, urlService) { 30720 var vm = this; 30721 30722 vm.url = urlService; 30723 } 30724})(); 30725; 30726(function () { 30727 'use strict'; 30728 30729 angular 30730 .module('app.directives') 30731 .directive('teamStandingsDivision', teamStandingsDivision); 30732 30733 teamStandingsDivision.$inject = []; 30734 30735 function teamStandingsDivision() { 30736 return { 30737 restrict: 'E', 30738 scope: { 30739 divisions: '=', 30740 columns: '=', 30741 sort: '=', 30742 getStatisticValue: '=', 30743 showStat: '=', 30744 level: '=' 30745 }, 30746 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/standings/division/team-standings-division.tpl.html', 30747 controller: 'TeamStandingsDivisionWidgetController', 30748 controllerAs: 'teamStandingsDivision' 30749 }; 30750 } 30751})();; 30752(function () { 30753 'use strict'; 30754 30755 angular 30756 .module('app.directives') 30757 .controller('TeamStandingsMultipleSeasonsWidgetController', TeamStandingsMultipleSeasonsWidgetController); 30758 30759 TeamStandingsMultipleSeasonsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$window', '$translate', 'StatisticService', 'DivisionService', 'WebsiteEditorService']; 30760 30761 function TeamStandingsMultipleSeasonsWidgetController($rootScope, $scope, $localStorage, $window, $translate, statisticService, divisionService, websiteEditorService) { 30762 var vm = this; 30763 30764 //State variables 30765 vm.widget = angular.fromJson(widgets[$scope.widget]); 30766 30767 vm.options = { 30768 sortStatId: 15, 30769 sortOrder: 'DESC', 30770 block: 'current' 30771 }; 30772 30773 //Component mount. 30774 for (var parameter in vm.widget.parameters) { 30775 switch (vm.widget.parameters[parameter].id) { 30776 case 'sortDirection': 30777 vm.options.sortOrder = vm.widget.parameters[parameter].value; 30778 break; 30779 30780 case 'sortStat': 30781 vm.options.sortStatId = vm.widget.parameters[parameter].value; 30782 break; 30783 30784 case 'sortBlock': 30785 vm.options.block = vm.widget.parameters[parameter].value; 30786 break; 30787 30788 case 'secondBlock': 30789 vm.secondBlock = vm.widget.parameters[parameter].value === 'true'; 30790 break; 30791 30792 case 'thirdBlock': 30793 vm.thirdBlock = vm.widget.parameters[parameter].value === 'true'; 30794 break; 30795 30796 case 'nameBlock1': 30797 vm.nameBlock1 = vm.widget.parameters[parameter].value; 30798 break; 30799 30800 case 'nameBlock1fr': 30801 vm.nameBlock1fr = vm.widget.parameters[parameter].value; 30802 break; 30803 30804 case 'seasonsBlock1': 30805 vm.seasonsBlock1 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30806 break; 30807 30808 case "tieBreakersBlock1": 30809 vm.tieBreakersBlock1 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30810 break; 30811 30812 case 'columnsDisplaySelectBlock1': 30813 vm.columnsDisplaySelectBlock1 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30814 break; 30815 30816 case 'nameBlock2': 30817 vm.nameBlock2 = vm.widget.parameters[parameter].value; 30818 break; 30819 30820 case 'nameBlock2fr': 30821 vm.nameBlock2fr = vm.widget.parameters[parameter].value; 30822 break; 30823 30824 case 'seasonsBlock2': 30825 vm.seasonsBlock2 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"'));; 30826 break; 30827 30828 case "tieBreakersBlock2": 30829 vm.tieBreakersBlock2 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30830 break; 30831 30832 case 'columnsDisplaySelectBlock2': 30833 vm.columnsDisplaySelectBlock2 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30834 break; 30835 30836 case 'nameBlock3': 30837 vm.nameBlock3 = vm.widget.parameters[parameter].value; 30838 break; 30839 30840 case 'nameBlock3fr': 30841 vm.nameBlock3fr = vm.widget.parameters[parameter].value; 30842 break; 30843 30844 case "tieBreakersBlock3": 30845 vm.tieBreakersBlock3 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30846 break; 30847 30848 case 'columnsDisplaySelectBlock3': 30849 vm.columnsDisplaySelectBlock3 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 30850 break; 30851 } 30852 } 30853 30854 // Listener 30855 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 30856 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 30857 .then(function () {
30858 for (var parameter in vm.widget.parameters) { 30859 switch (vm.widget.parameters[parameter].id) { 30860 30861 case 'sortDirection': 30862 vm.widget.parameters[parameter].value = data.sortDirection; 30863 vm.options.sortOrder = data.sortDirection; 30864 break; 30865 30866 case 'sortStat': 30867 vm.widget.parameters[parameter].value = data.sortStat; 30868 vm.options.sortStatId = data.sortStat; 30869 break; 30870 30871 case 'sortBlock': 30872 vm.widget.parameters[parameter].value = data.sortBlock; 30873 vm.options.block = data.sortBlock; 30874 break; 30875 30876 case 'secondBlock': 30877 vm.widget.parameters[parameter].value = data.secondBlock.toString(); 30878 vm.secondBlock = data.secondBlock; 30879 break; 30880 30881 case 'thirdBlock': 30882 vm.widget.parameters[parameter].value = data.thirdBlock.toString(); 30883 vm.thirdBlock = data.thirdBlock; 30884 break; 30885 30886 case 'nameBlock1': 30887 vm.widget.parameters[parameter].value = data.nameBlock1; 30888 vm.nameBlock1 = data.nameBlock1; 30889 break; 30890 30891 case 'nameBlock1fr': 30892 vm.widget.parameters[parameter].value = data.nameBlock1fr; 30893 vm.nameBlock1fr = data.nameBlock1fr; 30894 break; 30895 30896 case 'seasonsBlock1': 30897 vm.widget.parameters[parameter].value = data.seasonsBlock1; 30898 vm.seasonsBlock1 = angular.fromJson(data.seasonsBlock1.replace(/\'/g, '"')); 30899 break; 30900 30901 case 'tieBreakersBlock1': 30902 vm.widget.parameters[parameter].value = data.tieBreakersBlock1; 30903 vm.tieBreakersBlock1 = angular.fromJson(data.tieBreakersBlock1.replace(/\'/g, '"')); 30904 break; 30905 30906 case 'columnsDisplaySelectBlock1': 30907 vm.widget.parameters[parameter].value = data.columnsDisplaySelectBlock1; 30908 vm.columnsDisplaySelectBlock1 = angular.fromJson(data.columnsDisplaySelectBlock1.replace(/\'/g, '"')); 30909 break; 30910 30911 case 'nameBlock2': 30912 vm.widget.parameters[parameter].value = data.nameBlock2; 30913 vm.nameBlock2 = data.nameBlock2; 30914 break; 30915 30916 case 'nameBlock2fr': 30917 vm.widget.parameters[parameter].value = data.nameBlock2fr; 30918 vm.nameBlock2fr = data.nameBlock2fr; 30919 break; 30920 30921 case 'seasonsBlock2': 30922 vm.widget.parameters[parameter].value = data.seasonsBlock2; 30923 vm.seasonsBlock2 = angular.fromJson(data.seasonsBlock2.replace(/\'/g, '"')); 30924 break; 30925 30926 case 'tieBreakersBlock2': 30927 vm.widget.parameters[parameter].value = data.tieBreakersBlock2; 30928 vm.tieBreakersBlock2 = angular.fromJson(data.tieBreakersBlock2.replace(/\'/g, '"')); 30929 break; 30930 30931 case 'columnsDisplaySelectBlock2': 30932 vm.widget.parameters[parameter].value = data.columnsDisplaySelectBlock2; 30933 vm.columnsDisplaySelectBlock2 = angular.fromJson(data.columnsDisplaySelectBlock2.replace(/\'/g, '"')); 30934 break; 30935 30936 case 'nameBlock3': 30937 vm.widget.parameters[parameter].value = data.nameBlock3; 30938 vm.nameBlock3 = data.nameBlock3; 30939 break; 30940 30941 case 'nameBlock3fr': 30942 vm.widget.parameters[parameter].value = data.nameBlock3fr; 30943 vm.nameBlock3fr = data.nameBlock3fr; 30944 break; 30945 30946 case 'tieBreakersBlock3': 30947 vm.widget.parameters[parameter].value = data.tieBreakersBlock3; 30948 vm.tieBreakersBlock3 = angular.fromJson(data.tieBreakersBlock3.replace(/\'/g, '"')); 30949 break; 30950 30951 case 'columnsDisplaySelectBlock3': 30952 vm.widget.parameters[parameter].value = data.columnsDisplaySelectBlock3; 30953 vm.columnsDisplaySelectBlock3 = angular.fromJson(data.columnsDisplaySelectBlock3.replace(/\'/g, '"')); 30954 break; 30955 30956 } 30957 } 30958 30959 vm.columns = buildColumns(vm.columnsDisplaySelectBlock1); 30960 vm.columnsMultiSeasons = buildColumns(vm.columnsDisplaySelectBlock2); 30961 vm.columnsTotal = buildColumns(vm.columnsDisplaySelectBlock3); 30962 30963 formatColumns(); 30964 getStatistics(); 30965 widgets[$scope.widget] = angular.toJson(vm.widget); 30966 }) 30967 .catch(function (error) { 30968 bugsnag.notify(error); 30969 }); 30970 }); 30971 30972 vm.columns = []; 30973 vm.divisionsToShow = undefined; 30974 30975 //Component mount. 30976 vm.columns = buildColumns(vm.columnsDisplaySelectBlock1); 30977 vm.columnsMultiSeasons = buildColumns(vm.columnsDisplaySelectBlock2); 30978 vm.columnsTotal = buildColumns(vm.columnsDisplaySelectBlock3); 30979 30980 formatColumns(); 30981 30982 vm.sort = function (column, block) { 30983 // Reset columns sort. 30984 _.forEach(vm.columns, function (_column) { 30985 if (_column.id !== column.id) { 30986 _column.sort = ''; 30987 } 30988 }); 30989 _.forEach(vm.columnsMultiSeasons, function (_column) { 30990 if (_column.id !== column.id) { 30991 _column.sort = ''; 30992 } 30993 }); 30994 _.forEach(vm.columnsTotal, function (_column) { 30995 if (_column.id !== column.id) { 30996 _column.sort = ''; 30997 } 30998 }); 30999 31000 if (angular.isUndefined(column.sort)) { 31001 column.sort = 'desc'; 31002 } else { 31003 // Toggle sort order. 31004 column.sort = column.sort === 'desc' 31005 ? column.sort = 'asc' 31006 : column.sort = 'desc'; 31007 } 31008 31009 // Get the statistics order by column selected. 31010 vm.options.sortStatId = column.id; 31011 vm.options.sortOrder = column.sort; 31012 vm.options.block = block; 31013 31014 getStatistics(); 31015 }; 31016 31017 vm.getLabel = function (block) { 31018 var language = $translate.use(); 31019 var propertyName = `nameBlock${block}`; 31020 if (language.contains('fr')) { 31021 propertyName += 'fr'; 31022 } 31023 31024 return vm[propertyName]; 31025 } 31026 31027 vm.getStatisticValue = function (team, statisticId, block ) { 31028 try { 31029 var array = team.currentStats;
31030 if (block == 'multiSeason') { 31031 array = team.mutliSeasonStats; 31032 } 31033 else if (block == 'total') { 31034 array = team.totalStats; 31035 } 31036 31037 return _.find(array, function (statistic) { 31038 return statistic.statTypeId === statisticId; 31039 }).displayValue; 31040 } 31041 catch (error) { 31042 return 0; 31043 } 31044 }; 31045 31046 vm.showStat = function (column) { 31047 if (isMobile() && column.visibleMobile) { 31048 return true; 31049 } else if (!isMobile() && column.visibleDesktop) { 31050 return true; 31051 } 31052 return false; 31053 } 31054 31055 //Functions 31056 function formatColumns() { 31057 var columns = []; 31058 switch (vm.options.block) { 31059 case 'current': 31060 columns = vm.columns; 31061 break; 31062 case 'multiSeason': 31063 columns = vm.columnsMultiSeasons; 31064 break; 31065 case 'total': 31066 columns = vm.columnsTotal; 31067 } 31068 31069 columns.forEach(function (col) { 31070 if (col.id == vm.options.sortStatId) { 31071 col.sort = vm.options.sortOrder; 31072 } 31073 }) 31074 31075 } 31076 31077 function buildColumns(columnsToDisplay) { 31078 var columns = []; 31079 columnsToDisplay.forEach(function (col) { 31080 var stat = statisticService.getTeamStatisticByStatId(col.id); 31081 columns.push({ 31082 id: col.id, 31083 visibleDesktop: col.visibleDesktop, 31084 visibleMobile: col.visibleMobile, 31085 name: stat.name, 31086 abbreviation: stat.abbreviation 31087 }) 31088 }); 31089 31090 return columns; 31091 } 31092 31093 function formatDivisionsToShow() { 31094 vm.divisionsToShow = []; 31095 if (vm.divisions.length > 1) { 31096 const newdivisions = []; 31097 _.forEach(vm.divisions, function (division) { 31098 if (division.id != 'general' && division.id != 'divisions') { 31099 if (!division.parentId) { 31100 newdivisions.push(division); 31101 } 31102 } 31103 }); 31104 _.forEach(newdivisions, function (newdivision) { 31105 newdivision.divisions = []; 31106 _.forEach(vm.divisions, function (division) { 31107 if (division.parentId && division.parentId === newdivision.id) { 31108 newdivision.divisions.push(division); 31109 } 31110 }); 31111 }); 31112 vm.divisionsToShow = newdivisions; 31113 } 31114 else { 31115 _.forEach(vm.divisions, function (division) { 31116 if (division.id === 'general') { 31117 vm.divisionsToShow = [division]; 31118 } 31119 }); 31120 } 31121 } 31122 31123 getStatistics(); 31124 function getStatistics() { 31125 if ($scope.season === 'all') { 31126 vm.options.masterSeasonId = $scope.container; 31127 vm.options.seasonId = 0; 31128 $scope.division = 'container' 31129 } 31130 31131 var leaderboardSettings = {}; 31132 leaderboardSettings.bloc = vm.options.block ; 31133 leaderboardSettings.currentSeasonList = vm.seasonsBlock1 || []; 31134 leaderboardSettings.multiSeasonList = vm.seasonsBlock2 || []; 31135 31136 switch (leaderboardSettings.bloc) { 31137 case 'current': 31138 leaderboardSettings.tieBreakersStats = vm.tieBreakersBlock1; 31139 break; 31140 case 'multiSeason': 31141 leaderboardSettings.tieBreakersStats = vm.tieBreakersBlock2; 31142 break; 31143 case 'total': 31144 leaderboardSettings.tieBreakersStats = vm.tieBreakersBlock3; 31145 break; 31146 } 31147 31148 var order = 2;
31149 leaderboardSettings.tieBreakersStats.forEach(function (tieBreakerStat) { 31150 tieBreakerStat.order = order++; 31151 }) 31152 31153 if (vm.seasonsBlock1.length > 0 && (vm.seasonsBlock2.length > 0 || !vm.showPast)) { 31154 31155 statisticService.getTeamLeadersBySolutionId(__solutionId__, leaderboardSettings, vm.options) 31156 .then(function (response) { 31157 vm.teams = response.data.teamLeader; 31158 vm.divisions = [ 31159 { id: 'general', name: $translate.instant('directives.widgets.team.standings.labels.general') }, 31160 ]; 31161 vm.divisions = vm.divisions.concat(response.data.divisions); 31162 31163 // Fill divisions with teams. 31164 _.forEach(vm.divisions, function (division) { 31165 division.divisions = []; 31166 division.teams = []; 31167 _.forEach(vm.teams, function (team) { 31168 if (team.divisionId === division.id || division.id === 'general') { 31169 division.teams.push(team); 31170 } 31171 }) 31172 31173 var parentDivision = _.find(vm.divisions, { id: division.parentId }); 31174 if (parentDivision) { 31175 parentDivision.divisions.push(division); 31176 } 31177 }); 31178 31179 formatDivisionsToShow(); 31180 }) 31181 .catch(function (error) { 31182 bugsnag.notify(error); 31183 }); 31184 /*}*/ 31185 } 31186 } 31187 31188 function isMobile() { 31189 return $window.innerWidth <= 600; 31190 } 31191 31192 31193 $scope.$on('$destroy', listener); 31194 31195 } 31196})(); 31197; 31198(function () { 31199 'use strict'; 31200 31201 angular 31202 .module('app.directives') 31203 .directive('teamStandingsMultipleSeasons', teamStandingsMultipleSeasons); 31204 31205 teamStandingsMultipleSeasons.$inject = []; 31206 31207 function teamStandingsMultipleSeasons() { 31208 return { 31209 restrict: 'E', 31210 scope: { 31211 widget: '=' 31212 }, 31213 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/standings-multiple-seasons/team-standings-multiple-seasons.tpl.html', 31214 controller: 'TeamStandingsMultipleSeasonsWidgetController', 31215 controllerAs: 'teamStandingsMultipleSeasons' 31216 }; 31217 } 31218})();; 31219(function () { 31220 'use strict'; 31221 31222 angular 31223 .module('app.directives') 31224 .controller('TeamStandingsMultipleSeasonsDivisionWidgetController', TeamStandingsMultipleSeasonsDivisionWidgetController); 31225 31226 TeamStandingsMultipleSeasonsDivisionWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', 'UrlService']; 31227 31228 function TeamStandingsMultipleSeasonsDivisionWidgetController($rootScope, $scope, $localStorage, urlService) { 31229 var vm = this; 31230 //State variables 31231 vm.url = urlService; 31232 31233 vm.columnsLength = function(columns) { 31234 return columns.filter(function (column) { return $scope.showStat(column) }).length; 31235 } 31236 } 31237})(); 31238; 31239(function () { 31240 'use strict'; 31241 31242 angular 31243 .module('app.directives') 31244 .directive('teamStandingsMultipleSeasonsDivision', teamStandingsMultipleSeasonsDivision); 31245 31246 teamStandingsMultipleSeasonsDivision.$inject = []; 31247 31248 function teamStandingsMultipleSeasonsDivision() { 31249 return { 31250 restrict: 'E', 31251 scope: { 31252 divisions: '=', 31253 columns: '=', 31254 columnsMultiSeasons: '=', 31255 columnsTotal: '=', 31256 seasonLabel: '=', 31257 multiSeasonsLabel: '=', 31258 totalLabel: '=', 31259 sort: '=', 31260 getStatisticValue: '=', 31261 showStat: '=', 31262 level: '=', 31263 seasonId: '=', 31264 showTotal: '=', 31265 showPast: '=' 31266 }, 31267 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/team/standings-multiple-seasons/division/team-standings-multiple-seasons-division.tpl.html', 31268 controller: 'TeamStandingsMultipleSeasonsDivisionWidgetController', 31269 controllerAs: 'teamStandingsMultipleSeasonsDivision' 31270 }; 31271 } 31272})();; 31273(function () { 31274 'use strict'; 31275 31276 angular 31277 .module('app.directives') 31278 .controller('VideoListWidgetController', VideoListWidgetController); 31279 31280 VideoListWidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService', 'UrlService', 'VideoService']; 31281 31282 function VideoListWidgetController($rootScope, $scope, websiteEditorService, urlService, videoService) { 31283 var vm = this; 31284 vm.url = urlService; 31285 31286 // Apply website values to view model object. 31287 vm.widget = angular.fromJson(widgets[$scope.widget]); 31288 31289 Object.assign(vm, { 31290 all: { 31291 currentPage: 1, 31292 pageSize: parseInt(vm.widget.parameters[0].value), // TODO Create global method to get parameter by name. 31293 totalCount: 0, 31294 results: [], 31295 clickPage: clickPage, 31296 clickPrevious: clickPrevious, 31297 clickNext: clickNext 31298 } 31299 }); 31300 31301 // Triggered when parameters are changed. 31302 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function(event, data) { 31303 /*websiteEditorService.updatePage(__solutionId__, __pageId__, page, { uuid: vm.widget.uuid, parameters: data }) 31304 .then(function(response) { 31305 // Update the news feed. 31306 getLatestNews(parseInt(data["nbNewsDisplayed"])); 31307 31308 // Update widget variable. 31309 // TODO Improve mechanism. 31310 vm.widget.parameters[0].value = parseInt(data["nbNewsDisplayed"]); 31311 widgets[$scope.widget] = angular.toJson(vm.widget); 31312 })
31313 .catch(function(error) { 31314 bugsnag.notify(error); 31315 });*/ 31316 }); 31317 31318 $scope.$on('$destroy', listener); 31319 31320 // Load the latest news. 31321 getVideos(parseInt(vm.widget.parameters[0].value)); 31322 31323 function getVideos() { 31324 videoService.getVideosBySolutionId(__solutionId__, { page: vm.all.currentPage, pageSize: vm.all.pageSize }) 31325 .then(function(response) { 31326 vm.all.results = response.data.Results; // All videos. 31327 vm.all.totalCount = response.data.TotalCount; 31328 }) 31329 .catch(function(error) { 31330 bugsnag.notify(error); 31331 }); 31332 } 31333 31334 function clickPrevious() { 31335 vm.all.currentPage -= 1; 31336 31337 // Get videos for the selected page. 31338 getVideos(); 31339 } 31340 31341 function clickNext() { 31342 vm.all.currentPage += 1; 31343 31344 // Get videos for the selected page. 31345 getVideos(); 31346 } 31347 31348 function clickPage(page) { 31349 vm.all.currentPage = page; 31350 31351 // Get videos for the selected page. 31352 getVideos(); 31353 } 31354 } 31355})(); 31356; 31357(function () { 31358 'use strict'; 31359 31360 angular 31361 .module('app.directives') 31362 .directive('videoList', videoList); 31363 31364 videoList.$inject = []; 31365 31366 function videoList() { 31367 return { 31368 restrict: 'E', 31369 scope: { 31370 widget: '=' 31371 }, 31372 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/video/list/video-list.tpl.html', 31373 controller: 'VideoListWidgetController', 31374 controllerAs: 'videos' 31375 }; 31376 } 31377})();; 31378(function () { 31379 'use strict'; 31380 31381 angular 31382 .module('app.directives') 31383 .controller('VideoPlayerWidgetController', VideoPlayerWidgetController); 31384 31385 VideoPlayerWidgetController.$inject = ['$scope']; 31386 31387 function VideoPlayerWidgetController($scope) { 31388 var vm = this; 31389 31390 // Apply website values to view model object. 31391 vm.widget = angular.fromJson(widgets[$scope.widget]); 31392 31393 Object.assign(vm, angular.fromJson(__video__ 31394 .replace(/[\n\r]+/g, ' ') 31395 .replace(/\s{2,}/g,' ') 31396 .replace(/^\s+|\s+$/,''))); 31397 } 31398})(); 31399; 31400(function () { 31401 'use strict'; 31402 31403 angular 31404 .module('app.directives') 31405 .directive('videoPlayer', videoPlayer); 31406 31407 videoPlayer.$inject = ['UrlService']; 31408 31409 function videoPlayer(urlService) { 31410 return { 31411 restrict: 'E', 31412 scope: { 31413 widget: '=' 31414 }, 31415 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/video/player/video-player.tpl.html', 31416 controller: 'VideoPlayerWidgetController', 31417 controllerAs: 'video', 31418 link: function (scope, element, attribute, controller) { 31419 var vm = controller; 31420 var videoPlayer = $('.video'); 31421 31422 // Calculate the size (with 16:9 ratio). 31423 vm.width = videoPlayer.width(); 31424 vm.height = vm.width * (9 / 16); 31425 31426 // Load embed video player. 31427 loadEmbedVideo(); 31428 31429 function loadEmbedVideo() { 31430 var videoId = urlService.parseVideoUrl(vm.url); 31431 31432 if ((vm.url.toLowerCase().indexOf('youtube') !== -1) || (vm.url.toLowerCase().indexOf('youtu.be') !== -1)) { 31433 videoPlayer.prepend(`<iframe src="//www.youtube.com/embed/${videoId}" width="${vm.width}" height="${vm.height}" frameborder="0" allowfullscreen></iframe>`); 31434 } /*else if (url.toLowerCase().indexOf('vimeo') != -1) { 31435 return String.format('<iframe id="videoPlayer" src="//player.vimeo.com/video/{0}?portrait=0" width="{1}" height="{2}" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>', Utilities.parseVideoUrl(url), width, height); 31436 31437 } else if (url.toLowerCase().indexOf('dailymotion') != -1) { 31438 return String.format('<iframe id="videoPlayer" src="//www.dailymotion.com/embed/video/{0}" width="{1}" height="{2}" frameborder="0"></iframe>', Utilities.parseVideoUrl(url), width, height); 31439 31440 } else if ((url.toLowerCase().indexOf('kreezee') != -1) || 31441 (url.toLowerCase().indexOf('localhost') != -1)) { 31442 return String.format('<iframe id="videoPlayer" src="/embed/{0}" width="{1}" height="{2}" frameborder="0"></iframe>', videoId, width, height); 31443 } else { 31444 return ''; 31445 }*/ 31446 } 31447 } 31448 }; 31449 } 31450})();; 31451(function () { 31452 'use strict'; 31453 31454 angular 31455 .module('app.directives') 31456 .controller('VideoWidgetWidgetController', VideoWidgetWidgetController); 31457 31458 VideoWidgetWidgetController.$inject = ['$scope', '$rootScope', '$sce', 'WebsiteEditorService']; 31459 31460 function VideoWidgetWidgetController($scope, $rootScope, $sce, websiteEditorService) { 31461 var vm = this; 31462 31463 // Apply website values to view model object. 31464 vm.widget = angular.fromJson(widgets[$scope.widget]); 31465 vm.title = ""; 31466 vm.showTitle = false; 31467 vm.link = ""; 31468 vm.autoplay = false; 31469 vm.widgetTransparency = false; 31470
31471 for (var parameter in vm.widget.parameters) { 31472 switch (vm.widget.parameters[parameter].id) { 31473 case 'title': 31474 vm.title = vm.widget.parameters[parameter].value; 31475 break; 31476 31477 case 'showTitle': 31478 vm.showTitle = vm.widget.parameters[parameter].value === 'true'; 31479 break; 31480 31481 case 'link': 31482 vm.link = vm.widget.parameters[parameter].value; 31483 break; 31484 31485 case 'autoplay': 31486 vm.autoplay = vm.widget.parameters[parameter].value === 'true'; 31487 break; 31488 31489 case 'widgetTransparency': 31490 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 31491 break; 31492 } 31493 } 31494 31495 vm.link = extractYoutubeLink(vm.link); 31496 31497 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 31498 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 31499 .then(function (response) { 31500 for (var parameter in vm.widget.parameters) { 31501 switch (vm.widget.parameters[parameter].id) { 31502 case 'title': 31503 vm.widget.parameters[parameter].value = data.title; 31504 vm.title = data.title; 31505 break; 31506 31507 case 'showTitle': 31508 vm.widget.parameters[parameter].value = data.showTitle.toString(); 31509 vm.showTitle = data.showTitle; 31510 break; 31511 31512 case 'link': 31513 vm.widget.parameters[parameter].value = data.link; 31514 vm.link = data.link; 31515 break; 31516 31517 case 'autoplay': 31518 vm.widget.parameters[parameter].value = data.autoplay.toString(); 31519 vm.autoplay = data.autoplay; 31520 break; 31521 31522 case 'widgetTransparency': 31523 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 31524 vm.widgetTransparency = data.widgetTransparency; 31525 break; 31526 } 31527 } 31528 31529 widgets[$scope.widget] = angular.toJson(vm.widget); 31530 vm.link = extractYoutubeLink(vm.link); 31531 }) 31532 .catch(function (error) { 31533 bugsnag.notify(error); 31534 }); 31535 }); 31536 31537 $scope.$on('$destroy', listener); 31538 31539 //Helpers 31540 //https://stackoverflow.com/questions/3452546/how-do-i-get-the-youtube-video-id-from-a-url 31541 function extractYoutubeLink(url) { 31542 var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(shorts\/)|(watch\?))\??v?=?([^#&?]*).*/; 31543 var match = url.match(regExp); 31544 var finalResult = ""; 31545 if (match) { 31546 if (match[7] && match[7].length == 11) { 31547 finalResult = "https://www.youtube.com/embed/" + match[7]; 31548 } else if (match[8] && match[8].length == 11) { 31549 //youtube shorts url shared link format 31550 finalResult = "https://www.youtube.com/embed/" + match[8]; 31551 } 31552 if (vm.autoplay) { 31553 finalResult += "?autoplay=1&mute=1"; 31554 } 31555 } 31556 return $sce.trustAsResourceUrl(finalResult); 31557 } 31558 } 31559})(); 31560; 31561(function () { 31562 'use strict'; 31563 31564 angular 31565 .module('app.directives') 31566 .directive('videoWidget', videoWidget) 31567 31568 videoWidget.$inject = []; 31569 31570 function videoWidget() { 31571 return { 31572 restrict: 'E', 31573 scope: { 31574 widget: '=' 31575 }, 31576 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/video/widget/video-widget.tpl.html', 31577 controller: 'VideoWidgetWidgetController', 31578 controllerAs: 'videoWidget' 31579 }; 31580 } 31581})();; 31582(function () { 31583 'use strict'; 31584 31585 angular 31586 .module('app.directives') 31587 .controller('LeaderboardWidgetController', LeaderboardWidgetController); 31588 31589 LeaderboardWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$translate', 'HashService', 'WebsiteEditorService']; 31590 31591 function LeaderboardWidgetController($rootScope, $scope, $localStorage, $translate, hashService, websiteEditorService) { 31592 //State variables ---------- 31593 var vm = this; 31594 31595 vm.tabs = hashService.STATISTICS_TABS; 31596 vm.selectedDirectly = false; 31597 vm.activeTab = vm.tabs.PLAYERS; 31598 vm.sportId = $localStorage.solution.sportId; 31599 vm.embedSrc = `<iframe src="${location.origin}/?iframe=true&pageId=${location.pathname.substring(1)}" width="100%" height="800"></iframe>`; 31600 31601 //// TODO Get stats to displayed. 31602 //// TODO => widget... 31603 //// TODO Get parameter of the widget.... 31604 vm.widget = angular.fromJson(widgets[$scope.widget]); 31605 31606 31607 ////State functions ---------- 31608 vm.clickTab = function (tab) { 31609 vm.selectedDirectly = true; 31610 vm.activeTab = vm.tabs[tab]; 31611 hashService.setParams({ tab: vm.tabs[tab] }, true); 31612 } 31613 31614 vm.isActive = function (tab) { 31615 return vm.activeTab === vm.tabs[tab]; 31616 } 31617 31618 // Set view model parameters.
31619 for (var parameter in vm.widget.parameters) { 31620 switch (vm.widget.parameters[parameter].id) { 31621 case 'seasonId': 31622 vm.seasonId = vm.widget.parameters[parameter].value; 31623 break; 31624 case 'showPlayers': 31625 vm.showPlayers = (vm.widget.parameters[parameter].value === 'true'); 31626 break; 31627 case 'showLeaders': 31628 vm.showLeaders = (vm.widget.parameters[parameter].value === 'true'); 31629 break; 31630 case 'showTeams': 31631 vm.showTeams = (vm.widget.parameters[parameter].value === 'true'); 31632 break; 31633 case 'showGoalies': 31634 vm.showGoalies = (vm.widget.parameters[parameter].value === 'true'); 31635 break; 31636 case 'showPitchers': 31637 vm.showPitchers = (vm.widget.parameters[parameter].value === 'true'); 31638 break; 31639 case 'showDefense': 31640 vm.showDefense = (vm.widget.parameters[parameter].value === 'true'); 31641 break; 31642 case 'showSuspensions': 31643 vm.showSuspensions = (vm.widget.parameters[parameter].value === 'true'); 31644 break; 31645 case 'nbPlayersDisplayedPerPage': 31646 vm.nbPlayersDisplayedPerPage = vm.widget.parameters[parameter].value; 31647 break; 31648 case 'nbGoalersDisplayedPerPage': 31649 vm.nbGoalersDisplayedPerPage = vm.widget.parameters[parameter].value; 31650 break; 31651 case 'columnsDisplaySelectPlayers': 31652 vm.playersColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 31653 vm.playerLeaderStatistics = _.reduce(_.filter(vm.playersColumns || [], function (stat) { return stat.visibleDesktop || stat.visibleMobile }), function (list, stat) { list.push(stat.id); return list }, []) 31654 break; 31655 case 'columnsDisplaySelectGoalies': 31656 vm.goaliesColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 31657 break; 31658 case 'columnsDisplaySelectTeams': 31659 vm.teamsColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 31660 break; 31661 case 'columnsDisplaySelectPitchers': 31662 vm.pitchersColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 31663 vm.pitchersLeaderStatistics = _.reduce(_.filter(vm.pitchersColumns || [], function (stat) { return stat.visibleDesktop || stat.visibleMobile }), function (list, stat) { list.push(stat.id); return list }, []) 31664 break; 31665 case 'columnsDisplaySelectDefense': 31666 vm.defenseColumns = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 31667 vm.defenseLeaderStatistics = _.reduce(_.filter(vm.defenseColumns || [], function (stat) { return stat.visibleDesktop || stat.visibleMobile }), function (list, stat) { list.push(stat.id); return list }, []) 31668 break; 31669 } 31670 31671 } 31672 31673 ////On component mount ---------- 31674 locationChange(); 31675 31676 ////Listeners ---------- 31677 31678 ///* 31679 //Trigger locationChange() when tab changed 31680 31681 $scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) { 31682 if (hashService.hasStatisticsTabsChanged(newUrl, oldUrl)) { 31683 locationChange(); 31684 } 31685 }); 31686 31687 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 31688 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 31689 .then(function (response) {
31690 for (var parameter in vm.widget.parameters) { 31691 switch (vm.widget.parameters[parameter].id) { 31692 case 'showPlayers': 31693 vm.widget.parameters[parameter].value = data.showPlayers.toString(); 31694 vm.showPlayers = data.showPlayers; 31695 break; 31696 case 'showLeaders': 31697 vm.widget.parameters[parameter].value = data.showLeaders.toString(); 31698 vm.showLeaders = data.showLeaders; 31699 break; 31700 case 'showTeams': 31701 vm.widget.parameters[parameter].value = data.showTeams.toString(); 31702 vm.showTeams = data.showTeams; 31703 break; 31704 case 'showGoalies': 31705 vm.widget.parameters[parameter].value = data.showGoalies.toString(); 31706 vm.showGoalies = data.showGoalies; 31707 break; 31708 case 'showPitchers': 31709 vm.widget.parameters[parameter].value = data.showPitchers.toString(); 31710 vm.showPitchers = data.showPitchers; 31711 break; 31712 case 'showDefense': 31713 vm.widget.parameters[parameter].value = data.showDefense.toString(); 31714 vm.showDefense = data.showDefense; 31715 break; 31716 case 'showSuspensions': 31717 vm.widget.parameters[parameter].value = data.showSuspensions.toString(); 31718 vm.showSuspensions = data.showSuspensions; 31719 break; 31720 case 'columnsDisplaySelectTeams': 31721 vm.widget.parameters[parameter].value = data.columnsDisplaySelectTeams; 31722 vm.teamsColumns= angular.fromJson(data.columnsDisplaySelectTeams.replace(/\'/g, '"')); 31723 break; 31724 case 'columnsDisplaySelectPlayers': 31725 vm.widget.parameters[parameter].value = data.columnsDisplaySelectPlayers; 31726 vm.playersColumns = angular.fromJson(data.columnsDisplaySelectPlayers.replace(/\'/g, '"')); 31727 break; 31728 case 'columnsDisplaySelectGoalies': 31729 vm.widget.parameters[parameter].value = data.columnsDisplaySelectGoalies; 31730 vm.goaliesColumns = angular.fromJson(data.columnsDisplaySelectGoalies.replace(/\'/g, '"')); 31731 break; 31732 case 'columnsDisplaySelectPitchers': 31733 vm.widget.parameters[parameter].value = data.columnsDisplaySelectPitchers; 31734 vm.pitchersColumns = angular.fromJson(data.columnsDisplaySelectPitchers.replace(/\'/g, '"')); 31735 break; 31736 case 'columnsDisplaySelectDefense': 31737 vm.widget.parameters[parameter].value = data.columnsDisplaySelectDefense; 31738 vm.defenseColumns = angular.fromJson(data.columnsDisplaySelectDefense.replace(/\'/g, '"')); 31739 break; 31740 31741 } 31742 } 31743 widgets[$scope.widget] = angular.toJson(vm.widget); 31744 }) 31745 .catch(function (error) { 31746 bugsnag.notify(error); 31747 }); 31748 }); 31749 31750 31751 $scope.$on('$destroy', listener); 31752 31753 function locationChange() { 31754 if (!vm.selectedDirectly) { 31755 const filtersUrl = hashService.getParams(); 31756 31757 const activeKey = Object.keys(vm.tabs).find(function (tab) { 31758 return vm.tabs[tab] === filtersUrl.tab; 31759 }) 31760 31761 if (activeKey) { 31762 vm.activeTab = vm.tabs[activeKey]; 31763 } else { 31764 vm.activeTab = vm.tabs.PLAYERS; 31765 } 31766 } 31767 vm.selectedDirectly = false; 31768 } 31769 } 31770})(); 31771; 31772(function () { 31773 'use strict'; 31774 31775 angular 31776 .module('app.directives') 31777 .directive('leaderboard', leaderboard) 31778 31779 leaderboard.$inject = []; 31780 31781 function leaderboard() { 31782 return { 31783 restrict: 'E', 31784 scope: { 31785 widget: '=' 31786 }, 31787 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/leaderboard/leaderboard.tpl.html', 31788 controller: 'LeaderboardWidgetController', 31789 controllerAs: 'leaderboard' 31790 }; 31791 } 31792})();; 31793(function () { 31794 'use strict'; 31795 31796 angular 31797 .module('app.directives') 31798 .controller('LeaderboardLeadersWidgetController', LeaderboardLeadersWidgetController); 31799 31800 LeaderboardLeadersWidgetController.$inject = ['$scope']; 31801 31802 function LeaderboardLeadersWidgetController($scope) { 31803 var vm = this; 31804 31805 vm.season = $scope.seasonId; 31806 vm.division = undefined; 31807 31808 vm.filter = function(filter) { 31809 vm.division = filter.division; 31810 }; 31811 } 31812})(); 31813; 31814(function () { 31815 'use strict'; 31816 31817 angular 31818 .module('app.directives') 31819 .directive('leaderboardLeaders', leaderboardLeaders) 31820 31821 leaderboardLeaders.$inject = []; 31822 31823 function leaderboardLeaders() { 31824 return { 31825 restrict: 'E', 31826 scope: { 31827 widget: '=', 31828 statistics: '=', 31829 seasonId: '=', 31830 }, 31831 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/leaderboard/leaders/leaderboard-leaders.tpl.html', 31832 controller: 'LeaderboardLeadersWidgetController', 31833 controllerAs: 'leaderboardLeaders' 31834 }; 31835 } 31836})();; 31837(function () { 31838 'use strict'; 31839 31840 angular 31841 .module('app.directives') 31842 .controller('LeaderboardLeadersViewWidgetController', LeaderboardLeadersViewWidgetController); 31843 31844 LeaderboardLeadersViewWidgetController.$inject = ['$scope', '$localStorage', 'StatisticService']; 31845 31846 function LeaderboardLeadersViewWidgetController($scope, $localStorage, statisticService) { 31847 var vm = this; 31848 vm.options = {}; 31849 vm.statistics = $scope.statistics; 31850 vm.sportId = $localStorage.solution.sportId; 31851 31852 $scope.$watch('[season, division]', function () { 31853 if ($scope.season && $scope.division) { 31854 vm.options = { 31855 seasonTypeId: 1, //filter.calendar, 31856 seasonId: $scope.season 31857 }; 31858 31859 if ($scope.division !== 'general' && $scope.division !== 'divisions') { 31860 // Set the division identifier. 31861 vm.options.divisionId = $scope.division; 31862 } else { 31863 // Remove the property from options. 31864 delete vm.options.divisionId; 31865 } 31866 // Update leaders list. 31867 getLeaders(); 31868 } 31869 }); 31870 31871 function getLeaders() { 31872 vm.options.statisticIds = vm.statistics; 31873 31874 // Players 31875 statisticService.getPlayerLeadersByStatisticId(__solutionId__, vm.options) 31876 .then(function (response) { 31877 vm.playerStatistics = []; 31878 _.forEach(response.data, function (statistic) { 31879 vm.playerStatistics.push({ 31880 id: statistic.StatTypeId, 31881 name: statisticService.getPlayerStatisticByStatId(statistic.StatTypeId).name, 31882 players: formatValues(statistic.StatTypeId, statistic.Players
31882) 31883 }); 31884 }); 31885 }) 31886 .catch(function (error) { 31887 bugsnag.notify(error); 31888 }); 31889 } 31890 31891 function formatValues(statisticId, players) { 31892 switch (statisticId) { 31893 case 30: // Save Percentage 31894 _.forEach(players, function (player) { 31895 player.Value = parseFloat(player.Value / 1000).toFixed(3); 31896 }); 31897 break; 31898 31899 case 31: // Points per game 31900 case 32: // Points per game 31901 _.forEach(players, function (player) { 31902 player.Value = parseFloat(player.Value / 100).toFixed(2); 31903 }); 31904 break; 31905 } 31906 31907 return players; 31908 } 31909 } 31910})(); 31911; 31912(function () { 31913 'use strict'; 31914 31915 angular 31916 .module('app.directives') 31917 .directive('leaderboardLeadersView', leaderboardLeadersView) 31918 31919 leaderboardLeadersView.$inject = []; 31920 31921 function leaderboardLeadersView() { 31922 return { 31923 restrict: 'E', 31924 scope: { 31925 season: '=', 31926 division: '=', 31927 statistics: '=' 31928 }, 31929 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/leaderboard/leaders/view/leaderboard-leaders-view.tpl.html', 31930 controller: 'LeaderboardLeadersViewWidgetController', 31931 controllerAs: 'leaderboardLeadersView' 31932 }; 31933 } 31934})();; 31935(function () { 31936 'use strict'; 31937 31938 angular 31939 .module('app.directives') 31940 .controller('FaqWidgetController', FaqWidgetController); 31941 31942 FaqWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$sce', 'WebsiteEditorService', 'StyleService']; 31943 31944 function FaqWidgetController($rootScope, $scope, $localStorage, $sce, websiteEditorService, styleService) { 31945 var vm = this; 31946 31947 // Apply website values to view model object. 31948 vm.widget = angular.fromJson(widgets[$scope.widget]); 31949 vm.sections = $scope.sections; 31950 31951 vm.background = { image: '', position: '' }; 31952 vm.iconStyle = {}; 31953 31954 vm.selectedLanguage = angular.isUndefined($localStorage.currentLanguage) 31955 ? __defaultLanguage__ 31956 : $localStorage.currentLanguage.culture; 31957 31958 vm.getLocalizedValue = function (array, isHtml) { 31959 var value = ""; 31960 31961 if (array && vm.selectedLanguage) { 31962 31963 var localizedText = _.find(array, { culture: vm.selectedLanguage }); 31964 if (localizedText) { 31965 value = localizedText.value; 31966 } 31967 else { 31968 value = (array[0] || {}).value || ""; 31969 } 31970 } 31971 31972 if (isHtml) { 31973 return $sce.trustAsHtml(value); 31974 } 31975 31976 return value; 31977 } 31978 31979 // Set view model parameters. 31980 for (var parameter in vm.widget.parameters) { 31981 switch (vm.widget.parameters[parameter].id) { 31982 case 'faq': 31983 vm.sections = angular.fromJson(unescape(vm.widget.parameters[parameter].value)); 31984 break; 31985 31986 case 'widgetTransparency': 31987 vm.widgetTransparency = vm.widget.parameters[parameter].value === 'true'; 31988 break; 31989 31990 case 'backgroundColor': 31991 vm.backgroundColor = vm.widget.parameters[parameter].value; 31992 break; 31993 31994 case 'border': 31995 vm.border = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 31996 break; 31997 31998 case 'backgroundImage': 31999 vm.background.image = vm.widget.parameters[parameter].value; 32000 break; 32001 32002 case 'backgroundImagePosition': 32003 vm.background.position = vm.widget.parameters[parameter].value; 32004 break; 32005 32006 case 'iconSize': 32007 vm.iconStyle['font-size'] = vm.widget.parameters[parameter].value + 'px'; 32008 break; 32009 32010 case 'iconColor': 32011 vm.iconStyle['color'] = vm.widget.parameters[parameter].value; 32012 break; 32013 32014 case 'iconSpacing': 32015 vm.iconStyle['margin-right'] = vm.widget.parameters[parameter].value + 'px'; 32016 break; 32017 32018 case 'sectionFont': 32019 vm.sectionFont = styleService.fontSettingToStyle(angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"'))); 32020 break; 32021
32022 case 'sectionBackgroundColor': 32023 vm.sectionBackgroundColor = vm.widget.parameters[parameter].value; 32024 break; 32025 32026 case 'sectionBorder': 32027 vm.sectionBorder = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 32028 break; 32029 32030 case 'questionFont': 32031 vm.questionFont = styleService.fontSettingToStyle(angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"'))); 32032 break; 32033 32034 case 'questionBackgroundColor': 32035 vm.questionBackgroundColor = vm.widget.parameters[parameter].value; 32036 break; 32037 32038 case 'questionBorder': 32039 vm.questionBorder = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 32040 break; 32041 32042 case 'questionSpacingHorizontal': 32043 vm.questionSpacingHorizontal = vm.widget.parameters[parameter].value; 32044 break; 32045 32046 case 'questionVerticalSpacing': 32047 vm.questionVerticalSpacing = vm.widget.parameters[parameter].value; 32048 break; 32049 32050 case 'questionIconSize': 32051 vm.questionIconSize = vm.widget.parameters[parameter].value; 32052 break; 32053 32054 case 'questionIconColor': 32055 vm.questionIconColor = vm.widget.parameters[parameter].value; 32056 break; 32057 32058 case 'answerBackgroundColor': 32059 vm.answerBackgroundColor = vm.widget.parameters[parameter].value; 32060 break; 32061 } 32062 } 32063 32064 vm.questionPadding = `${vm.questionVerticalSpacing}px ${vm.questionSpacingHorizontal}px`; 32065 32066 vm.getStyle = function () { 32067 var style = {}; 32068 if (!vm.widgetTransparency) { 32069 style['background-color'] = vm.backgroundColor; 32070 style['border-color'] = vm.border.color; 32071 32072 if (vm.background && vm.background.image) { 32073 style['background-image'] = `url("${vm.background.image}")`; 32074 style['background-repeat'] = 'no-repeat'; 32075 style['background-position'] = vm.background.position || 'center center'; 32076 } 32077 32078 } 32079 32080 style['border-width'] = `${vm.border.width}px`; 32081 style['border-color'] = vm.border.color; 32082 style['border-radius'] = `${vm.border.radius}px`; 32083 32084 return style; 32085 } 32086 32087 vm.widgetStyle = vm.getStyle(); 32088 32089 // Triggered when parameters are changed. 32090 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 32091 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 32092 .then(function (response) { 32093 // Save parameters. 32094 32095 for (var parameter in vm.widget.parameters) { 32096 switch (vm.widget.parameters[parameter].id) { 32097 case 'faq': 32098 vm.widget.parameters[parameter].value = data.faq; 32099 vm.sections = angular.fromJson(unescape(data.faq)); 32100 break; 32101 32102 case 'widgetTransparency': 32103 vm.widget.parameters[parameter].value = data.widgetTransparency.toString(); 32104 vm.widgetTransparency = data.widgetTransparency; 32105 break; 32106 32107 case 'backgroundColor': 32108 vm.widget.parameters[parameter].value = data.backgroundColor.toString(); 32109 vm.backgroundColor = data.backgroundColor; 32110 break; 32111 32112 case 'border': 32113 vm.widget.parameters[parameter].value = data.border; 32114 vm.border = angular.fromJson(data.border.replace(/\'/g, '"')); 32115 break; 32116 32117 case 'backgroundImage': 32118 vm.widget.parameters[parameter].value = data.backgroundImage.toString(); 32119 vm.background.image = data.backgroundImage; 32120 break; 32121 32122 case 'backgroundImagePosition': 32123 vm.widget.parameters[parameter].value = data.backgroundImagePosition.toString(); 32124 vm.background.position = data.backgroundImagePosition; 32125 break; 32126 32127 case 'iconSize': 32128 vm.widget.parameters[parameter].value = data.iconSize.toString(); 32129 vm.iconStyle['font-size'] = data.iconSize + 'px'; 32130 break; 32131 32132 case 'iconColor': 32133 vm.widget.parameters[parameter].value = data.iconColor.toString(); 32134 vm.iconStyle['color'] = data.iconColor; 32135 break; 32136 32137 case 'iconSpacing': 32138 vm.widget.parameters[parameter].value = data.iconSpacing.toString(); 32139 vm.iconStyle['margin-right'] = data.iconSpacing + 'px'; 32140 break; 32141 32142 case 'sectionFont': 32143 vm.widget.parameters[parameter].value = data.sectionFont; 32144 vm.sectionFont = styleService.fontSettingToStyle(angular.fromJson(data.sectionFont.replace(/\'/g, '"'))); 32145 break; 32146
32147 case 'sectionBackgroundColor': 32148 vm.widget.parameters[parameter].value = data.sectionBackgroundColor.toString(); 32149 vm.sectionBackgroundColor = data.sectionBackgroundColor; 32150 break; 32151 32152 case 'sectionBorder': 32153 vm.widget.parameters[parameter].value = data.sectionBorder; 32154 vm.sectionBorder = angular.fromJson(data.sectionBorder.replace(/\'/g, '"')); 32155 break; 32156 32157 case 'questionFont': 32158 vm.widget.parameters[parameter].value = data.questionFont; 32159 vm.questionFont = styleService.fontSettingToStyle(angular.fromJson(data.questionFont.replace(/\'/g, '"'))); 32160 break; 32161 32162 case 'questionBackgroundColor': 32163 vm.widget.parameters[parameter].value = data.questionBackgroundColor.toString(); 32164 vm.questionBackgroundColor = data.questionBackgroundColor; 32165 break; 32166 32167 case 'questionBorder': 32168 vm.widget.parameters[parameter].value = data.questionBorder; 32169 vm.questionBorder = angular.fromJson(data.questionBorder.replace(/\'/g, '"')); 32170 break; 32171 32172 case 'questionSpacingHorizontal': 32173 vm.widget.parameters[parameter].value = data.questionSpacingHorizontal.toString(); 32174 vm.questionSpacingHorizontal = data.questionSpacingHorizontal; 32175 break; 32176 32177 case 'questionVerticalSpacing': 32178 vm.widget.parameters[parameter].value = data.questionVerticalSpacing.toString(); 32179 vm.questionVerticalSpacing = data.questionVerticalSpacing; 32180 break; 32181 32182 case 'questionIconSize': 32183 vm.widget.parameters[parameter].value = data.questionIconSize.toString(); 32184 vm.questionIconSize = data.questionIconSize; 32185 break; 32186 32187 case 'questionIconColor': 32188 vm.widget.parameters[parameter].value = data.questionIconColor.toString(); 32189 vm.questionIconColor = data.questionIconColor; 32190 break; 32191 32192 case 'answerBackgroundColor': 32193 vm.widget.parameters[parameter].value = data.answerBackgroundColor.toString(); 32194 vm.answerBackgroundColor = data.answerBackgroundColor; 32195 break; 32196 } 32197 } 32198 32199 vm.questionPadding = `${vm.questionVerticalSpacing}px ${vm.questionSpacingHorizontal}px`; 32200 vm.widgetStyle = vm.getStyle(); 32201 32202 // Update the variable. 32203 widgets[$scope.widget] = angular.toJson(vm.widget); 32204 }) 32205 .catch(function (error) { 32206 bugsnag.notify(error); 32207 }); 32208 }); 32209 32210 $scope.$on('$destroy', listener); 32211 } 32212})(); 32213; 32214(function () { 32215 'use strict'; 32216 32217 angular 32218 .module('app.directives') 32219 .directive('faq', faq) 32220 32221 faq.$inject = []; 32222 32223 function faq() { 32224 return { 32225 restrict: 'E', 32226 scope: { 32227 widget: '=' 32228 }, 32229 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/faq/faq.tpl.html', 32230 controller: 'FaqWidgetController', 32231 controllerAs: 'faqController' 32232 }; 32233 } 32234})();; 32235(function () { 32236 'use strict'; 32237 32238 angular 32239 .module('app.directives') 32240 .controller('PlayerStatsMultipleSeasonsWidgetController', PlayerStatsMultipleSeasonsWidgetController); 32241 32242 PlayerStatsMultipleSeasonsWidgetController.$inject = ['$rootScope', '$scope', '$localStorage', '$window', '$translate', 'StatisticService', 'DivisionService', 'WebsiteEditorService', 'PositionService', 'SeasonService']; 32243 32244 function PlayerStatsMultipleSeasonsWidgetController($rootScope, $scope, $localStorage, $window, $translate, statisticService, divisionService, websiteEditorService, positionService, seasonService) { 32245 var vm = this; 32246 32247 //State variables 32248 vm.widget = angular.fromJson(widgets[$scope.widget]); 32249 vm.categoryId = _.get(_.find(vm.widget.properties, { key: "categoryId" }), "value"); 32250 vm.getPosition = positionService.getPosition; 32251 32252 vm.options = { 32253 page: 1, 32254 sortStatId: 15, 32255 sortOrder: 'DESC', 32256 block: 'current', 32257 pageSize: 50, 32258 categoryType: vm.categoryId 32259 }; 32260 32261 vm.applyMoreFilters = function (filter) { 32262 vm.division = filter.division; 32263 vm.startDate = filter.startDate; 32264 vm.endDate = filter.endDate; 32265 vm.position = filter.position; 32266 getStatistics(); 32267 }; 32268 32269 vm.filter = function (filter) { 32270 vm.division = filter.division; 32271 vm.position = filter.position; 32272 getStatistics(); 32273 }; 32274 32275 //Component mount.
32276 for (var parameter in vm.widget.parameters) { 32277 switch (vm.widget.parameters[parameter].id) { 32278 case 'nbPlayersDisplayed': 32279 vm.options.pageSize = vm.widget.parameters[parameter].value; 32280 break; 32281 32282 case 'sortDirection': 32283 vm.options.sortOrder = vm.widget.parameters[parameter].value; 32284 break; 32285 32286 case 'sortStat': 32287 vm.options.sortStatId = vm.widget.parameters[parameter].value; 32288 break; 32289 32290 case 'sortBlock': 32291 vm.options.block = vm.widget.parameters[parameter].value; 32292 break; 32293 32294 case 'secondBlock': 32295 vm.secondBlock = vm.widget.parameters[parameter].value === 'true'; 32296 break; 32297 32298 case 'thirdBlock': 32299 vm.thirdBlock = vm.widget.parameters[parameter].value === 'true'; 32300 break; 32301 32302 case 'nameBlock1': 32303 vm.nameBlock1 = vm.widget.parameters[parameter].value; 32304 break; 32305 32306 case 'nameBlock1fr': 32307 vm.nameBlock1fr = vm.widget.parameters[parameter].value; 32308 break; 32309 32310 case 'seasonsBlock1': 32311 vm.seasonsBlock1 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 32312 console.log(vm.seasonsBlock1); 32313 break; 32314 32315 case 'columnsDisplaySelectBlock1': 32316 vm.columnsDisplaySelectBlock1 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 32317 break; 32318 32319 case 'nameBlock2': 32320 vm.nameBlock2 = vm.widget.parameters[parameter].value; 32321 break; 32322 32323 case 'nameBlock2fr': 32324 vm.nameBlock2fr = vm.widget.parameters[parameter].value; 32325 break; 32326 32327 case 'seasonsBlock2': 32328 vm.seasonsBlock2 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"'));; 32329 break; 32330 32331 case 'columnsDisplaySelectBlock2': 32332 vm.columnsDisplaySelectBlock2 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 32333 break; 32334 32335 case 'nameBlock3': 32336 vm.nameBlock3 = vm.widget.parameters[parameter].value; 32337 break; 32338 32339 case 'nameBlock3fr': 32340 vm.nameBlock3fr = vm.widget.parameters[parameter].value; 32341 break; 32342 32343 case 'columnsDisplaySelectBlock3': 32344 vm.columnsDisplaySelectBlock3 = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 32345 break; 32346 } 32347 } 32348 32349 getMostRecentSeason(); 32350 // Listener 32351 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 32352 websiteEditorService.updatePage(__solutionId__, __pageId__, { uuid: vm.widget.uuid, parameters: data }) 32353 .then(function () { 32354 for (var parameter in vm.widget.parameters) { 32355 switch (vm.widget.parameters[parameter].id) { 32356 case 'nbPlayersDisplayed': 32357 vm.widget.parameters[parameter].value = data.nbPlayersDisplayed; 32358 vm.options.nbPlayersDisplayed = data.nbPlayersDisplayed; 32359 break; 32360 case 'sortDirection': 32361 vm.widget.parameters[parameter].value = data.sortDirection; 32362 vm.options.sortOrder = data.sortDirection; 32363 break; 32364 32365 case 'sortStat': 32366 vm.widget.parameters[parameter].value = data.sortStat; 32367 vm.options.sortStatId = data.sortStat; 32368 break; 32369 32370 case 'sortBlock': 32371 vm.widget.parameters[parameter].value = data.sortBlock; 32372 vm.options.block = data.sortBlock; 32373 break; 32374 32375 case 'secondBlock': 32376 vm.widget.parameters[parameter].value = data.secondBlock.toString(); 32377 vm.secondBlock = data.secondBlock; 32378 break; 32379 32380 case 'thirdBlock': 32381 vm.widget.parameters[parameter].value = data.thirdBlock.toString(); 32382 vm.thirdBlock = data.thirdBlock; 32383 break; 32384 32385 case 'nameBlock1': 32386 vm.widget.parameters[parameter].value = data.nameBlock1; 32387 vm.nameBlock1 = data.nameBlock1; 32388 break; 32389 32390 case 'nameBlock1fr': 32391 vm.widget.parameters[parameter].value = data.nameBlock1fr; 32392 vm.nameBlock1fr = data.nameBlock1fr; 32393 break; 32394 32395 case 'seasonsBlock1': 32396 vm.widget.parameters[parameter].value = data.seasonsBlock1; 32397 vm.seasonsBlock1 = angular.fromJson(data.seasonsBlock1.replace(/\'/g, '"')); 32398 break; 32399 32400 case 'columnsDisplaySelectBlock1': 32401 vm.widget.parameters[parameter].value = data.columnsDisplaySelectBlock1; 32402 vm.columnsDisplaySelectBlock1 = angular.fromJson(data.columnsDisplaySelectBlock1.replace(/\'/g, '"')); 32403 break; 32404 32405 case 'nameBlock2': 32406 vm.widget.parameters[parameter].value = data.nameBlock2; 32407 vm.nameBlock2 = data.nameBlock2; 32408 break; 32409 32410 case 'nameBlock2fr': 32411 vm.widget.parameters[parameter].value = data.nameBlock2fr; 32412 vm.nameBlock2fr = data.nameBlock2fr; 32413 break; 32414 32415 case 'seasonsBlock2': 32416 vm.widget.parameters[parameter].value = data.seasonsBlock2; 32417 vm.seasonsBlock2 = angular.fromJson(data.seasonsBlock2.replace(/\'/g, '"')); 32418 break; 32419 32420 case 'columnsDisplaySelectBlock2': 32421 vm.widget.parameters[parameter].value = data.columnsDisplaySelectBlock2; 32422 vm.columnsDisplaySelectBlock2 = angular.fromJson(data.columnsDisplaySelectBlock2.replace(/\'/g, '"')); 32423 break; 32424 32425 case 'nameBlock3': 32426 vm.widget.parameters[parameter].value = data.nameBlock3; 32427 vm.nameBlock3 = data.nameBlock3; 32428 break; 32429 32430 case 'nameBlock3fr': 32431 vm.widget.parameters[parameter].value = data.nameBlock3fr; 32432 vm.nameBlock3fr = data.nameBlock3fr; 32433 break; 32434 32435 case 'columnsDisplaySelectBlock3': 32436 vm.widget.parameters[parameter].value = data.columnsDisplaySelectBlock3; 32437 vm.columnsDisplaySelectBlock3 = angular.fromJson(data.columnsDisplaySelectBlock3.replace(/\'/g, '"')); 32438 break; 32439 32440 } 32441 } 32442 32443 vm.columns = buildColumns(vm.columnsDisplaySelectBlock1); 32444 vm.columnsMultiSeasons = buildColumns(vm.columnsDisplaySelectBlock2); 32445 vm.columnsTotal = buildColumns(vm.columnsDisplaySelectBlock3); 32446 32447 formatColumns(); 32448 getMostRecentSeason(); 32449 getStatistics(); 32450 widgets[$scope.widget] = angular.toJson(vm.widget); 32451 }) 32452 .catch(function (error) { 32453 bugsnag.notify(error); 32454 }); 32455 }); 32456 32457 vm.columns = []; 32458 32459 //Component mount. 32460 vm.columns = buildColumns(vm.columnsDisplaySelectBlock1); 32461 vm.columnsMultiSeasons = buildColumns(vm.columnsDisplaySelectBlock2); 32462 vm.columnsTotal = buildColumns(vm.columnsDisplaySelectBlock3); 32463 32464 formatColumns(); 32465 32466 vm.sort = function (column, block) { 32467 // Reset columns sort. 32468 _.forEach(vm.columns, function (_column) { 32469 if (_column.id !== column.id) { 32470 _column.sort = ''; 32471 } 32472 }); 32473 _.forEach(vm.columnsMultiSeasons, function (_column) { 32474 if (_column.id !== column.id) { 32475 _column.sort = ''; 32476 } 32477 }); 32478 _.forEach(vm.columnsTotal, function (_column) { 32479 if (_column.id !== column.id) { 32480 _column.sort = ''; 32481 } 32482 }); 32483 32484 if (angular.isUndefined(column.sort)) { 32485 column.sort = 'desc'; 32486 } else { 32487 // Toggle sort order. 32488 column.sort = column.sort === 'desc' 32489 ? column.sort = 'asc' 32490 : column.sort = 'desc'; 32491 } 32492 32493 // Get the statistics order by column selected. 32494 vm.options.sortStatId = column.id; 32495 vm.options.sortOrder = column.sort; 32496 vm.options.block = block; 32497 32498 getStatistics(); 32499 }; 32500 32501 vm.getLabel = function (block) { 32502 var language = $translate.use(); 32503 var propertyName = `nameBlock${block}`; 32504 if (language.contains('fr')) { 32505 propertyName += 'fr'; 32506 } 32507 32508 return vm[propertyName]; 32509 } 32510 32511 32512 vm.columnsLength = function (columns) { 32513 return columns.filter(function (column) { return vm.showStat(column) }).length; 32514 } 32515 32516 vm.getStatisticValue = function (player, statisticId, block ) { 32517 try { 32518 var array = player.currentStats;
32519 if (block == 'multiSeason') { 32520 array = player.multiSeasonStats; 32521 } 32522 else if (block == 'total') { 32523 array = player.totalStats; 32524 } 32525 32526 return _.find(array, function (statistic) { 32527 return statistic.statTypeId === statisticId; 32528 }).displayValue; 32529 } 32530 catch (error) { 32531 return 0; 32532 } 32533 }; 32534 32535 vm.showStat = function (column) { 32536 if (isMobile() && column.visibleMobile) { 32537 return true; 32538 } else if (!isMobile() && column.visibleDesktop) { 32539 return true; 32540 } 32541 return false; 32542 } 32543 32544 //Functions 32545 function formatColumns() { 32546 var columns = []; 32547 switch (vm.options.block) { 32548 case 'current': 32549 columns = vm.columns; 32550 break; 32551 case 'multiSeason': 32552 columns = vm.columnsMultiSeasons; 32553 break; 32554 case 'total': 32555 columns = vm.columnsTotal; 32556 } 32557 32558 columns.forEach(function (col) { 32559 if (col.id == vm.options.sortStatId) { 32560 col.sort = vm.options.sortOrder; 32561 } 32562 }) 32563 32564 } 32565 32566 function buildColumns(columnsToDisplay) { 32567 var columns = []; 32568 columnsToDisplay.forEach(function (col) { 32569 var stat = statisticService.getPlayerStatisticByStatId(col.id); 32570 columns.push({ 32571 id: col.id, 32572 visibleDesktop: col.visibleDesktop, 32573 visibleMobile: col.visibleMobile, 32574 name: stat.name, 32575 abbreviation: stat.abbreviation 32576 }) 32577 }); 32578 32579 return columns; 32580 } 32581 32582 getStatistics(); 32583 function getStatistics() { 32584 var leaderboardSettings = {}; 32585 leaderboardSettings.bloc = vm.options.block ; 32586 leaderboardSettings.currentSeasonList = vm.seasonsBlock1 || []; 32587 leaderboardSettings.multiSeasonList = vm.seasonsBlock2 || []; 32588 32589 if (vm.seasonsBlock1.length > 0 && (vm.seasonsBlock2.length > 0 || !vm.showPast)) { 32590 if (vm.division && vm.division != 'divisions') { 32591 vm.options.divisionId = vm.division; 32592 } 32593 if (vm.position && vm.position != 'all') { 32594 vm.options.positionId = vm.position; 32595 } 32596 32597 statisticService.getPlayerLeaderBySeasons(__solutionId__, leaderboardSettings, vm.options).then(function (response) { 32598 vm.players = response.data.playerLeader; 32599 }) 32600 } 32601 } 32602 32603 function isMobile() { 32604 return $window.innerWidth <= 600; 32605 } 32606 32607 function getMostRecentSeason() { 32608 seasonService.getSeasonsBySolutionId(__solutionId__).then(function (seasons) { 32609 var seasonsList = vm.seasonsBlock1; 32610 var allSeasons = seasons.data; 32611 var seasonsBlock1Data = []; 32612 seasonsList.forEach(function (seasonId) { 32613 var season = _.find(allSeasons, { Id: seasonId }); 32614 if (season) { 32615 seasonsBlock1Data.push(season); 32616 } 32617 }) 32618 var mostRecent = null; 32619 seasonsBlock1Data.forEach(function (season) { 32620 if (mostRecent == null || mostRecent.date < season.StartingDate) { 32621 mostRecent = { id: season.Id, date: season.StartingDate }; 32622 } 32623 }) 32624 vm.mostRecentSeason = mostRecent ? mostRecent.id : null; 32625 }) 32626 } 32627 32628 $scope.$on('$destroy', listener); 32629 32630 } 32631})(); 32632; 32633(function () { 32634 'use strict'; 32635 32636 angular 32637 .module('app.directives') 32638 .directive('playerStatsMultipleSeasons', playerStatsMultipleSeasons); 32639 32640 playerStatsMultipleSeasons.$inject = []; 32641 32642 function playerStatsMultipleSeasons() { 32643 return { 32644 restrict: 'E', 32645 scope: { 32646 widget: '=' 32647 }, 32648 templateUrl: 'public/v2/app/core/directives/toolbox/widgets/player/stats-multiple-seasons/player
32648-stats-multiple-seasons.tpl.html', 32649 controller: 'PlayerStatsMultipleSeasonsWidgetController', 32650 controllerAs: 'playerStatsMultipleSeasons' 32651 }; 32652 } 32653})();; 32654(function () { 32655 'use strict'; 32656 32657 angular 32658 .module('app.directives') 32659 .controller('WidgetController', WidgetController); 32660 32661 WidgetController.$inject = ['$rootScope', '$scope', 'WebsiteEditorService']; 32662 32663 function WidgetController($rootScope, $scope, websiteEditorService) { 32664 var vm = this; 32665 vm.isEditMode = false; 32666 vm.showWidget = true; 32667 32668 if (!widgets[$scope.widget]) { 32669 vm.showWidget = false; 32670 } 32671 32672 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 32673 if (newVal === undefined) return; 32674 vm.isEditMode = newVal; 32675 }, true); 32676 32677 var listenerDelete = $rootScope.$on('delete-widget', function (event, data) { 32678 if (data.widgetId === $scope.widget) { 32679 delete widgets[data.widgetId]; 32680 vm.showWidget = false; 32681 } 32682 }); 32683 32684 $scope.$on('$destroy', listenerDelete); 32685 32686 var listenerAdd = $rootScope.$on('add-widget', function (event, data) { 32687 if (data.widgetId === $scope.widget) { 32688 widgets[$scope.widget] = angular.toJson(data.widget); 32689 vm.showWidget = true; 32690 } 32691 }); 32692 32693 $scope.$on('$destroy', listenerAdd); 32694 } 32695})(); 32696; 32697(function () { 32698 'use strict'; 32699 32700 angular 32701 .module('app.directives') 32702 .directive('widget', widget); 32703 32704 widget.$inject = []; 32705 32706 function widget() { 32707 return { 32708 restrict: 'E', 32709 scope: { 32710 section: '=', 32711 widget: '=' 32712 }, 32713 templateUrl: 'public/v2/app/core/directives/widget/widget.tpl.html', 32714 controller: 'WidgetController', 32715 controllerAs: 'widgetContainer' 32716 }; 32717 } 32718})();; 32719(function () { 32720 'use strict'; 32721 32722 angular 32723 .module('app.directives') 32724 .controller('WidgetContentController', WidgetContentController); 32725 32726 WidgetContentController.$inject = ['$scope', 'WebsiteEditorService']; 32727 32728 function WidgetContentController($scope, websiteEditorService) { 32729 var vm = this; 32730 32731 vm.isEditMode = false; 32732 32733 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 32734 if (angular.isUndefined(newVal)) return; 32735 32736 vm.isEditMode = newVal; 32737 }, true); 32738 } 32739})(); 32740; 32741(function () { 32742 'use strict'; 32743 32744 angular 32745 .module('app.directives') 32746 .directive('widgetContent', widgetContent) 32747 32748 widgetContent.$inject = ['$compile']; 32749 32750 function widgetContent($compile) { 32751 return { 32752 restrict: 'E', 32753 scope: { 32754 widget: '=', 32755 section: '=', 32756 }, 32757 templateUrl: 'public/v2/app/core/directives/widget/content/widget-content.tpl.html', 32758 controller: 'WidgetContentController', 32759 controllerAs: 'widgetContent', 32760 link: function (scope, element) { 32761 // Find widget content element. 32762 var widgetContent = element.find('.widget-content'); 32763 var widgetToRender = angular.fromJson(widgets[scope.widget]); 32764 32765 // Check if a preview is available for the widget selected. 32766 // TODO ... 32767 /*if (scope.widget.preview) { 32768 // Create & compile the DOM element. 32769 widgetToRender = $compile(scope.widget.directive)(scope); 32770 } else { 32771 // Display «preview unavailable» message. 32772 widgetToRender = $compile('<div class="preview-unavailable"><span>preview unavailable</span></div>')(scope) 32773 } */ 32774 32775 // Render the widget container with the proper directive identifier. 32776 widgetToRender = $compile(`<${widgetToRender.id} section="\'${scope.section}\'" widget="\'${scope.widget}\'"></${widgetToRender.id}>`)(scope); 32777 32778 // Add the DOM element to the zone. 32779 widgetContent.append(widgetToRender); 32780 } 32781 }; 32782 } 32783})();; 32784(function () { 32785 'use strict'; 32786 32787 angular 32788 .module('app.directives') 32789 .controller('WidgetSectionController', WidgetSectionController); 32790 32791 WidgetSectionController.$inject = ['$rootScope', '$scope', '$timeout', 'WebsiteEditorService', 'SecurityService']; 32792 32793 function WidgetSectionController($rootScope, $scope, $timeout, websiteEditorService, securityService) { 32794 var vm = this; 32795 vm.isEditMode = false; 32796 32797 vm.resizeColumnsAccess = function () { 32798 return securityService.getAccess().resizeColumns; 32799 } 32800 32801 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 32802 if (newVal === undefined) return; 32803 32804 vm.isEditMode = newVal; 32805 32806 if (vm.isEditMode) { 32807 $timeout($scope.bindDrag, 0); 32808 } 32809 }, true); 32810 } 32811})(); 32812; 32813(function () { 32814 'use strict'; 32815 32816 angular 32817 .module('app.directives') 32818 .directive('widgetSection', widgetSection); 32819 32820 widgetSection.$inject = ['$document', '$rootScope']; 32821 32822 function widgetSection($document, $rootScope) { 32823 return { 32824 restrict: 'E', 32825 transclude: true, 32826 templateUrl: 'public/v2/app/core/directives/widget/section/widget-section.tpl.html', 32827 controller: 'WidgetSectionController', 32828 controllerAs: 'widgetSection', 32829 require: '^widgetRow', 32830 transclude: true, 32831 replace: true, 32832 scope: { 32833 sectionId: "=" 32834 }, 32835 link: function (scope, element, attribute, rowController, transclude) { 32836 var vm = rowController; 32837 var position = {}; 32838 var dimension = {}; 32839 var mode = "horizontal"; 32840 var containerWidth = ''; 32841 var rowId = rowController.rowId; 32842 var row = _.find(page.rows, { uuid: rowId }); 32843 var section = _.find(row.sections, { uuid: scope.sectionId }); 32844 32845 var width = section.md || section.sm; 32846 32847 var section = { 32848 sectionId: scope.sectionId, 32849 columnWidth: width 32850 } 32851 32852 setSectionGutters(rowController.padding); 32853 scope.$watch(function () { return rowController.padding }, function (_padding) { 32854 setSectionGutters(_padding); 32855 }) 32856 32857 scope.bindDrag = function () { 32858 var draggableHandle = element.find('.handle'); 32859 draggableHandle[0].onmousedown = function ($event) { 32860 $event.stopImmediatePropagation(); 32861 position.x = $event.clientX; 32862 position.y = $event.clientY; 32863 containerWidth = element.closest('.row-container').outerWidth(); 32864 dimension.width = element.prop('offsetWidth'); 32865 dimension.height = element.prop('offsetHeight'); 32866 $document.bind('mousemove', mousemove); 32867 $document.bind('mouseup', mouseup); 32868 return false; 32869 32870 }; 32871 function mousemove($event) { 32872 var deltaWidth = dimension.width - (position.x - $event.clientX); 32873 var deltaHeight = dimension.height - (position.y - $event.clientY); 32874 var newDimensions = {}; 32875 var elementWidth = element.innerWidth(); 32876 var oldColumnWidth = section.columnWidth; 32877 32878 if (mode == 'horizontal') { 32879 newDimensions = { 32880 width: deltaWidth 32881 }; 32882 } 32883 else if (mode == 'vertical') { 32884 newDimensions = { 32885 height: deltaHeight 32886 }; 32887 } 32888 else { 32889 newDimensions = { 32890 width: deltaWidth, 32891 height: deltaHeight 32892 }; 32893 } 32894 32895 var columnWidth = Math.ceil((newDimensions.width / containerWidth) * 12); 32896 columnWidth = columnWidth > 12 ? 12 : columnWidth; 32897 columnWidth = columnWidth <= 1 ? 1 : columnWidth; 32898 32899 if (columnWidth != oldColumnWidth && rowController.allowResize(scope.sectionId, columnWidth)) { 32900 32901 var classAttr = element.attr('class'); 32902 section.columnWidth = columnWidth; 32903 32904 if (classAttr.match(/col-md-\d+/)) { 32905 element.attr('class', classAttr.replace(/col-md-\d+/, 'col-md-' + columnWidth)); 32906 } 32907 else { 32908 element.attr('class', `${classAttr} col-md-${columnWidth}`); 32909 } 32910 32911 rowController.resizeChild(scope.sectionId, columnWidth); 32912 32913 } 32914 32915 return false; 32916 } 32917 function mouseup() { 32918 $document.unbind('mousemove', mousemove); 32919 $document.unbind('mouseup', mouseup); 32920 } 32921 } 32922 32923 function setSectionGutters(padding) { 32924 if (padding === undefined || padding === null) { 32925 padding = 15; 32926 } 32927 32928 element.css('padding-left', padding + 'px'); 32929 element.css('padding-right', padding + 'px'); 32930 element.find('widget:not(:first-of-type)').css('margin-top', (pad
32930ding * 2) + 'px'); 32931 } 32932 32933 rowController.addSection(section); 32934 32935 $rootScope.$on(`onDeleteSection-${scope.sectionId}`, function (sectionId) { 32936 rowController.removeSection(scope.sectionId); 32937 }); 32938 } 32939 }; 32940 } 32941})();; 32942(function () { 32943 'use strict'; 32944 32945 angular 32946 .module('app.directives') 32947 .controller('WidgetRowController', WidgetRowController); 32948 32949 WidgetRowController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService', 'PlanService', 'SecurityService']; 32950 32951 function WidgetRowController($rootScope, $scope, $localStorage, websiteEditorService, planService, securityService) { 32952 var vm = this; 32953 var sections = []; 32954 var row = _.find(page.rows, { uuid: $scope.rowId }); 32955 32956 vm.isEditMode = false; 32957 vm.rowId = $scope.rowId; 32958 vm.showModal = false; 32959 vm.showSettings = false; 32960 vm.padding = row.padding; 32961 vm.fullWidth = row.fullwidth; 32962 vm.backgroundTransparent = row.backgroundTransparent; 32963 vm.backgroundColor = row.backgroundColor; 32964 vm.backgroundImage = row.backgroundImage; 32965 vm.borderWidth = row.borderWidth; 32966 vm.borderColor = row.borderColor; 32967 vm.borderRadius = row.borderRadius; 32968 vm.videoBackground = row.videoBackground; 32969 vm.verticalAlign = row.verticalAlign || 'top'; 32970 vm.alignToTop = row.alignToTop || false; 32971 32972 vm.getVerticalAlignCss = function () { 32973 var verticalAlignCss = 'flex-start'; 32974 32975 if (vm.verticalAlign == 'center') { 32976 verticalAlignCss = 'center'; 32977 } 32978 else if (vm.verticalAlign == 'bottom') { 32979 verticalAlignCss = 'flex-end'; 32980 } 32981 32982 return verticalAlignCss; 32983 } 32984 vm.isIframe = __iframe__; 32985 32986 if (vm.backgroundTransparent === null) { 32987 vm.backgroundTransparent = true; 32988 } 32989 if (vm.backgroundColor === null) { 32990 vm.backgroundColor = '#fff'; 32991 } 32992 if (vm.borderColor === null) { 32993 vm.borderColor = '#000'; 32994 } 32995 32996 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 32997 if (newVal === undefined) return; 32998 32999 vm.isEditMode = newVal; 33000 33001 if (vm.isEditMode) { 33002 $scope.resizeBuffer(); 33003 } 33004 else { 33005 $scope.removeBuffer(); 33006 } 33007 }, true); 33008 33009 vm.widgets = []; 33010 33011 vm.allowResize = function (sectionId, newColumnSize) { 33012 var row = _.find(page.rows, { uuid: vm.rowId }); 33013 var section = _.find(row.sections, { uuid: sectionId }); 33014 var widgets = section.widgets; 33015 var minWidth = 0; 33016 33017 widgets.forEach(function (widget) { 33018 if ((widget.minwidth || 0) > minWidth) { 33019 minWidth = widget.minwidth; 33020 } 33021 }); 33022 33023 var newTotalSize = sections.reduce(function (total, section) { 33024 if (section.sectionId == sectionId) { 33025 return total + newColumnSize; 33026 } 33027 return total + section.columnWidth 33028 }, 0); 33029 33030 return newTotalSize <= 12 && newColumnSize >= minWidth; 33031 } 33032 33033 vm.addWidgetAccess = function () { 33034 return securityService.getAccess().addWidget; 33035 } 33036 33037 vm.addSection = function (section) { 33038 sections.push(section); 33039 var totalRowWidth = sections.reduce(function (total, section) { return total + section.columnWidth }, 0); 33040 $scope.resizeBuffer(12 - totalRowWidth); 33041 } 33042 33043 vm.save = function (options) { 33044 websiteEditorService.updatePage(__solutionId__, __pageId__, page, options) 33045 .then(function (response) { 33046 vm.showModal = false; 33047 }) 33048 .catch(function (error) { 33049 bugsnag.notify(error); 33050 }); 33051 }; 33052 33053 vm.resizeChild = function (sectionId, columnWidth) { 33054 var section = _.find(sections, { sectionId: sectionId }); 33055 section.columnWidth = columnWidth; 33056 var totalRowWidth = sections.reduce(function (total, section) { return total + section.columnWidth }, 0); 33057 $scope.resizeBuffer(12 - totalRowWidth); 33058 33059 var row = _.find(page.rows, { uuid: $scope.rowId }); 33060 var section = _.find(row.sections, { uuid: sectionId }); 33061 section.md = columnWidth; 33062 33063 vm.save(); 33064 } 33065 33066 33067 vm.showWidgets = function () { 33068 vm.showModal = true; 33069 }; 33070 33071 vm.removeSection = function (sectionId) { 33072 _.remove(sections, { sectionId: sectionId }); 33073 var totalRowWidth = sections.reduce(function (total, section) { return total + section.columnWidth }, 0); 33074 $scope.removeSection(sectionId); 33075 $scope.resizeBuffer(12 - totalRowWidth); 33076 33077 } 33078 } 33079})(); 33080; 33081(function () { 33082 'use strict'; 33083 33084 angular 33085 .module('app.directives') 33086 .directive('widgetRow', widgetRow); 33087 33088 widgetRow.$inject = ['$document', '$compile', 'GuidService',]; 33089 33090 function widgetRow($document, $compile, guidService) { 33091 return { 33092 restrict: 'E', 33093 templateUrl: 'public/v2/app/core/directives/widget/row/widget-row.tpl.html', 33094 controller: 'WidgetRowController', 33095 controllerAs: 'widgetRow', 33096 scope: { 33097 rowId: '=' 33098 }, 33099 transclude: true, 33100 replace: true, 33101 link: function (scope, element, attribute, vm, transclude) { 33102 var sections = []; 33103 var rowElement = element.find('.row'); 33104 33105 vm.isFirstRow = element.index() === 0; 33106 vm.bufferSize = 0; 33107 33108 transclude(scope, function (clone) { 33109 element.find('.row').append(clone); 33110 }) 33111 33112 vm.getMetaData = function (event) { 33113 var video = event.currentTarget; 33114 vm.videoDimension = { aspectRatio: video.videoWidth / video.videoHeight, width: video.videoWidth, height: video.videoHeight } 33115 33116 angular.element(rowElement).css('aspect-ratio', vm.videoDimension.aspectRatio.toString()).css('height', 'auto'); 33117 } 33118 33119 scope.resizeBuffer = function (newSize) { 33120 if (newSize === undefined) { 33121 newSize = vm.bufferSize; 33122 } 33123 33124 vm.bufferSize = newSize; 33125 var bufferElement = $compile(`<div class="buffer col-md-${newSize}"> 33126 <div class="buffer-zone" ng-if="widgetRow.addWidgetAccess()"> 33127 <button type="button" class="btn btn-primary btn-lg" ng-click="widgetRow.showWidgets()">Add widget</button> 33128 </div> 33129 </div>`)(scope); 33130 rowElement.find('.buffer').remove(); 33131 33132 if (newSize > 0 && vm.isEditMode) { 33133 rowElement.append(bufferElement); 33134 } 33135 } 33136 33137 scope.removeBuffer = function () { 33138 rowElement.find('.buffer').remove(); 33139 } 33140 33141 scope.removeSection = function(sectionId) { 33142 rowElement.find(`#${sectionId}.widget-section`).remove(); 33143 } 33144 33145 vm.addWidget = function (widget) { 33146 // Get the section. 33147 var newSectionId = guidService.getGuid(); 33148 var colClass = `col-md-` + vm.bufferSize; 33149 var section = angular.element(`<widget-section id="${newSectionId}" section-id="'${newSectionId}'" class="${colClass}">`); 33150 var widgetZone = $compile(`<widget-zone section="'${newSectionId}'"></widget-zone>`)(scope); 33151 33152 section.append(widgetZone); 33153 33154 var widgetZone = section.find('widget-zone'); 33155 33156 // Get the widget information. 33157 var widget = _.cloneDeep(widget); 33158 33159 // Generate a new widget id. 33160 widget.uuid = guidService.getGuid(); 33161 33162 // Create the widget variable. 33163 widgets[widget.uuid] = angular.toJson(widget); 33164 33165 var newScope = scope.$new(true); 33166 33167 // Compile the new widget directive. 33168 var widgetDOM = $compile(`<widget section="'${newSectionId}'" widget="'${widget.uuid}'"></widget>`)(newScope); 33169 33170 // Insert the new widget just before the widget zone component. 33171 widgetZone.before(widgetDOM); 33172 33173 //// Update website layout. 33174 //addWidgetToSectionLayout(scope.section, widget); 33175 var newSection = { 33176 md: vm.bufferSize, 33177 sm: 12, 33178 uuid: newSectionId, 33179 widgets: [ 33180 widget 33181 ] 33182 } 33183 33184 var pageRow = _.find(page.rows, { uuid: scope.rowId }); 33185 pageRow.sections.push(newSection); 33186 rowElement.find('.buffer').replaceWith($compile(section)(scope)); 33187 scope.resizeBuffer(0); 33188 33189 33190 // Save website layout. 33191 vm.save({ uuid: widget.uuid, parameters: [] }); 33192 }; 33193 } 33194 }; 33195 } 33196})();; 33197(function () { 33198 'use strict'; 33199 33200 angular 33201 .module('app.directives') 33202 .controller('WidgetRowSettingsWidgetController', WidgetRowSettingsWidgetController); 33203 33204 WidgetRowSettingsWidgetController.$inject = ['$scope']; 33205 33206 function WidgetRowSettingsWidgetController($scope) { 33207 var vm = this; 33208 33209 vm.isFirstRow = function () { 33210 return _.findIndex(page.rows, { uuid: $scope.widgetRow.rowId }) === 0; 33211 } 33212 33213 vm.onSave = function () { 33214 vm.form.$setSubmitted(); 33215 33216 if (vm.form.$valid) { 33217 if ($scope.onSave) { 33218 $scope.onSave($scope.widgetRow); 33219 } 33220 } 33221 } 33222 33223 vm.onCancel = function () { 33224 if ($scope.onCancel) { 33225 $scope.onCancel(); 33226 } 33227 } 33228 } 33229})(); 33230; 33231(function () { 33232 'use strict'; 33233 33234 angular 33235 .module('app.directives') 33236 .directive('widgetRowSettings', widgetRowSettings) 33237 33238 widgetRowSettings.$inject = []; 33239 33240 function widgetRowSettings() { 33241 return { 33242 restrict: 'E', 33243 scope: { 33244 widgetRow: '=', 33245 onCancel: '=', 33246 onSave: '=' 33247 }, 33248 templateUrl: 'public/v2/app/core/directives/widget/row/widget-row-settings.tpl.html', 33249 controller: 'WidgetRowSettingsWidgetController', 33250 controllerAs: 'widgetRowSettings' 33251 }; 33252 } 33253})();; 33254(function () { 33255 'use strict'; 33256 33257 angular 33258 .module('app.directives') 33259 .controller('WidgetRowToolbarController', WidgetRowToolbarController); 33260 33261 WidgetRowToolbarController.$inject = ['$scope', 'WebsiteEditorService', '$localStorage', 'SecurityService']; 33262 33263 function WidgetRowToolbarController($scope, websiteEditorService, $localStorage, securityService) { 33264 var vm = this; 33265 vm.widgetRow = $scope.widgetRow; 33266 vm.displaySettingsWindow = false; 33267 vm.firstRow = $scope.firstRow 33268 33269 vm.getName = function(names) { 33270 const name = _.find(names, function(name) { 33271 return name.culture === $localStorage.currentLanguage.culture; 33272 }); 33273 if (name && name.text) { 33274 return name.text; 33275 } 33276 return ""; 33277 }; 33278 33279 vm.showSettings = function () { 33280 vm.displaySettingsWindow = !vm.displaySettingsWindow; 33281 }; 33282 33283 vm.onSettingsSave = function (widgetRow) { 33284 var row = _.find(page.rows, { uuid: vm.widgetRow.rowId }); 33285 row.padding = widgetRow.padding; 33286 row.fullWidth = widgetRow.fullWidth; 33287 row.backgroundTransparent = widgetRow.backgroundTransparent; 33288 row.backgroundColor = widgetRow.backgroundColor; 33289 row.backgroundImage = widgetRow.backgroundImage; 33290 row.borderWidth = widgetRow.borderWidth; 33291 row.borderColor = widgetRow.borderColor; 33292 row.borderRadius = widgetRow.borderRadius;
33293 row.videoBackground = widgetRow.videoBackground; 33294 row.verticalAlign = widgetRow.verticalAlign; 33295 row.alignToTop = widgetRow.alignToTop; 33296 vm.save(); 33297 vm.displaySettingsWindow = false; 33298 } 33299 33300 vm.closeSettings = function () { 33301 var row = _.find(page.rows, { uuid: vm.widgetRow.rowId }); 33302 33303 $scope.widgetRow.padding = row.padding; 33304 $scope.widgetRow.fullWidth = row.fullwidth; 33305 $scope.widgetRow.backgroundTransparent = row.backgroundTransparent; 33306 $scope.widgetRow.backgroundColor = row.backgroundColor; 33307 $scope.widgetRow.backgroundImage = row.backgroundImage; 33308 $scope.widgetRow.borderWidth = row.borderWidth; 33309 $scope.widgetRow.borderColor = row.borderColor; 33310 $scope.widgetRow.borderRadius = row.borderRadius; 33311 $scope.widgetRow.verticalAlign = row.verticalAlign; 33312 $scope.widgetRow.alignToTop = row.alignToTop; 33313 vm.displaySettingsWindow = false; 33314 }; 33315 33316 vm.save = function (options) { 33317 websiteEditorService.updatePage(__solutionId__, __pageId__, page, options) 33318 .then(function (response) { 33319 vm.showModal = false; 33320 }) 33321 .catch(function (error) { 33322 bugsnag.notify(error); 33323 }); 33324 }; 33325 33326 vm.editRowAccess = function () { 33327 return securityService.getAccess().editRow; 33328 } 33329 33330 vm.moveRowAccess = function () { 33331 return securityService.getAccess().moveRow; 33332 } 33333 33334 vm.deleteRowAccess = function () { 33335 return securityService.getAccess().deleteRow; 33336 } 33337 } 33338})();; 33339(function () { 33340 'use strict'; 33341 33342 angular 33343 .module('app.directives') 33344 .directive('widgetRowToolbar', WidgetRowToolbar) 33345 33346 WidgetRowToolbar.$inject = ['$compile', '$rootScope']; 33347 33348 function WidgetRowToolbar($compile, $rootScope) { 33349 return { 33350 restrict: 'E', 33351 scope: { 33352 widgetRow: '=', 33353 }, 33354 templateUrl: 'public/v2/app/core/directives/widget/row/toolbar/widget-row-toolbar.tpl.html', 33355 controller: 'WidgetRowToolbarController', 33356 controllerAs: 'widgetRowToolbar', 33357 link: function (scope, element, attribute, controller) { 33358 var vm = controller; 33359 33360 vm.move = function (direction) { 33361 var rowContainer = element.closest('.widget-row-list'); 33362 var row = element.closest('.widget-row'); 33363 33364 var allRows = angular.element(rowContainer).find('.widget-row'); 33365 33366 //// Get the row index. 33367 //// TODO Do the same to enabled/disabled arrows in toolbar. 33368 var rowIndex = _.findIndex(allRows, function (row) { 33369 return row.attributes.getNamedItem('row-id').value.indexOf(scope.widgetRow.rowId) !== -1; 33370 }); 33371 33372 if ((rowIndex > 0) || 33373 (rowIndex < allRows.length - 1)) { 33374 // Get the widget to move. 33375 var rowToMove = allRows[rowIndex]; 33376 33377 switch (direction) { 33378 case 'up': 33379 swapWidgetFromSectionLayout(scope.widgetRow.rowId, angular.element(allRows[rowIndex - 1]).attr('row-id').replace(/'/g, '')); 33380 angular.element(allRows[rowIndex - 1]).before(angular.element(rowToMove)); 33381 33382 break; 33383 33384 case 'down': 33385 swapWidgetFromSectionLayout(scope.widgetRow.rowId, angular.element(allRows[rowIndex + 1]).attr('row-id').replace(/'/g, '')); 33386 angular.element(allRows[rowIndex + 1]).after(angular.element(rowToMove)); 33387 33388 break; 33389 33390 } 33391 33392 // Save the current layout. 33393 vm.save(); 33394 } 33395 }; 33396 33397 vm.showConfirm = function () { 33398 element.find('#confirmationWindow').modal('show'); 33399 } 33400 33401 vm.showEdit = function () { 33402 element.find(`#editWindow-${scope.widgetRow}`).modal('show'); 33403 } 33404 33405 33406 vm.onDelete = function () { 33407 _.remove(page.rows, { uuid: vm.widgetRow.rowId }); 33408 33409 var modal = element.find('#confirmationWindow').modal('hide'); 33410 33411 modal.on('hidden.bs.modal', function (e) { 33412 modal.modal('dispose'); 33413 element.closest('.widget-row').remove(); 33414 }) 33415 33416 modal.find('#confirmationWindow').modal('hide') 33417 33418 vm.save(); 33419 } 33420 33421 } 33422 }; 33423 } 33424 33425 function swapWidgetFromSectionLayout(row1, row2) { 33426 var rows = page.rows 33427 var rowIndex1 = findRowIndex(rows, row1); 33428 var rowIndex2 = findRowIndex(rows, row2); 33429 33430 var temp = rows[rowIndex1]; 33431 rows[rowIndex1] = rows[rowIndex2]; 33432 rows[rowIndex2] = temp; 33433 } 33434 33435 function findRowIndex(rows, uuid) { 33436 return _.findIndex(rows, function (row) { 33437 return row.uuid === uuid; 33438 }); 33439 } 33440})();; 33441(function () { 33442 'use strict'; 33443 33444 angular 33445 .module('app.directives') 33446 .controller('WidgetRowContainerController', WidgetRowContainerController); 33447 33448 WidgetRowContainerController.$inject = ['$rootScope', '$scope', '$localStorage', 'WebsiteEditorService', 'PlanService', 'SecurityService']; 33449 33450 function WidgetRowContainerController($rootScope, $scope, $localStorage, websiteEditorService, planService, securityService) { 33451 var vm = this; 33452 33453 vm.isEditMode = false; 33454 33455 33456 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 33457 if (newVal === undefined) return; 33458 33459 vm.isEditMode = newVal; 33460 }, true); 33461 33462 vm.save = function (options) { 33463 websiteEditorService.updatePage(__solutionId__, __pageId__, page, options) 33464 .then(function (response) { 33465 vm.showModal = false; 33466 }) 33467 .catch(function (error) { 33468 bugsnag.notify(error); 33469 }); 33470 }; 33471 33472 vm.addRowAccess = function () { 33473 return securityService.getAccess().addRow; 33474 } 33475 } 33476})(); 33477; 33478(function () { 33479 'use strict'; 33480 33481 angular 33482 .module('app.directives') 33483 .directive('widgetRowContainer', widgetRowContainer); 33484 33485 widgetRowContainer.$inject = ['$document', '$compile', 'GuidService',]; 33486 33487 function widgetRowContainer($document, $compile, guidService) { 33488 return { 33489 restrict: 'E', 33490 templateUrl: 'public/v2/app/core/directives/widget/row/container/widget-row-container.tpl.html', 33491 controller: 'WidgetRowContainerController', 33492 controllerAs: 'widgetRowContainer', 33493 scope: { 33494 rowId: '=' 33495 }, 33496 transclude: true, 33497 replace: true, 33498 link: function (scope, element, attribute, vm, transclude) { 33499 console.log(page); 33500 vm.addRow = function (widget) { 33501 // Get the section. 33502 var newSection = { uuid: guidService.getGuid(), widgets: [], md: 12 }; 33503 var newRowId = guidService.getGuid(); 33504 var pageRow = _.find(page.rows, { uuid: scope.rowId }); 33505 page.rows.push({ sections: [newSection], uuid: newRowId }); 33506 33507 33508 var row = angular.element(`<widget-row row-id="'${newRowId}'" class=\"page-content position-relative\">`); 33509 var section = angular.element(`<widget-section id="${newSection.uuid}" section-id="'${newSection.uuid}'" class="col-md-${newSection.md}">`); 33510 var widgetZone = angular.element(`<widget-zone section="'${newSection.uuid}'"></widget-zone>`); 33511 33512 var newScope = scope.$new(true); 33513 33514 section.append(widgetZone); 33515 row.append(section); 33516 33517 element.find('.widget-row-list').append($compile(row)(newScope)); 33518 33519 vm.save(); 33520 }; 33521 } 33522 }; 33523 } 33524})();; 33525(function () { 33526 'use strict'; 33527 33528 angular 33529 .module('app.directives') 33530 .controller('WidgetSettingsController', WidgetSettingsController); 33531 33532 WidgetSettingsController.$inject = ['$q', '$scope', '$localStorage', 'StatisticService', 'TextService']; 33533 33534 function WidgetSettingsController($q, $scope, $localStorage, statisticService, textService) { 33535 var vm = this; 33536 vm.widget = angular.fromJson(widgets[$scope.widget]); 33537 33538 // Initialise the model with widget parameters definition. 33539 vm.model = {}; 33540 vm.data = {}; 33541
33542 for (var parameter in vm.widget.parameters) { 33543 // TODO Support section 33544 switch (vm.widget.parameters[parameter].type) { 33545 case 'arrayOfImages': 33546 vm.model[vm.widget.parameters[parameter].id] = angular.fromJson(vm.widget.parameters[parameter].value.replace(/'/g, '"')); 33547 vm.model[`${vm.widget.parameters[parameter].id}Url`] = ''; 33548 break; 33549 33550 case 'checkbox': 33551 vm.model[vm.widget.parameters[parameter].id] = (vm.widget.parameters[parameter].value === 'true'); 33552 break; 33553 33554 case 'short': 33555 vm.model[vm.widget.parameters[parameter].id] = parseInt(vm.widget.parameters[parameter].value); 33556 break; 33557 33558 case 'text': 33559 case 'tiktokAccount': 33560 case 'instagramAccount': 33561 case 'facebookAccount': 33562 case 'facebookPage': 33563 vm.model[vm.widget.parameters[parameter].id] = vm.widget.parameters[parameter].value; 33564 break; 33565 33566 case 'ckeditor': 33567 vm.model[vm.widget.parameters[parameter].id] = vm.widget.parameters[parameter].value; 33568 break; 33569 33570 case 'seasonDivisionSelect': 33571 if (vm.widget.parameters[parameter].value !== 'default') { 33572 vm.model[vm.widget.parameters[parameter].id] = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\\\\\'/g, "\\\"").replace(/'/g, '"')); 33573 } else { 33574 vm.model[vm.widget.parameters[parameter].id] = vm.widget.parameters[parameter].value; 33575 } 33576 break; 33577 33578 case 'multipleImageUpload': 33579 case 'columnsDisplay': 33580 case 'columnsDisplayList': 33581 case 'tagsinput': 33582 case 'border': 33583 case 'font': 33584 case 'templateItems': 33585 case 'headerBarCustomization': 33586 case 'html': 33587 case 'filters': 33588 vm.model[vm.widget.parameters[parameter].id] = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\\\\\'/g, "\\\"").replace(/'/g, '"')); 33589 break; 33590 33591 case 'html-admin': 33592 case 'faqEditor': 33593 case 'html-admin-translatable': 33594 vm.model[vm.widget.parameters[parameter].id] = angular.fromJson(unescape(vm.widget.parameters[parameter].value)); 33595 break; 33596 33597 default: 33598 vm.model[vm.widget.parameters[parameter].id] = vm.widget.parameters[parameter].value; 33599 break; 33600 } 33601 } 33602 33603 vm.language = $scope.language; 33604 33605 vm.onUpdateLanguage = function (language) { 33606 vm.language = language; 33607 } 33608 33609 vm.addImage = function (parameterId) { 33610 // Push an empty slut to add an image. 33611 vm.model[parameterId].push({ url: vm.model[`${vm.widget.parameters[parameter].id}Url`] }); 33612 33613 // Clear the input field. 33614 vm.model[`${vm.widget.parameters[parameter].id}Url`] = ''; 33615 }; 33616 33617 vm.removeImage = function (parameterId, $index) { 33618 vm.model[parameterId].splice($index, 1); 33619 }; 33620 33621 vm.checkColumnVisible = function (column) { 33622 column.visible = !column.visible; 33623 }; 33624 33625 //Functions to execute before saving configuration (like image upload) 33626 vm.beforeSave = {} 33627 33628 vm.save = function () { 33629 if (vm.beforeSave.uploadImage) { 33630 vm.uploading = true; 33631 var images = _.map(vm.beforeSave.uploadImage, function (image) { return image }); 33632 $q.all(images).then(onSave); 33633 vm.beforeSave = {} // Reset functions 33634 } else { 33635 onSave(); 33636 } 33637 }; 33638 33639 function onSave() { 33640 vm.form.$setSubmitted(); 33641 33642 if (vm.form.$valid) {
33643 // Transform each array parameters to string. 33644 var index = 0; 33645 for (parameter in vm.model) { 33646 if (angular.isArray(vm.model[parameter]) || angular.isObject(vm.model[parameter])) { 33647 var type = vm.widget.parameters[index].type; 33648 if (type == 'faqEditor' || type == 'html-admin') { 33649 var value = angular.toJson(vm.model[parameter]); 33650 value = value.replace(/'/g, escape("'")); 33651 value = value.replace(/"/g, escape('"')); 33652 value = value.replace(/\\/g, escape('\\')); 33653 vm.model[parameter] = value; 33654 } 33655 else if (type === 'html-admin-translatable') { 33656 var data = vm.model[parameter]; 33657 data.data = textService.btoa(angular.toJson(data.data)); 33658 var value = angular.toJson(data); 33659 vm.model[parameter] = value; 33660 } 33661 else { 33662 vm.model[parameter] = angular.toJson(vm.model[parameter]).replace(/\\\"/g, '\\\\\'').replace(/"/g, '\'') 33663 } 33664 } 33665 index++; 33666 } 33667 33668 // Propagate the new values to the widget. 33669 $scope.$emit(`onParametersChange-${$scope.widget}`, vm.model); 33670 } 33671 33672 vm.uploading = false; 33673 $scope.onSaveSettings(); 33674 } 33675 } 33676})(); 33677; 33678(function () { 33679 'use strict'; 33680 33681 angular 33682 .module('app.directives') 33683 .directive('widgetSettings', widgetSettings) 33684 33685 widgetSettings.$inject = ['$compile', '$localStorage', 'GuidService', 'TemplateService', 'ListService']; 33686 33687 function widgetSettings($compile, $localStorage, guidService, templateService, listService) { 33688 return { 33689 restrict: 'E', 33690 scope: { 33691 widget: '=', 33692 onSaveSettings: '&onSave', 33693 onCancelSettings: '&onCancel' 33694 }, 33695 templateUrl: 'public/v2/app/core/directives/widget/settings/widget-settings.tpl.html', 33696 controller: 'WidgetSettingsController', 33697 controllerAs: 'widgetSettings', 33698 link: function (scope, element, attributes, controller) { 33699 var vm = controller; 33700 33701 function getName(names, culture) { 33702 return angular.isUndefinedOrNull(names) 33703 ? '' 33704 : _.find(names, function (name) { 33705 return name.culture === culture; 33706 }).text; 33707 } 33708 33709 function getProperties(properties) { 33710 var obj = {}; 33711 if (properties) { 33712 properties.forEach(function (item) { 33713 obj[item.key] = item.value; 33714 }); 33715 } 33716 return obj; 33717 } 33718 33719 function renderInput(parameter, sportId) { 33720 var parameterId = parameter.id; 33721 var parameterName = getName(parameter.name, $localStorage.currentLanguage.culture); 33722 var typeOfInput = getTypeOfInput(parameter.type); 33723 var required = isRequired(parameter) === true ? 'required' : ''; 33724 var properties = getProperties(parameter.properties); 33725 33726 // Render the input control. 33727 switch (typeOfInput) { 33728 case 'checkbox': 33729 inputsToRender = ` 33730 <div class="form-group form-check"> 33731 <input type="${typeOfInput}" name="widgetSettings.model.${parameterId}" ng-model="widgetSettings.model.${parameterId}" id="${parameterId}" class="form-check-input"></input> 33732 <label for="${parameterId}" class="form-check-label">${parameterName}</label>`; 33733 break; 33734 33735 case 'number': 33736 var max = getValidation(parameter, 'max'); 33737 var min = getValidation(parameter, 'min'); 33738 33739 inputsToRender = ` 33740 <div class="form-group"> 33741 <label for="${parameterId}">${parameterName}</label> 33742 <input type="${typeOfInput}" name="widgetSettings.model.${parameterId}" ng-model="widgetSettings.model.${parameterId}" class="form-control" ${(max ? `max="${max.value}"` : '')} ${min ? `min="${min.value}"` : ''} ${required}></input>`; 33743 break; 33744 case 'multipleSeasonsSelect': 33745 inputsToRender = ` 33746 <div class="form-group"> 33747 <label for="${parameterId}">${parameterName}</label> 33748 <multiple-seasons-select id="${parameterId}" parameter-name="${parameterId}" ng-model="widgetSettings.model"></multiple-seasons-select> 33749 `; 33750 break; 33751 33752 case 'tieBreakersSelect': 33753 inputsToRender = ` 33754 <div class="form-group"> 33755 <label for="${parameterId}">${parameterName}</label> 33756 <tie-breakers-select sport-id="${sportId}" id="${parameterId}" parameter-name="${parameterId}" ng-model="widgetSettings.model"></tie-breakers-select> 33757 `; 33758 break; 33759 case 'text': 33760 case 'url': 33761 inputsToRender = ` 33762 <div class="form-group"> 33763 <label for="${parameterId}">${parameterName}</label> 33764 <input type="${typeOfInput}" name="widgetSettings.model.${parameterId}" ng-model="widgetSettings.model.${parameterId}" class="form-control" ${required}></input>`; 33765 break; 33766 case 'ckeditor': 33767 inputsToRender = ` 33768 <div class="form-group"> 33769 <label>${parameterName}</label> 33770 <ckeditor ng-model="widgetSettings.model.${parameterId}"></ckeditor> 33771 `; 33772 break; 33773 case 'arrayOfImages': 33774 inputsToRender = ` 33775 <div class="form-group"> 33776 <label for="${parameterId}">${parameterName}</label> 33777 <div class="input-group mb-3"> 33778 <input type="text" 33779 name="widgetSettings.model.${parameterId}Url" 33780 ng-model="widgetSettings.model.${parameterId}Url" 33781 class="form-control" placeholder="Lien de l'image"></input> 33782 <!-- ADD URL VALIDATION --> 33783 <div class="input-group-append"> 33784 <button type="button" 33785 ng-click="widgetSettings.addImage('${parameterId}')" 33786 ng-disabled="widgetSettings.model.${parameterId}Url.length === 0" 33787 translate="directives.widget.settings.buttons.add" 33788 class="btn btn-outline-primary"></button> 33789 </div> 33790 </div> 33791 <!-- ADD RANGE VALIDATION --> 33792 <ul class="image-list"> 33793 <li ng-repeat="image in widgetSettings.model.${parameterId}"> 33794 <a ng-href="{{image.url}}" target="_blank">{{image.url}}</a> 33795 <a href ng-click="widgetSettings.removeImage('${parameterId}', $index)">
33796 <span class="mdi mdi-delete-forever"></span> 33797 </a> 33798 </li> 33799 </ul>`; 33800 33801 break; 33802 33803 case 'columnsDisplay': 33804 var columnsId = null; 33805 if (properties.columnsId) { 33806 columnsId = properties.columnsId; 33807 } 33808 33809 var columnsIdType = null; 33810 if (properties.columnsIdType) { 33811 columnsIdType = properties.columnsIdType; 33812 } 33813 33814 var showMinimumStats = false; 33815 if (properties.showMinimumStats) { 33816 showMinimumStats = properties.showMinimumStats; 33817 } 33818 33819 inputsToRender = ` 33820 <div class="form-group"> 33821 <label for="${parameterId}">${parameterName}</label> 33822 <columns-display-select id="${parameterId}" show-minimum-stats="${showMinimumStats}" sport-id="${sportId}" category="'${properties.category}'" type="'${properties.type}'" ng-model="widgetSettings.model.${parameterId}" columns-id="${columnsId}" columns-id-type="'${columnsIdType}'"></columns-display-select> 33823 `; 33824 break; 33825 33826 case 'columnsDisplayList': 33827 inputsToRender = ` 33828 <div class="form-group"> 33829 <label for="${parameterId}">${parameterName}</label> 33830 <columns-display-select-list id="${parameterId}" sport-id="${sportId}" type="'${properties.type}'" show-player-properties="${properties.showPlayerProperties}" ng-model="widgetSettings.model.${parameterId}"></columns-display-select-list> 33831 `; 33832 break; 33833 33834 case 'fileUpload': 33835 inputsToRender = `<div class="form-group">`; 33836 if (parameterName) { 33837 inputsToRender += `<label for="${parameterId}">${parameterName}</label>` 33838 } 33839 33840 inputsToRender += `<file-upload before-save="widgetSettings.beforeSave" widget="${scope.widget}" id="${parameterId}" ng-model="widgetSettings.model.${parameterId}"></file-upload>`; 33841 break; 33842 33843 case 'multipleImageUpload': 33844 inputsToRender = `<div class="form-group"><multiple-image-upload ng-model="widgetSettings.model.${parameterId}" max="${properties.max}"></multiple-image-upload>`; 33845 break; 33846 33847 case 'seasonSelect': 33848 inputsToRender = ` 33849 <div class="form-group"> 33850 <label for="${parameterId}">${parameterName}</label> 33851 <season-select id="${parameterId}" parameter-name="${parameterId}" ng-model="widgetSettings.model"></season-select>`; 33852 break; 33853 33854 case 'seasonDivisionSelect': 33855 inputsToRender = ` 33856 <div class="form-group"> 33857 <season-division-select id="${parameterId}" ng-model="widgetSettings.model.${parameterId}"></season-division-select>`; 33858 break; 33859 33860 case 'tiktokAccount': 33861 inputsToRender = ` 33862 <div class="form-group"> 33863 <label for="${parameterId}">${parameterName}</label> 33864 <tiktok-account id="${parameterId}" ng-model="widgetSettings.model.${parameterId}" widget="${scope.widget}"></tiktok-account>`; 33865 break; 33866 33867 case 'instagramAccount': 33868 inputsToRender = ` 33869 <div class="form-group"> 33870 <label for="${parameterId}">${parameterName}</label> 33871 <instagram-account id="${parameterId}" ng-model="widgetSettings.model.${parameterId}" widget="${scope.widget}"></instagram-account>`; 33872 break; 33873 33874 case 'facebookAccount': 33875 inputsToRender = ` 33876 <div class="form-group"> 33877 <label for="${parameterId}">${parameterName}</label> 33878 <facebook-account id="${parameterId}" ng-model="widgetSettings.model.${parameterId}" widget="${scope.widget}"></facebook-account>`; 33879 break; 33880 33881 case 'facebookPage': 33882 inputsToRender = ` 33883 <div class="form-group"> 33884 <facebook-page parameter-name="${parameterName}" parameter-id="${parameterId}" ng-model="widgetSettings.model" widget="${scope.widget}"></facebook-page>`; 33885 break; 33886 33887 case 'scheduleView': 33888 inputsToRender = ` 33889 <div class="form-group"> 33890 <label for="${parameterId}">${parameterName}</label> 33891 <calendar-type-select id="${parameterId}" ng-model="widgetSettings.model.${parameterId}"></calendar-type-select>`; 33892 break; 33893 33894 case "statsSelect": 33895 inputsToRender = ` 33896 <div class="form-group"> 33897 <label for="${parameterId}">${parameterName}</label> 33898 <stats-select id="${parameterId}" sport-id="${sportId}" category-id="${properties.categoryId}" ng-model="widgetSettings.model.${parameterId}"></stats-select>`; 33899 break; 33900
33901 case "tagsinput": 33902 var guid = guidService.getGuid(); 33903 var options = ''; 33904 vm.model[parameterId].forEach(function (tag) { 33905 options += `<option value="${tag}">${tag}</option>` 33906 }) 33907 inputsToRender = `<div class="form-group"> 33908 <label for="${parameterId}">${parameterName}</label> 33909 <select multiple data-role="tagsinput" id="${guid}" type="${typeOfInput}" name="widgetSettings.model.${parameterId}" ng-model="widgetSettings.model.${parameterId}" class="form-control" ${required}>${options}</select> 33910 <script> 33911 $("#${guid}").tagsinput('refresh'); 33912 </script> 33913 `; 33914 break; 33915 33916 case "simpleSelect": 33917 inputsToRender = ` 33918 <div class="form-group"> 33919 <label for="${parameterId}">${parameterName}</label> 33920 <simple-select id="${parameterId}" list="${properties.list}" ng-model="widgetSettings.model.${parameterId}"></stats-select>`; 33921 break; 33922 33923 case "color": 33924 inputsToRender = ` 33925 <div class="form-group"> 33926 <label for="${parameterId}">${parameterName}</label> 33927 <div class="input-group"> 33928 <div class="input-group-prepend" ng-style="{ 'background-color': widgetSettings.model.${parameterId} }" style="background-color: rgb(75, 74, 154);"></div> 33929 <input name="widgetSettings.model.${parameterId}" color-picker color-picker-model="widgetSettings.model.${parameterId}" class="form-control" /> 33930 </div> 33931 `; 33932 break; 33933 33934 case "border": 33935 vm.blurInput = function (value) { 33936 if (!vm.model[parameterId][value]) { 33937 vm.model[parameterId][value] = 0; 33938 } 33939 } 33940 33941 inputsToRender = ` 33942 <div class="form-group"> 33943 <label for="${parameterId}">${parameterName}</label> 33944 <div> 33945 <div class="d-flex"> 33946 <div class="number-group"> 33947 <label translate="directives.widget.settings.border.parameters.width"></label> 33948 <input type="number" name="widgetSettings.model.${parameterId}" ng-model="widgetSettings.model.${parameterId}['width']" ng-blur="widgetSettings.blurInput('width')" class="form-control" /> 33949 </div> 33950 <div class="flex-fill mx-2"> 33951 <label translate="directives.widget.settings.border.parameters.color"></label> 33952 <div class="input-group"> 33953 <div class="input-group-prepend" ng-style="{ 'background-color': widgetSettings.model.${parameterId}['color'] }" style="background-color: rgb(75, 74, 154);"></div> 33954 <input name="widgetSettings.model.${parameterId}" color-picker color-picker-model="widgetSettings.model.${parameterId}['color']" class="form-control" /> 33955 </div> 33956 </div> 33957 <div class="number-group"> 33958 <label translate="directives.widget.settings.border.parameters.radius"></label> 33959 <input type="number" min="0" max="40" ng-model="widgetSettings.model.${parameterId}['radius']" ng-blur="widgetSettings.blurInput('radius')" name="widgetSettings.model.${parameterId}" class="form-control" /> 33960 </div> 33961 </div> 33962 <div ng-show="widgetSettings.form.$submitted || widgetSettings.form[\'widgetSettings.model.${parameterId}\'].$touched">
33963 <span ng-show="widgetSettings.form[\'widgetSettings.model.${parameterId}\'].$error.max || widgetSettings.form[\'widgetSettings.model.${parameterId}\'].$error.min" class="ng-invalid error" >{{ 'directives.widget.settings.border.validation.radius' | translate: { min: 0, max: 40 } }}</span> 33964 </div> 33965 </div> 33966 `; 33967 break; 33968 case "template": 33969 var listProperty = properties.list; 33970 var templateParameter = parameter; 33971 var templateItemsParameter = properties.items; 33972 33973 vm.data[parameterId] = { templateList: [] }; 33974 33975 templateService.getCardWidgetTemplates(__solutionId__).then(function (templates) { 33976 var templateList = []; 33977 var filteredTemplates = _.filter(templates.data, { type: listProperty }); 33978
33979 filteredTemplates.forEach(function (template) { 33980 templateList.push(angular.fromJson(template.value)) 33981 }) 33982 33983 vm.data[parameterId] = { templateList: templateList }; 33984 }); 33985 33986 inputsToRender = ` 33987 <div class="form-group"> 33988 <label for="${parameterId}">${parameterName}</label> 33989 <div style="overflow-x: scroll;white-space: nowrap;"> 33990 <img ng-repeat="template in widgetSettings.data.${parameterId}.templateList" ng-class="{ 'template-active': widgetSettings.model.${parameterId} == template.id }" ng-click="widgetSettings.model.${parameterId} = template.id; widgetSettings.data.${templateItemsParameter}.templateId = template.id" ng-src="{{template.image}}"/> 33991 </div> 33992 `; 33993 33994 break; 33995 case "templateItems": 33996 var templateParameterId = properties.templateParameter; 33997 var templateParameter = _.find(widget.parameters, { id: templateParameterId }); 33998 var selectedTemplate = templateParameter; 33999 var listProperty = properties.listParameter; 34000 var list = ''; 34001 34002 if (listProperty) { 34003 list = `list="widgetSettings.data.${listProperty}.list" selected-list="widgetSettings.model.${listProperty}"`; 34004 } 34005 34006 vm.data[parameterId] = { templateId: templateParameter.value, getTemplate: function () { return _.find(vm.data[templateParameterId].templateList, { id: vm.data[parameterId].templateId }) } }; 34007 34008 inputsToRender = `<div class="form-group"> 34009 <label for="${parameterId}">${parameterName}</label> 34010 <template-editor ${list} template="widgetSettings.data.${parameterId}.getTemplate()" template-items="widgetSettings.model.${parameterId}" before-save="widgetSettings.beforeSave"></template-editor>`; 34011 break; 34012 34013 case "list": 34014 listService.getListsBySolutionId(__solutionId__).then(function (lists) { 34015 vm.data[parameterId].list = lists.data; 34016 }) 34017 34018 vm.data[parameterId] = { list: [] }; 34019 34020 inputsToRender = `<div class="form-group"> 34021 <label for="${parameterId}">${parameterName}</label> 34022 <select ng-model="widgetSettings.model.${parameterId}" class="form-control"> 34023 <option ng-repeat="item in widgetSettings.data['${parameterId}'].list track by $index" value="{{item.id}}">{{item.name}}</option> 34024 </select>`; 34025 break; 34026 case 'filters': 34027 var listProperty = properties.listParameter; 34028 inputsToRender = `<div class="form-group"> 34029 <label for="${parameterId}">${parameterName}</label> 34030 <div> 34031 <list-filters filters="widgetSettings.model.${parameterId}" list="widgetSettings.data.${listProperty}.list" selected-list="widgetSettings.model.${listProperty}"></list-filters> 34032 </div>` 34033 break; 34034 case "headerBarCustomization": 34035 inputsToRender = `<div class="form-group"><header-bar-customization ng-model="widgetSettings.model.${parameterId}"></header-bar-customization>`; 34036 break; 34037 34038 case "formSelect": 34039 inputsToRender = `<div class="form-group"> 34040 <label for="${parameterId}">${parameterName}</label> 34041 <form-select id="${parameterId}" parameter-name="${parameterId}" ng-model="widgetSettings.model"></form-select>`; 34042 break; 34043 34044 case "faqEditor": 34045 inputsToRender = `<div class="form-group"> 34046 <faq-editor language="widgetSettings.language" sections="widgetSettings.model.${parameterId}" ></faq-editor> 34047 `; 34048 break; 34049 34050 case "backgroundPosition": 34051 inputsToRender = `<div class="form-group"> 34052 <label for="${parameterId}">${parameterName}</label> 34053 <div class="d-flex flex-column"> 34054 <div class="d-flex flex-row"> 34055 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'top left'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'top left'}"><span class="mdi mdi-arrow-top-left"></span></button> 34056 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'top center'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'top center'}"><span class="mdi mdi-arrow-up"></span></button> 34057 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'top right'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'top right'}"><span class="mdi mdi-arrow-top-right"></span></button> 34058 </div> 34059 <div class="d-flex flex-row"> 34060 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'center left'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'center left'}"><span class="mdi mdi-arrow-left"></span></button> 34061 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'center center'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'center center'}"><span class="mdi mdi-circle-outline"></span></button> 34062 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'center right'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'center right'}"><span class="mdi mdi-arrow-right"></span></button> 34063 </div> 34064 <div class="d-flex flex-row"> 34065 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'bottom left'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'bottom left'}"><span class="mdi mdi-arrow-bottom-left"></span></button> 34066 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'bottom center'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'bottom center'}"><span class="mdi mdi-arrow-down"></span></button> 34067 <button class="btn m-1" ng-click="widgetSettings.model.${parameterId} = 'bottom right'" ng-class="{ 'btn-primary': widgetSettings.model.${parameterId} == 'bottom right'}"><span class="mdi mdi-arrow-bottom-right"></span></button> 34068 </div> 34069 </div>` 34070 break; 34071 case "html": 34072 inputsToRender = `<div class="form-group"><html-widget-editor ng-model="widgetSettings.model.${parameterId}"></html-widget-editor>`; 34073 break; 34074 case "html-admin": 34075 inputsToRender = `<div class="form-group"><html-widget-editor ng-model="widgetSettings.model.${parameterId}" is-admin='true'></html-widget-editor>`; 34076 break; 34077 case "html-admin-translatable": 34078 inputsToRender = `<div class="form-group"><html-widget-editor-translatable language="widgetSettings.language" ng-model="widgetSettings.model.${parameterId}" is-admin='true'></html-widget-editor>`; 34079 break; 34080 34081 case "font": 34082 vm.blurInput = function (value) { 34083 if (!vm.model[parameterId][value]) { 34084 vm.model[parameterId][value] = 0; 34085 } 34086 } 34087 34088 inputsToRender = ` 34089 <div class="form-group"> 34090 <label for="${parameterId}">${parameterName}</label> 34091 <div> 34092 <div class="d-flex"> 34093 <div class="number-group"> 34094 <label translate="directives.widget.settings.font.parameters.size"></label> 34095 <input type="number" name="widgetSettings.model.${parameterId}" ng-model="widgetSettings.model.${parameterId}['size']" ng-blur="widgetSettings.blurInput('size')" class="form-control" /> 34096 </div> 34097 <div class="flex-fill mx-2"> 34098 <label translate="directives.widget.settings.font.parameters.color"></label> 34099 <div class="input-group"> 34100 <div class="input-group-prepend" ng-style="{ 'background-color': widgetSettings.model.${parameterId}['color'] }" style="background-color: rgb(75, 74, 154);"></div> 34101 <input name="widgetSettings.model.${parameterId}" color-picker color-picker-model="widgetSettings.model.${parameterId}['color']" class="form-control" /> 34102 </div> 34103 </div> 34104 <div class="number-group mx-2"> 34105 <label translate="directives.widget.settings.font.parameters.bold"></label> 34106 <div class="d-flex justify-content-center align-item-center" style="height: 33px"> 34107 <input type="checkbox" ng-model="widgetSettings.model.${parameterId}['bold']" name="widgetSettings.model.${parameterId}" /> 34108 </div> 34109 </div> 34110 <div class="number-group mx-2"> 34111 <label translate="directives.widget.settings.font.parameters.italic"></label> 34112 <div class="d-flex justify-content-center align-item-center" style="height: 33px"> 34113 <input type="checkbox" ng-model="widgetSettings.model.${parameterId}['italic']" name="widgetSettings.model.${parameterId}" /> 34114 </div> 34115 </div> 34116 <div class="number-group mx-2"> 34117 <label style="white-space: nowrap" translate="directives.widget.settings.font.parameters.underline"></label> 34118 <div class="d-flex justify-content-center align-item-center" style="height: 33px"> 34119 <input type="checkbox" ng-model="widgetSettings.model.${parameterId}['underline']" name="widgetSettings.model.${parameterId}"/> 34120 </div> 34121 </div> 34122 </div> 34123 </div> 34124 `; 34125 break; 34126 34127 } 34128 34129 // Check if the parameter have validation. 34130 if (parameter.validations.length > 0) { 34131 inputsToRender += `<div ng-show="widgetSettings.form.$submitted || widgetSettings.form[\'widgetSettings.model.${parameterId}\'].$touched">`; 34132 34133 for (var validation in parameter.validations) { 34134 // Get the validation type.
34135 var validationType = parameter.validations[validation].type.toLowerCase(); 34136 34137 // Set the error message. 34138 var errorMessage = 'Not set'; 34139 34140 // TODO Use $translate with parameter 34141 switch (validationType) { 34142 case 'url': 34143 // TODO Add error message 34144 errorMessage = 'L\'url est invalide'; 34145 break; 34146 34147 case 'required': 34148 // TODO Add error message 34149 errorMessage = 'Le paramètre est requis'; 34150 break; 34151 34152 case 'max': 34153 errorMessage = `Doit être plus petit que ${parameter.validations[validation].value}`; 34154 break; 34155 34156 case 'min': 34157 errorMessage = `Doit être plus grand que ${parameter.validations[validation].value}`; 34158 break; 34159 } 34160 34161 inputsToRender += `<span ng-show="widgetSettings.form[\'widgetSettings.model.${parameterId}\'].$error.${validationType}" class="ng-invalid error" translate="">${errorMessage}</span>`; 34162 } 34163 inputsToRender += '</div>'; 34164 } 34165 34166 inputsToRender += '</div>'; 34167 34168 return inputsToRender; 34169 } 34170 // Get widget definition. 34171 var widget = angular.fromJson(widgets[scope.widget]); 34172 34173 var parametersSection = element.find('.parameters'); 34174 var inputsToRender = ''; 34175 34176 var groups = _.groupBy(_.filter(widget.parameters, 'group'), 'group'); 34177 groups = _.mapValues(groups, function (group) { return { added: false, items: group } }) 34178 var parameters = []; 34179 widget.parameters.forEach(function (parameter) { 34180 if (!parameter.group) { 34181 parameters.push(parameter); 34182 } 34183 else if (!groups[parameter.group].added) { 34184 parameters.push({ type: 'group', id: parameter.group, items: groups[parameter.group].items, definition: _.find(widget.parameterGroups, { id: parameter.group }), collapsed: true }) 34185 groups[parameter.group].added = true; 34186 } 34187 }) 34188 34189 vm.parameters = parameters; 34190 34191 for (var parameter in parameters) { 34192 // Check if the parameter is a section. 34193 if (parameters[parameter].type.toLowerCase() === 'group') { 34194 // Get the section name. 34195 if (parameters[parameter].definition) { 34196 var sectionTitle = getName(parameters[parameter].definition.name, $localStorage.currentLanguage.culture); 34197 inputsToRender += `<div class="collapsible" ng-click="widgetSettings.parameters[${parameter}].collapsed = !widgetSettings.parameters[${parameter}].collapsed"> 34198 <span>${sectionTitle}</span> 34199 <span ng-if="widgetSettings.parameters[${parameter}].collapsed" class="mdi mdi-plus"></span> 34200 <span ng-if="!widgetSettings.parameters[${parameter}].collapsed" class="mdi mdi-minus"></span> 34201 </div>`; 34202 } 34203 34204 // Render all the section parameters. 34205 inputsToRender += `<div ng-if="!widgetSettings.parameters[${parameter}].collapsed">`; 34206 for (var sectionParameter in parameters[parameter].items) { 34207 inputsToRender += renderInput(parameters[parameter].items[sectionParameter], widget.sportId); 34208 } 34209 inputsToRender += '</div>'; 34210 34211 } else { 34212 // Render the input control. 34213 inputsToRender += renderInput(parameters[parameter], widget.sportId); 34214 } 34215 } 34216 34217 var parametersElement = angular.element(inputsToRender) 34218 parametersSection.append(parametersElement); 34219 $compile(parametersElement)(scope); 34220 34221 scope.onSave = function () { 34222 if (typeof (scope.onSaveSettings) == 'function') { 34223 vm.save(); 34224 } 34225 }; 34226 34227 scope.onCancel = function () { 34228 if (typeof (scope.onCancelSettings) == 'function') { 34229 scope.onCancelSettings();
34230 } 34231 }; 34232 34233 function getTypeOfInput(type) { 34234 switch (type) { 34235 case 'arrayOfImages': // boolean ??? 34236 return 'arrayOfImages'; 34237 34238 case 'checkbox': // boolean ??? 34239 return 'checkbox'; 34240 34241 case 'image': 34242 return 'fileUpload'; 34243 34244 case 'multipleImageUpload': 34245 return 'multipleImageUpload'; 34246 34247 case 'short': // short 34248 return 'number'; 34249 34250 case 'url': 34251 return 'url'; 34252 34253 case 'seasonSelect': 34254 return 'seasonSelect'; 34255 34256 case 'multipleSeasonsSelect': 34257 return 'multipleSeasonsSelect'; 34258 34259 case 'tieBreakersSelect': 34260 return 'tieBreakersSelect'; 34261 34262 case 'seasonDivisionSelect': 34263 return 'seasonDivisionSelect'; 34264 34265 case 'tiktokAccount': 34266 return 'tiktokAccount'; 34267 34268 case 'instagramAccount': 34269 return 'instagramAccount'; 34270 34271 case 'facebookAccount': 34272 return 'facebookAccount'; 34273 34274 case 'facebookPage': 34275 return 'facebookPage'; 34276 34277 case 'statsSelect': 34278 return 'statsSelect'; 34279 34280 case 'scheduleView': 34281 return 'scheduleView' 34282 34283 case 'tagsinput': 34284 return 'tagsinput'; 34285 34286 case 'columnsDisplay': 34287 return 'columnsDisplay'; 34288 34289 case 'columnsDisplayList': 34290 return 'columnsDisplayList'; 34291 34292 case 'simpleSelect': 34293 return 'simpleSelect'; 34294 34295 case 'formSelect': 34296 return 'formSelect'; 34297 34298 case 'ckeditor': 34299 return 'ckeditor'; 34300 case 'color': 34301 return 'color'; 34302 34303 case 'border': 34304 return 'border'; 34305 34306 case 'font': 34307 return 'font'; 34308 34309 case 'template': 34310 return 'template'; 34311 34312 case 'templateItems': 34313 return 'templateItems'; 34314 34315 case 'list': 34316 return 'list'; 34317 34318 case 'backgroundPosition': 34319 return 'backgroundPosition'; 34320 34321 case 'filters': 34322 return 'filters'; 34323 34324 case 'headerBarCustomization': 34325 return 'headerBarCustomization'; 34326 34327 case 'html': 34328 return 'html'; 34329 34330 case 'html-admin': 34331 return 'html-admin'; 34332 34333 case 'html-admin-translatable': 34334 return 'html-admin-translatable'; 34335 34336 case 'faqEditor': 34337 return 'faqEditor'; 34338 34339 default: 34340 return 'text'; 34341 } 34342 } 34343 34344 function isRequired(parameter) { 34345 for (var validation in parameter.validations) { 34346 if (parameter.validations[validation].type === 'required') { 34347 return true; 34348 } 34349 } 34350 34351 return false; 34352 } 34353 34354 function getValidation(parameter, type) { 34355 for (var validation in parameter.validations) { 34356 if (parameter.validations[validation].type === type) { 34357 return parameter.validations[validation]; 34358 } 34359 } 34360 34361 return undefined; 34362 } 34363 34364 } 34365 }; 34366 } 34367})();; 34368(function () { 34369 'use strict'; 34370 34371 angular 34372 .module('app.directives') 34373 .controller('WidgetContainerController', WidgetContainerController); 34374 34375 WidgetContainerController.$inject = ['$scope', '$localStorage', 'StatisticService']; 34376 34377 function WidgetContainerController($scope, $localStorage, statisticService) { 34378 var vm = this; 34379 } 34380})(); 34381; 34382(function () { 34383 'use strict'; 34384 34385 angular 34386 .module('app.directives') 34387 .directive('widgetContainer', widgetContainer) 34388 34389 widgetContainer.$inject = ['$compile']; 34390 34391 function widgetContainer($compile) { 34392 return { 34393 restrict: 'E', 34394 scope: { 34395 widget: '=' 34396 }, 34397 templateUrl: 'public/v2/app/core/directives/widget/container/widget-container.tpl.html', 34398 controller: 'WidgetContainerController', 34399 controllerAs: 'widgetContainer', 34400 link: function (scope, element, attributes, controller) { 34401 var widgetContent = element.find('#widget-container'); 34402 var widgetToRender = angular.fromJson(widgets[scope.widget]).edit; 34403 34404 // Render the widget container with the proper directive identifier. 34405 var widgetToCompile = $compile(`<${widgetToRender} widget="\'${scope.widget}\'"></${widgetToRender}>`)(scope); 34406 34407 // Add the DOM element to the zone. 34408 widgetContent.append(widgetToCompile); 34409 } 34410 }; 34411 } 34412})();; 34413(function () { 34414 'use strict'; 34415 34416 angular 34417 .module('app.directives') 34418 .controller('WidgetToolbarController', WidgetToolbarController); 34419 34420 WidgetToolbarController.$inject = ['$scope', 'WebsiteEditorService', '$localStorage', 'SecurityService']; 34421 34422 function WidgetToolbarController($scope, websiteEditorService, $localStorage, securityService) { 34423 var vm = this; 34424 vm.widget = angular.fromJson(widgets[$scope.widget]); 34425 vm.displaySettingsWindow = false; 34426 vm.editable = isWidgetEditable(vm.widget); 34427 vm.isDataEditable = vm.widget.edit; 34428 vm.isWidgetEditable = isWidgetEditable; 34429 vm.isFullscreen = false; 34430 34431 vm.getName = function(names) { 34432 const name = _.find(names, function(name) { 34433 return name.culture === $localStorage.currentLanguage.culture; 34434 }); 34435 if (name && name.text) { 34436 return name.text; 34437 } 34438 return ""; 34439 }; 34440 34441 vm.showSettings = function() { 34442 vm.displaySettingsWindow = !vm.displaySettingsWindow; 34443 }; 34444 34445 vm.saveSettings = function() { 34446 vm.displaySettingsWindow = false; 34447 }; 34448 34449 vm.closeSettings = function() { 34450 vm.displaySettingsWindow = false; 34451 }; 34452 34453 vm.save = function (options) { 34454 websiteEditorService.updatePage(__solutionId__, __pageId__, options) 34455 .then(function(response) { 34456 34457 }) 34458 .catch(function(error) { 34459 bugsnag.notify(error); 34460 }); 34461 }; 34462 34463 vm.editWidgetAccess = function () { 34464 return securityService.getAccess().editWidget; 34465 } 34466 34467 vm.moveWidgetAccess = function () { 34468 return securityService.getAccess().moveWidget; 34469 } 34470 34471 vm.deleteWidgetAccess = function () { 34472 return securityService.getAccess().deleteWidget; 34473 } 34474 34475 vm.scoreboardAccess = function () { 34476 return securityService.getAccess().scoreboard; 34477 } 34478 34479 function isWidgetEditable(widget) { 34480 return ($localStorage.__KreezeeSession__.Session.CurrentUser.IsAdminKreezee && widget.availableKreezeeAdminOnly) || !widget.availableKreezeeAdminOnly; 34481 } 34482 } 34483})();; 34484(function () { 34485 'use strict'; 34486 34487 angular 34488 .module('app.directives') 34489 .directive('widgetToolbar', widgetToolbar) 34490 34491 widgetToolbar.$inject = ['$compile', '$rootScope', '$timeout', 'ModalService']; 34492 34493 function widgetToolbar($compile, $rootScope, $timeout, modalService) { 34494 return { 34495 restrict: 'E', 34496 scope: { 34497 section: '=', 34498 widget: '=', 34499 onDelete: '&onDelete' 34500 }, 34501 templateUrl: 'public/v2/app/core/directives/widget/toolbar/widget-toolbar.tpl.html', 34502 controller: 'WidgetToolbarController', 34503 controllerAs: 'widgetToolbar', 34504 link: function (scope, element, attribute, controller) { 34505 var vm = controller; 34506 var widgetContainer = element.closest('.widget'); 34507 var draggableHandle = element.find('#draggable-handle'); 34508 var editModal = null; 34509 34510 $timeout(function () { 34511 editModal = modalService.init(element.find(`#editWindow-${scope.widget}`)); 34512 }) 34513 34514 draggableHandle[0].onmousedown = function (e) { 34515 e.target.closest('.widget-container').setAttribute('draggable', 'true'); 34516 }; 34517 34518 widgetContainer[0].ondragstart = function (e) { 34519 e.dataTransfer.setData('widget', angular.toJson(scope.widget));
34520 }; 34521 34522 widgetContainer[0].ondragend = function (e) { 34523 e.target.closest('.widget-container').setAttribute('draggable', 'false') 34524 }; 34525 34526 vm.move = function (direction) { 34527 // Get the current section element. 34528 var section = angular.element.find(`#${scope.section}`); 34529 34530 // Find all widgets in the current section. 34531 var widgetsUI = angular.element(section).find('widget'); 34532 34533 // Get the widget index. 34534 // TODO Do the same to enabled/disabled arrows in toolbar. 34535 var widgetIndex = _.findIndex(widgetsUI, function (widget) { 34536 return widget.attributes.getNamedItem('widget').value.indexOf(scope.widget) !== -1; 34537 }); 34538 34539 if (widgetIndex >= 0 && widgetIndex < widgetsUI.length) { 34540 // Get the widget to move. 34541 var widgetToMove = widgetsUI[widgetIndex]; 34542 34543 switch (direction) { 34544 case 'up': 34545 if (widgetIndex > 0) { 34546 function swapWidgetsTop(widget) { 34547 if (vm.isWidgetEditable(widget)) { 34548 angular.element(widgetsUI[widgetIndex - 1]).before(angular.element(widgetToMove)); 34549 return true; 34550 } 34551 return false; 34552 } 34553 34554 // Swap the element in section layout variable. 34555 swapWidgetFromSectionLayout(scope.section, scope.widget, angular.element(widgetsUI[widgetIndex - 1]).attr('widget').replace(/'/g, ''), swapWidgetsTop); 34556 } 34557 break; 34558 34559 case 'down': 34560 if (widgetIndex < widgetsUI.length - 1) { 34561 function swapWidgetsDown(widget) { 34562 if (vm.isWidgetEditable(widget)) { 34563 angular.element(widgetsUI[widgetIndex + 1]).after(angular.element(widgetToMove)); 34564 return true; 34565 } 34566 return false; 34567 } 34568 34569 // Swap the element in section layout variable. 34570 swapWidgetFromSectionLayout(scope.section, scope.widget, angular.element(widgetsUI[widgetIndex + 1]).attr('widget').replace(/'/g, ''), swapWidgetsDown); 34571 } 34572 break; 34573 34574 case 'right': 34575 case 'left': 34576 var sourceSection = scope.section; 34577 var row = getSectionRow(scope.section); 34578 var sourceIndex = _.findIndex(row.sections, { uuid: scope.section }); 34579 if (vm.isWidgetEditable(row.sections[sourceIndex].widgets[widgetIndex])) { 34580 var destIndex = sourceIndex + (direction == 'right' ? 1 : -1); 34581 var destSection = null; 34582 34583 if (row.sections.length > destIndex && destIndex >= 0) { 34584 destSection = row.sections[destIndex].uuid; 34585 } 34586 34587 if (sourceSection && destSection) { 34588 addWidgetToSectionLayout(destSection, row.sections[sourceIndex].widgets[widgetIndex]) 34589 removeWidgetFromSectionLayout(sourceSection, scope.widget); 34590 34591 var destSectionElement = angular.element.find(`#${destSection}>div`); 34592 widgetToMove.remove(); 34593 destSectionElement[0].prepend(widgetToMove); 34594 34595 scope.section = destSection; 34596 } 34597 } 34598 34599 break; 34600 } 34601 34602 // Save the current layout. 34603 vm.save(); 34604 } 34605 }; 34606 34607 vm.onDelete = function () { 34608 // Check if the widget is lock. 34609 if (!vm.widget.lock) { 34610 element.find('#confirmationWindow').modal('hide').on('hidden.bs.modal', function () { 34611 // Destroy the current scope. 34612 scope.$destroy(); 34613 34614 // Destroy the DOM container of the directive. 34615 $(`widget[widget="'${scope.widget}'"]`).remove(); 34616 34617 // Remove widget from layout. 34618 removeWidgetFromSectionLayout(scope.section, vm.widget.uuid); 34619 removeWidgetFromWidgets(vm.widget.uuid); 34620 if (removeSectionIfEmpty(scope.section)) { 34621 $rootScope.$emit(`onDeleteSection-${scope.section}`); 34622 }; 34623 34624 // Save page layout. 34625 vm.save({ uuid: vm.widget.uuid, parameters: [] }); 34626 }); 34627 34628 } 34629 }; 34630 34631 vm.showConfirm = function () { 34632 if (!vm.widget.lock) { 34633 element.find('#confirmationWindow').modal('show'); 34634 } 34635 } 34636 34637 vm.showEdit = function () { 34638 editModal.show(); 34639 } 34640 34641 vm.goFullscreen = function (fullscreen) { 34642 vm.isFullscreen = fullscreen;
34643 } 34644 } 34645 }; 34646 } 34647 34648 function getSectionRow(sectionId) { 34649 for (var row in page.rows) { 34650 var sections = page.rows[row].sections; 34651 34652 for (var section in sections) { 34653 if (sections[section].uuid === sectionId) { 34654 return page.rows[row]; 34655 } 34656 } 34657 } 34658 34659 return null; 34660 } 34661 34662 function addWidgetToSectionLayout(sectionId, widget) { 34663 for (var row in page.rows) { 34664 var sections = page.rows[row].sections; 34665 34666 for (var section in sections) { 34667 if (sections[section].uuid === sectionId) { 34668 sections[section].widgets = [widget].concat(sections[section].widgets); 34669 34670 return; 34671 } 34672 } 34673 } 34674 } 34675 34676 function removeWidgetFromWidgets(widgetId) { 34677 delete widgets[widgetId]; 34678 } 34679 34680 function removeWidgetFromSectionLayout(sectionId, widgetId) { 34681 for (var row in page.rows) { 34682 var sections = page.rows[row].sections; 34683 34684 for (var section in sections) { 34685 if (sections[section].uuid === sectionId) { 34686 _.remove(sections[section].widgets, { 34687 uuid: widgetId 34688 }); 34689 34690 return; 34691 } 34692 } 34693 } 34694 } 34695 34696 function removeSectionIfEmpty(sectionId) { 34697 for (var row in page.rows) { 34698 var sections = page.rows[row].sections; 34699 34700 for (var section in sections) { 34701 if (sections[section].uuid === sectionId) { 34702 if (sections[section].widgets.length == 0) { 34703 _.remove(page.rows[row].sections, { uuid: sectionId }); 34704 return true; 34705 } 34706 34707 return; 34708 } 34709 } 34710 } 34711 } 34712 34713 function swapWidgetFromSectionLayout(sectionId, widgetId1, widgetId2, verification) { 34714 for (var row in page.rows) { 34715 var sections = page.rows[row].sections; 34716 34717 for (var section in sections) { 34718 if (sections[section].uuid === sectionId) { 34719 var widgetIndex1 = findWidgetIndex(sections[section].widgets, widgetId1); 34720 var widgetIndex2 = findWidgetIndex(sections[section].widgets, widgetId2); 34721 34722 // Swap widget in the section. 34723 if (verification(sections[section].widgets[widgetIndex2])) { 34724 var temp = sections[section].widgets[widgetIndex1]; 34725 sections[section].widgets[widgetIndex1] = sections[section].widgets[widgetIndex2]; 34726 sections[section].widgets[widgetIndex2] = temp; 34727 } 34728 break; 34729 } 34730 } 34731 } 34732 } 34733 34734 function findWidgetIndex(widgets, uuid) { 34735 return _.findIndex(widgets, function (widget) { 34736 return widget.uuid === uuid; 34737 }); 34738 } 34739})();; 34740(function () { 34741 'use strict'; 34742 34743 angular 34744 .module('app.directives') 34745 .controller('WidgetModalController', WidgetModalController); 34746 34747 WidgetModalController.$inject = ['$scope', 'WebsiteEditorService', '$translate', '$localStorage', 'PlanService']; 34748 34749 function WidgetModalController($scope, websiteEditorService, $translate, $localStorage, planService) { 34750 var vm = this; 34751 34752 //State variables 34753 vm.section = $scope.section; 34754 vm.isEditMode = false; 34755 vm.widgets = []; 34756 34757 34758 vm.addWidget = function (widget) { 34759 if ($scope.onAddWidget) { 34760 $scope.onAddWidget(widget); 34761 } 34762 } 34763 34764 vm.getWidgets = getWidgets; 34765 34766 //Helpers 34767 function getWidgets() { 34768 vm.widgets = []; 34769 vm.specificWidgets = [] 34770 vm.generalWidgets = [] 34771 vm.mediaWidgets = [] 34772 vm.newsWidgets = [] 34773 vm.advancedWidgets = []; 34774 vm.generalIsOpened = true 34775 vm.specificIsOpened = false 34776 vm.mediaIsOpened = false 34777 vm.newsIsOpened = false 34778 vm.statsIsOpened = false; 34779 vm.advancedIsOpened = false; 34780 34781 websiteEditorService.getWidgets() 34782 .then(function (response) { 34783 vm.widgets = response.data; // All widgets available 34784 // Display only widgets available 34785 vm.widgets = _.filter(vm.widgets, function (widget) { 34786 return widget.available === true 34787 && (!widget.sportId || widget.sportId == $localStorage.solution.sportId) 34788 && (!widget.sportListId || widget.sportListId.length === 0 || widget.sportListId.includes($localStorage.solution.sportId)) 34789 && (!widget.availableKreezeeAdminOnly || (widget.availableKreezeeAdminOnly && $localStorage.__KreezeeSession__.Session.CurrentUser.IsAdminKreezee)) 34790 && (!widget.pageId || widget.pageId.length === 0 || widget.pageId.includes(__pageId__)) 34791 }); 34792 34793 _.forEach(vm.widgets, function (widget) { 34794 switch (widget.group) { 34795 case 'media': 34796 vm.mediaWidgets.push(widget) 34797 break; 34798 case 'general': 34799 vm.generalWidgets.push(widget) 34800 break; 34801 case 'news': 34802 vm.newsWidgets.push(widget) 34803 break; 34804 case 'stats': 34805 vm.statsWidgets.push(widget) 34806 break; 34807 case 'advanced': 34808 vm.advancedWidgets.push(widget); 34809 break; 34810 default: 34811 if (widget.pageId && widget.pageId.includes(__pageId__)) { 34812 vm.specificWidgets.push(widget) 34813 } else { 34814 vm.generalWidgets.push(widget) 34815 } 34816 break; 34817 } 34818 34819 }) 34820 34821 var currentPlan = planService.getPlanFromLocalStorage();
34822 vm.widgets.forEach(function (widget) { 34823 widget.check = checkWidget(widget.id); 34824 widget.text = getName(widget.name); 34825 widget.planLocked = currentPlan.id < widget.planId; 34826 widget.oversized = widget.minwidth > $scope.availableSpace; 34827 widget.planName = planService.getPlanFromId(widget.planId).text; 34828 }); 34829 34830 34831 vm.widgets.sort(function (a, b) { 34832 var nameA = a.text.toLowerCase(); 34833 var nameB = b.text.toLowerCase(); 34834 var planA = a.planId; 34835 var planB = b.planId; 34836 if (nameA <= nameB && planA <= planB) { 34837 return -1; 34838 } 34839 if (nameA >= nameB && planA >= planB) { 34840 return 1; 34841 } 34842 if (nameA <= nameB && planA > planB) { 34843 return 1; 34844 } 34845 if (nameA >= nameB && planA < planB) { 34846 return -1; 34847 } 34848 return 0; 34849 }); 34850 }) 34851 .catch(function (error) { 34852 bugsnag.notify(error); 34853 }); 34854 } 34855 34856 function checkWidget(widgetId) { 34857 for (const [key, entry] of Object.entries(widgets)) { 34858 const widget = angular.fromJson(entry); 34859 if (widget.id === widgetId) { 34860 return true; 34861 } 34862 } 34863 return false; 34864 } 34865 34866 function getName(names) { 34867 return _.find(names, function (name) { 34868 return name.culture === $localStorage.currentLanguage.culture; 34869 }).text; 34870 }; 34871 34872 } 34873})(); 34874; 34875(function () { 34876 'use strict'; 34877 34878 angular 34879 .module('app.directives') 34880 .directive('widgetModal', widgetModal); 34881 34882 widgetModal.$inject = ['$rootScope', '$compile', 'GuidService']; 34883 34884 function widgetModal($rootScope, $compile, guidService) { 34885 return { 34886 restrict: 'E', 34887 scope: { 34888 onAddWidget: '=', 34889 id: '=', 34890 isShown: '=', 34891 modalId: '@', 34892 availableSpace: '=' 34893 }, 34894 templateUrl: 'public/v2/app/core/directives/widget/modal/widget-modal.tpl.html', 34895 controller: 'WidgetModalController', 34896 controllerAs: 'widgetModal', 34897 link: function (scope, element, attribute, controller) { 34898 var vm = controller; 34899 var fromEvent = true; 34900 34901 vm.modalId = scope.modalId; 34902 34903 scope.$watch(function () { return scope.isShown; }, function (newVal) { 34904 fromEvent = false; 34905 if (newVal) { 34906 controller.getWidgets(); 34907 $('[role="dialog"]', element).modal('show'); 34908 } 34909 else { 34910 $('[role="dialog"]', element).modal('hide'); 34911 } 34912 }, true); 34913 34914 $('[role="dialog"]', element).on('show.bs.modal', function () { 34915 if (fromEvent) { 34916 $rootScope.$apply(function () { scope.isShown = true }); 34917 } 34918 fromEvent = true; 34919 }); 34920 $('[role="dialog"]', element).on('hide.bs.modal', function () { 34921 if (fromEvent) { 34922 $rootScope.$apply(function () { scope.isShown = false }); 34923 } 34924 fromEvent = true; 34925 34926 }); 34927 } 34928 }; 34929 } 34930 34931})();; 34932(function () { 34933 'use strict'; 34934 34935 angular 34936 .module('app.directives') 34937 .controller('WidgetZoneController', WidgetZoneController); 34938 34939 WidgetZoneController.$inject = ['$scope', 'WebsiteEditorService', '$translate', '$localStorage', 'PlanService', 'SecurityService']; 34940 34941 function WidgetZoneController($scope, websiteEditorService, $translate, $localStorage, planService, securityService) { 34942 var vm = this; 34943 34944 //State variables 34945 vm.section = $scope.section; 34946 vm.isEditMode = false; 34947 vm.showModal = false; 34948 vm.availableSpace = 0; 34949 vm.widgets = []; 34950 34951 //State functions 34952 // TODO Create utility lib 34953 vm.getModalId = function () { 34954 return `widgetsList-${vm.section}`; 34955 }; 34956 34957 vm.sectionWidth = function() { 34958 for (var row in page.rows) { 34959 var sections = page.rows[row].sections; 34960 34961 for (var section in sections) { 34962 if (sections[section].uuid === vm.section) { 34963 return sections[section].md; 34964 } 34965 } 34966 } 34967 return 0; 34968 } 34969 34970 vm.addWidgetAccess = function () { 34971 return securityService.getAccess().addWidget; 34972 } 34973 34974 vm.showWidgets = function () { 34975 var sections = _.reduce(page.rows, function (result, value) { return result.concat(value.sections) }, []); 34976 var section = _.find(sections, { uuid: vm.section }); 34977 vm.availableSpace = section.md; 34978 vm.showModal = true; 34979 }; 34980 34981 vm.save = function (options) { 34982 websiteEditorService.updatePage(__solutionId__, __pageId__, page, options) 34983 .then(function (response) { 34984 vm.showModal = false; 34985 }) 34986 .catch(function (error) { 34987 bugsnag.notify(error); 34988 }); 34989 }; 34990 34991 //Listeners 34992 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 34993 if (newVal === undefined) return; 34994 vm.isEditMode = newVal; 34995 }, true); 34996 34997 } 34998})(); 34999; 35000(function () { 35001 'use strict'; 35002 35003 angular 35004 .module('app.directives') 35005 .directive('widgetZone', widgetZone); 35006 35007 widgetZone.$inject = ['$compile', 'GuidService']; 35008 35009 function widgetZone($compile, guidService) { 35010 return { 35011 restrict: 'E', 35012 scope: { 35013 section: '=' 35014 }, 35015 templateUrl: 'public/v2/app/core/directives/widget/zone/widget-zone.tpl.html', 35016 controller: 'WidgetZoneController', 35017 controllerAs: 'widgetZone', 35018 link: function (scope, element, attribute, controller) { 35019 var vm = controller; 35020 35021 vm.addWidget = function (widget) { 35022 // Get the section. 35023 var section = angular.element(`#${scope.section}`); 35024 35025 // Find the widget zone component. 35026 var widgetZone = section.find('widget-zone'); 35027 35028 // Get the widget information. 35029 var widget = _.cloneDeep(widget); 35030 35031 // Generate a new widget id. 35032 widget.uuid = guidService.getGuid(); 35033 35034 // Create the widget variable. 35035 widgets[widget.uuid] = angular.toJson(widget); 35036 35037 var newScope = scope.$new(true); 35038 35039 // Compile the new widget directive. 35040 var widgetDOM = $compile(`<widget section="'${scope.section}'" widget="'${widget.uuid}'"></widget>`)(newScope); 35041 35042 // Insert the new widget just before the widget zone component. 35043 widgetZone.before(widgetDOM); 35044 35045 // Update website layout. 35046 addWidgetToSectionLayout(scope.section, widget); 35047 35048 // Save website layout. 35049 vm.save({ uuid: widget.uuid, parameters: [] }); 35050 }; 35051 } 35052 }; 35053 } 35054 35055 function addWidgetToSectionLayout(sectionId, widget) { 35056 for(var row in page.rows) { 35057 var sections = page.rows[row].sections; 35058 35059 for(var section in sections) { 35060 if (sections[section].uuid === sectionId) { 35061 return sections[section].widgets.push(widget); 35062 } 35063 } 35064 } 35065 } 35066})();; 35067(function () { 35068 'use strict'; 35069 35070 angular 35071 .module('app.filters', []) 35072 .config(config); 35073
35074 config.$inject = ['$translatePartialLoaderProvider']; 35075 35076 function config($translatePartialLoaderProvider) { 35077 if (__environment__ !== 'local') { 35078 $translatePartialLoaderProvider.addPart('app'); 35079 35080 } else { 35081 $translatePartialLoaderProvider.addPart('app/core/filters'); 35082 } 35083 } 35084})();; 35085(function () { 35086 'use strict'; 35087 35088 angular 35089 .module('app.filters') 35090 .filter('htmlToText', function() { 35091 return function(html) { 35092 html = String(html).replaceAll('&', '&'); 35093 html = String(html).replaceAll('é', 'é'); 35094 html = String(html).replaceAll('É', 'Ã'); 35095 html = String(html).replaceAll('è', 'è'); 35096 html = String(html).replaceAll('È', 'Ã'); 35097 html = String(html).replaceAll('ê', 'ê'); 35098 html = String(html).replaceAll('Ê', 'Ã'); 35099 html = String(html).replaceAll('ë', 'ë'); 35100 html = String(html).replaceAll('Ë', 'Ã'); 35101 html = String(html).replaceAll('à', 'à '); 35102 html = String(html).replaceAll('À', 'Ã'); 35103 html = String(html).replaceAll('â', 'â'); 35104 html = String(html).replaceAll('Â', 'Ã'); 35105 html = String(html).replaceAll('ô', 'ô'); 35106 html = String(html).replaceAll('Ô', 'Ã'); 35107 html = String(html).replaceAll('î', 'î'); 35108 html = String(html).replaceAll('Î', 'Ã'); 35109 html = String(html).replaceAll('ï', 'ï'); 35110 html = String(html).replaceAll('Ï', 'Ã'); 35111 html = String(html).replaceAll('ù', 'ù'); 35112 html = String(html).replaceAll('Ù', 'Ã'); 35113 html = String(html).replaceAll('û', 'û'); 35114 html = String(html).replaceAll('Û', 'Ã'); 35115 html = String(html).replaceAll('ü', 'ü'); 35116 html = String(html).replaceAll('Ü', 'Ã'); 35117 html = String(html).replaceAll('ÿ', 'ÿ'); 35118 html = String(html).replaceAll('ç', 'ç'); 35119 html = String(html).replaceAll('Ç', 'Ã'); 35120 html = String(html).replaceAll('’', 'â'); 35121 html = String(html).replaceAll(' ', ' '); 35122 html = String(html).replaceAll('–', 'â'); 35123 html = String(html).replaceAll(''', '\''); 35124 35125 return html ? String(html).replace(/<[^>]+>/gm, ' ') : ''; 35126 }; 35127 }); 35128})();; 35129(function () { 35130 'use strict'; 35131 35132 angular 35133 .module('app.filters') 35134 .filter('ordinal', ordinal); 35135 35136 ordinal.$inject = ['$translate']; 35137 35138 function ordinal($translate) { 35139 return function(number, feminine) { 35140 if (isNaN(number) || number < 1) { 35141 return number; 35142 } 35143 else if (number == 1) { 35144 return feminine 35145 ? `${number}${$translate.instant('filters.ordinal.labels.firstFeminine')}` 35146 : `${number}${$translate.instant('filters.ordinal.labels.first')}`; 35147 } 35148 else { 35149 var lastDigit = number % 10; 35150 var last2Digit = number % 100; 35151 if (last2Digit != 11 && last2Digit != 12 && last2Digit != 13 && lastDigit === 1){ 35152 return `${number}${$translate.instant('filters.ordinal.labels.st')}`; 35153 } else if (last2Digit != 11 && last2Digit != 12 && last2Digit != 13 && lastDigit === 2){ 35154 return `${number}${$translate.instant('filters.ordinal.labels.nd')}`; 35155 } else if (last2Digit != 11 && last2Digit != 12 && last2Digit != 13 && lastDigit === 3){ 35156 return `${number}${$translate.instant('filters.ordinal.labels.rd')}`; 35157 } else { 35158 return `${number}${$translate.instant('filters.ordinal.labels.th')}`; 35159 } 35160 } 35161 }; 35162 } 35163})();; 35164(function () { 35165 'use strict'; 35166 35167 angular 35168 .module('app.filters') 35169 .filter('time', time); 35170 35171 time.$inject = ['$translate']; 35172 35173 function time() { 35174 return function(time) { 35175 return time.slice(-5); 35176 }; 35177 } 35178})();; 35179(function () { 35180 'use strict'; 35181 35182 angular 35183 .module('app.layout', []) 35184 .config(config); 35185
35186 config.$inject = ['$translatePartialLoaderProvider']; 35187 35188 function config($translatePartialLoaderProvider) { 35189 if (__environment__ !== 'local') { 35190 $translatePartialLoaderProvider.addPart('app'); 35191 35192 } else { 35193 $translatePartialLoaderProvider.addPart('app/core/layout/toolbar'); 35194 $translatePartialLoaderProvider.addPart('app/core/layout/topbar'); 35195 $translatePartialLoaderProvider.addPart('app/core/layout/top'); 35196 } 35197 } 35198})();; 35199(function () { 35200 'use strict'; 35201 35202 angular 35203 .module('app.layout') 35204 .controller('FooterLayoutController', FooterLayoutController); 35205 35206 FooterLayoutController.$inject = ['$rootScope', '$scope']; 35207 35208 function FooterLayoutController($rootScope, $scope) { 35209 var vm = this; 35210 35211 vm.fullYear = new Date().getFullYear(); 35212 35213 /*$scope.$watch(function () { return globalServcie.getWebsiteMode(); }, function (newVal) { 35214 if (newVal === undefined) return; 35215 vm.nbItems = newVal; 35216 }, true);*/ 35217 } 35218})();; 35219(function () { 35220 'use strict'; 35221 35222 angular 35223 .module('app.layout') 35224 .directive('footerLayout', FooterLayout) 35225 35226 FooterLayout.$inject = []; 35227 35228 function FooterLayout() { 35229 return { 35230 restrict: 'E', 35231 scope: { 35232 35233 }, 35234 templateUrl: `/public/v2/app/themes/${__theme__}/layout/footer-layout.tpl.html`, 35235 controller: 'FooterLayoutController', 35236 controllerAs: 'footerLayout' 35237 }; 35238 } 35239})();; 35240(function () { 35241 'use strict'; 35242 35243 angular 35244 .module('app.layout') 35245 .controller('ToolbarLayoutController', ToolbarLayoutController); 35246 35247 ToolbarLayoutController.$inject = ['$scope', '$translate', '$localStorage', 'GoogleWebFontsService', 'WebsiteEditorService', 'TranslationService']; 35248 35249 function ToolbarLayoutController($scope, $translate, $localStorage, googleWebFontsService, websiteEditorService, translationService) { 35250 var vm = this; 35251 var start = null; 35252 35253 vm.isAuthenticated = angular.isDefined($localStorage.__KreezeeSession__); 35254 vm.isEditMode = websiteEditorService.isEditMode; 35255 // Get solution name & abbreviation. 35256 vm.solutionName = __solutionName__; 35257 vm.solutionAbbreviation = __solutionAbbreviation__; 35258 35259 vm.translation = translationService; 35260 35261 // Apply website values to view model object. 35262 Object.assign(vm, angular.fromJson(website)); 35263 35264 // Filter displayed items. 35265 vm.menu = { 35266 items: _.filter(vm.toolbar.menu.items, function (item) { 35267 if (item) { 35268 return item.visible; 35269 } 35270 return false; 35271 }) 35272 }; 35273 35274 // Handling menu overflow 35275 vm.isOverflow = false; 35276 vm.overflow = { 35277 items: [] 35278 }; 35279 35280 vm.disabledMenuBar = vm.toolbar.menu.disabled !== undefined ? vm.toolbar.menu.disabled : false; 35281 vm.overlayMenuBar = function () { 35282 return page.rows[0].alignToTop; 35283 }; 35284 35285 vm.submit = false; 35286 vm.webFonts = []; 35287 vm.webFont = ''; 35288 vm.selectedWebFont = getCssVariable('--toolbar-font-family'); 35289 vm.webFontVariants = []; 35290 vm.webFontCategory = ''; 35291 vm.selectedWebFontVariant = 'regular'; 35292 35293 // todo get value from variable, directive method 35294 35295 // Background colors 35296 vm.backgroundColorGradient = vm.toolbar.background.gradient != null && vm.toolbar.background.gradient.colors.length > 0; 35297 vm.backgroundColor1 = vm.toolbar.background.color; 35298 vm.backgroundColor2 = vm.backgroundColorGradient ? vm.toolbar.background.gradient.colors[1] : null; 35299 35300 vm.menuItemColor = getCssVariable('--toolbar-color'); 35301 vm.menuItemActiveBackgroundColor = getCssVariable('--toolbar-menu-item-active-background-color'); 35302 vm.menuItemActiveColor = getCssVariable('--toolbar-menu-item-active-color'); 35303 35304 vm.showSolutionName = vm.toolbar.mobile.showName; 35305 35306 vm.borders = vm.toolbar.innerBorder !== null || vm.toolbar.outerBorder !== null; 35307 35308 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (editMode) { 35309 if (editMode === undefined) return; 35310 vm.isEditMode = editMode; 35311 }, true); 35312 35313 $scope.$watch(function () { return website.toolbar.mobile.showName }, function (value) { 35314 vm.showSolutionName = value; 35315 }) 35316 35317 $scope.$on('update-menu', function (event, data) { 35318 vm.disabledMenuBar = vm.toolbar.menu.disabled !== undefined ? vm.toolbar.menu.disabled : false; 35319 vm.overlayMenuBar = vm.toolbar.menu.overlay || false; 35320 vm.menu.items = _.filter(vm.toolbar.menu.items, function (item) { 35321 return item.visible; 35322 }); 35323 }) 35324 35325 $scope.$on('update-menu-colors', function (event, data) { 35326 if (vm.toolbar.background.gradient) { 35327 vm.backgroundColorGradient = true; 35328 vm.backgroundColor1 = vm.toolbar.background.gradient.colors[0]; 35329 vm.backgroundColor2 = vm.toolbar.background.gradient.colors[1]; 35330 } 35331 else { 35332 vm.backgroundColorGradient = false; 35333 } 35334 35335 vm.menuItemColor = vm.toolbar.color;
35336 vm.menuItemActiveBackgroundColor = vm.toolbar.menu.active.background.color; 35337 vm.menuItemActiveColor = vm.toolbar.menu.active.color; 35338 35339 vm.setToolbarHeight(); 35340 vm.setBorders(); 35341 vm.setBackgroundColor(); 35342 vm.setMenuItemColor(); 35343 35344 vm.setFont(vm.toolbar.font); 35345 }); 35346 35347 vm.getName = function (menuItem) { 35348 return angular.isDefined(menuItem.type) 35349 ? _.find(menuItem.name, function (name) { return name.culture === 'fr-CA'; }).text 35350 : $translate.instant(menuItem.name); 35351 }; 35352 35353 vm.getUrl = function (menuItem) { 35354 return angular.isDefined(menuItem.type) 35355 ? _.find(menuItem.name, function (name) { return name.culture === 'fr-CA'; }).url 35356 : $translate.instant(menuItem.url); 35357 }; 35358 35359 vm.showToolbarSettings = function () { 35360 // TODO Move API Key in web.config. 35361 googleWebFontsService.getWebFonts('alpha') 35362 .then(function (response) { 35363 vm.webFonts.push.apply(vm.webFonts, response.data.items); // All Google web fonts 35364 35365 $('#toolbarSettings').modal('show'); 35366 }) 35367 .catch(function (error) { 35368 bugsnag.notify(error); 35369 }); 35370 }; 35371 35372 vm.getWebFontVariants = function () { 35373 vm.webFont = _.find(vm.webFonts, function (webfont) { 35374 return vm.selectedWebFont === webfont.family; 35375 }); 35376 35377 // Reinitialise the variant selected. 35378 vm.selectedWebFontVariant = 'regular'; 35379 35380 // Update (override) the current Google Web Font. 35381 // TODO Support weight change 35382 vm.googleWebFontsUrl = `https://fonts.googleapis.com/css?family=${vm.webFont.family}`; //:900`; 35383 35384 vm.webFontCategory = getCategory(vm.webFont.category); 35385 35386 // Update the toolbar font family. 35387 $scope.updateToolbar('--toolbar-font-family', `\'${vm.webFont.family}\', ${vm.toolbar.font.fallback} ${vm.webFontCategory}`); 35388 35389 // All Google web font variations available. 35390 vm.webFontVariants = vm.webFont.variants; 35391 }; 35392 35393 vm.loadedFonts = {}; 35394 vm.setFont = function (font) { 35395 var fontId = _.camelCase(font.family); 35396 vm.googleWebFontsUrl = `https://fonts.googleapis.com/css?family=${font.family}`; //:900`; 35397 35398 if ($(`#${fontId}`).length == 0) { 35399 let link = document.createElement('link'); 35400 link.type = 'text/css'; 35401 link.rel = 'stylesheet'; 35402 link.onload = function () { 35403 vm.loadedFonts[fontId] = font.family; 35404 $scope.updateToolbar('--toolbar-font-family', `\'${font.family}\', ${font.fallback} ${font.type}`); 35405 }; 35406 link.href = vm.googleWebFontsUrl; 35407 link.id = fontId; 35408 35409 $('head').append(link); 35410 } 35411 else if(vm.loadedFonts[fontId]) { 35412 $scope.updateToolbar('--toolbar-font-family', `\'${font.family}\', ${font.fallback} ${font.type}`); 35413 } 35414 35415 $scope.updateToolbar('--toolbar-font-size', `${vm.toolbar.font.size}px`); 35416 $scope.updateToolbar('--toolbar-font-weight', `${vm.toolbar.font.weight}`); 35417 } 35418 35419 vm.edit = function () { 35420 websiteEditorService.validateAuthorization() 35421 .then(function () { 35422 websiteEditorService.editMode(true); 35423 }) 35424 .catch(function (error) { 35425 bugsnag.notify(error); 35426 }) 35427 }; 35428 35429 vm.stopEditing = function () { 35430 websiteEditorService.editMode(false); 35431 }; 35432 35433 35434 vm.setWebFontVariant = function() { 35435 // TODO Update Google url. 35436
35437 $scope.updateToolbar('--toolbar-font-weight', vm.selectedWebFontVariant); 35438 }; 35439 35440 vm.formatWebFontVariant = function(value) { 35441 var numberPattern = /\d+/g; 35442 var stylePattern = /[a-z]+/g; 35443 var weight = value.match(numberPattern); 35444 var style = value.match(stylePattern); 35445 35446 if (((weight !== null) && (weight.length > 0)) && 35447 ((style !== null) && (style.length > 0))) { 35448 return `${weight[0]} ${style[0]}`; 35449 35450 } else if (((weight !== null) && (weight.length > 0)) && (style === null)) { 35451 return `${weight[0]}`; 35452 35453 } else if ((weight === null) && ((style !== null) && (style.length > 0))) { 35454 return `${style[0]}`; 35455 } 35456 } 35457 35458 vm.setBackgroundColor = function () { 35459 if (!vm.backgroundColorGradient) { 35460 $scope.updateToolbar('--toolbar-background-color', vm.toolbar.background.color); 35461 $scope.updateToolbar('--toolbar-background-image', 'initial'); 35462 } else { 35463 $scope.updateToolbar('--toolbar-background-image', `linear-gradient(${vm.toolbar.background.gradient.angle}deg, ${vm.backgroundColor1}, ${vm.backgroundColor2})`); 35464 } 35465 }; 35466 35467 vm.setMenuItemColor = function() { 35468 $scope.updateToolbar('--toolbar-color', vm.menuItemColor); 35469 $scope.updateToolbar('--toolbar-menu-item-active-background-color', vm.menuItemActiveBackgroundColor); 35470 $scope.updateToolbar('--toolbar-menu-item-active-color', vm.menuItemActiveColor); 35471 }; 35472 35473 vm.checkBorders = function() { 35474 if (!vm.borders) { 35475 vm.toolbar.innerBorder = null; 35476 vm.toolbar.outerBorder = null; 35477 35478 $scope.updateToolbar('--toolbar-inner-border-color', 'initial'); 35479 $scope.updateToolbar('--toolbar-inner-border-height', 'initial'); 35480 $scope.updateToolbar('--toolbar-outer-border-color', 'initial'); 35481 $scope.updateToolbar('--toolbar-outer-border-height', 'initial'); 35482 35483 } else { 35484 vm.toolbar.innerBorder = website.toolbar.innerBorder; 35485 vm.toolbar.outerBorder = website.toolbar.outerBorder; 35486 } 35487 }; 35488 35489 vm.setToolbarHeight = function () { 35490 $scope.updateToolbar('--toolbar-height', `${vm.toolbar.height}px`); 35491 } 35492 35493 vm.setBorders = function () { 35494 $scope.updateToolbar('--toolbar-inner-border-color', vm.toolbar.innerBorder.color); 35495 $scope.updateToolbar('--toolbar-inner-border-height', `${vm.toolbar.innerBorder.height}px`); 35496 $scope.updateToolbar('--toolbar-outer-border-color', vm.toolbar.outerBorder.color); 35497 $scope.updateToolbar('--toolbar-outer-border-height', `${vm.toolbar.outerBorder.height}px`); 35498 } 35499 35500 vm.save = function() { 35501 vm.form.$setSubmitted(); 35502 35503 // Check if the form is valid. 35504 if (vm.form.$valid) { 35505 // Submit on going. 35506 vm.submit = true; 35507 35508 // Update the data. 35509 website.toolbar.font.size = vm.toolbar.font.size; 35510 35511 website.toolbar.background.color = vm.toolbar.background.color; 35512 website.toolbar.background.gradient = vm.backgroundColorGradient 35513 ? { angle: 180, colors: [vm.backgroundColor1, vm.backgroundColor2] } 35514 : null; 35515 35516 // Save the data. 35517 websiteEditorService.updateWebsite(__solutionId__, website) 35518 .then(function(response) { 35519 $('#toolbarSettings').modal('hide'); 35520 }) 35521 .catch(function(error) { 35522 bugsnag.notify(error); 35523 }); 35524 } 35525 }; 35526 35527 function getCssVariable(variable) { 35528 switch (variable) { 35529 case '--toolbar-font-family': 35530 var fontFamily = getComputedStyle(document.documentElement).getPropertyValue('--toolbar-font-family').split(','); 35531 return fontFamily[0].replace(/["' ]/g, ''); 35532 35533 default: 35534 return getComputedStyle(document.documentElement).getPropertyValue(variable).trim(); 35535 } 35536 } 35537 35538 function getCategory(category) { 35539 switch (category) { 35540 case 'serif': 35541 case 'sans-serif': 35542 case 'monospace': 35543 return category; 35544 35545 case 'display': 35546 case 'handwriting': 35547 return 'cursive'; 35548 } 35549 } 35550 } 35551})();; 35552(function () { 35553 'use strict'; 35554 35555 angular 35556 .module('app.layout') 35557 .directive('toolbarLayout', ToolbarLayout) 35558 35559 ToolbarLayout.$inject = ['$window', '$timeout', '$log']; 35560 35561 function ToolbarLayout($window, $timeout, $log) { 35562 return { 35563 restrict: 'E', 35564 scope: { 35565 35566 }, 35567 replace: true, 35568 templateUrl: 'public/v2/app/core/layout/toolbar/toolbar-layout.tpl.html', 35569 controller: 'ToolbarLayoutController', 35570 controllerAs: 'toolbarLayout', 35571 link : function(scope, element, attribute, controller) { 35572 var vm = controller; 35573 35574 angular.element('.collapse').on('show.bs.collapse', function() { 35575 element.find('.hamburger').addClass('is-active'); 35576 }); 35577 35578 angular.element('.collapse').on('hide.bs.collapse', function() { 35579 element.find('.hamburger').removeClass('is-active'); 35580 }); 35581 35582 $timeout(function() { 35583 // TODO Add class to identified the real from the preview... 35584 var toolbar = angular.element('.navbar-collapse')[0]; 35585 var toolbarItems = $(toolbar).find('.nav-link'); 35586 var maxWidth = angular.element('.container')[0].offsetWidth - 60; 35587 35588 if (maxWidth > 0) { 35589 var toolbarItemsWidth = 0; 35590 for(var toolbarItem in toolbarItems) { 35591 var toolbarItemIndex = parseInt(toolbarItem, 10); 35592 35593 if (toolbarItemIndex >= 0) { 35594 toolbarItemsWidth += toolbarItems[toolbarItemIndex].clientWidth; 35595 35596 // Check if the toolbar overflow. 35597 if (toolbarItemsWidth > maxWidth) { 35598 // Set overflow flag at true. 35599 vm.isOverflow = true; 35600 35601 // Remove overflow items from toolbar. 35602 var overflowItems = vm.menu.items.slice(toolbarItemIndex, vm.menu.items.length); 35603 vm.menu.items.splice(toolbarItemIndex, vm.menu.items.length - toolbarItemIndex); 35604 35605 // Add overflow elements to dropdown menu. 35606 vm.overflow.items = overflowItems; 35607 break; 35608 } 35609 } 35610 } 35611 } 35612 }, 200); 35613 35614 angular.element($window).bind('resize', function(){ 35615 // TODO recalculate overflow. 35616 $log.debug('resize'); 35617 35618 // manuall $digest required as resize event 35619 // is outside of angular 35620 scope.$digest(); 35621 }); 35622 35623 scope.updateToolbar = function (cssVariable, value) { 35624 document.documentElement.style.setProperty(cssVariable, value); 35625 } 35626 } 35627 }; 35628 } 35629})();; 35630(function () { 35631 'use strict'; 35632 35633 angular 35634 .module('app.layout') 35635 .controller('ToolbarDesktopController', ToolbarDesktopController); 35636 35637 ToolbarDesktopController.$inject = ['$scope', 'TranslationService']; 35638 35639 function ToolbarDesktopController($scope, translationService) { 35640 var vm = this; 35641 vm.translation = translationService; 35642 vm.items = $scope.items; 35643 vm.overflow = { 35644 items: [] 35645 } 35646 vm.moreMenu = false; 35647 vm.clickedKey = undefined; 35648 35649 vm.clickMoreMenu = function () { 35650 if ($scope.isHover) { 35651 return; 35652 } 35653 vm.moreMenu = !vm.moreMenu; 35654 vm.clickedKey = undefined; 35655 } 35656 35657 vm.clickItem = function (item, resetMoreMenu) { 35658 if ($scope.isHover) { 35659 return; 35660 } 35661 if (resetMoreMenu) { 35662 vm.moreMenu = false; 35663 } 35664 35665 var clickedOnActiveItem = false; 35666 if (vm.clickedKey == item['$$hashKey'] || hasChildWithKey(item)) { 35667 clickedOnActiveItem = true; 35668 } 35669 35670 if (clickedOnActiveItem) { 35671 vm.clickedKey = getParentKey(item['$$hashKey'], { $$hashKey: undefined, items: $scope.items }); 35672 } else { 35673 vm.clickedKey = item['$$hashKey']; 35674 } 35675 } 35676 35677 vm.getLiClass = function (item) { 35678 if ($scope.isHover) { 35679 return false; 35680 } 35681 if (vm.clickedKey == item['$$hashKey'] || hasChildWithKey(item)) { 35682 return { 'li-active': true }; 35683 } 35684 return false; 35685 } 35686 35687 vm.getUlClass = function (item) { 35688 if ($scope.isHover) { 35689 return { 'hover-trigger': true, 'show-ul': false }; 35690 } 35691 if (vm.clickedKey == item['$$hashKey'] || hasChildWithKey(item)) { 35692 return { 'show-ul': true, 'hover-trigger': false }; 35693 } 35694 return false; 35695 } 35696 35697 vm.getToolbarClass = function() { 35698 if ($scope.alignment === 'center' && (!vm.overflow.items || vm.overflow.items.length === 0)) { 35699 return { 'd-lg-flex justify-content-center': true }; 35700 } 35701 return { 'd-lg-block': true }; 35702 } 35703 35704 function getParentKey(key, item) { 35705 if (item) { 35706 var items = item.items; 35707 if (items && items.length > 0) { 35708 for (let i = 0; i < items.length; i++) { 35709 if (items[i]['$$hashKey'] == key) { 35710 return item['$$hashKey']; 35711 } else { 35712 const thekey = getParentKey(key, items[i]); 35713 if (thekey) { 35714 return thekey; 35715 } 35716 } 35717 } 35718 } 35719 } 35720 return false; 35721 } 35722 35723 function hasChildWithKey(item) { 35724 if (item) { 35725 var items = item.items; 35726 if (items && items.length > 0) { 35727 return items.some(function (menuitem) { 35728 if (menuitem['$$hashKey'] == vm.clickedKey) { 35729 return true; 35730 } else if (hasChildWithKey(menuitem)) { 35731 return true; 35732 } 35733 }) 35734 } 35735 } 35736 return false; 35737 } 35738 } 35739})();; 35740(function () { 35741 'use strict'; 35742 35743 angular 35744 .module('app.layout') 35745 .directive('toolbarDesktop', ToolbarDesktop) 35746 35747 ToolbarDesktop.$inject = ['$window', '$timeout']; 35748 35749 function ToolbarDesktop($window, $timeout) { 35750 return { 35751 restrict: 'E', 35752 scope: { 35753 items: '=', 35754 isHover: '=', 35755 alignment: '=', 35756 logoDisplay: '=', 35757 logoUrl: '=', 35758 logo: '=' 35759 }, 35760 templateUrl: 'public/v2/app/core/layout/toolbar/toolbar-desktop/toolbar-desktop.tpl.html', 35761 controller: 'ToolbarDesktopController', 35762 controllerAs: 'toolbarDesktop', 35763 link: function (scope, element, attribute, controller) { 35764 var vm = controller; 35765 35766 imgLoad(); 35767 35768 /* When scope.items change */ 35769 var initializing = true 35770 scope.$watch('items', function (newValue, oldValue) { 35771 $timeout(function () { 35772 if (initializing) { 35773 initializing = false; 35774 } else { 35775 vm.items = newValue; 35776 vm.overflow.items = []; 35777 vm.moreMenu = false; 35778 vm.clickedKey = undefined; 35779 35780 resizeToolbar(); 35781 35782 } 35783 });
35784 }); 35785 35786 /* When logo change */ 35787 scope.$watch('[logoDisplay, logoUrl]', function (newValue, oldValue) { 35788 $timeout(function () { 35789 resizeToolbar(); 35790 }); 35791 imgLoad(); 35792 }); 35793 35794 /* Resize toolbar when img finished loading */ 35795 function imgLoad() { 35796 $timeout(function () { 35797 if (scope.logoUrl && (scope.logoDisplay === 'toolbar' || scope.logoDisplay === 'bannerandlogo')) { 35798 $('.toolbar-desktop-logo > img').on('load', function () { 35799 resizeToolbar(); 35800 }); 35801 } 35802 }); 35803 } 35804 35805 /* When container width change */ 35806 scope.$watch(function () { 35807 return angular.element('.container')[0].offsetWidth; 35808 }, function () { 35809 $timeout(function () { 35810 resizeToolbar(); 35811 }); 35812 }); 35813 35814 /* When clicking outside the menu, hide it */ 35815 $(angular.element($window.document)).mouseup(function (e) { 35816 var container = $(".top-level-menu > li"); 35817 if (!container.is(e.target) && container.has(e.target).length === 0) { 35818 vm.clickedKey = undefined; 35819 vm.moreMenu = false; 35820 scope.$digest(); 35821 } 35822 }); 35823 35824 /* Resize toolbar function */ 35825 function resizeToolbar() { 35826 var allitems = vm.items.concat(vm.overflow.items); 35827 vm.items = allitems; 35828 vm.overflow.items = []; 35829 scope.$digest(); 35830 35831 var toolbar = angular.element('.navbar-desktop')[0]; 35832 var toolbarItems = $(toolbar).find('.navbar-desktop-item'); 35833 var maxWidth = angular.element('.container.navbar-desktop ')[0].offsetWidth - 80; 35834 35835 if (maxWidth > 0) { 35836 var toolbarItemsWidth = 0; 35837 if (scope.logoUrl && (scope.logoDisplay === 'toolbar' || scope.logoDisplay === 'bannerandlogo')) { 35838 toolbarItemsWidth = angular.element('.toolbar-desktop-logo')[0].offsetWidth; //start at width of logo if any 35839 } 35840 35841 for (var toolbarItem in toolbarItems) { 35842 var toolbarItemIndex = parseInt(toolbarItem, 10); 35843 35844 if (toolbarItemIndex >= 0) { 35845 toolbarItemsWidth += toolbarItems[toolbarItemIndex].clientWidth; 35846 35847 if (toolbarItemsWidth > maxWidth) { 35848 var overflowItems = allitems.slice(toolbarItemIndex, allitems.length); 35849 allitems.splice(toolbarItemIndex, allitems.length - toolbarItemIndex); 35850 35851 vm.overflow.items = overflowItems; 35852 vm.items = allitems; 35853 break; 35854 } 35855 } 35856 } 35857 } 35858 35859 scope.$digest(); 35860 } 35861 } 35862 }; 35863 } 35864})();; 35865(function () { 35866 'use strict'; 35867 35868 angular 35869 .module('app.layout') 35870 .controller('TopLayoutController', TopLayoutController); 35871 35872 TopLayoutController.$inject = ['$rootScope', '$scope']; 35873 35874 function TopLayoutController($rootScope, $scope) { 35875 var vm = this; 35876 35877 } 35878})(); 35879; 35880(function () { 35881 'use strict'; 35882 35883 angular 35884 .module('app.layout') 35885 .directive('topLayout', TopLayout) 35886 35887 TopLayout.$inject = []; 35888 35889 function TopLayout() { 35890 return { 35891 restrict: 'E', 35892 scope: { 35893 35894 }, 35895 templateUrl: `/public/v2/app/themes/${__theme__}/layout/top-layout.tpl.html`, 35896 controller: 'TopLayoutController', 35897 controllerAs: 'topLayout' 35898 }; 35899 } 35900})();; 35901(function () { 35902 'use strict'; 35903 35904 angular 35905 .module('app.layout') 35906 .controller('TopbarLayoutController', TopbarLayoutController); 35907 35908 TopbarLayoutController.$inject = ['$scope', '$rootScope', '$localStorage', 'WebsiteEditorService', 'AuthenticationService']; 35909 35910 function TopbarLayoutController($scope, $rootScope, $localStorage, websiteEditorService, authenticationService) { 35911 var vm = this; 35912 vm.isAuthenticated = angular.isDefined($localStorage.__KreezeeSession__); 35913 vm.widget = angular.fromJson(widgets[$scope.widget]); 35914 vm.theme = __theme__; 35915 vm.showLogo = vm.theme === "default" || vm.theme === "no-kreezee-gamebar"; 35916 vm.defaultBar = { 35917 'activateShadows': false, 35918 'backgroundColor': '#222222', 35919 'backgroundColor1': '#0055FF', 35920 'backgroundColor2': '#000000', 35921 'backgroundGradient': false, 35922 'backgroundTransparent': false, 35923 'borderBottomColor': '#000', 35924 'borderBottomWidth': 0, 35925 'height': 60, 35926 'hyperlink': '', 35927 'hyperlinkColor': '#FFF', 35928 'hyperlinkFontSize': 18, 35929 'hyperlinkText': '', 35930 'showHeaderBar': true, 35931 'showHyperlink': false, 35932 'textColor': '#FFF', 35933 'selectedTextColor':'#0864ae', 35934 'resetParams': false, 35935 'fullWidth': false 35936 } 35937 35938 if (vm.isAuthenticated) { 35939 // Get user account information. 35940 vm.account = { 35941 name: `${$localStorage.__KreezeeSession__.Session.CurrentUser.FirstName} ${$localStorage.__KreezeeSession__.Session.CurrentUser.LastName}` 35942 }; 35943 } 35944 35945 $scope.$watch(function () { return websiteEditorService.isEditMode(); }, function (newVal) { 35946 if (angular.isUndefined(newVal)) return; 35947 35948 vm.isEditMode = newVal; 35949 }, true); 35950 35951 vm.edit = function () { 35952 websiteEditorService.validateAuthorization() 35953 .then(function () { 35954 websiteEditorService.editMode(true); 35955 }) 35956 .catch(function (error) { 35957 bugsnag.notify(error); 35958 }) 35959 }; 35960 35961 vm.stopEditing = function () { 35962 websiteEditorService.editMode(false); 35963 }; 35964 35965 vm.logout = function () { 35966 var sessionToken = $localStorage.__KreezeeSession__; 35967 $localStorage.__KreezeeSession__ = undefined; 35968 authenticationService.logout(sessionToken) 35969 .then(function () { 35970 window.location.href = "/"; 35971 }) 35972 .catch(function (error) { 35973 bugsnag.notify(error); 35974 window.location.href = "/"; 35975 }) 35976 } 35977 35978 //On component mount
35979 for (var parameter in vm.widget.parameters) { 35980 switch (vm.widget.parameters[parameter].id) { 35981 case 'headerBarCustomization': 35982 vm.customization = angular.fromJson(vm.widget.parameters[parameter].value.replace(/\'/g, '"')); 35983 if (vm.customization.backgroundTransparent) { 35984 vm.customization['borderBottomWidth'] = 0 35985 } 35986 break; 35987 } 35988 } 35989 35990 //Listener 35991 var listener = $rootScope.$on(`onParametersChange-${$scope.widget}`, function (event, data) { 35992 for (var parameter in vm.widget.parameters) { 35993 switch (vm.widget.parameters[parameter].id) { 35994 case 'headerBarCustomization': 35995 vm.widget.parameters[parameter].value = data.headerBarCustomization; 35996 vm.customization = angular.fromJson(data.headerBarCustomization.replace(/\'/g, '"')); 35997 if (vm.customization.backgroundTransparent) { 35998 vm.customization['borderBottomWidth'] = 0 35999 } 36000 if (vm.customization.resetParams) { 36001 vm.customization = vm.defaultBar 36002 vm.widget.parameters[parameter].value = angular.toJson(vm.defaultBar).replace(/\"/g, "'") 36003 } 36004 break; 36005 } 36006 } 36007 const index = _.findIndex(website.widgets, function (widget) { 36008 return widget.id === vm.widget.id; 36009 }); 36010 website.widgets[index] = vm.widget; 36011 websiteEditorService.updateWebsite(__solutionId__, website) 36012 .then(function () { 36013 widgets[$scope.widget] = angular.toJson(vm.widget); 36014 }) 36015 .catch(function (error) { 36016 bugsnag.notify(error); 36017 }); 36018 }); 36019 36020 $scope.$on('$destroy', listener); 36021 } 36022})(); 36023; 36024(function () { 36025 'use strict'; 36026 36027 angular 36028 .module('app.layout') 36029 .directive('topbarLayout', TopbarLayout) 36030 36031 TopbarLayout.$inject = []; 36032 36033 function TopbarLayout() { 36034 return { 36035 restrict: 'E', 36036 scope: { 36037 widget: '=' 36038 }, 36039 templateUrl: `/public/v2/app/core/layout/topbar/topbar-layout.tpl.html`, 36040 controller: 'TopbarLayoutController', 36041 controllerAs: 'topbarLayout' 36042 }; 36043 } 36044})();;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.