{"version":3,"sources":["foundation.min.js"],"names":["factory","angular","module","directive","templateUrl","controller","transclude","link","$scope","oneAtATime","groups","items","addItem","newItemNo","length","push","restrict","replace","scope","gaugeList","outGaugeItem","selectGaugeAction","element","attrs","gaugeListItems","copy","selectGauge","event","selectedItem","forEach","item","gaugeActive","$event","selectedGaugeItem","$timeout","$datepicker","$dateFormatter","$dateParser","$filter","$document","openDatepickerPopup","lastClickedDatepicker","defaults","extend","dateFormat","strictFormat","labelInput","id","placement","placeholder","container","labelNext","labelPrevious","labelMonth","labelYear","labelDays","dateType","timezone","modelDateFormat","ariaLabelInput","showCultureFormat","ngModelDate","required","disabled","readonly","readonlyText","onDateSelection","require","pre","attr","controllers","datePickerElement","toggleButton","find","on","datepickers","document","querySelectorAll","datepicker","popup","querySelector","contains","target","click","e","isSameButton","toggle","stopPropagation","$apply","options","lang","getDefaultLocale","key","isDefined","dateParser","format","strict","inputId","alertSpanId","pickerId","spanId","ngModel","name","inputName","$format","textboxPlaceholder","placeholderdate","Date","placeholderdateFormat","moment","toUpperCase","btn","$observe","newValue","getDateForAttribute","post","dateSelected","$","$watch","oldValue","dateInvalid","inputBlur","clearAlert","dateInputAlert","setAlert","error","this","minDate","maxDate","toDateString","alertValuesObject","field_name","minimum_date","maximum_date","dateString","val","date","parse","isNaN","getTime","dropdown","text","href","divider","root","clawModule","$log","$theme","ctrl","completedActivities","tableDisplayContent","ispreview","theme","parent","offsetWidth","autoDraw","clawVisible","canvas","transclusion","selectedChartViewType","responsive","chartWidth","parseInt","css","style","cursor","ctx","getContext","elements","arcs","capabilities","selectedGap","categoryName","selectedCapability","cX","clawWidth","width","height","qtrC","Math","PI","toolTip","tipCtx","curPerc","radius","min","inc","competencyWidth","gapRoom","labelStyle","gapRoomPercent","legendWidth","ie_ver","iev","ieold","test","navigator","userAgent","trident","match","rv","indexOf","Number","RegExp","$1","appVersion","canvasClick","arcClick","mouse","getMousePos","x","y","debug","data","$digest","capability","arc","defineArc","isPointInPath","categoryKey","isPointInStroke","getColor","color","configuration","clawBtnClick","acquiredProficiency","requiredProficiency","evt","rect","getBoundingClientRect","clientX","left","clientY","top","canvasToolTip","tipWidth","tipTxt","hit","substring","measureText","percent","clearRect","fillStyle","font","fillText","round","mousemove","drawArc","arcLength","textLength","txtAngle","radi","i","arcRadians","save","beginPath","lineWidth","strokeStyle","stroke","translate","rotate","restore","arcObject","cx","cy","start","end","inverseMin","apply","buildHeaders","fill","textAlign","capabilityObject","buildGaps","barStart","barWidth","localGapRoom","txtLabel","txtLength","txtPercentLength","txtValLength","j","gapCount","undefined","gapObject","closePath","drawClaw","fillRect","moveTo","lineTo","window","resize","redraw","toggleChartViewType","newVal","oldVal","$on","displayFullText","behaviors","learningData","skills","$translate","clawConfig","headerName","filterComplete","showDetails","activityActionBtnClick","action","activityId","$emit","$items","index","newItem","Object","assign","actions","Key","legendColors","legendColorLabels","then","translations","config","map","tuple","$config","template","buttonText","expandText","iconClass","expandIconClass","showMore","useClickExpand","retArgs","originalText","ellipsisText","originalMaxHeight","ellipsisExpanded","containerElement","currentValue","ellipsisElements","handleClickEvent","collapseText","collapseIconClass","$eval","descValue","expandableText","tempElement","clone","insertBefore","position","visibility","zindex","curText","max-width","max-height","remove","useAutoResize","$SumtUI","EllipsisResizeTimeout","clearTimeout","setTimeout","EllipsisElements","applyEllipsis","which","ngEnter","preventDefault","validatedName","validatedLabel","controlData","getFormGroupClass","invalid","dirty","valid","define","amd","MultiTransclude","elem","transcludeFn","cloneEl","attributes","destinationId","value","destination","append","provider","ariaLevel","ariaRelevant","ariaAtomic","ariaLabeledBy","ariaDescribedBy","$get","$window","$rootScope","LiveRegionFactory","_curMessage","_translations","$sumtliveregion","_queue","_translationKeys","create","msg","message","queue","show","splice","curMessage","ngTableEvent","ngTableParams","sorting","orderBy","sortName","filter","slice","caption","tableCaption","sortDirection","that","showNext","$inject","sumtliveregion","$leftNavs","header","navData","selectedNavData","nodeClicked","imageclicked","persondata","emulation","exitemulation","switchdomain","translationobject","leftNavsProvider","contentTemplateUrl","asideScope","$new","title","asideOptions","backdrop","html","animation","keyboard","addLeftNavigation","leftNavigationObject","getLeftNavigation","navigateToAdmin","node","close","handleNodes","handleNodeSelected","RPKey","childNodes","_closeCurrent","_currentKey","_navigationsHash","leftNavAside","hide","isShown","_previousKey","_toggleNavigation","state","focus","_addNavigation","scopedObject","showLimit","toggleLimit","appended","onClose","$aside","$injector","navigationsHash","open","targetSource","isKeyboardEvent","keyCode","onCloseCallback","currentTarget","trigger","getPreviousKey","t","a","$interval","pagination","notifications","selected","pages","currentPage","timer","isTimed","interval","startTimer","paginate","delay","getPages","Array","setPage","idx","getClass","type","addNotifSection","cancel","titleAll","tabpanelId","getFilterField","afterFiltering","showFilters","unfiltered","modalityIds","modalityList","modalityData","modalityDataList","getModalFilterValues","modality","modalityId","ModalityId","showAll","isFiltered","currentlySelectedFilter","MODALFILTER_ALL","filterData","filteredData","filterExists","MODALFILTER_WATCH","directiveId","$id","activity","ModalityList","showCurrentFilter","className","current","next","prevAll","last","previous","prev","nextAll","off","$showAll","themeTemplate","ThemeKey","Name","ClientJSON","colors","axisColor","gridColor","textColor","borderColor","backgroundColor","labelColor","@brand-primary","@brand-success","@brand-info","@brand-warning","@brand-danger","PaletteJSON","primary","palette","currentTheme","rootScope","setCurrentTheme","clonedTheme","propertyName","defaultValue","$broadcast","curTheme","completedCount","ongoingCount","pendingCount","showPercent","filterByStatusBar","instructionContent","additionalHeadingContent","$watchCollection","setSeparators","setProgreessWidth","completedTooltip","tasksCount","ongoingTooltip","pendingTooltip","normalizeCount","normalizedCount","totalCount","progressMetrics","completedPercent","ongoingPercent","pendingPercent","completedNormalized","ongoingNormalized","pendingNormalized","parseFloat","toFixed","totalpercent","maxvalue","max","arrProgressVal","minvalue","normalizeWidth","normalizationFactor","hideEllipsis","contentHeight","parentHeight","statusBarFilter","taskStatus","panels","_","SlideoutOptions","merge","SlideoutOptionsFactory","SlideoutFactory","$slideout","Slideout","hasTemplate","$options","closed","$closed","collapsed","$collapsed","expand","$expand","isChildSlideout","children","isCloseEnabled","prototype","$handleKeyDown","onOpen","closeClicked","SumTotalSlideoutProvider","focusSlideout","focusElement","fullopen","handleMousedown","slideoutDiv","removeAttr","handleKeyDown","elementsList","noOfElements","shiftKey","nameAtt","getAttribute","bindEvents","slideout","slideoutContainer","hasIframe","hiddenButton","createElement","setAttribute","appendChild","unbindEvents","maintainFocus","SumTotalSlideoutServiceFactory","$templateRequest","$q","$compile","SumTotalSlideoutService","currentSlideout","previousSlideout","slideouts","openedSlideouts","hiddenSlideouts","_handleRouteChangeStart","bind","loadTemplates","all","templateHTMLPromise","when","getContainerClassFactory","previousKey","showCollapse","showHeader","SECTIONS","ALL_CONTENT","HEADER","SIDE","EXPAND","FOOTER","MAIN_TEMPLATE_URL","closeCurrent","$updateTemplate","htmlPromise","results","createScope","elm","outerSlideoutElm","innerSlideoutElm","info","innerSlideoutAllContentArea","replaceWith","warn","slideoutScope","parentScope","$getSlideoutContainerClass","$$slideout","contents","$openSlideout","ON_OPENING_EVENT_NAME","openPromise","toString","parentSlideout","head","doUpdateTemplate","labelId","forceTemplateRecompile","ON_OPENED_EVENT_NAME","service","slideoutObj","$closeSlideout","openedSlideout","$destroy","hiddenSlideout","resolve","reject","$applyAsync","getCurrent","suppressEvents","ON_CLOSING_EVENT_NAME","collapsible","returnElementHandle","sourceElementId","focusReturnElement","ON_CLOSED_EVENT_NAME","toggleSlideout","ON_COLLAPSED_EVENT_NAME","call","slideoutToClose","getSlideOut","slideoutKey","addSlideOut","showLeftSide","isPartialSlideout","fullOpen","dontPreventClose","collapse","escapeSlideout","keyEvent","getSlideout","addSlideout","EVENT_KEYS","SumTotalSlideout","slideoutCompile","falseValueRegExp","slideoutPostLink","$parent","compile","forceFocus","class","KEY_CODES","ENTER","SPACE","heading","expandedIconClass","collapsedIconClass","appliedListElement","contextualClass","changeState","isCollapsed","handleClick","handleKeyUp","allowedContextualClasses","panelId","$click","$keyUp","headerToggleOpen","headerToggleClosed","setPanelClass","panelClass","averageRatingValue","userRatingValue","colorValue","fromSearch","screenReader","screenReaderValue","isUndefined","screenreaderValue","userRating","ratingValue","addClass","averageRating","removeClass","tabs","content","percentcomplete","progressclass","showInline","showProgessInline","hasFilter","highlight","nodes","selectedTab","compDate","addDataNode","setConfig","stagger","setTabSelection","tab","dynamicTooltip","dynamicTooltipText","htmlTooltip","headerClass","headerTitle","headerIcon","hideHeader","headerUrl","hideDeeplink","toLowerCase","contentWidth","contentClass","widthObj","heightObj","handleHeaderClick","eval","headerLinkIcon","headerStyleObj","prefixClass","prefixEvent","minLength","limit","comparator","$tooltip","TypeaheadFactory","$sumttypeahead","$resetMatches","$matches","$activeIndex","$activate","$$postDigest","activate","$select","select","$isVisible","update","matches","$setViewValue","$render","isString","$viewValue","$getIndex","l","$onMouseDown","$onKeyDown","$element","$parse","$parseOptions","ngOptions","parsedOptions","typeahead","watchOptions","watchedOptions","$match","trim","valuesFn","values","$modelValue","selectMode","isVisible","$formatters","modelValue","displayValue","$isEmpty","label","isObject","destroy","activeStep","onSelectedStep","nextStep","prevStep","stepData","clickable","stepCount","numSteps","allStepsOpen","selectedStep","labelText","stepText","ofText","completedText","notCompletedText","currentText","keys","_settings","v","step","stepNum","stepName","stepSubName","stepDisabled","stepCompleted","focusId","allowDisable","goToStep","step508Label","run","$templateCache","put","constant","en","CLOSE","CLOSE_TXT","de","arSA","cs","da","el","enGB","esMX","es","fi","frCA","fr","hu","it","ja","ko","nl","no","pl","ptBR","ro","ru","sl","sv","th","tr","uk","vi","zhHans","zhHant","$translateProvider","$alertProvider","$modalProvider","preferredLanguage"],"mappings":"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","file":"foundation.min.js","sourcesContent":["(function (factory) {\n // I'm a pre function\n factory();\n} (function () {\n // I'm a factory getting executed\n}));\n\nangular.module('SumTotalComponents',['SumTotalComponents.Helpers','SumTotalActionGauge','SumTotalClaw','SumTotalAccordionModule','SumTotalDatePicker','SumTotalDropdown','SumTotalEllipsisModule','SumTotalNGEnterModule','SumTotalValidatedText','SumTotalLeftNav','SumTotalLiveRegion','SumTotalModalfilterModule','SumTotalNotificationTile','SumTotalPersonalization','SumTotalProgressBar','SumTotalSectionModule','SumTotalSidePanel','SumTotalSlideOutModule','SumTotalStarRating','SumTotalSumtProgressBar','SumTotalTabModule','SumTotalTimeline','SumTotalTooltipModule','SumTotalTypeahead','SumTotalWizard','SumTotalWebpartModule','ngTable','gridster','ngAnimate','mgcrea.ngStrap','multi-transclude','pascalprecht.translate','ui.tree','kcd']);\n/* jshint strict:false */\n\nangular.module(\"SumTotalAccordionModule\", [])\n.directive('sumtaccordion', function () {\n return {\n templateUrl: 'accordion/accordion_view.html',\n controller: 'AccordionController',\n transclude: true,\n // link: function ($scope, $element, $attributes, controller) {\n link: function ($scope) {\n $scope.oneAtATime = true;\n $scope.groups = [];\n $scope.items = [];\n\n $scope.addItem = function () {\n var newItemNo = $scope.items.length + 1;\n $scope.items.push('Item ' + newItemNo);\n };\n }\n };\n});\n\nangular.module(\"SumTotalActionGauge\", [])\n.directive('actionGauge', function () {\n\treturn {\t\n\t restrict: 'E',\n replace: false,\n transclude: true,\n\t scope: {\n gaugeList: \"=\",\n\t\toutGaugeItem: \"=\",\n\t\tselectGaugeAction: \"&\"\t\t\n },\n templateUrl: 'actionGauge/actionGaugeTemplate.html',\n link: function (scope, element, attrs) {\n\t\t\tscope.gaugeListItems = angular.copy(scope.gaugeList);\n\t\t\tscope.selectGauge = function (event, selectedItem) {\n\t\t\t\tangular.forEach(scope.gaugeListItems, function (item) {\n\t\t\t\titem.gaugeActive = false;\n\t\t\t\t});\n\t\t\t\tselectedItem.gaugeActive = true;\n\t\t\t scope.outGaugeItem = selectedItem;\n\t\t\t if (scope.selectGaugeAction) {\n\t\t\t\t scope.selectGaugeAction({ $event: event, selectedGaugeItem: selectedItem });\n\t\t\t }\n\t\t\t};\t\n\t\t}\n\t}\t\n});\nangular.module('SumTotalDatePicker', ['mgcrea.ngStrap'])\n .directive('sumtDatepicker', ['$timeout', '$datepicker', '$dateFormatter', '$dateParser', '$filter', '$document', function ($timeout, $datepicker, $dateFormatter, $dateParser, $filter, $document) {\n 'use strict';\n\n var openDatepickerPopup = null;\n var lastClickedDatepicker = null;\n var defaults = angular.extend({}, {\n dateFormat: 'shortDate',\n strictFormat: false,\n labelInput: null,\n id: null,\n placement: 'bottom-left',\n placeholder: null,\n container: 'body',\n labelNext: 'DATEPICKER_NEXT',\n labelPrevious: 'DATEPICKER_PREVIOUS',\n labelMonth: 'DATEPICKER_MONTHS',\n labelYear: 'DATEPICKER_YEARS',\n labelDays: 'DATEPICKER_DAYS',\n dateType: 'date',\n timezone: null,\n modelDateFormat: null,\n ariaLabelInput: null,\n showCultureFormat: null,\n },\n $datepicker.defaults);\n\n return {\n restrict: 'E',\n scope: {\n ngModelDate: '=ngModel',\n required: '=ngRequired',\n disabled: '=ngDisabled',\n readonly: '=ngReadonly',\n readonlyText: '=ngReadonlyText',\n onDateSelection: '&?'\n },\n require: ['ngModel', '?ngRequired', '?ngDisabled', '?ngReadonly', '?ngReadonlyText'],\n templateUrl: 'datepicker/datepicker.html',\n link: {\n pre: function preLink(scope, element, attr, controllers) {\n var ngModelController = controllers[0];\n\n var datePickerElement = element[0];\n var toggleButton = element.find('.calendar-toggle');\n\n // Add event listener to document to close datepicker popup when clicking outside\n $document.on('click', function (event) {\n var datepickers = document.querySelectorAll('.sumt-datepicker');\n datepickers.forEach(function (datepicker) {\n var popup = datepicker.querySelector('.dropdown-menu');\n if (popup && !datepicker.contains(event.target)) {\n datepicker.querySelector('.calendar-toggle').click();\n }\n });\n\n });\n\n // Add event listener to toggle button to open/close datepicker\n toggleButton.on('click', function (e) {\n var isSameButton = datePickerElement === openDatepickerPopup;\n\n var datepickers = document.querySelectorAll('.sumt-datepicker');\n datepickers.forEach(function (datepicker) {\n if (datepicker !== datePickerElement) {\n var popup = datepicker.querySelector('.dropdown-menu');\n if (popup) {\n var toggle = datepicker.querySelector('.calendar-toggle');\n toggle.click();\n }\n }\n });\n\n if (isSameButton && lastClickedDatepicker === openDatepickerPopup) {\n var popup = openDatepickerPopup.querySelector('.dropdown-menu');\n if (popup) {\n var toggle = openDatepickerPopup.querySelector('.calendar-toggle');\n toggle.click();\n e.stopPropagation();\n openDatepickerPopup = null;\n lastClickedDatepicker = null;\n }\n } else {\n openDatepickerPopup = datePickerElement;\n lastClickedDatepicker = datePickerElement;\n }\n scope.$apply();\n });\n\n var options = {\n scope: scope,\n lang: $dateFormatter.getDefaultLocale(),\n\n };\n\n angular.forEach([\n 'dateFormat',\n 'placement',\n 'modelDateFormat',\n 'strictFormat',\n 'labelInput',\n 'lang',\n 'id',\n 'placeholder',\n 'container',\n 'labelNext',\n 'labelPrevious',\n 'labelMonth',\n 'labelYear',\n 'labelDays',\n 'timezone',\n 'ariaLabelInput',\n 'showCultureFormat',\n ],\n function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n options = angular.extend({}, defaults, options);\n\n var dateParser = $dateParser({\n format: options.dateFormat,\n lang: options.lang,\n strict: options.strictFormat\n });\n\n if (angular.isDefined(attr.id)) {\n scope.inputId = attr.id + '_input';\n\t\t\tscope.alertSpanId = scope.inputId + '_span';\n scope.pickerId = attr.id + '_picker';\n\t\t\tscope.spanId = attr.id + '_span';\n } else if (attr.ngModel) {\n scope.inputId = attr.ngModel + '_input';\n\t\t\tscope.alertSpanId = scope.inputId + '_span';\n scope.pickerId = attr.ngModel + '_picker';\n\t\t\tscope.spanId = attr.ngModel + '_span';\n }\n\n if (angular.isDefined(attr.name)) {\n scope.inputName = attr.name;\n } else if (attr.ngModel) {\n scope.inputName = attr.ngModel + '_input';\n }\n\n if (options.dateFormat != \"shortDate\"){\n scope.dateFormat = options.dateFormat;\n }\n else{\n scope.dateFormat = dateParser.$format;\n }\n scope.showCultureFormat = options.showCultureFormat == \"false\" ? false : true;\n scope.placement = options.placement;\n scope.labelInput = attr.labelInput;\n scope.textboxPlaceholder = attr.placeholder;\n scope.container = attr.container || 'body';\n scope.ariaLabelInput = options.ariaLabelInput || $filter('translate')(scope.labelInput) + (scope.textboxPlaceholder ? ' (' + scope.textboxPlaceholder + ')' : '');\n\n\t\t \t\t \n scope.labelNext = attr.labelNext || 'DATEPICKER_NEXT';\n scope.labelPrevious = attr.labelPrevious || 'DATEPICKER_PREVIOUS';\n scope.labelMonth = attr.labelMonth || 'DATEPICKER_MONTHS';\n scope.labelYear = attr.labelYear || 'DATEPICKER_YEARS';\n scope.labelDays = attr.labelDays || 'DATEPICKER_DAYS';\n\n scope.timezone = attr.timezone || options.timezone;\n\t\t \n\t\t if(scope.textboxPlaceholder){\n scope.placeholderdate = new Date();\n\t\t scope.placeholderdateFormat = moment(scope.placeholderdate).format(scope.textboxPlaceholder.toUpperCase());\n }\n \n var btn = element.find('button');\n angular.forEach(['placement', 'container', 'delay'], function (key) {\n if (angular.isDefined(key)) {\n btn.attr(key, attr[key]);\n }\n });\n\n // Observe attributes for changes\n angular.forEach(['minDate', 'maxDate'], function (key) {\n if (angular.isDefined(attr[key])) {\n attr.$observe(key, function (newValue) {\n scope[key] = dateParser.getDateForAttribute(key, newValue);\n });\n }\n });\n },\n\t post: function(scope,element,attr){\n\t\t\tscope.dateSelected= false;\n\t\t\tif (scope.onDateSelection && typeof (scope.onDateSelection) == 'function')\n\t\t\t{\n\t\t\t\t$(\"button\").click(function(){\n\t\t\t\t\tscope.dateSelected = true;\n\t\t\t\t});\n\t\t\t\t$('input').on('keypress', function(e) {\n\t\t\t\t\tscope.dateSelected = true;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t scope.$watch('ngModelDate', function(newValue, oldValue, element) {\n\t\t\t scope.dateInvalid = \"false\";\n scope.inputBlur(element);\n\t\t\t if (scope.onDateSelection && typeof (scope.onDateSelection) == 'function' && newValue!=\"\" && (newValue!=oldValue) && scope.dateSelected)\n\t\t\t {\n\t\t\t\tscope.onDateSelection();\n\t\t\t\tscope.dateSelected= false;\n\t\t\t }\n\t\t }); \t\t \n\n var options = {\n scope: scope,\n lang: $dateFormatter.getDefaultLocale()\n };\n\n options = angular.extend({}, defaults, options);\n\n scope.dateParser = $dateParser({\n format: options.dateFormat,\n lang: options.lang,\n strict: options.strictFormat\n });\n\t\t \n\t\t scope.clearAlert = function(){\n\t\t\t$(\"#\" + scope.alertSpanId).attr(\"role\", \"none\");\n\t\t\tscope.dateInputAlert = \"\";\n\t\t\tscope.dateInvalid = \"false\";\n\t\t };\n\t\t \n\t\t scope.setAlert = function(error){\n\t\t\t$(\"#\" + scope.alertSpanId).attr(\"role\", \"alert\");\n\t\t\tscope.dateInputAlert = error;\n\t\t\tscope.dateInvalid = \"true\";\n\t\t }\n\t\t \n\t\t scope.dateInputAlert = \"\";\n\t\t \n\t\t scope.dateInvalid = \"false\";\n \n\t\t scope.inputBlur = function(element){\n\t\t\tthis.clearAlert();\n\t\t\t\n\t\t\tvar minDate, maxDate = \"\";\n\t\t\t \n\t\t\tif(scope.minDate && scope.minDate instanceof Date){\n\t\t\t\tminDate = scope.minDate.toDateString();\n\t\t\t}\n\t\t\t\n\t\t\tif(scope.maxDate && scope.maxDate instanceof Date){\n\t\t\t\tmaxDate = scope.maxDate.toDateString();\n\t\t\t}\n\t\t\t\n\t\t\tscope.alertValuesObject = { \n\t\t\t\tfield_name : $filter('translate')(scope.labelInput), \n\t\t\t\tformat :$filter('uppercase')(scope.dateParser.$format), \n\t\t\t\tminimum_date : minDate,\n\t\t\t\tmaximum_date : maxDate\n\t\t\t}; \n\t\t\t\n\t\t\tvar dateString = $(\"#\" + element.inputId).val();\n\t\t\t\n\t\t\tif(dateString == null || dateString == \"\"){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t \n\t\t\tvar date = scope.dateParser.parse(dateString, null, scope.dateFormat);\n\t\t\t\n\t\t\tif(!date){\n\t\t\t\tscope.setAlert(\"DATEPICKER_WRONG_FORMAT_ALERT\");\n\t\t\t} else if(!(isNaN(scope.minDate)) && date.getTime() < scope.minDate){\n\t\t\t\tscope.setAlert(\"DATEPICKER_MINIMUM_ALERT\");\n\t\t\t} else if(!(isNaN(scope.maxDate)) && date.getTime() > scope.maxDate){\n\t\t\t\tscope.setAlert(\"DATEPICKER_MAXIMUM_ALERT\");\n\t\t\t}\n\t\t };\n\t }\n }\n };\n }]);\n\n/* jshint strict:false */\n\nangular.module(\"SumTotalDropdown\", [])\n .controller('dropDownCtrl', ['$scope', function ($scope) {\n $scope.dropdown = [\n {\n \"text\": \" Another action\",\n \"href\": \"#anotherAction\"\n },\n {\n \"text\": \" Display an alert\",\n \"click\": \"$alert(\\\"Holy guacamole!\\\")\"\n },\n {\n \"text\": \" External link\",\n \"href\": \"/auth/facebook\",\n \"target\": \"_self\"\n },\n {\n \"divider\": true\n },\n {\n \"text\": \"Separated link\",\n \"href\": \"#separatedLink\"\n }\n ];\n }]);\n\n(function (root, factory) {\n 'use strict';\n factory(root.angular)\n}(this, function (angular) {\n 'use strict';\n\n var clawModule = angular.module('SumTotalClaw', []);\n\n clawModule.directive('clawChart', ['$log', '$theme', function ($log, $theme) {\n return {\n restrict: 'EA',\n replace: false,\n transclude: true,\n templateUrl: 'claw/claw_view.html',\n link: function (scope, element, attrs, ctrl, transclude) { //jshint ignore:line\n scope.completedActivities = [];\n scope.tableDisplayContent = \"\";\n scope.ispreview = attrs.ispreview;\n scope.theme = $theme.theme;\n scope.container = element.parent()[0].offsetWidth;\n scope.autoDraw = attrs.autoDraw == 'false' ? false : true;\n scope.clawVisible = scope.autoDraw;\n scope.canvas = element.find(\"#clawCanvas\");\n scope.transclusion = attrs.transclusion == 'true' ? true : false;\n scope.selectedChartViewType = 'chart';\n\n if (attrs.responsive == 'true')\n scope.chartWidth = element.parent()[0].offsetWidth - parseInt(element.parent().css('paddingLeft').replace('px', ''), 10) - parseInt(element.parent().css('paddingRight').replace('px', ''), 10);\n else\n scope.chartWidth = attrs.chartWidth;\n scope.canvas[0].style.cursor = 'pointer';\n var ctx = scope.canvas[0].getContext(\"2d\");\n scope.elements = [];\n scope.arcs = [];\n scope.capabilities = [];\n scope.selectedGap;\n scope.categoryName;\n scope.selectedCapability;\n scope.cX = parseInt(attrs.clawWidth); //jshint ignore:line\n scope.canvas[0].width = scope.chartWidth - 45;\n scope.canvas[0].height = scope.cX + 8;\n var qtrC = 0.5 * Math.PI;\n var toolTip = element.find(\"#clawtip\");\n var tipCtx = toolTip[0].getContext(\"2d\");\n var curPerc = 0.5 * Math.PI;\n scope.radius = 0.3714 * Math.min(scope.cX, scope.cX);\n scope.inc = 30;\n scope.competencyWidth = parseInt(attrs.competencyWidth); //jshint ignore:line\n scope.gapRoom = scope.canvas[0].width - scope.cX - scope.competencyWidth;\n scope.labelStyle = scope.gapRoom - 10;\n scope.gapRoomPercent = (scope.gapRoom / scope.canvas[0].width) * 100;\n scope.legendWidth = element.find(\".legendContainer\").width();\n\n scope.ie_ver = function () {\n var iev = 0;\n var ieold = (/MSIE (\\d+\\.\\d+);/.test(navigator.userAgent));\n var trident = !!navigator.userAgent.match(/Trident\\/7.0/);\n var rv = navigator.userAgent.indexOf(\"rv:11.0\");\n\n if (ieold) iev = new Number(RegExp.$1);\n if (navigator.appVersion.indexOf(\"MSIE 10\") != -1) iev = 10;\n if (trident && rv != -1) iev = 11;\n\n scope.iev = iev;\n };\n\n scope.ie_ver();\n\n scope.canvasClick = function (e) {\n scope.tableDisplayContent = \"\";\n scope.completedActivities = [];\n scope.$apply(attrs.arcClick);\n\n var mouse = scope.getMousePos(scope.canvas, e);\n var x = mouse.x;\n var y = mouse.y;\n\n if (x > (scope.cX + scope.competencyWidth)) {\n $log.debug('Gap area clicked');\n angular.forEach(scope.elements, function (element) {\n if (y > element.y &&\n y < (element.y + element.height) &&\n x > element.x &&\n x < (element.x + element.width)) {\n\n $log.debug('Gap clicked:', element.name);\n\n scope.categoryName = element.name;\n scope.tableDisplayContent = \"Gaps\";\n scope.selectedGap = element.data;\n scope.selectedGap.categoryName = element.name;\n\n scope.$digest();\n }\n });\n } else if (x > scope.cX) {\n $log.debug('Capabilities area clicked.');\n\n angular.forEach(scope.capabilities, function (capability) {\n if (y > capability.y &&\n y < (capability.y + capability.height) &&\n x > (capability.x && x < capability.x + capability.width)) {\n // capability clicked!\n scope.tableDisplayContent = \"Headers\";\n scope.selectedCapability = capability.data;\n\n scope.$digest();\n }\n });\n } else if (x < scope.cX) {\n $log.debug('Job fit area was clicked. Checking arcs...');\n angular.forEach(scope.arcs, function (arc) {\n scope.defineArc(arc);\n if (scope.iev == 11) {\n if (ctx.isPointInPath(x, y)) {\n scope.tableDisplayContent = arc.data.categoryKey;\n scope.completedActivities = arc.data.completedActivities;\n if (attrs && attrs.arcClick) {\n scope.$apply(attrs.arcClick);\n }\n } else {\n $log.debug('Clicked point is not in path for arc. (' + x + ',' + y + ')');\n }\n } else {\n if (ctx.isPointInStroke(x, y)) {\n scope.tableDisplayContent = arc.data.categoryKey;\n scope.completedActivities = arc.data.completedActivities;\n if (attrs && attrs.arcClick) {\n scope.$apply(attrs.arcClick);\n }\n } else {\n $log.debug('Clicked point is not in stroke for arc. (' + x + ',' + y + ')');\n }\n }\n\n scope.$digest();\n });\n }\n };\n\n scope.getColor = function (color) {\n if (color == 'success')\n return scope.theme.configuration[\"@brand-success\"];\n else if (color == 'warning')\n return scope.theme.configuration[\"@brand-warning\"];\n else if (color == 'danger')\n return scope.theme.configuration[\"@brand-danger\"];\n else if (color == 'info')\n return scope.theme.configuration[\"@brand-info\"];\n else\n return color;\n };\n\n scope.clawBtnClick = function () {\n\n };\n\n scope.completedActivities = [{\n \"name\": \"test\",\n \"acquiredProficiency\": 30,\n \"requiredProficiency\": 23\n },\n {\n \"name\": \"test\",\n \"acquiredProficiency\": 30,\n \"requiredProficiency\": 23\n }\n ];\n\n scope.getMousePos = function (canvas, evt) {\n var rect = scope.canvas[0].getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n };\n\n scope.canvasToolTip = function (e) {\n var hit = false;\n var mouse = scope.getMousePos(scope.canvas[0], e);\n var x = mouse.x;\n var y = mouse.y;\n var tipWidth, tipTxt;\n scope.elements.forEach(function (element) {\n if (y > element.y && y < element.y + element.height && x > element.x && x < element.x + element.width) {\n tipTxt = element.data.name;\n\n if (tipTxt.length > 80)\n tipTxt = tipTxt.substring(0, 77) + \"...\";\n\n tipWidth = tipCtx.measureText(tipTxt + \" \" + element.data.percent + \"%\").width + 10;\n\n if (x - (tipWidth / 2) < 0)\n toolTip[0].style.left = \"10px\";\n else if (x + (tipWidth / 2) > scope.canvas[0].width)\n toolTip[0].style.left = (scope.canvas[0].width - tipWidth) + \"px\";\n else\n toolTip[0].style.left = (x - (tipWidth / 2)) + \"px\";\n\n toolTip[0].style.top = (y - 17) + \"px\";\n toolTip[0].width = tipWidth;\n tipCtx.clearRect(0, 0, toolTip[0].width, toolTip[0].height);\n tipCtx.fillStyle = \"#fff\";\n tipCtx.font = \"bold 12px Arial\";\n tipCtx.fillText(tipTxt + \" \" + Math.round(element.data.percent * 10) / 10 + \"%\", 5, 15);\n hit = true;\n }\n });\n\n if (!hit)\n toolTip[0].style.left = \"-3500px\";\n };\n\n scope.canvas.click(scope.canvasClick);\n scope.canvas.mousemove(scope.canvasToolTip);\n\n scope.drawArc = function () {\n if (scope.data) {\n var radi = [],\n arcLength, textLength, txtAngle, labelTxt;\n for (var i = scope.data.length - 1; i >= 0; i--) {\n if (scope.data[i].percent > 100)\n scope.data[i].percent = 100;\n radi.push(scope.data[i].percent);\n arcLength = 2 * Math.PI * (scope.radius + (30 * i)) * (scope.data[i].percent / 360);\n textLength = ctx.measureText(scope.data[i].percent + \"%\");\n scope.arcRadians = scope.data[i].percent / 100 * qtrC + (qtrC);\n ctx.save();\n ctx.beginPath();\n ctx.lineWidth = 25;\n if (scope.data[i].color.indexOf('#') !== -1)\n ctx.strokeStyle = scope.data[i].color;\n else if (scope.data[i].color == 'success')\n ctx.strokeStyle = scope.theme.configuration[\"@brand-success\"];\n else if (scope.data[i].color == 'warning')\n ctx.strokeStyle = scope.theme.configuration[\"@brand-warning\"];\n else if (scope.data[i].color == 'danger')\n ctx.strokeStyle = scope.theme.configuration[\"@brand-danger\"];\n else if (scope.data[i].color == 'info')\n ctx.strokeStyle = scope.theme.configuration[\"@brand-info\"];\n ctx.arc(scope.cX, 1, scope.radius + (30 * i), 0.5 * Math.PI, scope.arcRadians, false);\n ctx.stroke();\n ctx.beginPath();\n ctx.arc(scope.cX, 1, scope.radius + (30 * i), scope.arcRadians, 1 * Math.PI, false);\n ctx.strokeStyle = \"#eeeeee\";\n ctx.stroke();\n\n ctx.save();\n if (textLength.width > arcLength) {\n txtAngle = (scope.data[i].percent + 60) / 100;\n ctx.fillStyle = \"#4e5252\";\n } else {\n txtAngle = scope.data[i].percent / 100;\n ctx.fillStyle = \"#fff\";\n }\n ctx.font = \"bold 12px Arial\";\n ctx.translate(scope.cX, 0);\n ctx.rotate(45 * Math.PI / 180 * txtAngle);\n ctx.fillText(scope.data[i].percent + \"%\", -12, scope.radius + (i * scope.inc) + 4);\n ctx.restore();\n\n scope.arcObject = {\n data: scope.data[i],\n cx: scope.cX,\n cy: 1,\n radius: scope.radius + (30 * i),\n start: 0.5 * Math.PI,\n end: scope.arcRadians\n };\n scope.arcs.push(scope.arcObject);\n }\n scope.inverseMin = 100 - Math.min.apply(null, radi);\n }\n };\n\n scope.defineArc = function (arc) {\n ctx.beginPath();\n ctx.arc(arc.cx, arc.cy, arc.radius, arc.start, arc.end);\n };\n\n scope.buildHeaders = function () {\n if (scope.data) {\n for (var i = scope.data.length - 1; i >= 0; i--) {\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = \"#eeeeee\";\n ctx.rect(scope.cX + 1, scope.radius + (i * scope.inc) - 11, scope.competencyWidth, 25);\n ctx.fill();\n ctx.fillStyle = \"#4e5252\";\n ctx.textAlign = \"start\";\n ctx.font = \"bold 12px Arial\";\n ctx.fillText(\"of\", scope.cX + 5, scope.radius + (i * scope.inc) + 7);\n ctx.font = \"bold 14px Arial\";\n ctx.fillText(scope.data[i].id, scope.cX + 20, scope.radius + (i * scope.inc) + 7);\n\n scope.capabilityObject = {\n data: scope.data[i],\n x: scope.cX + 1,\n y: scope.radius + (i * scope.inc) - 11,\n width: scope.competencyWidth,\n height: 25\n };\n scope.capabilities.push(scope.capabilityObject);\n }\n }\n };\n\n scope.buildGaps = function () {\n if (scope.data) {\n for (var i = scope.data.length - 1; i >= 0; i--) {\n scope.barStart = scope.cX + scope.competencyWidth + 2;\n scope.barWidth = 0;\n scope.localGapRoom = scope.gapRoom - scope.data[i].items.length - 1;\n var txtLabel, txtLength, txtPercentLength, txtValLength;\n\n for (var j = 0; j < scope.data[i].items.length; j++) {\n ctx.beginPath();\n ctx.font = \"12px Arial\";\n ctx.textAlign = \"center\";\n if (scope.data[i].items[j].percent > 0)\n scope.gapCount = scope.gapCount + 1;\n txtLabel = scope.data[i].items[j].name + \" \" + Math.round(scope.data[i].items[j].percent) + \"%\";\n txtLength = ctx.measureText(scope.data[i].items[j].name + \" \" + Math.round(scope.data[i].items[j].percent) + \"%\").width + 5;\n txtPercentLength = ctx.measureText(Math.round(scope.data[i].items[j].percent) + \"%\").width;\n txtValLength = ctx.measureText(Math.round(scope.data[i].items[j].percent)).width;\n scope.barStart = scope.barStart + scope.barWidth + 1;\n scope.barWidth = (scope.data[i].items[j].percent / scope.inverseMin) * scope.localGapRoom;\n if (scope.data[i].items[j].color != undefined) {\n if (scope.data[i].items[j].color.indexOf('#') !== -1)\n ctx.fillStyle = scope.data[i].color;\n else if (scope.data[i].items[j].color == 'success')\n ctx.fillStyle = scope.theme.configuration[\"@brand-success\"];\n else if (scope.data[i].items[j].color == 'warning')\n ctx.fillStyle = scope.theme.configuration[\"@brand-warning\"];\n else if (scope.data[i].items[j].color == 'danger')\n ctx.fillStyle = scope.theme.configuration[\"@brand-danger\"];\n else if (scope.data[i].items[j].color == 'info')\n ctx.fillStyle = scope.theme.configuration[\"@brand-info\"];\n }\n ctx.rect(scope.barStart, scope.radius + (i * scope.inc) - 11, scope.barWidth, 25);\n ctx.fill();\n ctx.fillStyle = \"#ffffff\";\n\n if (txtValLength > scope.barWidth) {\n ctx.fillText(\"\", scope.barWidth * 0.5 + scope.barStart, scope.radius + (i * scope.inc) + 6);\n } else if (txtPercentLength > scope.barWidth) {\n ctx.fillText(Math.round(scope.data[i].items[j].percent), scope.barWidth * 0.5 + scope.barStart, scope.radius + (i * scope.inc) + 6);\n } else if (txtLength > scope.barWidth) {\n ctx.fillText(Math.round(scope.data[i].items[j].percent) + \"%\", scope.barWidth * 0.5 + scope.barStart, scope.radius + (i * scope.inc) + 6);\n } else {\n ctx.fillText(txtLabel, scope.barWidth * 0.5 + scope.barStart, scope.radius + (i * scope.inc) + 6);\n }\n\n scope.gapObject = {\n data: scope.data[i].items[j],\n name: scope.data[i].categoryKey,\n x: scope.barStart,\n y: scope.radius + (i * scope.inc) - 11,\n width: scope.barWidth,\n height: 25\n };\n scope.elements.push(scope.gapObject);\n }\n ctx.closePath();\n }\n }\n };\n\n scope.drawClaw = function () {\n scope.selectedGap = null;\n scope.selectedCapability = null;\n scope.completedActivities = null;\n scope.clawVisible = true;\n scope.gapCount = 0;\n // draw the background\n ctx.beginPath();\n ctx.save();\n ctx.translate(0.5, 0.5);\n scope.elements = [];\n scope.arcs = [];\n scope.capabilities = [];\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(0, 0, scope.canvas[0].width, scope.canvas[0].height);\n ctx.strokeStyle = \"#adadad\";\n ctx.lineWidth = 1;\n ctx.moveTo(0, 0);\n ctx.lineTo(scope.canvas[0].width, 0);\n ctx.moveTo(0, scope.cX + 7);\n ctx.lineTo(scope.canvas[0].width, scope.cX + 7);\n ctx.moveTo(scope.cX + 0, 0);\n ctx.lineTo(scope.cX + 0, scope.cX + 7);\n ctx.moveTo(scope.cX + 2 + scope.competencyWidth, 0);\n ctx.lineTo(scope.cX + 2 + scope.competencyWidth, scope.cX + 7);\n ctx.moveTo(scope.cX, 0);\n ctx.lineTo(0, scope.cX);\n ctx.moveTo(scope.cX, 0);\n ctx.lineTo(0, scope.cX / 2);\n ctx.moveTo(scope.cX, 0);\n ctx.lineTo(scope.cX / 2, scope.cX);\n ctx.stroke();\n\n //build claw\n scope.buildHeaders();\n scope.drawArc();\n scope.buildGaps();\n ctx.restore();\n };\n\n $(window).resize(function () {\n if (scope.clawVisible) {\n scope.$apply(function () {\n scope.resize();\n });\n }\n });\n\n scope.resize = function () {\n if (!scope.clawVisible)\n scope.drawClaw();\n curPerc = 0.5 * Math.PI;\n if (attrs.responsive == 'true')\n scope.chartWidth = element.parent()[0].offsetWidth - 35;\n else\n scope.chartWidth = attrs.chartWidth;\n scope.canvas[0].width = scope.chartWidth - 45;\n scope.gapRoom = scope.canvas[0].width - scope.cX - scope.competencyWidth;\n scope.labelStyle = scope.gapRoom - 10;\n scope.gapRoomPercent = (scope.gapRoom / scope.canvas[0].width) * 100;\n scope.legendWidth = element.find(\".legendContainer\").width();\n scope.redraw();\n }\n\n scope.redraw = function () {\n ctx.clearRect(0, 0, scope.canvas[0].width, scope.canvas[0].height);\n scope.drawClaw();\n };\n\n scope.toggleChartViewType = function toggleChartViewType(evt) {\n\n };\n\n scope.$watch('data', function () {\n if (scope.autoDraw)\n scope.drawClaw();\n });\n\n scope.$watch('theme', function (newVal, oldVal) {\n if (scope.clawVisible)\n scope.resize();\n }, true);\n\n scope.$on('drawClaw', function () {\n scope.resize();\n });\n\n scope.$on('resizeClaw', function () {\n if (scope.clawVisible)\n scope.resize();\n });\n }\n };\n }]);\n\n clawModule.directive('clawChartBehaviorsList', [function () {\n return {\n templateUrl: 'claw/behaviors_list.html',\n scope: {\n displayFullText: \"=\",\n behaviors: \"=\"\n },\n link: function (scope, element, attrs, ctrl, transclude) {}\n };\n }]);\n\n clawModule.directive('clawChartLearningList', [function () {\n return {\n templateUrl: 'claw/learning_list.html',\n scope: {\n displayFullText: \"=\",\n learningData: \"=\"\n },\n link: function (scope, element, attrs, ctrl, transclude) {}\n };\n }]);\n\n clawModule.directive('clawChartSkillsList', [function () {\n return {\n templateUrl: 'claw/skills_list.html',\n scope: {\n displayFullText: \"=\",\n skills: \"=\"\n },\n link: function (scope, element, attrs, ctrl, transclude) {}\n };\n }]);\n\n clawModule.directive('clawChartGapsList', ['$filter', '$translate', function ($filter, $translate) {\n return {\n templateUrl: 'claw/gap_info_list.html',\n scope: {\n items: \"=\",\n categoryName: \"=\",\n clawConfig: \"=\",\n displayFullText: \"=\",\n headerName: \"=\",\n filterComplete: \"=\",\n showDetails: \"=\"\n },\n link: function (scope) {\n if (scope.filterComplete === true) {\n scope.items = $filter('filter')(scope.items, function(item){\n return item.percent > 0;\n });\n }\n\t\t scope.activityActionBtnClick = function (action, activityId) {\n scope.$emit('actionEvents', {\n action: action,\n activityId: activityId\n });\n };\n\n if (scope.showDetails) {\n scope.$items = [];\n angular.forEach(scope.items, function (item,index) {\n if (item.items) {\n var newItem = Object.assign({}, item);\n scope.$items.push(Object.assign(newItem, item.items[0]));\n } else {\n scope.$items.push(item);\n }\n\t\t\t// Hiding the \"AddToCart\" and \"shareWithCommunity\" actions from action list\n\t\t\t var actions = $filter('filter')(scope.$items[index].actions, function (item) { \n\t\t\t if (item.Key != \"AddToCart\" && item.Key != \"shareWithCommunity\")\n return item; \t\t\n\t\t\t });\n\t\t\t scope.$items[index].actions = actions;\n\t\t\t});\n } else {\n\t\t\t// added a check to hide addtocart and sharewithcommunity actions while clicking activity item on job fit. \n\t\t\tif(scope.items.length == 1){\n\t\t\t var actions = $filter('filter')(scope.items[0].actions, function (item) { \n\t\t\t if (item.Key != \"AddToCart\" && item.Key != \"shareWithCommunity\")\n return item; \t\t\n\t\t\t });\t\t\t\n\t\t\tscope.items[0].actions = actions;\n\t\t\t}\n scope.$items = scope.items;\n }\n\n if (scope.clawConfig && scope.clawConfig.legendColors && scope.clawConfig.legendColorLabels) {\n $translate(scope.clawConfig.legendColorLabels).then(function (translations) {\n var config = Object.assign.apply(null, scope.clawConfig.legendColors.map((function (e, i) {\n var tuple = {};\n tuple[e] = translations[scope.clawConfig.legendColorLabels[i]];\n return tuple;\n })));\n\n scope.$config = config;\n });\n }\n }\n };\n }]);\n}));\n\n/* jshint strict:false */\nangular.module(\"SumTotalEllipsisModule\", [])\n .directive('timelineellipsis', function () {\n return {\n restrict: 'A',\n replace: false,\n template: '
{{currentValue}}
...
{{buttonText}}
',\n link: function (scope, element, attrs) {\n scope.buttonText = attrs.expandText;\n scope.iconClass = attrs.expandIconClass;\n scope.showMore = false;\n scope.useClickExpand = function () {\n var retArgs = false;\n if (attrs.useClickExpand === \"true\" && scope.showMore) {\n retArgs = true;\n }\n return retArgs;\n };\n scope.originalText = '';\n scope.ellipsisText = '';\n scope.originalMaxHeight = '';\n scope.ellipsisExpanded = false;\n scope.containerElement = element.find('.sumt-ellipsis-container');\n //scope.buttonObj = element.find('.sumt-expand-collapse');\n scope.currentValue = '';\n scope.ellipsisElements = [];\n\n\n scope.handleClickEvent = function () {\n if (!scope.ellipsisExpanded) {\n //scope.currentValue = scope.originalText;\n scope.ellipsisExpanded = true;\n scope.originalMaxHeight = element.css(\"max-height\");\n scope.containerElement.css(\"max-height\", \"none\");\n scope.buttonText = attrs.collapseText;\n scope.iconClass = attrs.collapseIconClass;\n //element.find('.icon-downarrow-blue').addClass(\"icon-uparrow-blue\");\n //element.find('.icon-downarrow-blue').removeClass(\"icon-downarrow-blue\");\n } else if (scope.ellipsisExpanded) {\n //scope.currentValue = scope.ellipsisText;\n scope.ellipsisExpanded = false;\n scope.containerElement.css(\"max-height\", \"3.75em\");\n scope.buttonText = attrs.expandText;\n scope.iconClass = attrs.expandIconClass;\n //element.find('.icon-uparrow-blue').addClass(\"icon-downarrow-blue\");\n //element.find('.icon-uparrow-blue').removeClass(\"icon-uparrow-blue\");\n }\n };\n\n if (!scope.ellipsisExpanded) {\n //if () {\n //if (scope.textCheck) {\n\n scope.currentValue = scope.$eval(attrs.descValue).expandableText;\n //scope.originalText = scope.$eval(attrs.descValue).expandableText;\n\n var tempElement = $(scope.containerElement).clone().insertBefore($(scope.containerElement));\n tempElement.css({\n position: \"absolute\",\n visibility: \"hidden\",\n zindex: \"-1\"\n });\n\n var width = parseInt(scope.containerElement[0].style.width ? scope.containerElement[0].style.width : (scope.containerElement.css(\"max-width\") != \"none\" ? scope.containerElement.css(\"max-width\") : scope.containerElement.css(\"width\")), 10);\n var height = parseInt(scope.containerElement[0].style.height ? scope.containerElement[0].style.height : (scope.containerElement.css(\"max-height\") != \"none\" ? scope.containerElement.css(\"max-height\") : null), 10);\n var curText = scope.$eval(attrs.descValue).expandableText;\n\n tempElement.css({\n \"width\": height ? width + \"px\" : \"\",\n \"max-width\": \"none\",\n \"height\": \"\",\n \"max-height\": \"none\"\n });\n tempElement.text(curText);\n\n if ((height && tempElement.height() > height) || (!height && tempElement.width() > width)) {\n scope.showMore = true;\n //while (curText.length > 0 && ((height && tempElement.height() > height) || (!height && tempElement.width() > width))) {\n //\tcurText = curText.substring(0, curText.length - 1);\n //\ttempElement.text(curText + \"...\");\n //\t//console.log('got here - ' + test++);\n //}\n //scope.ellipsisText = tempElement.text();\n //scope.currentValue = tempElement.text();\n }\n tempElement.remove();\n //}\n //}\n }\n if (attrs.useAutoResize) {\n if (scope.ellipsisElements.length === 0) {\n $(\"#divMainContent\").on(\"content-resize\", function () {\n if ($SumtUI.EllipsisResizeTimeout)\n window.clearTimeout($SumtUI.EllipsisResizeTimeout);\n $SumtUI.EllipsisResizeTimeout = window.setTimeout(function () {\n for (var i = 0; i < $SumtUI.EllipsisElements.length; i++)\n scope.applyEllipsis($SumtUI.EllipsisElements[i]);\n }, 100);\n });\n }\n scope.ellipsisElements.push(scope.containerElement);\n }\n }\n };\n });\n\nangular.module(\"SumTotalNGEnterModule\", [])\n.directive('ngEnter', function () { //a directive to 'enter key press' in elements with the \"ng-enter\" attribute\n return function (scope, element, attrs) {\n element.on(\"keydown keypress\", function (event) {\n if (event.which === 13) {\n scope.$apply(function () {\n scope.$eval(attrs.ngEnter);\n });\n\n event.preventDefault();\n }\n });\n };\n});\n\n/* jshint strict:false */\nangular.module('SumTotalValidatedText', [])\n .directive('sumtValidatedText', function () {\n return {\n restrict: 'EA',\n // require: ['ngModel', '^form'],\n // require: '^form',\n replace: true,\n templateUrl: 'forms/text.html',\n scope: {\n validatedName: '@',\n validatedLabel: '&',\n controlData: '=',\n required: '@'\n },\n link: function (scope, element, attrs, controllers) { // jshint ignore:line\n //scope._required = (scope.required === 'true') ? '' : 'required';\n// if (scope.required === 'true') {\n// element.find('input').attr('required', true);\n// }\n\n scope.getFormGroupClass = function (invalid, dirty, valid) {\n if (invalid && dirty) {\n return 'has-error';\n } else if (valid && dirty) {\n return 'has-success';\n } else {\n return '';\n }\n };\n }\n };\n });\n\n// UMD / AMD: https://github.com/umdjs/umd/blob/master/templates/amdWeb.js\n(function (root, factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular'], factory);\n } else {\n // Browser globals\n factory(root.angular);\n }\n}(this, function (angular) {\n 'use strict';\n\n function MultiTransclude() {\n return {\n transclude: function (elem, transcludeFn, scope) {\n transcludeFn(function (clone) {\n angular.forEach(clone, function (cloneEl) {\n if (cloneEl.attributes) {\n var destinationId = cloneEl.attributes[\"transclude-to\"].value;\n var destination = angular.element(elem[0].querySelector('[transclude-id=\"' + destinationId + '\"]'));\n if (destination.length) {\n destination.append(cloneEl);\n } else {\n cloneEl.remove();\n }\n }\n });\n });\n }\n };\n }\n\n angular.module(\"SumTotalComponents.Helpers\", [])\n .factory(\"MultiTransclude\", [\n MultiTransclude\n ]);\n}));\n\nangular.module('SumTotalLiveRegion', [])\n .provider('$sumtliveregion', function () {\n // Maybe put something here later?\n var options = this.options = {\n ariaLevel: \"assertive\",\n ariaRelevant: null,\n ariaAtomic: true,\n ariaLabeledBy: null,\n ariaDescribedBy: null\n }\n this.$get = function ($window, $rootScope, $timeout, $translate) {\n\n function LiveRegionFactory(element, controller, config) {\n var $sumtliveregion = {};\n var _queue = [];\n var _curMessage;\n var _translations;\n var _translationKeys = [\n 'SORTING_TXT',\n 'ASCENDING_TXT',\n 'DESCENDING_TXT'\n ];\n\n $sumtliveregion.create = function (msg, config) {\n var message;\n message = angular.extend({\n msg: msg\n }, options, config);\n _queue.push(message);\n $sumtliveregion.queue = _queue;\n this.show();\n }\n\n $sumtliveregion.show = function () {\n if (_queue.length > 0) {\n _curMessage = _queue.length > 0 ? _queue[0] : null;\n _queue.splice(0, 1);\n // If queue still has items in it then handle by concatenating all of the messages together. \n // NOTE: This should be a corner case and is not advised per TPG.\n if (_queue.length > 0) {\n // TODO: Loop through the queue and append into one single message \n }\n $sumtliveregion.curMessage = _curMessage;\n }\n }\n\n $sumtliveregion.ngTableEvent = function (ngTableParams, config) {\n // Clear out the previous message for testing\n _curMessage = null;\n var msg;\n var sorting = ngTableParams.sorting();\n var orderBy = ngTableParams.orderBy();\n var filtering = ngTableParams.filter();\n var sortName = orderBy[0].slice(1);\n // If a caption is setup for a table it can be passed in (as right now there is no way in NG-Table to grab current table elements)\n var caption = ngTableParams.tableCaption ? ngTableParams.tableCaption : \"\";\n var sortDirection = sorting[sortName] == \"asc\" ? \"ASCENDING_TXT\" : \"DESCENDING_TXT\";\n var that = this;\n if (!_translations) {\n $translate(_translationKeys).then(function (translations) {\n _translations = translations;\n // Create a default message for NTTable sorting events\n msg = _translations['SORTING_TXT'] + \" \" + caption + \" \" + sortName + \" \" + _translations[sortDirection];\n that.create(msg, config);\n });\n } else {\n // Create a default message for NTTable sorting events\n msg = _translations['SORTING_TXT'] + \" \" + caption + \" \" + sortName + \" \" + _translations[sortDirection];\n this.create(msg, config);\n }\n }\n\n $sumtliveregion.showNext = function () {\n _curMessage = null;\n this.show();\n }\n\n return $sumtliveregion;\n }\n LiveRegionFactory.options = options;\n return new LiveRegionFactory;\n };\n\n this.$get.$inject = ['$window', '$rootScope', '$timeout', '$translate'];\n })\n .directive('sumtLiveRegion', ['$window', '$sumtliveregion', function ($window, $sumtliveregion) {\n return {\n restrict: 'EA',\n templateUrl: 'liveregion/liveregion_view.html',\n link: function (scope, element, attr) {\n scope.sumtliveregion = $sumtliveregion;\n }\n }\n }]);\n\nangular.module(\"SumTotalLeftNav\", ['ngSanitize'])\n .directive('leftNavigation', ['$leftNavs', function ($leftNavs) {\n return {\n replace: false,\n restrict: 'A',\n templateUrl: 'leftnav/leftnav_view.html',\n transclude: true,\n scope: {\n header: '=',\n navData: '=',\n selectedNavData: '=',\n nodeClicked: '=',\n imageclicked: \"&\",\n persondata: \"=\",\n emulation: \"=\",\n exitemulation: \"&\",\n\t\tswitchdomain:\"=\",\n\t\ttranslationobject:\"=\"\n },\n link: function (scope, element, attrs) {\n scope.leftNavsProvider = $leftNavs;\n\n var key = attrs.name || attrs.id;\n key = key || 'defaultLeftNav';\n\n var contentTemplateUrl = angular.isDefined(attrs['contentTemplateUrl']) ? attrs['contentTemplateUrl'] : 'leftnav/leftnav_content_template_view.html';\n\n scope.asideScope = scope.$new();\n scope.asideScope.title = scope.header;\n scope.asideScope.show = false;\n\n scope.asideOptions = {\n title: scope.asideScope.title,\n backdrop: false,\n scope: scope.asideScope,\n templateUrl: contentTemplateUrl,\n html: true,\n placement: 'left',\n animation: 'am-slide-left',\n keyboard: false,\n show: scope.asideScope.show\n };\n scope.leftNavsProvider.addLeftNavigation(key, scope.asideOptions);\n\n scope.leftNavigationObject = scope.leftNavsProvider.getLeftNavigation(key);\n\n scope.navigateToAdmin = function (node, item) {\n scope.nodeClicked(node);\n }\n\n scope.close = function () {\n scope.leftNavsProvider.close(key);\n };\n\n scope.$watch('header', function (newVal) {\n scope.asideScope.title = newVal\n });\n\n scope.handleNodes = function (node, item) {\n\n item.toggle();\n }\n\n scope.handleNodeSelected = function (node, item) {\n\n if (node.RPKey == \"Catalog\") {\n\n scope.nodeClicked(node)\n } else {\n if (scope.nodeClicked && typeof scope.nodeClicked === 'function' && node.childNodes == null || node.childNodes.length == 0) {\n scope.nodeClicked(node);\n } else {\n item.toggle();\n }\n }\n\n };\n }\n };\n }]);\n\nangular.module('SumTotalLeftNav')\n .provider('$leftNavs', function () {\n var _navigationsHash = {};\n var _currentKey = null;\n var _previousKey = null;\n\n var _addNavigation = function (key, leftNavAside) {\n var scopedObject = {\n isShown: false,\n showLimit: 3,\n toggleLimit: false,\n appended: false,\n onClose: null,\n leftNavAside: leftNavAside\n };\n\n if (!_navigationsHash[key]) {\n _navigationsHash[key] = scopedObject;\n }\n };\n\n function _closeCurrent() {\n if (_currentKey) {\n _navigationsHash[_currentKey].leftNavAside.hide();\n _navigationsHash[_currentKey].isShown = false;\n _previousKey = _currentKey;\n }\n };\n\n function _toggleNavigation(key, state) {\n switch (state) {\n case \"open\":\n _closeCurrent();\n if (_navigationsHash[key]) {\n _navigationsHash[key].leftNavAside.show();\n _navigationsHash[key].isShown = true;\n _currentKey = key; \n // By default, setting focus on the lefyNav container.\n setTimeout(function () {\n\t\t\tvar container = $('div.leftNav_container');\n\t\t\tif (container.length > 0)\n container[0].focus();\n\t\t else\n\t\t\t container.focus(); \n },500);\n }\n break;\n case \"close\":\n if (_navigationsHash[key]) {\n _navigationsHash[key].leftNavAside.hide();\n _navigationsHash[key].isShown = false;\n _currentKey = null;\n _previousKey = null;\n }\n break;\n }\n };\n\n this.$get = ['$log', '$aside', '$injector', function ($log, $aside, $injector) {\n var navigationsHash = _navigationsHash;\n\n return {\n /**\n * Gets a left navigation object by its key.\n * @param {string} key Unique key identifying the left navigation.\n * @returns {object} Object representing the left navigation.\n */\n getLeftNavigation: function (key) {\n $log.debug('Getting left navigation:', key);\n\n return navigationsHash[key];\n },\n /**\n * Adds a left navigtaion object.\n * @param {string} key Unique key for the left navigation\n * @param {object} asideOptions Options hash.\n */\n addLeftNavigation: function (key, asideOptions) {\n _addNavigation(key, $aside(asideOptions));\n },\n /**\n *\n * @param key\n * @param onClose\n */\n open: function (key, onClose, targetSource) {\n if (onClose) {\n _navigationsHash[key].onClose = onClose;\n }\n\n // var $slideout = $injector.get('$slideout');\n // if ($slideout) {\n // $slideout.close();\n // }\n _toggleNavigation(key, \"open\");\n\t\t if(targetSource)\n\t\t {\n\t\t\t _navigationsHash[key].targetSource=targetSource;\n\t\t }\t\t\n },\n /**\n * Closes a specific slideout. If no key is provided it will close the current.\n * @param {string} key Key identifier for the slideout. If none is provided it will clsoe the current slideout. BEWARE!\n */\n close: function (key) {\n this.isKeyboardEvent = false;\n\t\t // This condition will work for chrome and IE browsers not for Firefox.\n if(typeof event !== 'undefined' && typeof event !== 'null') {\n if (event && (event.keyCode || event.which)) {\n this.isKeyboardEvent = true;\n }\n\t\t\t// This condition will work for Firefox browser.\n }else if(navigator.userAgent.indexOf(\"Firefox\") > -1){\n\t\t\t\t this.isKeyboardEvent = true;\n\t\t\t }\n if (key && _navigationsHash && _navigationsHash[key]) {\n if (_navigationsHash[key].onClose) {\n var onCloseCallback = _navigationsHash[key].onClose;\n _navigationsHash[key].onClose = undefined;\n onCloseCallback();\n } else {\n\t\t\t\tif(_navigationsHash[key].isShown)\n\t\t\t\t\t_toggleNavigation(key, \"close\");\n\t\t\t\telse\n\t\t\t\t\treturn;\n }\n } else if (!key && _currentKey) {\n this.close(_currentKey);\n }\n\t\t if(_navigationsHash[key].targetSource && _navigationsHash[key].targetSource.currentTarget && this.isKeyboardEvent)\n\t\t {\n\t\t setTimeout(function () {\n angular.element($(_navigationsHash[key].targetSource.currentTarget)).trigger('focus');\n });\n\t\t }\n },\n toggle: function (key) {\n if (!_navigationsHash[key]) return;\n\n if (_navigationsHash[key].isShown) {\n _toggleNavigation(key, \"close\");\n } else {\n _toggleNavigation(key, \"open\");\n }\n },\n /**\n *\n */\n getPreviousKey: function () {\n return _previousKey;\n }\n };\n }];\n });\n\nangular.module(\"SumTotalLeftNav\")\n .directive(\"selfheader\", function () {\n return {\n replace: true,\n restrict: 'A',\n templateUrl: 'leftnav/self_header.html',\n scope: {\n imageclicked: '&',\n persondata: '=',\n emulation: \"=\",\n exitemulation: \"&\"\n },\n link: function (t, a, i) {}\n }\n });\n\n/* jshint strict:false */\nangular.module('SumTotalNotificationTile', [])\n .directive('notificationTile',['$interval', function ($interval) {\n return {\n restrict: 'EA',\n replace: false,\n transclude: true,\n templateUrl: 'notificationTile/notificationTile_view.html',\n scope: {\n data: '='\n },\n link: function (scope, element, attrs) { //jshint ignore:line\n scope.pagination = attrs.pagination !== undefined ? attrs.pagination : 'false';\n scope.notifications = [];\n scope.selected = false;\n scope.pages = 0;\n scope.currentPage = 1;\n scope.timer = attrs.isTimed !== undefined && attrs.isTimed !== null ? attrs.isTimed : 'false';\n var interval;\n\n scope.startTimer = function(){\n interval = $interval(scope.paginate, scope.delay);\n }\n\n scope.getPages = function(){\n return new Array(scope.pages);\n }\n\n scope.setPage = function(idx){\n scope.currentPage = idx;\n }\n\n scope.getClass = function(item){\n return item.type;\n };\n\n scope.paginate = function(){\n if(scope.currentPage >= scope.pages)\n scope.currentPage = 1;\n else\n scope.currentPage += 1;\n }\n\n scope.addNotifSection = function (data) {\n scope.notifications.push(data);\n scope.pages++;\n };\n\n if (scope.data !== undefined) {\n angular.forEach(scope.data, function (item) {\n scope.addNotifSection(item);\n });\n }\n\n if(scope.timer === 'true' || attrs.delay !== undefined){\n scope.delay = scope.$eval(attrs.delay) !== undefined && scope.$eval(attrs.delay) !== null ? attrs.delay: 5000;\n scope.startTimer();\n }\n\n element.on('$destroy', function() {\n $interval.cancel(interval);\n });\n }\n };\n }]);\n\n/*\n Example use: \nparameters:\n data: Array of activities with ModalFilterValues as a field\n title-all: Translated title of All filter\n title-watch: Translated title of Watch filter\n title-read: Translated title of Read filter\n title-listen: Translated title of Listen filter\n tabpanel-id: tabpanel id of div that contains activity table\n getFilterField: Optional function that returns modal filter values\n afterFiltering: Optional function that executes after filtering data \n*/\n\n(function (root, factory) {\n 'use strict';\n\n factory(root.angular);\n} (this, function (angular) {\n 'use strict';\n\n angular.module(\"SumTotalModalfilterModule\", [])\n .directive('sumtModalfilter', ['$filter', function ($filter) {\n return {\n restrict: 'E',\n replace: false,\n scope: {\n data: \"=\",\n titleAll: \"@\",\n tabpanelId: \"@\",\n getFilterField: \"&?\",\n afterFiltering: \"&?\"\n },\n templateUrl: 'modalfilter/modalfilter_view.html',\n link: function (scope, element, attrs) {\n scope.MODALFILTER_WATCH = 0;\n scope.directiveId = scope.$id;\n scope.currentlySelectedFilter = scope.MODALFILTER_ALL;\n var isFiltered = false;\n\n scope.$watch('data', function (newVal, oldVal) {\n // When scope.data is updated outside of directive, update scope.unfiltered to be new data\n if ((!isFiltered && scope.unfiltered != newVal) || (isFiltered && newVal != scope.filteredData)) {\n scope.unfiltered = newVal;\n showFilters();\n if (scope.currentlySelectedFilter != scope.MODALFILTER_ALL) {\n filterData();\n if (scope.data.length == 0) {\n scope.currentlySelectedFilter = scope.MODALFILTER_ALL;\n scope.data = scope.unfiltered;\n }\n }\n }\n });\n\n\t\t\t\t\t/*\n Retrieves the filter value from an activity\n @param activity - The activity to obtain the filter values from\n @returns - The bitwise value of modal filters\n */\n scope.getModalFilterValues = function (activity) {\n if (scope.getFilterField && typeof (scope.getFilterField) == 'function')\n return scope.getFilterField({ activity: activity });\n else\n return activity.ModalityList;\n }\n\t\t\t\t\t\n /*\n Determines which filters should be shown for the control based on the provided data\n */\n\t\t\t\t\tfunction showFilters() {\n\t\t\t\t\t if (scope.unfiltered != null) {\n\t\t\t\t\t\t var modalityIds = [];\n\t\t\t\t\t\t scope.modalityList = [];\n\t\t\t\t\t\t angular.forEach(scope.unfiltered, function (modalityData) {\n\t\t\t\t\t\t\t\tvar modalityDataList = scope.getModalFilterValues(modalityData);\n\t\t\t\t\t\t\t\tangular.forEach(modalityDataList, function (modality) {\n\t\t\t\t\t\t\t\t\tvar modalityId = modality.ModalityId;\n\t\t\t\t\t\t\t\t\tif (modalityIds.indexOf(modalityId) === -1) {\n\t\t\t\t\t\t\t\t\t\tmodalityIds.push(modalityId);\n\t\t\t\t\t\t\t\t\t\tscope.modalityList.push(modality);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n /*\n Unfilters the data to show all items given.\n */\n function showAll() {\n\t\t\t\t\t\tisFiltered = false;\n\t\t\t\t\t\tscope.data = scope.unfiltered;\n\t\t\t\t\t\tscope.currentlySelectedFilter = scope.MODALFILTER_ALL; \n\t\t\t\t\t\tif (scope.afterFiltering && typeof (scope.afterFiltering) == 'function')\n scope.afterFiltering();\n }\n\n /*\n Filters the data for a modality\n */\n scope.showCurrentFilter = function (modality) {\n\t\t\t\t\t\tscope.currentlySelectedFilter = modality.ModalityId;\n\t\t\t\t\t\tfilterData();\n\t\t\t\t\t}\n\n\n /*\n Filters the data based on the currently selected filter\n */\n function filterData() {\n\t\t\t\t\t\tscope.filteredData = [];\n\t\t\t\t\t\tisFiltered = true;\n\t\t\t\t\t\tangular.forEach(scope.unfiltered, function (modalityData) {\n\t\t\t\t\t\t\tvar filterExists = false;\n\t\t\t\t\t\t\tvar modalityDataList = scope.getModalFilterValues(modalityData);\n\t\t\t\t\t\t\tangular.forEach(modalityDataList, function (modality) {\n\t\t\t\t\t\t\t\tif (modality.ModalityId === scope.currentlySelectedFilter) {\n\t\t\t\t\t\t\t\t\tfilterExists = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (filterExists) {\n\t\t\t\t\t\t\t\tscope.filteredData.push(modalityData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tscope.data = scope.filteredData;\n\t\t\t\t\t\tif (scope.afterFiltering && typeof (scope.afterFiltering) == 'function')\n scope.afterFiltering();\n }\n\n /*\n Handle moving the focus for left and right arrow keys\n */\n $(document).on(\"keydown.modalfilter\" + scope.directiveId,\n function (e) {\n var className = \".move\" + scope.directiveId;\n var current = $(className + \":focus\");\n if (e.keyCode == 39) {\n var next = current.next();\n if (next.length == 0) {\n next = current.prevAll(className).last();\n }\n next.focus();\n }\n if (e.keyCode == 37) {\n var previous = current.prev();\n if (previous.length == 0) {\n previous = current.nextAll(className).last();\n }\n previous.focus();\n }\n }\n );\n\t\t\t\t\t\n\t\t\t\t\tscope.$on('$destroy', function() {\n $(document).off(\"keydown.modalfilter\" + scope.directiveId);\n });\n\n element.on('$destroy', function () {\n $(document).off(\"keydown.modalfilter\" + scope.directiveId);\n });\n\n scope.$showAll = showAll;\n }\n };\n }]);\n}));\n\nangular.module('SumTotalPersonalization', [])\n .provider('$theme', function () {\n /**\n * themeTemplate - Template of a theme from the server DTO.\n * currentTheme - variable to store reference to the current theme.\n */\n var themeTemplate = this.themeTemplate = {\n \"ThemeKey\": \"DEFAULT\",\n \"Name\": \"Default Theme\",\n \"ClientJSON\": {\n \"colors\": [\n \"#ef4c00\",\n// \"#000\",\n \"#007bc3\",\n \"#a419b7\",\n \"#76b800\",\n \"#ffae00\"\n ],\n \"axisColor\": \"#5b5b5b\",\n \"gridColor\": \"#5b5b5b\",\n \"textColor\": \"#5b5b5b\",\n \"borderColor\": \"#ffffff\",\n \"backgroundColor\": \"#ffffff\",\n \"labelColor\": \"#5b5b5b\",\n \"@brand-primary\": \"darken(#428bca, 6.5%)\",\n \"@brand-success\": \"#1fbba6\",\n \"@brand-info\": \"#227AB9\",\n \"@brand-warning\": \"#ffc600\",\n \"@brand-danger\": \"#b80000\"\n },\n \"PaletteJSON\": {\n \"primary\": \"#077bc1\",\n \"palette\": [\n \"#0078c1\",\n \"#74b712\",\n \"#fead11\",\n \"#a41cb5\",\n \"#ee4b04\",\n \"#5c666f\",\n \"#e0e0df\",\n \"#ffffff\"\n ]\n }\n },\n currentTheme = {},\n rootScope = null;\n\n /**\n * Sets the current theme in the provider.\n * @param {Object} theme ThemeDTO JSON object.\n */\n var setCurrentTheme = this.setCurrentTheme = function (theme) {\n theme = theme || themeTemplate;\n\n var clonedTheme = angular.copy(theme);\n currentTheme.key = clonedTheme.ThemeKey;\n currentTheme.name = clonedTheme.Name;\n currentTheme.configuration = clonedTheme.ClientJSON\n currentTheme.palette = clonedTheme.PaletteJSON;\n\n /**\n * Safe method to get a theme color\n * @param {String} propertyName Color's name\n * @param {String} defaultValue If the property cannot be found default to this color.\n * @returns {String} Color string\n */\n currentTheme.configuration.getColor = function (propertyName, defaultValue) {\n if (currentTheme.configuration && currentTheme.configuration[propertyName]) {\n return currentTheme.configuration[propertyName];\n } else {\n return defaultValue;\n }\n };\n\n if (rootScope) {\n rootScope.$broadcast('themeUpdated', currentTheme);\n }\n\n };\n\n this.$get = ['$log', '$rootScope', function ($log, $rootScope) {\n rootScope = $rootScope;\n\n if (!currentTheme || !currentTheme.key) {\n $log.debug('Theme not configured in app.config. Configuring now.');\n setCurrentTheme(themeTemplate)\n }\n return {\n \"theme\": currentTheme,\n \"curTheme\": currentTheme,\n \"setCurrentTheme\": setCurrentTheme\n };\n }];\n });\n\nangular.module('SumTotalProgressBar', [])\n .directive('progressBar', ['$window', '$timeout','$filter','$rootScope', function ($window, $timeout, $filter,rootScope) {\n return {\n restrict: 'EA',\n replace: false,\n transclude: true,\n templateUrl: 'progress-bar/progress-bar.html',\n scope: {\n completedCount: '=',\n ongoingCount: '=',\n pendingCount: '=',\n showPercent: '=',\n filterByStatusBar: '&?',\n instructionContent: '=?', //Taking translation key as input in form of a string and resolving the transalte value here\n additionalHeadingContent: '=?' //Taking additional content to display after the progress header text (use case in development plan landing page)\n },\n link: function (scope, element, attrs) {\n \n scope.$watchCollection('[completedCount, ongoingCount, pendingCount]', function (newVal, oldVal) {\n if (newVal === oldVal) {\n $timeout(function () {\n setSeparators();\n setProgreessWidth();\n }, 700);\n } else {\n setSeparators();\n setProgreessWidth();\n }\n scope.completedTooltip = scope.completedCount == 0 || scope.completedCount == 1 ? $filter('translate')('UDP_NO_OF_TASK', { 'tasksCount': scope.completedCount }) : $filter('translate')('UDP_NO_OF_TASKS', { 'tasksCount': scope.completedCount });\n scope.ongoingTooltip = scope.ongoingCount == 0 || scope.ongoingCount == 1 ? $filter('translate')('UDP_NO_OF_TASK', { 'tasksCount': scope.ongoingCount }): $filter('translate')('UDP_NO_OF_TASKS', { 'tasksCount': scope.ongoingCount });\n scope.pendingTooltip = scope.pendingCount == 0 || scope.pendingCount == 1 ? $filter('translate')('UDP_NO_OF_TASK', { 'tasksCount': scope.pendingCount }) : $filter('translate')('UDP_NO_OF_TASKS', { 'tasksCount': scope.pendingCount });\n });\n\n var normalizeCount = function () {\n var normalizedCount = {};\n scope.totalCount = parseInt(scope.completedCount) + parseInt(scope.ongoingCount) + parseInt(scope.pendingCount);\n\n if (scope.totalCount === 0) {\n normalizedCount.completedCount = 0;\n normalizedCount.ongoingCount = 0;\n normalizedCount.pendingCount = 0;\n } else {\n normalizedCount.completedCount = (parseInt(scope.completedCount) / scope.totalCount);\n normalizedCount.ongoingCount = (parseInt(scope.ongoingCount) / scope.totalCount);\n normalizedCount.pendingCount = (parseInt(scope.pendingCount) / scope.totalCount);\n }\n return normalizedCount;\n }\n\t\t\n\t\t// this array will send to parent controller \n\t\t\n\tscope.progressMetrics = {\n completedPercent: 0,\n ongoingPercent: 0,\n pendingPercent: 0\n }\n var setSeparators = function () {\n scope.completedNormalized = normalizeCount().completedCount;\n scope.ongoingNormalized = normalizeCount().ongoingCount;\n scope.pendingNormalized = normalizeCount().pendingCount;\n scope.completedPercent = 1 * parseFloat(scope.completedNormalized * 100).toFixed(0);\n scope.ongoingPercent = 1 * parseFloat(scope.ongoingNormalized * 100).toFixed(0);\n scope.pendingPercent = 1 * parseFloat(scope.pendingNormalized * 100).toFixed(0);\n var totalpercent = scope.completedPercent + scope.ongoingPercent + scope.pendingPercent;\n if (scope.totalCount !== 0) {\n\n if (totalpercent != 100) {\n if (totalpercent < 100) {\n var maxvalue = Math.max(scope.completedNormalized, scope.ongoingNormalized, scope.pendingNormalized);\n switch (maxvalue) {\n case scope.completedNormalized:\n scope.completedPercent += 1;\n break;\n case scope.ongoingNormalized:\n scope.ongoingPercent += 1;\n break;\n case scope.pendingNormalized:\n scope.pendingPercent += 1;\n break;\n }\n } else if (totalpercent > 100) {\n var arrProgressVal = [scope.completedNormalized, scope.ongoingNormalized, scope.pendingNormalized];\n var minvalue = Math.min(scope.completedNormalized, scope.ongoingNormalized, scope.pendingNormalized);\n if (minvalue == 0) {\n //if minimum val is 0 then remove it from the array and find second min val\n arrProgressVal.splice(arrProgressVal.indexOf(minvalue), 1);\n minvalue = Math.min.apply(null, arrProgressVal);\n }\n\n switch (minvalue) {\n case scope.pendingNormalized:\n scope.pendingPercent -= 1;\n break;\n case scope.ongoingNormalized:\n scope.ongoingPercent -= 1;\n break;\n case scope.completedNormalized:\n scope.completedPercent -= 1;\n break;\n }\n }\n }\n }\n\t\t //this data need for showing on print from development plan landing page\n\t\t scope.progressMetrics.pendingPercent = scope.pendingPercent;\n\t\t scope.progressMetrics.ongoingPercent = scope.ongoingPercent;\n\t\t scope.progressMetrics.completedPercent = scope.completedPercent;\n\t\t rootScope.$broadcast(\"progressMetrics\", scope.progressMetrics);\n }\n var normalizeWidth = function (normalizationFactor) {\n return normalizationFactor * 100 + '%';\n }\n\n var setProgreessWidth = function () {\n $timeout(function () {\n $('.complete-width').css('width', normalizeWidth(normalizeCount().completedCount));\n $('.ongoing-width').css('width', normalizeWidth(normalizeCount().ongoingCount));\n $('.pending-width').css('width', normalizeWidth(normalizeCount().pendingCount));\n }, 100);\n }\n\t\t\n\t\tscope.hideEllipsis = function () {\n var contentHeight = $('.actual-instruction-content').css('height');\n if (contentHeight) {\n contentHeight = Number(contentHeight.replace(/[^0-9\\.]+/g,\"\"));// Converting to int for actual comparison\n }\n var parentHeight = $('.progress-instruction-container').css('height');\n if( parentHeight) {\n parentHeight = Number(parentHeight.replace(/[^0-9\\.]+/g,\"\"));// Converting to int for actual comparison\n }\n \n if (contentHeight <= parentHeight) { // If the content is not overflowing, need to cover up the ellipsis\n return 'progress-no-overflow';\n }\n return ''; // If the content is overflowing, we can show the ellipsis\n\t\t}\n\t\t\n\t\t scope.statusBarFilter = function (taskStatus) {\n scope.taskStatus = taskStatus;\n scope.filterByStatusBar({ taskStatus: taskStatus });\n }\n scope.$on('resetStatusFilter', function () {\n scope.taskStatus = undefined;\n });\n\n $(window).resize(function () {\n $timeout(function () {\n setSeparators();\n setProgreessWidth();\n }, 100);\n });\n }\n };\n }]);\n\n/* jshint strict:false */\nangular.module(\"SumTotalSidePanel\", [])\n.directive('sidepanel', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n templateUrl: 'sidepanel/sidepanel_view.html',\n scope: {\n header: '@',\n panels: '&'\n },\n link: function (scope, element, attrs) { //jshint ignore:line\n\n }\n };\n});\n\n// UMD / AMD: https://github.com/umdjs/umd/blob/master/templates/amdWeb.js\n(function (root, factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular', 'lodash'], factory);\n } else {\n // Browser globals\n factory(root.angular, root._);\n }\n}(this, function (angular) {\n 'use strict';\n\n var MAIN_TEMPLATE_URL = 'slideout/slideout_view.html',\n ON_OPENING_EVENT_NAME = 'SLIDEOUT_ON_OPENING',\n ON_OPENED_EVENT_NAME = 'SLIDEOUT_ON_OPENED',\n ON_CLOSING_EVENT_NAME = 'SLIDEOUT_ON_CLOSING',\n ON_CLOSED_EVENT_NAME = 'SLIDEOUT_ON_CLOSED',\n ON_COLLAPSED_EVENT_NAME = 'SLIDEOUT_ON_COLLAPSED';\n\n function SlideoutOptions(options) {\n if (options !== undefined) {\n _.merge(this, options);\n }\n }\n\n SlideoutOptions.prototype = {\n showLeftSide: false,\n key: '',\n showCollapse: false,\n maintainFocus: true,\n focusElement: null,\n focusReturnElement: null,\n forceFocus: false,\n hasIframe: false,\n templateUrl: null,\n class: null,\n forceTemplateRecompile: false\n };\n\n\n function SlideoutOptionsFactory() {\n return SlideoutOptions;\n }\n\n function SlideoutFactory($slideout) {\n var defaults = $slideout.defaults;\n\n /**\n * Slideout representation. Contains options and state.\n *\n * The object also contains the template or tempalteUrl for the slideout. It defines the instance\n * options that are built from the base options through any specifics requested by the calling\n * implementation.\n * @param {HTMLElement} element\n * @param {any} config\n */\n function Slideout(element, config) {\n // Does this have a template url that defines the whole slideout template.\n // i.e. A templateUrl says that the slideout's layout will be completely defined by the template at the URL.\n config.hasTemplate = config.templateUrl !== null && config.templateUrl !== undefined && config.templateUrl.length > 0;\n\n\n this.$options = angular.extend(new SlideoutOptions(), defaults, config);\n\n // Ease of access variable\n this.key = this.$options.key;\n\n // Template for the slideout. This is usually populated from the 'slideout' directive and includes just an HTML string.\n this.element = element;\n // State - Is the slideout closed\n this.closed = this.$closed = true;\n // State - Is the slideout collapsed\n this.collapsed = this.$collapsed = false;\n // State - Is the slideout fully expanded.\n this.expand = this.$expand = false;\n // Is this a slideout that was instantiated from within a template of an opened slideout.\n this.isChildSlideout = false;\n // The child slideouts that were generated when a slideout's template was parsed.\n this.children = {};\n\n this.isCloseEnabled = true;\n }\n\n Slideout.prototype = {\n $handleKeyDown: function (event) {\n\n },\n /**\n * Placeholder function for legacy code.\n *\n * @deprecated Consumers should use the events \"SLIDEOUT_ON_CLOSING\" and \"SLIDEOUT_ON_CLOSED\" broadcasted from the service instead.\n */\n onClose: function () {},\n /**\n * Placeholder function for legacy code.\n *\n * @deprecated Consumers should use the events \"SLIDEOUT_ON_OPENING\" and \"SLIDEOUT_ON_OPENED\" broadcasted from the service instead.\n */\n onOpen: function () {},\n /**\n *\n */\n closeClicked: function () {}\n };\n\n return Slideout;\n }\n\n function SumTotalSlideoutProvider() {\n /**\n * Defines the defaults for any slideout.\n *\n * These are defined here both as an internal member and as on the actual provider. This makes it possible for an implementing\n * application to change these defaults for all slideouts.\n */\n var defaults = this.defaults = new SlideoutOptions();\n\n function focusSlideout(focusElement, fullopen) {\n //UI can provide the specific element it wants to focus on fullopen. By default, we will focus on the main slideout container\n if (focusElement === undefined || focusElement === null)\n focusElement = '.sumt-slideout';\n\n var container = $('div.master-slideout').find(focusElement);\n if (container.length > 0)\n setTimeout(function () {\n container[0].focus();\n }, 500);\n else {\n //assume we didn't find the element, probably first time open. Allow the dom a second to update and try to grab it again\n if (focusElement === '.sumt-slideout') {\n setTimeout(function () {\n container = $('div.master-slideout').find(focusElement);\n if (container.length > 0)\n container[0].focus();\n }, 500);\n }\n else if (focusElement !== null && focusElement !== undefined) { \n setTimeout(function () {\n angular.element(focusElement).trigger('focus');\n }, 500);\n }\n }\n }\n\n function handleMousedown() {\n // on a mouse click, remove the tab index attribute as we do not want to focus the container\n var slideoutDiv = $('.sumt-slideout');\n slideoutDiv.removeAttr(\"ng-attr-tabindex\");\n slideoutDiv.removeAttr(\"tabindex\");\n\n // handling one click is enough, we do not need to handle every mouse click. so turn it off\n slideoutDiv.off('mousedown', handleMousedown);\n }\n\n function handleKeyDown(event) {\n var elementsList = $('div.master-slideout :tabbable');\n\n var noOfElements = elementsList.length;\n if (event.keyCode == 9 && event.shiftKey === false) {\n if (event.target === elementsList[noOfElements - 1]) {\n\n event.preventDefault();\n\n // When the last element on the slideout is tabbed, do not focus on the slideout container - TPG recommendation\n // In some cases, the slideout container will not be in tabbable list at all. So first check if the first element is slideout container, then skip the tab on it\n if (elementsList[0].className.indexOf('sumt-slideout') > -1) {\n setTimeout(function () {\n elementsList[1].focus();\n });\n } else {\n elementsList[0].focus();\n }\n } else if (event.target.type == 'radio') {\n var nameAtt = event.target.getAttribute('name');\n if (elementsList[noOfElements - 1].type == 'radio' && elementsList[noOfElements - 1].getAttribute('name') == nameAtt) {\n event.preventDefault();\n elementsList[0].focus();\n }\n }\n } \n // Shift+tab logic\n else if (event.keyCode == 9 && event.shiftKey == true) {\n if (event.target === elementsList[1]) {\n event.preventDefault();\n\n if (elementsList[0].className.indexOf('sumt-slideout') > -1) {\n setTimeout(function () {\n elementsList[noOfElements - 1].focus();\n });\n } else {\n elementsList[0].focus();\n }\n } else if(event.target === elementsList[0]) {\n event.preventDefault();\n elementsList[noOfElements - 1].focus();\n }\n\n }\n }\n\n function bindEvents(slideout) {\n if (slideout) {\n //get the slideout container\n var slideoutContainer = $('div.sumt-slideout');\n\n /* If there is an iframe on this slideout, then apend a hidden element to the container so that iframe\n * has an element to move focus to. That way focus will remain within the slideout. Otherwise, focus shits to address bar after iframe.\n * Make sure the hidden element is added only once as this method gets called multiple times. */\n\n if (slideout.$options.hasIframe && $('#idHiddenButton').length <= 0) {\n\n var hiddenButton = document.createElement(\"button\");\n hiddenButton.id = \"idHiddenButton\";\n hiddenButton.setAttribute(\"style\", \"opacity: 0\");\n hiddenButton.setAttribute(\"aria-hidden\", \"true\");\n slideoutContainer[0].appendChild(hiddenButton);\n }\n $('.sumt-slideout').on('keydown', handleKeyDown);\n $('.sumt-slideout').on('mousedown', handleMousedown);\n }\n }\n\n function unbindEvents(slideout) {\n if (slideout && slideout.$options.maintainFocus) {\n $('.sumt-slideout').off('keydown', handleKeyDown);\n }\n }\n\n /**\n * A factory for creating a SumtotalSlideoutService constructor. (A factory for a factory, I suppose...)\n *\n * @param {any} $log\n * @param {any} $rootScope\n * @param {any} $templateRequest\n * @param {any} $timeout\n * @param {any} $q\n * @param {any} $compile\n */\n function SumTotalSlideoutServiceFactory($log, $rootScope, $templateRequest, $timeout, $q, $compile) {\n // These sections are defined in the default slideout template.\n var SECTIONS = {\n ALL_CONTENT: 'allcontent',\n HEADER: 'headersection',\n SIDE: 'sidecontent',\n EXPAND: 'expandcontent',\n FOOTER: 'footer'\n };\n\n /**\n * Slideout service.\n *\n * This service is defined as $slideout in the AngularJS module.\n */\n function SumTotalSlideoutService() {\n this.defaults = defaults;\n\n // State - Is the slideout view closed (not tracking an individual slideout but the view).\n this.closed = true;\n // The current Slideout object.\n this.currentSlideout = null;\n // The last opened slideout\n this.previousSlideout = null;\n // Hash of all the slideouts on the parent view.\n // NOTE - This will not include slideouts which are added from the compilation of a slideout's template.\n // Those slideouts will be defined on their parent's slideout 'children' property. That property is also a hash.\n this.slideouts = {};\n // Tracking all slideouts which have been opened since the last \"close\" was called. Used to clean up the view when \"close\" is actually called.\n this.openedSlideouts = [];\n // A slideout is pushed to the hiddenSlideouts when it is a slideout which was defined in the parent view and it in turn launches a slideout which was defined within its view.\n this.hiddenSlideouts = [];\n\n $rootScope.$on('$routeChangeStart', this._handleRouteChangeStart.bind(this));\n }\n\n // Grab the basic template for a slideout.\n var templateHTMLPromise = $templateRequest(MAIN_TEMPLATE_URL);\n\n /**\n * Load the basic slideout template along with either the template to be inserted into the slideout\n * or the HTML from the slideout directive's element.\n * @param {Slideout} slideout\n */\n function loadTemplates(slideout) {\n if (slideout.$options.templateUrl && slideout.$options.templateUrl.length > 0) {\n return $q.all([templateHTMLPromise, $templateRequest(slideout.$options.templateUrl)]);\n } else {\n return $q.all([templateHTMLPromise, $q.when(slideout.element)]);\n }\n }\n\n function getContainerClassFactory(scope, $slideout) {\n return function getContainerClass(slideout) {\n var retArgs = '';\n if (!$slideout.closed) {\n var previousKey = $slideout.previousSlideout && $slideout.previousSlideout.$options ? $slideout.previousSlideout.key : null;\n if (!previousKey && slideout && previousKey != slideout.key)\n retArgs += ' slideout-open';\n else\n retArgs += ' slideout-open-fade';\n } else {\n retArgs != 'slideout-closed';\n }\n if ($slideout.expand) {\n retArgs += ' slideout-fullopen';\n }\n if (slideout && slideout.$options.showCollapse && $slideout.collapsed) {\n retArgs += ' collapsed';\n }\n\n if (typeof (scope.$slideout.showHeader) != 'undefined' && !scope.$slideout.showHeader) {\n retArgs += ' slideout-displaytop';\n }\n return retArgs;\n };\n }\n\n SumTotalSlideoutService.prototype = {\n _handleRouteChangeStart: function routeChangeStartHandler() {\n $log.debug('Route is changing. Closing the slideout. This is default behavior defined in foundation.');\n this.closeCurrent();\n },\n /**\n *\n */\n $updateTemplate: function updateTemplate(slideout) {\n var htmlPromise = loadTemplates(slideout);\n\n return htmlPromise.then(function (results) {\n var elm = angular.element('div.master-slideout[key=\"' + slideout.key + '\"]'),\n outerSlideoutElm = angular.element(results[0]),\n innerSlideoutElm = angular.element('
').html(results[1]);\n\n if (elm.length === 0) {\n $log.info('Creating a master-slideout container.');\n\n elm = angular.element('
');\n\n $('body').append(elm);\n } else {\n $log.debug('Using the existing element for the slideout when updating the template. This is likely being done because the forceTemplateRecompile was set to true.');\n }\n\n if (slideout.$options.hasTemplate) {\n var innerSlideoutAllContentArea = innerSlideoutElm.find('div[name=' + SECTIONS.ALL_CONTENT + ']');\n\n if (innerSlideoutAllContentArea.length > 0) {\n outerSlideoutElm.find('div[name=' + SECTIONS.ALL_CONTENT + ']')\n .replaceWith(innerSlideoutAllContentArea);\n } else {\n $log.warn('Current slideout doesn\\'t have a div named \"allcontent\". Replacing with root.');\n\n outerSlideoutElm.find('div[name=' + SECTIONS.ALL_CONTENT + ']')\n .replaceWith(innerSlideoutElm);\n }\n } else {\n /*\n * This case would be when a developer placed a slideout on a view and placed the view within the slideout.\n * The slideout directive will pass through the HTML (it also removes it from the DOM). We're placing the HTML\n * into the slideout to be compiled's HTML structure.\n */\n\n // Notice the use of replaceWith here. This is done so that we're not double inserting DIVs (it replaces the placeholder).\n outerSlideoutElm.find('div[name=' + SECTIONS.HEADER + ']')\n .replaceWith(innerSlideoutElm.find('div[name=' + SECTIONS.HEADER + ']'));\n\n outerSlideoutElm.find('div[name=' + SECTIONS.SIDE + ']')\n .replaceWith(innerSlideoutElm.find('div[name=' + SECTIONS.SIDE + ']'));\n\n outerSlideoutElm.find('div[name=' + SECTIONS.EXPAND + ']')\n .replaceWith(innerSlideoutElm.find('div[name=' + SECTIONS.EXPAND + ']'));\n }\n\n // place in the new html\n elm.html(outerSlideoutElm);\n\n\n function createScope() {\n /*\n * Create a child scope for the slideout to operate in. This way we can dispose of all the child scopes when the slideout closes.\n * The only time a slideout wouldn't have a scope associated on its $options object is when someone forgot to pass it in when\n * using the service to instantiate a new slideout.\n */\n if (slideout.$options && slideout.$options.scope) {\n return slideout.$options.scope.$new();\n } else {\n return $rootScope.$new();\n }\n }\n\n var slideoutScope = null;\n\n if (!slideout.isChildSlideout) {\n slideout.$scope = slideoutScope = createScope();\n\n slideoutScope.$slideout = this;\n slideoutScope.$getSlideoutContainerClass = getContainerClassFactory(slideoutScope, this);\n } else {\n slideoutScope = $rootScope.$new(false, slideout.$options.parentScope);\n\n slideoutScope.$slideout = this;\n slideoutScope.$getSlideoutContainerClass = getContainerClassFactory(slideoutScope, this);\n }\n\n slideoutScope.$$slideout = slideout;\n\n $compile(elm.contents())(slideoutScope);\n }.bind(this));\n },\n /**\n * Internal use to open a slideout object\n *\n * @param {Boolean} fullopen If the slideout should be opened fully\n * @param {Slideout} slideout The slideout object to show\n * @param {SlideoutOptions|undefined} options Supplemental options for per-call overrides of slideout options\n */\n $openSlideout: function openSlideout(fullopen, slideout, options) {\n /*\n * When open is called here are the following cases that we need to cover:\n * - No slideout has been opened; we're opening a slideout for the first time. (CASE A)\n * - A slideout is currently opened (CASE B)\n * - the key of the slideout we're opening is DIFFERENT from the current (CASE B.a)\n * - AND the new slideout was NOT declared in the current slideout's template (CASE B.a.1)\n * - AND the new slideout WAS declared in the current slideout's template (CASE B.a.2)\n * - the key of the slideout we're opening is the SAME as the current (CASE B.b)\n *\n * CASE A is simple. Open the slideout\n *\n * CASE B:\n *\n * CASE B.a: Opening a new slideout\n *\n * CASE B.a.1:\n * The new slideout is not a child of the first. The current slideout is closed and the new one opened.\n *\n * CASE B.a.2\n * The new slideout was declared in the current slideout's template. This means that it likely will want\n * to access the scope of this slideout. We do not want to close and kill the current slideout. We want\n * to \"hide\" it and open the slideout.\n *\n * CASE B.b: Simply change the view from the fully opened view to the view where only the left side is visible.\n */\n\n // This is going to happen in any case so let's let everyone know we're about to open a slideout!\n $rootScope.$broadcast(ON_OPENING_EVENT_NAME, slideout);\n\n\n var openPromise = null;\n if (!this.currentSlideout) { // CASE A\n\n // update the properties on the slideout object AND the service\n this.collapsed = slideout.collapsed = slideout.$collapsed = false;\n this.closed = slideout.closed = slideout.$closed = false;\n this.expand = slideout.expand = slideout.$expand = fullopen;\n this.currentSlideout = slideout;\n\n openPromise = this.$updateTemplate(slideout).then(function () {\n //when slideout is partially open, then maintain focus based on the property sent by UI\n if (slideout.$options.maintainFocus) {\n bindEvents(slideout);\n }\n });\n } else if (this.currentSlideout.key !== slideout.key) { // CASE B.a\n $log.debug('Open Slideout - A slideout is opened (' +\n this.currentSlideout.key +\n ') a slideout is asking to be opened (' +\n slideout.key +\n ') fullopen: ' +\n fullopen.toString() +\n ' - slideout is the same as the current slideout:' +\n (this.currentSlideout === slideout).toString());\n\n if (this.currentSlideout.isChildSlideout) {\n // see if the slideout that is to be opened is in the stack of hidden slideouts.\n var parentSlideout = _.head(_.filter(this.hiddenSlideouts, {\n key: slideout.key\n }));\n\n if (parentSlideout) {\n // if the slideout to be opened IS in the hidden slideouts then we'll just close the current and reset the current to the hidden\n openPromise = this.closeCurrent().then(function () {\n _.remove(this.hiddenSlideouts, {\n key: parentSlideout.key\n });\n });\n } else {\n\n }\n } else if (this.currentSlideout.children[slideout.key] === undefined) { // CASE B.a.1 - check to see if the slideout is in the current slideout's children hash.\n // close the currently opened slideout.\n openPromise = this.closeCurrent();\n } else { // CASE B.a.2\n // Do not close the currently opened slideout, hide it.\n // Note, doing this on the slideout and not the service.\n this.currentSlideout.collapsed = this.currentSlideout.$collapsed = false;\n this.currentSlideout.closed = this.currentSlideout.$closed = true;\n this.currentSlideout.expand = this.currentSlideout.$expand = fullopen;\n\n // Push the current slideout onto a hidden stack.\n this.hiddenSlideouts.push(this.currentSlideout);\n }\n\n // We have to set these variables in either case.\n this.collapsed = slideout.collapsed = slideout.$collapsed = false;\n this.closed = slideout.closed = slideout.$closed = false;\n this.expand = slideout.expand = slideout.$expand = fullopen;\n this.currentSlideout = slideout;\n\n var doUpdateTemplate = function () {\n return this.$updateTemplate(slideout).then(function () {\n //when slideout is partially open, then maintain focus based on the property sent by UI\n if (slideout.$options.maintainFocus) {\n bindEvents(slideout);\n }\n });\n }.bind(this);\n\n if (openPromise) {\n openPromise.then(doUpdateTemplate);\n } else {\n // In either case we're going to open the slideout.\n openPromise = doUpdateTemplate();\n }\n } else { // CASE B.b\n $log.debug('CASE: Slideout is being requested to be opened is the same as the current slideout.');\n $log.debug('Open Slideout - A slideout is opened (' +\n this.currentSlideout.key +\n ') a slideout is asking to be opened (' +\n slideout.key +\n ') fullopen: ' +\n fullopen.toString() +\n ' - slideout is the same as the current slideout:' +\n (this.currentSlideout === slideout).toString());\n\n // update the properties on the slideout object AND the service\n this.collapsed = this.currentSlideout.collapsed = slideout.collapsed = this.currentSlideout.$collapsed = slideout.$collapsed = false;\n this.closed = this.currentSlideout.closed = slideout.closed = this.currentSlideout.$closed = slideout.$closed = false;\n this.expand = this.currentSlideout.expand = slideout.expand = this.currentSlideout.$expand = slideout.$expand = fullopen;\n\t\t\tthis.currentSlideout.$options = slideout.$options;\n\n /// set custom focus element using key and id\n if(this.currentSlideout.$options.key == \"WEB_PART_SLIDEOUT\")\n {\n if(this.currentSlideout.$options.labelId == \"widgetAdvancedEditHeading\")\n {\n this.currentSlideout.$options.focusElement = \"#advancedEdit\"\n } \n }\n\n if (options && options.forceTemplateRecompile) {\n // In either case we're going to open the slideout.\n openPromise = this.$updateTemplate(slideout).then(function () {\n //when slideout is partially open, then maintain focus based on the property sent by UI\n if (slideout.$options.maintainFocus) {\n bindEvents(slideout);\n }\n });\n } else {\n // hand back a dummy promise since we're not opening anything.\n openPromise = $q.when();\n }\n }\n\n // When we're done doing the opening of the slideout focus it and broadcast that we've opened a slideout.\n return openPromise.then(function () {\n\n // focus on the slideout elements only when accessing it through keyboard events. do not focus\n // when opening through mouseclicks unless they want to enforce focus\n \n focusSlideout(slideout.$options.focusElement, fullopen);\n\n this.openedSlideouts.push(slideout);\n\n // tell the world that the slideout is now opened\n $rootScope.$broadcast(ON_OPENED_EVENT_NAME, slideout);\n\n $log.debug('Current state on open:', {\n service: {\n collapsed: this.collapsed,\n closed: this.closed,\n expand: this.expand\n },\n currentSlideout: {\n key: this.currentSlideout.key,\n collapsed: this.currentSlideout.$collapsed,\n closed: this.currentSlideout.$closed,\n expand: this.currentSlideout.$expand\n },\n slideoutObj: {\n key: slideout.key,\n collapsed: slideout.$collapsed,\n closed: slideout.$closed,\n expand: slideout.$expand\n }\n });\n }.bind(this));\n },\n /**\n *\n */\n $closeSlideout: function closeSlideout(slideout) {\n var openedSlideouts = [];\n _.forEach(this.openedSlideouts, function (openedSlideout) {\n openedSlideouts.push(openedSlideout.key);\n });\n\n this.openedSlideouts = [];\n\n if (slideout.$scope !== undefined && slideout.$scope !== null && typeof slideout.$scope.$destroy === 'function') {\n slideout.$scope.$destroy();\n slideout.$scope = null;\n delete slideout.$scope;\n }\n\n if (this.hiddenSlideouts && this.hiddenSlideouts.length > 0) {\n _.forEach(this.hiddenSlideouts, function (hiddenSlideout) {\n if (hiddenSlideout.$scope !== undefined && hiddenSlideout.$scope !== null && typeof hiddenSlideout.$scope.$destroy === 'function') {\n hiddenSlideout.$scope.$destroy();\n hiddenSlideout.$scope = null;\n delete hiddenSlideout.$scope;\n }\n });\n }\n\n this.hiddenSlideouts = [];\n\n return $q(function (resolve, reject) {\n // tried to use the transition end code and it wasn't firing. Odd.\n $rootScope.$applyAsync(function () {\n $timeout(function () {\n _.forEach(openedSlideouts, function (openedSlideout) {\n var elm = angular.element('div[key=\"' + openedSlideout + '\"]');\n elm.remove();\n resolve();\n });\n }, 250);\n });\n });\n },\n /**\n *\n */\n getCurrent: function () {\n return this.currentSlideout;\n },\n /**\n * Close the current slideout. This will remove the slideout from the DOM, any of its child slideouts will be removed as well.\n */\n closeCurrent: function closeCurrentSlideout(suppressEvents) {\n // current slideout, then be done.\n if (!this.currentSlideout) return $q.when();\n this.currentSlideout.isCloseEnabled = true;\n $log.debug('Closing the current slideout:', this.currentSlideout);\n\n if (suppressEvents !== true) {\n $rootScope.$broadcast(ON_CLOSING_EVENT_NAME, this.currentSlideout);\n }\n\n // Closing the current slideout means we're not showing any slideout set the state variables on the\n // slideout object AND the service.\n this.collapsed = this.currentSlideout.collapsed = this.currentSlideout.$collapsed = false;\n this.closed = this.currentSlideout.closed = this.currentSlideout.$closed = true;\n this.expand = this.currentSlideout.expand = this.currentSlideout.$expand = false;\n\n this.previousSlideout = this.currentSlideout;\n this.currentSlideout = null;\n\n if (this.previousSlideout.collapsible) {\n this.previousSlideout.$collapsed = false;\n }\n\n unbindEvents(this.previousSlideout);\n\n // Get the handle to the source element that triggered the slideout open\n var returnElementHandle = \"\";\n\t\t try {\n returnElementHandle = $(this.sourceElementId);\n } catch (e) {\n returnElementHandle = '#layoutContainer';\n }\t\t \n // If UI passed in the focus return element specifically, use it\n if (this.previousSlideout.$options.focusReturnElement)\n returnElementHandle = $(this.previousSlideout.$options.focusReturnElement);\n \n return this.$closeSlideout(this.previousSlideout).then(function () {\n // Return focus to the source element\n if (returnElementHandle != null && returnElementHandle.length > 0)\n {\n $timeout(function () {\n returnElementHandle[0].focus();\n }, 250);\n }\n\n if (suppressEvents !== true) {\n if (this.previousSlideout && typeof this.previousSlideout.onClose === 'function') this.previousSlideout.onClose();\n $rootScope.$broadcast(ON_CLOSED_EVENT_NAME, this.previousSlideout);\n }\n }.bind(this));\n },\n maintainFocus: function () {\n\n },\n /**\n * Toggles a slideout's state.\n *\n * @param {Slideout} slideout\n * @param {String} state\n * @param {SlideoutOptions|undefined} options Supplemental options for per-call overrides of slideout options\n */\n toggleSlideout: function toggleSlideout(slideout, state, options) {\n switch (state) {\n // Open a slideout where just the left most portion is visible and on collapse of the expanded slide out\n case \"open\":\n $log.debug('Opening the slideout:', slideout.key);\n if (this.currentSlideout && !this.currentSlideout.isCloseEnabled) {\n $rootScope.$broadcast(ON_COLLAPSED_EVENT_NAME, this.currentSlideout);\n return;\n }\n this.$openSlideout(false, slideout, options);\n\n if (slideout && typeof slideout.onOpen === 'function') {\n slideout.onOpen.call(slideout);\n }\n break;\n\n // Close the slideout view; No slideouts will be open ( we don't stack slideouts)\n case \"close\":\n /*\n * Whenever close is called we're going to close the slideout view. That means that any slideouts, regardless of\n * if they were declared from the parent view or from within the current slideout's template must be cleaned up.\n */\n\n if (!this.currentSlideout) return;\n\n var slideoutToClose = this.currentSlideout;\n $rootScope.$broadcast(ON_CLOSING_EVENT_NAME, this.currentSlideout);\n this.closeCurrent(true);\n\n this.currentSlideout = null;\n this.previousSlideout = null;\n\n this.collapsed = slideoutToClose.collapsed = slideoutToClose.$collapsed = false;\n this.closed = slideoutToClose.closed = slideoutToClose.$closed = true;\n this.expand = slideoutToClose.expand = slideoutToClose.$expand = false;\n\n this.$closeSlideout(slideoutToClose);\n\n $rootScope.$broadcast(ON_CLOSED_EVENT_NAME, slideoutToClose);\n if (slideout && typeof slideout.onClose === 'function') {\n slideout.onClose.call(slideout);\n }\n break;\n\n // Make the slideout be fully opened.\n case \"fullopen\":\n $log.debug('Fully opening the slideout: ', slideout.key);\n\n this.$openSlideout(true, slideout, options);\n\n if (slideout && typeof slideout.onOpen === 'function') {\n slideout.onOpen.call(slideout);\n }\n break;\n case \"collapse\":\n $log.debug('Collapsing slideout:', slideout.key);\n if (!slideout.$options.maintainFocus) {\n unbindEvents(slideout);\n }\n\n this.collapsed = slideout.collapsed = slideout.$collapsed = true;\n this.closed = slideout.closed = slideout.$closed = true;\n this.expand = slideout.expand = slideout.$expand = false;\n\n $timeout(function () {\n angular.element('#btnExpand').trigger('focus');\n }, 500);\n }\n },\n getSlideOut: function getSlideout(slideoutKey) {\n if (typeof slideoutKey === 'string') {\n var slideout = this.slideouts[slideoutKey];\n if (slideout === undefined && this.currentSlideout) {\n slideout = this.currentSlideout.children[slideoutKey];\n }\n return slideout;\n } else {\n return undefined;\n }\n },\n addSlideOut: function addSlideout(slideout) {\n if (typeof slideout === 'object' && slideout.$options && slideout.key !== undefined && slideout.key !== null) {\n // check to see if we're dealing with a child slideout\n if (slideout.isChildSlideout) { // if we're dealing with a child slideout then we'll add the slideout to the collection of its parent.\n this.currentSlideout.children[slideout.key] = slideout;\n } else {\n if (this.slideouts[slideout.key] !== undefined) {\n $log.warn('A slideout with the key ' + slideout.key + ' has already been added!');\n }\n\n this.slideouts[slideout.key] = slideout;\n }\n }\n },\n /**\n * Open a slideout. Can be invoked with the key of the slideout, the Slideout object,\n * or an adhoc object containing the basic slideout info.\n *\n * @param {String|Slideout|any} slideoutKey\n * @param {?} targetSource\n * @param {String} state\n * @param {SlideoutOptions|undefined} options Supplemental options for per-call overrides of slideout options\n */\n open: function openSlideout(slideoutKey, targetSource, state, options) {\n\n this.isKeyboardEvent = false;\n this.sourceElementId = '#layoutContainer';\n\n if(typeof event !== 'undefined' && typeof event !== 'null') {\n // check if it's a keypress event, there will be a valid keyCode\n if (event && event.keyCode) {\n this.isKeyboardEvent = true;\n }\n // Get the id of the element that triggered the slideout\n if (event.currentTarget && event.currentTarget.id)\n this.sourceElementId = '#' + event.currentTarget.id;\n }\n var slideout = null;\n if (typeof slideoutKey === 'string') {\n // opening a slideout by a registered key\n slideout = this.getSlideOut(slideoutKey);\n } else if (typeof slideoutKey === 'object' && slideoutKey.$options && slideoutKey.key) {\n //opening a slideout by a registered slideout object\n slideout = slideoutKey;\n } else if (typeof slideoutKey === 'object' && slideoutKey.$options === undefined) {\n // Opening a slideout in an adhoc fashion\n if (slideoutKey.key === undefined) return; // Can't open a slideout without a key.\n var Slideout = SlideoutFactory(this);\n\n slideout = new Slideout(undefined, slideoutKey);\n\n if (!slideout.$options.showLeftSide) {\n state = 'fullopen';\n }\n }\n\n if (!slideout) return;\n\n if (state === 'fullopen')\n slideout.$options.isPartialSlideout = false;\n else\n slideout.$options.isPartialSlideout = true;\n\n if (state === undefined) {\n // toggle slideout should focus the slideout when the 'open' state is used.\n this.toggleSlideout(slideout, 'open', options);\n } else {\n this.toggleSlideout(slideout, state, options);\n }\n },\n fullOpen: function openSlideoutFull(slideoutKey, options) {\n this.open(slideoutKey, undefined, 'fullopen', options);\n },\n close: function closeSlideout() {\n /*\n var mySlideout = $slideout.getSlideout('MY_SLIDEOUT_KEY');\n mySlideout.closeClicked = function () {\n if(iDontWantToClose) {\n return false;\n }\n };\n // or\n mySlideout.isCloseEnabled = false;\n */\n if (!this.currentSlideout) return;\n if (!this.currentSlideout.isCloseEnabled) {\n $rootScope.$broadcast(ON_CLOSING_EVENT_NAME, this.currentSlideout);\n return;\n }\n if (this.currentSlideout.closeClicked && typeof this.currentSlideout.closeClicked === 'function') {\n var dontPreventClose = true;\n try {\n dontPreventClose = this.currentSlideout.closeClicked();\n } catch (e) {\n $log.error('Error in the close click handler.', e);\n }\n\n if (dontPreventClose === false || dontPreventClose === undefined) this.toggleSlideout(undefined, 'close');\n } else {\n this.toggleSlideout(undefined, 'close');\n }\n },\n collapse: function collapseSlideout(slideoutKey) {\n $log.debug('Collapsing slideout.');\n var slideout = null;\n if (typeof slideoutKey === 'string') {\n slideout = this.slideouts[slideoutKey];\n } else if (typeof slideoutKey === 'object' && slideoutKey.$options && slideoutKey.key) {\n slideout = slideoutKey;\n }\n if (this.currentSlideout && !this.currentSlideout.isCloseEnabled) {\n $rootScope.$broadcast(ON_COLLAPSED_EVENT_NAME, this.currentSlideout);\n return;\n }\n this.toggleSlideout(slideout, 'collapse');\n },\n\t\tescapeSlideout: function escapeSlideout(keyEvent){\n\t\t\tif(keyEvent.keyCode == 27)\n\t\t\tthis.close();\n\t\t}\n };\n\n SumTotalSlideoutService.prototype.getSlideout = SumTotalSlideoutService.prototype.getSlideOut;\n SumTotalSlideoutService.prototype.addSlideout = SumTotalSlideoutService.prototype.addSlideOut;\n\n /**\n *\n */\n SumTotalSlideoutService.prototype.EVENT_KEYS = SumTotalSlideoutService.EVENT_KEYS = {\n ON_OPENING_EVENT_NAME: ON_OPENING_EVENT_NAME,\n ON_OPENED_EVENT_NAME: ON_OPENED_EVENT_NAME,\n ON_CLOSING_EVENT_NAME: ON_CLOSING_EVENT_NAME,\n ON_CLOSED_EVENT_NAME: ON_CLOSED_EVENT_NAME,\n ON_COLLAPSED_EVENT_NAME: ON_COLLAPSED_EVENT_NAME\n };\n\n return new SumTotalSlideoutService();\n }\n\n // Deine the service getter. Assign the items that are being injected into the service factory function.\n this.$get = [\n '$log',\n '$rootScope',\n '$templateRequest',\n '$timeout',\n '$q',\n '$compile',\n SumTotalSlideoutServiceFactory\n ];\n }\n\n function SumTotalSlideout($log, Slideout, $slideout) {\n function slideoutCompile(element, attrs) {\n var slideout;\n\n // Directive options\n var options = {};\n angular.forEach(['labelId', 'templateUrl', 'key', 'focusElement', 'class', 'focusReturnElement', 'isConfigSlide'], function (key) {\n if (angular.isDefined(attrs[key])) options[key] = attrs[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['maintainFocus', 'showLeftSide', 'showCollapse', 'hasIframe', 'forceFocus'], function (key) {\n if (angular.isDefined(attrs[key])) {\n if (falseValueRegExp.test(attrs[key])) {\n options[key] = false;\n } else {\n options[key] = true;\n }\n }\n });\n\n if (attrs.focusElement !== undefined) delete attrs.focusElement;\n\n // Create a new Slideout object to track in the service.\n slideout = new Slideout(element.html(), options);\n\n slideout.isChildSlideout = $slideout.expand || !$slideout.closed;\n\n // Remove any content inside the directive's element. It we'll be placing that within the slideout template.\n element.children().remove();\n\n // Register the slideout with the provider\n $slideout.addSlideout(slideout);\n\n // Return the post link function.\n return slideoutPostLink;\n }\n\n /**\n *\n * @param {Scope} scope\n * @param {HTMLElement} element\n * @param {string[]} attrs\n */\n function slideoutPostLink(scope, element, attrs) {\n if (angular.isDefined(attrs.key)) {\n var slideout = $slideout.getSlideout(attrs.key);\n\n if (slideout) {\n slideout.$options.scope = scope;\n slideout.$options.parentScope = scope.$parent;\n }\n }\n }\n\n return {\n restrict: 'EA',\n compile: slideoutCompile,\n };\n }\n\n angular.module(\"SumTotalSlideOutModule\", ['SumTotalComponents.Helpers'])\n .factory('slideoutOptionsFactory', SlideoutOptionsFactory)\n .factory('slideoutFactory', [\n '$slideout',\n SlideoutFactory\n ])\n .provider('$slideout', [\n SumTotalSlideoutProvider\n ])\n .directive('slideout', [\n '$log',\n 'slideoutFactory',\n '$slideout',\n SumTotalSlideout\n ]);\n}));\n\n(function (root, factory) {\n 'use strict';\n\n factory(root.angular);\n}(this, function (angular) {\n 'use strict';\n\n var KEY_CODES = {\n ENTER: 13,\n SPACE: 32\n };\n\n angular.module(\"SumTotalSectionModule\", [])\n // The accordion directive simply sets up the directive controller\n // and adds an accordion CSS class to itself element.\n .directive('sumtSection', [function () {\n return {\n restrict: 'EA',\n transclude: true,\n replace: false,\n scope: {\n heading: '@',\n expandedIconClass: '@',\n collapsedIconClass: '@',\n appliedListElement: '@?',\n contextualClass: '@'\n },\n templateUrl: 'section/section_view.html',\n link: function (scope, element, attrs) {\n var allowedContextualClasses = ['primary', 'success', 'info', 'warning', 'danger'];\n\n if (angular.isDefined(attrs.id)) {\n scope.panelId = attrs.id + '_panel';\n }\n\n function changeState() {\n scope.isCollapsed = !scope.isCollapsed;\n }\n\n function handleClick() {\n changeState();\n }\n\n function handleKeyUp(evt) {\n if (evt.keyCode === KEY_CODES.ENTER || evt.keyCode === KEY_CODES.SPACE) {\n\n if (evt.preventDefault) evt.preventDefault();\n if (evt.stopPropagation) evt.stopPropagation();\n\n changeState();\n }\n }\n\n scope.isCollapsed = false;\n\n scope.$click = handleClick;\n scope.$keyUp = handleKeyUp;\n\n scope.heading = attrs.heading;\n scope.headerToggleOpen = scope.expandedIconClass !== undefined && scope.expandedIconClass !== '' ? scope.expandedIconClass : 'fa fa-caret-down';\n scope.headerToggleClosed = scope.collapsedIconClass !== undefined && scope.collapsedIconClass !== '' ? scope.collapsedIconClass : 'fa fa-caret-right';\n\n scope.setPanelClass = function () {\n var panelClass = 'panel',\n contextualClass = allowedContextualClasses.indexOf(scope.contextualClass) > -1 ? scope.contextualClass : 'primary';\n\n if (scope.contextualClass) {\n panelClass += ' ' + (contextualClass.indexOf('panel-') >= 0 ? contextualClass : ('panel-' + contextualClass));\n } else {\n panelClass += ' panel-default';\n }\n\n scope.panelClass = panelClass;\n };\n\n //setup the class\n scope.setPanelClass();\n }\n };\n }]);\n}));\n\nangular.module(\"SumTotalStarRating\", [])\n .directive('starRating', function () {\n return {\n restrict: 'EA',\n replace: false,\n transclude: true,\n scope: {\n averageRatingValue: \"@\",\n userRatingValue: \"@\",\n colorValue: \"@\",\n fromSearch: \"@\",\n\t\tscreenReader: \"@\",\n\t\tscreenReaderValue:'@'\n },\n templateUrl: 'starRating/starRatingTemplate.html',\n link: function (scope, element, attrs) {\n\t\tif (angular.isUndefined(scope.fromSearch))\n\t\t{\n\t\t\tscope.fromSearch=false;\n\t\t}\n\t\tif (scope.screenReaderValue)\n\t\t{\n\t\t\tscope.screenreaderValue=scope.screenReaderValue;\n\t\t}\n scope.userRating = function () {\n if (scope.userRatingValue && scope.userRatingValue != '' && scope.userRatingValue != 0) {\n scope.ratingValue = scope.userRatingValue;\n var elements = angular.element(element).find('.star-yellow');\n for (var i = 0; i < Number(scope.userRatingValue); i++)\n angular.element(elements[i]).addClass(\"star-blue\");\n }\n }\n scope.$watch('averageRatingValue', function () {\n scope.ratingValue = scope.averageRatingValue;\n });\n\n scope.averageRating = function () {\n if (scope.userRatingValue && scope.userRatingValue != '' && scope.userRatingValue != 0) {\n scope.ratingValue = scope.averageRatingValue;\n var elements = angular.element(element).find('.star-blue').removeClass(\"star-blue\");\n }\n }\n }\n }\n\n });\n\n/* jshint strict:false */\nangular.module(\"SumTotalTabModule\", [])\n.controller('tabctrl', [\"$scope\", function ($scope) {\n $scope.tabs = [\n {\n \"title\": \"Home\",\n \"content\": \"Dat raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica.\"\n },\n {\n \"title\": \"Profile\",\n \"content\": \"Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee.\"\n },\n {\n \"title\": \"About\",\n \"content\": \"Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade.\"\n },\n {\n \"title\": \"Contact\",\n \"content\": \"Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid.\"\n }\n ];\n}]);\n\n/*\n Example use: \nparameters:\n percentcomplete: percentage value 0-100\n progressclass: used to change the color. ex: progress-bar-danger\n showInline: true or false - show the progress text inline or separately.\n*/\n\nangular.module(\"SumTotalSumtProgressBar\", [])\n .directive('sumtProgressBar', function () {\n return {\n restrict: 'AE',\n replace: false,\n templateUrl: 'sumtprogressbar/sumtprogressbar.html',\n scope: {\n percentcomplete: '=',\n progressclass: '@',\n showInline: '='\n },\n link: function (scope, element, attrs) {\n\n scope.showProgessInline = function () {\n return (attrs.showInline === undefined) ? true : scope.showInline;\n }\n }\n }\n });\n\n/* jshint strict:false */\nangular.module(\"SumTotalTimeline\", [])\n .directive('sumtTimeline', [\"$filter\", function ($filter) {\n return {\n restrict: 'EA',\n transclude: true,\n scope: {\n data: '=',\n config: '=',\n hasFilter: '@',\n highlight: '@'\n },\n templateUrl: 'timeline/timeline_view.html',\n link: function (scope, element, attrs) { // jshint ignore:line\n scope.filter = attrs.hasFilter !== undefined && attrs.hasFilter === 'false' ? attrs.hasFilter : true;\n scope.nodes = [];\n scope.tabs = [];\n scope.selectedTab;\n scope.date = new Date();\n scope.compDate = $filter('date')(scope.date, \"MM/dd/yyyy\");\n scope.addDataNode = function (data) {\n scope.nodes.push(data);\n };\n\n scope.setConfig = function (config) {\n scope.tabs.push(config);\n };\n\n if (scope.config !== undefined) {\n angular.forEach(scope.config, function (item) {\n scope.setConfig(item);\n });\n scope.selectedTab = scope.tabs[0];\n }\n\n if (attrs.stagger !== undefined && attrs.stagger === 'false') {\n scope.stagger = false;\n } else {\n scope.stagger = true;\n }\n\n if (attrs.highlight !== undefined && attrs.highlight === 'false') {\n scope.highlight = false;\n } else {\n scope.highlight = true;\n }\n\n scope.setTabSelection = function(tab){\n scope.selectedTab = tab;\n scope.nodes = [];\n angular.forEach(scope.data, function (item) {\n if(item.type == tab.type || tab.type == 'all')\n scope.nodes.push(item);\n });\n }\n }\n };\n }\n ]);\n\n/* jshint strict:false */\nangular.module(\"SumTotalTooltipModule\", [])\n.controller(\"toolTipControl\", [\"$scope\", function ($scope) {\n $scope.dynamicTooltip = \"Hello, World!\";\n $scope.dynamicTooltipText = \"dynamic\";\n $scope.htmlTooltip = \"I've been made bold!\";\n}]);\n\n/* jshint strict:false */\nangular.module(\"SumTotalWebpartModule\", [])\n .directive('sumtWebpart', function () {\n return {\n restrict: \"A\",\n scope: true,\n replace: false,\n templateUrl: 'webparts/webpartcontainer_view.html',\n transclude: true,\n link: function (scope, element, attrs) {\n\n //var defaultClass = 'sumt-webpart-header ';\n var headerClass = attrs.headerClass === '' || attrs.headerClass === undefined ? '' : attrs.headerClass;\n\n scope.headerTitle = attrs.headerTitle !== '' && attrs.headerTitle !== undefined ? attrs.headerTitle : '';\n scope.headerClass = headerClass;\n\n scope.headerIcon = attrs.headerIcon !== '' && attrs.headerIcon !== undefined ? attrs.headerIcon : '';\n\n scope.hideHeader = attrs.hideHeader !== '' && attrs.hideHeader !== undefined ? attrs.hideHeader : false;\n //console.log(scope.headerUrl);\n scope.headerUrl = attrs.headerUrl !== '' && attrs.headerUrl !== undefined ? attrs.headerUrl : false;\n scope.hideDeeplink = attrs.hideDeeplink !== '' && attrs.hideDeeplink !== undefined && attrs.hideDeeplink.toLowerCase() == 'true' ? true : false;\n scope.contentWidth = attrs.contentWidth !== '' && attrs.contentWidth !== undefined ? attrs.contentWidth : undefined;\n scope.contentHeight = attrs.contentHeight !== '' && attrs.contentHeight !== undefined ? attrs.contentHeight : undefined;\n scope.contentClass = attrs.contentClass !== '' && attrs.contentClass !== undefined ? attrs.contentClass : undefined;\n\n scope.widthObj = {\n width: scope.contentWidth\n };\n scope.heightObj = {\n height: scope.contentHeight\n };\n if (!scope.hideDeeplink) {\n scope.handleHeaderClick = function () {\n window.eval(scope.headerUrl); // jshint ignore:line\n };\n }\n if (scope.headerUrl !== '' && scope.headerUrl !== undefined && !scope.hideDeeplink) {\n scope.headerLinkIcon = 'fa fa-external-link-square';\n scope.headerStyleObj = {\n cursor: \"pointer\"\n };\n //element.on(\"click\", function () { window.eval(scope.headerUrl); });\n }\n }\n };\n });\n\n/* jshint strict:false */\n\nangular.module('SumTotalTypeahead', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions'])\n\n.provider('$sumttypeahead', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'typeahead',\n prefixEvent: '$sumttypeahead',\n placement: 'bottom-left',\n template: 'typeahead/typeahead.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n minLength: 1,\n filter: 'filter',\n limit: 6,\n comparator: ''\n };\n\n this.$get = function ($window, $rootScope, $tooltip, $timeout) {\n\n function TypeaheadFactory(element, controller, config) {\n\n var $sumttypeahead = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $sumttypeahead = $tooltip(element, options);\n var parentScope = config.scope;\n var scope = $sumttypeahead.$scope;\n\n scope.$resetMatches = function () {\n scope.$matches = [];\n scope.$activeIndex = -1;\n };\n scope.$resetMatches();\n\n scope.$activate = function (index) {\n scope.$$postDigest(function () {\n $sumttypeahead.activate(index);\n });\n };\n\n scope.$select = function (index) {\n scope.$$postDigest(function () {\n $sumttypeahead.select(index);\n });\n };\n\n scope.$isVisible = function () {\n return $sumttypeahead.$isVisible();\n };\n\n // Public methods\n\n $sumttypeahead.update = function (matches) {\n scope.$matches = matches;\n if (scope.$activeIndex >= matches.length) {\n scope.$activeIndex = -1;\n }\n return true;\n };\n\n $sumttypeahead.activate = function (index) {\n scope.$activeIndex = index;\n };\n\n $sumttypeahead.select = function (index) {\n var value = scope.$matches[index].value;\n // console.log('$setViewValue', value);\n controller.$setViewValue(value);\n controller.$render();\n scope.$resetMatches();\n if (parentScope) parentScope.$digest();\n // Emit event\n scope.$emit(options.prefixEvent + '.select', value, index, $sumttypeahead);\n };\n\n // Protected methods\n\n $sumttypeahead.$isVisible = function () {\n if (!options.minLength || !controller) {\n return !!scope.$matches.length;\n }\n // minLength support\n return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength;\n };\n\n $sumttypeahead.$getIndex = function (value) {\n var l = scope.$matches.length,\n i = l;\n if (!l) return;\n for (i = l; i--;) {\n if (scope.$matches[i].value === value) break;\n }\n if (i < 0) return;\n return i;\n };\n\n $sumttypeahead.$onMouseDown = function (evt) {\n // Prevent blur on mousedown\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n $sumttypeahead.$onKeyDown = function (evt) {\n if (!/(38|40|13)/.test(evt.keyCode)) return;\n\n // Let ngSubmit pass if the typeahead tip is hidden\n if ($sumttypeahead.$isVisible() && evt.keyCode !== 13) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // Select with enter\n if (evt.keyCode === 13 && scope.$matches.length && scope.$activeIndex >= 0) {\n $sumttypeahead.select(scope.$activeIndex);\n } else if (evt.keyCode === 13 && scope.$matches.length && scope.$activeIndex >= 0) {\n return;\n } else if (evt.keyCode === 38 && scope.$activeIndex > 0) scope.$activeIndex--; // Navigate with keyboard\n else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) scope.$activeIndex++;\n else if (angular.isUndefined(scope.$activeIndex)) scope.$activeIndex = 0;\n scope.$digest();\n };\n\n // Overrides\n\n var show = $sumttypeahead.show;\n $sumttypeahead.show = function () {\n show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n $sumttypeahead.$element.on('mousedown', $sumttypeahead.$onMouseDown);\n if (options.keyboard) {\n element.on('keydown', $sumttypeahead.$onKeyDown);\n }\n }, 0, false);\n };\n\n var hide = $sumttypeahead.hide;\n $sumttypeahead.hide = function () {\n $sumttypeahead.$element.off('mousedown', $sumttypeahead.$onMouseDown);\n if (options.keyboard) {\n element.off('keydown', $sumttypeahead.$onKeyDown);\n }\n hide();\n };\n\n return $sumttypeahead;\n\n }\n\n TypeaheadFactory.defaults = defaults;\n return TypeaheadFactory;\n\n };\n\n this.$get.$inject = ['$window', '$rootScope', '$tooltip', '$timeout'];\n})\n\n.directive('sumtTypeahead', ['$window', '$parse', '$q', '$sumttypeahead', '$parseOptions',\n function ($window, $parse, $q, $sumttypeahead, $parseOptions) {\n\n var defaults = $sumttypeahead.defaults;\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink(scope, element, attr, controller) {\n\n // Directive options\n var options = {\n scope: scope\n };\n angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'filter', 'limit', 'minLength', 'watchOptions', 'selectMode', 'comparator', 'id'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Build proper ngOptions\n var filter = options.filter || defaults.filter;\n var limit = options.limit || defaults.limit;\n var comparator = options.comparator || defaults.comparator;\n\n var ngOptions = attr.ngOptions;\n if (filter) ngOptions += ' | ' + filter + ':$viewValue';\n if (comparator) ngOptions += ':' + comparator;\n if (limit) ngOptions += ' | limitTo:' + limit;\n var parsedOptions = $parseOptions(ngOptions);\n\n // Initialize typeahead\n var typeahead = $sumttypeahead(element, controller, options);\n\n // Watch options on demand\n if (options.watchOptions) {\n // Watch ngOptions values before filtering for changes, drop function calls\n var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').replace(/\\(.*\\)/g, '').trim();\n scope.$watch(watchedOptions, function () {\n // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue);\n parsedOptions.valuesFn(scope, controller).then(function (values) {\n typeahead.update(values);\n controller.$render();\n });\n }, true);\n }\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue) {\n // console.warn('$watch', element.attr('ng-model'), newValue);\n scope.$modelValue = newValue; // Publish modelValue on scope for custom templates\n parsedOptions.valuesFn(scope, controller)\n .then(function (values) {\n // Prevent input with no future prospect if selectMode is truthy\n // @TODO test selectMode\n if (options.selectMode && !values.length && newValue.length > 0) {\n controller.$setViewValue(controller.$viewValue.substring(0, controller.$viewValue.length - 1));\n return;\n }\n if (values.length > limit) values = values.slice(0, limit);\n var isVisible = typeahead.$isVisible();\n isVisible && typeahead.update(values);\n // Do not re-queue an update if a correct value has been selected\n if (values.length === 1 && values[0].value === newValue) return;\n !isVisible && typeahead.update(values);\n // Queue a new rendering that will leverage collection loading\n controller.$render();\n });\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var displayValue = parsedOptions.displayValue(modelValue);\n return displayValue === undefined ? '' : displayValue;\n });\n\n // Model rendering in view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n if (controller.$isEmpty(controller.$viewValue)) return element.val('');\n var index = typeahead.$getIndex(controller.$modelValue);\n var selected = angular.isDefined(index) ? typeahead.$scope.$matches[index].label : controller.$viewValue;\n selected = angular.isObject(selected) ? parsedOptions.displayValue(selected) : selected;\n element.val(selected ? selected.toString().replace(/<(?:.|\\n)*?>/gm, '').trim() : '');\n };\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (typeahead) typeahead.destroy();\n options = null;\n typeahead = null;\n });\n\n }\n };\n\n}]);\n\n /*\n\n \\param activeStep - current active step of the wizard\n \\param onSelectedStep - optional function property used to access the selected step of the wizard when clickable\n \\param stepData - array of objects required for the wizard\n - example object:\n {\n stepNum: 0,\n stepName: '',\n stepSubName: '',\n stepDisabled: false,\n stepCompleted: false,\n focusId: ''\n }\n \\param nextStep - currently not used\n \\param prevStep - currently not used\n \\param clickable - optional property used to set whether the wizard is clickable or not\n \\param translations = optional object that can be parsed to allow translated values to be used for the accessibile labels\n - example object:\n {\n labelText: 'Steps',\n stepText: 'Step',\n ofText: 'of',\n completedText: 'Completed',\n notCompletedText: 'Not yet completed',\n currentText: 'Current'\n }\n\n */\n /* jshint strict:false */\n angular.module(\"SumTotalWizard\", [])\n .directive('sumtWizard', ['$timeout', function ($timeout) {\n return {\n restrict: 'EA',\n replace: false,\n transclude: false,\n templateUrl: 'wizard/wizardsteps_view.html',\n scope: {\n activeStep: '=',\n onSelectedStep: '&',\n nextStep: '=',\n prevStep: '=',\n stepData: '=',\n clickable: '=?'\n },\n link: function (scope, element, attrs) { // jshint ignore:line\n scope.stepCount = attrs.numSteps;\n scope.allStepsOpen = true;\n scope.selectedStep = scope.activeStep;\n\n if(angular.isUndefined(scope.clickable)) {\n scope.clickable = false;\n }\n\n // default values for translations\n scope.translations = {\n labelText: 'Steps',\n stepText: 'Step',\n ofText: 'of',\n completedText: 'Completed',\n notCompletedText: 'Not yet completed',\n currentText: 'Current'\n }\n\n //set translations if parsed in\n if(angular.isDefined(attrs.translations)){\n scope.translations = attrs.translations\n var keys = Object.keys(_settings.translations);\n angular.forEach(keys, function(v, i) {\n if(angular.isDefined(attrs.translations[v])) {\n attrs.translations[v] = scope.translations[v];\n }\n })\n }\n\n scope.$watch('activeStep', function(newValue, oldValue) {\n if (newValue && newValue > 0) {\n scope.selectedStep = newValue;\n scope.onSelectedStep({ selectedStep: scope.selectedStep });\n scope.focusElement();\n }\n }, true);\n\n if(angular.isUndefined(scope.stepData)) {\n scope.stepData = [];\n\n for (var i = 1; i <= attrs.numSteps; i++) {\n\t\t\t\t\t\t\tvar step = {\n\t\t\t\t\t\t\t\tstepNum: i,\n stepName: '',\n stepSubName: '',\n stepDisabled: false,\n stepCompleted: false,\n focusId: ''\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tscope.stepData.push(step);\n\t\t\t\t\t\t}\n }\n\n angular.forEach(scope.stepData, function(v, i) {\n if(angular.isUndefined(v.stepDisabled)) {\n v.stepDisabled = true;\n }\n if(v.stepDisabled) {\n scope.allStepsOpen = false;\n }\n if(angular.isUndefined(v.stepCompleted)) {\n v.stepCompleted = false;\n }\n })\n\n\t\t\t\t/*\tif(scope.stepData!=null)\n\t\t\t\t\t{\n\t\t\t\t\t\t\tangular.forEach(scope.stepData, function(value, key) {\n\t\t\t\t\t\t\t\t\tvar step = {\n\t\t\t\t\t\t\t\t\tstepNum: value.stepNum,\n stepName: value.stepName\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tscope.stepArray.push(step);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var i = 1; i <= attrs.numSteps; i++) {\n\t\t\t\t\t\t\tvar step = {\n\t\t\t\t\t\t\t\tstepNum: i,\n stepName: ''\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tscope.stepArray.push(step);\n\t\t\t\t\t\t}\n\t\t\t\t\t}*/\n\n if (attrs.allowDisable !== undefined) {\n scope.disabled = true;\n } else {\n scope.disabled = false;\n }\n\n scope.nextStep = function () {\n if (scope.activeStep < scope.stepCount) {\n scope.activeStep += 1;\n }\n };\n\n scope.prevStep = function () {\n if (scope.activeStep > 1) {\n scope.activeStep -= 1;\n }\n };\n\n scope.focusElement = function() {\n $timeout(function () {\n var step = scope.stepData[scope.selectedStep - 1];\n if(angular.isDefined(step) && angular.isDefined(step.focusId) && step.focusId.length > 0) {\n $('#' + step.focusId).focus();\n }\n }, 500);\n }\n\n scope.goToStep = function(step) {\n if(angular.isDefined(step) && scope.clickable && (!step.stepDisabled || step.stepNum == scope.activeStep)) {\n scope.selectedStep = step.stepNum;\n scope.onSelectedStep({ selectedStep: scope.selectedStep });\n scope.focusElement();\n }\n }\n\n scope.step508Label = function(step) {\n var text = '';\n\n if(step.stepNum == scope.activeStep) {\n text = scope.translations.currentText + ' ' + scope.translations.stepText + ' ' + step.stepNum + ' ' + scope.translations.ofText + ' ' + scope.stepCount + ', ' + step.stepName + (angular.isDefined(step.stepSubName) ? ', ' + step.stepSubName : '');\n }\n else if (step.stepCompleted) {\n text = scope.translations.stepText + ' ' + step.stepNum + ' ' + scope.translations.ofText + ' ' + scope.stepCount + ', ' + step.stepName + (angular.isDefined(step.stepSubName) ? ', ' + step.stepSubName : '') + ', ' + scope.translations.completedText;\n }\n else if (!step.stepCompleted) {\n text = scope.translations.stepText + ' ' + step.stepNum + ' ' + scope.translations.ofText + ' ' + scope.stepCount + ', ' + step.stepName + (angular.isDefined(step.stepSubName) ? ', ' + step.stepSubName : '') + ', ' + scope.translations.notCompletedText;\n }\n\n return text;\n }\n }\n };\n}]);\n\nangular.module(\"SumTotalComponents\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"accordion/accordion-group_view.html\",\"
\\n
{{heading}}
\\n
\\n
\\n
\\n
\\n\");\n$templateCache.put(\"accordion/accordion_view.html\",\"
\\n

{{heading}}

\\n
\\n
\\n
\\n
\\n\");\n$templateCache.put(\"actionGauge/actionGaugeTemplate.html\",\"
\\n\t\\n\t\t
\t\t\\n\t\t\t
\\n\t\t\t
\\n\t\t\t\t\\n\t\t\t
\t\t\t \\n\t\t
\\n\t\t
\\n\t\t\t
\\n\t\t\t\\n\t\t
\t\t\\n\t
\\n
\");\n$templateCache.put(\"angular-strap/alert.html\",\"
\\n \\n\\n \\n \\n
\\n\t\\n
\\n
\\n\");\n$templateCache.put(\"angular-strap/datepicker.html\",\"
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n\");\n$templateCache.put(\"charts/animatedPieChart.html\",\"
\\n {{ accessLabel }}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n\");\n$templateCache.put(\"charts/axisBreakChart.html\",\"
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n\");\n$templateCache.put(\"charts/barchart.html\",\"
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n\");\n$templateCache.put(\"charts/bellchart.html\",\"
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n\");\n$templateCache.put(\"charts/linechart.html\",\"
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n\");\n$templateCache.put(\"charts/piechart.html\",\"
\\n {{ accessLabel }}\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n 2\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n\");\n$templateCache.put(\"claw/behaviors_list.html\",\"0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
100?\\'...\\':\\'\\')\\\" class=\\\"clawTableWordBreak clawTableDescCol\\\">
\\n

\\n\");\n$templateCache.put(\"claw/claw_view.html\",\"
\\n
\\n
\\n

{{gapCount}}\\n \\n

\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n\\n\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n\\n \\n \\n\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n

\\n \\n \\n \\n\\n

\\n \\n
\\n
\\n
\\n
\\n
\\n\");\n$templateCache.put(\"claw/gap_info_list.html\",\"0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n
 
100?\\'...\\':\\'\\')\\\">250?\\'...\\':\\'\\')\\\">\\n
0\\\" class=\\\"btn-group\\\">\\n \\n \\n
    \\n
  • 0\\\">\\n \\n
  • \\n
\\n
\\n
\\n

\\n\");\n$templateCache.put(\"claw/learning_list.html\",\"0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
100?\\'...\\':\\'\\')\\\" class=\\\"clawTableWordBreak clawTableDescCol\\\">
\\n

\\n\");\n$templateCache.put(\"claw/skills_list.html\",\"0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
100?\\'...\\':\\'\\')\\\" class=\\\"clawTableWordBreak clawTableDescCol\\\">
\\n

\\n\");\n$templateCache.put(\"datepicker/datepicker.html\",\"
\\n
\\n \\n \\n
\\n {{dateInputAlert | translate : alertValuesObject}}\\n
\\n
\\n \\n\\n\\n \\n
\\n ({{\\'DATEPICKER_TEXT_FORMAT\\' | translate}}{{::dateFormat | uppercase}})\\n
\\n
\\n\");\n$templateCache.put(\"forms/text.html\",\"
\\n \\n \\n \\n \\n (success)\\n
\\n\");\n$templateCache.put(\"leftnav/leftnav_content_template_view.html\",\"
\\n
\\n
\\n\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n

\\n

\\n\t\t
\\n\t\t

{{::translationobject.domain}}: {{switchdomain.name}} \\n\t\t \\n\t\t {{::translationobject.edit}}\\n\t\t

\\n\t\t
\\n \\n
\\n
\\n \\n
\\n
\\n\\n\\n\\n
\\n
\\n \\n
\\n\");\n$templateCache.put(\"leftnav/leftnav_panels_view.html\",\"\\n\");\n$templateCache.put(\"leftnav/leftnav_view.html\",\"
\\n
\\n
\\n\");\n$templateCache.put(\"leftnav/self_header.html\",\"
\\n
\\n\t\\n\t
\\n\t\t\\n\t
\\n\t
\\n\t
\\n\t\t

\\n\t\t

\\n\t\t

Exit Emulation

\\n\t
\\n
\\n\\n\");\n$templateCache.put(\"liveregion/liveregion_view.html\",\"
\\n \\n \\n \\n
\");\n$templateCache.put(\"modalfilter/modalfilter_view.html\",\"
0\\\">\\n \\n
\");\n$templateCache.put(\"notificationTile/notificationTile_view.html\",\"
\\n
\\n
\\n

{{item.heading}}

\\n

{{item.definition}}

\\n
\\n
\\n
\\n
\\n \\n
\\n\");\n$templateCache.put(\"progress-bar/progress-bar.html\",\"
\\n
\\n

\\n :\\n \\n {{additionalHeadingContent}}\\n \\n

\\n
\\n
\\n

\\n {{instructionContent | translate}} \\n

\\n
\\n
\\n \\n
\\n
\\n\t \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\t\\n
\\n
\\n\t \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\t\\n
\\n
\\n\t \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"section/section_view.html\",\"
\\n
\\n \\n \\n \\n \\n {{::heading}}\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
  • \\n
    \\n \\n \\n \\n \\n {{::heading}}\\n \\n
    \\n
    \\n
    \\n
    \\n
  • \\n\");\n$templateCache.put(\"sidepanel/sidepanel_view.html\",\"
    \\n
    \\n\\n
    \\n\\n\\n\");\n$templateCache.put(\"slideout/slideout_view.html\",\"
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"starRating/starRatingTemplate.html\",\"
    \\n {{::\\'RECOMMENDATION_RATING\\' | translate}} {{ratingValue}} {{::\\'ELIXHR_RATING_OUT_OF_5_TEXT\\' | translate}}\\n {{screenreaderValue}}\\n = 1,\\'fa-star-half-full star-yellow\\': ratingValue > 0 && ratingValue < 1 }\\\">\\n = 2,\\'fa-star-half-full star-yellow\\': ratingValue > 1 && ratingValue < 2 }\\\" role=\\\"presentation\\\">\\n = 3,\\'fa-star-half-full star-yellow\\': ratingValue > 2 && ratingValue < 3 }\\\" role=\\\"presentation\\\">\\n = 4,\\'fa-star-half-full star-yellow\\': ratingValue > 3 && ratingValue < 4 }\\\" role=\\\"presentation\\\">\\n = 5,\\'fa-star-half-full star-yellow\\': ratingValue > 4 && ratingValue < 5 }\\\" role=\\\"presentation\\\">\\n
    \\n\");\n$templateCache.put(\"sumtprogressbar/sumtprogressbar.html\",\"
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"timeline/timeline_view.html\",\"
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    {{node.title}}

    \\n

    {{node.body}}

    \\n \\n {{node.date | date:\\\"MM/dd/yyyy\\\"}}\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"typeahead/typeaheadwrap.tpl.html\",\"\\n\");\n$templateCache.put(\"wizard/wizardsteps_view.html\",\"\\n\\n
      \\n
    1. \\n
      = activeStep && !step.stepCompleted, \\n \\'step-line-disabled-completed\\': (step.stepNum == activeStep && !step[step.stepNum-1].stepDisabled) || (step.stepCompleted && step.stepDisabled && step.stepNum > activeStep),\\n \\'lastStep\\': step.stepNum == stepData[stepData.length-1].stepNum\\n }\\\">\\n
      \\n
      \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n {{::step.instructionText}}\\n
      \\n\t
    2. \\n
    \\n\");\n$templateCache.put(\"webparts/webpartcontainer_view.html\",\"
    \\n

    \\n \\n {{headerTitle}}\\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n\");}]);\nangular.module('SumTotalComponents')\n .constant('FOUNDATION_TRANSLATIONS', {\n en: {\n CLOSE: 'Close',\n CLOSE_TXT: 'Close'\n },\n de: {\n CLOSE: 'Nah dran',\n CLOSE_TXT: 'Schließen'\n },\n arSA: {\n CLOSE_TXT: 'إغلاق'\n },\n cs: {\n CLOSE_TXT: 'Zavřít'\n },\n da: {\n CLOSE_TXT: 'Luk'\n },\n el: {\n CLOSE_TXT: 'Κλείσιμο'\n },\n enGB: {\n CLOSE_TXT: 'Close'\n },\n esMX: {\n CLOSE_TXT: 'Cerrar'\n },\n es: {\n CLOSE_TXT: 'Cerrar'\n },\n fi: {\n CLOSE_TXT: 'Sulje'\n },\n frCA: {\n CLOSE_TXT: 'Fermer'\n },\n fr: {\n CLOSE_TXT: 'Fermer'\n },\n hu: {\n CLOSE_TXT: 'Bezárás'\n },\n id: {\n CLOSE_TXT: 'Tutup'\n },\n it: {\n CLOSE_TXT: 'Chiudi'\n },\n ja: {\n CLOSE_TXT: '閉じる'\n },\n ko: {\n CLOSE_TXT: '닫기'\n },\n nl: {\n CLOSE_TXT: 'Sluiten'\n },\n no: {\n CLOSE_TXT: 'Lukk'\n },\n pl: {\n CLOSE_TXT: 'Zamknij'\n },\n ptBR: {\n CLOSE_TXT: 'Fechar'\n },\n ro: {\n CLOSE_TXT: 'Închidere'\n },\n ru: {\n CLOSE_TXT: 'Закрыть'\n },\n sl: {\n CLOSE_TXT: 'Zapri'\n },\n sv: {\n CLOSE_TXT: 'Stäng'\n },\n th: {\n CLOSE_TXT: 'ปิด'\n },\n tr: {\n CLOSE_TXT: 'Kapat'\n },\n uk: {\n CLOSE_TXT: 'Закрити'\n },\n vi: {\n CLOSE_TXT: 'Đóng'\n },\n zhHans: {\n CLOSE_TXT: '关闭'\n },\n zhHant: {\n CLOSE_TXT: '關閉'\n }\n });\n\nangular.module('SumTotalComponents').config(['FOUNDATION_TRANSLATIONS', '$translateProvider', '$alertProvider', '$modalProvider',\n function (translations, $translateProvider, $alertProvider, $modalProvider) {\n\n $translateProvider\n .translations('en', translations.en)\n .translations('de', translations.de)\n .translations('ar-SA', translations.arSA)\n .translations('cs', translations.cs)\n .translations('da', translations.da)\n .translations('el', translations.el)\n .translations('en-GB', translations.enGB)\n .translations('es-MX', translations.esMX)\n .translations('es', translations.es)\n .translations('fi', translations.fi)\n .translations('fr-CA', translations.frCA)\n .translations('fr', translations.fr)\n .translations('hu', translations.hu)\n .translations('id', translations.id)\n .translations('it', translations.it)\n .translations('ja', translations.ja)\n .translations('ko', translations.ko)\n .translations('nl', translations.nl)\n .translations('no', translations.no)\n .translations('pl', translations.pl)\n .translations('pt-BR', translations.ptBR)\n .translations('ro', translations.ro)\n .translations('ru', translations.ru)\n .translations('sl', translations.sl)\n .translations('sv', translations.sv)\n .translations('th', translations.th)\n .translations('tr', translations.tr)\n .translations('uk', translations.uk)\n .translations('vi', translations.vi)\n .translations('zh-Hans', translations.zhHans)\n .translations('zh-Hant', translations.zhHant)\n .preferredLanguage('en');\n\n // set the default template for the alert to be our 508 compliant one.\n angular.extend($alertProvider.defaults, {\n templateUrl: 'angular-strap/alert.html'\n });\n\n angular.extend($modalProvider.defaults, {\n backdrop: 'static'\n });\n }]);\n"]}