{"version":3,"sources":["script/vendor/dragdealer/src/dragdealer.ts","script/tabs/TabsModule.ts","script/product/module.ts","script/footer/module.ts","script/glossar/module.ts","script/team/module.ts","script/partner/module.ts","script/misc/module.ts","script/shoppinglist/module.ts","script/product-references/module.ts","script/menueditor/module.ts","script/blog/module.ts","script/pze/module.ts","script/userAdmin/module.ts","script/_module-template/module.ts","script/library/model/DocumentDetailServiceData.ts","script/part/model/YourPrice.ts","script/navigation/model/ItemNavItem.ts","script/search/model/SearchResults.ts","script/solution/model/MeasuringTaskGroup.ts","script/supportportal/model/RegisterData.ts","script/Training/model/Product.ts","script/user/model/NewsletterProfileData.ts","script/editor/model/ContentTag.ts","script/tabs/controller/TabCtrl.ts","script/tabs/model/TabItem.ts","script/tabs/directive/TabPage.ts","script/tabs/directive/TabTitle.ts","script/tabs/directive/Tabs.ts","script/navigation/interface/IPageMetaService.ts","script/navigation/directive/ItemNavigationDirective.ts","script/navigation/directive/AnchorNavDirective.ts","script/navigation/directive/ResponsiveImageDirective.ts","script/navigation/directive/ScrollToDirective.ts","script/navigation/directive/OnFinishRender.ts","script/navigation/directive/TrackPageViewDirective.ts","script/navigation/model/AnchorNavItem.ts","script/navigation/model/MenuNode.ts","script/navigation/service/DebounceService.ts","script/navigation/service/LoadingInterceptor.ts","script/navigation/service/LoadingIndicatorService.ts","script/navigation/service/AnchorNavService.ts","script/navigation/service/PageMetaService.ts","script/navigation/service/ParallaxService.ts","script/navigation/service/VisibilityApiService.ts","script/navigation/controller/MenuCtrl.ts","script/navigation/module.ts","script/product/model/Feature.ts","script/product/model/ProductData.ts","script/product/controller/ProductCtrl.ts","script/product/controller/ProductArchiveCtrl.ts","script/solution/service/SolutionService.ts","script/solution/model/Intro.ts","script/solution/model/MeasuringTask.ts","script/solution/model/Product.ts","script/solution/model/SolutionData.ts","script/solution/filter/ProductByMeasuringTaskFilter.ts","script/solution/controller/SolutionCtrl.ts","script/solution/module.ts","script/user/config/material-theme.ts","script/user/config/DateLocaleProvider.ts","script/user/model/RegisterData.ts","script/user/model/LoginData.ts","script/user/service/UserService.ts","script/user/controller/MobileLoginCtrl.ts","script/user/controller/ForgotPasswordCtrl.ts","script/user/controller/ChangePasswordCtrl.ts","script/user/controller/SubscribeNewsletterCtrl.ts","script/user/controller/LoginPageCtrl.ts","script/user/directive/match-validator.ts","script/user/directive/ifLoggedIn.ts","script/user/directive/RegisterFormDirective.ts","script/user/directive/LoginHeaderDirective.ts","script/user/directive/LoginFormDirective.ts","script/user/module.ts","script/editor/template/EditorModalTemplate.ts","script/editor/model/Content.ts","script/editor/interface/IFilterTree.ts","script/editor/interface/IRessourceTableData.ts","script/editor/model/Ressource.ts","script/editor/model/EditorFilter.ts","script/editor/filter/keyboardShortcut.ts","script/editor/filter/StatusTopicFilter.ts","script/editor/filter/CategoryTopicFilter.ts","script/editor/filter/TagTopicFilter.ts","script/editor/service/EditorService.ts","script/editor/directive/EditorDirective.ts","script/editor/directive/ContentListItemDirective.ts","script/editor/controller/EditorCtrl.ts","script/editor/module.ts","script/footer/config/FooterConfig.ts","script/footer/controller/FooterCtrl.ts","script/glossar/model/GlossaryEntry.ts","script/glossar/directive/ZoomDialogDirective.ts","script/glossar/directive/GlossarEntryDirective.ts","script/glossar/filter/FirstLetterFilter.ts","script/glossar/controller/GlossarCtrl.ts","script/team/model/Person.ts","script/team/controller/TeamCtrl.ts","script/partner/model/Area.ts","script/partner/model/BusinessArea.ts","script/partner/model/Country.ts","script/partner/model/AreaData.ts","script/partner/model/Vendor.ts","script/partner/model/VendorResult.ts","script/partner/model/VendorWBusinessArea.ts","script/partner/service/PartnerService.ts","script/partner/controller/PartnerFlagCtrl.ts","script/partner/controller/PartnerCtrl.ts","script/partner/directive/SimpleVendorAddressDirective.ts","script/partner/directive/VendorAddressDirective.ts","script/search/filter/HighlightKeywordsFilter.ts","script/search/service/SearchService.ts","script/search/directive/SearchKeywordDirective.ts","script/search/directive/SearchResultDirective.ts","script/search/directive/AllResultsDirective.ts","script/search/controller/SearchCtrl.ts","script/search/controller/SearchResultsCtrl.ts","script/search/module.ts","script/misc/controller/SIGRISTHistoryCtrl.ts","script/misc/controller/HomeCarruselCtrl.ts","script/misc/directive/JsonDataDirective.ts","script/misc/directive/ImageLazyLoadDirective.ts","script/misc/directive/CarrouselPreloaderDirective.ts","script/misc/directive/YouTubeOverlayDirective.ts","script/misc/directive/EditableContentDirective.ts","script/misc/filter/AdvancedNumberFilter.ts","script/library/interface/ILibraryDetailCtrlScope.ts","script/library/model/Library.ts","script/library/model/Language.ts","script/library/model/ServiceData.ts","script/library/model/DimensionServiceData.ts","script/library/service/LibraryService.ts","script/library/service/ToolboxService.ts","script/library/service/LibraryDimensionService.ts","script/library/filter/ByDocumentFilter.ts","script/library/filter/UrlEncodeFilter.ts","script/library/filter/UniqueFilter.ts","script/library/filter/MinsSecFilter.ts","script/library/directive/OpenDocumentDetailDirective.ts","script/library/directive/LibraryImageResizeDirective.ts","script/library/directive/LibraryDetailDirective.ts","script/library/controller/LibraryDetailCtrl.ts","script/library/controller/LibraryCtrl.ts","script/library/controller/LibrarySortCtrl.ts","script/library/controller/ToolboxCtrl.ts","script/library/controller/Toolbox2Ctrl.ts","script/library/controller/ProductFilterCtrl.ts","script/library/module.ts","script/part/directive/ProductBoxDirective.ts","script/part/directive/PartDetailDirective.ts","script/part/directive/PartBoxDirective.ts","script/part/filter/PartsByGroupAndCatFilter.ts","script/part/model/Part.ts","script/part/model/Price.ts","script/part/model/ProductRelation.ts","script/part/model/PartDetailDTO.ts","script/part/model/ServiceData.ts","script/part/model/PartDocument.ts","script/part/service/PartService.ts","script/part/controller/PartDetailCtrl.ts","script/part/controller/PartOrderDetailCtrl.ts","script/part/controller/PartCtrl.ts","script/part/module.ts","script/shoppinglist/interface/IShoppingListService.ts","script/shoppinglist/model/AvailabilityData.ts","script/shoppinglist/model/Image.ts","script/shoppinglist/model/ShoppingListLine.ts","script/shoppinglist/model/ShoppingList.ts","script/shoppinglist/model/ServerState.ts","script/shoppinglist/controller/ShoppingListCtrl.ts","script/shoppinglist/controller/ShoppingListButton.ts","script/shoppinglist/controller/ShareModalCtrl.ts","script/shoppinglist/controller/ShoppingListViewCtrl.ts","script/shoppinglist/directive/AvailabilityDirective.ts","script/shoppinglist/directive/AddToCartButtonDirective.ts","script/shoppinglist/directive/SelectOnClick.ts","script/shoppinglist/directive/ShoppingListTableDirective.ts","script/shoppinglist/filter/ofnumber.ts","script/shoppinglist/service/ShoppingListService.ts","script/product-references/service/ProductReferenceService.ts","script/product-references/model/Product.ts","script/product-references/model/ProductReferenceFilterData.ts","script/product-references/model/ProductReferenceData.ts","script/product-references/model/ProductReference.ts","script/product-references/controller/ProductReferenceCtrl.ts","script/product-references/filter/ProductReferenceFilter.ts","script/menueditor/model/BusinessArea.ts","script/menueditor/model/Industry.ts","script/menueditor/model/MeasuringTask.ts","script/menueditor/model/MeasuringTaskGroup.ts","script/menueditor/model/Product.ts","script/menueditor/controller/MenuEditorDetailCtrl.ts","script/menueditor/controller/MenuEditorCtrl.ts","script/menueditor/directive/MenuEntryListDirective.ts","script/menueditor/service/menueditorService.ts","script/blog/controller/SalesToolCtrl.ts","script/blog/controller/BlogCtrl.ts","script/blog/controller/BlogDetailCtrl.ts","script/blog/controller/EventCtrl.ts","script/blog/controller/BerechnungCtrl.ts","script/blog/controller/ScrubberCtrl.ts","script/blog/directive/BlogEntryDirective.ts","script/blog/service/BlogService.ts","script/Training/model/Training.ts","script/Training/service/TrainingService.ts","script/Training/controller/TrainingCtrl.ts","script/Training/module.ts","script/supportportal/service/SupportPortalService.ts","script/supportportal/controller/SupportPortalCtrl.ts","script/supportportal/module.ts","script/pze/service/PzeService.ts","script/pze/controller/PzeCtrl.ts","script/userAdmin/model/UserAdminModels.ts","script/userAdmin/controller/UserAdminDetailCtrl.ts","script/userAdmin/controller/UserAdminCtrl.ts","script/userAdmin/service/UserAdminService.ts","script/part/model/PartCtrlSettings.ts","script/user/directive/ifIntranet.ts","script/user/model/FormSrvErrorCollection.ts","script/editor/model/ContentMeta.ts"],"names":["define","tabs","product","footer","glossar","team","partner","misc","shoppinglist","product_references","menuEditor","blog","pze","userAdmin","todos","library","part","navigation","search","solution","supportportal","training","user","editor","root","factory","amd","module","exports","Dragdealer","this","wrapper","options","applyDefaults","bindMethods","getWrapperElement","handle","getHandleElement","handleClass","init","bindEventListeners","prototype","defaults","disabled","horizontal","vertical","slide","steps","snap","loose","speed","xPrecision","yPrecision","css3","activeClass","tapping","element","StylePrefix","backfaceVisibility","perspective","style","value","prev","current","x","y","target","offset","mouse","dragStartPosition","change","stepRatios","calculateStepRatios","activity","dragging","reflow","disable","k","hasOwnProperty","document","getElementById","childElements","handleClassMatcher","i","getElementsByClassName","length","RegExp","getElementsByTagName","test","className","setWrapperOffset","Position","get","calculateBounds","bounds","top","bottom","offsetHeight","left","right","offsetWidth","availWidth","availHeight","calculateValuePrecision","Math","abs","requestAnimationFrame","bind","customRequestAnimationFrame","window","cancelAnimationFrame","customCancelAnimationFrame","animateWithRequestAnimationFrame","animate","onHandleMouseDown","onHandleTouchStart","onDocumentMouseMove","onWrapperTouchMove","onWrapperMouseDown","onWrapperTouchStart","onDocumentMouseUp","onDocumentTouchEnd","onHandleClick","onWindowResize","addEventListener","interval","unbindEventListeners","removeEventListener","e","Cursor","refresh","preventEventDefaults","stopEventPropagation","startDrag","clientX","clientY","draggingOnDisabledAxis","stopDrag","startTap","stopTap","enable","replace","valuePrecision","updateOffsetFromValue","getStep","getStepNumber","getStepWidth","getValue","setStep","setValue","setTargetValue","groupCopy","callAnimationCallback","cursorXRatio","cursorYRatio","getClosestStep","setTargetValueByOffset","match","callDragStartCallback","delta","ratioChange","groupClone","callDragStopCallback","getClosestSteps","groupCompare","animationCallback","call","callTargetCallback","callback","dragStartCallback","dragStopCallback","time","timeOffset","timeStamp","direct","first","prevTarget","glide","diff","min","getOffsetsByRatios","renderHandlePosition","transform","getLooseValue","getProperValue","getRatiosByOffsets","proper","max","group","getRatioByOffset","range","padding","getOffsetByRatio","ratio","round","a","b","xDiff","yDiff","fn","context","apply","arguments","type","attachEvent","detachEvent","event","preventDefault","returnValue","stopPropagation","cancelBubble","set","touches","lastX","lastY","pageX","pageY","body","scrollLeft","documentElement","scrollTop","obj","rect","undefined","getBoundingClientRect","getPrefixedStylePropName","propName","domPrefixes","split","elStyle","charAt","toUpperCase","substr","vendors","TabCtrl","$scope","$timeout","anchorNavService","setToggleMode","isToggleMode","registerPage","pageId","routeId","t","TabItem","page","TabItemPart","registerTitle","navKey","elVisibleParent","title","angular","forEach","tab","key","index","$","parent","children","closest","navItem","addElement","isActive","onChange","f","onChangeFunction","getActiveTab","activeTab","toggleActive","alwaysActivate","newActive","_this","oldActive","setActive","toggleActiveIndex","$inject","active","setActiveFunction","tabPage","$window","pageMetaService","parallaxService","debounce","transclude","restrict","scope","require","link","attr","controller","clone","append","setMinHeight","section","elHeight","outerHeight","height","css","tabTitle","meta","getPageMeta","nav","blur","setInactive","tabs_1","toggleMode","scroll","autoCollapse","setActiveTab","path","compareKey","compareQuery","el","onScroll","pagesRoot","oldTab","newTab","topPos","addClass","removeClass","parseInt","smoothScroll","subscribeOnScroll","getRequestLocalRelativePathPart","$on","ev","newUrl","oldUrl","newState","oldState","equals","getLocalRelativePathPart","directive","HL","HLFULL","HLPREFIX","CURRENT","PARENT","USERNAME","PAGEID","ItemNavigationDirective","$filter","$rootScope","itemData","selectedItem","onSelect","groupFilter","nameProperty","center","allwaysShowArrows","headingLevel","templateUrl","isDefined","dragDealerRoot","querySelector","maskWidth","dd","parentWidth","itemPercentMap","layout","noArrow","unsubscribe","selected","is","item","arr","nsi","$anchorNav","prop","find","calcWidth","filteredItem","filter","array","setSelectedItem","lastTotalWidth","childs","totChildWidth","elWith","Array","elLeft","parseFloat","getComputedStyle","ceil","width","isCentered","elementWith","percent","data","console","log","dontNavigate","indexOf","last","$broadcast","next","previous","getUrl","RouteData","BasePageUrl","anchorNav","useInScrollNav","responsiveImage","imgSrc","$watch","background-image","scrollTo","attrName","name","Object","toString","$attr","$observe","$set","$event","onFinishRender","$last","$emit","trackPageViewDirective","$analytics","trackPageView","pageTrack","AnchorNavItem","toLowerCase","isAtStartOf","query","partialMatch","myKey","MenuNode","Id","Name","Options","Nodes","PageId","IsCurrent","RouteEntry","Hide","debounceService","$q","func","wait","immediate","timeout","deferred","defer","args","callNow","cancel","resolve","promise","LoadingInterceptor","Factory","$injector","loadingIndicatorService","_instance","request","config","taskStarted","response","taskEnded","responseError","rejection","reject","LoadingIndicatorService","_asyncTaskCount","_isLoading","debouncedShowIndicator","debouncedHideIndicator","UpdateLoadIndicator","isLoading","subscribeOnLoadIndicatorChanged","handler","AnchorNavService","$location","$http","CacheFactory","localScrollToLocation","lastDocumentHeight","reCalc","activeHashElement","activeElement","isScrolling","afterScroll","scrollToLocation","topOffset","elements","currentHash","createCache","storageMode","topPath","pglob","push","CurrentLanguage","hlPrefix","url","BasePageId","location","href","getNavigationData","then","re","findByUrl","stack","copy","RouteParameterStack","PageType","shift","updateRouteParameters","changeLocation","$apply","hash","v","debouncedReCalc","ready","lastActiveElement","ani","getPath","UrlByLanguage","hlFull","setTopLocation","sort","getBaseUrl","menuData","findByRoutParameter","newBase","baseUrl","newBaseUrl","subscribeOnLocationChanged","hl","start","Date","getTime","dataCache","isArray","dataEl","JSON","parse","innerHTML","put","method","headers","Content-Type","findAndMarkCurrentNode","nodes","n","findL1Node","rpvs","rpv","pop","findById","rootNode","node","id","pageid","queue","base","found","compareStack","rpv1","rpv2","Placeholder","resetActivePath","rootNodes","getActivePath","activeNodes","reverse","getMenuTreePath","nodeToGetPath","getElements","getActiveNavItem","paramValue","getQueryValue","parameterName","val","PageMetaService","updateTitleDescription","User","Email","getContentFilterFor","useRouteParameter","category","EditorFilter","Category","Filter1","Filter2","Filter3","FilterString1","FilterString2","IsLanguageIndifferent","metaDescription","PageTitle","MetaDescription","pageTitle","searchRouteParameter","placeholder","routeParameter","param","searchNode","child","some","searchPage","nd","ParallaxService","isTicking","fPSTimeStamp","fpsDelay","lastScrollTop","requestFrame","debouncedResetOfIsTicking","easeInOutQuad","duration","easeInOutQuadIntern","c","d","ts","tc","VisibilityApiService","$document","hiddenKey","_ref","visibilityChagedKey","on","subscribeOnVisibilityChange","MenuCtrl","$anchorScroll","userService","shoppingListService","$mdDialog","$animate","animateHeader","pos","headerSpeed","toolsOpacity","matchMedia","matches","shadowOpacity","shadowBlur","shadowSpread","l1LinkPaddingBottom","subnav","logoScale","headerHeight","logoBottom","currentHeaderHeight","box-shadow","opacity","padding-bottom","z-index","vm","showNav","r","newValue","oldValue","max-height","menudata","level","requestOnGoing","svg4everybody","shoppingListTotalMap","1","2","getLists","list","Type","getTotalQty","subscribeOnUpdated","getScrollNav","isActiveScrollNav","setParentSubnav1","menuentry","notoggle","parentSubNav1","parentSubNav2","setParentSubnav2","getMenuClass","getOptionWPrefix","option","prefix","gotoTop","logout","me","reload","catch","reason","alert","openLogin","show","bindToController","targetEvent","clickOutsideToClose","fullscreen","locals","parentScope","showShoppingList","listType","currentTarget","navigate","getUrlForLanguage","lkey","substring","openChangePasswordModal","$httpProvider","$anchorScrollProvider","interceptors","disableAutoScrolling","$analyticsProvider","trackExceptions","virtualPageviews","firstPageview","service","Feature","Text","ProductDetail","LongDesc","ProductLegacyImagePath","IsObsolete","KillingDate","ControlUnit","Url","ProductData","Current","Previous","Next","Product","ProductImageName","Features","Specifications","DataSheet","ControlUnits","ProductCtrl","$templateCache","$sce","editBtnVisible","load","checkOverflow","totalHeight","expanded","off","each","overflow","AdminTools","changeProduct","animDirectionClass","animDirection","img","params","status","features","specs","datasheet","controlUnits","trustAsHtml","getDataSheetRevision","ds","Revisions","doc","LanguageCode","dsE","openConfig","openEditor","editorTemplate","ContentFormat","useRouteParam","EditorModalTemplate","template","message","ProductArchiveCtrl","products","SolutionService","cacheName","has","subscribeOnSaveContent","cacheKey","remove","getOrCreateCache","capacity","getSolutionData","Intro","ImgUrl","MeasuringTask","UrlKey","MeasuringTaskGroups","Products","ProduktNummer","KurztextDeutsch","MeasuringTasks","SolutionData","Meta","Schema","IsIndustry","productByMeasuringTaskFilter","measuringTaskProducts","out","productId","pObj","SolutionCtrl","solutionService","solutionData","changeTopic","updateGroup","newVal","mtgDescEditorConfig","UseRouteParam","Replace","oldval","mt","g","task","TOPOFFSET","materialTheme","$mdThemingProvider","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastLightColors","whiteMap","extendPalette","theme","primaryPalette","default","accentPalette","backgroundPalette","DateLocaleProvider","$mdDateLocaleProvider","$localeProvider","locale","$get","months","DATETIME_FORMATS","MONTH","shortMonths","SHORTMONTH","days","DAY","shortDays","SHORTDAY","firstDayOfWeek","moment","defaultFormat","shortDate","defaultFormatUtc","parseDate","dateString","m","isValid","toDate","NaN","formatDate","date","format","monthHeaderFormatter","getMonth","getFullYear","weekNumberFormatter","weekNumber","msgCalendar","msgOpenCalendar","RegisterData","Password","PasswordRepeat","Firstname","Lastname","Company","Country","Language","Access","Newsletter","Privacy","VerteilerId","LoginData","email","password","persist","showLogin","UserService","login","returnUrl","username","destroyAll","intranetLogin","resetPassword","changePassword","pwdOld","pwdNew","passwordOld","passwordNew","register","isValidUsername","checkNsEMail","verteilerid","upsertNewsletterProfile","isLoggedIn","getJwtToken","isTokenExpired","getBearer","token","Authorization","expiration","getJWTExpireDate","jwtToken","payload","expires","atob","exp","_b","MobileLoginCtrl","success","setProgress","closeDialog","hide","bool","cancelDialog","ForgotPasswordCtrl","error","loginform","$modelValue","$invalid","ChangePasswordCtrl","changePasswordForm","$setValidity","SubscribeNewsletterCtrl","partnerService","step","D","E","$onInit","subscriberEmail","finally","saveProfile","nextStep","OpenSubscribeEMailPopUp","subscribeEMailForm","$setUntouched","loadCountries","countries","when","getPartnerData","Countries","currentCountry","Code","LocationCountryCode","save","subscribeNewsletterForm","$setDirty","eventTrack","LoginPageCtrl","matchValidator","$parse","elem","attrs","ctrl","matchGetter","caselessGetter","noMatchGetter","matchIgnoreEmptyGetter","getMatchValue","isObject","$viewValue","$$parseAndValidate","$validators","modelValue","viewValue","matcher","notMatch","ifLoggedIn","priority","destroy","RegisterFormDirective","errorToField","srv-valid-email","srv-username-not-taken","srv-password-good","srv-privacy","srv-success","fieldsToWatch","$watchGroup","touched","registerform","$submitted","every","$evalAsync","focus","newEmail","$asyncValidators","def","$isEmpty","valid","requestAccountCreation","displayActivateMailMessage","validity","LoginHeaderDirective","mode","close","progress","LoginFormDirective","select","redirect","doLogin","Success","ReturnUrl","openResetPasswordModal","Content","ContentType","ContentMeta","ContentFilter","Excerpt","ContentHtml","ExcerptHtml","Ressource","Scope","Key","Desc","FilterString3","Description","ContentId","KeyboardShortcut","str","keys","seperator","abbreviations","isOSX","navigator","userAgent","M","A","S","map","join","StatusTopic","topics","sts","topic","Status","CategoryTopic","ctgr","TagTopic","tag","Tags","tg","EditorService","Upload","getFilterParams","prm","edit","subscribeOnEdit","notify","saveContent","content","charCodeAt","StringFieldsToDate","createContent","tags","convertContent","destformat","dstFormat","changeStatus","contentId","destStatus","dstStatus","loadContent","desiredTypeIfNew","desiredContentTypeIfNew","loadContentMany","loadRessources","loadTags","_displayname","Names","_lowerdisplayname","saveRessources","clearCache","loadFilter","categoryId","createMissingContent","removeContentFile","contenttype","uploadFile","file","ext","extension","lastIndexOf","upload","String","fromCharCode","CreatedAt","ModifiedAt","PublishedAt","ValidFrom","ValidTo","EditorDirective","editorService","$compile","editorConfig","editorConfigVar","setDisplay","button","display","wireEditButton","html","editButton","ContentListItemDirective","contentData","getStatus","s","EditorCtrl","$mdSidenav","currentLanguage","RowVersion","Image","Attachment","toggleRight","buildToggler","toggleLeft","supportedLanguages","SupportedLanguages","allTags","uploadButtonsBound","isValidFromDateSet","validFromDate","isValidToDateSet","validToDate","showButton","editorInstance","editorSession","routeParameterStack","settings","view","currentContentType","ct","MarkDown","setMode","HTML","permissionValues","text","liveViewContent","urlPlacehldr","getUrlKey","Title","updateLiveView","ModifiedBy","PublishedBy","isOpenRight","isOpen","oldVal","ContentAttachementType","ContentImage","ContentAttachment","setRequestOnGoing","aceLoaded","_editor","getSession","$blockScrolling","Infinity","renderer","setUndoManager","ace","UndoManager","saveFunction","closeFunction","commands","addCommand","bindKey","win","mac","sender","exec","env","clearCacheFunction","newHl","oldHl","loadAllTags","ctrlKey","metaKey","which","topicCategoryFltr","editMeta","fstring2","isMetaEditable","Editable","s2","removeDiacritics","trimChar","mask","slice","o","u","pattern","newContent","hlCode","getNew","getUndoManager","isClean","confirm","setReadOnly","createFilterFor","postLoad","all","ressourceData","showRessources","urlKey","concat","fs1","loadedTopics","updateTopics","res","showSaveInProgress","metaEditForm","$setSubmitted","showSaveSuccess","markClean","ressourceEditForm","$setPristine","isTimed","showCacheSuccess","bindUploadButtons","imgButton","attButton","click","removeFile","contentAttSrc","cacheBuster","filterTree","seen","add","templates","$pristine","navID","toggle","lowercaseQuery","$query","initFromDate","toDateString","initToDate","FooterConfig","$locationProvider","html5Mode","FooterCtrl","$element","phase","hasClass","activeTabIndex","footer_1","GlossaryEntry","GlossaryID","IndexLetter","Active","ZoomDialogDirective","extend","$new","toolbar","GlossarEntryDirective","entry","MathJax","Hub","Queue","firstLetterFilter","input","letter","GlossarCtrl","elIndex","elPageHead","elHeader","elIndexParent","letters","selectedLetter","head","script","createElement","opera","appendChild","src","loadLetter","loadEntry","Person","Function","Phone","TeamCtrl","elData","maxDepth","persons","Area","ID","BusinessAreas","Vendors","BusinessArea","Order","VendorsId","NormalizedName","VendorId","AreaData","Areas","Vendor","vendor2marketPriority","ShortName","Address","AddressLines","Fax","Website","AddressCountryName","Location","VendorResult","DefaultVendor","VendorWBusinessArea","BusinessAreasList","BusinessAreasString","PartnerService","getPartnerLocation","vendorid","getPartnerCtrlElement","rootElement","setPartnerCtrlElement","PartnerFlagCtrl","googleMapsUrlWithKey","vendordata","selectedCountry","onCountryChange","selectedArea","selectedVendor","googleMapsQuery","getAreaData","selectVendorForCurrentBusinessArea","getOrUpdateLocation","getSelectedVendor","latlong","lat","lng","onAreaChange","currentBusinessAreaId","vArr","rpm","ba","j","togglePullOut","boxWidth","PartnerCtrl","showOverlay","setVendor","selectedBusinessArea","vendor","getVendorByBusinessAreaId","selectedOverlayArea","setOverlayArea","area","isVendorSelected","baId","getBusinessAreasByCountryOrArea","baList","getBusinessAreaStringByVendor","SimpleVendorAddressDirective","linkedin","subjectQuery","DisplayName","subject","encodeURI","VendorAddressDirective","NgMap","mapid","googleMapsUrl","showMap","geoCode","getMap","google","maps","trigger","markers","addressmarker","setPosition","LatLng","panTo","getPosition","pageYOffset","escape","HighlightKeywordsFilter","words","wordsEscaped","allTermsRegexStr","regex","searchService","keywordInputElement","keyword","result","applicationSearchRequestNo","partSearchRequestNo","documentSearchRequestNo","productArchiveSearchRequestNo","allProductsSearchRequestNo","getSearchResultDebounced","setKeywordInputElement","getKeywordInputElement","setKeyword","subscribe","subscribeLoading","getData","searchApplications","searchParts","searchLibrary","searchProductArchive","resultStart","resultCount","rqCount","rStart","rCount","industries","Hits","Count","tasks","topResult","Artikelsuche","Query","parts","PartSearchServiceData","picturesOnly","documents","DocumentSearchServiceData","searchAllProducts","allProducts","searchEverything","productArchive","ProductArchiveSearchServiceData","searchKeyword","read","SearchResultDirective","hitTitle","highlights","svg","AllResultsDirective","libraryService","partService","hit","resultMeta","resultObject","Rest","getResultByType","Document","getTitle","titleD","titleE","documentId","attachment","content_length","Application","nameD","nameE","applicationId","Industry","industryID","longDescD","Part","textD","textE","partId","getImgUrl","fileSrcRevId","capitalizeFirst","de","shortenText","textArray","openDialog","SearchCtrl","elInput","position","hasResults","limit","getIconIRI","icon","elRelative","offsetParent","outerWidth","openPart","partid","openDocument","revId","revid","SearchResultsCtrl","$log","inputElement","queryString","q","pages","AllResults","App","Ind","Prod","Doc","Img","activePages","searchCategories","searchMethods","callSearchFunction","selectedTopLevel","populatePagination","totalResults","perPage","pageNum","pageCount","allResults","TotalResults","searchApps","searchDocs","searchPics","pictures","openPartDialog","openDocumentDialog","DocumentFileSrcRevId","search_1","SigristHistoryCtrl","$interval","waitTime","testimonialIndex","jubiIndex","checkPageChange","intervalJubi","checkPageChangeJubi","lastChange","lastChangeJubi","historyData","jubiData","entryJubi","initJubi","nextJubi","previousJubi","HomeCarruselCtrl","visibilityApiService","defaultShortWait","defaultLongWait","isHidden","resetTimer","currentPageNr","currentPreloadNr","imageToLoad","imageQueue","maxPageNr","registerImg","loaded","loading","getImageByIndex","im","preloadImg","image","onload","setAttribute","desiredPage","jsonDataDirective","onLoad","imageLazyLoadDirective","observer","IntersectionObserver","changes","intersectionRatio","imageLazyLoad","rootMargin","observe","carrouselPreloaderDirective","imgDiv","getAttribute","youTubeOverlayDirective","iframe","youTubeOverlay","EditableContentDirective","contentFormat","addEditorButton","useRouteParamValue","waitSkel","skeletonEl","skeletonTimeout","statusText","AdvancedNumberFilter","divisor","postfix","fixed","toFixed","Revision","DocumentFileSrcRevID","DocumentFileSrcRevName","Level","ReleaseDate","FileType","DocumentRevDestID","FileTypeDesc","DocumentRev","LanguageVariant","DocumentFileSrcID","DocumentType","DocumentTypeID","DocumentTypeName","Documents","DocumentID","DocumentTitle","DocumentContentName","DocumentCategoryName","SortOrder","DocumentRevDestSize","DocumentRevDestName","FileTypeExt","FileTypeName","FileTypeIsImage","DocumentFileSrcName","DocumentFullFileName","DocumentRevDestHeightPx","DocumentRevDestWidthPx","Replaced","DocumentFileSrcRevExpirationDate","DocumentFileSrcRevValidityDate","lastErrataDstDate","lastErrataDstID","DocumentStateTypeName","ReplacedByData","DocumentCrossReferenceType","DocumentCrossReferenceTypeID","DocumentCrossReferenceTypeName","DocumentCrossReferenceRevDetails","DocumentCategory","DocumentCategoryID","Types","LanguageAlternative","LanguageID","LanguageIcon","LanguageName","LanguageSiteCode","ServiceData","Languages","ImageTemplate","description","megapixel","sizeUnit","dpi","XYDimensions","searchRevision","fileType","LibraryService","loadDocumentsByProduct","dc","rev","loadDocumentDetails","fileSrcRevID","buildTree","err","saveDocumentSortOrder","renumTo","sortOrder","documentIds","rp","parentScp","getDefaultRevision","ds1","fileSrc","LanguageVariants","fileRevSrc","variant","getDocumentLanguage","revision","filetype","selectedLanguageVariant","selectedRevision","selectedFileType","revs","getLanguage","ToolboxService","getProducts","onlyListed","LibraryDimensionService","getDimensions","getPictureTemplateList","getImageURL","revisionid","ByDocumentFilter","property","UrlEncodeFilter","encodeURIComponent","UniqueFilter","keyFunc","unique","uniqueList","MinsSecFilter","sec","precision","number","isNaN","isFinite","floor","pow","OpenDocumentDetailDirective","openDocumentDetail","LibraryImageResizeDirective","libraryDimensionService","advancedDetails","RevId","dimensions","megaPixelLimit","maxDimensions","Zentimeter","Inch","Pixel","ONEINCH","quality","web","mail","druck","plakat","plakata1","update","parsed","unit","setPixelX","setPixelY","xPx","xInch","xRaw","yPx","yInch","yRaw","QAL_SYMBOL","QAL_COLOR","qualFunctions","Web","Mail","Druck","Plakat","PlakatA1","qualTooltips","++","+","-","--","applyTemplate","selectedtemplate","requests","previewlink","downloadlink","mPixOrig","faktorMax","sqrt","mpix","faktor","preview","screen","open","write","getDownloadSizeEst","getDownloadtimeEst","getDownloadtimeMobileEst","getQualityTooltip","symbol","getQualityRating","getQualityColor","color","LibraryDetailDirective","revSelected","getLastRevision","currentRev","getLinkToRev","isNumber","openDocumentRev","getRevisionFileTypeDescription","isExpired","LibraryDetailCtrl","$mdPanel","revIdMissing","openProduct","p","LibraryCtrl","languages","queryRevId","openDetailModalByRevId","$watchCollection","newCol","oldCol","getTotalPages","nrofarticles","getCurrentPage","currentPage","isFirstPage","selectedType","isLastPage","nextPage","newOffset","previousPage","getLanguageName","openDetailModal","openSortModal","LibrarySortCtrl","getRevision","itemDraggedAndDropped","srcList","srcIndex","targetList","targetIndex","splice","swapItems","index1","index2","temp","moveItemUp","moveItemDown","moveItemToTop","unshift","documentsToSave","revN","revNplus1","showSaveError","ToolboxCtrl","subObj","sub","Toolbox2Ctrl","toolboxService","productZeroName","hideTypes","selectedProductIds","oldCatId","oldTypeId","setProduct","selectedProduct","selectedCategory","contentFilter","categoryFilter","oldCat","setSelectedCategory","oldType","setSelectedType","setSelectedDocument","isFullTextHit","selectedDocument","getLanguageDescription","code","lngs","searchResults","showProductFilter","newPanelPosition","relativeTo","addPanelPosition","xPosition","ALIGN_START","yPosition","BELOW","attachTo","ProductFilterCtrl","controllerAs","panelClass","openFrom","escapeToClose","focusOnOpen","disableParentScroll","zIndex","filterSelectedProducts","self","selectedProducts","selectAll","filteredProducts","selectNone","mdPanelRef","count","ProductBoxDirective","showAsLine","PartDetailDirective","partToProduct","onProductOpen","isDocumentsLoading","loadDocumentsByPart","animationDirection","TypeNameE","currentDocIndex","activeDocument","docError","loadYourPrice","yourPrice","yourPriceError","computeStaggerChangeClass","PriceList","Staffelung","getDocumentDownloadLink","moveRight","moveLeft","changeDocument","produceDocInfo","RevDestName","RevDestSize","PartBoxDirective","availabilityData","qty","partsByGroupAndCatFilter","matchQuery","reference","partsearch","partData","partNoPropertyName","productNoPropertyName","Parts","TextD","TextE","TextF","prod","references","cat","queryPrio","KategorieNummer","Nummer","GruppeNummer","DifferentiateGroups","Grundausstattung","TErsatzteillisteDocDataTable","FileDocuName","FileName","NavProduktNummer","DocumentImage","Height","Width","OriginalHeight","OriginalWidth","RevDestId","TitleD","TitleE","MaxSideLength","ImageUrl","ImageUrlRetina","Price","Value","IsAufAnfrage","ShowPriceDateFrom","ShowPriceDateTo","ProductRelation","ProductName","ProductId","NavReferenzBenutzergruppe","NavReferenzSeriennummerErforderlich","UrlD","UrlE","PartDetailDTO","HasErsatz","IsErsatzInFuture","PictureUrl","ImageFull","RelatedProducts","ProductUrlBase","ShowAvailability","ShowStatus","PartAvailabilityText","ShowPrice","ErsatzList","PartLinkFormat","PartUrl","PartAvailabilityCode","CustomsTariffNo","CountryOfOrigin","NetWeight","Availability","PartsReference","Kategorien","Referenz2Object","Gruppen","ArtikelReferenzKategorie","Bezeichnung","ArtikelReferenzGruppe","Reihenfolge","ArtikelReferenz2Object","ItemNo","ZusatzText","ReferenceGroup","IsBase","NameD","NameE","Part2Product","Sorter","IsSerialNumberRequired","IsServicePersonnelNeeded","ErsatzteillistePart2Product","ExpireDate","HasAufAnfrage","HasComplexPrice","IsClosed","IsNetto","MutationDate","PriceCat","StatusCode","USPForOneUnit","WebStatusTextDeutsch","WebStatusTextEnglisch","OnlyDetails","CategoryId","CategoryNameD","CategoryNameE","ImagePath","IsCommingSoon","IsNew","IsTemporary","LaunchDate","LongDescD","LongDescE","AvailabilityStatus","Pictures","Plans","PartDocument","FileSrcRevId","TypeNameId","TypeNameD","DocumentId","PartService","maxAge","deleteOnExpire","loadPartsByProduct","loadAvailabilityByProduct","loadDetail","itemId","PartDetailCtrl","loadPart","partIdMissing","part_1","PartOrderDetailCtrl","showPartDetail","setData","availability","categories","referenceGroups","productName","selectedGroup","isLockedOpen","getSelectedCategory","setSelectedGroup","scrollElement","scrollTarget","getSelectedGroup","toggleSideNav","hidePartDetail","p2p","partDetailData","PartCtrl","localStorageService","selectedPartsReferenceCat","selectedReferenceGroup","replacementParts","queryPartId","topLevelNav","selectedReferences","groups","selectedPartsReferenceGroup","PartCtrlSettings","part_2","ShoppingListType","AvailabilityData","QtyAvailable","UnitDe","UnitEn","TimeToShipPeriod","TimeToShip","TextDe","TextEn","ShoppingListLine","Qty","PPU","Discount","PPUAufAnfrage","YourPPU","ShoppingList","State","OwnerUserName","Created","Changed","Accessed","Lines","dirty","ServerState","ShoppingListCtrl","serverState","watcher","addWatcher","listId","lists","updateQtyDebounced","clipWidth","Updating","checkForUpdates","subscribeOnShowChange","showType","cartWidth","pageWidth","toggleCart","PulledOut","setLocalSetting","sl","margin-left","resize","$$phase","getListByType","hideOverlay","ShareModalCtrl","sharemode","wizardpage","shoppingListId","shoppingList","sendMail","cartShareForm","$setViewValue","$commitViewValue","$valid","Error","QuoteRequestEmail","shareList","ListId","shoppingListLink","generateLink","ShoppingListViewCtrl","getListsById","calculateAvailability","getQtySummary","getTotal","yourPriceEnabled","getAvailabilityText","line","print","printContents","popupWin","now","empty","appendToShoppingList","appendToList","Merkliste","RequestOnGoing","AvailabilityDirective","AddToCartButtonDirective","btnClass","listtype","tooltip","addToCart","addToList","selectOnClickDirective","ShoppingListTableDirective","onOpenPartDetail","showNettoNotification","getLocalSetting","hideNettoNotification","setYourPriceEnabled","isEnabled","$root","removeLine","partForm","clear","changeQty","amount","invalid","buttonsDisabled","showSummary","openModal","openPartDetail","OfNumber","$locale","formats","NUMBER_FORMATS","maxFraction","DECIMAL_SEP","ShoppingListService","_visibleListType","_lists","_settings","getList","defaultValue","onSuccess","updateQty","listid","requestid","updateQtyNetwork","version","_lastRequest","_debouncedUpdateQty","fetchLists","eMailAddress","sendEMail","EmailAddress","Message","onFetched","fetching","serverDate","existsOnServer","total","minStatus","maxTimeToShip","maxTimeToShipPeriod","tmpStatus","calculatedAvailability","aufAnfrage","shoppinglist_1","localStorageServiceProvider","setPrefix","ProductReferenceService","getReferences","productFilter","References","ref","ProductReferenceDate","ProductReferenceFilterData","inUseSince","ProductReferenceData","Industries","ProductReference","ProductReferenceCustomer","ProductReferenceUnits","CountryName","ProductReferenceCtrl","productReferenceService","productsLoaded","getCount","isDownloadVisible","ProductReferenceFilter","dateFrom","dateTo","getUTCDate","setUTCMonth","getUTCMonth","setUTCDate","filterDate","product_references_1","IsHidden","Modified","UserEmail","MeasuringTaskGroup","MenuEditorDetailCtrl","menueditorService","currentNavItem","currentNavItem2","getBusinessAreaList","businessAreaList","selectedMenu","selectedIndustry","selectedTask","setSelectedBA","setSelectedMenu","menu","onHideGroup","pr","onHideIndustry","mg","onHideTask","onHideProduct","bas","working","saveBusinessAreaList","saved","MenuEditorCtrl","customFullscreen","showTabDialog","MenuEntryListDirective","selectedEntry","onHideChange","getActiveClass","selectEntry","menuEditor_1","SalesToolsCtrl","blogService","getStories","loadByProduct","Blog","getTimeDiff","Verkaufshilfen","entryType","utc1","UTC","getDate","utc2","currentLang","BlogCtrl","loadedBlogEntries","entriesToLoad","hideFooterButton","getMoreTopics","getTopicRange","loadTopicRange","addTagFilter","aTag","getFeaturedTopics","BlogDetailCtrl","cnt","filename","RoutedURL","gaPath","EventCtrl","years","year","isFuterEvent","isFutureEvent","tree","getDateRange","datestr","todayPlus2","setDate","isInYear","getImgSrc","BerechnungCtrl","ozon","aK","aS","oldPEVal","oldTE","p0","p1","t0","t1","tempConvert","CelsiusToKelvin","FahrenheitToKelvin","KelvinToCelsius","KelvinToFahrenheit","hazen","showHints","messumfang","schicht","absorption","druckEinheiten","temperatur","temperaturEinheiten","messumfangErgebnis","currentPE","currentTE","wavelengths","wavelength","messumfangHazen","schichtHazen","absorptionHazen","BerechneSchicht","BerechneNorm","BerechneDruck","BerechneTemperatur","SetzeNormbedingungen","k0","BerechneSchichtHazen","w","pad","num","size","ScrubberCtrl","lowByte","highByte","dataForm","binary","getBit","getBitRange","stop","initData","BlogEntryDirective","getEntryUrl","URL","getAttachmentLink","getGAPath","getAttachmentExtension","getTagString","tagNames","StartingIndex","NrOfItems","onlyFeatured","checkDate","NrOfEntries","Training","EMail","EndDate","IsCanceled","RegClosing","StartDate","TimeSpan","TypeDescD","TypeDescE","TrainingFormData","teilnehmer","vertretung","einsatzbereich","hotel","hotelFrom","hotelTo","essenswuensche","essenswuenscheprosa","remark","submitDate","TrainingServiceData","Trainings","Agency","TrainingService","loadTrainings","registerTraining","model","trainingId","TrainingCtrl","trainingService","master","noTrainings","childScope","anmeldung","initModel","$parent","registrationPossible","training_1","SupportPortalService","getMacAddresses","serial","PhotometerApiBaseUrl","variables","certsBySerials","serials","errors","itemsBySerial","SupportPortalCtrl","supportPortalService","ResetMask","item2Serial","deviceDocuments","sn","HasDocuments","types","includes","ProduceDocInfo","GetDocumentDownloadLink","serialFromQuery","snInfo","Number","deviceSerialInput","deviceSerialForm","$setTouched","LoadDataBySerial","LoadSupportData","serialnr","searchByLanguage","languageCode","docs","lc","GetDataBySerial","resp","itemBySerialWithSub","serialnumber","documentsByMultipleSerials","reduce","acc","psck","productMenuNode","productRouteStack","productImage","productUrl","uniqueDocId","docId","PzeService","timesByDate","dayFrom","dayTo","dayFromStr","dayToStr","personalIcalUrl","PzeCtrl","pzeService","dayStart","dayEnd","dayStartHour","dayEndHour","icalurl","times","getHourInPercent","hour","absolute","getFormatedTime","loadMoreData","oldStart","getDifference","totalSystemPaidHours","totalPaidHours","decToTime","hours","h","trunc","getSaldo","saldo","projectedEndOfWorkday","loadICalUrl","NewUserData","UserName","Comment","UpdateUserData","IsApproved","IsLockedOut","Groups","Group","Permissions","Permission","UserAdminServiceData","Users","LastLoginDate","UserAdminDetailCtrl","userAdminService","showUnApproved","showLocked","showRegular","refreshData","users","permissions","UserNames","GroupNames","PermissionNames","selectUser","selectedUser","selectedPermission","groupSearch","permissionSearch","selectGroup","groupname","userSearch","selectPermission","permissionname","getUserClass","cls","getSelectedClass","filterUser","filterGroups","filterPermissions","filterUserNotInRole","addUserToRole","selectUserNameForAdd","updateUser","removeUserFromRole","selectUserNameForRemove","indexOfRole","createUser","newUserData","unlockUser","filterNotInSelectedGroup","addPermission","selectPermissionForAdd","UpdateGroup","removePermission","selectPermissionForRemove","indexOfPerm","createPermission","newPermissionData","filterRoleNotInSelectedUser","rolename","addRoleToUser","selectRoleForAdd","removeRoleFromUser","selectRoleForRemove","filterRoleNotInSelectedPermission","addRoleToPermission","updatePermission","removeRoleFromPermission","createRole","newRoleName","createGroup","toggleSidebar","UserAdminCtrl","showDialog","UserAdminService","newUser","userId","userData","deleteUser","guid","deleteGroup","permissionName","desc","stringify","deletePermission","DocumentDetailServiceData","ReplacedBy","CrossReference","IsImage","showList","YourPrice","PartId","ItemNavItem","AllSearchResult","Items","MetaData","Score","Result","ResultHit","Item","Highlights","Index","ApplicationsSearchServiceData","Icon","RefCount","IsBlocked","ReplaceCount","ReplaceById","Results","IsComingSoon","ifIntranet","FormSrvErrorCollection","NewsletterProfileData","IsFeatured","IsVisible","MetaTitle","CreatedBy","LastAuthor","ContentMetaStatus","ContentTag"],"mappings":"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","file":"../main.js","sourcesContent":["\r\n\r\nvar define: any;\r\n\r\ndeclare var Dragdealer: any; // Magic\r\n\r\n/**\r\n * Dragdealer.js 0.10.0\r\n * http://github.com/skidding/dragdealer\r\n *\r\n * (c) 2010+ Ovidiu Cherecheș\r\n * http://skidding.mit-license.org\r\n */\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(factory);\r\n } else if (typeof module === 'object' && module.exports) {\r\n // Node. Does not work with strict CommonJS, but\r\n // only CommonJS-like enviroments that support module.exports,\r\n // like Node.\r\n module.exports.Dragdealer = factory();\r\n } else {\r\n // Browser globals\r\n root.Dragdealer = factory();\r\n }\r\n}(this, function () {\r\n\r\nvar Dragdealer = function(wrapper, options) {\r\n /**\r\n * Drag-based component that works around two basic DOM elements.\r\n *\r\n * - The wrapper: The top-level element with the .dragdealer class. We\r\n * create a Dragdealer instance with the wrapper as the\r\n * first constructor parameter (it can either receive the ID\r\n * of the wrapper, or the element itself.) The wrapper\r\n * establishes the dragging bounds.\r\n *\r\n * - The handle: A child of the wrapper element, div with a required\r\n * .handle class (may be overridden in options). This will be\r\n * the dragged element, constrained by the wrapper's bounds.\r\n *\r\n *\r\n * The handle can be both smaller or bigger than the wrapper.\r\n *\r\n * - When the handle is smaller, Dragdealer will act as a regular slider,\r\n * enabling the handle to be dragged from one side of the wrapper to\r\n * another.\r\n *\r\n * - When the handle is bigger, Dragdealer will act a mask for a draggable\r\n * surface, where the handle is the draggable surface contrained by the\r\n * smaller bounds of the wrapper. The drag action in this case is used\r\n * to reveal and \"discover\" partial content at a time.\r\n *\r\n *\r\n * Simple usage:\r\n *\r\n * // JavaScript\r\n * new Dragdealer('simple-slider');\r\n *\r\n * \r\n *
\r\n *
drag me
\r\n *
\r\n *\r\n *\r\n * The second parameter of the Dragdealer constructor is an object used for\r\n * specifying any of the supported options. All of them are optional.\r\n *\r\n * - bool disabled=false: Init Dragdealer in a disabled state. The handle\r\n * will have a .disabled class.\r\n *\r\n * - bool horizontal=true: Enable horizontal dragging.\r\n *\r\n * - bool vertical=false: Enable vertical dragging.\r\n *\r\n * - number x=0: Initial horizontal (left) position. Accepts a float number\r\n * value between 0 and 1. Read below about positioning in\r\n * Dragdealer.\r\n *\r\n * - number y=0: Initial vertical (top) position. Accepts a float number\r\n * value between 0 and 1. Read below about positoning in\r\n * Dragdealer.\r\n *\r\n * - number steps=0: Limit the positioning of the handle within the bounds\r\n * of the wrapper, by defining a virtual grid made out of\r\n * a number of equally-spaced steps. This restricts\r\n * placing the handle anywhere in-between these steps.\r\n * E.g. setting 3 steps to a regular slider will only\r\n * allow you to move it to the left, to the right or\r\n * exactly in the middle.\r\n *\r\n * - bool snap=false: When a number of steps is set, snap the position of\r\n * the handle to its closest step instantly, even when\r\n * dragging.\r\n *\r\n * - number speed=0.1: Speed can be set between 0 and 1, with 1 being the\r\n * fastest. It represents how fast the handle will slide\r\n * to position after you mouse up.\r\n *\r\n * - bool slide=true: Slide handle after releasing it, depending on the\r\n * movement speed before the mouse/touch release. The\r\n * formula for calculating how much will the handle\r\n * slide after releasing it is defined by simply\r\n * extending the movement of the handle in the current\r\n * direction, with the last movement unit times four (a\r\n * movement unit is considered the distance crossed\r\n * since the last animation loop, which is currently\r\n * 25ms.) So if you were to drag the handle 50px in the\r\n * blink of an eye, it will slide another 200px in the\r\n * same direction. Steps interfere with this formula, as\r\n * the closest step is calculated before the sliding\r\n * distance.\r\n *\r\n * - bool loose=false: Loosen-up wrapper boundaries when dragging. This\r\n * allows the handle to be *slightly* dragged outside\r\n * the bounds of the wrapper, but slides it back to the\r\n * margins of the wrapper upon release. The formula for\r\n * calculating how much the handle exceeds the wrapper\r\n * bounds is made out of the actual drag distance\r\n * divided by 4. E.g. Pulling a slider outside its\r\n * frame by 100px will only position it 25px outside\r\n * the frame.\r\n *\r\n * - number top=0: Top padding between the wrapper and the handle.\r\n *\r\n * - number bottom=0: Bottom padding between the wrapper and the handle.\r\n *\r\n * - number left=0: Left padding between the wrapper and the handle.\r\n *\r\n * - number right=0: Right padding between the wrapper and the handle.\r\n *\r\n * - fn callback(x, y): Called when releasing handle, with the projected\r\n * x, y position of the handle. Projected value means\r\n * the value the slider will have after finishing a\r\n * sliding animation, caused by either a step\r\n * restriction or drag motion (see steps and slide\r\n * options.) This implies that the actual position of\r\n * the handle at the time this callback is called\r\n * might not yet reflect the x, y values received.\r\n *\r\n * - fn dragStopCallback(x,y): Same as callback(x,y) but only called after\r\n * a drag motion, not after setting the step\r\n * manually.\r\n *\r\n * - fn dragStartCallback(x,y): Same as dragStopCallback(x,y) but called at\r\n * the beginning of a drag motion and with the\r\n * sliders initial x, y values.\r\n *\r\n * - fn animationCallback(x, y): Called every animation loop, as long as\r\n * the handle is being dragged or in the\r\n * process of a sliding animation. The x, y\r\n * positional values received by this\r\n * callback reflect the exact position of the\r\n * handle DOM element, which includes\r\n * exceeding values (even negative values)\r\n * when the loose option is set true.\r\n *\r\n * - string handleClass='handle': Custom class of handle element.\r\n *\r\n * - bool css3=true: Use css3 transform in modern browsers instead of\r\n * absolute positioning.\r\n *\r\n * - fn customRequestAnimationFrame: Provide custom requestAnimationFrame\r\n * function (used in tests).\r\n * - fn customCancelAnimationFrame: Provide custom cancelAnimationFrame\r\n * function (used in tests).\r\n *\r\n * Dragdealer also has a few methods to interact with, post-initialization.\r\n *\r\n * - disable: Disable dragging of a Dragdealer instance. Just as with the\r\n * disabled option, the handle will receive a .disabled class\r\n *\r\n * - enable: Enable dragging of a Dragdealer instance. The .disabled class\r\n * of the handle will be removed.\r\n *\r\n * - reflow: Recalculate the wrapper bounds of a Dragdealer instance, used\r\n * when the wrapper is responsive and its parent container\r\n * changed its size, or after changing the size of the wrapper\r\n * directly.\r\n *\r\n * - getValue: Get the value of a Dragdealer instance programatically. The\r\n * value is returned as an [x, y] tuple and is the equivalent\r\n * of the (projected) value returned by the regular callback,\r\n * not animationCallback.\r\n *\r\n * - getStep: Same as getValue, but the value returned is in step\r\n * increments (see steps option)\r\n *\r\n * - setValue(x, y, snap=false): Set the value of a Dragdealer instance\r\n * programatically. The 3rd parameter allows\r\n * to snap the handle directly to the desired\r\n * value, without any sliding transition.\r\n *\r\n * - setStep(x, y, snap=false): Same as setValue, but the value is received\r\n * in step increments (see steps option)\r\n *\r\n *\r\n * Positioning in Dragdealer:\r\n *\r\n * Besides the top, bottom, left and right paddings, which represent a\r\n * number of pixels, Dragdealer uses a [0, 1]-based positioning. Both\r\n * horizontal and vertical positions are represented by ratios between 0\r\n * and 1. This allows the Dragdealer wrapper to have a responsive size and\r\n * not revolve around a specific number of pixels. This is how the x, y\r\n * options are set, what the callback args contain and what values the\r\n * setValue method expects. Once picked up, the ratios can be scaled and\r\n * mapped to match any real-life system of coordinates or dimensions.\r\n */\r\n this.options = this.applyDefaults(options || {});\r\n this.bindMethods();\r\n this.wrapper = this.getWrapperElement(wrapper);\r\n if (!this.wrapper) {\r\n return;\r\n }\r\n this.handle = this.getHandleElement(this.wrapper, this.options.handleClass);\r\n if (!this.handle) {\r\n return;\r\n }\r\n this.init();\r\n this.bindEventListeners();\r\n};\r\n\r\n\r\nDragdealer.prototype = {\r\n defaults: {\r\n disabled: false,\r\n horizontal: true,\r\n vertical: false,\r\n slide: true,\r\n steps: 0,\r\n snap: false,\r\n loose: false,\r\n speed: 0.1,\r\n xPrecision: 0,\r\n yPrecision: 0,\r\n handleClass: 'handle',\r\n css3: true,\r\n activeClass: 'active',\r\n tapping: true\r\n },\r\n init: function() {\r\n if (this.options.css3) {\r\n triggerWebkitHardwareAcceleration(this.handle);\r\n }\r\n this.value = {\r\n prev: [-1, -1],\r\n current: [this.options.x || 0, this.options.y || 0],\r\n target: [this.options.x || 0, this.options.y || 0]\r\n };\r\n this.offset = {\r\n wrapper: [0, 0],\r\n mouse: [0, 0],\r\n prev: [-999999, -999999],\r\n current: [0, 0],\r\n target: [0, 0]\r\n };\r\n this.dragStartPosition = {x: 0, y: 0};\r\n this.change = [0, 0];\r\n this.stepRatios = this.calculateStepRatios();\r\n\r\n this.activity = false;\r\n this.dragging = false;\r\n this.tapping = false;\r\n\r\n this.reflow();\r\n if (this.options.disabled) {\r\n this.disable();\r\n }\r\n },\r\n applyDefaults: function(options) {\r\n for (var k in this.defaults) {\r\n if (!options.hasOwnProperty(k)) {\r\n options[k] = this.defaults[k];\r\n }\r\n }\r\n return options;\r\n },\r\n getWrapperElement: function(wrapper) {\r\n if (typeof(wrapper) == 'string') {\r\n return document.getElementById(wrapper);\r\n } else {\r\n return wrapper;\r\n }\r\n },\r\n getHandleElement: function(wrapper, handleClass) {\r\n var childElements,\r\n handleClassMatcher,\r\n i;\r\n if (wrapper.getElementsByClassName) {\r\n childElements = wrapper.getElementsByClassName(handleClass);\r\n if (childElements.length > 0) {\r\n return childElements[0];\r\n }\r\n } else {\r\n handleClassMatcher = new RegExp('(^|\\\\s)' + handleClass + '(\\\\s|$)');\r\n childElements = wrapper.getElementsByTagName('*');\r\n for (i = 0; i < childElements.length; i++) {\r\n if (handleClassMatcher.test(childElements[i].className)) {\r\n return childElements[i];\r\n }\r\n }\r\n }\r\n },\r\n calculateStepRatios: function() {\r\n var stepRatios = [];\r\n if (this.options.steps >= 1) {\r\n for (var i = 0; i <= this.options.steps - 1; i++) {\r\n if (this.options.steps > 1) {\r\n stepRatios[i] = i / (this.options.steps - 1);\r\n } else {\r\n // A single step will always have a 0 value\r\n stepRatios[i] = 0;\r\n }\r\n }\r\n }\r\n return stepRatios;\r\n },\r\n setWrapperOffset: function() {\r\n this.offset.wrapper = Position.get(this.wrapper);\r\n },\r\n calculateBounds: function() {\r\n // Apply top/bottom/left and right padding options to wrapper extremities\r\n // when calculating its bounds\r\n var bounds : any = {\r\n top: this.options.top || 0,\r\n bottom: -(this.options.bottom || 0) + this.wrapper.offsetHeight,\r\n left: this.options.left || 0,\r\n right: -(this.options.right || 0) + this.wrapper.offsetWidth\r\n };\r\n // The available width and height represents the horizontal and vertical\r\n // space the handle has for moving. It is determined by the width and\r\n // height of the wrapper, minus the width and height of the handle\r\n bounds.availWidth = (bounds.right - bounds.left) - this.handle.offsetWidth;\r\n bounds.availHeight = (bounds.bottom - bounds.top) - this.handle.offsetHeight;\r\n return bounds;\r\n },\r\n calculateValuePrecision: function() {\r\n // The sliding transition works by dividing itself until it reaches a min\r\n // value step; because Dragdealer works with [0-1] values, we need this\r\n // \"min value step\" to represent a pixel when applied to the real handle\r\n // position within the DOM. The xPrecision/yPrecision options can be\r\n // specified to increase the granularity when we're controlling larger\r\n // objects from one of the callbacks\r\n var xPrecision = this.options.xPrecision || Math.abs(this.bounds.availWidth),\r\n yPrecision = this.options.yPrecision || Math.abs(this.bounds.availHeight);\r\n return [\r\n xPrecision ? 1 / xPrecision : 0,\r\n yPrecision ? 1 / yPrecision : 0\r\n ];\r\n },\r\n bindMethods: function() {\r\n if (typeof(this.options.customRequestAnimationFrame) === 'function') {\r\n this.requestAnimationFrame = bind(this.options.customRequestAnimationFrame, window);\r\n } else {\r\n this.requestAnimationFrame = bind(requestAnimationFrame, window);\r\n }\r\n if (typeof(this.options.customCancelAnimationFrame) === 'function') {\r\n this.cancelAnimationFrame = bind(this.options.customCancelAnimationFrame, window);\r\n } else {\r\n this.cancelAnimationFrame = bind(cancelAnimationFrame, window);\r\n }\r\n this.animateWithRequestAnimationFrame = bind(this.animateWithRequestAnimationFrame, this);\r\n this.animate = bind(this.animate, this);\r\n this.onHandleMouseDown = bind(this.onHandleMouseDown, this);\r\n this.onHandleTouchStart = bind(this.onHandleTouchStart, this);\r\n this.onDocumentMouseMove = bind(this.onDocumentMouseMove, this);\r\n this.onWrapperTouchMove = bind(this.onWrapperTouchMove, this);\r\n this.onWrapperMouseDown = bind(this.onWrapperMouseDown, this);\r\n this.onWrapperTouchStart = bind(this.onWrapperTouchStart, this);\r\n this.onDocumentMouseUp = bind(this.onDocumentMouseUp, this);\r\n this.onDocumentTouchEnd = bind(this.onDocumentTouchEnd, this);\r\n this.onHandleClick = bind(this.onHandleClick, this);\r\n this.onWindowResize = bind(this.onWindowResize, this);\r\n },\r\n bindEventListeners: function() {\r\n // Start dragging\r\n addEventListener(this.handle, 'mousedown', this.onHandleMouseDown);\r\n addEventListener(this.handle, 'touchstart', this.onHandleTouchStart);\r\n // While dragging\r\n addEventListener(document, 'mousemove', this.onDocumentMouseMove);\r\n addEventListener(this.wrapper, 'touchmove', this.onWrapperTouchMove);\r\n // Start tapping\r\n addEventListener(this.wrapper, 'mousedown', this.onWrapperMouseDown);\r\n addEventListener(this.wrapper, 'touchstart', this.onWrapperTouchStart);\r\n // Stop dragging/tapping\r\n addEventListener(document, 'mouseup', this.onDocumentMouseUp);\r\n addEventListener(document, 'touchend', this.onDocumentTouchEnd);\r\n\r\n addEventListener(this.handle, 'click', this.onHandleClick);\r\n addEventListener(window, 'resize', this.onWindowResize);\r\n\r\n this.animate(false, true);\r\n this.interval = this.requestAnimationFrame(this.animateWithRequestAnimationFrame);\r\n\r\n },\r\n unbindEventListeners: function() {\r\n removeEventListener(this.handle, 'mousedown', this.onHandleMouseDown);\r\n removeEventListener(this.handle, 'touchstart', this.onHandleTouchStart);\r\n removeEventListener(document, 'mousemove', this.onDocumentMouseMove);\r\n removeEventListener(this.wrapper, 'touchmove', this.onWrapperTouchMove);\r\n removeEventListener(this.wrapper, 'mousedown', this.onWrapperMouseDown);\r\n removeEventListener(this.wrapper, 'touchstart', this.onWrapperTouchStart);\r\n removeEventListener(document, 'mouseup', this.onDocumentMouseUp);\r\n removeEventListener(document, 'touchend', this.onDocumentTouchEnd);\r\n removeEventListener(this.handle, 'click', this.onHandleClick);\r\n removeEventListener(window, 'resize', this.onWindowResize);\r\n this.cancelAnimationFrame(this.interval);\r\n },\r\n onHandleMouseDown: function(e) {\r\n Cursor.refresh(e);\r\n preventEventDefaults(e);\r\n stopEventPropagation(e);\r\n this.activity = false;\r\n this.startDrag();\r\n },\r\n onHandleTouchStart: function(e) {\r\n Cursor.refresh(e);\r\n // Unlike in the `mousedown` event handler, we don't prevent defaults here,\r\n // because this would disable the dragging altogether. Instead, we prevent\r\n // it in the `touchmove` handler. Read more about touch events\r\n // https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Touch_events#Handling_clicks\r\n stopEventPropagation(e);\r\n this.activity = false;\r\n this.startDrag();\r\n },\r\n onDocumentMouseMove: function(e) {\r\n if ((e.clientX - this.dragStartPosition.x) === 0 &&\r\n (e.clientY - this.dragStartPosition.y) === 0) {\r\n // This is required on some Windows8 machines that get mouse move events without actual mouse movement\r\n return;\r\n }\r\n\r\n Cursor.refresh(e);\r\n if (this.dragging) {\r\n this.activity = true;\r\n preventEventDefaults(e);\r\n }\r\n },\r\n onWrapperTouchMove: function(e) {\r\n Cursor.refresh(e);\r\n // Dragging on a disabled axis (horizontal or vertical) shouldn't prevent\r\n // defaults on touch devices. !this.activity denotes this is the first move\r\n // inside a drag action; you can drag in any direction after this point if\r\n // the dragging wasn't stopped\r\n if (!this.activity && this.draggingOnDisabledAxis()) {\r\n if (this.dragging) {\r\n this.stopDrag();\r\n }\r\n return;\r\n }\r\n // Read comment in `onHandleTouchStart` above, to understand why we're\r\n // preventing defaults here and not there\r\n preventEventDefaults(e);\r\n this.activity = true;\r\n },\r\n onWrapperMouseDown: function(e) {\r\n Cursor.refresh(e);\r\n preventEventDefaults(e);\r\n this.startTap();\r\n },\r\n onWrapperTouchStart: function(e) {\r\n Cursor.refresh(e);\r\n preventEventDefaults(e);\r\n this.startTap();\r\n },\r\n onDocumentMouseUp: function(e) {\r\n this.stopDrag();\r\n this.stopTap();\r\n },\r\n onDocumentTouchEnd: function(e) {\r\n this.stopDrag();\r\n this.stopTap();\r\n },\r\n onHandleClick: function(e) {\r\n // We keep track if any dragging activity has been made between the\r\n // mouse/touch down and up events; based on this we allow or cancel a click\r\n // event from inside the handle. i.e. Click events shouldn't be triggered\r\n // when dragging, but should be allowed when clicking still\r\n if (this.activity) {\r\n preventEventDefaults(e);\r\n stopEventPropagation(e);\r\n }\r\n },\r\n onWindowResize: function(e) {\r\n this.reflow();\r\n },\r\n enable: function() {\r\n this.disabled = false;\r\n this.handle.className = this.handle.className.replace(/\\s?disabled/g, '');\r\n },\r\n disable: function() {\r\n this.disabled = true;\r\n this.handle.className += ' disabled';\r\n },\r\n reflow: function() {\r\n this.setWrapperOffset();\r\n this.bounds = this.calculateBounds();\r\n this.valuePrecision = this.calculateValuePrecision();\r\n this.updateOffsetFromValue();\r\n },\r\n getStep: function() {\r\n return [\r\n this.getStepNumber(this.value.target[0]),\r\n this.getStepNumber(this.value.target[1])\r\n ];\r\n },\r\n getStepWidth: function () {\r\n return Math.abs(this.bounds.availWidth / this.options.steps);\r\n },\r\n getValue: function() {\r\n return this.value.target;\r\n },\r\n setStep: function(x, y, snap) {\r\n this.setValue(\r\n this.options.steps && x > 1 ? (x - 1) / (this.options.steps - 1) : 0,\r\n this.options.steps && y > 1 ? (y - 1) / (this.options.steps - 1) : 0,\r\n snap\r\n );\r\n },\r\n setValue: function(x, y, snap) {\r\n this.setTargetValue([x, y || 0]);\r\n if (snap) {\r\n this.groupCopy(this.value.current, this.value.target);\r\n // Since the current value will be equal to the target one instantly, the\r\n // animate function won't get to run so we need to update the positions\r\n // and call the callbacks manually\r\n this.updateOffsetFromValue();\r\n this.callAnimationCallback();\r\n }\r\n },\r\n startTap: function() {\r\n if (this.disabled || !this.options.tapping) {\r\n return;\r\n }\r\n\r\n this.tapping = true;\r\n this.setWrapperOffset();\r\n\r\n //Check if the slider is a stepped snap slider:\r\n if (this.options.snap && this.options.steps) {\r\n //If we have a snap slider, it makes more sense that when a user click on the wrapper\r\n //the handle will snap to the closest step, instead of moving with a ratio until it\r\n //reaches the step.\r\n //Check for the closest step and set it as the current value\r\n var cursorXRatio = (Cursor.x - this.offset.wrapper[0]) / this.bounds.availWidth;\r\n var cursorYRatio = (Cursor.y - this.offset.wrapper[1]) / this.bounds.availHeight;\r\n this.setValue(this.getClosestStep(cursorXRatio), this.getClosestStep(cursorYRatio), true);\r\n } else {\r\n this.setTargetValueByOffset([\r\n Cursor.x - this.offset.wrapper[0] - (this.handle.offsetWidth / 2),\r\n Cursor.y - this.offset.wrapper[1] - (this.handle.offsetHeight / 2)\r\n ]);\r\n }\r\n },\r\n stopTap: function() {\r\n if (this.disabled || !this.tapping) {\r\n return;\r\n }\r\n this.tapping = false;\r\n\r\n this.setTargetValue(this.value.current);\r\n },\r\n startDrag: function() {\r\n if (this.disabled) {\r\n return;\r\n }\r\n this.dragging = true;\r\n this.setWrapperOffset();\r\n\r\n this.dragStartPosition = {x: Cursor.x, y: Cursor.y};\r\n this.offset.mouse = [\r\n Cursor.x - Position.get(this.handle)[0],\r\n Cursor.y - Position.get(this.handle)[1]\r\n ];\r\n if (!this.wrapper.className.match(this.options.activeClass)) {\r\n this.wrapper.className += ' ' + this.options.activeClass;\r\n }\r\n this.callDragStartCallback();\r\n },\r\n stopDrag: function() {\r\n if (this.disabled || !this.dragging) {\r\n return;\r\n }\r\n this.dragging = false;\r\n var deltaX = this.bounds.availWidth === 0 ? 0 :\r\n ((Cursor.x - this.dragStartPosition.x) / this.bounds.availWidth),\r\n deltaY = this.bounds.availHeight === 0 ? 0 :\r\n ((Cursor.y - this.dragStartPosition.y) / this.bounds.availHeight),\r\n delta = [deltaX, deltaY];\r\n\r\n var target = this.groupClone(this.value.current);\r\n if (this.options.slide) {\r\n var ratioChange = this.change;\r\n target[0] += ratioChange[0] * 4;\r\n target[1] += ratioChange[1] * 4;\r\n }\r\n this.setTargetValue(target);\r\n this.wrapper.className = this.wrapper.className.replace(' ' + this.options.activeClass, '');\r\n this.callDragStopCallback(delta);\r\n },\r\n callAnimationCallback: function() {\r\n var value = this.value.current;\r\n if (this.options.snap && this.options.steps > 1) {\r\n value = this.getClosestSteps(value);\r\n }\r\n if (!this.groupCompare(value, this.value.prev)) {\r\n if (typeof(this.options.animationCallback) == 'function') {\r\n this.options.animationCallback.call(this, value[0], value[1]);\r\n }\r\n this.groupCopy(this.value.prev, value);\r\n }\r\n },\r\n callTargetCallback: function() {\r\n if (typeof(this.options.callback) == 'function') {\r\n this.options.callback.call(this, this.value.target[0], this.value.target[1]);\r\n }\r\n },\r\n callDragStartCallback: function() {\r\n if (typeof(this.options.dragStartCallback) == 'function') {\r\n this.options.dragStartCallback.call(this, this.value.target[0], this.value.target[1]);\r\n }\r\n },\r\n callDragStopCallback: function(delta) {\r\n if (typeof(this.options.dragStopCallback) == 'function') {\r\n this.options.dragStopCallback.call(this, this.value.target[0], this.value.target[1], delta);\r\n }\r\n },\r\n animateWithRequestAnimationFrame: function (time) {\r\n if (time) {\r\n // using requestAnimationFrame\r\n this.timeOffset = this.timeStamp ? time - this.timeStamp : 0;\r\n this.timeStamp = time;\r\n } else {\r\n // using setTimeout(callback, 25) polyfill\r\n this.timeOffset = 25;\r\n }\r\n this.animate();\r\n this.interval = this.requestAnimationFrame(this.animateWithRequestAnimationFrame);\r\n },\r\n animate: function(direct, first) {\r\n if (direct && !this.dragging) {\r\n return;\r\n }\r\n if (this.dragging) {\r\n var prevTarget = this.groupClone(this.value.target);\r\n\r\n var offset = [\r\n Cursor.x - this.offset.wrapper[0] - this.offset.mouse[0],\r\n Cursor.y - this.offset.wrapper[1] - this.offset.mouse[1]\r\n ];\r\n this.setTargetValueByOffset(offset, this.options.loose);\r\n\r\n this.change = [\r\n this.value.target[0] - prevTarget[0],\r\n this.value.target[1] - prevTarget[1]\r\n ];\r\n }\r\n if (this.dragging || first) {\r\n this.groupCopy(this.value.current, this.value.target);\r\n }\r\n if (this.dragging || this.glide() || first) {\r\n this.updateOffsetFromValue();\r\n this.callAnimationCallback();\r\n }\r\n },\r\n glide: function() {\r\n var diff = [\r\n this.value.target[0] - this.value.current[0],\r\n this.value.target[1] - this.value.current[1]\r\n ];\r\n if (!diff[0] && !diff[1]) {\r\n return false;\r\n }\r\n if (Math.abs(diff[0]) > this.valuePrecision[0] ||\r\n Math.abs(diff[1]) > this.valuePrecision[1]) {\r\n this.value.current[0] += diff[0] * Math.min(this.options.speed * this.timeOffset / 25, 1);\r\n this.value.current[1] += diff[1] * Math.min(this.options.speed * this.timeOffset / 25, 1);\r\n } else {\r\n this.groupCopy(this.value.current, this.value.target);\r\n }\r\n return true;\r\n },\r\n updateOffsetFromValue: function() {\r\n if (!this.options.snap) {\r\n this.offset.current = this.getOffsetsByRatios(this.value.current);\r\n } else {\r\n this.offset.current = this.getOffsetsByRatios(\r\n this.getClosestSteps(this.value.current)\r\n );\r\n }\r\n if (!this.groupCompare(this.offset.current, this.offset.prev)) {\r\n this.renderHandlePosition();\r\n this.groupCopy(this.offset.prev, this.offset.current);\r\n }\r\n },\r\n renderHandlePosition: function() {\r\n\r\n var transform = '';\r\n if (this.options.css3 && StylePrefix.transform) {\r\n if (this.options.horizontal) {\r\n transform += 'translateX(' + this.offset.current[0] + 'px)';\r\n }\r\n if (this.options.vertical) {\r\n transform += ' translateY(' + this.offset.current[1] + 'px)';\r\n }\r\n this.handle.style[StylePrefix.transform] = transform;\r\n return;\r\n }\r\n\r\n if (this.options.horizontal) {\r\n this.handle.style.left = this.offset.current[0] + 'px';\r\n }\r\n if (this.options.vertical) {\r\n this.handle.style.top = this.offset.current[1] + 'px';\r\n }\r\n },\r\n setTargetValue: function(value, loose) {\r\n var target = loose ? this.getLooseValue(value) : this.getProperValue(value);\r\n\r\n this.groupCopy(this.value.target, target);\r\n this.offset.target = this.getOffsetsByRatios(target);\r\n\r\n this.callTargetCallback();\r\n },\r\n setTargetValueByOffset: function(offset, loose) {\r\n var value = this.getRatiosByOffsets(offset);\r\n var target = loose ? this.getLooseValue(value) : this.getProperValue(value);\r\n\r\n this.groupCopy(this.value.target, target);\r\n this.offset.target = this.getOffsetsByRatios(target);\r\n },\r\n getLooseValue: function(value) {\r\n var proper = this.getProperValue(value);\r\n return [\r\n proper[0] + ((value[0] - proper[0]) / 4),\r\n proper[1] + ((value[1] - proper[1]) / 4)\r\n ];\r\n },\r\n getProperValue: function(value) {\r\n var proper = this.groupClone(value);\r\n\r\n proper[0] = Math.max(proper[0], 0);\r\n proper[1] = Math.max(proper[1], 0);\r\n proper[0] = Math.min(proper[0], 1);\r\n proper[1] = Math.min(proper[1], 1);\r\n\r\n if ((!this.dragging && !this.tapping) || this.options.snap) {\r\n if (this.options.steps > 1) {\r\n proper = this.getClosestSteps(proper);\r\n }\r\n }\r\n return proper;\r\n },\r\n getRatiosByOffsets: function(group) {\r\n return [\r\n this.getRatioByOffset(group[0], this.bounds.availWidth, this.bounds.left),\r\n this.getRatioByOffset(group[1], this.bounds.availHeight, this.bounds.top)\r\n ];\r\n },\r\n getRatioByOffset: function(offset, range, padding) {\r\n return range ? (offset - padding) / range : 0;\r\n },\r\n getOffsetsByRatios: function(group) {\r\n return [\r\n this.getOffsetByRatio(group[0], this.bounds.availWidth, this.bounds.left),\r\n this.getOffsetByRatio(group[1], this.bounds.availHeight, this.bounds.top)\r\n ];\r\n },\r\n getOffsetByRatio: function(ratio, range, padding) {\r\n return Math.round(ratio * range) + padding;\r\n },\r\n getStepNumber: function(value) {\r\n // Translate a [0-1] value into a number from 1 to N steps (set using the\r\n // \"steps\" option)\r\n return this.getClosestStep(value) * (this.options.steps - 1) + 1;\r\n },\r\n getClosestSteps: function(group) {\r\n return [\r\n this.getClosestStep(group[0]),\r\n this.getClosestStep(group[1])\r\n ];\r\n },\r\n getClosestStep: function(value) {\r\n var k = 0;\r\n var min = 1;\r\n for (var i = 0; i <= this.options.steps - 1; i++) {\r\n if (Math.abs(this.stepRatios[i] - value) < min) {\r\n min = Math.abs(this.stepRatios[i] - value);\r\n k = i;\r\n }\r\n }\r\n return this.stepRatios[k];\r\n },\r\n groupCompare: function(a, b) {\r\n return a[0] == b[0] && a[1] == b[1];\r\n },\r\n groupCopy: function(a, b) {\r\n a[0] = b[0];\r\n a[1] = b[1];\r\n },\r\n groupClone: function(a) {\r\n return [a[0], a[1]];\r\n },\r\n draggingOnDisabledAxis: function() {\r\n return (!this.options.horizontal && Cursor.xDiff > Cursor.yDiff) ||\r\n (!this.options.vertical && Cursor.yDiff > Cursor.xDiff);\r\n }\r\n};\r\n\r\n\r\nvar bind = function(fn, context) {\r\n /**\r\n * CoffeeScript-like function to bind the scope of a method to an instance,\r\n * the context of that method, regardless from where it is called\r\n */\r\n return function() {\r\n return fn.apply(context, arguments);\r\n };\r\n};\r\n\r\n// Cross-browser vanilla JS event handling\r\n\r\nvar addEventListener = function(element, type, callback) {\r\n if (element.addEventListener) {\r\n element.addEventListener(type, callback, false);\r\n } else if (element.attachEvent) {\r\n element.attachEvent('on' + type, callback);\r\n }\r\n};\r\n\r\nvar removeEventListener = function(element, type, callback) {\r\n if (element.removeEventListener) {\r\n element.removeEventListener(type, callback, false);\r\n } else if (element.detachEvent) {\r\n element.detachEvent('on' + type, callback);\r\n }\r\n};\r\n\r\nvar preventEventDefaults = function(e) {\r\n if (!e) {\r\n e = window.event;\r\n }\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n e.returnValue = false;\r\n};\r\n\r\nvar stopEventPropagation = function(e) {\r\n if (!e) {\r\n e = window.event;\r\n }\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n e.cancelBubble = true;\r\n};\r\n\r\n\r\nvar Cursor = {\r\n /**\r\n * Abstraction for making the combined mouse or touch position available at\r\n * any time.\r\n *\r\n * It picks up the \"move\" events as an independent component and simply makes\r\n * the latest x and y mouse/touch position of the user available at any time,\r\n * which is requested with Cursor.x and Cursor.y respectively.\r\n *\r\n * It can receive both mouse and touch events consecutively, extracting the\r\n * relevant meta data from each type of event.\r\n *\r\n * Cursor.refresh(e) is called to update the global x and y values, with a\r\n * genuine MouseEvent or a TouchEvent from an event listener, e.g.\r\n * mousedown/up or touchstart/end\r\n */\r\n x: 0,\r\n y: 0,\r\n xDiff: 0,\r\n yDiff: 0,\r\n refresh: function(e) {\r\n if (!e) {\r\n e = window.event;\r\n }\r\n if (e.type == 'mousemove') {\r\n this.set(e);\r\n } else if (e.touches) {\r\n this.set(e.touches[0]);\r\n }\r\n },\r\n set: function(e) {\r\n var lastX = this.x,\r\n lastY = this.y;\r\n if (e.clientX || e.clientY) {\r\n this.x = e.clientX;\r\n this.y = e.clientY;\r\n } else if (e.pageX || e.pageY) {\r\n this.x = e.pageX - document.body.scrollLeft - document.documentElement.scrollLeft;\r\n this.y = e.pageY - document.body.scrollTop - document.documentElement.scrollTop;\r\n }\r\n this.xDiff = Math.abs(this.x - lastX);\r\n this.yDiff = Math.abs(this.y - lastY);\r\n }\r\n};\r\n\r\n\r\nvar Position = {\r\n /**\r\n * Helper for extracting position of a DOM element, relative to the viewport\r\n *\r\n * The get(obj) method accepts a DOM element as the only parameter, and\r\n * returns the position under a (x, y) tuple, as an array with two elements.\r\n */\r\n get: function(obj) {\r\n // Dragdealer relies on getBoundingClientRect to calculate element offsets,\r\n // but we want to be sure we don't throw any unhandled exceptions and break\r\n // other code from the page if running from in very old browser that doesn't\r\n // support this method\r\n var rect = {left: 0, top: 0};\r\n if (obj.getBoundingClientRect !== undefined) {\r\n rect = obj.getBoundingClientRect();\r\n }\r\n return [rect.left, rect.top];\r\n }\r\n};\r\n\r\n\r\nvar StylePrefix = {\r\n transform: getPrefixedStylePropName('transform'),\r\n perspective: getPrefixedStylePropName('perspective'),\r\n backfaceVisibility: getPrefixedStylePropName('backfaceVisibility')\r\n};\r\n\r\nfunction getPrefixedStylePropName(propName) {\r\n var domPrefixes = 'Webkit Moz ms O'.split(' '),\r\n elStyle = document.documentElement.style;\r\n if (elStyle[propName] !== undefined) return propName; // Is supported unprefixed\r\n propName = propName.charAt(0).toUpperCase() + propName.substr(1);\r\n for (var i = 0; i < domPrefixes.length; i++) {\r\n if (elStyle[domPrefixes[i] + propName] !== undefined) {\r\n return domPrefixes[i] + propName; // Is supported with prefix\r\n }\r\n }\r\n};\r\n\r\nfunction triggerWebkitHardwareAcceleration(element) {\r\n if (StylePrefix.backfaceVisibility && StylePrefix.perspective) {\r\n element.style[StylePrefix.perspective] = '1000px';\r\n element.style[StylePrefix.backfaceVisibility] = 'hidden';\r\n }\r\n};\r\n\r\nvar vendors = ['webkit', 'moz'];\r\nvar requestAnimationFrame = window.requestAnimationFrame;\r\nvar cancelAnimationFrame = window.cancelAnimationFrame;\r\n\r\nfor (var x = 0; x < vendors.length && !requestAnimationFrame; ++x) {\r\n requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||\r\n window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n}\r\n\r\n//if (!requestAnimationFrame) {\r\n// requestAnimationFrame = function (callback : FrameRequestCallback) : number {\r\n// return (( setTimeout(callback, 25)));\r\n// };\r\n// cancelAnimationFrame = clearTimeout;\r\n//}\r\n\r\nreturn Dragdealer;\r\n\r\n}));\r\n","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule tabs {\r\n 'use strict';\r\n\r\n var tabsmodule = angular.module('TabsModule', ['navigation'])\r\n //.value('tabsData', \r\n // [\r\n // { link: 'beverages', label: 'Getränke & Lebensmittel', template: 'tab-beverages.tpl.html' },\r\n // { link: 'industries', label: 'Industrien', template: 'tab-industries.tpl.html' },\r\n // { link: 'water', label: 'Wasser', template: 'tab-water.tpl.html' },\r\n // { link: 'traffic', label: 'Verkehr & Umwelt', template: 'tab-traffic.tpl.html' }\r\n // ]\r\n //)\r\n //.config(TabsConfig)\r\n //.controller('TabCtrl', TabCtrl)\r\n .directive('tabPage', tabPage)\r\n .directive('tabTitle', tabTitle)\r\n .directive('tabs', tabs);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The product page\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule product {\r\n 'use strict';\r\n\r\n var nav = angular.module('product', ['ngAnimate', 'ngSanitize', 'navigation', 'library', 'photometerfilter'])\r\n .controller('ProductCtrl', ProductCtrl)\r\n .controller('ProductArchiveCtrl', ProductArchiveCtrl);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule footer {\r\n 'use strict';\r\n\r\n var footer = angular.module('footer', [])\r\n .config(FooterConfig)\r\n .controller('footerCtrl', FooterCtrl);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule glossar {\r\n 'use strict';\r\n\r\n var footer = angular.module('glossar', ['ngSanitize'])\r\n .filter('byletter', firstLetterFilter)\r\n .controller('glossarCtrl', GlossarCtrl)\r\n .directive('zoomDialog', ZoomDialogDirective)\r\n .directive('glossaryEntry', GlossarEntryDirective);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule team {\r\n 'use strict';\r\n\r\n var footer = angular.module('team', [])\r\n .controller('TeamCtrl', TeamCtrl);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The main Menu.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule partner {\r\n 'use strict';\r\n\r\n var nav = angular.module('partner', ['ngMap', 'angular-cache'])\r\n .controller('PartnerCtrl', PartnerCtrl)\r\n .controller('PartnerFlagCtrl', PartnerFlagCtrl)\r\n .directive('vendorAddress', VendorAddressDirective)\r\n .directive('simpleVendorAddress', SimpleVendorAddressDirective)\r\n .service('partnerService', PartnerService);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\nmodule misc {\r\n 'use strict';\r\n \r\n var carrusel = angular.module('carrusel', ['navigation'])\r\n .controller('HomeCarruselCtrl', HomeCarruselCtrl)\r\n .directive('preloaderBg', carrouselPreloaderDirective);\r\n\r\n var sigristHistory = angular.module('sigrist-history', ['photometerdirective', 'ngSanitize'])\r\n .controller('SigristHistoryCtrl', SigristHistoryCtrl);\r\n\r\n var photometerfilter = angular.module('photometerfilter', [])\r\n .filter('advancedNumber', AdvancedNumberFilter);\r\n\r\n var photometerdirective = angular.module('photometerdirective', [])\r\n .directive('jsonData', jsonDataDirective);\r\n\r\n var imagelazyload = angular.module('imagelazyload', [])\r\n .directive('imageLazyLoad', imageLazyLoadDirective);\r\n\r\n var youTubeOverlay = angular.module('youTubeOverlay', [])\r\n .directive('youTubeOverlay', youTubeOverlayDirective);\r\n\r\n var editableContent = angular.module('editableContent', []) \r\n .directive('editableContent', misc.EditableContentDirective)\r\n\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n var shoppinglist = angular.module('shoppinglist', ['LocalStorageModule', 'navigation', 'ngAnimate', 'ngMaterial', 'ngMessages', 'ngLocale']) \r\n .config(['localStorageServiceProvider', function(localStorageServiceProvider){ \r\n localStorageServiceProvider.setPrefix('com.photometer');\r\n }])\r\n .controller('ShoppingListCtrl', ShoppingListCtrl)\r\n .controller('ShareModalCtrl', ShareModalCtrl)\r\n .controller('ShoppingListViewCtrl', ShoppingListViewCtrl)\r\n .directive('availability', AvailabilityDirective)\r\n .directive('shoppingListTable', ShoppingListTableDirective)\r\n .directive('selectOnClick', selectOnClickDirective)\r\n .directive('addToCartButton', AddToCartButtonDirective)\r\n .filter('ofnumber', OfNumber) \r\n .service('shoppingListService', ShoppingListService); \r\n} \r\n\r\n\r\n","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule product_references {\r\n 'use strict';\r\n\r\n var product_references = angular.module('product-references', [])\r\n .controller('productReferenceCtrl', ProductReferenceCtrl)\r\n .filter('productReferenceFilter', ProductReferenceFilter)\r\n .service('productReferenceService', ProductReferenceService);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n var menuEditor = angular.module('MenuEditor', ['ngMaterial', 'dndLists'])\r\n .controller('MenuEditorCtrl', MenuEditorCtrl)\r\n .controller('MenuEditorDetailCtrl', MenuEditorDetailCtrl)\r\n .directive('menuEntryList', MenuEntryListDirective)\r\n .service('menueditorService', menueditorService);\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule blog {\r\n 'use strict';\r\n\r\n var footer = angular.module('blog', ['ngSanitize', 'ngMessages'])\r\n .controller('blogCtrl', BlogCtrl)\r\n .controller('eventCtrl', EventCtrl)\r\n .controller('salesToolsCtrl', SalesToolsCtrl)\r\n .controller('blogDetailCtrl', BlogDetailCtrl)\r\n .controller('berechnungCtrl', BerechnungCtrl)\r\n .controller('scrubberCtrl', ScrubberCtrl)\r\n .directive('blogEntry', BlogEntryDirective)\r\n .service('blogService', blogService);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule pze {\r\n 'use strict';\r\n\r\n\r\n var nav = angular.module('pze', ['user'])\r\n .controller('pzeCtrl', PzeCtrl)\r\n //.directive('match', matchValidator)\r\n .service('pzeService', PzeService);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The main Menu.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule userAdmin {\r\n 'use strict';\r\n\r\n var nav = angular.module('userAdmin', ['ngAnimate', 'ngMaterial', 'ngMessages'])\r\n .controller('UserAdminCtrl', UserAdminCtrl)\r\n .controller('UserAdminDetailCtrl', UserAdminDetailCtrl)\r\n .service('userAdminService', UserAdminService);\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule todos {\r\n 'use strict';\r\n\r\n //var todomvc = angular.module('todomvc', [])\r\n // .controller('todoCtrl', TodoCtrl)\r\n // .directive('todoBlur', todoBlur)\r\n // .directive('todoFocus', todoFocus)\r\n // .service('todoStorage', TodoStorage);\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n export class Product {\r\n constructor(\r\n public Name : string,\r\n public Url : string\r\n ) { }\r\n } \r\n \r\n \r\n export class DocumentDetailServiceData {\r\n constructor(\r\n public Document : Document,\r\n public Languages : Language[],\r\n public ReplacedBy : ReplacedByData[],\r\n public Products : Product[],\r\n public CrossReference: DocumentCrossReferenceType[],\r\n public IsImage: boolean,\r\n public Revision : DocumentRev,\r\n public selectedRevision : Revision,\r\n public selectedLanguageVariant : LanguageVariant,\r\n public selectedFileType : FileType,\r\n public LanguageVariants : LanguageVariant[]\r\n ) { }\r\n }\r\n\r\n}\r\n","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n\r\n export class YourPrice {\r\n constructor(\r\n public PartId: string,\r\n public ValidFrom: Date,\r\n public Staffelung: number,\r\n public IsAufAnfrage: boolean,\r\n public IsNetto: boolean,\r\n public Value: number,\r\n ) { }\r\n }\r\n}\r\n\r\n\r\n\r\n","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n export class ItemNavItem {\r\n constructor(\r\n public Name: string,\r\n public $anchorNav: navigation.AnchorNavItem\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule search {\r\n 'use strict';\r\n\r\n export class Results {\r\n constructor(\r\n public query : string,\r\n public topResult: any[],\r\n public industries : Result,\r\n public tasks: Result,\r\n public allProducts: Result,\r\n public products : Result,\r\n public productArchive : Result,\r\n public parts: Result,\r\n public documents: Result,\r\n public pictures: Result,\r\n public allResults: AllSearchResult\r\n ) { }\r\n }\r\n\r\n export class AllSearchResult {\r\n constructor(\r\n public Items : any,\r\n public MetaData : MetaData,\r\n public TotalResults : number\r\n ) {}\r\n\r\n }\r\n export class MetaData {\r\n constructor(\r\n public Id: string,\r\n public Type: string,\r\n public Score: number,\r\n public UrlD: string,\r\n public UrlE: string\r\n ) {}\r\n\r\n }\r\n\r\n export class Result {\r\n constructor(\r\n public Hits: ResultHit[],\r\n public Count: number\r\n ) { }\r\n }\r\n export class ResultHit {\r\n constructor(\r\n public Item: T,\r\n public Highlights: object[],\r\n //public Highlights: { Key: string, Value: string[] }[],\r\n //public Highlights: { Field: string, Highlights: string []}[],\r\n public Score: number,\r\n public Index: string\r\n ) { }\r\n }\r\n\r\n export class ApplicationsSearchServiceData {\r\n constructor(\r\n public query : string,\r\n public topResult : any[],\r\n public industries : Result,\r\n public tasks : Result,\r\n public products : Result\r\n ) { }\r\n } \r\n\r\n export class Industry {\r\n constructor(\r\n public Id : number,\r\n public Name : string,\r\n public Order : number,\r\n public Url : string,\r\n public Icon : string\r\n ) { }\r\n } \r\n \r\n\r\n export class MeasuringTask {\r\n constructor(\r\n public Id : number,\r\n public Name : string,\r\n public RefCount : number,\r\n public Url : string\r\n ) { }\r\n } \r\n\r\n export class Product {\r\n constructor(\r\n public CategoryId : number,\r\n public CategoryNameD : string,\r\n public CategoryNameE : string,\r\n public Id : number,\r\n public Name : string,\r\n public TextD : string,\r\n public TextE : string,\r\n public LaunchDate : Date,\r\n public KillingDate : Date,\r\n public ImagePath : string,\r\n public UrlD : string,\r\n public UrlE : string\r\n ) { }\r\n } \r\n\r\n\r\n\r\n export class PartSearchServiceData {\r\n constructor(\r\n public Query : string,\r\n public Hits: ResultHit[],\r\n public Count: number\r\n ) { }\r\n } \r\n\r\n\r\n export class Part {\r\n constructor(\r\n public Id : string,\r\n public Text : string,\r\n public IsBlocked : boolean,\r\n public ReplaceCount : number,\r\n public ReplaceById : string\r\n ) { }\r\n } \r\n\r\n\r\n\r\n export class DocumentSearchServiceData {\r\n constructor(\r\n public Query : string,\r\n public Hits: ResultHit[],\r\n public Count: number\r\n ) { }\r\n } \r\n\r\n export class Document {\r\n constructor(\r\n public DocumentID : string,\r\n public DocumentTypeName : string,\r\n public DocumentFileSrcName : string,\r\n public RevDestSize : number,\r\n public DocumentTitle : string,\r\n public DocumentFileSrcRevId : number\r\n ) { }\r\n } \r\n\r\n \r\n export class ProductArchiveSearchServiceData {\r\n constructor(\r\n public Query : string,\r\n public Hits: ResultHit[],\r\n public Count: number\r\n ) { }\r\n } \r\n\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","/// \r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n export class MeasuringTaskGroup {\r\n constructor(\r\n public Name: string,\r\n public Id: number,\r\n public Text: string\r\n ) { }\r\n }\r\n}\r\n","/// \r\n\r\nmodule supportportal {\r\n 'use strict';\r\n\r\n export class RegisterData {\r\n constructor(\r\n public Email: string,\r\n public Password: string,\r\n public PasswordRepeat: string,\r\n public Firstname: string,\r\n public Lastname: string,\r\n public Company: string,\r\n public Country: partner.Country,\r\n public Language: string,\r\n public Access: number,\r\n public Newsletter: boolean,\r\n public Privacy: boolean,\r\n public VerteilerId: string\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule training {\r\n 'use strict';\r\n\r\n export class Product {\r\n constructor(\r\n public Id: number,\r\n public Name: string,\r\n public ImagePath: string,\r\n public TextD: string,\r\n public TextE: string,\r\n public LongDescD: string,\r\n public LongDescE: string,\r\n public LaunchDate: Date,\r\n public IsNew: boolean,\r\n public IsComingSoon: boolean,\r\n public IsObsolete: boolean,\r\n public IsTemporary: boolean,\r\n public CategoryId: number,\r\n public CategoryNameD: string,\r\n public CategoryNameE: string,\r\n public ProductImageName: string,\r\n public UrlD: string,\r\n public UrlE: string,\r\n public KillingDate?: Date\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class NewsletterProfileData {\r\n constructor(\r\n public Email: string,\r\n public Firstname: string,\r\n public Lastname: string,\r\n public Company: string,\r\n public Country: partner.Country,\r\n public Language: string,\r\n public VerteilerId: string,\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export class ContentTag{\r\n _lowerdisplayname: string;\r\n _displayname: string;\r\n constructor(\r\n public Id: number,\r\n public Name: string,\r\n public Names: { [language: string] : string } \r\n ) { }\r\n }\r\n}","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule tabs {\r\n 'use strict';\r\n\r\n export class TabCtrl {\r\n\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n 'anchorNavService',\r\n ];\r\n\r\n constructor(\r\n private $scope: ITabCtrlScope\r\n , private $timeout : ng.ITimeoutService\r\n , private anchorNavService : navigation.IAnchorNavService\r\n ) {\r\n\r\n this.tabs = this.tabs || {};\r\n\r\n }\r\n\r\n tabs : { [key : string ] : TabItem };\r\n isToggleMode: boolean;\r\n\r\n setToggleMode(isToggleMode : boolean) {\r\n this.isToggleMode = isToggleMode;\r\n }\r\n\r\n registerPage(element, pageId : string, routeId : number) : TabItem {\r\n var t : TabItem = this.tabs[pageId + ':' + routeId];\r\n if (!t) t = this.tabs[pageId + ':' + routeId] = new TabItem(pageId, routeId);\r\n t.page = new TabItemPart(element);\r\n return t;\r\n }\r\n\r\n registerTitle(element, pageId : string, routeId : number, navKey : string) : TabItem {\r\n var t : TabItem = this.tabs[pageId + ':' + routeId];\r\n if (!t) t = this.tabs[pageId + ':' + routeId] = new TabItem(pageId, routeId);\r\n t.title = new TabItemPart(element);\r\n\r\n //(re)index of all tabs.\r\n angular.forEach(this.tabs, (tab, key) => {\r\n tab.index = $(tab.title.element).parent().children().index(tab.title.element);\r\n });\r\n\r\n var elVisibleParent : HTMLElement = $(element[0]).closest(\".tab-root\").parent()[0];\r\n\r\n t.navItem = this.anchorNavService.addElement(navKey, elVisibleParent, () : boolean => { \r\n return t.isActive;\r\n }); \r\n\r\n return t;\r\n }\r\n\r\n onChangeFunction : (oldTab : TabItem, newTab : TabItem) => void;\r\n\r\n onChange(f : (oldTab : TabItem, newTab : TabItem) => void) {\r\n this.onChangeFunction = f;\r\n }\r\n\r\n getActiveTab() : TabItem {\r\n var activeTab : TabItem;\r\n angular.forEach(this.tabs, (tab, key) => {\r\n if (tab.isActive) activeTab = tab;\r\n });\r\n return activeTab;\r\n }\r\n\r\n toggleActive(t : TabItem, alwaysActivate? : boolean) {\r\n var oldActive = this.getActiveTab();\r\n var newActive : TabItem;\r\n\r\n angular.forEach(this.tabs, (tab, key) => {\r\n if (tab == t) {\r\n tab.setActive(alwaysActivate || !this.isToggleMode || !t.isActive); //only toggle when in togglemode\r\n } else {\r\n tab.setActive(false);\r\n }\r\n });\r\n\r\n newActive = this.getActiveTab();\r\n\r\n if (this.onChangeFunction) this.onChangeFunction(oldActive, newActive);\r\n }\r\n\r\n toggleActiveIndex(i : number, alwaysActivate? : boolean) {\r\n var oldActive = this.getActiveTab();\r\n var newActive : TabItem;\r\n\r\n angular.forEach(this.tabs, (tab, key) => {\r\n tab.index = $(tab.title.element).parent().children().index(tab.title.element);\r\n if (tab.index == i) {\r\n tab.setActive(alwaysActivate || !this.isToggleMode || !tab.isActive); //only toggle when in togglemode\r\n } else {\r\n tab.setActive(false);\r\n }\r\n });\r\n \r\n newActive = this.getActiveTab();\r\n\r\n if (this.onChangeFunction) this.onChangeFunction(oldActive, newActive);\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\nmodule tabs {\r\n 'use strict';\r\n\r\n export class TabItem {\r\n public page: TabItemPart;\r\n public title: TabItemPart;\r\n public index : number;\r\n public navItem : navigation.AnchorNavItem; \r\n public isActive : boolean;\r\n\r\n constructor(\r\n public pageId : string, \r\n public routeId : number\r\n ) {\r\n this.isActive = false;\r\n }\r\n\r\n setActive(active : boolean) : void {\r\n this.page.setActiveFunction(active);\r\n this.title.setActiveFunction(active);\r\n this.isActive = active;\r\n }\r\n\r\n }\r\n\r\n export class TabItemPart {\r\n public setActiveFunction : (active : boolean) => void;\r\n\r\n constructor(\r\n public element : ng.IAugmentedJQuery\r\n ) { }\r\n }\r\n\r\n}","/// \r\n\r\nmodule tabs {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n tabPage.$inject = [\r\n '$timeout', \r\n '$window', \r\n 'anchorNavService', \r\n 'pageMetaService', \r\n 'parallaxService', \r\n 'debounce',\r\n ];\r\n export function tabPage(\r\n $timeout :ng.ITimeoutService\r\n , $window : ng.IWindowService\r\n , anchorNavService : navigation.IAnchorNavService\r\n , pageMetaService: navigation.IPageMetaService\r\n , parallaxService : navigation.IParallaxService\r\n , debounce: navigation.IDebounceService): ng.IDirective {\r\n \r\n return {\r\n transclude: true,\r\n restrict: 'A',\r\n scope: {\r\n pageId: '@',\r\n routeId: '@',\r\n },\r\n require: '^tabs', \r\n link: function (scope : ITabPageScope, element : ng.IAugmentedJQuery, attr, controller : TabCtrl, transclude : ng.ITranscludeFunction) {\r\n transclude(scope, function(clone) {\r\n element.append(clone);\r\n });\r\n \r\n scope.t = controller.registerPage(element, scope.pageId, scope.routeId); \r\n \r\n //function if tab is activated.\r\n scope.t.page.setActiveFunction = (active : boolean) => {\r\n\r\n scope.active = active;\r\n\r\n if (active) { //on activate set min-height to animate height, but only if we have a height.\r\n var setMinHeight = () => {\r\n var elHeight = $(element).children().outerHeight(true);\r\n if (!elHeight) {\r\n $timeout(setMinHeight, 100);\r\n return;\r\n }\r\n var section = $(element).closest(\"section\");\r\n var padding = section.outerHeight(false) - section.height();\r\n section.css(\"min-height\", padding + elHeight);\r\n //console.log(\"A:\" + padding + \":\" + elHeight);\r\n };\r\n setMinHeight();\r\n }\r\n };\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule tabs {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n tabTitle.$inject = [\r\n '$timeout', \r\n '$window', \r\n 'anchorNavService', \r\n 'pageMetaService', \r\n 'parallaxService', \r\n 'debounce',\r\n ];\r\n export function tabTitle(\r\n $timeout :ng.ITimeoutService\r\n , $window : ng.IWindowService\r\n , anchorNavService : navigation.IAnchorNavService\r\n , pageMetaService: navigation.IPageMetaService\r\n , parallaxService : navigation.IParallaxService\r\n , debounce: navigation.IDebounceService): ng.IDirective {\r\n \r\n return {\r\n restrict: 'A',\r\n transclude: true,\r\n scope: {\r\n pageId: '@',\r\n routeId: '@',\r\n navKey: '@',\r\n },\r\n require: '^tabs', \r\n link: function (scope : ITabPageScope, element : ng.IAugmentedJQuery, attr, controller : TabCtrl, transclude : ng.ITranscludeFunction) {\r\n scope.meta = pageMetaService.getPageMeta;\r\n scope.nav = anchorNavService; \r\n\r\n transclude(scope, function(clone) {\r\n element.append(clone);\r\n });\r\n\r\n scope.t = controller.registerTitle(element, scope.pageId, scope.routeId, scope.navKey);\r\n\r\n scope.t.title.setActiveFunction = (active : boolean) => {\r\n scope.active = active;\r\n };\r\n\r\n scope.toggleActive = (event : ng.IAngularEvent) => {\r\n if (event) event.preventDefault();\r\n controller.toggleActive(scope.t);\r\n\r\n if (scope.t.isActive) {\r\n if (scope.t.navItem) anchorNavService.setActive(scope.t.navItem);\r\n } else {\r\n $(element).children(\"a\").blur();\r\n if (scope.t.navItem) anchorNavService.setInactive(scope.t.navItem);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule tabs {\r\n 'use strict';\r\n\r\n\r\n\r\n var isVisible = (elem : HTMLElement) : boolean => {\r\n var rect :ClientRect;\r\n\r\n if ( !elem ) {\r\n return false;\r\n }\r\n\r\n rect = elem.getBoundingClientRect();\r\n\r\n // Make sure element is not hidden (display: none) or disconnected\r\n return (rect.width > 0 || rect.height > 0 || elem.getClientRects().length > 0);\r\n }\r\n\r\n \r\n\r\n /**\r\n *\r\n */\r\n tabs.$inject = [\r\n '$timeout', \r\n '$window', \r\n 'anchorNavService', \r\n 'pageMetaService', \r\n 'parallaxService', \r\n 'debounce',\r\n ];\r\n export function tabs(\r\n $timeout :ng.ITimeoutService\r\n , $window : ng.IWindowService\r\n , anchorNavService : navigation.IAnchorNavService\r\n , pageMetaService: navigation.IPageMetaService\r\n , parallaxService : navigation.IParallaxService\r\n , debounce: navigation.IDebounceService): ng.IDirective {\r\n \r\n return {\r\n restrict: 'A',\r\n scope: {\r\n toggleMode: '@',\r\n scroll: '@',\r\n autoCollapse: '@',\r\n },\r\n controller: TabCtrl,\r\n link: function (scope : ITabScope, element : ng.IAugmentedJQuery, attr, controller : TabCtrl) {\r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n var activeIndex : number = -1;\r\n\r\n var pagesRoot : ng.IAugmentedJQuery = angular.element(element.children()[1]);\r\n\r\n controller.setToggleMode(!!scope.toggleMode);\r\n\r\n controller.onChange((oldTab : TabItem, newTab : TabItem) => {\r\n if (oldTab == newTab) return;\r\n if (newTab) {\r\n pagesRoot.addClass(\"active\");\r\n } else {\r\n pagesRoot.removeClass(\"active\");\r\n }\r\n \r\n //animate direction\r\n element.removeClass(\"anim-to-right\");\r\n element.removeClass(\"anim-to-left\");\r\n if (newTab && oldTab && oldTab.index > newTab.index) {\r\n element.addClass(\"anim-to-right\");\r\n } else {\r\n element.addClass(\"anim-to-left\");\r\n }\r\n \r\n //if activated content not visible, scroll so that the end is visible or the head is on top of the screen - header with.\r\n if (scope.scroll && !oldTab && newTab) { //there was no tab selected before\r\n var el : JQuery = $(element);\r\n var topPos = el.offset().top\r\n - parseInt(el.css(\"border-top-width\"))\r\n - parseInt(el.css(\"margin-top\"));\r\n\r\n $timeout(() => { \r\n ($).smoothScroll(Math.round(topPos - $(\".pagehead\").height()))\r\n }, 100);\r\n }\r\n\r\n })\r\n\r\n //autoCollapse for footer: tab will deactivate if we scroll up\r\n if (scope.autoCollapse) {\r\n\r\n var el : JQuery = $(element);\r\n \r\n var onScroll = (event: ng.IAngularEvent, scrollTop : number) => {\r\n if (!controller.getActiveTab()) return;\r\n var topPos = el.offset().top\r\n - parseInt(el.css(\"border-top-width\"))\r\n - parseInt(el.css(\"margin-top\"));\r\n\r\n if (topPos > (scrollTop + $(window).height())) {\r\n anchorNavService.setInactive(controller.getActiveTab().navItem);\r\n controller.toggleActive(controller.getActiveTab());\r\n }\r\n };\r\n \r\n onScroll = debounce(onScroll, 2000, false);\r\n parallaxService.subscribeOnScroll(scope, onScroll); \r\n }\r\n\r\n\r\n //set tab state according to url.\r\n var setActiveTab = (path : string) => {\r\n angular.forEach(controller.tabs, (t, index) => {\r\n\r\n if (!t.navItem) return;\r\n\r\n if (t.navItem.compareKey(path)) {\r\n controller.toggleActive(t, true);\r\n return;\r\n }\r\n\r\n if (anchorNavService.search()) {\r\n if (t.navItem.compareQuery(anchorNavService.search())) {\r\n //this is it? so wow\r\n controller.toggleActive(t, true);\r\n return;\r\n } else if (t.navItem.compareQuery(anchorNavService.search(), true)) {\r\n //this is parent of active?\r\n controller.toggleActive(t, true); \r\n return;\r\n }\r\n }\r\n });\r\n };\r\n setActiveTab(anchorNavService.getRequestLocalRelativePathPart());\r\n\r\n scope.$on('$locationChangeSuccess', (ev: ng.IAngularEvent, newUrl : string, oldUrl : string, newState : string, oldState : string) => {\r\n if (newUrl == oldUrl) return;\r\n if (angular.equals({}, anchorNavService.search())) return;\r\n setActiveTab(anchorNavService.getLocalRelativePathPart());\r\n });\r\n \r\n\r\n //no active index from url: set first tab active\r\n if (!scope.toggleMode) {\r\n if (!controller.getActiveTab()) controller.toggleActiveIndex(0);\r\n }\r\n \r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n export interface IPageMetaService {\r\n getPageMeta(key? : string): IPhotometerGlobalVar | string | any;\r\n getContentFilterFor(key : string, useRouteParameter?: boolean, category?: number) : editor.EditorFilter;\r\n searchRouteParameter(placeholder : string) : IRouteParameter;\r\n searchPage(placeholder : string, id: number) : angular.IPromise;\r\n }\r\n\r\n export const HL: string = \"hl\";\r\n export const HLFULL: string = \"hlFull\";\r\n export const HLPREFIX: string = \"hlPrefix\";\r\n export const CURRENT: string = \"current\";\r\n export const PARENT: string = \"parent\";\r\n export const USERNAME: string = \"username\";\r\n export const PAGEID: string = \"PageId\";\r\n\r\n export interface IPageMetaServiceFunction {\r\n (key? : string): IPhotometerGlobalVar | string | any;\r\n }\r\n\r\n}","/// \r\n\r\nmodule navigation {\r\n\r\n ItemNavigationDirective.$inject = [\r\n '$filter', \r\n '$timeout', \r\n '$rootScope',\r\n 'pageMetaService', \r\n 'anchorNavService', \r\n ];\r\n export function ItemNavigationDirective(\r\n $filter:ng.IFilterService, \r\n $timeout : ng.ITimeoutService, \r\n $rootScope:ng.IRootScopeService, \r\n pageMetaService: navigation.IPageMetaService, \r\n anchorNavService : navigation.IAnchorNavService\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n itemData: '=',\r\n selectedItem: '=',\r\n onSelect: '&',\r\n groupFilter: '=',\r\n nameProperty: '@',\r\n center: '@',\r\n allwaysShowArrows: '@',\r\n headingLevel: '@',\r\n },\r\n templateUrl: 'navigation/ItemNavigationDirective',\r\n link: function (scope: IItemNavScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n \r\n scope.meta = pageMetaService.getPageMeta;\r\n scope.nameProperty = angular.isDefined(scope.nameProperty) ? scope.nameProperty: 'Name';\r\n\r\n var dragDealerRoot : JQuery = angular.element(element[0].querySelector('.dragdealer'));\r\n scope.dd = new Dragdealer(dragDealerRoot[0], { loose: true });\r\n\r\n var offset : number = 0;\r\n var maskWidth: number = 0;\r\n var parentWidth: number = 0;\r\n var itemPercentMap: { [index: string]: number } = {};\r\n scope.noArrow = false;\r\n scope.allwaysShowArrows = angular.isDefined(scope.allwaysShowArrows) ? scope.allwaysShowArrows: false;\r\n \r\n \r\n\r\n var layout = () => {\r\n\r\n if (scope.itemData) {\r\n\r\n //postpone layout if not visibile\r\n if (!element.is(':visible')) {\r\n var unsubscribe = $rootScope.$on(\"itemNavSelectedItemChanged\", () => {\r\n $timeout(()=>{\r\n if (element.is(':visible')) {\r\n unsubscribe();\r\n layout();\r\n }\r\n });\r\n });\r\n return;\r\n }\r\n\r\n\r\n scope.itemData.forEach((item, index, arr) => {\r\n if (item['UrlKey']) {\r\n var nsi : navigation.AnchorNavItem = anchorNavService.addElement(item['UrlKey'], $(element)[0], () : boolean => { \r\n return scope.selectedItem == item;\r\n });\r\n item.$anchorNav = nsi;\r\n }\r\n });\r\n \r\n\r\n \r\n maskWidth = dragDealerRoot.prop('offsetWidth');\r\n parentWidth = angular.element(dragDealerRoot.children()[0]).prop('scrollWidth');\r\n parentWidth = Math.max(parentWidth - maskWidth, maskWidth); //2 times maskWith / 2 beacuse the selected element should be in the middle\r\n\r\n\r\n var childs = dragDealerRoot.find(\"li\");\r\n\r\n calcWidth(0);\r\n \r\n //is the current selectedItem in itemData? (not when itemData changed!)\r\n var selected : ItemNavItem[] = scope.filteredItem.filter(function (item : ItemNavItem, index :number, array : ItemNavItem[]) {\r\n return item == scope.selectedItem;\r\n });\r\n\r\n if (selected.length > 0) {\r\n scope.setSelectedItem(selected[0], true);\r\n } else {\r\n scope.setSelectedItem(scope.filteredItem[0], true); //if none, select first item.\r\n }\r\n\r\n }\r\n }\r\n\r\n var calcWidth = function (lastTotalWidth : number) {\r\n var childs = dragDealerRoot.find(\"li\");\r\n\r\n // var childs = dragDealerRoot.find(\"li\");\r\n var totChildWidth = 0;\r\n\r\n var elWith: number[] = new Array();\r\n var elLeft: number[] = new Array();\r\n\r\n for (var i = 0; i < childs.length; i++) {\r\n //elWith[i] = $(childs[i]).outerWidth(true); // rounding => bad\r\n elWith[i] = parseFloat(window.getComputedStyle(childs[i])['width'])\r\n + parseFloat(window.getComputedStyle(childs[i])['margin-left'])\r\n + parseFloat(window.getComputedStyle(childs[i])['margin-right']);\r\n\r\n //var rect = $(childs[i])[0].getBoundingClientRect();\r\n //elWith[i] = rect.right - rect.left;\r\n elLeft[i] = totChildWidth;\r\n totChildWidth += elWith[i];\r\n }\r\n\r\n totChildWidth = Math.ceil(totChildWidth + 1)\r\n\r\n angular.element(dragDealerRoot.children()[0]).width(totChildWidth);\r\n scope.dd.reflow();\r\n\r\n scope.isCentered = scope.center && totChildWidth <= parentWidth;\r\n scope.noArrow = !scope.allwaysShowArrows && totChildWidth <= maskWidth;\r\n\r\n for (var i = 0; i < childs.length; i++) {\r\n //var value = childs[i].data().value;\r\n var elementWith: number = elWith[i];\r\n var elementLeft: number = elLeft[i];\r\n\r\n\r\n var xEl: number = (elementLeft + elementWith / 2) - (maskWidth / 2);\r\n var percent: number = (xEl / (totChildWidth - maskWidth));\r\n percent = Math.max(percent, 0);\r\n percent = Math.min(percent, 1);\r\n if (totChildWidth < maskWidth) percent = 0;\r\n if (angular.element(childs[i]).data().$scope) { //gegen Fehler bei schnellem wechsel der produkte.\r\n itemPercentMap[angular.element(childs[i]).data().$scope.item[scope.nameProperty]] = percent;\r\n }\r\n }\r\n\r\n console.log(\"recalc: old: \" + lastTotalWidth + \"; new: \" + totChildWidth);\r\n\r\n \r\n if (totChildWidth !== lastTotalWidth) {\r\n $timeout(()=>{\r\n calcWidth(totChildWidth);\r\n }, 5000);\r\n }\r\n }\r\n\r\n scope.$on('ngRepeatFinished', function() {\r\n $timeout(()=>{\r\n layout();\r\n })\r\n });\r\n \r\n scope.setSelectedItem = (item: ItemNavItem, dontNavigate? : boolean) => {\r\n if (!item) return;\r\n\r\n if (!scope.isCentered) {\r\n //console.log(item[scope.nameProperty] + \": \" + itemPercentMap[item[scope.nameProperty]]);\r\n scope.dd.setValue(itemPercentMap[item[scope.nameProperty]]);\r\n } else {\r\n scope.dd.setValue(0.5) //50%\r\n }\r\n\r\n scope.selectedItem = item;\r\n scope.onSelect(item);\r\n scope.first = scope.filteredItem.indexOf(item) === 0;\r\n scope.last = scope.filteredItem.indexOf(item) === scope.filteredItem.length - 1;\r\n $rootScope.$broadcast(\"itemNavSelectedItemChanged\");\r\n if (!dontNavigate && item.$anchorNav) anchorNavService.setActive(item.$anchorNav); \r\n }\r\n\r\n scope.next = () => {\r\n for (var i = 0; i < scope.filteredItem.length; i++) {\r\n if (scope.filteredItem[i] == scope.selectedItem) { \r\n scope.setSelectedItem(scope.filteredItem[i + 1]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n scope.previous = () => {\r\n for (var i = 0; i < scope.filteredItem.length; i++) {\r\n if (scope.filteredItem[i] == scope.selectedItem) {\r\n scope.setSelectedItem(scope.filteredItem[i - 1]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n scope.getUrl = (item : ItemNavItem) : string => {\r\n if (!item['UrlKey']) return \"\";\r\n return scope.meta('hlPrefix') + scope.meta().RouteData.BasePageUrl + item['UrlKey'];\r\n }\r\n \r\n\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n anchorNav.$inject = ['anchorNavService', '$timeout'];\r\n export function anchorNav(anchorNavService : IAnchorNavService, $timeout : ng.ITimeoutService): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n link: function (scope : IAnchorNavScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n $timeout(() => {\r\n var title = attr[\"anchorTitle\"];\r\n var useInScrollNav = attr[\"scrollMenuHide\"] === undefined;\r\n anchorNavService.addElement(attr['anchorNav'], element[0], null, useInScrollNav, title);\r\n });\r\n \r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n\r\n export function responsiveImage(): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n imgSrc: '='\r\n },\r\n link: function (scope: IResponsiveImageScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n element.addClass(\"responsiveimg\");\r\n scope.$watch('imgSrc', function(value) {\r\n if (value) {\r\n element.css({\r\n 'background-image': 'url(' + value +')'\r\n });\r\n } else {\r\n element.css({\r\n 'background-image': 'none'\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n scrollTo.$inject = [\r\n 'anchorNavService', \r\n 'pageMetaService',\r\n '$timeout',\r\n '$window',\r\n ];\r\n\r\n export function scrollTo(\r\n anchorNavService : IAnchorNavService, \r\n pageMetaService: navigation.IPageMetaService,\r\n $timeout : ng.ITimeoutService,\r\n $window: ng.IWindowService\r\n ): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n scrollTo: '@',\r\n },\r\n link: function (scope : any, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n //from ng-href\r\n var attrName = \"href\";\r\n var propName = attrName,\r\n name = attrName;\r\n\r\n if (attrName === 'href' &&\r\n Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\r\n name = 'xlinkHref';\r\n attr.$attr[name] = 'xlink:href'; \r\n propName = null;\r\n }\r\n\r\n attr.$observe('scrollTo', function(value) {\r\n if (!value) {\r\n if (attrName === 'href') {\r\n attr.$set(name, null);\r\n }\r\n return;\r\n }\r\n attr.$set(name, pageMetaService.getPageMeta('hlPrefix') + pageMetaService.getPageMeta().RouteData.BasePageUrl + value);\r\n });\r\n\r\n\r\n element.bind('click', ($event : JQueryEventObject) => {\r\n $event.preventDefault();\r\n anchorNavService.scrollTo(scope.scrollTo);\r\n }); \r\n\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n onFinishRender.$inject = ['$timeout'];\r\n export function onFinishRender($timeout :ng.ITimeoutService): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n link: function (scope : ng.IRepeatScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n if (scope.$last === true) {\r\n $timeout(function () {\r\n scope.$emit('ngRepeatFinished');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n trackPageViewDirective.$inject = [\r\n 'anchorNavService', \r\n 'pageMetaService',\r\n '$timeout',\r\n '$window',\r\n '$analytics',\r\n ];\r\n\r\n export function trackPageViewDirective(\r\n anchorNavService : IAnchorNavService, \r\n pageMetaService: navigation.IPageMetaService,\r\n $timeout : ng.ITimeoutService,\r\n $window: ng.IWindowService,\r\n $analytics : angulartics.IAnalyticsService\r\n ): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n trackPageView: '@',\r\n },\r\n link: function (scope : any, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n element.bind('click', ()=> {\r\n $analytics.pageTrack(scope.trackPageView);\r\n }); \r\n\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n export class AnchorNavItem {\r\n constructor(\r\n public key: string,\r\n public element: HTMLElement,\r\n public top: number,\r\n public bottom: number,\r\n public isActive?: () => boolean,\r\n public useInScrollNav? : boolean,\r\n public title? : string\r\n ) { \r\n \r\n }\r\n\r\n public compareKey(key : string) : boolean {\r\n if (!key || !this.key) return false;\r\n return this.key.toLowerCase() === key.toLowerCase();\r\n }\r\n \r\n public isAtStartOf(key : string) : boolean {\r\n if (!key || !this.key) return false;\r\n return key.toLowerCase().indexOf(this.key.toLowerCase()) == 0;\r\n }\r\n \r\n public compareQuery(query : { [key: string]: any; }, partialMatch? : boolean) : boolean {\r\n if (!query || !this.key) return false;\r\n var result = false;\r\n var myKey = this.key.replace(\"?\", \"\").toLowerCase();\r\n for (var key in query) {\r\n if (key.toLowerCase() === myKey) return query[key];\r\n if (partialMatch && key.toLowerCase().indexOf(myKey) == 0) return query[key];\r\n }\r\n return false;\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n \r\n export class MenuNode {\r\n constructor(\r\n public Id: string,\r\n public Name: string,\r\n public Options: { [id: string]: string; },\r\n public Nodes: MenuNode[],\r\n public PageId : string,\r\n public IsCurrent: boolean,\r\n public RouteEntry : IRouteEntry,\r\n public Hide : boolean\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n // http://plnkr.co/edit/fJwRER?p=info\r\n // Returns a function, that, as long as it continues to be invoked, will not\r\n // be triggered. The function will be called after it stops being called for\r\n // N milliseconds. If `immediate` is passed, trigger the function on the\r\n // leading edge, instead of the trailing.\r\n\r\n \r\n debounceService.$inject = ['$timeout', '$q'];\r\n export function debounceService($timeout :ng.ITimeoutService, $q : ng.IQService ) {\r\n\r\n return function (func : () => void, wait : number, immediate: boolean) {\r\n\r\n var timeout;\r\n var deferred = $q.defer();\r\n\r\n return function() {\r\n var context = this, args = arguments;\r\n var later = function() {\r\n timeout = null;\r\n if(!immediate) {\r\n deferred.resolve(func.apply(context, args));\r\n deferred = $q.defer();\r\n }\r\n };\r\n var callNow : boolean = immediate && !timeout;\r\n if ( timeout ) {\r\n $timeout.cancel(timeout);\r\n }\r\n timeout = $timeout(later, wait);\r\n if (callNow) {\r\n deferred.resolve(func.apply(context,args));\r\n deferred = $q.defer();\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n export class LoadingInterceptor implements ng.IHttpInterceptor {\r\n public static $inject = ['$injector', '$q', 'debounce'];\r\n\r\n private static _instance: LoadingInterceptor;\r\n\r\n public static Factory($injector: ng.auto.IInjectorService, $q: ng.IQService, loadingIndicatorService: navigation.LoadingIndicatorService) {\r\n return LoadingInterceptor._instance = new LoadingInterceptor($injector, $q, loadingIndicatorService);\r\n }\r\n\r\n constructor(\r\n private $injector: ng.auto.IInjectorService,\r\n private $q: ng.IQService,\r\n private loadingIndicatorService: navigation.LoadingIndicatorService) {\r\n \r\n }\r\n\r\n public request = (config: ng.IRequestConfig): ng.IRequestConfig|ng.IPromise => {\r\n this.loadingIndicatorService.taskStarted();\r\n return config;\r\n }\r\n\r\n //public requestError = (rejection: any): any => {\r\n // console.log(\"requestError reported\");\r\n // return this.$q.reject(rejection);\r\n //}\r\n\r\n public response = (response: ng.IHttpPromiseCallbackArg) : ng.IPromise>|ng.IHttpPromiseCallbackArg => {\r\n this.loadingIndicatorService.taskEnded();\r\n return response;\r\n }\r\n\r\n public responseError = (rejection: any): any => {\r\n this.loadingIndicatorService.taskEnded();\r\n return this.$q.reject(rejection);\r\n }\r\n\r\n }\r\n\r\n LoadingInterceptor.Factory.$inject = [\"$injector\", \"$q\", 'loadingIndicatorService'];\r\n\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n export class LoadingIndicatorService {\r\n \r\n private _asyncTaskCount: number = 0;\r\n private _isLoading: boolean = false;\r\n\r\n public static $inject = [\r\n '$rootScope',\r\n 'debounce',\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private debounce: navigation.IDebounceService\r\n ) {\r\n\r\n this.debouncedShowIndicator = debounce(this.debouncedShowIndicator, 400, false);\r\n this.debouncedHideIndicator = debounce(this.debouncedHideIndicator, 200, false);\r\n \r\n }\r\n \r\n public taskStarted() :void {\r\n this._asyncTaskCount++;\r\n this.debouncedShowIndicator();\r\n }\r\n\r\n public taskEnded() :void { \r\n this._asyncTaskCount--;\r\n this.debouncedHideIndicator();\r\n }\r\n\r\n public debouncedShowIndicator() {\r\n if (this._isLoading) return;\r\n if (this._asyncTaskCount == 0) return; //other tasks running?\r\n this.UpdateLoadIndicator(true);\r\n }\r\n\r\n public debouncedHideIndicator() {\r\n if (!this._isLoading) return;\r\n if (this._asyncTaskCount > 0) return; //last task?\r\n this.UpdateLoadIndicator(false);\r\n }\r\n\r\n \r\n public UpdateLoadIndicator(isLoading : boolean) :void{ \r\n this._isLoading = isLoading; \r\n this.$rootScope.$emit('load-indicator-changed', isLoading);\r\n }\r\n\r\n public subscribeOnLoadIndicatorChanged(\r\n scope : ng.IScope\r\n , callback: (event: ng.IAngularEvent, isLoading : boolean) => void\r\n ) : void {\r\n\r\n var handler = this.$rootScope.$on('load-indicator-changed', callback); \r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n var HYSTERESIS : number = 200; //the top and bottom of the active element will be increased by 25pixel, to prevent flickering\r\n\r\n export const enum ElementType {\r\n Page = 0,\r\n Block = 1,\r\n Query = 2,\r\n Placeholder = 3,\r\n }\r\n\r\n /**\r\n * Services that changes the url according to elements in viewport.\r\n * AnchorNavDirective adds Elements, and this Service changes the location path, according to the Element currently in the viewport.\r\n */\r\n export class AnchorNavService implements IAnchorNavService {\r\n\r\n //private elements: { [key: string] : HTMLElement; } = {}; \r\n\r\n \r\n \r\n private elements: AnchorNavItem[] = [];\r\n private activeElement: AnchorNavItem;\r\n private activeHashElement: AnchorNavItem;\r\n private currentHash: string = '';\r\n private topPath: AnchorNavItem;\r\n private lastDocumentHeight : number = 0;\r\n private topOffset:number = 0;\r\n private changeLocation : () => void;\r\n private scrollToLocation : () => void;\r\n private isScrolling : boolean;\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n '$window', \r\n '$location',\r\n '$timeout',\r\n '$http', \r\n '$q',\r\n 'debounce',\r\n 'CacheFactory',\r\n 'parallaxService',\r\n '$analytics',\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $window: ng.IWindowService,\r\n private $location: ng.ILocationService,\r\n private $timeout: ng.ITimeoutService,\r\n private $http: ng.IHttpService,\r\n private $q: ng.IQService,\r\n private debounce: navigation.IDebounceService,\r\n private CacheFactory: CacheFactory.ICacheFactory,\r\n private parallaxService: navigation.IParallaxService,\r\n private $analytics : angulartics.IAnalyticsService\r\n ) {\r\n\r\n \r\n if (!CacheFactory.get('dataCache')) {\r\n CacheFactory.createCache('dataCache', {\r\n storageMode: 'sessionStorage', // This cache will use `sessionStorage`.\r\n });\r\n }\r\n \r\n this.topOffset = $(window).height() / 6; //postion element on first xth\r\n\r\n //top = no path\r\n this.topPath = new AnchorNavItem (pglob.RouteData.BasePageUrl, null, 0, 0);\r\n this.elements.push(this.topPath);\r\n\r\n $timeout(() => {\r\n $analytics.pageTrack(pglob.RouteData.CurrentLanguage.hlPrefix + $location.url(), $location);\r\n });\r\n \r\n $rootScope.$on('$locationChangeStart', (event, next, current) => { \r\n if (next == current) return;\r\n if (next == \"\") return;\r\n\r\n //console.log(\"NEXT:\" + next + \"; CURRENT:\" + current);\r\n\r\n if (pglob.RouteData.BasePageId == \"04-1_Glossar_show\") $window.location.href = next; //haaaak\r\n \r\n if (this.topPath.isAtStartOf($location.path())) { //inside this page\r\n $analytics.pageTrack(pglob.RouteData.CurrentLanguage.hlPrefix + $location.url(), $location);\r\n return;\r\n }\r\n\r\n this.getNavigationData().then((data : MenuNode[]) => {\r\n var re : IRouteEntry = this.findByUrl(data, $location.path());\r\n if (re) {\r\n //if base page is not the same we can not do it the ajax way.\r\n\r\n var stack = angular.copy(re.RouteParameterStack);\r\n while(stack.length > 0 && stack[0].PageType != ElementType.Page) {\r\n stack.shift();\r\n }\r\n \r\n if (stack.length == 0 || stack[0].PageId != pglob.RouteData.BasePageId) $window.location.href = next; //we need a page refresh, so we'll use the href attribute.\r\n this.updateRouteParameters(re, true, data); \r\n } else {\r\n $window.location.href = next;\r\n $analytics.pageTrack(pglob.RouteData.CurrentLanguage.hlPrefix + $location.url(), $location);\r\n }\r\n });\r\n \r\n });\r\n\r\n\r\n var onScroll = (event : ng.IAngularEvent, scrollTop : number) => {\r\n if (this.isScrolling) return;\r\n\r\n //the height has changed (tabs, dynamic content) we have to do a recalulation.\r\n if (this.lastDocumentHeight != $(document).height()) {\r\n this.reCalc();\r\n this.lastDocumentHeight = $(document).height();\r\n }\r\n\r\n var scrollTop = scrollTop + this.topOffset;\r\n \r\n var lastActiveElement : AnchorNavItem = this.topPath;\r\n\r\n for(var i = 0; i < this.elements.length; i++) {\r\n var ani : AnchorNavItem = this.elements[i];\r\n if (ani.isActive && !ani.isActive()) continue; //has function and function isActive not return true (tabs and sorts)\r\n if (!$(ani.element).is(':visible')) continue;\r\n\r\n var top = ani.top;\r\n if (this.activeElement == ani) top -= HYSTERESIS;\r\n \r\n if (top < scrollTop) {\r\n lastActiveElement = ani;\r\n } else {\r\n this.setActive(lastActiveElement);\r\n return;\r\n }\r\n }\r\n\r\n this.setActive(lastActiveElement); \r\n };\r\n\r\n\r\n\r\n\r\n this.changeLocation = () => {\r\n\r\n this.$rootScope.$apply(() => {\r\n\r\n var path : string = null;\r\n var hash : any = null;\r\n\r\n if (this.activeElement == null) {\r\n path = this.topPath.key;\r\n } else {\r\n path = this.topPath.key;\r\n if (this.topPath !== this.activeElement) {\r\n path = path + this.activeElement.key;\r\n }\r\n }\r\n\r\n if (this.activeHashElement == null) {\r\n hash = {};\r\n } else {\r\n hash = {}\r\n hash[this.activeHashElement.key.replace(\"?\", \"\")] = true;\r\n }\r\n\r\n // key any query parameter that are not boolean\r\n if (this.$location.search()) {\r\n for (var k in this.$location.search()) {\r\n var v = this.$location.search()[k];\r\n if (typeof v !== \"boolean\") {\r\n hash[k] = v;\r\n }\r\n }\r\n }\r\n\r\n this.$location.path(path).search(hash).replace(); \r\n \r\n });\r\n }\r\n\r\n var localScrollToLocation = () => {\r\n if (this.lastDocumentHeight != $(document).height()) {\r\n this.reCalc();\r\n this.lastDocumentHeight = $(document).height();\r\n }\r\n\r\n var active = this.activeHashElement || this.activeElement;\r\n\r\n if (!active) return;\r\n\r\n console.log(active.key + \" => \" + active.top);\r\n this.isScrolling = true;\r\n\r\n var options = {\r\n afterScroll: () => {\r\n if (this.lastDocumentHeight != $(document).height()) {\r\n this.reCalc();\r\n this.lastDocumentHeight = $(document).height();\r\n this.scrollToLocation();\r\n } else {\r\n this.isScrolling = false;\r\n }\r\n },\r\n };\r\n\r\n ($).smoothScroll(options, Math.round(active.top - this.topOffset))\r\n\r\n }\r\n\r\n this.changeLocation = debounce(this.changeLocation, 800, false);\r\n this.debouncedReCalc = debounce(this.reCalc, 100, false);\r\n \r\n //empty funtion while loading\r\n this.scrollToLocation = function(){};\r\n angular.element(document).ready(() => {\r\n this.scrollToLocation = debounce(localScrollToLocation, 300, false);\r\n $timeout(() => {\r\n this.scrollToLocation();\r\n }, 0);\r\n });\r\n this.parallaxService.subscribeOnScroll($rootScope, onScroll);\r\n }\r\n \r\n //current path\r\n public getPath():string{\r\n return this.$location.path();\r\n }\r\n\r\n //current local part of the path: \r\n //\"/de/Home/Referenzen/Verkehr-Umwelt\" will return \"Verkehr-Umwelt\"\r\n public getLocalRelativePathPart():string {\r\n var path = this.$location.path();\r\n path = path.replace(pglob.RouteData.CurrentLanguage.hlPrefix, \"\");\r\n path = path.replace(this.topPath.key, \"\");\r\n return path;\r\n }\r\n \r\n //current local part of the path the page was loaded with: \r\n //\"/de/Home/Referenzen/Verkehr-Umwelt\" will return \"Verkehr-Umwelt\"\r\n public getRequestLocalRelativePathPart() : string { \r\n return pglob.RouteData.RouteEntry.UrlByLanguage[pglob.RouteData.CurrentLanguage.hlFull].replace(pglob.RouteData.CurrentLanguage.hlPrefix + this.topPath.key, \"\")\r\n } \r\n\r\n public addElement(key: string, el: HTMLElement, active?: () => boolean, useInScrollNav? : boolean, title? : string) : AnchorNavItem {\r\n var obj = new AnchorNavItem (key, el, 0, 0, active, useInScrollNav, title);\r\n\r\n //add new object\r\n this.elements.push(obj);\r\n this.debouncedReCalc();\r\n \r\n //is it the element selected by the url?\r\n if (obj.key.substr(0,1) == '?' && obj.compareQuery(this.$location.search())) {\r\n this.activeHashElement = obj;\r\n this.scrollToLocation();\r\n } else if (obj.compareKey(this.$location.path())){\r\n this.activeElement = obj;\r\n this.scrollToLocation();\r\n } else if (obj.compareKey(this.getRequestLocalRelativePathPart())){\r\n this.activeElement = obj;\r\n this.scrollToLocation();\r\n }\r\n\r\n \r\n return obj;\r\n }\r\n\r\n public setActive(nsi: AnchorNavItem) : void {\r\n if (nsi == this.activeElement) return; //already here.\r\n if (this.activeElement && this.activeElement.key.indexOf(nsi.key) == 0) return; //tab child active.\r\n\r\n if (nsi.key.substr(0,1) == '?') {\r\n this.activeHashElement = nsi;\r\n } else {\r\n this.activeElement = nsi;\r\n }\r\n\r\n this.changeLocation(); \r\n }\r\n\r\n public setInactive(nsi: AnchorNavItem):void {\r\n if (nsi.key.substr(0,1) == '?') {\r\n this.activeHashElement = null;\r\n } else {\r\n this.activeElement = null;\r\n }\r\n this.changeLocation(); \r\n }\r\n\r\n\r\n public setTopLocation(path : string):void {\r\n this.topPath.key = path;\r\n }\r\n\r\n private debouncedReCalc : () => void; //platzhalter für eine debounced version der unteren\r\n\r\n private reCalc():void {\r\n this.elements.forEach((el: AnchorNavItem, index:number, array : AnchorNavItem[]):void => {\r\n if (el.element == null) return; //root\r\n var element : JQuery = $(el.element);\r\n var topPos = element.offset().top\r\n - parseInt(element.css(\"border-top-width\"))\r\n - parseInt(element.css(\"margin-top\"));\r\n el.top = topPos;\r\n });\r\n\r\n this.elements.sort(function (a : AnchorNavItem, b : AnchorNavItem):number {\r\n return a.top - b.top;\r\n })\r\n\r\n //top of next = bottom of previous\r\n for(var i = 0; i < this.elements.length - 1; i++ ) {\r\n this.elements[i].bottom = this.elements[i+1].top;\r\n }\r\n this.elements[this.elements.length - 1].bottom = this.elements[this.elements.length - 1].top + $(this.elements[this.elements.length - 1].element).height();\r\n\r\n }\r\n\r\n private getBaseUrl(re : IRouteEntry, menuData : MenuNode[]) : string {\r\n var stack = angular.copy(re.RouteParameterStack);\r\n while(stack.length > 0 && stack[0].PageType != ElementType.Page) {\r\n stack.shift();\r\n }\r\n if (stack.length == 0) return null;\r\n var re = this.findByRoutParameter(menuData, stack);\r\n if (!re) return null;\r\n return re.UrlByLanguage[pglob.RouteData.CurrentLanguage.hlFull];\r\n }\r\n\r\n\r\n /**\r\n * Updates the Documents location and emits a location Changed event which can be subscribed with subscribeOnLocationChanged\r\n * @param re the routing with the desired new url and paramater stack.\r\n */\r\n public updateRouteParameters(re : IRouteEntry, newBase? : boolean, menuData? : MenuNode[]) :void{ \r\n if (!menuData) this.getNavigationData().then((data : MenuNode[]) => { this.updateRouteParameters(re, newBase, data); });\r\n if (!newBase) this.$location.replace();\r\n \r\n var url = re.UrlByLanguage[pglob.RouteData.CurrentLanguage.hlFull];\r\n if (url.indexOf(pglob.RouteData.CurrentLanguage.hlPrefix + \"/\") == 0) url = url.replace(pglob.RouteData.CurrentLanguage.hlPrefix, '');\r\n\r\n if (this.topPath.compareKey(url)) return; //no change\r\n \r\n var baseUrl = url;\r\n if (re.RouteParameterStack[0].PageType != ElementType.Page) {\r\n var newBaseUrl : string = this.getBaseUrl(re, menuData);\r\n if (newBaseUrl) {\r\n if (newBaseUrl.indexOf(pglob.RouteData.CurrentLanguage.hlPrefix + \"/\") == 0) newBaseUrl = newBaseUrl.replace(pglob.RouteData.CurrentLanguage.hlPrefix, '');\r\n baseUrl = newBaseUrl;\r\n }\r\n }\r\n\r\n if (newBase) pglob.RouteData.BasePageUrl = this.topPath.key = baseUrl;\r\n if (!newBase) url = this.topPath.key + url;\r\n \r\n pglob.RouteData.RouteEntry = re;\r\n this.setTopLocation(baseUrl);\r\n this.$location.path(url);\r\n this.$rootScope.$emit('location-changed', re);\r\n }\r\n\r\n public subscribeOnLocationChanged(\r\n scope : ng.IScope\r\n , callback: (event: ng.IAngularEvent, re : IRouteEntry) => void\r\n ) : void {\r\n var handler = this.$rootScope.$on('location-changed', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n \r\n public getNavigationData() : ng.IPromise {\r\n var url : string = \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Navigation?parentPageId=00-menu-base\"\r\n\r\n var deferred = this.$q.defer();\r\n var start = new Date().getTime();\r\n var dataCache = this.CacheFactory.get('dataCache');\r\n\r\n //in cache?\r\n if (dataCache.get(url) && angular.isArray(dataCache.get(url))) {\r\n deferred.resolve(dataCache.get(url));\r\n return deferred.promise;\r\n } \r\n\r\n //embeded in html?\r\n var dataEl = document.getElementById('navigation-data');\r\n if (dataEl) {\r\n var data : MenuNode[] = JSON.parse(dataEl.innerHTML);\r\n dataCache.put(url, data);\r\n deferred.resolve(data);\r\n return deferred.promise;\r\n }\r\n\r\n //fetch from network?\r\n this.$http({\r\n method: \"GET\"\r\n , url: url\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response : { data : MenuNode[]}) :any => { //success\r\n console.log('time taken for request: ' + (new Date().getTime() - start) + 'ms');\r\n dataCache.put(url, response.data);\r\n deferred.resolve(response.data);\r\n }); \r\n \r\n return deferred.promise; \r\n\r\n }\r\n\r\n public findAndMarkCurrentNode(nodes : MenuNode[]) {\r\n var n : MenuNode = this.findL1Node(nodes, pglob.RouteData.BasePageId);\r\n if (!n) return;\r\n n.IsCurrent = true;\r\n\r\n var rpvs : IRouteParameter[] = angular.copy(pglob.RouteData.RouteEntry.RouteParameterStack);\r\n var rpv = rpvs.pop();\r\n while (rpv) {\r\n n = this.findById(n, rpv.Id, rpv.PageId); \r\n if (!n) return\r\n n.IsCurrent = true;\r\n rpv = rpvs.pop();\r\n }\r\n }\r\n\r\n public findL1Node(nodes : MenuNode[], pageId : string) : MenuNode {\r\n var rootNode : MenuNode[] = nodes.filter((n:MenuNode) : boolean => {\r\n if (n.PageId == pageId) {\r\n return true;\r\n } else {\r\n return this.findL1Node(n.Nodes, pageId) != null;\r\n };\r\n });\r\n if (rootNode.length > 0) {\r\n return rootNode[0];\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n public findById(node : MenuNode, id : string|number, pageid? : string) : MenuNode {\r\n var rootNode : MenuNode = null;\r\n var queue : MenuNode[] = [];\r\n queue.push(node);\r\n while (queue.length > 0) {\r\n var rootNode = queue.shift();\r\n if (pageid && pageid == rootNode.PageId && rootNode.Id == id) return rootNode;\r\n if (!pageid && rootNode.Id == id) return rootNode;\r\n rootNode.Nodes.forEach((value) => { queue.push(value); });\r\n }\r\n return null;\r\n }\r\n\r\n //public getBaseHref() {\r\n // var href = $(document).find('base').attr('href');\r\n // return href ? href.replace(/^(https?\\:)?\\/\\/[^\\/]*/, '') : '';\r\n //};\r\n \r\n\r\n private findByUrl(node : MenuNode[], url : string) : IRouteEntry {\r\n \r\n var rootNode : MenuNode = null;\r\n var queue : MenuNode[] = [];\r\n node.forEach((value) => {\r\n queue.push(value)\r\n });\r\n\r\n var base : string = pglob.RouteData.CurrentLanguage.hlPrefix + url;\r\n base = base.toLowerCase();\r\n \r\n while (queue.length > 0) {\r\n var rootNode : MenuNode = queue.shift();\r\n var found : boolean = false;\r\n angular.forEach(rootNode.RouteEntry.UrlByLanguage, (value : string, key : string) => {\r\n if (value && base == value.toLowerCase()) found = true;\r\n });\r\n if (found) return rootNode.RouteEntry;\r\n rootNode.Nodes.forEach((value) => { queue.push(value); });\r\n }\r\n return null;\r\n }\r\n\r\n private findByRoutParameter(node : MenuNode[], rpv : IRouteParameter[]) : IRouteEntry {\r\n \r\n var rootNode : MenuNode = null;\r\n var queue : MenuNode[] = [];\r\n node.forEach((value) => {\r\n queue.push(value)\r\n });\r\n\r\n while (queue.length > 0) {\r\n var rootNode : MenuNode = queue.shift();\r\n var found = this.compareStack(rootNode.RouteEntry.RouteParameterStack, rpv);\r\n if (found) return rootNode.RouteEntry;\r\n rootNode.Nodes.forEach((value) => { queue.push(value); });\r\n }\r\n return null;\r\n }\r\n\r\n private compareStack(rpv1 : IRouteParameter[], rpv2 : IRouteParameter[]) : boolean {\r\n if (rpv1.length != rpv2.length) return false;\r\n\r\n for(var i = 0; i < rpv1.length; i++) {\r\n\r\n if (rpv1[i].PageId != rpv2[i].PageId\r\n || rpv1[i].Placeholder != rpv2[i].Placeholder\r\n || rpv1[i].Id != rpv2[i].Id){\r\n \r\n return false; \r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public resetActivePath(rootNodes : MenuNode[]) : void {\r\n var n : MenuNode[] = this.getActivePath(rootNodes);\r\n n.forEach((value : MenuNode) => {\r\n value.IsCurrent = false;\r\n });\r\n }\r\n \r\n /**\r\n * Returns the path in the menu, marked with IsCurrent, e.g. Products - Turbiditymeters - LabScat 2\r\n * @param rootNodes Set of root nodes to start the search.\r\n * @param nodeToGetPath target node to search.\r\n * @returns Array with the MenuNodes that lead to this node, most specific Node first, e.g. LabScat 2 - Turbiditymeters - Products.\r\n */\r\n public getActivePath(rootNodes : MenuNode[]) : MenuNode[] {\r\n var activeNodes : MenuNode[] = [];\r\n var queue : MenuNode[] = [];\r\n rootNodes.forEach((value) => { queue.push(value); });\r\n while (queue.length > 0) {\r\n var n = queue.shift();\r\n if (n.IsCurrent) {\r\n activeNodes.push(n);\r\n queue = [];\r\n }\r\n n.Nodes.forEach((value) => { queue.push(value); });\r\n }\r\n return activeNodes.reverse();\r\n }\r\n\r\n\r\n /**\r\n * Returns all MenuNodes that lead to a ceratain MenuNode, e.g. Products - Turbiditymeters - LabScat 2\r\n * @param rootNodes Set of root nodes to start the search.\r\n * @param nodeToGetPath target node to search.\r\n * @returns Array with the MenuNodes that lead to this node, most specific Node first, e.g. LabScat 2 - Turbiditymeters - Products.\r\n */\r\n public getMenuTreePath(rootNodes : MenuNode[], nodeToGetPath : MenuNode) : MenuNode[] {\r\n for(var i : number = 0; i < rootNodes.length; i++) {\r\n if (rootNodes[i] == nodeToGetPath) {\r\n return [rootNodes[i]];\r\n }\r\n var n = this.getMenuTreePath(rootNodes[i].Nodes, nodeToGetPath);\r\n if (n) {\r\n n.push(rootNodes[i]);\r\n return n;\r\n }\r\n }\r\n }\r\n\r\n \r\n \r\n getElements() : AnchorNavItem[] {\r\n return this.elements;\r\n }\r\n \r\n scrollTo(key : string) {\r\n var active = this.elements.filter((ani) => {\r\n return ani.key == key;\r\n });\r\n if (active.length > 0) {\r\n if (active[0].key.substr(0,1) == '?') {\r\n this.activeHashElement = active[0];\r\n } else {\r\n this.activeElement = active[0];\r\n this.activeHashElement = null;\r\n }\r\n this.scrollToLocation();\r\n this.changeLocation(); \r\n }\r\n }\r\n\r\n getActiveNavItem() : AnchorNavItem {\r\n return this.activeElement;\r\n }\r\n\r\n\r\n /**\r\n * mirror location search function in this service\r\n */\r\n search(): any;\r\n search(search: any): ng.ILocationService;\r\n search(search: string, paramValue: string|number|string[]|boolean): ng.ILocationService;\r\n\r\n public search(search?: string, paramValue?: string|number|string[]|boolean): ng.ILocationService { \r\n if (search && paramValue) return this.$location.search(search, paramValue);\r\n if (search) return this.$location.search(search);\r\n return this.$location.search();\r\n } \r\n\r\n\r\n public getQueryValue(parameterName : string) : any {\r\n var query = this.search();\r\n\r\n for (var key in query) {\r\n if (key.toLowerCase() === parameterName.toLowerCase()) {\r\n var val = this.search()[key];\r\n if (key !== parameterName) { //change case\r\n delete query[key];\r\n query[parameterName] = val;\r\n this.search(query);\r\n }\r\n return this.search()[parameterName];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n \r\n }\r\n}","/// \r\n\r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n export class PageMetaService implements IPageMetaService {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n 'anchorNavService',\r\n ];\r\n\r\n constructor(\r\n private $rootScope: IPageMetaRootScope\r\n , private anchorNavService: navigation.IAnchorNavService\r\n ) {\r\n\r\n anchorNavService.subscribeOnLocationChanged(null, () => {\r\n this.updateTitleDescription();\r\n });\r\n this.updateTitleDescription();\r\n\r\n\r\n };\r\n\r\n getPageMeta(key?: string): IPhotometerGlobalVar | string | any {\r\n if (!key) return pglob;\r\n if (key === 'hl') return pglob.RouteData.CurrentLanguage.hl; \r\n if (key === 'hlFull') return pglob.RouteData.CurrentLanguage.hlFull;\r\n if (key === 'hlPrefix') return pglob.RouteData.CurrentLanguage.hlPrefix;\r\n if (key === 'current' && pglob.RouteData.RouteEntry.RouteParameterStack.length > 0) return pglob.RouteData.RouteEntry.RouteParameterStack[0];\r\n if (key === 'parent' && pglob.RouteData.RouteEntry.RouteParameterStack.length > 1) return pglob.RouteData.RouteEntry.RouteParameterStack[1];\r\n if (key === 'username' && pglob.RouteData.User) return pglob.RouteData.User;\r\n if (key === 'email' && pglob.RouteData.Email) return pglob.RouteData.Email;\r\n if (key === 'PageId' && pglob.RouteData.PageId) return pglob.RouteData.PageId;\r\n return null;\r\n };\r\n\r\n\r\n getContentFilterFor(key: string, useRouteParameter?: boolean, category?: number): editor.EditorFilter {\r\n if (useRouteParameter === void 0) { useRouteParameter = true; }\r\n if (category === void 0) { category = 9; }\r\n\r\n var f: editor.EditorFilter = new editor.EditorFilter();\r\n var rpv: IRouteParameter[] = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n\r\n f.Category = 12;\r\n\r\n if (useRouteParameter) {\r\n if (rpv.length == 1) {\r\n if (rpv[0].Placeholder !== \"Child\") f.Filter1 = rpv[0].Id;\r\n }\r\n\r\n if (rpv.length == 2) {\r\n if (rpv[1].Placeholder !== \"Child\") f.Filter1 = rpv[1].Id;\r\n if (rpv[0].Placeholder !== \"Child\") f.Filter2 = rpv[0].Id;\r\n }\r\n\r\n if (rpv.length == 3) {\r\n if (rpv[2].Placeholder !== \"Child\") f.Filter1 = rpv[2].Id;\r\n if (rpv[1].Placeholder !== \"Child\") f.Filter2 = rpv[1].Id;\r\n if (rpv[0].Placeholder !== \"Child\") f.Filter3 = rpv[0].Id;\r\n }\r\n }\r\n\r\n f.FilterString1 = pglob.RouteData.PageId;\r\n f.FilterString2 = key;\r\n f.Category = category;\r\n f.rpv = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n f.IsLanguageIndifferent = false;\r\n\r\n return f;\r\n }\r\n\r\n updateTitleDescription() {\r\n if (pglob.RouteData.RouteEntry.RouteParameterStack.length < 1) return;\r\n\r\n //use basepage\r\n var index = 0;\r\n while (pglob.RouteData.RouteEntry.RouteParameterStack.length > index && pglob.RouteData.RouteEntry.RouteParameterStack[index].PageId != pglob.RouteData.BasePageId) index++;\r\n if (index == pglob.RouteData.RouteEntry.RouteParameterStack.length) index = 0;\r\n\r\n if (!pglob.RouteData.RouteEntry.RouteParameterStack[index].PageTitle\r\n || !pglob.RouteData.RouteEntry.RouteParameterStack[index].MetaDescription) index = 0;\r\n\r\n if (pglob.RouteData.RouteEntry.RouteParameterStack[index].PageTitle) {\r\n var pageTitle = pglob.RouteData.RouteEntry.RouteParameterStack[index].PageTitle[pglob.RouteData.CurrentLanguage.hlFull];\r\n this.$rootScope.pageTitle = pageTitle;\r\n }\r\n\r\n if (pglob.RouteData.RouteEntry.RouteParameterStack[index].MetaDescription) {\r\n var metaDescription = pglob.RouteData.RouteEntry.RouteParameterStack[index].MetaDescription[pglob.RouteData.CurrentLanguage.hlFull];\r\n this.$rootScope.metaDescription = metaDescription;\r\n }\r\n\r\n }\r\n\r\n searchRouteParameter(placeholder: string): IRouteParameter {\r\n var routeParameter: IRouteParameter[] = pglob.RouteData.RouteEntry.RouteParameterStack.filter((param: IRouteParameter, i: number): boolean => {\r\n return param.Placeholder === placeholder;\r\n });\r\n\r\n if (routeParameter.length > 0) return routeParameter[0];\r\n return null;\r\n }\r\n\r\n searchNode(placeholder: string, id: number, nodes: MenuNode[]) : MenuNode {\r\n //search current level\r\n var found = nodes.filter((n, i, a) => {\r\n return n.RouteEntry.RouteParameterStack.length > 0 && \r\n n.RouteEntry.RouteParameterStack[0].Placeholder == placeholder &&\r\n n.RouteEntry.RouteParameterStack[0].Id == id;\r\n })\r\n if (found.length > 0) return found[0];\r\n\r\n //search depth first\r\n var child = null;\r\n nodes.some((n, i, a) => {\r\n if (n.Nodes && n.Nodes.length > 0) {\r\n return child = this.searchNode(placeholder, id, n.Nodes); \r\n }\r\n });\r\n if (child) return child;\r\n }\r\n\r\n searchPage(placeholder: string, id: number): angular.IPromise {\r\n return this.anchorNavService.getNavigationData().then((nd: MenuNode[]) => {\r\n var found = this.searchNode(placeholder, id, nd);\r\n if (found) return found;\r\n });\r\n\r\n //var routeParameter :IRouteParameter[] = pglob.RouteData.RouteEntry.RouteParameterStack.filter((param : IRouteParameter, i: number) : boolean => {\r\n // return param.Placeholder === placeholder;\r\n //});\r\n\r\n //if (routeParameter.length > 0) return routeParameter[0];\r\n //return null;\r\n }\r\n\r\n }\r\n}","/// \r\n\r\ndeclare var requestFrame: IRequestFrame;\r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n /**\r\n * Services that changes the url according to elements in viewport.\r\n * AnchorNavDirective adds Elements, and this Service changes the location path, according to the Element currently in the viewport.\r\n */\r\n export class ParallaxService implements IParallaxService {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n '$window',\r\n '$timeout',\r\n '$q',\r\n 'debounce',\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $window: ng.IWindowService,\r\n private $timeout: ng.ITimeoutService,\r\n private $q: ng.IQService,\r\n private debounce: navigation.IDebounceService\r\n ) {\r\n\r\n var request = angular.bind($window, requestFrame('request'));\r\n \r\n var onScroll = (time : number) => {\r\n\r\n //limit to 60fps\r\n if (time < this.fPSTimeStamp) {\r\n request(angular.bind(this, onScroll));\r\n return;\r\n };\r\n\r\n var t = (time + this.fpsDelay);\r\n this.fPSTimeStamp = Math.round(t/this.fpsDelay) * this.fpsDelay;\r\n\r\n if (this.scrollTop == this.lastScrollTop) return; //no scrolling, no work;\r\n this.lastScrollTop = this.scrollTop; \r\n\r\n //run handler \r\n this.$rootScope.$emit('navigation-scroll', this.lastScrollTop);\r\n this.isTicking = false; \r\n }\r\n this.onScroll = angular.bind(this, onScroll);\r\n\r\n //there are times where isTicking is not reset, this will reset is Ticking after a certain timout, trailing edge debounced.\r\n var debouncedResetOfIsTicking = debounce(()=> { this.isTicking = false; }, 1000, false);\r\n\r\n angular.element($window).bind(\"scroll\", () => {\r\n this.scrollTop = $(this.$window).scrollTop();\r\n if (!this.isTicking) {\r\n request(this.onScroll);\r\n this.isTicking = true;\r\n debouncedResetOfIsTicking();\r\n }\r\n });\r\n\r\n }\r\n \r\n request :IRequestFrameFunction;\r\n\r\n isTicking : boolean = false;\r\n fPSTimeStamp : number = 0;\r\n fpsDelay = Math.round(1000 / 60); //60 fps;\r\n\r\n lastDocumentHeight : number = -1;\r\n scrollTop : number = -1;\r\n lastScrollTop : number = -1;\r\n\r\n onScroll : Function; \r\n\r\n\r\n public subscribeOnScroll (\r\n scope : ng.IScope\r\n , callback: IParallaxServiceListener\r\n ) : void {\r\n var handler = this.$rootScope.$on('navigation-scroll', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n //for parallax time and change will be same, start = 0, duration = end\r\n public easeInOutQuad(time : number, start : number, change : number, duration : number, round? : boolean) : number { \r\n time = Math.max(Math.min(time, duration), 0);\r\n if (!round) {\r\n return this.easeInOutQuadIntern(time, start, change, duration);\r\n } else {\r\n return Math.round(this.easeInOutQuadIntern(time, start, change, duration));\r\n }\r\n \r\n };\r\n\r\n\r\n //http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm\r\n //http://gizma.com/easing/#quad3 / http://easings.net/#easeInOutQuad\r\n //http://upshots.org/actionscript/jsas-understanding-easing\r\n private easeInOutQuadIntern (t:number, b:number, c:number, d:number):number {\r\n\t var ts:number=(t/=d)*t;\r\n\t var tc:number=ts*t;\r\n\t return b+c*(6*tc*ts + -15*ts*ts + 10*tc);\r\n }\r\n\r\n\r\n }\r\n}","\r\nmodule navigation {\r\n 'use strict';\r\n\r\n //https://github.com/mz026/angular_page_visibility/blob/master/dist/page_visibility.js\r\n\r\n export class VisibilityApiService implements IVisibilityApiService {\r\n\r\n public static $inject = [\r\n '$rootScope',\r\n '$document',\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $document: ng.IDocumentService,\r\n ) {\r\n var getVisibilityKeys, hiddenKey, pageVisibility, visibilityChagedKey, _ref;\r\n\r\n getVisibilityKeys = function () {\r\n if (typeof ($document.prop('hidden')) !== 'undefined') {\r\n return ['hidden', 'visibilitychange'];\r\n } else if (typeof ($document.prop('mozHidden')) !== 'undefined') {\r\n return ['mozHidden', 'mozvisibilitychange'];\r\n } else if (typeof ($document.prop('msHidden')) !== 'undefined') {\r\n return ['msHidden', 'msvisibilitychange'];\r\n } else if (typeof ($document.prop('webkitHidden')) !== 'undefined') {\r\n return ['webkitHidden', 'webkitvisibilitychange'];\r\n }\r\n };\r\n\r\n _ref = getVisibilityKeys(), hiddenKey = _ref[0], visibilityChagedKey = _ref[1];\r\n\r\n $document.on(visibilityChagedKey, function () {\r\n $rootScope.$emit('visibility-change', $document.prop(hiddenKey));\r\n });\r\n }\r\n\r\n\r\n public subscribeOnVisibilityChange(\r\n scope: ng.IScope\r\n , callback: IVisibilityChangedListener\r\n ): void {\r\n\r\n var handler = this.$rootScope.$on('visibility-change', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n\r\n }\r\n }\r\n}","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\ndeclare var svg4everybody : any;\r\n\r\nmodule navigation {\r\n 'use strict';\r\n\r\n export class MenuCtrl {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n '$location', \r\n '$anchorScroll', \r\n '$window', \r\n '$http', \r\n 'userService',\r\n 'shoppingListService',\r\n 'anchorNavService',\r\n 'pageMetaService',\r\n 'loadingIndicatorService',\r\n 'parallaxService',\r\n '$mdDialog',\r\n '$animate',\r\n \r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n constructor(\r\n private $scope: IMenuScope,\r\n private $location: ng.ILocationService,\r\n private $anchorScroll: ng.IAnchorScrollService,\r\n private $window: ng.IWindowService,\r\n private $http: ng.IHttpService,\r\n private userService: user.UserService,\r\n private shoppingListService: shoppinglist.IShoppingListService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private loadingIndicatorService : navigation.LoadingIndicatorService,\r\n private parallaxService: navigation.IParallaxService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $animate : ng.animate.IAnimateService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n \r\n var el : any = $(\"#navigation\")\r\n //el.stick_in_parent({offset_top : -10 });\r\n\r\n //window.ace.version\r\n //window..angular.version.full\r\n //window..ngMaterial.version.full\r\n\r\n var lastScrollTop : number = 0;\r\n var pos : number = 0;\r\n var currentHeaderHeight : number = 0;\r\n\r\n var animateHeader = (scrollTop : number) => {\r\n //pos holds the 'animation' position 0 will be expanded 1 will be collapsed.\r\n pos += (scrollTop - lastScrollTop);\r\n lastScrollTop = scrollTop;\r\n\r\n\r\n\r\n\r\n var headerSpeed = 92;\r\n \r\n if ($window.matchMedia( \"(min-width: 768px)\" ).matches) { \r\n headerSpeed = 188;\r\n }\r\n\r\n pos = Math.max(Math.min(pos, headerSpeed), 0);\r\n \r\n var toolsOpacity = this.parallaxService.easeInOutQuad(pos, 1, -1, headerSpeed, false);\r\n //var borderBottomOpacity = this.parallaxService.easeInOutQuad(scrollTop, 1, -1, headerSpeed, false);\r\n var shadowOpacity = this.parallaxService.easeInOutQuad(scrollTop, 0, 0.15, headerSpeed, false);\r\n var shadowBlur = this.parallaxService.easeInOutQuad(scrollTop, 0, 12, headerSpeed, false);\r\n var shadowSpread = this.parallaxService.easeInOutQuad(scrollTop, 0, 2, headerSpeed, false);\r\n var l1LinkPaddingBottom = this.parallaxService.easeInOutQuad(pos, 14, 34, headerSpeed, false);\r\n var subnav = this.parallaxService.easeInOutQuad(pos, 60, -60, headerSpeed, false);\r\n\r\n var logoScale = 1\r\n var headerHeight = 90; \r\n var logoBottom = 5; \r\n\r\n headerHeight = this.parallaxService.easeInOutQuad(pos, headerSpeed, -27, headerSpeed);\r\n logoScale = this.parallaxService.easeInOutQuad(pos, 1, -0.3333333333, headerSpeed, false);\r\n\r\n //xs+\r\n if ($window.matchMedia( \"(min-width: 480px)\" ).matches) {\r\n }\r\n\r\n //sm+\r\n if ($window.matchMedia( \"(min-width: 768px)\" ).matches) { \r\n logoScale = 1\r\n headerHeight = this.parallaxService.easeInOutQuad(pos, headerSpeed, -78, headerSpeed);\r\n logoBottom = this.parallaxService.easeInOutQuad(pos, 27, -9, headerSpeed); \r\n }\r\n\r\n //md+\r\n if ($window.matchMedia( \"(min-width: 992px)\" ).matches) {\r\n //logoScale = 0.86;\r\n logoScale = this.parallaxService.easeInOutQuad(pos, 1, -0.14, headerSpeed, false);\r\n\r\n }\r\n\r\n //lg+\r\n if ($window.matchMedia( \"(min-width: 1200px)\" ).matches) { \r\n logoScale = this.parallaxService.easeInOutQuad(pos, 1, -0.3333333333, headerSpeed, false);\r\n }\r\n\r\n currentHeaderHeight = headerHeight; \r\n //$('.pagehead .header').css({ \"border-bottom-color\": \"rgba(151, 151, 151, \" + (1 - borderBottomOpacity) + \")\" });\r\n $('.pagehead .header').css({ \"box-shadow\": \"0 0 \" + shadowBlur + \"px \" + shadowSpread + \"px rgba(0, 0, 0,\"+ shadowOpacity +\")\" });\r\n \r\n\r\n $('.pagehead .logopnl').css({ transform: \"scale(\" + logoScale + \")\", \"bottom\" : logoBottom + \"px\" });\r\n $('.pagehead .header > .page-el').css({ height: headerHeight + \"px\" });\r\n $('.pagehead .tools').css({ opacity: toolsOpacity });\r\n $('.pagehead nav.main ul a').css({ \"padding-bottom\": l1LinkPaddingBottom + \"px\" }); \r\n $('.pagehead nav.scroll ul').css({ transform: \"translateY(\" + subnav + \"px)\", opacity: (1 - toolsOpacity), \"z-index\" : (1 - toolsOpacity) > 0.5 ? 20 : 0 }); \r\n $('.pagehead nav.scroll').css({ \"z-index\" : (1 - toolsOpacity) > 0.5 ? 20 : 0 }); \r\n $('.glossar .index').css({ top : headerHeight + 'px'});\r\n\r\n }\r\n \r\n this.parallaxService.subscribeOnScroll($scope, (e: ng.IAngularEvent, scrollTop : number) => {\r\n //collapse navigation on scrolling, when not on mobile\r\n if ($scope.showNav && $window.matchMedia( \"(min-width: 768px)\" ).matches) { \r\n $scope.$apply(function () {\r\n $scope.showNav = false;\r\n });\r\n }\r\n var r = this.parallaxService.easeInOutQuad(scrollTop - 210, 55, -55, 500);\r\n $('.topflag').css({ transform: \"translate3d(\" + r + \"px, 0, 0)\" });\r\n\r\n animateHeader(scrollTop);\r\n }); \r\n\r\n $scope.$watch(\"showNav\", (newValue, oldValue, scope) => {\r\n if (newValue == oldValue) return;\r\n if (newValue) { \r\n $animate.animate($('.pagehead .subnav'), { 'max-height': 0 }, { 'max-height': $($window).height() - currentHeaderHeight + \"px\" });\r\n } else { \r\n $animate.animate($('.pagehead .subnav'), { 'max-height': $('.pagehead .subnav').outerHeight(true) + \"px\" }, { 'max-height': 0 }).then(() => {\r\n //this.$scope.parentSubNav1 = undefined;\r\n });\r\n }\r\n });\r\n\r\n anchorNavService.getNavigationData().then((data : MenuNode[]) => {\r\n $scope.menudata = data;\r\n $scope.level = 0;\r\n anchorNavService.resetActivePath($scope.menudata);\r\n anchorNavService.findAndMarkCurrentNode($scope.menudata);\r\n animateHeader($(this.$window).scrollTop()); \r\n });\r\n \r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event : ng.IAngularEvent, re: IRouteEntry) => {\r\n anchorNavService.resetActivePath($scope.menudata);\r\n anchorNavService.findAndMarkCurrentNode($scope.menudata);\r\n animateHeader($(this.$window).scrollTop()); \r\n });\r\n \r\n\r\n loadingIndicatorService.subscribeOnLoadIndicatorChanged($scope, (event : ng.IAngularEvent, requestOnGoing : boolean) => {\r\n $scope.requestOnGoing = requestOnGoing;\r\n });\r\n \r\n\r\n svg4everybody(); \r\n\r\n $scope.shoppingListTotalMap = {1: 0, 2: 0};\r\n\r\n angular.forEach(shoppingListService.getLists(), (list : shoppinglist.ShoppingList, key : string) => {\r\n $scope.shoppingListTotalMap[list.Type] = shoppingListService.getTotalQty(list); \r\n });\r\n\r\n shoppingListService.subscribeOnUpdated($scope, (event, list) => {\r\n $scope.shoppingListTotalMap[list.Type] = shoppingListService.getTotalQty(list);\r\n });\r\n\r\n }\r\n\r\n getScrollNav() {\r\n var ani : AnchorNavItem[] = this.anchorNavService.getElements().filter((nsi) => {\r\n return nsi.useInScrollNav;\r\n });\r\n return ani;\r\n }\r\n\r\n isActiveScrollNav(ani : AnchorNavItem) {\r\n if (!this.anchorNavService.getActiveNavItem() || !ani) return false;\r\n return this.anchorNavService.getActiveNavItem().key.indexOf(ani.key) == 0; //starts with\r\n }\r\n\r\n \r\n\r\n setParentSubnav1(menuentry : MenuNode, notoggle? : boolean) {\r\n if (this.$scope.showNav && this.$scope.parentSubNav1 == menuentry && !notoggle) {\r\n this.$scope.showNav = false;\r\n return;\r\n }\r\n\r\n this.$scope.parentSubNav1 = menuentry;\r\n this.$scope.parentSubNav2 = menuentry.Nodes[0];\r\n\r\n var scope : IMenuScope = this.$scope;\r\n\r\n menuentry.Nodes.forEach(function(value : MenuNode, index : number, arr : MenuNode[]) {\r\n if (value.IsCurrent) scope.parentSubNav2 = value;\r\n });\r\n \r\n this.$scope.showNav = true;\r\n this.$scope.level = 1; \r\n }; \r\n\r\n setParentSubnav2(menuentry : MenuNode) {\r\n this.$scope.parentSubNav2 = menuentry;\r\n this.$scope.level = 2; \r\n };\r\n\r\n getMenuClass(menuentry) {\r\n if (!menuentry || !menuentry.Options) return 'text';\r\n if (menuentry.Options['Icon']) return 'icon';\r\n if (menuentry.Options['Image']) return 'img';\r\n return 'text';\r\n };\r\n\r\n getOptionWPrefix(menuentry, option, prefix) {\r\n if (!menuentry || !menuentry.Options) return null;\r\n return prefix + menuentry.Options[option];\r\n };\r\n\r\n gotoTop() {\r\n ($).smoothScroll(0);\r\n };\r\n\r\n logout() {\r\n var me = this;\r\n\r\n this.userService.logout().then((response) => { \r\n me.$window.location.reload();\r\n }).catch((reason) => { \r\n alert('logout unsuccessful'); \r\n });\r\n\r\n }\r\n\r\n\r\n openLogin(ev: MouseEvent) {\r\n //alert(\"test\");\r\n \r\n this.$mdDialog.show({\r\n controller: 'MobileLoginCtrl',\r\n templateUrl: 'user/MobileLoginController',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n parentScope: this.$scope\r\n },\r\n })\r\n .then(function () {\r\n console.log('Modal closed at: ' + new Date());\r\n }, function () {\r\n console.log('Modal canceled at: ' + new Date());\r\n });\r\n }\r\n\r\n showShoppingList(listType, $event : JQueryEventObject) {\r\n this.shoppingListService.show(listType, $event.currentTarget);\r\n }\r\n \r\n navigate(n : MenuNode, $event : ng.IAngularEvent) : void {\r\n \r\n //if base page is not the same we can not do it the ajax way.\r\n var path : MenuNode[] = this.anchorNavService.getMenuTreePath(this.$scope.menudata, n);\r\n if (path[0].PageId != pglob.RouteData.BasePageId) return; //we need a page refresh, so we'll use the href attribute.\r\n\r\n event.preventDefault(); //we can change inside this page, so prevent 'href' attribute.\r\n \r\n this.anchorNavService.resetActivePath(this.$scope.menudata);\r\n this.anchorNavService.updateRouteParameters(n.RouteEntry, true, this.$scope.menudata);\r\n this.$scope.showNav = false;\r\n }\r\n\r\n getUrlForLanguage(lkey : string) : string {\r\n var query = \"\"\r\n var path = this.$location.url();\r\n if (path && path.indexOf(\"?\") >= 0) {\r\n query = path.substring(path.indexOf(\"?\"))\r\n }\r\n return pglob.RouteData.RouteEntry.UrlByLanguage[lkey] + query;\r\n }\r\n\r\n openChangePasswordModal(ev: MouseEvent) {\r\n this.$mdDialog.show({\r\n controller: 'ChangePasswordCtrl',\r\n templateUrl: 'user/ChangePasswordDirective',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n parentScope: this.$scope\r\n },\r\n })\r\n .then(function () {\r\n console.log('Modal closed at: ' + new Date());\r\n }, function () {\r\n console.log('Modal canceled at: ' + new Date());\r\n });\r\n }\r\n \r\n }\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The main Menu.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule navigation {\r\n 'use strict';\r\n\r\n var nav = angular.module('navigation', ['ngAnimate', 'user', 'angular-cache', 'templates', 'angulartics', 'angulartics.google.tagmanager', 'youTubeOverlay', 'editableContent'])\r\n .config(['$httpProvider', '$anchorScrollProvider', function ($httpProvider: ng.IHttpProvider, $anchorScrollProvider : ng.IAnchorScrollProvider) {\r\n $httpProvider.interceptors.push(LoadingInterceptor.Factory);\r\n $anchorScrollProvider.disableAutoScrolling();\r\n }])\r\n .config(['$analyticsProvider', function ($analyticsProvider) { \r\n $analyticsProvider.trackExceptions(true);\r\n $analyticsProvider.virtualPageviews(false); //turn off automatic tracking \r\n $analyticsProvider.firstPageview(false); //turn off automatic tracking \r\n }])\r\n .controller('MenuCtrl', MenuCtrl)\r\n .directive('onFinishRender', onFinishRender)\r\n .directive('itemNavigation', ItemNavigationDirective)\r\n .directive('responsiveImage', responsiveImage)\r\n .directive('anchorNav', anchorNav)\r\n .directive('scrollTo', scrollTo)\r\n .directive('trackPageView', trackPageViewDirective)\r\n .service('anchorNavService', navigation.AnchorNavService) \r\n .service('pageMetaService', navigation.PageMetaService) \r\n .service('loadingIndicatorService', navigation.LoadingIndicatorService) \r\n .service('parallaxService', navigation.ParallaxService) \r\n .service('visibilityApiService', navigation.VisibilityApiService) \r\n .factory('debounce', debounceService)\r\n .factory('loadingInterceptor', navigation.LoadingInterceptor);\r\n\r\n \r\n}","/// \r\n\r\nmodule product {\r\n 'use strict';\r\n\r\n export class Feature {\r\n constructor(\r\n public Text: string\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule product {\r\n 'use strict';\r\n\r\n export class ProductData {\r\n constructor(\r\n public Current: IRouteEntry,\r\n public Previous: IRouteEntry,\r\n public Next: IRouteEntry,\r\n public Product: ProductDetail,\r\n public ProductImageName: string,\r\n public ProductLegacyImagePath: string,\r\n public Features: Feature[],\r\n public Specifications: any,\r\n public DataSheet: library.Document,\r\n public ControlUnits : ControlUnit[]\r\n ) { }\r\n }\r\n\r\n export class ProductDetail {\r\n constructor(\r\n public Name: string,\r\n public Text: string,\r\n public LongDesc: string,\r\n public ProductLegacyImagePath: string,\r\n public IsObsolete: boolean,\r\n public KillingDate: Date\r\n ) { }\r\n }\r\n\r\n export class ControlUnit {\r\n constructor(\r\n public Id : string,\r\n public Name : string,\r\n public Text : string,\r\n public Url : string\r\n ) { }\r\n }\r\n}","declare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule product {\r\n 'use strict';\r\n\r\n export class ProductCtrl {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n '$location', \r\n '$anchorScroll', \r\n '$window', \r\n '$http', \r\n '$timeout',\r\n 'anchorNavService',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n '$templateCache',\r\n '$sce', \r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n constructor(\r\n private $scope: IProductScope,\r\n private $location: ng.ILocationService,\r\n private $anchorScroll: ng.IAnchorScrollService,\r\n private $window: ng.IWindowService,\r\n private $http: ng.IHttpService,\r\n private $timeout: ng.ITimeoutService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $templateCache : ng.ITemplateCacheService\r\n , private $sce: ng.ISCEService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n $scope.editBtnVisible = false;\r\n\r\n\r\n //this.load(pglob.RouteData.RouteEntry);\r\n anchorNavService.subscribeOnLocationChanged($scope, (event :ng.IAngularEvent, re:IRouteEntry) => {\r\n this.load(re);\r\n });\r\n this.load(pglob.RouteData.RouteEntry);\r\n\r\n\r\n $scope.checkOverflow = () => { \r\n var el: JQuery = $(\".overflow-wrapper .content:visible\");\r\n //console.log(el);\r\n\r\n if ($scope.expanded) {\r\n $scope.expanded = false;\r\n el.on(\"transitionend\", (e) => {\r\n if(e.target !== e.currentTarget) return;\r\n \tel.off(e);\r\n this.$timeout(() => { $scope.checkOverflow(); });\r\n }); \r\n }\r\n\r\n var totalHeight = 0;\r\n var child: JQuery = el.children(\":visible\").each(function() {\r\n totalHeight = totalHeight + $(this).outerHeight(true);\r\n });;\r\n //console.log(totalHeight);\r\n //console.log(el.prop(\"offsetHeight\"));\r\n\r\n $scope.overflow = totalHeight > el.prop(\"offsetHeight\"); \r\n \r\n if (this.pageMetaService.getPageMeta().RouteData.Features.AdminTools) {\r\n el.bind('mouseenter', () => { $scope.editBtnVisible = true; });\r\n el.bind('mouseleave', () => { $scope.editBtnVisible = false; }); \r\n }\r\n };\r\n \r\n } \r\n\r\n changeProduct(re : IRouteEntry, event? : any, animDirectionClass? : string) {\r\n if (event) event.preventDefault();\r\n this.$scope.animDirection = animDirectionClass;\r\n this.anchorNavService.updateRouteParameters(re, true);\r\n }\r\n\r\n load(re:IRouteEntry) {\r\n\r\n this.$scope.product = null;\r\n this.$scope.img = null;\r\n\r\n this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Product/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {}\r\n , data : re.RouteParameterStack\r\n }).then(( response : {data : ProductData}) => {\r\n if (response.data.Product.KillingDate) response.data.Product.KillingDate = new Date(response.data.Product.KillingDate); //we recieve that as string, have to convert it.\r\n this.$scope.status = \"success\";\r\n this.$scope.product = response.data.Product;\r\n this.$scope.img = response.data.ProductImageName;\r\n this.$scope.features = response.data.Features;\r\n this.$scope.current = response.data.Current;\r\n this.$scope.previous = response.data.Previous;\r\n this.$scope.next = response.data.Next;\r\n this.$scope.specs = response.data.Specifications;\r\n this.$scope.datasheet = response.data.DataSheet;\r\n this.$scope.controlUnits = response.data.ControlUnits;\r\n\r\n this.$scope.product.LongDesc = this.$sce.trustAsHtml(this.$scope.product.LongDesc);\r\n\r\n //this.$scope.expanded = false; <-- this does not work, cause then the overflow is not yet present…\r\n this.$timeout(() => { this.$scope.checkOverflow(); });\r\n });\r\n\r\n }; \r\n\r\n getDataSheetRevision(hl? : string): library.DocumentRev {\r\n if (!this.$scope.datasheet) return null;\r\n var hl = hl || pglob.RouteData.CurrentLanguage.hl;\r\n\r\n var ds = this.$scope.datasheet.Revisions.filter((doc, index, array) => {\r\n return doc.LanguageCode == hl;\r\n });\r\n if (ds.length > 0) return ds[0];\r\n\r\n //otherwise the english one\r\n if (hl != \"E\") {\r\n var dsE : library.DocumentRev = this.getDataSheetRevision(\"E\");\r\n if (dsE) return dsE;\r\n }\r\n\r\n if (this.$scope.datasheet.Revisions.length > 0) return this.$scope.datasheet.Revisions[0];\r\n return null;\r\n }\r\n\r\n openConfig($event: MouseEvent) : void {\r\n this.$mdDialog.show({\r\n controller: 'PartOrderDetailCtrl',\r\n templateUrl: 'part/PartOrderDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: $event,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n product: this.$scope.product,\r\n },\r\n })\r\n }\r\n\r\n openEditor($event: Event): void {\r\n if (!this.pageMetaService.getPageMeta().RouteData.Features.AdminTools) return;\r\n\r\n if (event) event.preventDefault();\r\n \r\n var rpv: IRouteParameter[] = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n\r\n var config = {\r\n \"Category\": 9,\r\n \"Filter1\" : rpv[1].Id,\r\n \"Filter2\" : rpv[0].Id,\r\n \"FilterString1\": \"Produkt\", \r\n \"FilterString2\": \"Text\", \r\n \"ContentFormat\": 77, \r\n \"useRouteParam\": true,\r\n };\r\n\r\n config['rpv'] = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n \r\n var editorTemplate = this.$templateCache.get('editormodaltemplate.html') || editor.EditorModalTemplate();\r\n\r\n this.$mdDialog.show({\r\n controller: 'editorCtrl',\r\n template: editorTemplate,\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: null,\r\n clickOutsideToClose:false,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals : {\r\n filter : config\r\n },\r\n })\r\n .then((message : {filter : editor.EditorFilter, data : string}) => { //close\r\n console.log('Modal closed at: ' + new Date());\r\n //if (scope.config.replace) {\r\n // element.html(message.data); \r\n // wireEditButton();\r\n //}\r\n }, (message : {filter : editor.EditorFilter, data : string}) => { //cancel\r\n console.log('Modal canceled at: ' + new Date());\r\n });\r\n\r\n\r\n }\r\n \r\n }\r\n\r\n}","declare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule product {\r\n 'use strict';\r\n\r\n export class ProductArchiveCtrl {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n '$http', \r\n 'pageMetaService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n constructor(\r\n private $scope: IProductArchiveScope,\r\n private $http: ng.IHttpService,\r\n private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n this.load();\r\n } \r\n\r\n\r\n load() {\r\n\r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Product/Archived\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {}\r\n }).then(( response : {data : search.Product[]}) => {\r\n this.$scope.products = response.data;\r\n });\r\n\r\n }; \r\n\r\n \r\n }\r\n\r\n}","/// \r\n\r\n\r\nmodule solution {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class SolutionService {\r\n static $inject = ['$http', '$q', 'CacheFactory','$injector',];\r\n\r\n private cacheName : string = \"solutionCache\"; //use different cache with capacity, because we can't store anything right now.\r\n \r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n public $q: ng.IQService,\r\n public CacheFactory: CacheFactory.ICacheFactory,\r\n private $injector : ng.auto.IInjectorService\r\n ) {\r\n\r\n if ($injector.has(\"editorService\")) {\r\n var editor : editor.IEditorService = $injector.get('editorService');\r\n editor.subscribeOnSaveContent(null, (event: ng.IAngularEvent, filter: editor.EditorFilter, data: string) => {\r\n if (!filter.rpv || !filter.rpv[0] || !filter.rpv[1]) return; //not our concern\r\n var url : string = \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Solution/ByGroup?PageId=\" + pglob.RouteData.PageId\r\n var cacheKey = url + \":\" + filter.rpv[0].Id + \"-\" + filter.rpv[1].Id;\r\n var dataCache : CacheFactory.ICache = this.CacheFactory.get(this.cacheName);\r\n dataCache.remove(cacheKey);\r\n });\r\n }\r\n\r\n \r\n \r\n } \r\n\r\n private getOrCreateCache() : CacheFactory.ICache {\r\n if (!this.CacheFactory.get(this.cacheName)) {\r\n this.CacheFactory.createCache(this.cacheName, {\r\n capacity: 10, //currently results in 1MB max size.\r\n storageMode: 'sessionStorage', // This cache will use `sessionStorage`.\r\n });\r\n }\r\n return this.CacheFactory.get(this.cacheName);\r\n }\r\n\r\n public getSolutionData() : ng.IPromise {\r\n var url : string = \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Solution/ByGroup?PageId=\" + pglob.RouteData.PageId\r\n var cacheKey = url + \":\" + pglob.RouteData.RouteEntry.RouteParameterStack[0].Id + \"-\" + pglob.RouteData.RouteEntry.RouteParameterStack[1].Id\r\n\r\n var deferred = this.$q.defer();\r\n var dataCache : CacheFactory.ICache = this.getOrCreateCache();\r\n\r\n //in cache?\r\n if (dataCache.get(cacheKey)) {\r\n deferred.resolve(dataCache.get(cacheKey));\r\n return deferred.promise;\r\n } \r\n\r\n //embeded in html?\r\n var dataEl = document.getElementById('solution-data');\r\n if (dataEl) {\r\n var data : SolutionData = JSON.parse(dataEl.innerHTML);\r\n if (data.Current.RouteParameterStack[0].Id == pglob.RouteData.RouteEntry.RouteParameterStack[0].Id \r\n && data.Current.RouteParameterStack[1].Id == pglob.RouteData.RouteEntry.RouteParameterStack[1].Id) { //only if it's a match\r\n\r\n dataCache.put(cacheKey, data);\r\n deferred.resolve(data);\r\n return deferred.promise;\r\n }\r\n }\r\n\r\n //fetch from network?\r\n this.$http({\r\n method: \"POST\"\r\n , url: url\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {}\r\n , data: pglob.RouteData.RouteEntry.RouteParameterStack\r\n }).then((response : { data : SolutionData}) :any => { //success\r\n dataCache.put(cacheKey, response.data);\r\n deferred.resolve(response.data);\r\n }); \r\n \r\n return deferred.promise; \r\n }\r\n }\r\n}\r\n","/// \r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n export class Intro {\r\n constructor(\r\n public Text: string,\r\n public ImgUrl: string\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n export class MeasuringTask {\r\n constructor(\r\n public Name: string,\r\n public Id: number,\r\n public UrlKey : string,\r\n public MeasuringTaskGroups: number[],\r\n public Products: number[]\r\n ) { }\r\n }\r\n}\r\n","/// \r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n export class Product {\r\n constructor(\r\n public Name: string,\r\n public ProduktNummer: string,\r\n public KurztextDeutsch: string,\r\n public ImgUrl: string,\r\n public MeasuringTasks: number[]\r\n ) { }\r\n }\r\n}\r\n","/// \r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n export class SolutionData {\r\n constructor(\r\n public Current: IRouteEntry,\r\n public Previous: IRouteEntry,\r\n public Next : IRouteEntry,\r\n public MeasuringTaskGroups: MeasuringTaskGroup[],\r\n public Meta : IPageMeta,\r\n public Intro: Intro,\r\n public Schema: string,\r\n public MeasuringTasks: MeasuringTask[],\r\n public Products: Product[],\r\n public IsIndustry: boolean\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n\r\n export function productByMeasuringTaskFilter() {\r\n return function(products, measuringTaskProducts) { //items, search\r\n products = products || [];\r\n measuringTaskProducts = measuringTaskProducts || [];\r\n var out = [];\r\n measuringTaskProducts.forEach(function (productId) {\r\n products.forEach(function (pObj) {\r\n if (pObj.Product.Id == productId) {\r\n out.push(pObj);\r\n }\r\n });\r\n });\r\n return out;\r\n }\r\n }\r\n\r\n\r\n}","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule solution {\r\n 'use strict';\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class SolutionCtrl {\r\n\r\n //private todos: TodoItem[];\r\n\r\n private depth : number; //depth of path, 2 level if application /water/turbidity/ , 1 level if industry /beer/\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$sce',\r\n '$timeout',\r\n 'anchorNavService',\r\n 'solutionService',\r\n '$injector',\r\n 'pageMetaService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: ISolutionScope\r\n , private $sce: ng.ISCEService\r\n , private $timeout : ng.ITimeoutService\r\n , private anchorNavService : navigation.IAnchorNavService\r\n , private solutionService : SolutionService\r\n , private $injector : ng.auto.IInjectorService\r\n , private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event :ng.IAngularEvent, re : IRouteEntry) => {\r\n this.load(re);\r\n });\r\n this.load(pglob.RouteData.RouteEntry);\r\n\r\n\r\n //content was edited.\r\n if ($injector.has(\"editorService\")) {\r\n var editor : editor.IEditorService = $injector.get('editorService');\r\n editor.subscribeOnSaveContent($scope, (event: ng.IAngularEvent, filter: editor.EditorFilter, data: string) => {\r\n //check filter\r\n if (filter.FilterString1 != this.pageMetaService.getPageMeta(\"PageId\")) return;\r\n\r\n var diff :IRouteParameter[] = this.$scope.solutionData.Current.RouteParameterStack.filter((param : IRouteParameter, i: number) : boolean => {\r\n return param.Placeholder != filter.rpv[i].Placeholder || param.Id != filter.rpv[i].Id;\r\n })\r\n if (diff.length > 0) return; //there are differences. \r\n\r\n //all ok, replace content.\r\n if (filter.FilterString2 === \"Image\") this.$scope.solutionData.Intro.ImgUrl = data;\r\n if (filter.FilterString2 === \"Intro\") this.$scope.solutionData.Intro.Text = data;\r\n if (filter.FilterString2 === \"Schema\") this.$scope.solutionData.Schema = data;\r\n if (filter.FilterString2 === \"MeasuringTaskDescription\") { \r\n var group : MeasuringTaskGroup[] = this.$scope.solutionData.MeasuringTaskGroups.filter((group : MeasuringTaskGroup) => {\r\n return group.Id == filter.Filter3;\r\n })\r\n if (group[0]) group[0].Text = data;\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n changeTopic(re : IRouteEntry, event : any, animDirectionClass? : string) {\r\n if (event) event.preventDefault();\r\n this.$scope.animDirection = animDirectionClass;\r\n this.anchorNavService.updateRouteParameters(re, true);\r\n }\r\n\r\n load(re : IRouteEntry) {\r\n\r\n var scope: ISolutionScope = this.$scope;\r\n\r\n var checkOverflow = () => { \r\n var el: JQuery = $(\".intro .content:visible\");\r\n\r\n if (scope.expanded) {\r\n scope.expanded = false;\r\n el.on(\"transitionend\", (e) => {\r\n if(e.target !== e.currentTarget) return;\r\n \tel.off(e);\r\n this.$timeout(() => { checkOverflow(); });\r\n }); \r\n }\r\n\r\n var elHeight = el.prop(\"offsetHeight\"); \r\n if (!elHeight) {\r\n this.$timeout(() => { checkOverflow(); });\r\n return;\r\n }\r\n\r\n var totalHeight = 0;\r\n var child: JQuery = el.children(\":visible\").each(function() {\r\n totalHeight = totalHeight + $(this).outerHeight(true);\r\n });\r\n\r\n if (!totalHeight) { \r\n this.$timeout(() => { checkOverflow(); });\r\n return;\r\n }\r\n\r\n scope.overflow = totalHeight >= elHeight; \r\n \r\n\r\n };\r\n\r\n \r\n \r\n scope.mtgDescEditorConfig = scope.mtgDescEditorConfig || new editor.EditorFilter();\r\n scope.mtgDescEditorConfig.Category = 9 \r\n scope.mtgDescEditorConfig.FilterString2 = \"MeasuringTaskDescription\";\r\n scope.mtgDescEditorConfig.UseRouteParam = false;\r\n scope.mtgDescEditorConfig.Replace = false;\r\n\r\n var updateGroup = (newVal: MeasuringTaskGroup) => {\r\n var rpv: IRouteParameter[] = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n scope.mtgDescEditorConfig.Filter3 = newVal.Id; \r\n scope.mtgDescEditorConfig.Filter1 = rpv[rpv.length - 1].Id \r\n scope.mtgDescEditorConfig.Filter2 = rpv[rpv.length - 2].Id\r\n scope.mtgDescEditorConfig.FilterString1 = pglob.RouteData.BasePageId; \r\n this.$timeout(() => { checkOverflow(); });\r\n }\r\n\r\n var selectMeasuringTask = () => {\r\n if (re.RouteParameterStack[0].Placeholder != \"MeasuringTask\") return;\r\n var t = scope.solutionData.MeasuringTasks.filter((mt, i, a) : boolean => {\r\n return mt.Id == re.RouteParameterStack[0].Id;\r\n });\r\n if (t.length == 0) return;\r\n var g = scope.solutionData.MeasuringTaskGroups.filter((group, i, a): boolean => {\r\n return group.Id == t[0].MeasuringTaskGroups[0];\r\n });\r\n if (g.length > 0) {\r\n scope.group = g[0];\r\n }\r\n \r\n scope.task = t[0];\r\n }\r\n\r\n scope.$watch('group', (newVal: MeasuringTaskGroup, oldval:MeasuringTaskGroup ) => {\r\n if (newVal != oldval) {\r\n updateGroup(newVal);\r\n }\r\n })\r\n\r\n this.solutionService.getSolutionData().then((data : SolutionData) => {\r\n scope.group = undefined;\r\n scope.solutionData = data;\r\n scope.previous = data.Previous;\r\n scope.next = data.Next; \r\n scope.current = data.Current; \r\n scope.solutionData.Schema = this.$sce.trustAsHtml(scope.solutionData.Schema)\r\n \r\n scope.group = data.MeasuringTaskGroups[0];\r\n selectMeasuringTask();\r\n updateGroup(scope.group);\r\n \r\n this.$timeout(() => { checkOverflow(); });\r\n });\r\n \r\n }\r\n\r\n scroll($event) {\r\n var TOPOFFSET : number = $(window).height() * 0.3; //postion element on first third\r\n\r\n var el : JQuery = $($event.currentTarget).closest('.overflow');\r\n\r\n var topPos = el.offset().top\r\n - parseInt(el.css(\"border-top-width\"))\r\n - parseInt(el.css(\"margin-top\")) \r\n - TOPOFFSET;\r\n\r\n //in view -> return\r\n if ($(window).scrollTop() < topPos &&\r\n topPos < ($(window).scrollTop() + $(window).height())) return;\r\n\r\n this.$timeout(() => {\r\n ($).smoothScroll(Math.round(topPos));\r\n }, 0);\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The product page\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule solution {\r\n 'use strict';\r\n\r\n var nav = angular.module('Solution', ['ngSanitize', 'angular-cache'])\r\n .filter('productByMeasuringTask', productByMeasuringTaskFilter)\r\n .controller('SolutionCtrl', SolutionCtrl)\r\n .service('solutionService', SolutionService);\r\n}","/// \r\n\r\nmodule user {\r\n //https://material.angularjs.org/latest/Theming/03_configuring_a_theme\r\n\r\n //export function materialTheme($mdThemingProvider : angular.material.MDThemingProvider) {\r\n materialTheme.$inject = ['$mdThemingProvider'];\r\n export function materialTheme($mdThemingProvider: ng.material.IThemingProvider) {\r\n\r\n\r\n $mdThemingProvider.definePalette('photometer', {\r\n '50': 'f2f7f9',\r\n '100': 'd9e2e9',\r\n '200': 'a7b9c9',\r\n '300': '00aec3',\r\n '400': '6889a3',\r\n '500': '5b7e97',\r\n '600': '597796',\r\n '700': '3a658a',\r\n '800': '285480',\r\n '900': '004a76',\r\n 'A100': 'b0bec5',\r\n 'A200': '78909c',\r\n 'A400': '546e7a',\r\n 'A700': '263238',\r\n 'contrastDefaultColor': 'light', // whether, by default, text (contrast)\r\n // on this palette should be dark or light\r\n\r\n 'contrastDarkColors': ['50', '100', //hues which contrast should be 'dark' by default\r\n '200', '300', '400', 'A100', 'A200'],\r\n 'contrastLightColors': undefined // could also specify this if default was 'dark'\r\n });\r\n\r\n\r\n var whiteMap = $mdThemingProvider.extendPalette('grey', {\r\n '50': '#FFFFFF',\r\n });\r\n\r\n $mdThemingProvider.definePalette('white', whiteMap);\r\n\r\n\r\n $mdThemingProvider\r\n .theme('default')\r\n .primaryPalette('photometer', {\r\n 'default': '900'\r\n })\r\n .accentPalette('photometer', {\r\n 'default': 'A700'\r\n }) \r\n .backgroundPalette('white');\r\n }\r\n\r\n}","/// \r\n\r\ndeclare var moment: any;\r\n\r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class DateLocaleProvider {\r\n \r\n public static $inject = [\r\n '$mdDateLocaleProvider', \r\n '$localeProvider',\r\n ];\r\n\r\n constructor(\r\n $mdDateLocaleProvider: ng.material.IDateLocaleProvider\r\n , $localeProvider : any\r\n ) { \r\n\r\n https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection#configuring-providers\r\n // Only providers for services can be injected in config blocks\r\n var locale = $localeProvider.$get();\r\n\r\n $mdDateLocaleProvider.months = locale.DATETIME_FORMATS.MONTH;\r\n $mdDateLocaleProvider.shortMonths = locale.DATETIME_FORMATS.SHORTMONTH;\r\n $mdDateLocaleProvider.days = locale.DATETIME_FORMATS.DAY;\r\n $mdDateLocaleProvider.shortDays = locale.DATETIME_FORMATS.SHORTDAY;\r\n\r\n // Can change week display to start on Monday.\r\n $mdDateLocaleProvider.firstDayOfWeek = 1;\r\n \r\n moment.locale(locale.id);\r\n moment.defaultFormat = locale.DATETIME_FORMATS.shortDate;\r\n moment.defaultFormatUtc = locale.DATETIME_FORMATS.shortDate;\r\n\r\n // Example uses moment.js to parse and format dates.\r\n $mdDateLocaleProvider.parseDate = function(dateString) {\r\n var m = moment(dateString, 'L', true); \r\n return m.isValid() ? m.toDate() : new Date(NaN);\r\n };\r\n\r\n $mdDateLocaleProvider.formatDate = function(date) {\r\n var m = moment(date);\r\n return m.isValid() ? m.format('L') : '';\r\n };\r\n\r\n // Allow only a day and month to be specified.\r\n // This is required if using the 'M/D' format with moment.js.\r\n //$mdDateLocaleProvider.isDateComplete = function(dateString) {\r\n // dateString = dateString.trim();\r\n\r\n // // Look for two chunks of content (either numbers or text) separated by delimiters.\r\n // var re = /^(([a-zA-Z]{3,}|[0-9]{1,4})([ .,]+|[/-]))([a-zA-Z]{3,}|[0-9]{1,4})/;\r\n // return re.test(dateString);\r\n //};\r\n\r\n $mdDateLocaleProvider.monthHeaderFormatter = function(date) {\r\n return $mdDateLocaleProvider.shortMonths[date.getMonth()] + ' ' + date.getFullYear();\r\n };\r\n\r\n // In addition to date display, date components also need localized messages\r\n // for aria-labels for screen-reader users.\r\n\r\n $mdDateLocaleProvider.weekNumberFormatter = function(weekNumber) {\r\n return 'Woche ' + weekNumber;\r\n };\r\n\r\n $mdDateLocaleProvider.msgCalendar = 'Kalender';\r\n $mdDateLocaleProvider.msgOpenCalendar = 'Kalender öffnen';\r\n\r\n // You can also set when your calendar begins and ends.\r\n //$mdDateLocaleProvider.firstRenderableDate = new Date(1776, 6, 4);\r\n //$mdDateLocaleProvider.lastRenderableDate = new Date(2012, 11, 21);\r\n }\r\n\r\n \r\n }\r\n \r\n}","/// \r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class RegisterData {\r\n constructor(\r\n public Email: string,\r\n public Password: string,\r\n public PasswordRepeat: string,\r\n public Firstname: string,\r\n public Lastname: string,\r\n public Company: string,\r\n public Country: partner.Country,\r\n public Language: string,\r\n public Access: number,\r\n public Newsletter: boolean,\r\n public Privacy: boolean,\r\n public VerteilerId: string\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class LoginData {\r\n constructor(\r\n public email: string,\r\n public password: boolean,\r\n public persist: boolean,\r\n public showLogin: boolean\r\n ) { }\r\n }\r\n}","/// \r\n\r\n\r\nmodule user {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class UserService {\r\n static $inject = [\r\n '$http',\r\n 'CacheFactory',\r\n '$q',\r\n '$rootScope',\r\n ];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n private CacheFactory: CacheFactory.ICacheFactory,\r\n private $q: ng.IQService,\r\n private $rootScope: ng.IRootScopeService\r\n ) { }\r\n\r\n public login(data: LoginData, returnUrl: string): ng.IHttpPromise<{ Success: boolean, ReturnUrl: string }> {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/Login/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n username: data.email,\r\n persist: !!data.persist,\r\n returnUrl: returnUrl\r\n }\r\n , data: '\\'' + data.password + '\\''\r\n }).then((response: { data: any }): any => { //success\r\n this.CacheFactory.destroyAll();\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.login' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n public intranetLogin(returnUrl: string): ng.IHttpPromise<{ Success: boolean, ReturnUrl: string }> {\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/IntranetLogin/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n returnUrl: returnUrl\r\n }\r\n }).then((response: { data: any }): any => { //success \r\n this.CacheFactory.destroyAll();\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.intranetLogin' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n public resetPassword(username: string): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/ResetPassword/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n username: username\r\n }\r\n }).then((response: { data: boolean }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.resetPassword' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n public changePassword(pwdOld: string, pwdNew: string): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/ChangePassword/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n passwordOld: pwdOld,\r\n passwordNew: pwdNew,\r\n }\r\n });\r\n }\r\n\r\n\r\n public logout(): ng.IHttpPromise {\r\n\r\n this.CacheFactory.destroyAll();\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/Logout/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response: { data: void }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.logout' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n public register(data: RegisterData): ng.IHttpPromise {\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/Register/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , data: data\r\n }).then(\r\n (response: { data: FormSrvErrorCollection }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.register' \" + response.status;\r\n });\r\n }\r\n\r\n\r\n\r\n public isValidUsername(username: string): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/IsValidUsername/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"username\": username,\r\n }\r\n }).then((response: { data: FormSrvErrorCollection }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.isValidUsername' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n public checkNsEMail(email: string, verteilerid: string): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/CheckNsEMail/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"email\": email,\r\n \"verteilerid\": verteilerid\r\n }\r\n }).then((response: { data: number }): any => { //success \r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.checkNsEMail' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n public upsertNewsletterProfile(data: NewsletterProfileData): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/UpsertNewsletterProfile/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , data: data\r\n }).then((response: { data: NewsletterProfileData }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.upsertNewsletterProfile' \" + response.status;\r\n });\r\n\r\n }\r\n\r\n public isLoggedIn() {\r\n return pglob.RouteData.User != null;\r\n }\r\n\r\n\r\n\r\n public getJwtToken(): ng.IPromise {\r\n\r\n\r\n var deferred = this.$q.defer();\r\n\r\n if (this.$rootScope['jwt'] && !this.isTokenExpired(this.$rootScope['jwt'])) {\r\n deferred.resolve(this.$rootScope['jwt']);\r\n return deferred.promise;\r\n }\r\n\r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/User/GetJwtToken/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response: { data: string }): any => { //success \r\n this.$rootScope['jwt'] = response.data;\r\n deferred.resolve(response.data);\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'UserService.getJwtToken' \" + response.status;\r\n });\r\n\r\n return deferred.promise;\r\n\r\n }\r\n\r\n public getBearer(token: string): object {\r\n let header = {};\r\n if (token != null) { //not anonymous\r\n header = { 'Authorization': 'Bearer ' + token };\r\n }\r\n return header;\r\n }\r\n\r\n private isTokenExpired(token: string): boolean {\r\n const expiration = this.getJWTExpireDate(token);\r\n if (!expiration) return true; //if expiration not readable => expired\r\n return (new Date()) >= expiration;\r\n }\r\n\r\n private getJWTExpireDate(jwtToken: string): Date {\r\n if (jwtToken) {\r\n try {\r\n const [, payload] = jwtToken.split('.');\r\n const { exp: expires } = JSON.parse(window.atob(payload));\r\n if (typeof expires === 'number') {\r\n return new Date(expires * 1000);\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","\r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class MobileLoginCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$mdDialog',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IMobileLoginCtrlScope,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.success = false;\r\n $scope.setProgress = angular.bind(this, this.setProgress); //copy function to scope for directive //@TODO refactoring directive that it don't needs this coupling.\r\n\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n setProgress(bool: boolean) {\r\n this.$scope.requestOnGoing = bool;\r\n }\r\n\r\n cancelDialog() {\r\n this.$mdDialog.cancel(); \r\n };\r\n\r\n }\r\n};\r\n","\r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class ForgotPasswordCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n 'userService',\r\n '$timeout',\r\n '$mdDialog',\r\n 'debounce',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IForgotPasswordController,\r\n private userService: user.UserService,\r\n private $timeout: ng.ITimeoutService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private debounce: navigation.IDebounceService\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.error = false;\r\n $scope.success = false;\r\n\r\n }\r\n\r\n resetPassword() {\r\n //sende reset passwort anfrage\r\n //blende Meldung ein. Email-Adresse muss integriert sein dass der nutzer evt. fehler Sieht. \r\n var addr = this.$scope.loginform.email.$modelValue;\r\n \r\n if (this.$scope.loginform.email.$invalid) return;\r\n this.userService.resetPassword(this.$scope.login.email).then((response) => { \r\n this.$scope.success = true;\r\n }).catch((e)=> {\r\n this.$scope.error = true;\r\n });\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n cancelDialog() {\r\n this.$mdDialog.cancel();\r\n };\r\n\r\n }\r\n};\r\n","\r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class ChangePasswordCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n 'userService',\r\n '$timeout',\r\n '$mdDialog',\r\n 'debounce',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IChangePasswordController,\r\n private userService: user.UserService,\r\n private $timeout: ng.ITimeoutService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private debounce: navigation.IDebounceService\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.success = false;\r\n\r\n }\r\n\r\n changePassword() {\r\n \r\n this.$scope.changePasswordForm.passwordOld.$setValidity('wrong', true); \r\n if (this.$scope.changePasswordForm.$invalid) return;\r\n\r\n this.userService.changePassword(this.$scope.passwordOld, this.$scope.passwordNew).then((response) => { \r\n this.$scope.success = true;\r\n this.$scope.changePasswordForm.passwordOld.$setValidity('wrong', true); \r\n }).catch((response) => {\r\n this.$scope.success = false; \r\n this.$scope.changePasswordForm.passwordOld.$setValidity('wrong', false); \r\n });\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n cancelDialog() {\r\n this.$mdDialog.cancel();\r\n };\r\n\r\n }\r\n};\r\n","\r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class SubscribeNewsletterCtrl implements ng.IController {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n 'userService',\r\n '$timeout',\r\n '$q',\r\n '$mdDialog',\r\n 'debounce',\r\n 'partnerService',\r\n '$analytics',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: ISubscribeNewsletterController,\r\n private userService: user.UserService,\r\n private $timeout: ng.ITimeoutService,\r\n private $q: ng.IQService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private debounce: navigation.IDebounceService,\r\n private partnerService : partner.PartnerService,\r\n private $analytics: angulartics.IAnalyticsService\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.success = false; \r\n $scope.request = {};\r\n $scope.step = -1;\r\n\r\n \r\n $scope.request.Language = {\r\n \"D\": \"1\",\r\n \"E\": \"2\"\r\n }[pglob.RouteData.CurrentLanguage.hl];\r\n\r\n }\r\n\r\n locals : { \r\n parentScope: ISubscribeNewsletterController,\r\n verteilerid: string \r\n };\r\n \r\n public $onInit(): void {\r\n //check if email already in system\r\n if (this.locals && this.locals.parentScope) {\r\n this.$scope.requestOnGoing = true;\r\n this.userService.checkNsEMail(this.locals.parentScope.subscriberEmail, this.locals.verteilerid)\r\n .then((response) => { \r\n this.$scope.request.Email = this.locals.parentScope.subscriberEmail;\r\n this.$scope.request.VerteilerId = this.locals.verteilerid;\r\n if (response.data) {\r\n this.$scope.step = response.data; \r\n } else {\r\n this.$scope.step = 0; \r\n } \r\n })\r\n .catch((response) => {\r\n this.$scope.error = true;\r\n })\r\n .finally(() => {\r\n this.$scope.requestOnGoing = false;\r\n });\r\n } \r\n }\r\n\r\n\r\n\r\n\r\n private saveProfile(nextStep : number) {\r\n this.$scope.requestOnGoing = true;\r\n this.userService.upsertNewsletterProfile(this.$scope.request)\r\n .then((response) => { \r\n this.$scope.request = response.data; \r\n this.$scope.step = nextStep;\r\n })\r\n .catch((response) => {\r\n this.$scope.error = true;\r\n })\r\n .finally(() => {\r\n this.$scope.requestOnGoing = false;\r\n });\r\n }\r\n \r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n cancelDialog() {\r\n this.$mdDialog.cancel();\r\n };\r\n\r\n OpenSubscribeEMailPopUp(ev : MouseEvent, email: string, verteilerid: string) {\r\n if (this.$scope.subscribeEMailForm.$invalid) return; \r\n\r\n this.$mdDialog.show({\r\n controller: 'SubscribeNewsletterCtrl',\r\n templateUrl: 'user/SubscribeNewsletterCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n parentScope: this.$scope,\r\n verteilerid: verteilerid\r\n },\r\n })\r\n .then(() => {\r\n //console.log('Modal closed at: ' + new Date());\r\n this.$scope.subscriberEmail = null;\r\n this.$scope.subscribeEMailForm.$setUntouched();\r\n }, () => {\r\n //console.log('Modal canceled at: ' + new Date());\r\n this.$scope.subscriberEmail = null;\r\n this.$scope.subscribeEMailForm.$setUntouched();\r\n });\r\n }\r\n\r\n loadCountries() : ng.IPromise {\r\n return this.$timeout(() : ng.IPromise => {\r\n if (this.$scope.countries) return this.$q.when('already loaded');\r\n \r\n this.$scope.requestOnGoing = true;\r\n return this.partnerService.getPartnerData().then((data: partner.VendorResult) => {\r\n this.$scope.countries = data.Countries;\r\n var currentCountry = data.Countries.filter(function(val:partner.Country, index: number) :boolean {\r\n return val.Code == data.LocationCountryCode;\r\n });\r\n this.$scope.request.Country = currentCountry[0]; //country of the visitor or null if not found\r\n this.$scope.requestOnGoing = false;\r\n });\r\n }, 200);\r\n }\r\n\r\n \r\n save(step : number) { \r\n this.$scope.subscribeNewsletterForm.$setDirty();\r\n if (this.$scope.subscribeNewsletterForm.$invalid) return; \r\n this.saveProfile(step); \r\n this.$analytics.eventTrack('NewsletterSubscribeUpdate', { category: 'User' });\r\n };\r\n\r\n }\r\n};\r\n","\r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class LoginPageCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope','pageMetaService'\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: ILoginPageCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService,\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.success = false;\r\n $scope.setProgress = angular.bind(this, this.setProgress); //copy function to scope for directive //@TODO refactoring directive that it don't needs this coupling. \r\n $scope.meta = pageMetaService.getPageMeta;\r\n }\r\n\r\n setProgress(bool: boolean) {\r\n this.$scope.requestOnGoing = bool;\r\n }\r\n\r\n }\r\n};\r\n","//https://github.com/TheSharpieOne/angular-validation-match\r\n//https://github.com/TheSharpieOne/angular-validation-match/blob/master/src/angular-validation-match.js\r\n\r\n\r\nmodule user {\r\n \r\n matchValidator.$inject = ['$parse'];\r\n export function matchValidator($parse: ng.IParseService): ng.IDirective {\r\n return {\r\n require: '?ngModel',\r\n restrict: 'A',\r\n link: function(scope : ng.IScope, elem: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl : ng.INgModelController) {\r\n if(!ctrl || !attrs['match']) {\r\n return;\r\n }\r\n\r\n var matchGetter = $parse(attrs['match']);\r\n var caselessGetter = $parse(attrs['matchCaseless']);\r\n var noMatchGetter = $parse(attrs['notMatch']);\r\n var matchIgnoreEmptyGetter = $parse(attrs['matchIgnoreEmpty']);\r\n\r\n scope.$watch(getMatchValue, function(){\r\n (ctrl).$$parseAndValidate();\r\n });\r\n\r\n ctrl.$validators['match'] = function(modelValue, viewValue){\r\n var matcher = modelValue || viewValue;\r\n var match = getMatchValue();\r\n var notMatch = noMatchGetter(scope);\r\n var value;\r\n\r\n if (matchIgnoreEmptyGetter(scope) && !viewValue) {\r\n return true;\r\n }\r\n\r\n if(caselessGetter(scope)){\r\n value = matcher.toLowerCase() === match.toLowerCase();\r\n }else{\r\n value = matcher === match;\r\n }\r\n /*jslint bitwise: true */\r\n value ^= notMatch;\r\n /*jslint bitwise: false */\r\n return !!value;\r\n };\r\n\r\n function getMatchValue(){\r\n var match = matchGetter(scope);\r\n if(angular.isObject(match) && match.hasOwnProperty('$viewValue')){\r\n match = match.$viewValue;\r\n }\r\n return match;\r\n }\r\n }\r\n };\r\n }\r\n}","/// \r\n\r\nmodule user {\r\n\r\n ifLoggedIn.$inject = ['userService'];\r\n export function ifLoggedIn(userService: user.UserService, $window): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n priority: 100,\r\n scope: false,\r\n link: function (scope: ILoginFormScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n var destroy = !userService.isLoggedIn();\r\n \r\n if (attr['ifLoggedIn'] === 'false') destroy = !destroy;\r\n\r\n if (destroy) {\r\n element.remove();\r\n element = null; \r\n }\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule user {\r\n \r\n RegisterFormDirective.$inject = ['userService', '$window', 'debounce', '$q', 'partnerService', '$timeout'];\r\n export function RegisterFormDirective(userService: user.UserService, $window : ng.IWindowService, debounce: navigation.IDebounceService, $q : ng.IQService, partnerService : partner.PartnerService, $timeout: ng.ITimeoutService): ng.IDirective {\r\n return {\r\n restrict: 'AE',\r\n scope: true,\r\n templateUrl: 'user/RegisterFormDirective',\r\n link: function (scope: IRegisterFormScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n scope.countries = null;\r\n scope.request = {};\r\n scope.setProgress(false);\r\n\r\n var errorToField = { \r\n \"srv-valid-email\": \"newEmail\",\r\n \"srv-username-not-taken\": \"newEmail\",\r\n \"srv-password-good\": \"newPassword\",\r\n \"srv-privacy\": \"privacy\",\r\n \"srv-success\": \"newEmail\",\r\n }\r\n\r\n \r\n //reset server errors on change.\r\n var fieldsToWatch = [];\r\n angular.forEach(errorToField, function(value, key) { fieldsToWatch.push('registerform.' + value + '.$touched') });\r\n scope.$watchGroup(fieldsToWatch, (touched : boolean[], oldValue : boolean[], scope: IRegisterFormScope) => {\r\n if (!scope.registerform.$submitted) return; // reset only if submitted.\r\n if (touched.every((value, i) => { return !value; })) return;//everthing untouched? -> no action.\r\n angular.forEach(errorToField, function(value, key) {\r\n scope.registerform[errorToField[key]].$setValidity(key, true); \r\n });\r\n })\r\n\r\n scope.$evalAsync(function() { $(element).find('input[name=newEmail]').focus(); } );\r\n\r\n scope.registerform.newEmail.$asyncValidators['username'] = (modelValue, viewValue) : ng.IPromise => {\r\n\r\n if (scope.registerform.newEmail.$isEmpty(modelValue)) {\r\n // consider empty model valid\r\n return $q.when();\r\n }\r\n\r\n var def = $q.defer();\r\n \r\n scope.setProgress(true);\r\n userService.isValidUsername(modelValue).then((response) => {\r\n var valid : boolean = true;\r\n scope.setProgress(false);\r\n angular.forEach(response.data, function(value, key) {\r\n scope.registerform.newEmail.$setValidity(key, value); \r\n if (!value) valid = false;\r\n });\r\n\r\n if (valid) { \r\n def.resolve();\r\n\r\n //kick off country loading, then it's ready when needed.\r\n $timeout(() => {\r\n scope.loadCountries()\r\n }, 100);\r\n\r\n } else {\r\n def.reject();\r\n }\r\n });\r\n return def.promise;\r\n };\r\n\r\n\r\n scope.loadCountries = function() : ng.IPromise {\r\n return $timeout(() : ng.IPromise => {\r\n if (scope.countries) return $q.when('already loaded');\r\n \r\n scope.setProgress(true);\r\n return partnerService.getPartnerData().then(function (data: partner.VendorResult) {\r\n scope.countries = data.Countries;\r\n var currentCountry = data.Countries.filter(function(val:partner.Country, index: number) :boolean {\r\n return val.Code == data.LocationCountryCode;\r\n });\r\n scope.request.Country = currentCountry[0]; //country of the visitor or null if not found\r\n scope.setProgress(false);\r\n });\r\n }, 200);\r\n };\r\n \r\n scope.setProgress(false);\r\n\r\n scope.requestAccountCreation = function() {\r\n if (scope.registerform.$invalid) return;\r\n\r\n scope.setProgress(true);\r\n userService.register(scope.request).then((response) => {\r\n var valid : boolean = true;\r\n\r\n //set errors to field according to `errorToField`\r\n angular.forEach(response.data, function(value, key) {\r\n if (errorToField[key]) {\r\n scope.registerform[errorToField[key]].$setValidity(key, value); \r\n if (!value) valid = false;\r\n }\r\n });\r\n\r\n scope.displayActivateMailMessage = valid;\r\n scope.setProgress(false);\r\n scope.registerform.$setUntouched();\r\n\r\n }, (validity: FormSrvErrorCollection) => { //error\r\n scope.registerform[errorToField['srv-success']].$setValidity('srv-success', false); \r\n scope.setProgress(false);\r\n scope.registerform.$setUntouched();\r\n });\r\n };\r\n }\r\n\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule user {\r\n\r\n export function LoginHeaderDirective(): ng.IDirective {\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n showLogin : '='\r\n },\r\n templateUrl: 'user/LoginHeaderDirective',\r\n link: function (scope: ILoginHeaderScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n scope.mode = 'login';\r\n scope.close = function() {\r\n scope.showLogin = false;\r\n }\r\n scope.setProgress = (progress : boolean) => {\r\n scope.requestOnGoing = progress;\r\n }\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule user {\r\n\r\n LoginFormDirective.$inject = ['userService', '$window', 'debounce', 'pageMetaService', '$mdDialog', '$timeout', '$location'];\r\n export function LoginFormDirective(\r\n userService: user.UserService,\r\n $window: ng.IWindowService,\r\n debounce: navigation.IDebounceService,\r\n pageMetaService: navigation.IPageMetaService,\r\n $mdDialog: ng.material.IDialogService,\r\n $timeout: ng.ITimeoutService,\r\n $location : ng.ILocationService\r\n ): ng.IDirective {\r\n return {\r\n restrict: 'AE',\r\n scope: true,\r\n templateUrl: 'user/LoginFormDirective',\r\n link: function (scope: ILoginFormScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n \r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n scope.$watch('$viewContentLoaded', function(){\r\n $timeout(function() {\r\n $(element).find('input[name=email]').select(); \r\n },0);\r\n });\r\n\r\n var redirect = (returnUrl) => {\r\n if (returnUrl) {\r\n $window.location.href = returnUrl;\r\n } else {\r\n $window.location.reload();\r\n }\r\n }\r\n\r\n if (!scope.setProgress) throw \"ParentController needs function setProgress.\"\r\n\r\n scope.setProgress(false);\r\n scope.doLogin = function() {\r\n \r\n var returnUrl = $location.search()['ReturnUrl'];\r\n\r\n scope.loginform.password.$setValidity('wrong', true); \r\n if (scope.loginform.$invalid) return;\r\n\r\n scope.setProgress(true);\r\n userService.login(scope.login, returnUrl).then((response : { data : { Success : boolean, ReturnUrl: string}}) => {\r\n if (response.data.Success) {\r\n scope.loginform.password.$setValidity('wrong', true); \r\n redirect(response.data.ReturnUrl);\r\n //scope.requestOnGoing = false;\r\n } else {\r\n scope.login.password = null;\r\n scope.loginform.password.$setValidity('wrong', false); \r\n $timeout(function() {\r\n $(element).find('input[name=password]').focus(); \r\n },0);\r\n scope.setProgress(false); \r\n }\r\n });\r\n };\r\n\r\n scope.openResetPasswordModal = function (ev: MouseEvent) {\r\n $mdDialog.show({\r\n controller: 'ForgotPasswordCtrl',\r\n templateUrl: 'user/ForgotPasswordDirective',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n parentScope: scope\r\n },\r\n })\r\n .then(function () {\r\n console.log('Modal closed at: ' + new Date());\r\n }, function () {\r\n console.log('Modal canceled at: ' + new Date());\r\n });\r\n };\r\n\r\n scope.intranetLogin = function(ev: MouseEvent) {\r\n var returnUrl = $location.search()['ReturnUrl'];\r\n userService.intranetLogin(returnUrl).then((response : { data : { Success : boolean, ReturnUrl: string} }) => { \r\n if(response.data.Success) {\r\n redirect(response.data.ReturnUrl); \r\n } else {\r\n alert(\"Intranet login fehlgeschlagen (success = false), bitte mit AGIT in Verbindung treten\");\r\n }\r\n }, () => {\r\n alert(\"Intranet login fehlgeschlagen (reject), bitte mit AGIT in Verbindung treten\");\r\n });\r\n };\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The main Menu.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule user {\r\n 'use strict';\r\n\r\n var nav = angular.module('user', ['ngAnimate', 'ngLocale', 'ngMaterial', 'ngMessages', 'partner', 'angular-cache'])\r\n .config(materialTheme)\r\n .config(DateLocaleProvider)\r\n .controller('ForgotPasswordCtrl', ForgotPasswordCtrl)\r\n .controller('ChangePasswordCtrl', ChangePasswordCtrl)\r\n .controller('MobileLoginCtrl', MobileLoginCtrl)\r\n .controller('LoginPageCtrl', LoginPageCtrl) \r\n .controller('SubscribeNewsletterCtrl', SubscribeNewsletterCtrl)\r\n .directive('ifLoggedIn', ifLoggedIn)\r\n .directive('loginHeader', LoginHeaderDirective)\r\n .directive('loginForm', LoginFormDirective)\r\n .directive('registerForm', RegisterFormDirective) \r\n .directive('match', matchValidator)\r\n .service('userService', UserService);\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export function EditorModalTemplate() : string {\r\n return `\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n

\r\n {{filter.FilterString2}} / \r\n {{filter.FilterString1}}\r\n  / {{rpm.DisplayName[currentLanguage.hlFull]}}\r\n  ({{filter.IsLanguageIndifferent ? \"ohne Sprache\" : currentLanguage.hlFull}})\r\n

\r\n \r\n \r\n \r\n \r\n \r\n \r\n Speichern\r\n {{ 'M-S' | keyboardShortcut }}\r\n \r\n \r\n \r\n \r\n Speichern & Schliessen\r\n \r\n \r\n \r\n \r\n \r\n {{content.ContentMeta.Status == 2 ? 'Veröffentlicht' : 'Veröffentlichen'}}\r\n \r\n \r\n \r\n \r\n {{content.ContentMeta.Status == 1 ? 'Entwurf' : content.ContentMeta.Status == 2 ? 'Veröffentlichung beenden' : 'In Entwurfsmodus setzen'}}\r\n \r\n \r\n \r\n \r\n {{content.ContentMeta.Status == 3 ? 'Archiviert' : 'Archivieren'}}\r\n \r\n \r\n \r\n \r\n {{content.ContentMeta.Status == 4 ? 'Gelöscht' : 'Löschen'}}\r\n \r\n \r\n \r\n \r\n \r\n Schliessen\r\n {{ 'ESC' | keyboardShortcut }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{hl.hlFull}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n Html\r\n Markdown\r\n\r\n \r\n\r\n \r\n \r\n Page-Title Editieren\r\n \r\n \r\n\r\n \r\n \r\n Meta-Description Editieren\r\n \r\n \r\n\r\n \r\n \r\n Beitragsliste aktualisieren\r\n \r\n \r\n\r\n \r\n \r\n Cache leeren\r\n {{ 'M-l' | keyboardShortcut }}\r\n \r\n \r\n \r\n \r\n Fehlenden Inhalt erstellen.\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{fs1.name}}\r\n \r\n \r\n \r\n {{filter.FilterString2}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{fs1.name}}\r\n \r\n \r\n \r\n {{filter.FilterString2}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n Quellcode\r\n Ressourcen\r\n \r\n\r\n \r\n \r\n \r\n Blog bearbeiten\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n MetaData bearbeiten\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n

Beiträge

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n
\r\n \r\n \r\n Alle Beiträge\r\n Entwürfe\r\n Publizierte Beiträge\r\n Archivierte Beiträge\r\n \r\n \r\n \r\n \r\n Blog\r\n Verkaufshilfen\r\n Intranet\r\n Veranstaltungen\r\n \r\n\r\n \r\n
\r\n \r\n \r\n Alle Tags\r\n {{tag._displayname}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Neuer Beitrag\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n Allgemein\r\n \r\n \r\n Sichtbarkeit\r\n \r\n \r\n SEO\r\n \r\n \r\n\r\n\r\n\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
Das Feld muss ausgefüllt werden
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n
\r\n

Drop image here

\r\n
\r\n Hochladen\r\n
\r\n \r\n Löschen\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n

Drop attachment here

\r\n
\r\n\r\n Hochladen\r\n
\r\n Download\r\n Löschen\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n {{p.text}}\r\n \r\n \r\n \r\n\r\n
\r\n

Datum

\r\n
\r\n \r\n Von\r\n \r\n \r\n
\r\n
\r\n \r\n Bis\r\n \r\n \r\n
\r\n

Beide Daten sind inkl. des gewählten Tages.

\r\n
\r\n\r\n\r\n \r\n
\r\n \r\n Sichtbar\r\n \r\n

Nicht sichtbare Beiträge werden nicht gelistet, können jedoch direkt über die URL aufgerufen werden.

\r\n \r\n Featured\r\n \r\n

Beiträge die gefeatured werden, erscheinen auf der Startseite, oben.

\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
Meta Title zu lang
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
Meta Description zu lang
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
Excerpt zu lang
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n Key\r\n
\r\n
\r\n Beschreibung\r\n
\r\n
\r\n {{hl.hlFull}}\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n Tastenkombinationen\r\n Formatierung\r\n\r\n \r\n Erfolgreich gespeichert.\r\n Cache erfolgreich geleert.\r\n Speichern…\r\n {{message}}\r\n\r\n \r\n\r\n
`;\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export enum ContentType {\r\n HTML = \"H\",\r\n MarkDown = \"M\" \r\n }\r\n\r\n export class Content {\r\n constructor(\r\n\r\n public Content: string,\r\n public ContentType: ContentType, \r\n public ContentMeta: ContentMeta,\r\n public ContentFilter: EditorFilter,\r\n public Excerpt: string,\r\n public ContentHtml?: string,\r\n public ExcerptHtml?: string\r\n ) { }\r\n }\r\n\r\n\r\n}","/// \r\n\r\n\r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n ///Andere Sicht auf Ressourcen, einfacher als Tabelle darstellbar.\r\n export interface IFilterTree {\r\n [key: number]: IFilterTreeBranchL1[];\r\n }\r\n \r\n export interface IFilterTreeBranchL1 {\r\n name : string\r\n templates : EditorFilter[];\r\n }\r\n\r\n\r\n\r\n}","/// \r\n\r\n\r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n ///Andere Sicht auf Ressourcen, einfacher als Tabelle darstellbar.\r\n export interface IRessourceTableData {\r\n [key: string]: IRessourceTableRow;\r\n }\r\n\r\n export interface IRessourceTableRow {\r\n Key : string;\r\n Scope : string;\r\n Desc: string; \r\n Text : IRessourceTableRowLanguage;\r\n }\r\n\r\n export interface IRessourceTableRowLanguage {\r\n [hl: string] : string;\r\n }\r\n\r\n\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export class Ressource {\r\n constructor(\r\n public Scope : string, \r\n public Key : string, \r\n public Desc: string,\r\n public LanguageCode : string,\r\n public Text : string\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export class EditorFilter {\r\n constructor(\r\n\r\n public rpv?: IRouteParameter[],\r\n public UseRouteParam?: boolean, \r\n public Replace?: boolean, \r\n\r\n //ContentFilter:\r\n public Category? : number, \r\n public Filter1?: number, \r\n public Filter2?: number, \r\n public Filter3?: number, \r\n public FilterString1? : string, \r\n public FilterString2? : string, \r\n public FilterString3?: string,\r\n public IsLanguageIndifferent? : boolean,\r\n public Description?: string,\r\n public ContentId? : number,\r\n public ContentFormat?: number\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n \r\n var escape = new RegExp('[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]', 'g');\r\n\r\n export interface IKeyboardShortcut extends ng.IFilterService {\r\n (name: 'keyboardShortcut'): (str: string) => string;\r\n }\r\n \r\n KeyboardShortcut.$inject = ['$window'];\r\n export function KeyboardShortcut($window : ng.IWindowService) {\r\n return function (str : string) : string {\r\n if (!str) return;\r\n var keys = str.split('-');\r\n var isOSX = /Mac OS X/.test($window.navigator.userAgent);\r\n\r\n var seperator = (!isOSX || keys.length > 2) ? '+' : '';\r\n\r\n var abbreviations = {\r\n M: isOSX ? '⌘' : 'Ctrl',\r\n A: isOSX ? 'Option' : 'Alt',\r\n S: 'Shift'\r\n };\r\n\r\n return keys.map(function(key, index) {\r\n var last = index == keys.length - 1;\r\n return last ? key : abbreviations[key];\r\n }).join(seperator);\r\n } \r\n \r\n }\r\n}\r\n\r\n\r\n","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export interface IStatusTopicFilter extends ng.IFilterService {\r\n (name: 'statusTopic'): (sts: number) => number;\r\n }\r\n\r\n StatusTopic.$inject = [];\r\n export function StatusTopic() {\r\n return function (topics, sts) {\r\n var array = [];\r\n if (sts === 0) return topics;\r\n angular.forEach(topics, function (topic) {\r\n if (topic.ContentMeta.Status == sts) {\r\n array.push(topic);\r\n }\r\n });\r\n return array;\r\n };\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export interface ICategoryTopicFilter extends ng.IFilterService {\r\n (name: 'categoryTopic'): (ctgr: string) => string;\r\n }\r\n\r\n CategoryTopic.$inject = [];\r\n export function CategoryTopic() {\r\n return function (topics, ctgr) {\r\n var array = [];\r\n if (ctgr === \"all\") return topics;\r\n angular.forEach(topics, function (topic) {\r\n if (topic.ContentFilter.FilterString2 == ctgr) {\r\n array.push(topic);\r\n }\r\n });\r\n return array;\r\n };\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export interface ITagTopicFilter extends ng.IFilterService {\r\n (name: 'tagTopic'): (tag: string) => string;\r\n }\r\n\r\n TagTopic.$inject = [];\r\n export function TagTopic() {\r\n return function (topics, tag) {\r\n var array = [];\r\n if (tag === \"all\") return topics;\r\n angular.forEach(topics, function (topic) {\r\n topic.ContentMeta.Tags.forEach(function (tg, index) {\r\n if (tg.Name == tag) {\r\n if (array.indexOf(topic) == -1) array.push(topic);\r\n }\r\n })\r\n });\r\n return array;\r\n };\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n /**\r\n * Services that persists and retrieves TODOs from localStorage.\r\n */\r\n export class EditorService implements IEditorService {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n '$http',\r\n '$q',\r\n 'Upload',\r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $http: ng.IHttpService,\r\n private $q: ng.IQService,\r\n private Upload: ng.angularFileUpload.IUploadService\r\n ) {}\r\n\r\n\r\n private data: EditorFilter;\r\n\r\n private getFilterParams(data: EditorFilter): any {\r\n var prm = {};\r\n prm[\"Category\"] = data.Category;\r\n\r\n if (data.IsLanguageIndifferent === true) { prm[\"IsLanguageIndifferent\"] = true; } \r\n\r\n if (typeof data.ContentId !== 'undefined') { prm[\"ContentId\"] = data.ContentId } \r\n\r\n if (typeof data.Filter1 !== 'undefined') { prm[\"Filter1\"] = data.Filter1; } \r\n if (typeof data.Filter2 !== 'undefined') { prm[\"Filter2\"] = data.Filter2; } \r\n if (typeof data.Filter3 !== 'undefined') { prm[\"Filter3\"] = data.Filter3; } \r\n\r\n if (data.FilterString1) { prm[\"FilterString1\"] = data.FilterString1; } //no encodeURIComponent because we use prm => otherwise double encoding\r\n if (data.FilterString2) { prm[\"FilterString2\"] = data.FilterString2; } \r\n if (data.FilterString3) { prm[\"FilterString3\"] = data.FilterString3; } \r\n \r\n return prm;\r\n }\r\n\r\n public edit(data : EditorFilter) :void {\r\n this.data = data;\r\n this.$rootScope.$emit('editor-edit-event', data);\r\n }\r\n\r\n public subscribeOnEdit(scope : ng.IScope, callback: any) : void {\r\n var handler = this.$rootScope.$on('editor-edit-event', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n public notify() {\r\n this.$rootScope.$emit('notifying-service-event');\r\n }\r\n\r\n public subscribeOnSaveContent(\r\n scope : ng.IScope\r\n , callback: (event: ng.IAngularEvent, filter : EditorFilter, data : string) => void\r\n ) {\r\n\r\n var handler = this.$rootScope.$on('editor-save-event', callback); \r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n\r\n \r\n public saveContent(filter: EditorFilter, content: Content, hl? : ILanguageInfo) : ng.IHttpPromise { \r\n \r\n var prm = this.getFilterParams(filter);\r\n \r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Content/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: prm\r\n , data: {\r\n ContentType: content.ContentType.charCodeAt(0), \r\n Content: content.Content,\r\n ContentMeta: content.ContentMeta,\r\n Excerpt: content.Excerpt\r\n }\r\n }).then((response) :ng.IHttpResponse => { //success\r\n this.StringFieldsToDate(response.data, hl); //we recieve that as string, have to convert it.\r\n this.$rootScope.$emit('editor-save-event', filter, response.data.ContentHtml);\r\n return response;\r\n });\r\n\r\n }\r\n\r\n public createContent(hl: ILanguageInfo, type : ContentType, filter : EditorFilter, tags?: ContentTag[]): ng.IHttpPromise {\r\n\r\n var prm = this.getFilterParams(filter);\r\n prm['ContentType'] = type.charCodeAt(0);\r\n prm['TagIds'] = [];\r\n\r\n if (tags) {\r\n tags.forEach((t, i, arr) => {\r\n prm['TagIds'].push(t.Id);\r\n });\r\n }\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Content/CreateContent\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: prm\r\n , data: {}\r\n }).then((response): ng.IHttpResponse => {\r\n this.StringFieldsToDate(response.data, hl); //we recieve that as string, have to convert it.\r\n return response;\r\n })\r\n\r\n }\r\n\r\n /**\r\n * Returns Content With Type. Attention: Metadata is not returned!\r\n * @param content\r\n * @param destformat \r\n */\r\n public convertContent(content: Content, destformat: ContentType): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/Convert\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n dstFormat: destformat.charCodeAt(0),\r\n } \r\n , data: {\r\n ContentType : content.ContentType.charCodeAt(0), \r\n Content: content.Content,\r\n }\r\n }).then((response) => {\r\n this.StringFieldsToDate(response.data, pglob.RouteData.CurrentLanguage); //we recieve that as string, have to convert it.\r\n return response;\r\n });\r\n\r\n\r\n }\r\n\r\n public changeStatus(contentId: number, destStatus: ContentMetaStatus, hl : ILanguageInfo): ng.IHttpPromise {\r\n return this.$http({ \r\n method: \"GET\"\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Content/Status\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n dstStatus: destStatus, \r\n id : contentId\r\n }\r\n }).then((response) => {\r\n this.StringFieldsToDate(response.data, hl); //we recieve that as string, have to convert it.\r\n return response;\r\n })\r\n }\r\n\r\n \r\n\r\n public loadContent(data: EditorFilter, hl : ILanguageInfo, desiredTypeIfNew : ContentType) : ng.IHttpPromise { \r\n\r\n var prm = this.getFilterParams(data);\r\n prm.desiredContentTypeIfNew = desiredTypeIfNew ? desiredTypeIfNew.charCodeAt(0) : null;\r\n \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Content/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: prm\r\n }).then((response) => {\r\n if (response && response.data) {\r\n this.StringFieldsToDate(response.data, hl); //we recieve that as string, have to convert it.\r\n }\r\n return response;\r\n });\r\n \r\n } \r\n\r\n\r\n public loadContentMany(data: EditorFilter, hl?: ILanguageInfo): ng.IHttpPromise {\r\n var prm = this.getFilterParams(data); \r\n \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Content/GetExtended\"\r\n , headers: { 'Content-Type': 'application/json' } \r\n , params: prm\r\n }).then((response) => {\r\n response.data.forEach((v) => {\r\n this.StringFieldsToDate(v, hl);\r\n });\r\n return response; \r\n })\r\n\r\n }\r\n\r\n public loadRessources(data: EditorFilter) : ng.IHttpPromise {\r\n var prm = this.getFilterParams(data); \r\n \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/Ressouces\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: prm\r\n });\r\n\r\n } \r\n\r\n\r\n public loadTags(hl : ILanguageInfo) : ng.IHttpPromise { \r\n \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/Tags\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n }).then((response) => {\r\n if (response && response.data) {\r\n response.data.forEach((t, i, a) => {\r\n t._displayname = t.Name;\r\n if (t.Names && t.Names[hl.hlFull]) {\r\n t._displayname = t.Names[hl.hlFull];\r\n }\r\n t._lowerdisplayname = t._displayname.toLowerCase();\r\n })\r\n }\r\n return response;\r\n });\r\n\r\n } \r\n\r\n \r\n public saveRessources(filter: EditorFilter, data: Ressource[]) : ng.IHttpPromise {\r\n var prm = this.getFilterParams(filter); \r\n \r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/Ressouces\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: prm\r\n , data: data\r\n });\r\n\r\n } \r\n \r\n \r\n public clearCache() : ng.IHttpPromise { \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/ClearCache\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n });\r\n }\r\n \r\n \r\n public loadFilter(categoryId : number[]) : ng.IHttpPromise { \r\n var query = \"\";\r\n categoryId.forEach((v : number) => { query += \"categoryId=\" + v + \"&\" });\r\n \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/ContentFilter?\" + query\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n });\r\n } \r\n \r\n public createMissingContent() : ng.IHttpPromise { \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Content/CreateMissingContent\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n });\r\n }\r\n\r\n public removeContentFile(id: number, type: ContentAttachementType, hl?: ILanguageInfo): ng.IHttpPromise {\r\n return this.$http({\r\n method: 'POST'\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Upload/RemoveFile\"\r\n , params: { \r\n id : id,\r\n contenttype : type,\r\n }\r\n });\r\n }\r\n\r\n public uploadFile(file : any, type : ContentAttachementType, contentId : number, ext : string, hl?: ILanguageInfo ) : ng.angularFileUpload.IUploadPromise {\r\n var extension = file.name.substring(file.name.lastIndexOf(\".\") + 1);\r\n return this.Upload.upload({\r\n method: 'POST'\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Upload/UploadFile\"\r\n , data: { \r\n file: [file] \r\n }\r\n , params: { \r\n extension : extension,\r\n id : contentId,\r\n contenttype : type,\r\n }\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Changes Date Fields that we receive as string to datetime\r\n * @param response\r\n */\r\n private StringFieldsToDate(c : Content, hl : ILanguageInfo) {\r\n c.ContentType = String.fromCharCode(c.ContentType);\r\n if (!c.ContentMeta) return;\r\n\r\n if (c.ContentMeta.CreatedAt) c.ContentMeta.CreatedAt = new Date(c.ContentMeta.CreatedAt); //we recieve that as string, have to convert it.\r\n if (c.ContentMeta.ModifiedAt) c.ContentMeta.ModifiedAt = new Date(c.ContentMeta.ModifiedAt); //we recieve that as string, have to convert it.\r\n if (c.ContentMeta.PublishedAt) c.ContentMeta.PublishedAt = new Date(c.ContentMeta.PublishedAt);\r\n if (c.ContentMeta.ValidFrom) c.ContentMeta.ValidFrom = new Date(c.ContentMeta.ValidFrom);\r\n if (c.ContentMeta.ValidTo) c.ContentMeta.ValidTo = new Date(c.ContentMeta.ValidTo);\r\n\r\n if (c.ContentMeta.ValidFrom.getFullYear() < 1800) c.ContentMeta.ValidFrom = null;\r\n if (c.ContentMeta.ValidTo.getFullYear() > 9000) c.ContentMeta.ValidTo = null;\r\n\r\n\r\n\r\n\r\n if (c.ContentMeta.Tags) {\r\n c.ContentMeta.Tags.forEach((t, i, a) => {\r\n t._displayname = t.Name;\r\n if (t.Names && t.Names[hl.hlFull]) {\r\n t._displayname = t.Names[hl.hlFull];\r\n }\r\n t._lowerdisplayname = t._displayname.toLowerCase();\r\n });\r\n }\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n EditorDirective.$inject = ['editorService', '$mdDialog', '$templateCache', '$compile'];\r\n export function EditorDirective(\r\n editorService : IEditorService\r\n , $mdDialog : ng.material.IDialogService\r\n , $templateCache : ng.ITemplateCacheService\r\n , $compile : ng.ICompileService): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n 'editorConfig' : '@'\r\n , 'editorConfigVar' : '='\r\n },\r\n link: function (scope: IEditorDirectiveScope, element: JQuery, attr: IEditorDirectiveAttributes) {\r\n if (scope.editorConfigVar) {\r\n scope.config = scope.editorConfigVar; \r\n } else {\r\n if (scope.editorConfig) {\r\n scope.config = JSON.parse(scope.editorConfig);\r\n } else {\r\n scope.config = new EditorFilter(pglob.RouteData.RouteEntry.RouteParameterStack, false, true, null, null, null, null, null, null, null, false); \r\n }\r\n }\r\n\r\n attr.$observe('editorConfig', function(value : string) { \r\n if (scope.editorConfig) {\r\n scope.config = JSON.parse(scope.editorConfig);\r\n } else {\r\n scope.config = new EditorFilter(pglob.RouteData.RouteEntry.RouteParameterStack, false, true, null, null, null, null, null, null, null, false); \r\n }\r\n })\r\n\r\n var setDisplay = (button : JQuery, display : string) => {\r\n return function(event:JQueryEventObject) {\r\n button.css(\"display\", display);\r\n };\r\n };\r\n\r\n scope.openEditor = (event : MouseEvent) => {\r\n if (event) event.preventDefault();\r\n \r\n var rpv: IRouteParameter[] = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n\r\n if (scope.config.UseRouteParam) {\r\n\r\n if (rpv.length == 1) {\r\n scope.config.Filter1 = rpv[0].Id;\r\n }\r\n\r\n if (rpv.length == 2) {\r\n scope.config.Filter1 = rpv[1].Id;\r\n scope.config.Filter2 = rpv[0].Id;\r\n }\r\n\r\n if (rpv.length == 3) {\r\n scope.config.Filter1 = rpv[2].Id;\r\n scope.config.Filter2 = rpv[1].Id;\r\n scope.config.Filter3 = rpv[0].Id;\r\n }\r\n }\r\n\r\n scope.config.FilterString1 = scope.config.FilterString1 || pglob.RouteData.PageId;\r\n scope.config.rpv = pglob.RouteData.RouteEntry.RouteParameterStack;\r\n \r\n var editorTemplate = $templateCache.get('editormodaltemplate.html') || editor.EditorModalTemplate();\r\n\r\n $mdDialog.show({\r\n controller: 'editorCtrl',\r\n template: editorTemplate,\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: null,\r\n clickOutsideToClose:false,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals : {\r\n filter : scope.config\r\n },\r\n })\r\n .then((message : {filter : EditorFilter, data : string}) => { //close\r\n console.log('Modal closed at: ' + new Date());\r\n if (scope.config.Replace) {\r\n element.html(message.data); \r\n wireEditButton();\r\n }\r\n }, (message : {filter : EditorFilter, data : string}) => { //cancel\r\n console.log('Modal canceled at: ' + new Date());\r\n });\r\n\r\n };\r\n\r\n var wireEditButton = () => {\r\n var editButton = $compile( 'Bearbeiten' )( scope );\r\n element.append(editButton);\r\n element.css('position', 'relative');\r\n element.bind('mouseenter', setDisplay(editButton, \"inherit\"));\r\n element.bind('mouseleave', setDisplay(editButton, \"none\"));\r\n };\r\n\r\n wireEditButton();\r\n\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n ContentListItemDirective.$inject = [\r\n ];\r\n\r\n export function ContentListItemDirective(\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n contentData: '=',\r\n selectedItem: '='\r\n },\r\n templateUrl: 'editor/ContentListItemDirective',\r\n link: function (scope: IContentListItemScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.getStatus = function (s: ContentMetaStatus) {\r\n var statusString = (s === 1) ? \"Entwurf\" : //@TODO vereinfachen (z.B. Fehleranfällig für Modifikationen…)\r\n s === 2 ? \"Veröffentlicht\" :\r\n s === 3 ? \"Archiviert\": \"\"\r\n return statusString;\r\n }\r\n\r\n }\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n \r\n declare var ace: any; // Magic\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class EditorCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n 'editorService', \r\n 'CacheFactory',\r\n '$mdDialog',\r\n '$q',\r\n 'pageMetaService',\r\n 'debounce',\r\n '$mdSidenav',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IEditorControllerScope,\r\n private $timeout: ng.ITimeoutService,\r\n private editorService: IEditorService,\r\n private CacheFactory: CacheFactory.ICacheFactory, \r\n private $mdDialog: ng.material.IDialogService,\r\n private $q : ng.IQService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private debounce: navigation.IDebounceService,\r\n private $mdSidenav: ng.material.ISidenavService\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n \r\n $scope.supportedLanguages = pglob.RouteData.SupportedLanguages;\r\n $scope.allTags = null;\r\n $scope.uploadButtonsBound = false;\r\n $scope.page='prop';\r\n \r\n $scope.isValidFromDateSet = false;\r\n $scope.validFromDate = null;\r\n $scope.isValidToDateSet = false;\r\n $scope.validToDate = null;\r\n\r\n $scope.show = false;\r\n $scope.showButton = false;\r\n $scope.editorInstance = null;\r\n $scope.editorSession = null;\r\n $scope.routeParameterStack = pglob.RouteData.RouteEntry.RouteParameterStack; \r\n $scope.settings = {\r\n currentLanguage: pglob.RouteData.CurrentLanguage.hl, \r\n view: \"Source\",\r\n currentContentType: function (ct: ContentType) {\r\n if (angular.isDefined(ct)) {\r\n editorService.convertContent($scope.content, ct).then((response) => {\r\n $scope.content.Content = response.data.Content;\r\n $scope.content.ContentType = response.data.ContentType;\r\n if (response.data.ContentType == ContentType.MarkDown) $scope.editorSession.setMode(\"ace/mode/markdown\"); \r\n if (response.data.ContentType == ContentType.HTML) $scope.editorSession.setMode(\"ace/mode/html\");\r\n })\r\n } else {\r\n if ($scope.content) return $scope.content.ContentType;\r\n }\r\n },\r\n };\r\n\r\n $scope.permissionValues = [ \r\n { id: 0, text: \"Jeder\", value: null },\r\n { id: 1, text: \"Anonym (Dokustufe 7)\", value: \"7afbda36-d428-44c8-95e0-1cdc2eb34e7e\" },\r\n { id: 2, text: \"Endkunde (Dokustufe 6)\", value: \"505ba489-8468-408c-8c08-22d335567898\" },\r\n { id: 3, text: \"OEM (Dokustufe 5)\", value: \"975e83a1-ec52-466d-abf9-b830a3bd3694\" },\r\n { id: 4, text: \"Händler (Dokustufe 4)\", value: \"9b09bb8f-5083-4284-a87f-7c8b7db91644\" },\r\n { id: 5, text: \"Service (Dokustufe 3)\", value: \"47ee351f-53f4-4f01-9c0b-0f990fac756f\" },\r\n { id: 6, text: \"Vertretungen (Dokustufe 2)\", value: \"be63256c-eaeb-4a6e-bba1-08dc63e17f52\" },\r\n { id: 7, text: \"Verkauf (Dokustufe 1)\", value: \"d460d559-6c65-4c3d-834b-a14c7f33ef19\" },\r\n { id: 8, text: \"Produktion (Dokustufe 0)\", value: \"be0e28eb-1a45-4546-977b-5498a0f7b28f\" }\r\n ];\r\n\r\n $scope.liveViewContent = \"\";\r\n\r\n if ($scope.content) {\r\n $scope.urlPlacehldr = this.getUrlKey($scope.content.ContentMeta.Title);\r\n }\r\n\r\n $scope.updateLiveView = function (content: Content, type: ContentType) {\r\n if (content && type && $scope.content.ContentType == ContentType.MarkDown) {\r\n editorService.convertContent(content, type).then((response) => {\r\n $scope.liveViewContent = response.data.Content;\r\n })\r\n } \r\n };\r\n\r\n $scope.changeStatus = function (status: ContentMetaStatus) {\r\n editorService.changeStatus($scope.content.ContentMeta.Id, status, $scope.currentLanguage).then((response) => {\r\n $scope.content.ContentMeta.Status = response.data.ContentMeta.Status;\r\n $scope.content.ContentMeta.ModifiedAt = response.data.ContentMeta.ModifiedAt;\r\n $scope.content.ContentMeta.ModifiedBy = response.data.ContentMeta.ModifiedBy;\r\n $scope.content.ContentMeta.PublishedAt = response.data.ContentMeta.PublishedAt;\r\n $scope.content.ContentMeta.PublishedBy = response.data.ContentMeta.PublishedBy; \r\n $scope.content.ContentMeta.RowVersion = response.data.ContentMeta.RowVersion; \r\n });\r\n }\r\n\r\n $scope.isOpenRight = function () {\r\n return $mdSidenav('right').isOpen();\r\n }\r\n\r\n $scope.$watch('content.Content', (newVal, oldVal) => {\r\n $scope.updateLiveView($scope.content, ContentType.HTML);\r\n })\r\n\r\n $scope.$watch('content.ContentMeta.Title', (newVal, oldVal) => {\r\n if ($scope.content && newVal) {\r\n if ($scope.content.ContentMeta && newVal != oldVal) {\r\n $scope.urlPlacehldr = this.getUrlKey(newVal.toString());\r\n }\r\n }\r\n }, false)\r\n\r\n var upload = (file : any, type : ContentAttachementType) => {\r\n var extension = file.name.substring(file.name.lastIndexOf(\".\") + 1);\r\n this.editorService.uploadFile(file, type, this.$scope.content.ContentMeta.Id, extension, this.$scope.currentLanguage)\r\n .then((response) => { \r\n this.$scope.content.ContentMeta.RowVersion = response.data.ContentMeta.RowVersion; \r\n this.$scope.content.ContentMeta.Image = response.data.ContentMeta.Image;\r\n this.$scope.content.ContentMeta.Attachment = response.data.ContentMeta.Attachment; \r\n });\r\n }\r\n\r\n $scope.$watch('picFile', (newVal, oldVal) => {\r\n if (newVal) {\r\n upload(newVal, ContentAttachementType.ContentImage);\r\n }\r\n })\r\n\r\n $scope.$watch('attFile', (newVal, oldVal) => {\r\n if (newVal) {\r\n upload(newVal, ContentAttachementType.ContentAttachment);\r\n }\r\n })\r\n \r\n this.setRequestOnGoing = debounce(this.setRequestOnGoing, 500, false);\r\n\r\n $scope.aceLoaded = (_editor : AceAjax.Editor) => {\r\n // Editor part\r\n $scope.editorInstance = _editor;\r\n $scope.editorSession = _editor.getSession();\r\n\r\n this.$timeout(() => { $scope.showButton = true; })\r\n\r\n $scope.editorInstance.$blockScrolling = Infinity;\r\n \r\n var _renderer : AceAjax.VirtualRenderer = _editor.renderer;\r\n \r\n // Options\r\n $scope.editorSession.setUndoManager(new ace.UndoManager());\r\n\r\n var saveFunction : Function = angular.bind(this, this.saveContent);\r\n $scope.editorInstance.commands.addCommand({\r\n name: 'saveFile',\r\n bindKey: {\r\n win: 'Ctrl-S',\r\n mac: 'Command-S',\r\n sender: 'editor|cli'\r\n },\r\n exec: function (env, args, request) { \r\n saveFunction();\r\n }\r\n });\r\n \r\n \r\n var closeFunction : Function = angular.bind(this, this.closeDialog);\r\n $scope.editorInstance.commands.addCommand({\r\n name: 'close',\r\n bindKey: {\r\n win: 'Esc',\r\n mac: 'Esc',\r\n sender: 'editor|cli'\r\n },\r\n exec: function (env, args, request) {\r\n closeFunction();\r\n }\r\n });\r\n\r\n var clearCacheFunction : Function = angular.bind(this, this.clearCache);\r\n $scope.editorInstance.commands.addCommand({\r\n name: 'clearCache',\r\n bindKey: {\r\n win: 'Ctrl-L',\r\n mac: 'Command-L',\r\n sender: 'editor|cli'\r\n },\r\n exec: function (env, args, request) {\r\n clearCacheFunction();\r\n }\r\n });\r\n\r\n };\r\n \r\n $scope.$watch(\"settings.currentLanguage\", (newHl, oldHl) => {\r\n if (newHl == oldHl) return;\r\n if ($scope.currentLanguage && newHl === $scope.currentLanguage.hl) return; //same same\r\n $timeout(() => { this.loadContent($scope.filter, $scope.settings.currentLanguage); }); \r\n });\r\n\r\n //load angular templates & messages and such\r\n this.loadFilter();\r\n\r\n //load topics\r\n this.loadContentMany(9, 'topic', pglob.RouteData.CurrentLanguage.hl);\r\n\r\n //load existing tags\r\n this.loadAllTags();\r\n\r\n $(window).on('keydown', (event) => {\r\n var saveFunction : Function = angular.bind(this, this.saveContent);\r\n if (event.ctrlKey || event.metaKey) {\r\n switch (String.fromCharCode(event.which).toLowerCase()) {\r\n case 's':\r\n event.preventDefault();\r\n saveFunction();\r\n break;\r\n //case 'f':\r\n // event.preventDefault();\r\n // alert('ctrl-f');\r\n // break;\r\n //case 'g':\r\n // event.preventDefault();\r\n // alert('ctrl-g');\r\n // break;\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', () => {\r\n $(window).off('keydown')\r\n });\r\n \r\n \r\n\r\n }\r\n\r\n public $onInit(): void {\r\n if (this.locals) this.loadContent(this.locals.filter, this.$scope.settings.currentLanguage, false);\r\n if (this.locals && this.locals.filter.FilterString1.toLowerCase() == \"topic\") { \r\n this.$scope.topicCategoryFltr = this.locals.filter.FilterString2.toLowerCase();\r\n } else {\r\n this.$scope.topicCategoryFltr = \"Blog\".toLowerCase();\r\n }\r\n }\r\n \r\n //typedef for this.locals.x \r\n locals : { filter: EditorFilter };\r\n\r\n setRequestOnGoing(value) {\r\n this.$scope.requestOnGoing = value;\r\n }\r\n\r\n editMeta(fstring2 : string) : void {\r\n var f : EditorFilter = this.pageMetaService.getContentFilterFor(fstring2);\r\n this.loadContent(f);\r\n }\r\n\r\n isMetaEditable(type : MetaType) : boolean {\r\n return (this.$scope.meta().RouteData.RouteEntry.RouteParameterStack[0].Editable & type) > 0;\r\n }\r\n\r\n getUrlKey(title: string): string {\r\n //return RegExp.Replace(s2, \"-+\", \"-\").Trim(\"-\"c)\r\n var s1 = this.removeDiacritics(title);\r\n var s2 = s1.replace(new RegExp(\"[^A-Za-z0-9]\", \"g\"), \"-\");\r\n return this.trimChar(s2.replace(new RegExp(\"-+\", \"g\"), \"-\"), \"-\");\r\n }\r\n\r\n trimChar(s, mask): string {\r\n while (~mask.indexOf(s[0])) {\r\n s = s.slice(1);\r\n }\r\n while (~mask.indexOf(s[s.length - 1])) {\r\n s = s.slice(0, -1);\r\n }\r\n return s;\r\n }\r\n\r\n removeDiacritics(title: string): string {\r\n var map = {\r\n 'a': 'á|à|ã|â|ä|À|Á|Ã|Â|Ä',\r\n 'e': 'é|è|ê|É|È|Ê',\r\n 'i': 'í|ì|î',\r\n 'o': 'ó|ò|ô|õ|ö|Ó|Ò|Ô|Õ|Ö',\r\n 'u': 'ú|ù|û|ü|Ú|Ù|Û|Ü',\r\n 'c': 'ç|Ç',\r\n 'n': 'ñ|Ñ'\r\n };\r\n\r\n angular.forEach(map, function (pattern, newValue) {\r\n title = title.replace(new RegExp(pattern, 'g'), newValue);\r\n });\r\n\r\n return title;\r\n\r\n //produces typescript error in testing environment, no error when compiled with tsconfig settings, doesn't work in IE11\r\n //return title.normalize('NFD').replace(/[\\u0300-\\u036f]/g, \"\");\r\n }\r\n\r\n newContent(hlCode?: string) { \r\n this.loadContent(null, hlCode || this.$scope.settings.currentLanguage, true);\r\n }\r\n \r\n loadContent(filter : EditorFilter, hlCode? : string, getNew? : boolean) { \r\n if (!getNew && !filter) return; \r\n hlCode = hlCode || this.$scope.currentLanguage.hl;\r\n\r\n if (this.$scope.editorSession && !this.$scope.editorSession.getUndoManager().isClean()) {\r\n if (!confirm(\"Es existieren ungesicherte Änderungen. Verwerfen?\")) {\r\n this.$scope.settings.currentLanguage = this.$scope.currentLanguage.hl;\r\n return;\r\n }\r\n }\r\n\r\n this.setRequestOnGoing(true);\r\n\r\n var hl: ILanguageInfo[] = pglob.RouteData.SupportedLanguages.filter((hl: ILanguageInfo): boolean => { return hl.hl === hlCode });\r\n if (hl.length < 1) throw \"Language not Found\";\r\n \r\n if (this.$scope.editorInstance) this.$scope.editorInstance.setReadOnly(true);\r\n \r\n \r\n if (getNew) {\r\n //if someone presse the + button in the blog posts column\r\n var f = new EditorFilter();\r\n f.Category = 9;\r\n f.FilterString1 = \"Topic\";\r\n f.FilterString2 = this.$scope.topicCategoryFltr;\r\n f.IsLanguageIndifferent = false;\r\n\r\n var t = this.$scope.allTags.filter(this.createFilterFor('blog'));\r\n\r\n this.editorService.createContent(this.$scope.currentLanguage, this.$scope.content.ContentType, f, t).then((response) => {\r\n this.$scope.filter = response.data.ContentFilter;\r\n this.postLoad(response.data, \"erstellt.\"); \r\n });\r\n\r\n } else {\r\n if (this.$scope.editorInstance) this.$scope.editorInstance.setReadOnly(true);\r\n if (this.$scope.editorSession) this.$scope.content.Content = this.$scope.editorSession.getValue();\r\n\r\n this.$q.all([\r\n this.editorService.loadContent(filter, hl[0], this.$scope.content ? this.$scope.content.ContentType : null),\r\n this.editorService.loadRessources(filter)])\r\n .then((response) => {\r\n this.$scope.currentLanguage = hl[0];\r\n this.$scope.filter = filter;\r\n\r\n \r\n //process ressources\r\n this.$scope.ressourceData = {};\r\n\r\n this.$scope.showRessources = response[1].data.length > 0;\r\n\r\n response[1].data.forEach((v: Ressource) => {\r\n this.$scope.ressourceData[v.Key] = this.$scope.ressourceData[v.Key] || {\r\n Key: v.Key,\r\n Scope: v.Scope,\r\n Desc: v.Desc,\r\n Text: {},\r\n }\r\n this.$scope.ressourceData[v.Key].Text[v.LanguageCode] = v.Text;\r\n });\r\n\r\n if (response[0].data) {\r\n this.postLoad(response[0].data, \"geladen.\");\r\n } else {\r\n var type = ContentType.HTML;\r\n if (this.$scope.content && this.$scope.content.ContentType) type = this.$scope.content.ContentType;\r\n if (this.$scope.filter.ContentFormat > 0 && this.$scope.filter.ContentFormat == ContentType.MarkDown.charCodeAt(0)) type = ContentType.MarkDown;\r\n\r\n this.editorService.createContent(this.$scope.currentLanguage, type, this.$scope.filter) \r\n .then((response) => {\r\n let urlKey = this.pageMetaService.getPageMeta().RouteData.BasePageUrl;\r\n if (urlKey) urlKey = urlKey.replace(/\\//g, \"\"); // replace slashes\r\n let title = `${filter.FilterString2} ${urlKey}`;\r\n if (title && response.data.ContentMeta) response.data.ContentMeta.Title = title;\r\n this.$scope.filter = response.data.ContentFilter;\r\n this.postLoad(response.data, \"erstellt.\");\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler (Err: \" + response.status +\")\");\r\n });\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n private postLoad(c : Content, message : string){\r\n this.$scope.content = c;\r\n if (!this.$scope.content.ContentMeta.Tags) this.$scope.content.ContentMeta.Tags = [];\r\n\r\n if (this.$scope.editorSession && c && c.Content && this.$scope.editorSession.getValue() != c.Content) {\r\n //seems out of sync, so sync. we will loose undo history\r\n this.$scope.editorSession.setValue(c.Content); \r\n }\r\n\r\n\r\n if (c.ContentType == ContentType.MarkDown) { this.$scope.editorSession.setMode(\"ace/mode/markdown\"); }\r\n if (c.ContentType == ContentType.HTML) { this.$scope.editorSession.setMode(\"ace/mode/html\"); }\r\n \r\n //SQLDate Min \"1753-01-01T00:00:00Z\"\r\n //SQLDate Max \"9999-12-31T23:59:59.997Z\"\r\n this.$scope.validFromDate = c.ContentMeta.ValidFrom;\r\n this.$scope.validToDate = c.ContentMeta.ValidTo;\r\n this.$scope.isValidFromDateSet = c.ContentMeta.ValidFrom && c.ContentMeta.ValidFrom.getFullYear() > 1800;\r\n this.$scope.isValidToDateSet = c.ContentMeta.ValidTo && c.ContentMeta.ValidTo.getFullYear() < 9000;\r\n\r\n this.$scope.content.ContentMeta.ValidFrom = this.$scope.isValidFromDateSet ? this.$scope.validFromDate : null;\r\n this.$scope.content.ContentMeta.ValidTo = this.$scope.isValidToDateSet ? this.$scope.validToDate : null;\r\n \r\n //focus the ace editor\r\n if (this.$scope.editorInstance) {\r\n this.$scope.editorInstance.focus();\r\n }\r\n\r\n if (this.$mdSidenav('right').isOpen()) { this.toggleRight(); }\r\n if (this.$mdSidenav('left').isOpen()) { this.toggleLeft(); } \r\n\r\n this.setRequestOnGoing(false);\r\n if (this.$scope.editorInstance) this.$scope.editorInstance.setReadOnly(false);\r\n\r\n this.$scope.message = this.$scope.filter.IsLanguageIndifferent ? \"Inhalt \" : \"Sprache '\" + this.$scope.currentLanguage.hlFull + \"' \";\r\n this.$scope.message += message;\r\n this.$timeout(() => {\r\n this.$scope.message = null;\r\n }, 2000);\r\n }\r\n\r\n loadContentMany(categoryId: number, fs1: string, hlCode?: string) {\r\n if (!fs1) return;\r\n hlCode = hlCode || this.$scope.currentLanguage.hl;\r\n this.$scope.loadedTopics = null;\r\n\r\n this.setRequestOnGoing(true);\r\n\r\n var hl: ILanguageInfo[] = pglob.RouteData.SupportedLanguages.filter((hl: ILanguageInfo): boolean => { return hl.hl === hlCode });\r\n if (hl.length < 1) throw \"Language not Found\";\r\n\r\n var filter = new EditorFilter();\r\n filter.FilterString1 = fs1;\r\n filter.Category = categoryId;\r\n\r\n this.editorService.loadContentMany(filter, hl[0]).then((response) => {\r\n this.$scope.loadedTopics = response.data;\r\n return response;\r\n })\r\n\r\n this.setRequestOnGoing(false);\r\n }\r\n\r\n updateTopics() {\r\n this.loadContentMany(9, 'topic', pglob.RouteData.CurrentLanguage.hl);\r\n }\r\n\r\n saveContent(close?: boolean) {\r\n this.setRequestOnGoing(true);\r\n this.$scope.showSaveInProgress = true; \r\n if (this.$scope.editorInstance) this.$scope.editorInstance.setReadOnly(true);\r\n if (this.$scope.editorSession) this.$scope.content.Content = this.$scope.editorSession.getValue();\r\n\r\n var res: Ressource[] = [];\r\n angular.forEach(this.$scope.ressourceData, (r: IRessourceTableRow, key: string) => {\r\n this.$scope.supportedLanguages.forEach((hl) => {\r\n if (r.Text[hl.hl]) {\r\n res.push(new Ressource(r.Scope, r.Key, r.Desc, hl.hl, r.Text[hl.hl]));\r\n }\r\n });\r\n });\r\n\r\n if (this.$scope.metaEditForm.$invalid) {\r\n console.log(\"Error in Meta Edit Form.\");\r\n this.setRequestOnGoing(false);\r\n this.$scope.showSaveInProgress = false;\r\n if (!this.$mdSidenav('right').isOpen()) { this.toggleRight(); }\r\n alert(\"Fehler beim Speichern. Bitte Eingaben korrigieren.\")\r\n this.$scope.metaEditForm.$setSubmitted();\r\n return;\r\n }\r\n\r\n this.$scope.content.ContentMeta.ValidFrom = this.$scope.isValidFromDateSet ? this.$scope.validFromDate : null;\r\n this.$scope.content.ContentMeta.ValidTo = this.$scope.isValidToDateSet ? this.$scope.validToDate : null;\r\n\r\n this.$q.all([\r\n this.editorService.saveContent(this.$scope.filter, this.$scope.content, this.$scope.currentLanguage)\r\n , this.editorService.saveRessources(this.$scope.filter, res)])\r\n .then((response) => { \r\n this.$scope.filter = response[0].data.ContentFilter;\r\n this.postLoad(response[0].data, \"gespeichert.\");\r\n //if (this.$scope.filter.ContentId <= 0) this.$scope.filter.ContentId = response[0].data;\r\n\r\n\r\n\r\n this.setRequestOnGoing(false);\r\n this.$scope.showSaveInProgress = false;\r\n this.$scope.showSaveSuccess = true;\r\n this.$scope.editorSession.getUndoManager().markClean();\r\n if (this.$scope.ressourceEditForm) this.$scope.ressourceEditForm.$setPristine();\r\n if (this.$scope.metaEditForm) this.$scope.metaEditForm.$setPristine();\r\n\r\n this.$timeout(() => {\r\n this.$scope.showSaveSuccess = false;\r\n if (close) this.$mdDialog.hide({ filter: this.$scope.filter, data: this.$scope.content.Content });\r\n }, 2000); \r\n\r\n })\r\n .catch((response) => {\r\n\r\n if (response.status == 412) {\r\n if (confirm('Inhalt wurde zwischenzeitlich auf dem Server geändert. Inhalt neu laden?')) {\r\n this.editorService.clearCache().then(() => {\r\n this.loadContent(this.$scope.filter);\r\n });\r\n }\r\n } else {\r\n alert(\"Fehler beim Speichern (Err: \" + response.status +\")\");\r\n }\r\n \r\n }); \r\n }\r\n \r\n\r\n isTimed(meta: ContentMeta) {\r\n return this.$scope.isValidFromDateSet || this.$scope.isValidToDateSet;\r\n }\r\n\r\n\r\n clearCache() {\r\n this.setRequestOnGoing(true);\r\n this.CacheFactory.destroyAll();\r\n this.$scope.showSaveInProgress = true;\r\n\r\n this.editorService.clearCache().then(() => {\r\n this.setRequestOnGoing(false);\r\n this.$scope.showSaveInProgress = false;\r\n this.$scope.showCacheSuccess = true;\r\n this.$timeout(() => {\r\n this.$scope.showCacheSuccess = false;\r\n }, 2000); \r\n\r\n });\r\n } \r\n\r\n createMissingContent() {\r\n this.setRequestOnGoing(true);\r\n this.$scope.showSaveInProgress = true;\r\n\r\n this.editorService.createMissingContent().then(() => {\r\n this.loadFilter();\r\n this.setRequestOnGoing(false);\r\n this.$scope.showSaveInProgress = false;\r\n this.$scope.showCacheSuccess = true;\r\n this.$timeout(() => {\r\n this.$scope.showCacheSuccess = false;\r\n }, 2000); \r\n });\r\n }\r\n\r\n\r\n \r\n\r\n bindUploadButtons() {\r\n var imgButton = document.getElementById(\"submitImageButton\");\r\n var attButton = document.getElementById(\"submitAttachmentButton\");\r\n if (imgButton) {\r\n imgButton.addEventListener(\"click\", () => {\r\n document.getElementById(\"submitImageInput\").click();\r\n });\r\n }\r\n if (attButton) {\r\n attButton.addEventListener(\"click\", () => {\r\n document.getElementById(\"submitAttachmentInput\").click();\r\n });\r\n } \r\n }\r\n\r\n removeFile(type : ContentAttachementType) {\r\n this.editorService.removeContentFile(this.$scope.content.ContentMeta.Id, type, this.$scope.currentLanguage)\r\n .then((response) => {\r\n this.$scope.content.ContentMeta.RowVersion = response.data.ContentMeta.RowVersion; \r\n this.$scope.content.ContentMeta.Image = response.data.ContentMeta.Image;\r\n this.$scope.content.ContentMeta.Attachment = response.data.ContentMeta.Attachment; \r\n });\r\n\r\n }\r\n\r\n contentAttSrc(type : ContentAttachementType) {\r\n var cacheBuster = \"\";\r\n if (this.$scope.content && this.$scope.content.ContentMeta && this.$scope.content.ContentMeta.ModifiedAt) {\r\n cacheBuster = this.$scope.content.ContentMeta.ModifiedAt.getTime().toString();\r\n }\r\n return \"/svc/blogressource.axd?id=\" + this.$scope.content.ContentMeta.Id.toString() + \"&type=\" + type + \"&lang=\" + this.$scope.settings.currentLanguage + '&c=0&cb=' + cacheBuster;\r\n }\r\n\r\n loadFilter() {\r\n this.editorService.loadFilter([14,15]).then((response) => {\r\n this.$scope.filterTree = {};\r\n\r\n var seen : { [ key : string ] : IFilterTreeBranchL1 } = {};\r\n \r\n response.data.forEach((v : EditorFilter) => {\r\n this.$scope.filterTree[v.Category] = this.$scope.filterTree[v.Category] || [];\r\n\r\n var key = v.Category + \"-\" + v.FilterString1;\r\n\r\n var add : boolean = !seen[key];\r\n seen[key] = seen[key] || { name : v.FilterString1, templates : [] };\r\n if (add) this.$scope.filterTree[v.Category].push(seen[key]);\r\n\r\n seen[key].templates.push(v);\r\n });\r\n });\r\n }\r\n\r\n\r\n closeDialog() {\r\n if (!this.$scope.editorSession.getUndoManager().isClean() \r\n || !this.$scope.ressourceEditForm.$pristine\r\n || !this.$scope.metaEditForm.$pristine) {\r\n if (!confirm(\"Es existieren ungesicherte Änderungen. Verwerfen?\")) return;\r\n }\r\n this.$mdDialog.hide({ filter: this.$scope.filter, data: this.$scope.content.Content });\r\n }\r\n\r\n cancelDialog() {\r\n this.$mdDialog.cancel({ filter: this.$scope.filter });\r\n }\r\n\r\n toggleRight = this.buildToggler('right');\r\n toggleLeft = this.buildToggler('left');\r\n\r\n buildToggler(navID: string) {\r\n return () => {\r\n this.$mdSidenav(navID)\r\n .toggle()\r\n if (this.$mdSidenav('right').isOpen() && this.$scope.uploadButtonsBound == false) {\r\n this.bindUploadButtons();\r\n this.$scope.uploadButtonsBound = true;\r\n }\r\n }\r\n }\r\n tags : ContentTag[] = null;\r\n\r\n createFilterFor(query : string) : (string) => boolean {\r\n var lowercaseQuery = query.toLowerCase();\r\n\r\n return function filterFn(tag: ContentTag) {\r\n return (tag._lowerdisplayname.indexOf(lowercaseQuery) != -1); \r\n };\r\n }\r\n\r\n loadAllTags($query?: string): ContentTag[] | ng.IPromise {\r\n if (this.$scope.allTags) {\r\n if ($query) {\r\n return this.$scope.allTags.filter(this.createFilterFor($query));\r\n } else {\r\n return this.$scope.allTags;\r\n }\r\n } \r\n\r\n return this.editorService.loadTags(this.pageMetaService.getPageMeta().RouteData.CurrentLanguage).then((response) => { \r\n this.$scope.allTags = response.data; \r\n if ($query) {\r\n return this.$scope.allTags.filter(this.createFilterFor($query));\r\n } else {\r\n return this.$scope.allTags;\r\n }\r\n });\r\n }\r\n\r\n initFromDate() {\r\n this.$scope.validFromDate = this.$scope.isValidFromDateSet ? new Date(new Date().toDateString()) : null;\r\n }\r\n\r\n initToDate() {\r\n this.$scope.validToDate = this.$scope.isValidToDateSet ? new Date(new Date().toDateString()) : null;\r\n }\r\n\r\n\r\n }\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n\r\n/**\r\n * The product page\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule editor {\r\n 'use strict';\r\n\r\n var nav = angular.module('Editor', ['ui.ace', 'angular-cache', 'ngMaterial', 'ngMessages', 'navigation', 'ngFileUpload'])\r\n .directive('editor', editor.EditorDirective)\r\n .directive('contentListItem', editor.ContentListItemDirective)\r\n .service('editorService', editor.EditorService)\r\n .controller('editorCtrl', editor.EditorCtrl)\r\n .filter('keyboardShortcut', editor.KeyboardShortcut)\r\n .filter('statusTopic', editor.StatusTopic)\r\n .filter('categoryTopic', editor.CategoryTopic)\r\n .filter('tagTopic', editor.TagTopic);\r\n\r\n}","module footer {\r\n 'use strict';\r\n\r\n export class FooterConfig {\r\n \r\n public static $inject = [\r\n '$locationProvider'\r\n ];\r\n\r\n constructor(\r\n $locationProvider: ng.ILocationProvider\r\n ) { \r\n\r\n $locationProvider.html5Mode(true);\r\n }\r\n\r\n \r\n }\r\n \r\n}","module footer {\r\n 'use strict';\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class FooterCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$location',\r\n '$anchorScroll', \r\n '$animate',\r\n '$element',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IFooterScope,\r\n private $location: ng.ILocationService,\r\n private $anchorScroll: any, //ng.IAnchorScrollService\r\n private $animate: any, //angular.animate.IAnimateService,\r\n private $element: JQuery,\r\n private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $animate.on('enter', $element,\r\n function callback(element:JQuery, phase:string) {\r\n if (element.hasClass(\"detail\")) {\r\n $anchorScroll();\r\n }\r\n }\r\n );\r\n \r\n }\r\n\r\n setActiveTab(activeTabIndex : number, url : string, event? : JQueryEventObject) {\r\n if (event) event.preventDefault();\r\n if (this.$scope.activeTabIndex == activeTabIndex) {\r\n this.$scope.activeTabIndex = -1;\r\n } else {\r\n this.$scope.activeTabIndex = activeTabIndex;\r\n }\r\n this.$location.path(url);\r\n this.$anchorScroll();\r\n }\r\n\r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule glossar {\r\n 'use strict';\r\n\r\n export class GlossaryEntry {\r\n constructor(\r\n public GlossaryID: number,\r\n public Title: string,\r\n public IndexLetter: string,\r\n public Content: string,\r\n public Active: boolean\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule glossar {\r\n\r\n ZoomDialogDirective.$inject = [\r\n '$mdDialog',];\r\n export function ZoomDialogDirective(\r\n $mdDialog: ng.material.IDialogService\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n transclude: true,\r\n scope: {},\r\n link: function (scope: IZoomDialogDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes, c : ng.IController, transclude: ng.ITranscludeFunction) {\r\n var content: JQuery = null;\r\n\r\n var toolbar: string = \"
\";\r\n var containerleft: string = \"
\";\r\n var containerright: string = \"
\";\r\n\r\n transclude(scope, function (clone) {\r\n element.append(clone);\r\n element.find(\"img\").addClass(\"zoomable\");\r\n });\r\n\r\n element.on(\"click\", (ev: JQueryEventObject) => {\r\n $mdDialog.show({\r\n controller: () => { },\r\n scope: angular.extend(scope.$new(), {\r\n close: function () { $mdDialog.hide(); }\r\n }),\r\n template: toolbar + containerleft + element.html() + containerright,\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n },\r\n })\r\n });\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule glossar {\r\n\r\n GlossarEntryDirective.$inject = [\r\n '$mdDialog',\r\n '$http',\r\n '$compile',\r\n '$timeout',\r\n ];\r\n\r\n export function GlossarEntryDirective(\r\n $mdDialog: ng.material.IDialogService,\r\n $http: ng.IHttpService,\r\n $compile: ng.ICompileService,\r\n $timeout: ng.ITimeoutService,\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n transclude: true,\r\n scope: {\r\n entry : '=',\r\n },\r\n link: function (scope: IGlossarEntryDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes, c: ng.IController, transclude: ng.ITranscludeFunction) {\r\n $http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Glossary/Entry?Id=\" + scope.entry.GlossaryID\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n , data: {\r\n }\r\n }).then( (response : { data: string }) => {\r\n element.append($compile(response.data)(scope));\r\n //scope.entry.Active = !scope.entry.Active;\r\n $timeout(() => {\r\n (window).MathJax.Hub.Queue([\"Typeset\", (window).MathJax.Hub, element[0]]);\r\n }, 0); \r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule glossar {\r\n 'use strict';\r\n\r\n\r\n export function firstLetterFilter() {\r\n return function(input : GlossaryEntry[], letter : string) {\r\n input = input || [];\r\n var out = [];\r\n input.forEach(function (item) {\r\n //console.log(\"current item is\", item, item.charAt(0));\r\n if (item.IndexLetter.toLowerCase() == letter.toLowerCase()) {\r\n out.push(item);\r\n }\r\n });\r\n return out;\r\n }\r\n }\r\n\r\n\r\n}","module glossar {\r\n 'use strict';\r\n\r\n \r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class GlossarCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$location',\r\n '$anchorScroll', \r\n '$http',\r\n '$element',\r\n 'pageMetaService',\r\n 'parallaxService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IGlossarScope,\r\n private $location: ng.ILocationService,\r\n private $anchorScroll: any, //ng.IAnchorScrollService\r\n private $http: ng.IHttpService, //angular.animate.IAnimateService,\r\n private $element: JQuery,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private parallaxService: navigation.IParallaxService,\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\r\n $scope.selectedLetter = $scope.letters[0];\r\n\r\n //load mathjax\r\n if (!(window).MathJax) {\r\n var head = document.getElementsByTagName(\"head\")[0], script;\r\n script = document.createElement(\"script\");\r\n script.type = \"text/x-mathjax-config\";\r\n script[((window).opera ? \"innerHTML\" : \"text\")] =\r\n \"MathJax.Hub.Config({\\n\" +\r\n \" tex2jax: { inlineMath: [['$','$'], ['\\\\\\\\(','\\\\\\\\)']] }\\n\" +\r\n \"});\";\r\n head.appendChild(script);\r\n script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = \"/library/public/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML\";\r\n head.appendChild(script);\r\n }\r\n\r\n\r\n var elIndex :JQuery, elPageHead :JQuery, elHeader :JQuery, elIndexParent: JQuery;\r\n\r\n this.parallaxService.subscribeOnScroll($scope, (e: ng.IAngularEvent, scrollTop : number) => {\r\n\r\n elIndex = elIndex || $(this.$element).find(\".index\");\r\n elPageHead = elPageHead || $(\".pagehead\");\r\n elHeader = elHeader || $(\".glossar h3\");\r\n\r\n if (!elIndex) return;\r\n\r\n elIndexParent = elIndexParent || elIndex.parent();\r\n\r\n\r\n if (elHeader && elHeader.offset().top == 0) return;\r\n \r\n if (!elIndexParent.hasClass(\"fixed\") && (elIndex.offset().top - scrollTop) < elPageHead.height()) {\r\n elIndexParent.addClass(\"fixed\");\r\n } \r\n\r\n if (elIndexParent.hasClass(\"fixed\")) {\r\n var pos = elHeader.offset().top + elHeader.outerHeight() - scrollTop;\r\n if (pos > elPageHead.height()) {\r\n elIndexParent.removeClass(\"fixed\");\r\n }\r\n }\r\n\r\n });\r\n \r\n \r\n \r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Glossary\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n , data: {\r\n }\r\n }).then((response : { data: GlossaryEntry[] }) => {\r\n $scope.index = response.data;\r\n\r\n $scope.letters = [];\r\n response.data.forEach((entry : GlossaryEntry) => {\r\n if ($scope.letters.indexOf(entry.IndexLetter) < 0) {\r\n $scope.letters.push(entry.IndexLetter);\r\n }\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n loadLetter(letter) {\r\n this.$scope.selectedLetter = letter;\r\n var scope :IGlossarScope = this.$scope;\r\n };\r\n\r\n loadEntry(entry : GlossaryEntry) {\r\n entry.Active = !entry.Active;\r\n }\r\n\r\n }\r\n\r\n}\r\n","/// \r\n\r\nmodule team {\r\n 'use strict';\r\n\r\n export class Person {\r\n constructor(\r\n public Id: number,\r\n public Name: string,\r\n public Email: string,\r\n public Function: string,\r\n public Phone: string,\r\n public Image: string\r\n ) { }\r\n }\r\n}\r\n\r\n\r\n","module team {\r\n 'use strict';\r\n\r\n \r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class TeamCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$location',\r\n '$anchorScroll', \r\n '$http',\r\n '$element',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: ITeamScope,\r\n private $location: ng.ILocationService,\r\n private $anchorScroll: any, //ng.IAnchorScrollService\r\n private $http: ng.IHttpService, //angular.animate.IAnimateService,\r\n private $element: JQuery\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n\r\n var elData :JQuery = $element;\r\n var maxDepth = 10;\r\n while (maxDepth > 0 && elData.parent() && !elData.data('route-id')) {\r\n elData = elData.parent();\r\n maxDepth--;\r\n }\r\n\r\n var id : string = elData.data('route-id');\r\n \r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Team/List/\" + id\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n , data: {\r\n }\r\n }).then((response : {data: Person[] }) => {\r\n $scope.persons = response.data;\r\n });\r\n\r\n }\r\n\r\n \r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class Area {\r\n constructor(\r\n public ID: number,\r\n public Name: string,\r\n public Desc: string,\r\n public BusinessAreas: BusinessArea[],\r\n public Vendors: VendorWBusinessArea[]\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class BusinessArea {\r\n constructor(\r\n public ID: number,\r\n public Name: string,\r\n public Order: number,\r\n public Vendors: Vendor[],\r\n public VendorsId: number[]\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class Country {\r\n constructor(\r\n public ID: number,\r\n public Name: string,\r\n public NormalizedName: string,\r\n public VendorId: number,\r\n public Code: string\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class AreaData {\r\n constructor(\r\n public Areas: Area[],\r\n public BusinessAreas: BusinessArea[],\r\n public Vendors: VendorWBusinessArea[]\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class Vendor {\r\n constructor(\r\n public vendor2marketPriority: number,\r\n public ID: number,\r\n public ShortName: string,\r\n public Name: string,\r\n public Address: string,\r\n public AddressLines: string[],\r\n public Phone: string,\r\n public Fax: string,\r\n public Email: string,\r\n public Website: string,\r\n public AddressCountryName: string,\r\n public Location: google.maps.LatLngLiteral\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class VendorResult {\r\n constructor(\r\n public Countries: Country[],\r\n public AreaData : { [id: number]: AreaData; },\r\n public Vendors: { [id: number]: Vendor; },\r\n public DefaultVendor: Vendor,\r\n public LocationCountryCode: string,\r\n public BusinessAreas : BusinessArea[]\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class VendorWBusinessArea {\r\n constructor(\r\n public VendorId: number,\r\n public BusinessAreasList: BusinessArea[],\r\n public BusinessAreasString: string\r\n ) { }\r\n }\r\n}\r\n\r\n","/// \r\n\r\n\r\nmodule partner {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class PartnerService {\r\n static $inject = ['$http', '$q', 'CacheFactory'];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n public $q: ng.IQService,\r\n public CacheFactory: CacheFactory.ICacheFactory\r\n ) {\r\n\r\n if (!CacheFactory.get('dataCache')) {\r\n CacheFactory.createCache('dataCache', {\r\n storageMode: 'sessionStorage', // This cache will use `sessionStorage`.\r\n });\r\n }\r\n \r\n } \r\n\r\n public getPartnerData() : ng.IPromise {\r\n var url : string = \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Vendor/\"\r\n\r\n var deferred = this.$q.defer();\r\n var start = new Date().getTime();\r\n var dataCache = this.CacheFactory.get('dataCache');\r\n\r\n //in cache?\r\n if (dataCache.get(url)) {\r\n deferred.resolve(dataCache.get(url));\r\n return deferred.promise;\r\n } \r\n\r\n //embeded in html?\r\n var dataEl = document.getElementById('contact-data');\r\n if (dataEl) {\r\n var data : VendorResult = JSON.parse(dataEl.innerHTML);\r\n dataCache.put(url, data);\r\n deferred.resolve(data);\r\n return deferred.promise;\r\n }\r\n\r\n //fetch from network?\r\n this.$http({\r\n method: \"GET\"\r\n , url: url\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response : { data : VendorResult}) :any => { //success\r\n dataCache.put(url, response.data);\r\n deferred.resolve(response.data);\r\n }); \r\n \r\n return deferred.promise; \r\n\r\n } \r\n \r\n \r\n public getPartnerLocation(v: Vendor) : ng.IPromise {\r\n \r\n var deferred = this.$q.defer();\r\n\r\n if (v.Location) {\r\n deferred.resolve(v.Location);\r\n return deferred.promise;\r\n }\r\n\r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Vendor/Location\"\r\n , params: {\r\n 'vendorid' : v.ID\r\n }\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response : { data : google.maps.LatLngLiteral}) :any => { //success\r\n v.Location = response.data;\r\n deferred.resolve(response.data);\r\n }); \r\n \r\n return deferred.promise; \r\n\r\n }\r\n\r\n //public getCountries() : ng.IPromise {\r\n // return this.getPartnerData().then((data : VendorResult) => {\r\n // if (this.countries.length > 0) this.$q.when(this.countries);\r\n // data.Countries.forEach((c : Country, i : number, a : Country[]) => {\r\n // this.countries.push(new Country(c.ID, c.Name,c.NormalizedName, null, null,null,null,c.Code));\r\n // });\r\n // return this.countries;\r\n // });\r\n //}\r\n\r\n private rootElement : ng.IRootElementService;\r\n public getPartnerCtrlElement() : ng.IRootElementService {\r\n return this.rootElement;\r\n }\r\n\r\n public setPartnerCtrlElement(element : ng.IRootElementService) {\r\n this.rootElement = element;\r\n }\r\n \r\n }\r\n\r\n}\r\n","declare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class PartnerFlagCtrl {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n '$http', \r\n '$window',\r\n '$element',\r\n '$timeout',\r\n '$q',\r\n 'partnerService',\r\n 'pageMetaService',\r\n 'parallaxService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n constructor(\r\n private $scope: IPartnerFlagScope,\r\n private $http: ng.IHttpService,\r\n private $window: ng.IWindowService,\r\n private $element: ng.IRootElementService,\r\n private $timeout : ng.ITimeoutService,\r\n private $q : ng.IQService,\r\n private partnerService : PartnerService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private parallaxService: navigation.IParallaxService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n\r\n $scope.googleMapsUrlWithKey = \"https://maps.googleapis.com/maps/api/js?key=AIzaSyAF1xLcjeFHOKAXWqhsv1x6cc7tIVtDlzU\" //Api Key Managable from Google Cloud Console with admin@photometer.com\r\n\r\n var postLoad : () => void = function() {\r\n var currentCountry = $scope.vendordata.Countries.filter(function(val:Country, index: number) :boolean {\r\n return val.Code == $scope.vendordata.LocationCountryCode;\r\n });\r\n $scope.selectedCountry = currentCountry[0]; //country of the visitor or null if not found\r\n $scope.vm.onCountryChange();\r\n };\r\n \r\n partnerService.getPartnerData().then(function (data: VendorResult) {\r\n $scope.vendordata = data;\r\n postLoad();\r\n });\r\n\r\n \r\n this.parallaxService.subscribeOnScroll($scope, (e: ng.IAngularEvent, scrollTop : number) => {\r\n var el = partnerService.getPartnerCtrlElement();\r\n if (!el) return;\r\n var r : number = (scrollTop - ($(el).offset().top - 800));\r\n r = this.parallaxService.easeInOutQuad(r, 0, 59, 400);\r\n $($element).css({ \"transform\" : \"translate3d(\" + r + \"px, 0, 0)\" });\r\n $($element).removeClass(\"active\");\r\n });\r\n\r\n\r\n }\r\n\r\n loadCountries() { \r\n return this.$timeout(() => {\r\n if (!(this.$scope.Countries)) this.$scope.Countries = this.$scope.vendordata.Countries;\r\n }, 200);\r\n }\r\n\r\n onCountryChange() {\r\n this.$scope.selectedArea = null;\r\n this.$scope.selectedVendor = null;\r\n this.$scope.googleMapsQuery = null;\r\n\r\n var c = this.$scope.selectedCountry;\r\n if (c && this.getAreaData(c)) {\r\n if (c && this.getAreaData(c).Vendors) this.$scope.selectedVendor = this.selectVendorForCurrentBusinessArea(this.getAreaData(c));\r\n if (c && this.getAreaData(c).Areas) this.$scope.selectedArea = this.getAreaData(c).Areas[0];\r\n }\r\n if (this.$scope.selectedArea && this.$scope.selectedArea.Vendors) this.$scope.selectedVendor = this.$scope.selectedArea.Vendors[0];\r\n\r\n this.getOrUpdateLocation();\r\n }\r\n\r\n getOrUpdateLocation(): any {\r\n var v = this.getSelectedVendor();\r\n if (v) {\r\n this.partnerService.getPartnerLocation(v).then((latlong) => {\r\n if (v.Location) {\r\n this.$scope.googleMapsQuery = v.Location.lat + \",\" + v.Location.lng; \r\n } else {\r\n this.$scope.googleMapsQuery = null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n onAreaChange() {\r\n this.$scope.selectedVendor = this.selectVendorForCurrentBusinessArea(this.$scope.selectedArea);\r\n }\r\n\r\n selectVendorForCurrentBusinessArea(a : AreaData | Area) : VendorWBusinessArea {\r\n var def = a.Vendors[0];\r\n if (a.Vendors.length < 2) return def; //der einzige\r\n\r\n var rpm : IRouteParameter = this.pageMetaService.searchRouteParameter(\"BusinessArea\");\r\n if (!rpm) return def;\r\n\r\n var currentBusinessAreaId = rpm.Id;\r\n\r\n //a.Vendors[1].BusinessAreasList[0].ID\r\n var vArr = a.Vendors.filter((v, i) : boolean => {\r\n return v.BusinessAreasList.filter((ba, j) : boolean => {\r\n return ba.ID == currentBusinessAreaId;\r\n }).length > 0;\r\n });\r\n if (vArr.length > 0) return vArr[0]; \r\n return def;\r\n }\r\n \r\n getAreaData(c : Country) : AreaData {\r\n if (!c) return null;\r\n return this.$scope.vendordata.AreaData[c.ID];\r\n }\r\n\r\n getSelectedVendor() {\r\n if (this.$scope.selectedCountry && this.$scope.selectedCountry.VendorId) return this.$scope.vendordata.Vendors[this.$scope.selectedCountry.VendorId];\r\n if (this.$scope.selectedVendor && this.$scope.selectedVendor.VendorId) return this.$scope.vendordata.Vendors[this.$scope.selectedVendor.VendorId];\r\n if (this.$scope.vendordata) return this.$scope.vendordata.DefaultVendor;\r\n return undefined;\r\n }\r\n\r\n togglePullOut() {\r\n var active : boolean = !$('.contactflag').hasClass(\"active\");\r\n\r\n var boxWidth : number = 0;\r\n if (active) {\r\n boxWidth = -1 * 323 ;\r\n $('.contactflag').addClass(\"active\");\r\n } else {\r\n $('.contactflag').removeClass(\"active\");\r\n }\r\n $('.contactflag').css({ transform: \"translateX(\" + boxWidth + \"px)\" });\r\n }\r\n\r\n \r\n \r\n }\r\n\r\n}","declare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule partner {\r\n 'use strict';\r\n\r\n export class PartnerCtrl {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n '$http', \r\n '$window',\r\n '$element',\r\n '$timeout',\r\n '$q',\r\n 'partnerService',\r\n 'pageMetaService',\r\n 'parallaxService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n constructor(\r\n private $scope : IPartnerScope,\r\n private $http : ng.IHttpService,\r\n private $window : ng.IWindowService,\r\n private $element : ng.IRootElementService,\r\n private $timeout : ng.ITimeoutService,\r\n private $q : ng.IQService,\r\n private partnerService : PartnerService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private parallaxService: navigation.IParallaxService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.googleMapsUrlWithKey = \"https://maps.googleapis.com/maps/api/js?key=AIzaSyAF1xLcjeFHOKAXWqhsv1x6cc7tIVtDlzU\" //Api Key Managable from Google Cloud Console with admin@photometer.com\r\n\r\n var postLoad : () => void = function() {\r\n var currentCountry : Country[] = $scope.vendordata.Countries.filter(function(val:Country, index: number):boolean {\r\n return val.Code === $scope.vendordata.LocationCountryCode;\r\n });\r\n $scope.selectedCountry = currentCountry[0]; // country of the visitor or null if not found\r\n $scope.vm.onCountryChange();\r\n\r\n $scope.showOverlay = $scope.vm.getAreaData($scope.selectedCountry) != null && (\r\n $scope.vm.getAreaData($scope.selectedCountry).Vendors != null\r\n || $scope.vm.getAreaData($scope.selectedCountry).Areas != null);\r\n };\r\n\r\n // var boxWidth : number = -1 * 323;\r\n\r\n partnerService.getPartnerData().then(function(data : VendorResult):void {\r\n $scope.vendordata = data; \r\n postLoad();\r\n });\r\n\r\n partnerService.setPartnerCtrlElement($element);\r\n\r\n }\r\n \r\n \r\n loadCountries() { \r\n return this.$timeout(() => {\r\n if (!(this.$scope.Countries)) this.$scope.Countries = this.$scope.vendordata.Countries;\r\n }, 200);\r\n }\r\n\r\n\r\n onCountryChange() {\r\n this.$scope.selectedArea = null;\r\n this.$scope.selectedVendor = null;\r\n\r\n var c = this.$scope.selectedCountry;\r\n if (c && this.getAreaData(c)) {\r\n if (c && this.getAreaData(c).Vendors) this.$scope.selectedVendor = this.selectVendorForCurrentBusinessArea(this.getAreaData(c));\r\n if (c && this.getAreaData(c).Areas) this.$scope.selectedArea = this.getAreaData(c).Areas[0];\r\n }\r\n if (this.$scope.selectedArea && this.$scope.selectedArea.Vendors) this.$scope.selectedVendor = this.$scope.selectedArea.Vendors[0];\r\n\r\n if (this.$scope.selectedCountry && this.$scope.selectedCountry.VendorId != null) {\r\n this.$scope.showOverlay = false; \r\n }\r\n\r\n this.$scope.showOverlay = this.$scope.vm.getAreaData(this.$scope.selectedCountry) != null && (\r\n this.$scope.vm.getAreaData(this.$scope.selectedCountry).Vendors != null\r\n || this.$scope.vm.getAreaData(this.$scope.selectedCountry).Areas != null);\r\n }\r\n\r\n onAreaChange() {\r\n this.$scope.selectedVendor = this.selectVendorForCurrentBusinessArea(this.$scope.selectedArea);\r\n }\r\n\r\n selectVendorForCurrentBusinessArea(a : AreaData | Area) : VendorWBusinessArea {\r\n var def = a.Vendors[0];\r\n if (a.Vendors.length < 2) return def; //der einzige\r\n\r\n var rpm : IRouteParameter = this.pageMetaService.searchRouteParameter(\"BusinessArea\");\r\n if (!rpm) return def;\r\n\r\n var currentBusinessAreaId = rpm.Id;\r\n\r\n //a.Vendors[1].BusinessAreasList[0].ID\r\n var vArr = a.Vendors.filter((v, i) : boolean => {\r\n return v.BusinessAreasList.filter((ba, j) : boolean => {\r\n return ba.ID == currentBusinessAreaId;\r\n }).length > 0;\r\n });\r\n if (vArr.length > 0) return vArr[0]; \r\n return def;\r\n }\r\n\r\n getAreaData(c : Country) : AreaData {\r\n if (!c) return null;\r\n return this.$scope.vendordata.AreaData[c.ID];\r\n }\r\n\r\n getSelectedVendor() {\r\n if (this.$scope.selectedCountry && this.$scope.selectedCountry.VendorId) {\r\n return this.$scope.vendordata.Vendors[this.$scope.selectedCountry.VendorId];\r\n }\r\n\r\n if (this.$scope.selectedVendor && this.$scope.selectedVendor.VendorId) {\r\n return this.$scope.vendordata.Vendors[this.$scope.selectedVendor.VendorId];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n setVendor(ba : BusinessArea) { \r\n this.$scope.selectedBusinessArea = ba; \r\n var c = this.$scope.selectedCountry;\r\n var vendor : VendorWBusinessArea = null;\r\n if (c && this.getAreaData(c)) {\r\n if (this.getAreaData(c).Vendors) {\r\n vendor = this.getVendorByBusinessAreaId(this.getAreaData(c).Vendors, ba.ID); \r\n }\r\n if (this.$scope.selectedOverlayArea && this.$scope.selectedOverlayArea.Vendors) {\r\n vendor = this.getVendorByBusinessAreaId(this.$scope.selectedOverlayArea.Vendors, ba.ID);\r\n }\r\n\r\n }\r\n\r\n if (vendor) {\r\n if (this.$scope.selectedOverlayArea) {\r\n this.$scope.selectedArea = this.$scope.selectedOverlayArea;\r\n }\r\n this.$scope.selectedVendor = vendor;\r\n this.$scope.showOverlay = false;\r\n }\r\n }\r\n\r\n setOverlayArea(area : Area) {\r\n this.$scope.selectedOverlayArea = area;\r\n \r\n //only one vendor in this area.\r\n if (area.Vendors.length == 1) {\r\n this.$scope.selectedArea = area;\r\n this.$scope.selectedVendor = area.Vendors[0];\r\n this.$scope.showOverlay = false;\r\n }\r\n }\r\n\r\n isVendorSelected(vendor : VendorWBusinessArea) : boolean {\r\n return vendor.VendorId == this.$scope.selectedVendor.VendorId;\r\n }\r\n\r\n getVendorByBusinessAreaId(vendors : VendorWBusinessArea[], baId : number ) {\r\n var v : VendorWBusinessArea[] = vendors.filter((v, index, arr) => {\r\n return v.BusinessAreasList.filter((b, index, array) => {\r\n return baId == b.ID\r\n }).length > 0;\r\n });\r\n if (v.length > 0) return v[0]; \r\n //übrige Geschäftsfelder lösen wir rekursiv auf.\r\n if (baId != 0) return this.getVendorByBusinessAreaId(vendors, 0);\r\n return null;\r\n }\r\n\r\n \r\n\r\n getBusinessAreasByCountryOrArea(vendors : VendorWBusinessArea[]) {\r\n if (!vendors) return null;\r\n var baList = [];\r\n \r\n this.$scope.vendordata.BusinessAreas.forEach((ba, i, arr) => {\r\n var v = this.getVendorByBusinessAreaId(vendors, ba.ID);\r\n if (v != null) baList.push(ba);\r\n });\r\n return baList;\r\n }\r\n\r\n\r\n getBusinessAreaStringByVendor(vendor: VendorWBusinessArea) {\r\n if (!vendor) return null;\r\n var baList = \"\";\r\n \r\n this.$scope.vendordata.BusinessAreas.forEach((ba, i, arr) => {\r\n var v = this.getVendorByBusinessAreaId([vendor], ba.ID);\r\n if (v != null) baList += ba.Name + \", \";\r\n });\r\n return baList.replace(/, $/, \"\");\r\n }\r\n\r\n }\r\n}","/// \r\n\r\n\r\n//https://github.com/allenhwkim/angularjs-google-maps\r\n//https://ngmap.github.io/#/!map_no_default_style.html\r\n\r\nmodule partner {\r\n\r\n SimpleVendorAddressDirective.$inject = [\r\n 'pageMetaService',\r\n ];\r\n export function SimpleVendorAddressDirective(\r\n pageMetaService : navigation.IPageMetaService,): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n vendor: '=', \r\n linkedin: '@', \r\n },\r\n templateUrl: 'partner/SimpleVendorAddressDirective', \r\n link: function (scope: IVendorAddressScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n \r\n scope.subjectQuery = function(template) {\r\n var page = pageMetaService.searchRouteParameter(\"ProductName\");\r\n if (!page) page = pageMetaService.searchRouteParameter(\"MesuringTaskGroup\");\r\n if (!page) page = pageMetaService.searchRouteParameter(\"Industry\");\r\n if (page) {\r\n var title = page.DisplayName[pageMetaService.getPageMeta(navigation.HLFULL)];\r\n var subject = template.replace(/TITLE/g, title);\r\n return \"?subject=\" + encodeURI(subject);\r\n }\r\n return \"\";\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\n\r\n//https://github.com/allenhwkim/angularjs-google-maps\r\n//https://ngmap.github.io/#/!map_no_default_style.html\r\n\r\nmodule partner {\r\n \r\n VendorAddressDirective.$inject = [\r\n '$window',\r\n 'NgMap',\r\n '$timeout',\r\n 'partnerService',\r\n 'parallaxService',\r\n 'pageMetaService',\r\n ];\r\n\r\n export function VendorAddressDirective(\r\n $window : ng.IWindowService,\r\n NgMap : angular.map.INgMap, \r\n $timeout: ng.ITimeoutService,\r\n partnerService : PartnerService,\r\n parallaxService: navigation.IParallaxService,\r\n pageMetaService : navigation.IPageMetaService,): ng.IDirective {\r\n \r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n vendor: '=', \r\n linkedin: '@', \r\n mapid: '@',\r\n },\r\n templateUrl: 'partner/VendorAddressDirective', \r\n\r\n link: function (scope: IVendorAddressScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n scope.googleMapsUrl = \"https://maps.googleapis.com/maps/api/js?key=AIzaSyAF1xLcjeFHOKAXWqhsv1x6cc7tIVtDlzU\" //Api Key Managable from Google Cloud Console with admin@photometer.com\r\n scope.showMap = false;\r\n scope.progress = false;\r\n \r\n var geoCode = () => {\r\n scope.progress = true;\r\n \r\n $timeout(() => {\r\n partnerService.getPartnerLocation(scope.vendor).then((latlong) => {\r\n NgMap.getMap({ id: scope.mapid }).then(function (map) { \r\n google.maps.event.trigger(map, 'resize'); \r\n (map).markers.addressmarker.setPosition(new google.maps.LatLng(latlong.lat,latlong.lng));\r\n map.panTo((map).markers.addressmarker.getPosition());\r\n scope.progress = false;\r\n },\r\n function() { //no map? NO MAP, YOU SAY? AHHHHHHHH…\r\n //console.log(\"map \" + scope.mapid + \" not found, try again in 300ms\");\r\n $timeout(() => { geoCode(); }, 300);\r\n });\r\n });\r\n });\r\n }\r\n\r\n var showMap = (scrollTop : number) => {\r\n if (element.offset().top <= 0) return; //wait for init\r\n if ((element.offset().top - $($window).height() - 400) > scrollTop) return;\r\n if (!scope.vendor) return;\r\n scope.progress = true;\r\n scope.showMap = true; \r\n geoCode();\r\n }\r\n\r\n parallaxService.subscribeOnScroll(scope, (e: ng.IAngularEvent, scrollTop : number) => {\r\n if (!scope.vendor) return;\r\n if (!scope.showMap) {\r\n showMap(scrollTop);\r\n }\r\n });\r\n\r\n\r\n $(document).ready(function() {\r\n $timeout(() => { showMap($window.pageYOffset) }, 1000);\r\n });\r\n \r\n scope.$watch('vendor', function(newVal, oldVal) {\r\n if (newVal && !scope.showMap) showMap($window.pageYOffset);\r\n if (scope.showMap && newVal && newVal != oldVal) geoCode();\r\n }) \r\n \r\n scope.subjectQuery = function(template) {\r\n var page = pageMetaService.searchRouteParameter(\"ProductName\");\r\n if (!page) page = pageMetaService.searchRouteParameter(\"MesuringTaskGroup\");\r\n if (!page) page = pageMetaService.searchRouteParameter(\"Industry\");\r\n if (page) {\r\n var title = page.DisplayName[pageMetaService.getPageMeta(navigation.HLFULL)];\r\n var subject = template.replace(/TITLE/g, title);\r\n return \"?subject=\" + encodeURI(subject);\r\n }\r\n return \"\";\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule search {\r\n 'use strict';\r\n\r\n var escape = new RegExp('[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]', 'g');\r\n\r\n export function HighlightKeywordsFilter() {\r\n\r\n return function(input:string, words: string[]) {\r\n //http://stackoverflow.com/a/31676948/142679\r\n\r\n if (!words || words.length == 0 || !input) return input;\r\n\r\n var wordsEscaped : string [] = new Array();\r\n words.sort((a: string, b: string) => b.length - a.length).forEach( (value:string, index: number, array : string[]) : void => {\r\n wordsEscaped.push(value.replace(escape, \"\\\\$&\"));\r\n });\r\n\r\n var allTermsRegexStr : string = wordsEscaped.join('|');\r\n var regex = new RegExp('(' + allTermsRegexStr + ')', 'ig');\r\n return input.replace(regex, '$&');\r\n }\r\n }\r\n\r\n\r\n}","/// \r\n\r\nmodule search {\r\n 'use strict';\r\n\r\n export class searchService implements ISearchService {\r\n\r\n private keywordInputElement : JQuery = null;\r\n private keyword: string = null;\r\n private result: Results = {};\r\n private getSearchResultDebounced: (keyword: string) => void;\r\n private applicationSearchRequestNo : number = 0;\r\n private partSearchRequestNo : number = 0;\r\n private documentSearchRequestNo : number = 0;\r\n private productArchiveSearchRequestNo: number = 0;\r\n private allProductsSearchRequestNo: number = 0;\r\n\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$timeout',\r\n 'debounce',\r\n '$http',\r\n '$rootScope',\r\n '$analytics',\r\n 'pageMetaService',\r\n '$q',\r\n ];\r\n\r\n constructor(\r\n private $timeout: ng.ITimeoutService,\r\n private debounce: navigation.IDebounceService,\r\n private $http: ng.IHttpService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $analytics : angulartics.IAnalyticsService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $q : ng.IQService\r\n ) {\r\n this.getSearchResultDebounced = debounce(this.search, 500, false);\r\n }\r\n\r\n\r\n public setKeywordInputElement(element:JQuery):void {\r\n this.keywordInputElement = $(element);\r\n } \r\n\r\n public getKeywordInputElement():JQuery {\r\n return this.keywordInputElement;\r\n }\r\n\r\n public setKeyword(keyword: string) {\r\n if (keyword === this.keyword) return;\r\n if (keyword === '') {\r\n this.result = {};\r\n this.$rootScope.$emit('search-service-data');\r\n return;\r\n }\r\n this.keyword = keyword;\r\n this.getSearchResultDebounced(keyword);\r\n }\r\n\r\n public subscribe(scope : ng.IScope, callback : (event:ng.IAngularEvent) => void) {\r\n var handler = this.$rootScope.$on('search-service-data', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n public subscribeLoading(scope : ng.IScope, callback : (event:ng.IAngularEvent, ...args:any[]) => void) {\r\n var handler = this.$rootScope.$on('search-service-load', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n public getData() : Results {\r\n return this.result;\r\n }\r\n\r\n //rStart und rCount werden zurzeit nie von der Startseite benutzt => Calling Search-Methoden nur mit Keyword\r\n private search(keyword : string) {\r\n this.$rootScope.$emit('search-service-load', true);\r\n this.$q.all([\r\n this.searchApplications(keyword),\r\n this.searchParts(keyword),\r\n this.searchLibrary(keyword),\r\n this.searchProductArchive(keyword),\r\n ]).then(()=>{\r\n this.$rootScope.$emit('search-service-load', false);\r\n },()=>{\r\n this.$rootScope.$emit('search-service-load', false);\r\n });\r\n }\r\n\r\n public searchApplications(keyword : string, resultStart: number = 0, resultCount: number = 5) : ng.IHttpPromise {\r\n var rqCount = ++this.applicationSearchRequestNo;\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Search\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n query: keyword,\r\n rStart: resultStart,\r\n rCount: resultCount\r\n }\r\n }).then((response : {data: ApplicationsSearchServiceData}) : any => {\r\n if (rqCount < this.applicationSearchRequestNo) return response;\r\n this.result.query = response.data.query;\r\n this.result.industries = { Hits: response.data.industries.Hits, Count: response.data.industries.Count };\r\n this.result.tasks = { Hits: response.data.tasks.Hits, Count: response.data.tasks.Count };\r\n this.result.products = { Hits: response.data.products.Hits, Count: response.data.products.Count };\r\n this.result.topResult = response.data.topResult;\r\n \r\n this.$rootScope.$emit('search-service-data');\r\n this.$analytics.pageTrack(\"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Search/?query=\" + this.keyword);\r\n return response;\r\n });\r\n\r\n }\r\n\r\n public searchParts(keyword: string, resultStart: number = 0, resultCount: number = 10): ng.IHttpPromise {\r\n if (!this.pageMetaService.getPageMeta().RouteData.Features.Artikelsuche) {\r\n return;\r\n }\r\n \r\n var rqCount = ++this.partSearchRequestNo;\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Part/Search\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n query: keyword,\r\n rStart: resultStart,\r\n rCount: resultCount\r\n }\r\n }).then((response : {data: PartSearchServiceData}) : any => {\r\n if (rqCount < this.partSearchRequestNo) return response;\r\n if (response.data) {\r\n this.result.query = response.data.Query;\r\n this.result.parts = { Hits: response.data.Hits, Count: response.data.Count };\r\n } else {\r\n response.data = new PartSearchServiceData(keyword, [], 0);\r\n this.result.parts = null;\r\n }\r\n this.$rootScope.$emit('search-service-data');\r\n return response;\r\n });\r\n }\r\n\r\n public searchLibrary(keyword: string, resultStart: number = 0, resultCount: number = 10, picturesOnly: boolean = false): ng.IHttpPromise {\r\n var rqCount = ++this.documentSearchRequestNo;\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Document/Search\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n query: keyword,\r\n rStart: resultStart,\r\n rCount: resultCount,\r\n picturesOnly: picturesOnly\r\n }\r\n }).then((response : {data: DocumentSearchServiceData}) : any => {\r\n if (rqCount < this.documentSearchRequestNo) return response;\r\n \r\n if (response.data) {\r\n this.result.query = response.data.Query;\r\n this.result.documents = { Hits: response.data.Hits, Count: response.data.Count };\r\n } else {\r\n response.data = new DocumentSearchServiceData(keyword, [], 0);\r\n this.result.documents = null;\r\n }\r\n this.$rootScope.$emit('search-service-data');\r\n return response;\r\n });\r\n }\r\n\r\n public searchAllProducts(keyword: string, resultStart: number = 0, resultCount: number = 5): ng.IHttpPromise {\r\n var rqCount = ++this.allProductsSearchRequestNo;\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Product/SearchAll\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n query: keyword,\r\n rStart: resultStart,\r\n rCount: resultCount\r\n }\r\n }).then((response: { data: any }) : any => {\r\n if (rqCount < this.allProductsSearchRequestNo) return response;\r\n if (response.data) {\r\n this.result.query = response.data.Query;\r\n this.result.allProducts = { Hits: response.data.Hits, Count: response.data.Count };\r\n } else {\r\n response.data = { Hits: [], Count: 0 };\r\n this.result.allProducts = null;\r\n }\r\n this.$rootScope.$emit('search-service-data');\r\n return response;\r\n })\r\n }\r\n\r\n public searchEverything(keyword: string, resultStart: number = 0, resultCount: number = 5): ng.IHttpPromise {\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Search/SearchEverything\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n query: keyword,\r\n rStart: resultStart,\r\n rCount: resultCount\r\n }\r\n }).then((response: { data: AllSearchResult }) : any => {\r\n return response;\r\n })\r\n }\r\n\r\n public searchProductArchive(keyword : string, resultStart: number = 0, resultCount: number = 5) : ng.IHttpPromise {\r\n var rqCount = ++this.productArchiveSearchRequestNo;\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Product/SearchArchive\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n query: keyword,\r\n rStart: resultStart,\r\n rCount: resultCount\r\n }\r\n }).then((response : {data: ProductArchiveSearchServiceData}) : any => {\r\n if (rqCount < this.productArchiveSearchRequestNo) return response;\r\n if (response.data) {\r\n this.result.query = response.data.Query;\r\n this.result.productArchive = { Hits: response.data.Hits, Count: response.data.Count };\r\n } else {\r\n response.data = new ProductArchiveSearchServiceData(keyword, [], 0);\r\n this.result.productArchive = null;\r\n }\r\n this.$rootScope.$emit('search-service-data');\r\n return response;\r\n });\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\nmodule search {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n */\r\n searchKeyword.$inject = ['searchService', '$timeout'];\r\n export function searchKeyword(searchService : ISearchService, $timeout : ng.ITimeoutService): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n link: function (scope : ISearchKeywordScope, element: any, attr: ng.IAttributes) {\r\n searchService.setKeywordInputElement(element);\r\n\r\n // Write data to the model\r\n var read = () => {\r\n var keyword :string = element.val();\r\n searchService.setKeyword(keyword);\r\n };\r\n\r\n // Listen for change events to enable binding\r\n element.on('blur keyup change', function() {\r\n scope.$evalAsync(read);\r\n });\r\n read(); // initialize\r\n\r\n searchService.subscribeLoading(scope, (event : ng.IAngularEvent, isLoading : boolean) => {\r\n if (isLoading) {\r\n $(element).parent().addClass(\"loading\"); \r\n } else {\r\n $(element).parent().removeClass(\"loading\");\r\n }\r\n });\r\n \r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule search {\r\n\r\n SearchResultDirective.$inject = [\r\n ];\r\n export function SearchResultDirective(\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n hitTitle: '@',\r\n highlights: '@',\r\n img: '@',\r\n svg: '@',\r\n },\r\n templateUrl: 'search/SearchResultDirective',\r\n link: function (scope: ISearchResultScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule search {\r\n\r\n AllResultsDirective.$inject = [\r\n 'pageMetaService',\r\n 'anchorNavService',\r\n '$mdDialog',\r\n 'libraryService',\r\n 'partService',\r\n ];\r\n export function AllResultsDirective(\r\n pageMetaService: navigation.IPageMetaService,\r\n anchorNavService: navigation.IAnchorNavService,\r\n $mdDialog: ng.material.IDialogService,\r\n libraryService: library.ILibraryService,\r\n partService: part.IPartService\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n hit: '=',\r\n resultMeta: '=',\r\n resultObject: '@'\r\n },\r\n templateUrl: 'search/AllResultsDirective',\r\n link: function (scope: IAllResultsScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n scope.resultObject = {\r\n Title: \"Type undefined\",\r\n ID: \"NaN\",\r\n Rest: \"Use 'getResultByType()'\",\r\n Meta: \"No metadata\"\r\n }\r\n\r\n scope.getResultByType = function (hit) {\r\n var data = {\r\n \"Document\": {\r\n Title: getTitle(scope.meta('hl') == 'D', hit.titleD, hit.titleE),\r\n ID: hit.documentId,\r\n Rest: hit.attachment && hit.attachment.content_length > 0 ? hit.attachment.content : \"\",\r\n Meta: scope.resultMeta\r\n }\r\n , \"Application\": {\r\n Title: scope.meta('hl') == 'D' ? hit.nameD : hit.nameE,\r\n ID: hit.applicationId,\r\n Meta: scope.resultMeta\r\n }\r\n , \"Industry\": {\r\n Title: scope.meta('hl') == 'D' ? hit.nameD : hit.nameE,\r\n ID: hit.industryID,\r\n Meta: scope.resultMeta\r\n }\r\n , \"Product\": {\r\n Title: hit.name,\r\n ID: hit.id,\r\n Rest: scope.meta('hl') == 'D' ? hit.longDescD : hit.longDescD,\r\n Meta: scope.resultMeta\r\n }\r\n , \"Part\": {\r\n Title: scope.meta('hl') == 'D' ? hit.textD : hit.textE,\r\n ID: hit.partId,\r\n Meta: scope.resultMeta\r\n }\r\n };\r\n scope.resultObject = data[scope.resultMeta.Type];\r\n }\r\n\r\n scope.getImgUrl = function () {\r\n var data = {\r\n \"Document\": \"/svc/docthumbnail.axd?RevId=\" + scope.hit.fileSrcRevId,\r\n }\r\n return data[scope.resultMeta.Type]; \r\n }\r\n\r\n scope.capitalizeFirst = function (str: string) {\r\n if (str) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n var getTitle = function (de : boolean, titleD: string, titleE: string) : string {\r\n return de ? (titleD || titleE) : (titleE || titleD); \r\n };\r\n\r\n\r\n scope.shortenText = function (text: string) {\r\n if (text) {\r\n var textArray = text.split('');\r\n if (textArray.length > 175) {\r\n var textString = textArray.slice(0, 175).join('');\r\n return textString;\r\n } else {\r\n return text;\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n scope.openDialog = function (ev: ng.IAngularEvent, hit: any) {\r\n if (scope.resultMeta.Type == \"Document\") {\r\n ev.preventDefault();\r\n libraryService.openDialog(hit[\"fileSrcRevId\"], scope, null);\r\n } else if (scope.resultMeta.Type == \"Part\") {\r\n ev.preventDefault();\r\n partService.openDialog(hit[\"id\"], scope);\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n scope.$watch('hit', function (newVal, oldVal) {\r\n if (newVal) {\r\n scope.getResultByType(newVal);\r\n }\r\n })\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n}","module search {\r\n 'use strict';\r\n\r\n export class SearchCtrl {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n 'searchService',\r\n '$element',\r\n '$window',\r\n '$timeout',\r\n 'anchorNavService',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n ];\r\n \r\n // dependencies are injected via AngularJS $injector\r\n constructor(\r\n private $scope: ISearchScope,\r\n private searchService: ISearchService,\r\n private $element: JQuery,\r\n private $window: ng.IWindowService,\r\n private $timeout: ng.ITimeoutService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n var init = () => {\r\n this.elInput = searchService.getKeywordInputElement();\r\n if (!this.elInput) {\r\n $timeout(init, 300);\r\n }\r\n if (anchorNavService.getPath().lastIndexOf('/') == (anchorNavService.getPath().length - 1)\r\n && angular.equals({}, anchorNavService.search())) {\r\n \r\n $timeout(() => {this.elInput.focus()}, 300);\r\n } \r\n this.position(null);\r\n }\r\n \r\n angular.element($window).bind(\"resize\", this.position);\r\n angular.element($window).bind('load', () => {\r\n init();\r\n });\r\n\r\n searchService.subscribe($scope, () => {\r\n $scope.data = searchService.getData(); \r\n this.position(null); \r\n });\r\n\r\n $scope.hasResults = true;\r\n searchService.subscribeLoading($scope, (event: ng.IAngularEvent, isLoading: boolean) => {\r\n var data = searchService.getData();\r\n if (!isLoading && data && data.query > \"\") { \r\n \r\n if (!data.topResult) {\r\n $scope.limit = 10;\r\n }\r\n \r\n $scope.hasResults = (data.tasks && data.tasks.Hits.length > 0\r\n || data.industries && data.industries.Hits.length > 0\r\n || data.products && data.products.Hits.length > 0\r\n || data.documents && data.documents.Hits.length > 0\r\n || data.parts && data.parts.Hits.length > 0\r\n || data.productArchive && data.productArchive.Hits.length > 0);\r\n } else {\r\n $scope.limit = 5;\r\n $scope.hasResults = true;\r\n }\r\n });\r\n\r\n }\r\n\r\n elInput : JQuery;\r\n\r\n getIconIRI(prefix: string, icon: string) {\r\n return prefix + icon;\r\n }\r\n\r\n search() : void {\r\n\r\n }\r\n\r\n position(ev:JQueryEventObject) : void {\r\n if (!this.elInput) return;\r\n var elRelative : JQuery = this.elInput.offsetParent();\r\n while (elRelative.css(\"position\") !== \"relative\") {\r\n elRelative = elRelative.offsetParent();\r\n }\r\n\r\n $(this.$element).css({\r\n top: this.elInput.offset().top - elRelative.offset().top + this.elInput.outerHeight()\r\n , left: this.elInput.offset().left\r\n , width : this.elInput.outerWidth()\r\n });\r\n };\r\n\r\n \r\n\r\n openPart(ev: MouseEvent, partid: string) : void {\r\n ev.preventDefault();\r\n\r\n this.anchorNavService.search(\"partid\", partid);\r\n\r\n this.$mdDialog.show({\r\n controller: 'PartDetailCtrl',\r\n templateUrl: 'part/PartDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n partId: partid,\r\n parentScope: this.$scope\r\n },\r\n })\r\n .then(() => {\r\n this.anchorNavService.search({\"partid\": null});\r\n //console.log('Modal closed at: ' + new Date());\r\n }, () => {\r\n this.anchorNavService.search({\"partid\": null});\r\n //console.log('Modal canceled at: ' + new Date());\r\n });\r\n }\r\n\r\n\r\n\r\n \r\n\r\n openDocument(ev: MouseEvent, fileSrcRevId: number) : void {\r\n ev.preventDefault();\r\n\r\n this.anchorNavService.search(\"revid\", fileSrcRevId);\r\n\r\n this.$mdDialog.show({\r\n controller: 'LibraryDetailCtrl',\r\n templateUrl: 'library/LibraryDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n revId: fileSrcRevId,\r\n parentScope: this.$scope\r\n },\r\n })\r\n .then( () => {\r\n this.anchorNavService.search({\"revid\": null});\r\n //console.log('Modal closed at: ' + new Date());\r\n }, () => {\r\n this.anchorNavService.search({\"revid\": null});\r\n //console.log('Modal canceled at: ' + new Date());\r\n });\r\n }\r\n\r\n \r\n }\r\n\r\n}","module search {\r\n 'use strict';\r\n\r\n export class SearchResultsCtrl {\r\n\r\n public static $inject = [\r\n '$scope', \r\n 'searchService',\r\n '$element',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n '$location',\r\n '$log',\r\n 'anchorNavService',\r\n '$timeout',\r\n '$window',\r\n 'partService',\r\n 'libraryService'\r\n ];\r\n\r\n constructor(\r\n private $scope: ISearchResultScope,\r\n private searchService: ISearchService,\r\n private $element: JQuery,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $location: ng.ILocationService,\r\n private $log: ng.ILogService,\r\n private anchorNavService: navigation.IAnchorNavService,\r\n private $timeout: ng.ITimeoutService,\r\n private $window: ng.IWindowService,\r\n private partService: part.IPartService,\r\n private libraryService: library.ILibraryService\r\n ) {\r\n\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n var init = () => {\r\n var inputElement = document.getElementsByClassName(\"searchQueryInput\").item(0);\r\n if (!inputElement) {\r\n $timeout(init, 300);\r\n }\r\n $timeout(() => { inputElement.focus() }, 300);\r\n }\r\n\r\n angular.element($window).bind('load', () => {\r\n init();\r\n });\r\n\r\n $scope.queryString = $location.search().q;\r\n $scope.data = {};\r\n\r\n $scope.pages = [\r\n { \"AllResults\": [] },\r\n { \"App\": [] },\r\n { \"Ind\": [] },\r\n { \"Prod\": [] },\r\n { \"Doc\": [] },\r\n { \"Img\": [] },\r\n { \"Part\": [] }\r\n ];\r\n\r\n $scope.activePages = [\r\n { \"AllResults\": 1 },\r\n { \"App\": 1 },\r\n { \"Ind\": 1 },\r\n { \"Prod\": 1 },\r\n { \"Doc\": 1 },\r\n { \"Img\": 1 },\r\n { \"Part\": 1 }\r\n ];\r\n\r\n if (pglob.RouteData.User) {\r\n $scope.searchCategories = [\r\n { 'id': 1, 'name': $scope.meta('hl') == 'D' ? 'Alle Ergebnisse' : 'All Results' }\r\n , { 'id': 5, 'name': $scope.meta('hl') == 'D' ? 'Dokumente' : 'Documents' }\r\n , { 'id': 6, 'name': $scope.meta('hl') == 'D' ? 'Artikel' : 'Parts' }\r\n , { 'id': 4, 'name': $scope.meta('hl') == 'D' ? 'Produkte' : 'Products' }\r\n , { 'id': 7, 'name': $scope.meta('hl') == 'D' ? 'Bilder' : 'Images' }\r\n , { 'id': 2, 'name': $scope.meta('hl') == 'D' ? 'Anwendungen' : 'Applications' }\r\n , { 'id': 3, 'name': $scope.meta('hl') == 'D' ? 'Industrien' : 'Industries' }\r\n ];\r\n } else {\r\n $scope.searchCategories = [\r\n { 'id': 1, 'name': $scope.meta('hl') == 'D' ? 'Alle Ergebnisse' : 'All Results' }\r\n , { 'id': 5, 'name': $scope.meta('hl') == 'D' ? 'Dokumente' : 'Documents' }\r\n , { 'id': 4, 'name': $scope.meta('hl') == 'D' ? 'Produkte' : 'Products' }\r\n , { 'id': 7, 'name': $scope.meta('hl') == 'D' ? 'Bilder' : 'Images' }\r\n , { 'id': 2, 'name': $scope.meta('hl') == 'D' ? 'Anwendungen' : 'Applications' }\r\n , { 'id': 3, 'name': $scope.meta('hl') == 'D' ? 'Industrien' : 'Industries' }\r\n ];\r\n }\r\n\r\n $scope.searchMethods = [\r\n { 'id': 1, 'method': 'searchEverything' },\r\n { 'id': 2, 'method': 'searchApps' },\r\n { 'id': 3, 'method': 'searchApps' },\r\n { 'id': 4, 'method': 'searchAllProducts' },\r\n { 'id': 5, 'method': 'searchDocs' },\r\n { 'id': 6, 'method': 'searchParts' },\r\n { 'id': 7, 'method': 'searchPics' },\r\n ];\r\n\r\n $scope.callSearchFunction = function () {\r\n //gotta wait until top level has been changed\r\n $timeout(() => {\r\n var id = $scope.selectedTopLevel.id;\r\n var method = $scope.searchMethods.filter((i) => i.id == id)[0];\r\n $scope.vm[method.method](1, 10);\r\n }, 1000); \r\n }\r\n \r\n $scope.$watch('queryString', (newVal: string, oldVal: string) => {\r\n if (newVal != oldVal) {\r\n $location.search({ q: newVal });\r\n $scope.callSearchFunction();\r\n }\r\n });\r\n \r\n }\r\n\r\n populatePagination(category: string, totalResults: number, perPage: number) {\r\n this.$scope.pages[category] = [];\r\n for (var i = 1; i < Math.ceil(totalResults / perPage) + 1; i++) {\r\n this.$scope.pages[category].push(i);\r\n }\r\n }\r\n\r\n searchEverything(pageNum: number, pageCount: number) {\r\n if (this.$scope.queryString) {\r\n this.searchService.searchEverything(this.$scope.queryString, (pageNum - 1) * 10, pageCount).then((response: { data: any }) => {\r\n this.$scope.data.allResults = response.data;\r\n this.populatePagination(\"AllResults\", response.data.TotalResults, 10)\r\n this.$scope.activePages[\"AllResults\"] = pageNum;\r\n })\r\n }\r\n } \r\n\r\n searchApps(pageNum: number, pageCount: number) {\r\n if (this.$scope.queryString) {\r\n this.searchService.searchApplications(this.$scope.queryString, (pageNum - 1) * 10, pageCount).then((response: { data: any }) => {\r\n this.$scope.data.query = response.data.query;\r\n this.$scope.data.industries = { Hits: response.data.industries.Hits, Count: response.data.industries.Count };\r\n this.$scope.data.tasks = { Hits: response.data.tasks.Hits, Count: response.data.tasks.Count };\r\n this.$scope.data.topResult = response.data.topResult;\r\n this.populatePagination(\"App\", response.data.tasks.Count, 10);\r\n this.$scope.activePages[\"App\"] = pageNum;\r\n this.populatePagination(\"Ind\", response.data.industries.Count, 10);\r\n this.$scope.activePages[\"Ind\"] = pageNum;\r\n })\r\n }\r\n }\r\n\r\n searchDocs(pageNum: number, pageCount: number) {\r\n if (this.$scope.queryString) {\r\n this.searchService.searchLibrary(this.$scope.queryString, (pageNum - 1) * 10, pageCount, false).then((response: { data: any }) => {\r\n this.$scope.data.documents = { Hits: response.data.Hits, Count: response.data.Count };\r\n this.populatePagination(\"Doc\", response.data.Count, 10);\r\n this.$scope.activePages[\"Doc\"] = pageNum;\r\n })\r\n }\r\n }\r\n\r\n searchPics(pageNum: number, pageCount: number) {\r\n if (this.$scope.queryString) {\r\n this.searchService.searchLibrary(this.$scope.queryString, (pageNum - 1) * 35, 35, true).then((response: { data: any }) => {\r\n this.$scope.data.pictures = { Hits: response.data.Hits, Count: response.data.Count };\r\n this.populatePagination(\"Img\", response.data.Count, 35);\r\n this.$scope.activePages[\"Img\"] = pageNum;\r\n })\r\n }\r\n }\r\n\r\n searchParts(pageNum: number, pageCount: number) {\r\n if (this.$scope.queryString && pglob.RouteData.User) {\r\n this.searchService.searchParts(this.$scope.queryString, (pageNum - 1) * 10, pageCount).then((response: { data: any }) => {\r\n this.$scope.data.parts = { Hits: response.data.Hits, Count: response.data.Count }; \r\n this.populatePagination(\"Part\", response.data.Count, 10);\r\n this.$scope.activePages[\"Part\"] = pageNum;\r\n })\r\n }\r\n }\r\n\r\n searchAllProducts(pageNum: number, pageCount: number) {\r\n if (this.$scope.queryString) {\r\n this.searchService.searchAllProducts(this.$scope.queryString, (pageNum - 1) * 10, pageCount).then((response: { data: any }) => {\r\n this.$scope.data.products = { Hits: response.data.Hits, Count: response.data.Count }; \r\n this.populatePagination(\"Prod\", response.data.Count, 10);\r\n this.$scope.activePages[\"Prod\"] = pageNum;\r\n })\r\n }\r\n }\r\n\r\n shortenText(text: string) {\r\n if (text) {\r\n var textArray = text.split('');\r\n if (textArray.length > 200) {\r\n var textString = textArray.slice(0, 200).join('');\r\n return textString;\r\n } else {\r\n return text;\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n openPartDialog(ev: ng.IAngularEvent, part: Part) {\r\n ev.preventDefault();\r\n this.partService.openDialog(part.Id, this.$scope);\r\n }\r\n\r\n openDocumentDialog(ev: ng.IAngularEvent, Doc: Document) {\r\n ev.preventDefault();\r\n this.libraryService.openDialog(Doc.DocumentFileSrcRevId, this.$scope, null);\r\n }\r\n\r\n \r\n }\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule search {\r\n 'use strict';\r\n\r\n var search = angular.module('search', ['navigation', 'part', 'library'])\r\n .controller('SearchCtrl', SearchCtrl)\r\n .controller('SearchResultsCtrl', SearchResultsCtrl)\r\n .directive('searchKeyword', searchKeyword)\r\n .directive('searchResult', SearchResultDirective)\r\n .directive('allResults', AllResultsDirective)\r\n .filter('highlight', HighlightKeywordsFilter)\r\n .service('searchService', searchService); \r\n} ","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule misc {\r\n 'use strict';\r\n \r\n export class SigristHistoryCtrl {\r\n\r\n public static $inject = [\r\n '$scope'\r\n , '$timeout'\r\n , '$interval'\r\n ];\r\n\r\n constructor(\r\n private $scope: any\r\n , private $timeout: ng.ITimeoutService\r\n , private $interval: ng.IIntervalService\r\n ) {\r\n\r\n $scope.vm = this;\r\n $scope.testimonialIndex = 0;\r\n $scope.jubiIndex = 0;\r\n\r\n $scope.interval = $interval(() => { this.checkPageChange(); }, 200);\r\n $scope.intervalJubi = $interval(() => { this.checkPageChangeJubi(); }, 200);\r\n\r\n $scope.lastChange = new Date().getTime();\r\n $scope.lastChangeJubi = new Date().getTime();\r\n\r\n $scope.$watch(\"testimonialIndex\", () => {\r\n // timeout so that the model changes when it's invisible for the user\r\n if ($scope.historyData) $timeout(() => { $scope.entry = $scope.historyData[$scope.testimonialIndex]; }, 200);\r\n });\r\n\r\n $scope.$watch(\"jubiIndex\", () => {\r\n // timeout so that the model changes when it's invisible for the user\r\n if ($scope.jubiData) $timeout(() => { $scope.entryJubi = $scope.jubiData[$scope.jubiIndex]; }, 200);\r\n });\r\n }\r\n\r\n waitTime: number = 15000;\r\n\r\n public init(data : any) {\r\n this.$scope.historyData = data;\r\n if (this.$scope.historyData) this.$scope.entry = this.$scope.historyData[0];\r\n }\r\n\r\n public initJubi(data: any) {\r\n this.$scope.jubiData = data;\r\n if (this.$scope.jubiData) this.$scope.entryJubi = this.$scope.jubiData[0];\r\n }\r\n\r\n public next() {\r\n $(\"#testimonialCarrousel\").parent().removeClass(\"anim-to-right\");\r\n $(\"#testimonialCarrousel\").parent().addClass(\"anim-to-left\");\r\n if (this.$scope.testimonialIndex >= this.$scope.historyData.length - 1) {\r\n this.$scope.testimonialIndex = 0\r\n } else {\r\n this.$scope.testimonialIndex += 1;\r\n }\r\n this.$scope.lastChange = new Date().getTime();\r\n }\r\n\r\n public nextJubi() {\r\n $(\"#jubiCarrousel\").parent().removeClass(\"anim-to-right\");\r\n $(\"#jubiCarrousel\").parent().addClass(\"anim-to-left\");\r\n if (this.$scope.jubiIndex >= this.$scope.jubiData.length - 1) {\r\n this.$scope.jubiIndex = 0;\r\n } else {\r\n this.$scope.jubiIndex += 1;\r\n }\r\n this.$scope.lastChangeJubi = new Date().getTime();\r\n }\r\n\r\n public previous() {\r\n $(\"#testimonialCarrousel\").parent().removeClass(\"anim-to-left\");\r\n $(\"#testimonialCarrousel\").parent().addClass(\"anim-to-right\");\r\n if (this.$scope.testimonialIndex < 1) {\r\n this.$scope.testimonialIndex = this.$scope.historyData.length - 1;\r\n } else {\r\n this.$scope.testimonialIndex -= 1;\r\n }\r\n this.$scope.lastChange = new Date().getTime();\r\n }\r\n\r\n public previousJubi() {\r\n $(\"#jubiCarrousel\").parent().removeClass(\"anim-to-left\");\r\n $(\"#jubiCarrousel\").parent().addClass(\"anim-to-right\");\r\n if (this.$scope.jubiIndex < 1) {\r\n this.$scope.jubiIndex = this.$scope.jubiData.length - 1;\r\n } else {\r\n this.$scope.jubiIndex -= 1;\r\n }\r\n this.$scope.lastChangeJubi = new Date().getTime();\r\n }\r\n\r\n public checkPageChange() {\r\n if (!this.$scope.historyData) return;\r\n if (new Date().getTime() - this.$scope.lastChange > this.waitTime) {\r\n this.next();\r\n this.$scope.lastChange = new Date().getTime();\r\n }\r\n }\r\n\r\n public checkPageChangeJubi() {\r\n if (!this.$scope.jubiData) return;\r\n if (new Date().getTime() - this.$scope.lastChangeJubi > this.waitTime) {\r\n this.nextJubi();\r\n this.$scope.lastChangeJubi = new Date().getTime();\r\n }\r\n }\r\n \r\n }\r\n}","/// \r\n\r\ndeclare var pglob: IPhotometerGlobalVar;\r\n\r\nmodule misc {\r\n 'use strict';\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class HomeCarruselCtrl {\r\n\r\n //private todos: TodoItem[];\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope'\r\n , '$timeout'\r\n , '$interval'\r\n , 'visibilityApiService'\r\n , '$element'\r\n , '$q'\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IHomeCarruselScope\r\n , private $timeout: ng.ITimeoutService\r\n , private $interval: ng.IIntervalService\r\n , private visibilityApiService: navigation.IVisibilityApiService\r\n , private $element: ng.IRootElementService\r\n , private $q: ng.IQService\r\n ) {\r\n\r\n visibilityApiService.subscribeOnVisibilityChange($scope, (ev: ng.IAngularEvent, isHidden: boolean) => {\r\n if (isHidden) {\r\n this.$interval.cancel(this.$scope.interval);\r\n this.$timeout.cancel(this.$scope.timeout);\r\n } else {\r\n this.resetTimer();\r\n }\r\n });\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.currentPageNr = 0;\r\n $scope.currentPreloadNr = 0;\r\n $scope.imageToLoad = 0;\r\n $scope.imageQueue = [];\r\n\r\n $scope.interval = $interval(() => { this.checkPageChange(); }, 200);\r\n\r\n $scope.lastChange = new Date().getTime();\r\n\r\n $scope.maxPageNr = $($element).find(\".carussel > *\").length;\r\n\r\n $scope.$watch('currentPageNr', function (newVal, oldVal) {\r\n if (newVal === -1) {\r\n $scope.currentPageNr = $scope.maxPageNr - 1;\r\n }\r\n var page = ($scope.currentPageNr % $scope.maxPageNr) * 100;\r\n $scope.transform = \"translateX(-\" + page + \"vw)\";\r\n })\r\n\r\n $scope.registerImg = function (index, url) {\r\n $timeout(() => $scope.imageQueue.push({ url: url, index: index, loaded: false, loading: false }));\r\n }\r\n\r\n }\r\n\r\n waitTime: number = 6000;\r\n readonly defaultShortWait: number = 6000;\r\n readonly defaultLongWait: number = 20000;\r\n\r\n resetTimer() {\r\n this.$scope.lastChange = new Date().getTime();\r\n this.waitTime = this.defaultLongWait;\r\n }\r\n\r\n\r\n\r\n getImageByIndex(index: number): { url: string, index: number, loaded: boolean, loading: boolean } {\r\n var i = this.$scope.imageQueue.filter(im => im.index === index);\r\n if (i.length > 0) return i[0];\r\n return null;\r\n }\r\n\r\n preloadImg(index: number) {\r\n if (index > this.$scope.currentPageNr + 1) return;\r\n var img = this.getImageByIndex(index);\r\n if (!img || img.loaded) {\r\n this.preloadImg(index + 1);\r\n return;\r\n }\r\n\r\n\r\n if (img.loading) return;\r\n if (!img) return;\r\n\r\n const image = new Image();\r\n image.onload = () => {\r\n $(this.$element).find(\".carussel > *\")[img.index].setAttribute(\"style\", \"background-image: url(\" + img.url + \");\");\r\n img.loaded = true;\r\n this.$scope.imageToLoad++;\r\n this.preloadImg(index + 1);\r\n }\r\n image.src = img.url;\r\n img.loading = true;\r\n }\r\n\r\n checkPageChange() {\r\n this.preloadImg(this.$scope.currentPageNr);\r\n if (new Date().getTime() - this.$scope.lastChange > this.waitTime) {\r\n var desiredPage = this.$scope.currentPageNr + 1;\r\n if (!this.getImageByIndex(desiredPage) || this.getImageByIndex(desiredPage).loaded) {\r\n if (this.waitTime == this.defaultLongWait) this.waitTime = this.defaultShortWait;\r\n this.$scope.currentPageNr++;\r\n this.$scope.lastChange = new Date().getTime();\r\n this.preloadImg(this.$scope.currentPageNr + 1);\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\nmodule misc {\r\n\r\n jsonDataDirective.$inject = [];\r\n export function jsonDataDirective(): ng.IDirective {\r\n\r\n\r\n return {\r\n restrict: 'A',\r\n scope: { \r\n data: '=?', \r\n onLoad: '&',\r\n },\r\n link: function (scope: any, element: ng.IAugmentedJQuery, attr: ng.IAttributes, ctrl) { \r\n scope.data = JSON.parse(element[0].innerHTML); \r\n if(scope.onLoad){\r\n scope.onLoad({data : scope.data});\r\n } \r\n }\r\n }\r\n }\r\n\r\n}\r\n","/// \r\n\r\nmodule misc {\r\n\r\n imageLazyLoadDirective.$inject = ['$parse'];\r\n export function imageLazyLoadDirective(\r\n $parse: ng.IParseService\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope: any, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n const observer = new IntersectionObserver(loadImg, { rootMargin : '500px' });\r\n const img = angular.element(element)[0];\r\n observer.observe(img);\r\n \r\n function loadImg(changes) {\r\n changes.forEach(change => {\r\n if (change.intersectionRatio > 0) {\r\n change.target.src = attr.imageLazyLoad;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule misc {\r\n\r\n carrouselPreloaderDirective.$inject = [];\r\n\r\n export function carrouselPreloaderDirective(\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope: any, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n var imgDiv = angular.element(element)[0]; \r\n scope.registerImg($(element).parent().children(\"div\").index(element), imgDiv.getAttribute(\"preloader-bg\"));\r\n //img.onload = () => {\r\n // imgDiv.setAttribute(\"style\", \"background-image: url(\\\"\" + imgDiv.getAttribute(\"preloader-bg\") + \"\\\")\"); \r\n // imgDiv.removeAttribute(\"preloader-bg\");\r\n //}\r\n }\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule misc {\r\n\r\n youTubeOverlayDirective.$inject = ['$mdDialog', ];\r\n \r\n\r\n export function youTubeOverlayDirective(\r\n $mdDialog : ng.material.IDialogService\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope: any, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n \r\n var toolbar: string = \"
\";\r\n var containerleft: string = \"
\";\r\n var iframe = \"\";\r\n var containerright: string = \"
\";\r\n\r\n \r\n element.on(\"click\", (ev: JQueryEventObject) => {\r\n\r\n iframe = iframe.replace(\"VIDEOID\", attr.youTubeOverlay);\r\n \r\n\r\n $mdDialog.show({\r\n controller: () => { },\r\n scope: angular.extend(scope.$new(), {\r\n close: function () { $mdDialog.hide(); }\r\n }),\r\n template: toolbar + containerleft + iframe + containerright,\r\n //parent: element,\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n },\r\n })\r\n }); \r\n }\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule misc {\r\n 'use strict';\r\n\r\n EditableContentDirective.$inject = [\r\n //'$scope', \r\n //'$location', \r\n //'$anchorScroll', \r\n //'$window', \r\n '$http',\r\n '$timeout',\r\n 'anchorNavService',\r\n 'pageMetaService',\r\n //'$mdDialog',\r\n //'$templateCache',\r\n '$injector',\r\n '$sce',\r\n ];\r\n\r\n export function EditableContentDirective(\r\n $http: ng.IHttpService,\r\n $timeout: ng.ITimeoutService,\r\n anchorNavService : navigation.IAnchorNavService, \r\n pageMetaService: navigation.IPageMetaService,\r\n $injector : ng.auto.IInjectorService,\r\n $sce: ng.ISCEService,\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n category: '@',\r\n useRouteParam: '@',\r\n name: '@',\r\n contentFormat: '@',\r\n addEditorButton: '@',\r\n },\r\n template: ``,\r\n transclude: true, // Enable transclusion\r\n\r\n\r\n \r\n link: function (scope: IEditableContentScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.useRouteParamValue = false;\r\n if (attr.hasOwnProperty('useRouteParam')) { scope.useRouteParamValue = true; }\r\n if (scope.useRouteParam === undefined) { scope.useRouteParamValue = false; }\r\n\r\n\r\n //get the wait skeleton, if available \r\n let waitSkel = element.prev();\r\n \r\n if (!waitSkel.hasClass(\"skeleton\")) {\r\n //if we can edit, it's the uncle.\r\n waitSkel = element.parent().prev();\r\n }\r\n\r\n if (waitSkel.hasClass(\"skeleton\")) {\r\n scope.skeletonEl = waitSkel;\r\n waitSkel.hide()\r\n }\r\n\r\n //content was edited.\r\n if ($injector.has(\"editorService\")) {\r\n var editor: editor.IEditorService = $injector.get('editorService');\r\n editor.subscribeOnSaveContent(scope, (event: ng.IAngularEvent, filter: editor.EditorFilter, data: string) => {\r\n //check filter \r\n let f = pageMetaService.getContentFilterFor(scope.name, scope.useRouteParamValue, scope.category);\r\n\r\n if (filter.FilterString1 != null && filter.FilterString1 != f.FilterString1) return;\r\n if (filter.FilterString2 != null && filter.FilterString2 != f.FilterString2) return;\r\n if (filter.FilterString3 != null && filter.FilterString3 != f.FilterString3) return;\r\n\r\n if (filter.Filter1 != null && filter.Filter1 != f.Filter1) return;\r\n if (filter.Filter2 != null && filter.Filter2 != f.Filter2) return;\r\n if (filter.Filter3 != null && filter.Filter3 != f.Filter3) return;\r\n\r\n if (filter.Category != f.Category) return;\r\n \r\n element.html(data);\r\n \r\n });\r\n }\r\n\r\n anchorNavService.subscribeOnLocationChanged(scope, (event: ng.IAngularEvent, re: IRouteEntry) => {\r\n scope.skeletonTimeout = $timeout(function() {\r\n if (scope.skeletonEl) scope.skeletonEl.show();\r\n }, 400);\r\n element.html(\"\");\r\n scope.load(scope.name, scope.category, scope.useRouteParamValue);\r\n });\r\n\r\n scope.load = (name : string, category : number, useRouteParameter : boolean) => {\r\n let filter = pageMetaService.getContentFilterFor(name, useRouteParameter, category);\r\n\r\n var prm = {};\r\n prm[\"Category\"] = filter.Category;\r\n prm[\"Src\"] = pglob.RouteData.BasePageUrl;\r\n\r\n if (filter.IsLanguageIndifferent === true) { prm[\"IsLanguageIndifferent\"] = true; }\r\n\r\n if (typeof filter.ContentId !== 'undefined') { prm[\"ContentId\"] = filter.ContentId }\r\n\r\n if (typeof filter.Filter1 !== 'undefined') { prm[\"Filter1\"] = filter.Filter1; }\r\n if (typeof filter.Filter2 !== 'undefined') { prm[\"Filter2\"] = filter.Filter2; }\r\n if (typeof filter.Filter3 !== 'undefined') { prm[\"Filter3\"] = filter.Filter3; }\r\n\r\n if (filter.FilterString1) { prm[\"FilterString1\"] = filter.FilterString1; } //no encodeURIComponent because we use prm => otherwise double encoding\r\n if (filter.FilterString2) { prm[\"FilterString2\"] = filter.FilterString2; }\r\n if (filter.FilterString3) { prm[\"FilterString3\"] = filter.FilterString3; }\r\n\r\n //var prm = this.getFilterParams(data);\r\n //prm.desiredContentTypeIfNew = desiredTypeIfNew ? desiredTypeIfNew.charCodeAt(0) : null;\r\n\r\n let hl = pageMetaService.getPageMeta(\"hl\");\r\n\r\n return $http({\r\n method: \"GET\"\r\n , url: `/api/${pglob.RouteData.CurrentLanguage.hl}/Content/Get`\r\n , headers: { 'Content-Type': 'text/html' }\r\n , params: prm\r\n }).then((response) => {\r\n if (response && response.data) {\r\n element.html(response.data); \r\n }\r\n //var trustedHtml = $sce.trustAsHtml(response.data.ContentHtml);\r\n //element.html(trustedHtml);\r\n }).catch((response) => {\r\n if (response.status != 404) {\r\n console.error(`${response.status}: ${response.statusText}`);\r\n }\r\n element.html(\"\");\r\n }).finally(() => {\r\n $timeout.cancel(scope.skeletonTimeout);\r\n if (scope.skeletonEl) scope.skeletonEl.hide();\r\n });\r\n }\r\n \r\n\r\n\r\n }\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule misc {\r\n 'use strict';\r\n\r\n export interface IAdvancedNumberFilter extends ng.IFilterService {\r\n (name: 'advancedNumber'): (value:number, divisor: number) => string;\r\n }\r\n\r\n\r\n export function AdvancedNumberFilter() {\r\n\r\n return function(value:number, divisor: number){\r\n var resources = {\r\n \"Femto\": \"f\",\r\n \"Giga\": \"G\",\r\n \"Kilo\": \"K\",\r\n \"Mega\": \"M\",\r\n \"Micro\": \"µ\",\r\n \"Mili\": \"m\",\r\n \"Nano\": \"n\",\r\n \"Peta\": \"P\",\r\n \"Pico\": \"p\",\r\n \"Tera\": \"T\"};\r\n\r\n var postfix = [ resources.Peta, resources.Tera, resources.Giga, resources.Mega, resources.Kilo, '', resources.Mili, resources.Micro, resources.Nano, resources.Pico, resources.Femto ];\r\n\r\n if(typeof value == 'undefined') return '';\r\n\r\n divisor = divisor || 1000;\r\n\r\n var index = 5;\r\n\r\n while (value > divisor && value != 0) {\r\n value = value / divisor;\r\n index--;\r\n }\r\n\r\n while (value < 1 && value != 0) {\r\n value = value * divisor;\r\n index++;\r\n }\r\n\r\n var fixed = 2;\r\n if (value > 9.99) fixed = 1;\r\n if (value > 99.9) fixed = 0;\r\n if (value > 999) fixed = 0;\r\n\r\n\r\n return value.toFixed(fixed) + ' ' + postfix[index];\r\n }\r\n }\r\n\r\n\r\n}","/// \r\n\r\n\r\n\r\nmodule library {\r\n\r\n export class LanguageVariant {\r\n constructor(\r\n public DocumentFileSrcID : number, \r\n public Language : string, \r\n public Revisions : Revision[]\r\n ) { }\r\n }\r\n\r\n export class Revision {\r\n constructor(\r\n public DocumentFileSrcRevID : number, \r\n public DocumentFileSrcRevName : string, \r\n public Level : number,\r\n public ReleaseDate : Date,\r\n public FileType : FileType[]\r\n ) { }\r\n }\r\n\r\n export class FileType {\r\n constructor(\r\n public DocumentRevDestID : number, \r\n public FileTypeDesc : string, \r\n public DocumentRev : DocumentRev\r\n ) { }\r\n }\r\n\r\n\r\n export interface ILibraryDetailCtrlScope extends ng.IScope {\r\n vm : LibraryDetailCtrl;\r\n meta : navigation.IPageMetaServiceFunction;\r\n\r\n error : boolean;\r\n \r\n settings : {\r\n view: string;\r\n };\r\n\r\n data : DocumentDetailServiceData;\r\n requestOnGoing : boolean;\r\n revIdMissing : boolean;\r\n }\r\n\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n\r\n export class DocumentCategory {\r\n constructor(\r\n public DocumentCategoryID : number,\r\n public DocumentCategoryName : string,\r\n public Types : DocumentType[]\r\n ) { }\r\n }\r\n\r\n export class DocumentType {\r\n constructor(\r\n public DocumentTypeID : number,\r\n public DocumentTypeName : string,\r\n public Documents : Document[]\r\n ) { }\r\n }\r\n\r\n export class Document {\r\n constructor(\r\n public DocumentID : number,\r\n public DocumentTitle : string,\r\n public DocumentTypeName : string,\r\n public DocumentContentName : string,\r\n public DocumentCategoryName : string,\r\n public SortOrder : number,\r\n public Revisions : DocumentRev[]\r\n ) { }\r\n }\r\n\r\n export class DocumentRev {\r\n constructor(\r\n public DocumentFileSrcID : number,\r\n public DocumentFileSrcRevID : number,\r\n public DocumentRevDestID : number,\r\n public DocumentRevDestSize : number,\r\n public DocumentRevDestName : string,\r\n public FileTypeExt : string,\r\n public FileTypeName: string,\r\n public FileTypeIsImage: boolean,\r\n public LanguageCode : string,\r\n public DocumentFileSrcName : string,\r\n public DocumentFileSrcRevName : string,\r\n public DocumentFullFileName : string,\r\n public DocumentRevDestHeightPx : string,\r\n public DocumentRevDestWidthPx : string,\r\n public Replaced : boolean,\r\n public Level : number,\r\n public ReleaseDate : Date,\r\n public DocumentFileSrcRevExpirationDate : Date,\r\n public DocumentFileSrcRevValidityDate : Date,\r\n public lastErrataDstDate : Date,\r\n public lastErrataDstID : number,\r\n public DocumentStateTypeName : number\r\n ) { }\r\n }\r\n\r\n export class ReplacedByData {\r\n constructor(\r\n public DocumentFileSrcRevID : string,\r\n public DocumentFileSrcName : string\r\n ) { }\r\n }\r\n\r\n export class DocumentCrossReferenceType {\r\n constructor(\r\n public DocumentCrossReferenceTypeID : number,\r\n public DocumentCrossReferenceTypeName : string,\r\n public Revisions : DocumentCrossReferenceRevDetails[]\r\n ) { }\r\n }\r\n\r\n export class DocumentCrossReferenceRevDetails {\r\n constructor(\r\n public DocumentFileSrcRevID : number,\r\n public DocumentFileSrcName : string,\r\n public DocumentTitle : string\r\n ) { }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n\r\n export class Language {\r\n constructor(\r\n public LanguageAlternative :number,\r\n public LanguageCode :string,\r\n public LanguageID:number,\r\n public LanguageIcon:string,\r\n public LanguageName:string,\r\n public LanguageSiteCode:string\r\n ) { }\r\n }\r\n\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n \r\n export class ServiceData {\r\n constructor(\r\n public Documents : DocumentCategory[],\r\n public Languages : Language[]\r\n ) { }\r\n }\r\n\r\n}","/// \r\n\r\nmodule library {\r\n\r\n export class XYDimensions {\r\n constructor(\r\n public x: any,\r\n public y: any\r\n ) { }\r\n }\r\n\r\n export class ImageTemplate {\r\n constructor(\r\n public description: string,\r\n public megapixel: number,\r\n public sizeUnit: string,\r\n public dpi: number\r\n ) { }\r\n }\r\n}","/// \r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n \r\n\r\n var searchRevision = (doc: Document, hl?: string, fileType?: String): DocumentRev => {\r\n var ds = doc.Revisions.filter((doc, index, array) => {\r\n return doc.LanguageCode == hl;\r\n });\r\n if (ds.length > 0) return ds[0];\r\n return null;\r\n }\r\n\r\n /**\r\n * Services that persists and retrieves TODOs from localStorage.\r\n */\r\n export class LibraryService implements ILibraryService {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n '$http',\r\n 'anchorNavService',\r\n '$mdDialog',\r\n '$filter', \r\n '$q', \r\n ]; \r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $http: ng.IHttpService,\r\n private anchorNavService: navigation.IAnchorNavService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $filter : library.IUniqueFilter,\r\n public $q: ng.IQService,\r\n ) {}\r\n\r\n\r\n public loadDocumentsByProduct(re : IRouteEntry, contentId?:number, categoryId? : number) : ng.IHttpPromise { \r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Document/ByProduct\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { \"contentId\" : contentId, 'categoryId' : categoryId }\r\n , data : re.RouteParameterStack\r\n }).then((response : {data: ServiceData}) : any => {\r\n //convert Releasedate\r\n response.data.Documents.forEach((dc) => dc.Types.forEach((t) => t.Documents.forEach((d) => d.Revisions.forEach((rev) => {\r\n if (rev.ReleaseDate) rev.ReleaseDate = new Date(rev.ReleaseDate); //we recieve that as string, have to convert it.\r\n }))));\r\n return response;\r\n });\r\n } \r\n \r\n \r\n public loadDocumentDetails(data: DocumentDetailServiceData, fileSrcRevID : number) : ng.IPromise { \r\n\r\n var deferred = this.$q.defer();\r\n \r\n //Revision already loaded?\r\n if (data && data.Document && data.Document.Revisions &&\r\n data.Document.Revisions.filter((rev) => { return rev.DocumentFileSrcRevID == fileSrcRevID }).length > 0) {\r\n this.buildTree(data, fileSrcRevID);\r\n \r\n deferred.resolve(data);\r\n return deferred.promise;\r\n }\r\n \r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Document/Details\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n fileSrcRevID: fileSrcRevID\r\n }\r\n }).then( (response : {data: DocumentDetailServiceData}) : any => {\r\n response.data.Document.Revisions.forEach((rev) => {\r\n if (rev.ReleaseDate) rev.ReleaseDate = new Date(rev.ReleaseDate); //we recieve that as string, have to convert it.\r\n if (rev.DocumentFileSrcRevExpirationDate) rev.DocumentFileSrcRevExpirationDate = new Date(rev.DocumentFileSrcRevExpirationDate);\r\n if (rev.DocumentFileSrcRevValidityDate) rev.DocumentFileSrcRevValidityDate = new Date(rev.DocumentFileSrcRevValidityDate);\r\n if (rev.lastErrataDstDate)rev.lastErrataDstDate = new Date(rev.lastErrataDstDate);\r\n \r\n });\r\n this.buildTree(response.data, fileSrcRevID);\r\n deferred.resolve(response.data);\r\n }).catch((err) => {\r\n deferred.reject(err);\r\n });\r\n\r\n return deferred.promise; \r\n }\r\n\r\n \r\n public saveDocumentSortOrder(re : IRouteEntry, renumTo, sortOrder: number[], type : DocumentType ) : ng.IHttpPromise { \r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Document/SaveSortOrder\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n }\r\n , data: {\r\n documentIds : sortOrder,\r\n type : type,\r\n renumTo : renumTo,\r\n rp :re.RouteParameterStack, \r\n }\r\n });\r\n }\r\n\r\n public openDialog(revid: number, parentScp: any, ev?: MouseEvent) {\r\n if (ev) ev.preventDefault();\r\n\r\n this.anchorNavService.search(\"revid\", revid);\r\n this.$mdDialog.show({\r\n controller: 'LibraryDetailCtrl',\r\n templateUrl: 'library/LibraryDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n locals: {\r\n revId: revid,\r\n parentScope: parentScp\r\n },\r\n }).finally(() => {\r\n this.anchorNavService.search({ \"revid\": null });\r\n });\r\n }\r\n\r\n \r\n\r\n \r\n public getDefaultRevision(doc : Document, hl? : string, fileType? : String) : DocumentRev {\r\n if (!doc) return null;\r\n var hl = hl || pglob.RouteData.CurrentLanguage.hl;\r\n\r\n var ds : DocumentRev; \r\n ds = searchRevision(doc, hl, fileType);\r\n if (ds) return ds;\r\n\r\n //otherwise the english one\r\n if (hl != \"E\") {\r\n var ds = searchRevision(doc, \"E\");\r\n if (ds) return ds;\r\n }\r\n\r\n //otherwise the one without language\r\n if (hl != \"X\") {\r\n var ds = searchRevision(doc, \"X\");\r\n if (ds) return ds;\r\n }\r\n\r\n //otherwise the first one \r\n var ds1 : library.DocumentRev = doc.Revisions[0];\r\n if (ds1) return ds1;\r\n\r\n return null;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Builds a tree like Sprache[].Version[].FileType[] that is used to make the 3 filtering drop downs.\r\n * @param fileSrcRevID (number) the currently selected FileSrcRev to mark active.\r\n */\r\n private buildTree(data: DocumentDetailServiceData, fileSrcRevId : number) {\r\n //build tree \r\n\r\n //DocumentFileSrcID => Sprache\r\n //DocumentFileSrcRevID => Version\r\n //DocumentFileRevDstID => DateiTyp\r\n\r\n data.LanguageVariants = [];\r\n\r\n var fileSrc : {[id : string] : LanguageVariant} = {};\r\n var fileRevSrc : {[id : string] : Revision} = {};\r\n var fileType : {[id : string] : FileType} = {};\r\n\r\n data.Document.Revisions.forEach((rev) => {\r\n //sprachvarianten\r\n if (!fileSrc[rev.DocumentFileSrcID]) {\r\n var variant = {\r\n DocumentFileSrcID : rev.DocumentFileSrcID, \r\n Language : this.getDocumentLanguage(data, rev), \r\n Revisions : []\r\n };\r\n data.LanguageVariants.push(variant);\r\n fileSrc[rev.DocumentFileSrcID] = variant;\r\n }\r\n\r\n //revision\r\n if (!fileRevSrc[rev.DocumentFileSrcRevID]) {\r\n var revision = {\r\n DocumentFileSrcRevID: rev.DocumentFileSrcRevID, \r\n DocumentFileSrcRevName : rev.DocumentFileSrcRevName, \r\n Level : rev.Level, \r\n ReleaseDate : rev.ReleaseDate,\r\n FileType : []\r\n };\r\n fileSrc[rev.DocumentFileSrcID].Revisions.push(revision);\r\n fileRevSrc[rev.DocumentFileSrcRevID] = revision;\r\n }\r\n\r\n //filetype\r\n //compound key becaue of document which are in progress and not yet have a RevDestId (=Null)\r\n var key = \"\" + rev.DocumentFileSrcRevID + \"-\" + rev.DocumentRevDestID;\r\n if (!fileType[key]) {\r\n var filetype = {\r\n DocumentRevDestID : rev.DocumentRevDestID, \r\n FileTypeDesc : rev.DocumentRevDestID ? rev.FileTypeExt + \" (\" + rev.FileTypeName + \")\" : \"-\", \r\n DocumentRev : rev\r\n };\r\n if (!rev.DocumentRevDestName) filetype.FileTypeDesc = rev.FileTypeName; //papiervorlage\r\n fileRevSrc[rev.DocumentFileSrcRevID].FileType.push(filetype);\r\n fileType[key] = filetype;\r\n }\r\n \r\n if (rev.DocumentFileSrcRevID == fileSrcRevId) data.selectedLanguageVariant = fileSrc[rev.DocumentFileSrcID];\r\n if (rev.DocumentFileSrcRevID == fileSrcRevId) data.selectedRevision = fileRevSrc[rev.DocumentFileSrcRevID];\r\n if (rev.DocumentFileSrcRevID == fileSrcRevId) data.selectedFileType = fileType[key];\r\n });\r\n\r\n data.Revision = data.selectedFileType.DocumentRev;\r\n }\r\n\r\n \r\n \r\n private getDocumentLanguage(data: DocumentDetailServiceData, rev : DocumentRev) : string {\r\n if (!data.Document || !rev) return;\r\n var revs = data.Document.Revisions.filter((doc) => { \r\n return doc.DocumentFileSrcID == rev.DocumentFileSrcID;\r\n })\r\n\r\n revs = this.$filter('unique')(revs, \"LanguageCode\");\r\n\r\n var lng = \"\"\r\n revs.forEach((rev, i, arr) => {\r\n lng += this.getLanguage(data, rev.LanguageCode).LanguageName + (arr.length - 1 != i ? \", \" : \"\");\r\n });\r\n return lng;\r\n }\r\n\r\n private getLanguage(data: DocumentDetailServiceData, hlCode : String):Language {\r\n if (!data.Languages) return null;\r\n var hl = data.Languages.filter(function (item : Language, index :number, array : Language[]) {\r\n return item.LanguageCode == hlCode;\r\n });\r\n if (hl) return hl[0];\r\n return null;\r\n }\r\n\r\n \r\n }\r\n}","/// \r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n\r\n /**\r\n * Services that persists and retrieves TODOs from localStorage.\r\n */\r\n export class ToolboxService implements IToolboxService {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n '$http',\r\n 'anchorNavService',\r\n '$mdDialog',\r\n '$filter', \r\n '$q', \r\n ];\r\n\r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $http: ng.IHttpService,\r\n private anchorNavService: navigation.IAnchorNavService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $filter : library.IUniqueFilter,\r\n public $q: ng.IQService,\r\n ) {}\r\n\r\n\r\n public getProducts(): ng.IHttpPromise {\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Product/GetAll\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n onlyListed: true\r\n }\r\n });\r\n }\r\n\r\n \r\n }\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n export class LibraryDimensionService implements ILibraryDimensionService {\r\n\r\n public static $inject = [\r\n '$timeout',\r\n 'debounce',\r\n '$http',\r\n '$rootScope',\r\n '$analytics',\r\n 'pageMetaService',\r\n '$q',\r\n 'CacheFactory',\r\n ];\r\n\r\n private cacheName : string = \"imageDimension\"; //use different cache with capacity, because we can't store anything right now.\r\n\r\n constructor(\r\n private $timeout: ng.ITimeoutService,\r\n private debounce: navigation.IDebounceService,\r\n private $http: ng.IHttpService,\r\n private $rootScope: ng.IRootScopeService,\r\n private $analytics: angulartics.IAnalyticsService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $q: ng.IQService,\r\n private CacheFactory: CacheFactory.ICacheFactory\r\n ) {\r\n\r\n }\r\n \r\n \r\n private getOrCreateCache() : CacheFactory.ICache {\r\n if (!this.CacheFactory.get(this.cacheName)) {\r\n this.CacheFactory.createCache(this.cacheName, {\r\n capacity: 20, \r\n storageMode: 'sessionStorage', // This cache will use `sessionStorage`.\r\n });\r\n }\r\n return this.CacheFactory.get(this.cacheName);\r\n }\r\n\r\n\r\n public getDimensions(revId: number): ng.IHttpPromise {\r\n if (revId == null) return;\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/PictureLibrary/GetImageDimension\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n revId: revId\r\n }\r\n }).then((response: { data: XYDimensions }) : any => {\r\n return response;\r\n })\r\n }\r\n\r\n public getPictureTemplateList(lng: string): ng.IHttpPromise {\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/PictureLibrary/GetPictureTemplateList\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n lng: lng\r\n }\r\n }).then((response) : ng.IHttpResponse => {\r\n return response;\r\n })\r\n }\r\n\r\n\r\n public getImageURL(revisionid: number, x: number, y: number): ng.IPromise {\r\n \r\n var cacheKey = revisionid + \"-\" + x + \"-\" + y;\r\n \r\n var deferred = this.$q.defer();\r\n var dataCache : CacheFactory.ICache = this.getOrCreateCache();\r\n\r\n //in cache?\r\n if (dataCache.get(cacheKey)) {\r\n deferred.resolve(dataCache.get(cacheKey));\r\n return deferred.promise;\r\n }\r\n \r\n this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/PictureLibrary/GetImageURL\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n revisionid: revisionid,\r\n x: x,\r\n y: y\r\n }\r\n }).then((response: { data: string[] }) :any => {\r\n dataCache.put(cacheKey, response.data);\r\n deferred.resolve(response.data);\r\n });\r\n \r\n return deferred.promise; \r\n }\r\n \r\n }\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n\r\n export function ByDocumentFilter() {\r\n\r\n return function(obj : any[], doc : Document, property : string) { //items, search\r\n obj = obj || [];\r\n var out = [];\r\n\r\n obj.forEach((o : any) => {\r\n doc.Revisions.forEach((rev: DocumentRev) => {\r\n if (o[property] == rev[property]) {\r\n out.push(o);\r\n }\r\n }); \r\n });\r\n return out;\r\n }\r\n }\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n export interface IUrlEncodeFilter extends ng.IFilterService {\r\n (name: 'urlencode'): (input : T[], key : string) => T[];\r\n }\r\n\r\n UrlEncodeFilter.$inject = [];\r\n export function UrlEncodeFilter() {\r\n\r\n return function(input : string) : string { \r\n if (!input) return \"\";\r\n return encodeURIComponent(input); \r\n }\r\n }\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n export interface IUniqueFilter extends ng.IFilterService {\r\n (name: 'unique'): (input : T[], key : string) => T[];\r\n }\r\n\r\n UniqueFilter.$inject = ['$parse'];\r\n export function UniqueFilter($parse : ng.IParseService) {\r\n\r\n return function(input : T[], key : string) : T[] { \r\n if (!input) return;\r\n var keyFunc = $parse(key);\r\n var unique = {};\r\n var uniqueList = [];\r\n for(var i = 0; i < input.length; i++){\r\n if(typeof unique[keyFunc(input[i])] == \"undefined\"){\r\n unique[keyFunc(input[i])] = \"\";\r\n uniqueList.push(input[i]);\r\n }\r\n }\r\n return uniqueList;\r\n }\r\n }\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n export function MinsSecFilter() {\r\n return function (sec, precision) {\r\n if (isNaN(parseFloat(sec)) || !isFinite(sec)) return '-';\r\n if (typeof precision === 'undefined') precision = 1;\r\n if (sec < 1) return sec.toFixed(precision) + ' s';\r\n var units = ['sec', 'min'],\r\n number = Math.floor(Math.log(sec) / Math.log(60));\r\n return (sec / Math.pow(60, Math.floor(number))).toFixed(precision) + ' ' + units[number];\r\n }\r\n }\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n \r\n OpenDocumentDetailDirective.$inject = ['libraryService'];\r\n export function OpenDocumentDetailDirective(libraryService: library.ILibraryService): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n revId : '=',\r\n },\r\n link: function (scope: IOpenDocumentDetailDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n element.on('click', function () {\r\n libraryService.openDialog(attr.openDocumentDetail, scope, null);\r\n }); \r\n }\r\n }\r\n }\r\n} \r\n","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n LibraryImageResizeDirective.$inject = [\r\n '$timeout',\r\n '$location',\r\n 'libraryDimensionService',\r\n 'pageMetaService',\r\n ];\r\n\r\n\r\n export function LibraryImageResizeDirective(\r\n $timeout: ng.ITimeoutService,\r\n $location: ng.ILocationService,\r\n libraryDimensionService: ILibraryDimensionService,\r\n pageMetaService: navigation.IPageMetaService\r\n ): ng.IDirective {\r\n\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n data: '=libraryData',\r\n },\r\n templateUrl: 'library/LibraryImageResizeDirective',\r\n link: function (scope: ILibraryImageResizeDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n scope.advancedDetails = false;\r\n scope.RevId = $location.search()['revid'];\r\n scope.dimensions = { x: 0, y: 0 };\r\n scope.input = { x: 0, y: 0 };\r\n\r\n scope.megaPixelLimit = 0;\r\n scope.maxDimensions = { x: 0, y: 0 };\r\n\r\n\r\n scope.Zentimeter = { x: 0, y: 0 };\r\n scope.Inch = { x: 0, y: 0 };\r\n scope.Pixel = { x: 0, y: 0 };\r\n scope.dpi = 0;\r\n\r\n scope.ONEINCH = 2.54;\r\n\r\n scope.quality = { web: 0, mail: 0, druck: 0, plakat: 0, plakata1: 0 };\r\n\r\n scope.$watch('data.Revision', (newVal, oldVal) => {\r\n if (newVal != null) {\r\n scope.getDimensions();\r\n scope.getPictureTemplateList();\r\n }\r\n })\r\n\r\n scope.$watch('unit', (newVal, oldVal) => {\r\n if (newVal !== oldVal) { scope.update(); };\r\n });\r\n\r\n scope.$watch('dpi', (newVal: string, oldVal: string) => {\r\n if (newVal !== oldVal) {\r\n var parsed = parseFloat(newVal);\r\n if (newVal === '' || isNaN(parsed) || parsed < 10) return;\r\n\r\n var x = scope.input.x;\r\n if (scope.unit == 'cm') { x = scope.input.x * scope.dpi / scope.ONEINCH; }\r\n if (scope.unit == 'in') { x = scope.input.x * scope.dpi; }\r\n\r\n scope.setPixelX(x);\r\n scope.setPixelY(x / scope.dimensions.x * scope.dimensions.y);\r\n\r\n scope.update();\r\n };\r\n });\r\n\r\n scope.$watch('input.x', (newVal: string, oldVal: string) => {\r\n if (newVal !== oldVal) {\r\n var parsed = parseFloat(newVal);\r\n if (newVal === '' || isNaN(parsed) || parsed < 1) return;\r\n\r\n var xRaw = scope.input.x,\r\n xInch = xRaw\r\n , xPx;\r\n\r\n if (scope.unit == 'cm') { xInch = xRaw / scope.ONEINCH; } else { xInch = xRaw; }\r\n\r\n if (scope.unit != 'px') {\r\n xPx = Math.round(xInch * scope.dpi);\r\n if (xPx > scope.dimensions.x) {\r\n scope.dpi = Math.round(scope.dimensions.x / xInch);\r\n }\r\n } else {\r\n xPx = xRaw; //pixel as input\r\n }\r\n\r\n scope.setPixelX(xPx);\r\n scope.setPixelY(xPx / scope.dimensions.x * scope.dimensions.y);\r\n\r\n scope.update();\r\n }\r\n });\r\n\r\n scope.$watch('input.y', (newVal: string, oldVal: string) => {\r\n if (newVal !== oldVal) {\r\n var parsed = parseFloat(newVal);\r\n if (newVal === '' || isNaN(parsed) || parsed < 1) return;\r\n\r\n var yRaw = scope.input.y,\r\n yInch = yRaw\r\n , yPx;\r\n\r\n if (scope.unit == 'cm') { yInch = yRaw / scope.ONEINCH; }\r\n\r\n if (scope.unit != 'px') {\r\n yPx = Math.round(yInch * scope.dpi);\r\n if (yPx > scope.dimensions.y) {\r\n scope.dpi = Math.round(scope.dimensions.y / yInch);\r\n }\r\n } else {\r\n yPx = yRaw; //pixel as input\r\n }\r\n\r\n scope.setPixelY(yPx);\r\n scope.setPixelX(yPx / scope.dimensions.y * scope.dimensions.x);\r\n\r\n scope.update();\r\n }\r\n });\r\n\r\n scope.QAL_SYMBOL = ['--', '-', 'o', '+', '++'];\r\n scope.QAL_COLOR = ['#00BF00', '#FFC000', '#BF0000'];\r\n\r\n scope.qualFunctions = {\r\n Web: (x, y, dpi) => {\r\n return x * y / 1000000 < 0.4 ? 0 :\r\n x * y / 1000000 < 1.1 ? 1 : 2;\r\n }\r\n , Mail: (x, y, dpi) => {\r\n return x * y / 1000000 < 0.4 ? -1 :\r\n x * y / 1000000 < 1.8 ? 0 :\r\n x * y / 1000000 < 2.6 ? 1 : 2;\r\n }\r\n , Druck: (x, y, dpi) => {\r\n return dpi < 150 ? -2 :\r\n dpi < 300 ? -1 : 0\r\n }\r\n , Plakat: (x, y, dpi) => {\r\n return dpi < 150 ? -1 : 0;\r\n }\r\n , PlakatA1: (x, y, dpi) => {\r\n return dpi < 75 ? -1 : 0;\r\n }\r\n }\r\n\r\n scope.qualTooltips = {\r\n \"++\": () => {\r\n return (scope.meta('hl') == 'D') ? \"Bild zu gross\" : \"Image too big\";\r\n }\r\n , \"+\": () => {\r\n return (scope.meta('hl') == 'D') ? \"Bild eher zu gross\" : \"Image rather too big\";\r\n }\r\n , \"o\": () => {\r\n return (scope.meta('hl') == 'D') ? \"Ideal\" : \"Perfect\";\r\n }\r\n , \"-\": () => {\r\n return (scope.meta('hl') == 'D') ? \"Bild eher zu klein\" : \"Image rather too small\";\r\n }\r\n , \"--\": () => {\r\n return (scope.meta('hl') == 'D') ? \"Bild zu klein\" : \"Image too small\";\r\n }\r\n }\r\n\r\n\r\n scope.getDimensions = () => {\r\n if (scope.data.Revision && scope.data.Revision.DocumentRevDestID) { \r\n libraryDimensionService.getDimensions(scope.data.Revision.DocumentRevDestID).then((response) => {\r\n scope.dimensions = response.data;\r\n scope.applyTemplate();\r\n })\r\n }\r\n }\r\n\r\n scope.getPictureTemplateList = () => {\r\n if (scope.meta('hl') != null) {\r\n libraryDimensionService.getPictureTemplateList(scope.meta('hl')).then((response) => {\r\n scope.templates = response.data;\r\n // resolve max megapixel limit\r\n scope.megaPixelLimit = 0;\r\n scope.templates.forEach( (el, i, arr) => {\r\n if (el.megapixel < 0) scope.megaPixelLimit = 99999;\r\n scope.megaPixelLimit = Math.max(el.megapixel, scope.megaPixelLimit);\r\n });\r\n scope.selectedtemplate = response.data[0]; // \"{\"description\":\"Mail\",\"megapixel\":1.1,\"sizeUnit\":\"px\",\"dpi\":72}\"\r\n\r\n scope.applyTemplate();\r\n })\r\n }\r\n }\r\n\r\n var requests : { [ id : string ] : ng.IPromise } = {};\r\n\r\n scope.getImageURL = (revisionid, x, y) => {\r\n\r\n if (revisionid != null && x != null && y != null) {\r\n var hash = revisionid + '-' + x + '-' + y;\r\n\r\n if (requests[hash] == null) {\r\n requests[hash] = libraryDimensionService.getImageURL(revisionid, x, y);\r\n }\r\n \r\n requests[hash].then((data: string[]) => {\r\n scope.previewlink = data[0];\r\n scope.downloadlink = data[1];\r\n }).finally(()=>{\r\n requests[hash] = null;\r\n });\r\n\r\n }\r\n }\r\n\r\n scope.applyTemplate = () => {\r\n if (scope.dimensions == null) return;\r\n if ((scope.dimensions.x == 0 && scope.dimensions.y == 0) || scope.selectedtemplate == null) return;\r\n scope.unit = scope.selectedtemplate.sizeUnit;\r\n\r\n var mPixOrig = scope.dimensions.x * scope.dimensions.y;\r\n\r\n var faktorMax = Math.sqrt(mPixOrig / (scope.megaPixelLimit * 1000000));\r\n scope.maxDimensions.x = Math.round(scope.dimensions.x / faktorMax);\r\n scope.maxDimensions.y = Math.round(scope.dimensions.y / faktorMax);\r\n\r\n var mpix = scope.selectedtemplate.megapixel;\r\n if (mpix < 0) mpix = 9999;\r\n\r\n var faktor = Math.sqrt(mPixOrig / (mpix * 1000000));\r\n var x = Math.round(scope.dimensions.x / faktor);\r\n var y = Math.round(scope.dimensions.y / faktor);\r\n\r\n scope.Pixel.x = Math.min(x, scope.dimensions.x, scope.maxDimensions.x);\r\n scope.Pixel.y = Math.min(y, scope.dimensions.y, scope.maxDimensions.y);\r\n\r\n scope.dpi = scope.selectedtemplate.dpi;\r\n\r\n scope.update();\r\n };\r\n\r\n scope.update = () => {\r\n scope.previewlink = '';\r\n scope.downloadlink = '';\r\n\r\n scope.Zentimeter.x = scope.Pixel.x / scope.dpi * scope.ONEINCH;\r\n scope.Zentimeter.y = scope.Pixel.y / scope.dpi * scope.ONEINCH;\r\n scope.Inch.x = scope.Pixel.x / scope.dpi;\r\n scope.Inch.y = scope.Pixel.y / scope.dpi;\r\n\r\n var d;\r\n if (scope.unit == 'px') { d = scope.Pixel; }\r\n if (scope.unit == 'cm') { d = scope.Zentimeter; }\r\n if (scope.unit == 'in') { d = scope.Inch; }\r\n\r\n scope.input.x = parseFloat(d.x.toFixed(2));\r\n scope.input.y = parseFloat(d.y.toFixed(2));\r\n\r\n if (scope.Pixel.x > 0) {\r\n scope.getImageURL(scope.data.Revision.DocumentRevDestID, scope.Pixel.x, scope.Pixel.y);\r\n }\r\n };\r\n\r\n \r\n scope.preview = ($event) => {\r\n $event.preventDefault();\r\n\r\n if (scope.previewlink != \"\" && scope.previewlink != \"#\") {\r\n var w = 800;\r\n var h = 600;\r\n var options = 'menubar=no,scrollbars=yes,resizable=yes,width=' + w + ',height=' + h + ',left=' + ((screen.width - w) / 2) + ',top=' + ((screen.height - h) / 2);\r\n\r\n var win = window.open('', 'PopupWindow', options);\r\n if (window.focus) { win.focus(); }\r\n win.document.open();\r\n win.document.write('Preview');\r\n win.document.write('\"Vorschau\"');\r\n win.document.write('');\r\n win.document.close();\r\n }\r\n }\r\n\r\n scope.setPixelX = (x) => {\r\n scope.Pixel.x = Math.round(Math.min(x, scope.dimensions.x, scope.maxDimensions.x));\r\n }\r\n scope.setPixelY = (y) => {\r\n scope.Pixel.y = Math.round(Math.min(y, scope.dimensions.y, scope.maxDimensions.y));\r\n }\r\n\r\n scope.getDownloadSizeEst = () => {\r\n return scope.Pixel.x * scope.Pixel.y * 24 / 8 / 10; //if picture hat compression ration of 1:10\r\n };\r\n\r\n scope.getDownloadtimeEst = () => {\r\n return scope.Pixel.x * scope.Pixel.y * 24 / 10 / 1024 / 1024 / 15; //15 Mbit/s\r\n };\r\n\r\n scope.getDownloadtimeMobileEst = () => {\r\n return scope.Pixel.x * scope.Pixel.y * 24 / 10 / 1024 / 1024; //1 MBit/s/s\r\n };\r\n\r\n scope.getQualityTooltip = (symbol) => {\r\n return scope.qualTooltips[symbol]();\r\n }\r\n\r\n scope.getQualityRating = (type) => {\r\n if (scope.Pixel.x != null) {\r\n var q: number = scope.qualFunctions[type](scope.Pixel.x, scope.Pixel.y, scope.dpi);\r\n return scope.QAL_SYMBOL[q + 2];\r\n }\r\n }\r\n\r\n scope.getQualityColor = (type) => {\r\n if (scope.Pixel.x != null) {\r\n var q: number = scope.qualFunctions[type](scope.Pixel.x, scope.Pixel.y, scope.dpi);\r\n return { color: scope.QAL_COLOR[Math.abs(q)] };\r\n }\r\n }\r\n\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule library {\r\n 'use strict';\r\n\r\n LibraryDetailDirective.$inject = [\r\n 'libraryService',\r\n '$filter',\r\n 'anchorNavService',\r\n ];\r\n\r\n export function LibraryDetailDirective (\r\n libraryService: library.ILibraryService,\r\n $filter : library.IUniqueFilter,\r\n anchorNavService : navigation.IAnchorNavService,\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n data: '=libraryData',\r\n },\r\n templateUrl: 'library/LibraryDetailDirective',\r\n link: function (scope: ILibraryDetailDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.$watch(\"data.selectedRevision\", (newValue : Revision, oldValue : Revision) => {\r\n if (newValue && newValue != oldValue) {\r\n scope.data.selectedFileType = newValue.FileType[0];\r\n }\r\n });\r\n \r\n \r\n scope.$watch(\"data.selectedLanguageVariant\", (newValue : LanguageVariant, oldValue : LanguageVariant) => {\r\n if (newValue && newValue != oldValue) {\r\n var revSelected = newValue.Revisions.filter((v, i, arr) => {\r\n return !!v.ReleaseDate;\r\n });\r\n\r\n if (revSelected.length <= 0) {\r\n scope.data.selectedRevision = newValue.Revisions[newValue.Revisions.length - 1];\r\n } else {\r\n scope.data.selectedRevision = revSelected[revSelected.length - 1];\r\n }\r\n }\r\n });\r\n \r\n scope.$watch(\"data.selectedRevision\", (newValue : Revision, oldValue : Revision) => {\r\n if (newValue && newValue != oldValue) {\r\n scope.data.selectedFileType = newValue.FileType[0];\r\n }\r\n });\r\n \r\n scope.$watch(\"data.selectedFileType\", (newValue : FileType, oldValue : FileType) => {\r\n if (newValue && newValue != oldValue) {\r\n scope.data.Revision = newValue.DocumentRev;\r\n anchorNavService.search(\"revid\", scope.data.Revision.DocumentFileSrcRevID);\r\n }\r\n });\r\n\r\n \r\n scope.getLastRevision = (rev) => {\r\n if (!rev || !scope.data.Document) return null;\r\n\r\n var currentRev = scope.data.Document.Revisions.filter((doc) => { \r\n return doc.DocumentFileSrcID == rev.DocumentFileSrcID && !!doc.ReleaseDate;\r\n });\r\n\r\n if (currentRev.length <= 0) return rev;\r\n return currentRev[currentRev.length - 1];\r\n }\r\n\r\n scope.getLinkToRev = (rev) : string => {\r\n if (!rev) return null;\r\n var fileSrcRevId : number = angular.isNumber(rev) ? rev : rev.DocumentFileSrcRevID\r\n if (fileSrcRevId) return anchorNavService.getPath() + \"?revid=\" + fileSrcRevId;\r\n return null;\r\n }\r\n\r\n scope.openDocumentRev = (ev, rev) => {\r\n if (!rev) return null;\r\n if (ev) ev.preventDefault();\r\n var fileSrcRevId : number = angular.isNumber(rev) ? rev : rev.DocumentFileSrcRevID\r\n anchorNavService.search(\"revid\", fileSrcRevId);\r\n libraryService.loadDocumentDetails(scope.data, fileSrcRevId).then((data) => {\r\n scope.data = data;\r\n });\r\n \r\n }\r\n \r\n scope.getRevisionFileTypeDescription = (rev) => {\r\n if (!rev) return null; \r\n if (!rev.DocumentRevDestName) return rev.FileTypeName; //papiervorlage\r\n return rev.FileTypeExt + ' – ' + ($filter)('advancedNumber')(rev.DocumentRevDestSize,1024) +'B';// + ' (' + rev.FileTypeName + ')';\r\n }\r\n\r\n scope.isExpired = (revision) => {\r\n if (!revision) return false;\r\n if (revision.DocumentFileSrcRevExpirationDate) return revision.DocumentFileSrcRevExpirationDate <= new Date();\r\n return false;\r\n }\r\n\r\n }\r\n }\r\n }\r\n} \r\n","\r\nmodule library {\r\n 'use strict';\r\n\r\n export class LibraryDetailCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n '$filter',\r\n '$window',\r\n 'libraryService', \r\n 'anchorNavService',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n '$mdPanel',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope : ILibraryDetailCtrlScope,\r\n private $timeout : ng.ITimeoutService,\r\n private $filter : library.IUniqueFilter,\r\n private $window : ng.IWindowService,\r\n private libraryService : ILibraryService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private pageMetaService : navigation.IPageMetaService,\r\n private $mdDialog : ng.material.IDialogService,\r\n private $mdPanel : ng.material.IPanelService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n $scope.revIdMissing = false;\r\n $scope.error = false;\r\n\r\n \r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event, re) => {\r\n var fileSrcRevID : string = anchorNavService.getQueryValue('revid');\r\n if (fileSrcRevID && typeof fileSrcRevID !== 'boolean' && parseInt(fileSrcRevID) != this.$scope.data.Revision.DocumentFileSrcID) {\r\n this.loadDocumentDetails(parseInt(fileSrcRevID));\r\n }\r\n });\r\n\r\n\r\n }\r\n \r\n locals : { parentScope: ILibraryControllerScope, revId: number };\r\n\r\n\r\n public $onInit(): void {\r\n //try to get revid from query if not in locals (popup)\r\n if (!this.locals || !this.locals.revId) {\r\n var id = this.anchorNavService.getQueryValue('revid');\r\n if (id && typeof id !== 'boolean') {\r\n if (!this.locals) {\r\n this.locals = { parentScope: null, revId: null};\r\n }\r\n this.locals.revId = parseInt(id);\r\n }\r\n } \r\n \r\n this.$scope.settings = { view : \"Details\" };\r\n\r\n this.$scope.data = this.$scope.data || {};\r\n\r\n if (this.locals && this.locals.revId) {\r\n this.loadDocumentDetails(this.locals.revId);\r\n } else {\r\n this.$scope.revIdMissing = true;\r\n }\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n public loadDocumentDetails(fileSrcRevId : number) {\r\n this.$scope.requestOnGoing = true;\r\n this.libraryService.loadDocumentDetails(this.$scope.data, fileSrcRevId).then((data) => {\r\n this.$scope.data = data; \r\n }).catch((err) => {\r\n this.$scope.error = true;\r\n }).finally(() => {\r\n this.$scope.requestOnGoing = false;\r\n }); \r\n }\r\n\r\n openProduct(ev, p) : void {\r\n if (ev) ev.preventDefault();\r\n this.$window.location.href = p.Url;\r\n this.$mdDialog.hide();\r\n }\r\n\r\n }\r\n\r\n}","\r\nmodule library {\r\n 'use strict';\r\n\r\n export class LibraryCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n '$filter',\r\n 'libraryService', \r\n 'anchorNavService',\r\n '$mdDialog',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: ILibraryControllerScope,\r\n private $timeout: ng.ITimeoutService,\r\n private $filter: misc.IAdvancedNumberFilter,\r\n private libraryService: ILibraryService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n\r\n // variables needed for pagination\r\n $scope.error = false;\r\n $scope.limit = 3;\r\n $scope.offset = 0;\r\n\r\n libraryService.loadDocumentsByProduct(pglob.RouteData.RouteEntry).then((response) => {\r\n $scope.data = response.data.Documents;\r\n $scope.languages = response.data.Languages;\r\n }).catch((err) => {\r\n $scope.error = true;\r\n });\r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event :ng.IAngularEvent, re:IRouteEntry) => {\r\n libraryService.loadDocumentsByProduct(re).then((response) => {\r\n $scope.data = response.data.Documents;\r\n $scope.languages = response.data.Languages;\r\n }).catch((err) => {\r\n $scope.error = true;\r\n }); \r\n }); \r\n\r\n var queryRevId = anchorNavService.getQueryValue('revid');\r\n if (queryRevId && typeof queryRevId !== 'boolean' ) { \r\n this.openDetailModalByRevId(null, parseInt(queryRevId));\r\n };\r\n\r\n // resets the offset when changing category (for example from pictures to documents)\r\n $scope.$watchCollection('selectedType.Documents', function (newCol, oldCol, scope) {\r\n if (newCol !== oldCol) {\r\n $scope.offset = 0;\r\n }\r\n })\r\n\r\n }\r\n\r\n public getTotalPages(nrofarticles: number): number {\r\n return Math.ceil(nrofarticles / 3);\r\n }\r\n\r\n public getCurrentPage(offset: number): number {\r\n var currentPage = offset / this.$scope.limit + 1;\r\n this.$scope.isFirstPage = currentPage == 1;\r\n if (this.$scope.selectedType && this.$scope.selectedType.Documents) {\r\n this.$scope.isLastPage = this.$scope.offset >= this.$scope.selectedType.Documents.length - this.$scope.limit;\r\n }\r\n return currentPage;\r\n }\r\n\r\n public nextPage() {\r\n if (!this.$scope.data || this.$scope.offset >= this.$scope.selectedType.Documents.length - this.$scope.limit) return;\r\n var newOffset = this.$scope.offset + this.$scope.limit;\r\n this.$scope.offset = newOffset;\r\n }\r\n\r\n public previousPage() {\r\n if (!this.$scope.data) return;\r\n var newOffset = this.$scope.offset - this.$scope.limit;\r\n this.$scope.offset = newOffset;\r\n if (this.$scope.offset < 0) {\r\n this.$scope.offset = 0;\r\n return;\r\n }\r\n }\r\n\r\n getLanguageName(hlCode : String):Language {\r\n var hl = this.$scope.languages.filter(function (item : Language, index :number, array : Language[]) {\r\n return item.LanguageCode == hlCode;\r\n });\r\n if (hl) return hl[0];\r\n return null;\r\n }\r\n\r\n getRevisionFileTypeDescription(rev : DocumentRev) : string {\r\n if (!rev.DocumentRevDestName) return rev.FileTypeName; //papiervorlage\r\n return rev.FileTypeExt + ' – ' + this.$filter('advancedNumber')(rev.DocumentRevDestSize,1024) +'B';// + ' (' + rev.FileTypeName + ')';\r\n }\r\n\r\n getDefaultRevision(doc : Document, hl? : string, fileType? : String) {\r\n return this.libraryService.getDefaultRevision(doc, hl, fileType);\r\n }\r\n\r\n openDetailModal(ev: MouseEvent, d : Document, rev : DocumentRev) { \r\n this.openDetailModalByRevId(ev, rev.DocumentFileSrcRevID, d, rev);\r\n }\r\n \r\n \r\n openDetailModalByRevId(ev: MouseEvent, revid : number, d? : Document, rev? : DocumentRev) { \r\n this.libraryService.openDialog(revid, this.$scope, ev);\r\n }\r\n \r\n openSortModal(ev: MouseEvent, selectedType : DocumentType) {\r\n this.$mdDialog.show({\r\n controller: 'LibrarySortCtrl',\r\n templateUrl: 'library/LibrarySortCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n locals: {\r\n selectedType : selectedType\r\n },\r\n //}).then(() => {\r\n //}, () => {\r\n });\r\n }\r\n\r\n }\r\n\r\n}","\r\nmodule library {\r\n 'use strict';\r\n\r\n export class LibrarySortCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n '$filter',\r\n '$window',\r\n 'libraryService', \r\n 'anchorNavService',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n '$mdPanel',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope : ILibrarySortCtrlScope,\r\n private $timeout : ng.ITimeoutService,\r\n private $filter : library.IUniqueFilter,\r\n private $window : ng.IWindowService,\r\n private libraryService : ILibraryService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private pageMetaService : navigation.IPageMetaService,\r\n private $mdDialog : ng.material.IDialogService,\r\n private $mdPanel : ng.material.IPanelService\r\n ) { \r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n }\r\n \r\n locals: { selectedType: DocumentType };\r\n\r\n \r\n public $onInit(): void { \r\n this.$scope.data = this.locals.selectedType.Documents;\r\n this.$scope.getRevision = this.libraryService.getDefaultRevision;\r\n }\r\n\r\n itemDraggedAndDropped(srcList, srcIndex, targetList, targetIndex) {\r\n var d = this.$scope.data.splice(srcIndex, 1); //remove at src index\r\n this.$scope.data.splice(targetIndex, 0, d[0]); //insert at target index\r\n return true;\r\n }\r\n\r\n swapItems(index1, index2) {\r\n var temp = this.$scope.data[index1];\r\n this.$scope.data[index1] = this.$scope.data[index2];\r\n this.$scope.data[index2] = temp;\r\n }\r\n\r\n moveItemUp(index) {\r\n this.swapItems(index, index - 1);\r\n }\r\n\r\n moveItemDown(index) {\r\n this.swapItems(index, index + 1);\r\n }\r\n\r\n moveItemToTop(index) {\r\n var d = this.$scope.data.splice(index, 1);\r\n this.$scope.data.unshift(d[0]);\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n gotoTop() {\r\n $(\".md-dialog-content\").animate({\r\n scrollTop: 0\r\n }, 500);\r\n }\r\n\r\n\r\n save() {\r\n var renumTo = 0;\r\n var documentsToSave : number[] = [];\r\n\r\n for (var i = 0; i < (this.$scope.data.length - 1); i++) {\r\n var revN = this.$scope.getRevision(this.$scope.data[i]);\r\n var revNplus1 = this.$scope.getRevision(this.$scope.data[i + 1]);\r\n if (revN.ReleaseDate < revNplus1.ReleaseDate) {\r\n renumTo = i + 1;\r\n }\r\n if (revN.ReleaseDate.getTime() == revNplus1.ReleaseDate.getTime() && revN.DocumentFileSrcRevID < revNplus1.DocumentFileSrcRevID) {\r\n renumTo = i + 1;\r\n }\r\n documentsToSave.push(this.$scope.data[i].DocumentID);\r\n };\r\n\r\n this.$scope.showSaveInProgress = true;\r\n \r\n this.libraryService.saveDocumentSortOrder(pglob.RouteData.RouteEntry, renumTo, documentsToSave, this.locals.selectedType)\r\n .then((response) => {\r\n this.$scope.showSaveSuccess = true;\r\n })\r\n .catch((response) => {\r\n this.$scope.showSaveError = true;\r\n })\r\n .finally(() => {\r\n this.$scope.showSaveInProgress = false;\r\n this.$timeout(() => {\r\n this.$scope.showSaveSuccess = false;\r\n this.$scope.showSaveError = false;\r\n }, 3000);\r\n });\r\n\r\n }\r\n }\r\n}","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule library {\r\n 'use strict';\r\n \r\n export class ToolboxCtrl {\r\n\r\n public static $inject = [\r\n '$scope'\r\n , '$timeout'\r\n , '$interval'\r\n ];\r\n\r\n constructor(\r\n private $scope: any\r\n , private $timeout: ng.ITimeoutService\r\n , private $interval: ng.IIntervalService\r\n ) {\r\n\r\n $scope.vm = this;\r\n \r\n }\r\n \r\n public init(data : any) {\r\n data.forEach((t, i, a) => {\r\n t.subObj = [];\r\n t.sub.forEach((sub, j, a) => {\r\n t.subObj.push({\r\n \"id\" : j,\r\n \"name\" : sub\r\n });\r\n });\r\n });\r\n this.$scope.historyData = data;\r\n if (this.$scope.historyData) this.$scope.entry = this.$scope.historyData[0];\r\n }\r\n\r\n \r\n }\r\n}","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule library {\r\n 'use strict';\r\n \r\n export class Toolbox2Ctrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n '$location',\r\n '$timeout',\r\n 'toolboxService',\r\n 'searchService',\r\n 'libraryService',\r\n 'pageMetaService',\r\n '$mdPanel',\r\n ];\r\n\r\n constructor(\r\n private $scope: IToolbox2CtrlScope,\r\n private $location: ng.ILocationService,\r\n private $timeout: ng.ITimeoutService,\r\n private toolboxService : IToolboxService,\r\n private searchService: search.ISearchService,\r\n private libraryService : ILibraryService,\r\n private pageMetaService : navigation.IPageMetaService,\r\n private $mdPanel : ng.material.IPanelService\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.meta = pageMetaService.getPageMeta;\r\n $scope.products = []; \r\n //$scope.categoryFilter = $scope.categoryFilter || 5;\r\n //$scope.contentFilter = $scope.contentFilter || 5;\r\n\r\n $scope.queryString = $location.search().q;\r\n $scope.$watch('queryString', (newVal: string, oldVal: string) => {\r\n if (newVal != oldVal) {\r\n //$location.search({ q: newVal });\r\n this.callSearchFunction(); \r\n }\r\n });\r\n\r\n var productZeroName = $scope.meta(navigation.HL) == \"D\" ? \"Allgemeine Dokumente\" : \"General documents\"\r\n\r\n toolboxService.getProducts().then((response) => {\r\n $scope.products = response.data;\r\n $scope.products.unshift({ \"Id\" : 0, \"Name\" : productZeroName});\r\n });\r\n \r\n }\r\n\r\n \r\n hideTypes : number[] = [ 15, 38, 26 ];\r\n selectedProductIds : number[] = [ ];\r\n oldCatId : number = null;\r\n oldTypeId : number = null;\r\n\r\n setProduct(p: search.Product) { \r\n this.$scope.selectedProduct = p;\r\n var re : IRouteEntry = { RouteParameterStack : [ { \"Id\" : p.Id, \"Placeholder\" : \"ProductName\" } ] };\r\n\r\n if (this.$scope.selectedCategory) {\r\n this.oldCatId = this.$scope.selectedCategory.DocumentCategoryID;\r\n } \r\n if (this.$scope.selectedType) {\r\n this.oldTypeId = this.$scope.selectedType.DocumentTypeID;\r\n } \r\n\r\n this.libraryService.loadDocumentsByProduct(re, this.$scope.contentFilter, this.$scope.categoryFilter).then((response) => {\r\n \r\n this.$scope.documents = response.data.Documents;\r\n this.$scope.languages = response.data.Languages;\r\n\r\n var oldCat = this.$scope.documents.filter((c)=>{ return c.DocumentCategoryID == this.oldCatId });\r\n\r\n if (oldCat.length > 0) {\r\n this.setSelectedCategory(oldCat[0]);\r\n \r\n var oldType = oldCat[0].Types.filter((t)=>{ return t.DocumentTypeID== this.oldTypeId });\r\n if (oldType.length > 0) {\r\n this.setSelectedType(oldType[0]);\r\n } \r\n\r\n } else if (this.$scope.documents.length > 0) {\r\n this.setSelectedCategory(this.$scope.documents[0])\r\n }\r\n\r\n });\r\n }\r\n\r\n setSelectedCategory(dc : DocumentCategory) {\r\n this.$scope.selectedCategory = dc;\r\n if (dc.Types.length > 0) {\r\n this.$scope.selectedType = dc.Types[0];\r\n }\r\n }\r\n\r\n setSelectedType(t : DocumentType) {\r\n this.$scope.selectedType = t;\r\n }\r\n \r\n setSelectedDocument(d : Document, isFullTextHit : boolean) {\r\n if (!isFullTextHit) {\r\n this.$scope.selectedDocument = d;\r\n this.$scope.selectedRevision = this.getDefaultRevision(d);\r\n } else {\r\n this.libraryService.loadDocumentDetails(null, (d).DocumentFileSrcRevId).then((data) => {\r\n this.$scope.error = null;\r\n this.$scope.languages = data.Languages;\r\n this.$scope.selectedDocument = data.Document; \r\n var rev = data.Document.Revisions.filter((v, i, arr) => { return v.DocumentFileSrcRevID == (d).DocumentFileSrcRevId});\r\n\r\n if (rev.length > 0) {\r\n this.$scope.selectedRevision = rev[0]; \r\n } else {\r\n this.$scope.selectedRevision = this.getDefaultRevision(data.Document);\r\n }\r\n }).catch((err) => {\r\n this.$scope.selectedDocument = null;\r\n this.$scope.selectedRevision = null;\r\n this.$scope.error = err.status + ': ' + err.statusText;\r\n }).finally(() => {\r\n }); \r\n }\r\n\r\n }\r\n \r\n \r\n getDefaultRevision(doc : Document, hl? : string, fileType? : String) {\r\n return this.libraryService.getDefaultRevision(doc, hl, fileType);\r\n }\r\n\r\n \r\n openDetailModal(ev: MouseEvent, d : Document, rev : DocumentRev) { \r\n this.openDetailModalByRevId(ev, rev.DocumentFileSrcRevID, d, rev);\r\n }\r\n \r\n openDetailModalByRevId(ev: MouseEvent, revid : number, d? : Document, rev? : DocumentRev) { \r\n this.libraryService.openDialog(revid, this.$scope, ev);\r\n }\r\n\r\n getLanguageDescription(code: string) {\r\n if (!this.$scope.languages) return code;\r\n var lngs = this.$scope.languages.filter((v, i, arr) => {\r\n return code === v.LanguageCode;\r\n });\r\n\r\n if (lngs) return lngs[0].LanguageName;\r\n }\r\n \r\n\r\n callSearchFunction() {\r\n this.$scope.selectedDocument = null;\r\n if (this.$scope.queryString) {\r\n this.searchService.searchLibrary(this.$scope.queryString, 0, 100, false).then((response: { data: any }) => {\r\n this.$scope.searchResults = { Hits: response.data.Hits, Count: response.data.Count };\r\n })\r\n }\r\n }\r\n\r\n showProductFilter(ev : ng.IAngularEvent) {\r\n var position = this.$mdPanel.newPanelPosition()\r\n .relativeTo('.produkt-filter-open-button')\r\n .addPanelPosition(this.$mdPanel.xPosition.ALIGN_START, this.$mdPanel.yPosition.BELOW);\r\n\r\n \r\n var config = {\r\n attachTo: angular.element(document.body),\r\n controller: ProductFilterCtrl,\r\n controllerAs: 'ctrl',\r\n templateUrl: 'library/ProductFilterPanel', \r\n panelClass: 'product-filter-pnl',\r\n position: position,\r\n locals: {\r\n 'products': this.$scope.products,\r\n 'selected' : this.selectedProductIds,\r\n },\r\n openFrom: ev,\r\n clickOutsideToClose: true,\r\n escapeToClose: true,\r\n focusOnOpen: true,\r\n disableParentScroll: false,\r\n zIndex: 1000 /* $z-index-material-base */\r\n };\r\n\r\n this.$mdPanel.open(config);\r\n }\r\n\r\n filterSelectedProducts() {\r\n var self = this;\r\n return function(item){\r\n if (!self || !self.selectedProductIds) return true;\r\n if (self.selectedProductIds.length === 0) return true;\r\n return self.selectedProductIds.filter(k=> item.Id == k).length;\r\n }\r\n }\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n }\r\n}","/// \r\n\r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule library {\r\n 'use strict';\r\n \r\n export class ProductFilterCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n '$mdPanel',\r\n '$interval',\r\n ];\r\n\r\n constructor(\r\n private $scope: IProductFilterCtrlScope\r\n , private $timeout: ng.ITimeoutService\r\n , private $mdPanel : ng.material.IPanelService\r\n , private $interval: ng.IIntervalService\r\n ) {\r\n\r\n $scope.vm = this;\r\n\r\n if (this.selected) {\r\n this.selected.forEach((el, i, arr) => {\r\n this.selectedProducts[el] = true;\r\n });\r\n }\r\n \r\n \r\n\r\n //this.$timeout(function() {\r\n // var selected = document.querySelector('.demo-menu-item.selected');\r\n // if (selected) {\r\n // angular.element(selected).focus();\r\n // } else {\r\n // angular.element(document.querySelectorAll('.demo-menu-item')[0]).focus();\r\n // }\r\n //});\r\n }\r\n\r\n products : search.Product[];\r\n selected : number[];\r\n selectedProducts : { [id: number] : boolean; } = {};\r\n mdPanelRef : ng.material.IPanelRef;\r\n \r\n //selectProduct(product) {\r\n // this.selected = dessert;\r\n // this._mdPanelRef && this._mdPanelRef.close().then(function() {\r\n // angular.element(document.querySelector('.demo-menu-open-button')).focus();\r\n // });\r\n //}\r\n\r\n //onKeydown($event, dessert) {\r\n // var handled, els, index, prevIndex, nextIndex;\r\n // switch ($event.which) {\r\n // case 38: // Up Arrow.\r\n // els = document.querySelectorAll('.demo-menu-item');\r\n // index = indexOf(els, document.activeElement);\r\n // prevIndex = (index + els.length - 1) % els.length;\r\n // els[prevIndex].focus();\r\n // handled = true;\r\n // break;\r\n\r\n // case 40: // Down Arrow.\r\n // els = document.querySelectorAll('.demo-menu-item');\r\n // index = indexOf(els, document.activeElement);\r\n // nextIndex = (index + 1) % els.length;\r\n // els[nextIndex].focus();\r\n // handled = true;\r\n // break;\r\n\r\n // case 13: // Enter.\r\n // case 32: // Space.\r\n // this.selectDessert(dessert);\r\n // handled = true;\r\n // break;\r\n\r\n // case 9: // Tab.\r\n // this._mdPanelRef && this._mdPanelRef.close();\r\n // }\r\n\r\n // if (handled) {\r\n // $event.preventDefault();\r\n // $event.stopImmediatePropagation();\r\n // }\r\n\r\n // function indexOf(nodeList, element) {\r\n // for (var item, i = 0; item = nodeList[i]; i++) {\r\n // if (item === element) {\r\n // return i;\r\n // }\r\n // }\r\n // return -1;\r\n // }\r\n //}\r\n\r\n selectAll() { \r\n \r\n this.$scope.filteredProducts.forEach((el, i, arr) => {\r\n this.selectedProducts[el.Id] = true;\r\n });\r\n }\r\n\r\n selectNone() { \r\n this.products.forEach((el, i, arr) => {\r\n this.selectedProducts[el.Id] = false;\r\n });\r\n }\r\n\r\n close() {\r\n this.selected.length = 0;\r\n for (var key in this.selectedProducts) {\r\n if (this.selectedProducts[key]) this.selected.push(parseInt(key));\r\n }\r\n\r\n if (this.mdPanelRef) this.mdPanelRef.close();\r\n }\r\n\r\n count() {\r\n let count = 0;\r\n for (var key in this.selectedProducts) {\r\n if (this.selectedProducts[key]) count++;\r\n }\r\n return count;\r\n }\r\n \r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule library {\r\n 'use strict';\r\n\r\n var document = angular.module('library', ['photometerfilter', 'photometerdirective', 'navigation'])\r\n .controller('LibraryCtrl', LibraryCtrl)\r\n .controller('LibraryDetailCtrl', LibraryDetailCtrl)\r\n .controller('LibrarySortCtrl', LibrarySortCtrl)\r\n .controller('ToolboxCtrl', ToolboxCtrl)\r\n .controller('Toolbox2Ctrl', Toolbox2Ctrl)\r\n .controller('ProductFilterCtrl', ProductFilterCtrl)\r\n .directive('openDocumentDetail', OpenDocumentDetailDirective)\r\n .directive('libraryDetail', LibraryDetailDirective)\r\n .directive('libraryImageResize', LibraryImageResizeDirective)\r\n .filter('byDocument', ByDocumentFilter)\r\n .filter('unique', UniqueFilter)\r\n .filter('urlencode', UrlEncodeFilter)\r\n .filter('minssec', MinsSecFilter)\r\n .service('libraryService', LibraryService)\r\n .service('toolboxService', ToolboxService)\r\n .service('libraryDimensionService', LibraryDimensionService);\r\n}\r\n\r\n\r\n\r\n","/// \r\n\r\nmodule part {\r\n\r\n ProductBoxDirective.$inject = ['pageMetaService',];\r\n export function ProductBoxDirective(pageMetaService: navigation.IPageMetaService): ng.IDirective {\r\n\r\n\r\n return {\r\n restrict: 'E',\r\n scope: { \r\n product: '=', \r\n pictures: '=', \r\n showAsLine: '=', \r\n },\r\n templateUrl: 'part/ProductBoxDirective', \r\n link: function (scope: any, element: ng.IAugmentedJQuery, attr: ng.IAttributes) { \r\n scope.meta = pageMetaService.getPageMeta;\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule part {\r\n\r\n PartDetailDirective.$inject = ['pageMetaService', 'partService', '$filter'];\r\n export function PartDetailDirective(pageMetaService: navigation.IPageMetaService, partService: IPartService, $filter: misc.IAdvancedNumberFilter): ng.IDirective {\r\n\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n partToProduct: '=', //ArtikelReferenz2Object | ErsatzteillistePart2Product\r\n data: '=partData',\r\n onProductOpen: '&',\r\n },\r\n templateUrl: 'part/PartDetailDirective',\r\n link: function (scope: IPartDetailDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.$watch(\"data.Part.ID\", (newValue:string, oldValue :string) => {\r\n if (!newValue || newValue == oldValue) return;\r\n \r\n scope.isDocumentsLoading = true;\r\n partService.loadDocumentsByPart(newValue)\r\n .then((response) => {\r\n //keine animation bei wechsel durch response\r\n scope.animationDirection = ''; \r\n //Bild \"Kein Bild\" ausschliessen\r\n scope.documents = response.data.filter((el, arr, i) => {return el.Id != 11510}) ;\r\n scope.documents.sort((a, b) => {\r\n if (a.TypeNameE == \"Photo\") { return -1 } else if (b.TypeNameE == \"Photo\") { return 1 } else { return 0 }\r\n });\r\n scope.currentDocIndex = 0;\r\n scope.activeDocument = scope.documents[scope.currentDocIndex];\r\n //scope.animationDirection = 'anim-to-left';\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n scope.docError = true;\r\n })\r\n .finally(() => {\r\n scope.isDocumentsLoading = false;\r\n });\r\n\r\n partService.loadYourPrice()\r\n .then((response) => {\r\n scope.yourPrice = response[newValue]; \r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n scope.yourPriceError = true;\r\n })\r\n .finally(() => {\r\n scope.isDocumentsLoading = false;\r\n });\r\n });\r\n\r\n \r\n scope.yourPrice = [];\r\n \r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n scope.currentDocIndex = 0;\r\n scope.docError = false;\r\n scope.yourPriceError = false;\r\n \r\n scope.computeStaggerChangeClass = (index) => {\r\n if (index < 1) return '';\r\n if (scope.data.PriceList[index - 1].Staffelung != scope.data.PriceList[index].Staffelung) return 'new-stagger';\r\n };\r\n\r\n scope.openProduct = (ev: ng.IAngularEvent, p : ProductRelation) => {\r\n scope.onProductOpen({ event: ev, product: p });\r\n }\r\n\r\n scope.getDocumentDownloadLink = (document: any) => {\r\n return \"/svc/document.axd?id=\" + document.Id + \"&hl=\" + scope.meta('hl');\r\n }\r\n\r\n scope.moveRight = () => {\r\n scope.currentDocIndex += 1;\r\n scope.activeDocument = scope.documents[scope.currentDocIndex];\r\n scope.animationDirection = 'anim-to-left';\r\n }\r\n\r\n scope.moveLeft = () => {\r\n scope.currentDocIndex -= 1;\r\n scope.activeDocument = scope.documents[scope.currentDocIndex];\r\n scope.animationDirection = 'anim-to-right';\r\n }\r\n\r\n scope.changeDocument = (index:number) => { \r\n scope.animationDirection = scope.currentDocIndex > index ? 'anim-to-right' : 'anim-to-left';\r\n scope.currentDocIndex = index;\r\n scope.activeDocument = scope.documents[scope.currentDocIndex];\r\n }\r\n\r\n scope.produceDocInfo = (doc: PartDocument) => {\r\n if (!doc) return;\r\n return doc.RevDestName + \" (\" + $filter('advancedNumber')(doc.RevDestSize, 1024) + 'B)';\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule part {\r\n\r\n PartBoxDirective.$inject = [\r\n 'pageMetaService',\r\n 'partService', \r\n 'anchorNavService',\r\n '$mdDialog',];\r\n\r\n export function PartBoxDirective(\r\n pageMetaService: navigation.IPageMetaService,\r\n partService: IPartService,\r\n anchorNavService: navigation.IAnchorNavService,\r\n $mdDialog: ng.material.IDialogService): ng.IDirective {\r\n\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n part: '=',\r\n pictures: '=',\r\n partToProduct: '=',\r\n showAsLine: '=',\r\n availabilityData: '=',\r\n },\r\n templateUrl: 'part/PartBoxDirective',\r\n link: function (scope: IPartBoxDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n scope.meta = pageMetaService.getPageMeta;\r\n scope.requestOnGoing = false;\r\n\r\n scope.$watch('qty', (newValue: number, oldValue: number, scope: IPartBoxDirectiveScope) : any => {\r\n scope.qty = Math.max(scope.qty, 1);\r\n });\r\n\r\n scope.openDetailModal = (ev: MouseEvent, partid: string) => {\r\n partService.openDialog(partid, scope, scope.partToProduct, ev);\r\n }\r\n\r\n\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n \r\n export function partsByGroupAndCatFilter() {\r\n\r\n\r\n\r\n var matchQuery = (reference: ArtikelReferenz2Object, partsearch: string, partData: ServiceData, partNoPropertyName : string, productNoPropertyName : string) => {\r\n if (!partsearch) return false;\r\n\r\n\r\n partsearch = partsearch.toLowerCase();\r\n if (reference[partNoPropertyName] && reference[partNoPropertyName].indexOf(partsearch) >= 0) return true;\r\n\r\n //Part \r\n if (reference[partNoPropertyName]) {\r\n var p : Part = partData.Parts[reference[partNoPropertyName]];\r\n if (p.TextD.toLowerCase().indexOf(partsearch) >= 0) return true;\r\n if (p.TextE.toLowerCase().indexOf(partsearch) >= 0) return true;\r\n if (p.TextF.toLowerCase().indexOf(partsearch) >= 0) return true;\r\n }\r\n\r\n //Product \r\n if (reference[productNoPropertyName]) {\r\n var prod: Product = partData.Products[reference[productNoPropertyName]];\r\n if (prod.Name.toLowerCase().indexOf(partsearch) >= 0) return true;\r\n if (prod.TextD && prod.TextD.toLowerCase().indexOf(partsearch) >= 0) return true;\r\n if (prod.TextE && prod.TextE.toLowerCase().indexOf(partsearch) >= 0) return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n\r\n\r\n return function (references: ArtikelReferenz2Object[]\r\n , cat: ArtikelReferenzKategorie\r\n , group: ArtikelReferenzGruppe\r\n , partsearch: string\r\n , partData : ServiceData\r\n , queryPrio : boolean) { //items, search\r\n\r\n references = references || [];\r\n if (!cat) return [];\r\n if (!group) return [];\r\n var out = [];\r\n\r\n references.forEach(function (reference : ArtikelReferenz2Object) {\r\n \r\n var partNoPropertyName = reference.hasOwnProperty('ItemNo') ? 'ItemNo' : 'Part';\r\n var productNoPropertyName = reference.hasOwnProperty('ProduktNummer') ? 'ProduktNummer' : 'Product';\r\n\r\n if (queryPrio && partsearch) {\r\n if (matchQuery(reference, partsearch, partData, partNoPropertyName, productNoPropertyName)) {\r\n out.push(reference);\r\n return;\r\n }\r\n }\r\n\r\n if (partNoPropertyName = 'ItemNo') {//artikelreferenz\r\n if (reference.KategorieNummer == cat.Nummer\r\n && reference.GruppeNummer == group.Nummer\r\n && (!cat.DifferentiateGroups || cat.Grundausstattung == reference.Grundausstattung)) {\r\n \r\n if (!partsearch) out.push(reference);\r\n\r\n if (matchQuery(reference, partsearch, partData, partNoPropertyName, productNoPropertyName)) {\r\n out.push(reference);\r\n }\r\n }\r\n }\r\n\r\n });\r\n return out;\r\n }\r\n }\r\n\r\n\r\n}","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n\r\n export class DocumentCategory {\r\n constructor(\r\n public DocumentCategoryID : number,\r\n public DocumentCategoryName : string,\r\n public Types : DocumentType[]\r\n ) { }\r\n }\r\n\r\n export class DocumentType {\r\n constructor(\r\n public DocumentTypeID : number,\r\n public DocumentTypeName : string,\r\n public Documents : Document[]\r\n ) { }\r\n }\r\n\r\n export class Document {\r\n constructor(\r\n public DocumentID : number,\r\n public DocumentTitle : string,\r\n public Revisions : DocumentRev[]\r\n ) { }\r\n }\r\n\r\n export class DocumentRev {\r\n constructor(\r\n public DocumentFileSrcRevID : number,\r\n public DocumentRevDestID : number,\r\n public DocumentRevDestSize : number,\r\n public FileTypeExt : string,\r\n public FileTypeName : string,\r\n public LanguageCode : string,\r\n public DocumentFileSrcName : string,\r\n public DocumentFileSrcRevName : string\r\n ) { }\r\n }\r\n\r\n export class TErsatzteillisteDocDataTable {\r\n constructor(\r\n public DocumentFileSrcRevName : number,\r\n public DocumentRevDestID : number,\r\n public FileDocuName : number,\r\n public FileName : number,\r\n public NavProduktNummer\r\n ) { }\r\n }\r\n\r\n\r\n export class DocumentImage {\r\n constructor(\r\n public Height : number,\r\n public Width : number,\r\n public OriginalHeight : number,\r\n public OriginalWidth : number,\r\n public RevDestId : number,\r\n public RevDestName : string,\r\n public TitleD : string,\r\n public TitleE : string,\r\n public MaxSideLength : number,\r\n public Url : string,\r\n public ImageUrl : string,\r\n public ImageUrlRetina : string\r\n ) { }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n\r\n export class Price {\r\n constructor(\r\n public ValidFrom: Date,\r\n public ValidTo: Date,\r\n public Value: number,\r\n public Staffelung: number,\r\n public IsAufAnfrage: boolean,\r\n public ShowPriceDateFrom: boolean,\r\n public ShowPriceDateTo: boolean\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n\r\n export class ProductRelation {\r\n constructor(\r\n public ProductName: string,\r\n public ProductId: number,\r\n public NavReferenzBenutzergruppe: number,\r\n public NavReferenzSeriennummerErforderlich: number,\r\n public UrlD: string,\r\n public UrlE: string\r\n ) { }\r\n }\r\n\r\n\r\n\r\n}","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n\r\n export class PartDetailDTO {\r\n constructor(\r\n public HasErsatz: boolean,\r\n public Part: Part,\r\n public IsErsatzInFuture: boolean,\r\n public PictureUrl: string,\r\n public Image: shoppinglist.Image,\r\n public ImageFull: shoppinglist.Image,\r\n public RelatedProducts: ProductRelation[],\r\n public ProductUrlBase : string,\r\n public ShowAvailability: boolean,\r\n public ShowStatus: boolean, //deprecated\r\n public PartAvailabilityText: string,\r\n public Status: string, //deprecated\r\n public ShowPrice: boolean,\r\n public PriceList: Price[],\r\n public ErsatzList: any[],\r\n public PartLinkFormat: any,\r\n public PartUrl: string,\r\n public PartAvailabilityCode: number, \r\n public CustomsTariffNo : string,\r\n public CountryOfOrigin : string,\r\n public NetWeight : number,\r\n ) { }\r\n }\r\n\r\n}","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n export class ServiceData {\r\n constructor(\r\n public PartsReference: PartsReference,\r\n public Pictures: any[],\r\n public Plans: TErsatzteillisteDocDataTable[],\r\n public ReferenceGroup: ReferenceGroup[],\r\n public Parts : Part, \r\n public Products : Product \r\n ) { }\r\n }\r\n\r\n export interface AvailabilityServiceData {\r\n [id: string] : Availability \r\n }\r\n \r\n\r\n export class Availability {\r\n constructor(\r\n public Text: string,\r\n public Code: AvailabilityStatus\r\n ) { }\r\n }\r\n\r\n export enum AvailabilityStatus {\r\n OnlyByRequest = -1,\r\n Available = 1,\r\n Delayed = 0,\r\n }\r\n \r\n \r\n export class PartsReference{\r\n constructor(\r\n public Kategorien : ArtikelReferenzKategorie[],\r\n public Referenz2Object : ArtikelReferenz2Object[],\r\n public Gruppen : ArtikelReferenzGruppe[]\r\n ) { }\r\n } \r\n\r\n\r\n \r\n export class ArtikelReferenzKategorie{\r\n constructor(\r\n public Nummer : number,\r\n public Bezeichnung : string,\r\n public DifferentiateGroups : boolean,\r\n public Grundausstattung : boolean,\r\n public Gruppen : ArtikelReferenzGruppe[]\r\n ) { }\r\n } \r\n \r\n export class ArtikelReferenzGruppe{\r\n constructor(\r\n public Nummer : number,\r\n public Bezeichnung : string,\r\n public Grundausstattung : boolean,\r\n public Reihenfolge : number\r\n ) { }\r\n } \r\n \r\n export class ArtikelReferenz2Object{\r\n constructor(\r\n public KategorieNummer : number,\r\n public GruppeNummer : number,\r\n public Grundausstattung : boolean,\r\n public ProduktNummer : number,\r\n public ItemNo : string,\r\n public ZusatzText : string\r\n ) { }\r\n } \r\n\r\n export class ReferenceGroup{\r\n constructor(\r\n public ID : number,\r\n public IsBase : boolean,\r\n public NameD : string,\r\n public NameE : string,\r\n public Part2Product : ErsatzteillistePart2Product[],\r\n public Sorter : number\r\n ) { }\r\n } \r\n \r\n export class Part2Product{\r\n constructor(\r\n public IsSerialNumberRequired : boolean,\r\n public IsServicePersonnelNeeded : boolean,\r\n public Part : Part,\r\n public Product : Product,\r\n public TextD : string,\r\n public TextE : string\r\n ) { }\r\n } \r\n \r\n \r\n export class ErsatzteillistePart2Product {\r\n constructor(\r\n public Text : string,\r\n public IsServicePersonnelNeeded : boolean,\r\n public IsSerialNumberRequired : boolean,\r\n public Part : string,\r\n public Product : number\r\n ) { }\r\n } \r\n\r\n \r\n export class Part {\r\n constructor(\r\n public IsSerialNumberRequired : boolean,\r\n public ExpireDate : Date, //deprecatd\r\n public HasAufAnfrage : boolean,\r\n public HasComplexPrice : boolean,\r\n public ID : string,\r\n public IsClosed : boolean,\r\n public IsNetto : boolean,\r\n public MutationDate : Date,\r\n public PriceCat : string,\r\n public StatusCode : number,\r\n public TextD : string,\r\n public TextE : string,\r\n public TextF : string,\r\n public USPForOneUnit : number,\r\n public WebStatusTextDeutsch : string,\r\n public WebStatusTextEnglisch : string,\r\n public OnlyDetails : boolean \r\n ) { }\r\n } \r\n\r\n \r\n export class Product {\r\n constructor(\r\n public CategoryId : number,\r\n public CategoryNameD : string,\r\n public CategoryNameE : string,\r\n public Id : number,\r\n public ImagePath : string,\r\n public IsCommingSoon : boolean,\r\n public IsNew : boolean,\r\n public IsObsolete : boolean,\r\n public IsTemporary : boolean,\r\n public KillingDate : Date,\r\n public LaunchDate : Date,\r\n public LongDescD : string,\r\n public LongDescE : string,\r\n public Name : string,\r\n public ProductImageName : string,\r\n public TextD : string,\r\n public TextE : string,\r\n public UrlD : string,\r\n public UrlE : string\r\n ) { }\r\n } \r\n\r\n\r\n\r\n\r\n\r\n\r\n}","/// \r\n\r\nmodule part {\r\n 'use strict';\r\n \r\n export class PartDocument {\r\n constructor(\r\n public FileSrcRevId: number,\r\n public RevDestName: string,\r\n public TypeNameId: number,\r\n public TypeNameD: string,\r\n public TypeNameE: string,\r\n public TitleD: string,\r\n public TitleE: string,\r\n public Id: number,\r\n public LanguageCode: number[],\r\n public DocumentId: number,\r\n public RevDestSize?: number,\r\n ) { }\r\n }\r\n}","/// \r\ndeclare var pglob : IPhotometerGlobalVar;\r\n\r\nmodule part {\r\n 'use strict';\r\n\r\n /**\r\n * Services that persists and retrieves TODOs from localStorage.\r\n */\r\n export class PartService implements IPartService {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$rootScope',\r\n '$http', \r\n '$q', \r\n 'CacheFactory',\r\n 'anchorNavService',\r\n '$mdDialog',\r\n ];\r\n\r\n private cacheName : string = \"partCache\"; //use different cache with capacity, because we can't store anything right now.\r\n \r\n constructor(\r\n private $rootScope: ng.IRootScopeService,\r\n private $http: ng.IHttpService,\r\n public $q: ng.IQService,\r\n public CacheFactory: CacheFactory.ICacheFactory,\r\n private anchorNavService: navigation.IAnchorNavService,\r\n private $mdDialog: ng.material.IDialogService \r\n ) {}\r\n \r\n\r\n private getOrCreateCache() : CacheFactory.ICache {\r\n if (!this.CacheFactory.get(this.cacheName)) {\r\n this.CacheFactory.createCache(this.cacheName, {\r\n capacity: 10, //currently results in 1MB max size.\r\n storageMode: 'sessionStorage', // This cache will use `sessionStorage`.\r\n maxAge: 60 * 60 * 1000, // 60 minute\r\n deleteOnExpire: 'aggressive', //remove expired entries\r\n });\r\n }\r\n return this.CacheFactory.get(this.cacheName);\r\n }\r\n\r\n public loadPartsByProduct(rpv: IRouteParameter[]) : ng.IPromise { \r\n var url : string = \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Part/ByProduct\"\r\n var cacheKey = url + \":\" + pglob.RouteData.RouteEntry.RouteParameterStack[0].Id + \"-\" + pglob.RouteData.RouteEntry.RouteParameterStack[1].Id\r\n\r\n var deferred = this.$q.defer();\r\n var dataCache : CacheFactory.ICache = this.getOrCreateCache();\r\n\r\n //in cache?\r\n if (dataCache.get(cacheKey)) {\r\n deferred.resolve(dataCache.get(cacheKey));\r\n return deferred.promise;\r\n } \r\n\r\n this.$http({\r\n method: \"POST\"\r\n , url: url\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n , data : rpv \r\n }).then((response: { data: ServiceData }) => {\r\n dataCache.put(cacheKey, response.data);\r\n deferred.resolve(response.data);\r\n });\r\n \r\n return deferred.promise; \r\n } \r\n\r\n\r\n public loadAvailabilityByProduct(rpv: IRouteParameter[]): ng.IPromise { \r\n var url : string = \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Part/AvailabilityByProduct\"\r\n var cacheKey = url + \":\" + pglob.RouteData.RouteEntry.RouteParameterStack[0].Id + \"-\" + pglob.RouteData.RouteEntry.RouteParameterStack[1].Id\r\n\r\n var deferred = this.$q.defer();\r\n var dataCache : CacheFactory.ICache = this.getOrCreateCache();\r\n\r\n //in cache?\r\n if (dataCache.get(cacheKey)) {\r\n deferred.resolve(dataCache.get(cacheKey));\r\n return deferred.promise;\r\n } \r\n\r\n this.$http({\r\n method: \"POST\"\r\n , url: url\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n , data : rpv \r\n }).then((response: { data: AvailabilityServiceData}) : any => {\r\n dataCache.put(cacheKey, response.data);\r\n deferred.resolve(response.data);\r\n });\r\n \r\n return deferred.promise; \r\n\r\n } \r\n\r\n\r\n public loadDetail(partid : string) : ng.IHttpPromise { \r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Part/Detail\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { \"partid\" : partid }\r\n }).then((response : { data : PartDetailDTO}) : any => { \r\n //response.data.References.forEach((ref, i, arr) => {\r\n // ref.ProductReferenceDate = new Date(ref.ProductReferenceDate);//we recieve that as string, have to convert it.\r\n //});\r\n return response;\r\n }); \r\n }\r\n\r\n public loadDocumentsByPart(partid: string): ng.IHttpPromise {\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Part/Documents\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { \"itemId\": partid }\r\n }).then((response) => {\r\n return response;\r\n })\r\n }\r\n\r\n public loadYourPrice(): ng.IPromise {\r\n var cacheKey = \"YourPrice\";\r\n\r\n var deferred = this.$q.defer();\r\n var dataCache : CacheFactory.ICache = this.getOrCreateCache();\r\n\r\n //in cache?\r\n if (dataCache.get(cacheKey)) {\r\n deferred.resolve(dataCache.get(cacheKey));\r\n return deferred.promise;\r\n } \r\n\r\n this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Part/YourPrice\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: { }\r\n }).then((response: { data: YourPrice[]}) : any => {\r\n dataCache.put(cacheKey, response.data);\r\n deferred.resolve(response.data);\r\n });\r\n \r\n return deferred.promise; \r\n }\r\n\r\n public openDialog(partid: string, parentScp: any, partToProduct? : ErsatzteillistePart2Product | ArtikelReferenz2Object, ev?: MouseEvent) {\r\n if (ev) ev.preventDefault();\r\n this.anchorNavService.search(\"partid\", partid);\r\n this.$mdDialog.show({\r\n controller: 'PartDetailCtrl',\r\n templateUrl: 'part/PartDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n locals: {\r\n partId: partid,\r\n partToProduct: partToProduct,\r\n parentScope: parentScp\r\n },\r\n }).then(() => {\r\n this.anchorNavService.search({ \"partid\": null });\r\n }, () => {\r\n this.anchorNavService.search({ \"partid\": null });\r\n });\r\n }\r\n\r\n\r\n\r\n }\r\n}","\r\nmodule part {\r\n 'use strict';\r\n\r\n export class PartDetailCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n '$filter',\r\n '$window',\r\n 'partService', \r\n 'anchorNavService',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n '$mdPanel',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope : IPartDetailControllerScope,\r\n private $timeout : ng.ITimeoutService,\r\n private $filter : misc.IAdvancedNumberFilter,\r\n private $window : ng.IWindowService,\r\n private partService : IPartService,\r\n private anchorNavService : navigation.IAnchorNavService,\r\n private pageMetaService : navigation.IPageMetaService,\r\n private $mdDialog : ng.material.IDialogService,\r\n private $mdPanel : ng.material.IPanelService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n $scope.error = null;\r\n }\r\n \r\n locals : { parentScope: IPartControllerScope, partId : string, partToProduct: ArtikelReferenz2Object | ErsatzteillistePart2Product };\r\n\r\n \r\n public $onInit(): void {\r\n //try to get revid from query if not in locals (popup)\r\n if (!this.locals || !this.locals.partId) {\r\n var id = this.anchorNavService.getQueryValue('partid');\r\n if (id && typeof id !== 'boolean') {\r\n if (!this.locals) {\r\n this.locals = { parentScope: null, partId : null, partToProduct: null };\r\n }\r\n this.locals.partId = id;\r\n }\r\n } \r\n\r\n if (this.locals && this.locals.partId) {\r\n this.loadPart(this.locals.partId);\r\n } else {\r\n this.$scope.partIdMissing = true;\r\n }\r\n \r\n if (this.locals && this.locals.partToProduct){\r\n this.$scope.partToProduct = this.locals.partToProduct;\r\n }\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n loadPart(partid : string) {\r\n this.$scope.requestOnGoing = true;\r\n this.partService.loadDetail(partid).then((response) => {\r\n this.$scope.requestOnGoing = false;\r\n this.$scope.data = response.data; \r\n })\r\n .catch((response) => {\r\n this.$scope.error = response.status;\r\n })\r\n .finally(() => {\r\n this.$scope.requestOnGoing = false;\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n}","\r\nmodule part {\r\n 'use strict';\r\n\r\n export class PartOrderDetailCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n 'partService',\r\n 'anchorNavService',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n '$mdSidenav',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IPartOrderDetailControllerScope,\r\n private $timeout: ng.ITimeoutService,\r\n private partService: IPartService, \r\n private anchorNavService: navigation.IAnchorNavService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $mdSidenav: ng.material.ISidenavService ,\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.showButton = false;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.showPartDetail = false;\r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event: ng.IAngularEvent, re: IRouteEntry) => {\r\n this.load(re);\r\n });\r\n this.load(pglob.RouteData.RouteEntry);\r\n\r\n this.$timeout(() => { $scope.showButton = true; })\r\n \r\n }\r\n\r\n locals: { };\r\n\r\n load(re: IRouteEntry) {\r\n this.$scope.requestOnGoing = true;\r\n this.partService.loadPartsByProduct(re.RouteParameterStack).then(( data: ServiceData ) => {\r\n this.setData(data);\r\n });\r\n this.partService.loadAvailabilityByProduct(re.RouteParameterStack).then(( data: AvailabilityServiceData ) => {\r\n this.$scope.availability = data;\r\n });\r\n }\r\n\r\n\r\n setData(data: ServiceData) {\r\n this.$scope.data = data;\r\n this.$scope.categories = data.PartsReference.Kategorien;\r\n this.$scope.referenceGroups = data.ReferenceGroup;\r\n\r\n this.setSelectedCategory(this.$scope.categories[0]);\r\n\r\n var rpm: IRouteParameter = this.pageMetaService.searchRouteParameter(\"ProductName\");\r\n if (!rpm) return;\r\n this.$scope.productName = rpm.DisplayName[this.$scope.meta('hlFull')];\r\n\r\n this.$scope.requestOnGoing = false;\r\n };\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n setSelectedCategory(category: ArtikelReferenzKategorie) {\r\n this.$scope.selectedCategory = category;\r\n this.$scope.selectedGroup = category.Gruppen[0];\r\n if (this.$mdSidenav('left').isLockedOpen()) this.scroll();\r\n }\r\n\r\n\r\n getSelectedCategory(): ArtikelReferenzKategorie{\r\n return this.$scope.selectedCategory;\r\n }\r\n\r\n setSelectedGroup(group: ArtikelReferenzGruppe) {\r\n this.$scope.partsearch = null;\r\n this.$scope.selectedGroup = group;\r\n this.$timeout(() => {\r\n this.scroll();\r\n })\r\n \r\n }\r\n\r\n scroll(): void {\r\n var offset = -46;\r\n if (this.$scope.categories[0] == this.$scope.selectedCategory && this.$scope.categories[0].Gruppen[0] == this.$scope.selectedGroup) offset = -200; //different offset for first element, cause of header.\r\n\r\n this.$mdSidenav('left').close().then(() => {\r\n ($).smoothScroll({\r\n scrollElement: $(\"#part-list\"),\r\n scrollTarget: '#sh-' + this.$scope.selectedCategory.Nummer + \"-\" + this.$scope.selectedGroup.Nummer,\r\n offset: offset,\r\n });\r\n });\r\n }\r\n\r\n\r\n getSelectedGroup(): ArtikelReferenzGruppe {\r\n return this.$scope.selectedGroup;\r\n }\r\n\r\n toggleSideNav(id): void {\r\n this.$mdSidenav(id).toggle();\r\n }\r\n\r\n showPartDetail(): void {\r\n this.$scope.showPartDetail = true;\r\n }\r\n\r\n hidePartDetail(): void {\r\n this.$scope.showPartDetail = false;\r\n }\r\n\r\n openDetailModal($event: MouseEvent, part: Part, p2p: Part2Product): void {\r\n this.$scope.partDetailData = null;\r\n this.loadPart(part.ID, p2p);\r\n }\r\n\r\n loadPart(partid: string, p2p: Part2Product) {\r\n this.$scope.requestOnGoing = true;\r\n this.partService.loadDetail(partid).then((response) => {\r\n this.$scope.requestOnGoing = false;\r\n this.$scope.partDetailData = response.data;\r\n this.$scope.showPartDetail = true;\r\n this.$scope.partToProduct = p2p;\r\n });\r\n }\r\n\r\n }\r\n\r\n}","\r\nmodule part {\r\n 'use strict';\r\n\r\n export class PartCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n '$filter',\r\n '$element',\r\n 'partService', \r\n 'anchorNavService',\r\n 'localStorageService', \r\n 'pageMetaService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IPartControllerScope,\r\n private $timeout: ng.ITimeoutService,\r\n private $filter: misc.IAdvancedNumberFilter,\r\n private $element : ng.IRootElementService,\r\n private partService: IPartService,\r\n private anchorNavService: navigation.IAnchorNavService,\r\n private localStorageService: any,\r\n private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n \r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n if ($scope.meta('hl') == 'D') {\r\n $scope.topLevelNav = [\r\n { 'id' : 1, 'name' : 'Artikelreferenz' }\r\n , { 'id' : 2, 'name' : 'Ersatzteilliste' }\r\n ];\r\n } else {\r\n $scope.topLevelNav = [\r\n { 'id' : 1, 'name' : 'Parts Reference' }\r\n , { 'id' : 2, 'name' : 'Spare Parts' }\r\n ];\r\n }\r\n\r\n var filterGroups = (scope : IPartControllerScope, cat : ArtikelReferenzKategorie) => {\r\n scope.groups = [];\r\n if (!cat) return;\r\n cat.Gruppen.forEach((group) => {\r\n var found = scope.selectedReferences.filter((reference) => {\r\n return reference.GruppeNummer== group.Nummer; \r\n });\r\n if (found.length > 0) scope.groups.push(group);\r\n });\r\n }\r\n\r\n \r\n $scope.$watch('partsearch', (newVal : string, oldval : string, scope : IPartControllerScope) => {\r\n if (newVal != oldval) {\r\n anchorNavService.search(newVal ? {\"partid\" : newVal} : {\"partid\" : null}); \r\n }\r\n });\r\n\r\n var queryPartId = anchorNavService.getQueryValue('partid');\r\n if (queryPartId !== null && typeof queryPartId !== 'boolean' ) { \r\n this.partService.openDialog(queryPartId, $scope);\r\n };\r\n\r\n //update groups on cat select\r\n $scope.$watch('selectedPartsReferenceCat', (newVal : ArtikelReferenzKategorie, oldval : ArtikelReferenzKategorie, scope : IPartControllerScope) => {\r\n if (!scope.selectedReferences) { \r\n if (scope.selectedPartsReferenceCat) {\r\n scope.groups = scope.selectedPartsReferenceCat.Gruppen;\r\n scope.selectedPartsReferenceGroup = scope.groups[0];\r\n }\r\n return;\r\n }\r\n filterGroups(scope, newVal); \r\n });\r\n\r\n var setData = (data : ServiceData) => {\r\n $scope.data = data;\r\n $scope.categories = data.PartsReference.Kategorien;\r\n $scope.referenceGroups = data.ReferenceGroup; \r\n\r\n $scope.selectedPartsReferenceCat = $scope.categories[0];\r\n $scope.selectedReferenceGroup = $scope.referenceGroups[0];\r\n\r\n $scope.replacementParts = [];\r\n data.ReferenceGroup.forEach((group) => {\r\n group.Part2Product.forEach((p2p) => {\r\n $scope.replacementParts.push(p2p);\r\n });\r\n });\r\n\r\n if (anchorNavService.getQueryValue(\"PartId\") && typeof anchorNavService.getQueryValue(\"PartId\") !== 'boolean') { \r\n $scope.partsearch = anchorNavService.getQueryValue(\"PartId\");\r\n };\r\n };\r\n\r\n partService.loadPartsByProduct(pglob.RouteData.RouteEntry.RouteParameterStack).then((data: ServiceData) => {\r\n setData(data);\r\n });\r\n partService.loadAvailabilityByProduct(pglob.RouteData.RouteEntry.RouteParameterStack).then(( data: AvailabilityServiceData ) => {\r\n $scope.availability = data;\r\n });\r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event: ng.IAngularEvent, re: IRouteEntry) => {\r\n partService.loadPartsByProduct(re.RouteParameterStack).then(( data: ServiceData ) => {\r\n setData(data);\r\n });\r\n partService.loadAvailabilityByProduct(pglob.RouteData.RouteEntry.RouteParameterStack).then(( data: AvailabilityServiceData ) => {\r\n $scope.availability = data;\r\n });\r\n });\r\n\r\n\r\n \r\n $scope.$watch('settings.showList', (newVal : boolean, oldval : boolean, scope : IPartControllerScope) => {\r\n if (typeof newVal !== 'undefined' && newVal != oldval) this.localStorageService.set('PartCtrl-Settings', this.$scope.settings);\r\n });\r\n \r\n $scope.settings = this.localStorageService.get('PartCtrl-Settings') || new PartCtrlSettings(false);\r\n\r\n }\r\n\r\n }\r\n\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule part {\r\n 'use strict';\r\n\r\n var part = angular.module('part', ['navigation', 'shoppinglist'])\r\n .controller('PartCtrl', PartCtrl)\r\n .controller('PartDetailCtrl', PartDetailCtrl)\r\n .controller('PartOrderDetailCtrl', PartOrderDetailCtrl)\r\n .filter('partsByGroupAndCat', partsByGroupAndCatFilter)\r\n .directive('partBox',PartBoxDirective)\r\n .directive('productBox',ProductBoxDirective)\r\n .directive('partDetail', PartDetailDirective)\r\n .service('partService', PartService); \r\n}","/// \r\n\r\nmodule shoppinglist {\r\n\r\n export enum ShoppingListType {\r\n Merkliste = 1,\r\n Warenkorb = 2,\r\n GeteilteMerkliste = 3\r\n }\r\n\r\n export interface IShoppingListService {\r\n getLists() : { [id: string] : ShoppingList; };\r\n getList(listId) :ShoppingList;\r\n getLocalSetting(key, defaultValue) :any ;\r\n setLocalSetting(key: string, value : any) :void ;\r\n addToList(partid : string, listType : ShoppingListType, qty : number, onSuccess : (data : ShoppingList) => void) :ng.IHttpPromise ;\r\n updateQty(listid : string, requestid) :void ;\r\n updateQtyNetwork(listid : string, parts, requestid) : ng.IHttpPromise ;\r\n updateQtyDebounced(listid : string) :void ;\r\n fetchLists(id, onSuccess) :ng.IHttpPromise ;\r\n getListsById(listid : string) :ng.IHttpPromise ;\r\n shareList(listid : string, sendMail, eMailAddress, message, onSuccess) :ng.IHttpPromise ;\r\n appendToList(listid : string, listType: ShoppingListType) :ng.IHttpPromise ;\r\n checkForUpdates(serverState, onFetched) :boolean; \r\n getTotalQty(list) :number ;\r\n calculateAvailability(list) :any ;\r\n getTotal(list, yourPriceEnabled : boolean) :number;\r\n getQtySummary(list) :string ; \r\n \r\n show(listType: ShoppingListType, target : EventTarget) : void; \r\n hide(target? : EventTarget) : void; \r\n subscribeOnShowChange(scope : ng.IScope, callback : (event:ng.IAngularEvent, visibleListType: number, target: EventTarget) => void) : void; \r\n \r\n subscribeOnUpdated(scope : ng.IScope, callback : (event:ng.IAngularEvent, list : ShoppingList) => void) : void; \r\n\r\n \r\n\r\n\r\n }\r\n}","\r\n/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n export class AvailabilityData {\r\n constructor(\r\n public Status: number,\r\n public QtyAvailable: number,\r\n public UnitDe: string,\r\n public UnitEn: string,\r\n public TimeToShipPeriod: number,\r\n public TimeToShip: number,\r\n public TextDe: string,\r\n public TextEn: string)\r\n {\r\n }\r\n }\r\n}","\r\n/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n export class Image {\r\n constructor(\r\n public Height: number,\r\n public Width: number,\r\n public OriginalHeight: number,\r\n public OriginalWidth: number,\r\n public RevDestId: number,\r\n public RevDestName: string,\r\n public TitleD: string,\r\n public TitleE: string,\r\n public MaxSideLength: number,\r\n public Url: string,\r\n public ImageUrl: string,\r\n public ImageUrlRetina: string\r\n )\r\n {\r\n }\r\n }\r\n}","\r\n/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n export class ShoppingListLine {\r\n constructor(\r\n public ID: string,\r\n public Part: part.Part,\r\n public Qty: number,\r\n public PPU: number,\r\n public Availability: AvailabilityData,\r\n public Image: Image,\r\n public Discount: number,\r\n public PPUAufAnfrage: boolean,\r\n public YourPPU: number)\r\n {\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n","\r\n/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n export class ShoppingList {\r\n constructor(\r\n public ID: string,\r\n public State: number,\r\n public Type: number,\r\n public Name: string,\r\n public OwnerUserName: string,\r\n public Created: Date,\r\n public Changed: Date,\r\n public Accessed: Date,\r\n public Lines: ShoppingListLine[],\r\n public dirty : boolean) //addition to manage changes to the shoppinglist.\r\n {\r\n }\r\n }\r\n}","/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n export class ServerState {\r\n constructor(\r\n public ID: string,\r\n public Changed: Date)\r\n {\r\n }\r\n }\r\n}","declare var pglob : IPhotometerGlobalVar;\r\n\r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n \r\n\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class ShoppingListCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n 'shoppingListService', \r\n '$timeout',\r\n '$element',\r\n '$window', \r\n '$mdDialog',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IShoppingListCtrlScope,\r\n private shoppingListService: IShoppingListService,\r\n private $timeout: ng.ITimeoutService,\r\n private $element: ng.IRootElementService,\r\n private $window: ng.IWindowService,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n\r\n\r\n var watcher = {};\r\n var addWatcher = (listId?) : void => {\r\n if (!listId) {\r\n for(var key in this.$scope.lists) {\r\n addWatcher(key);\r\n }\r\n return;\r\n }\r\n\r\n if (!watcher[listId]) {\r\n watcher[listId] = this.$scope.$watch('lists[\\'' + listId + '\\'].dirty', \r\n (newVal, oldVal) => {\r\n if (newVal != oldVal && this.$scope.lists[listId].dirty) {\r\n this.$scope.lists[listId].dirty = false;\r\n this.$scope.requestOnGoing = true;\r\n this.shoppingListService.updateQtyDebounced(listId); \r\n }\r\n }, true);\r\n }\r\n }\r\n\r\n $scope.vm = this;\r\n $scope.hl = pglob.RouteData.CurrentLanguage.hl;\r\n\r\n \r\n \r\n var SHOPPINGLIST_TYPE = 1;\r\n var CART_TYPE = 2;\r\n $scope.dirty = {};\r\n\r\n\r\n //init\r\n var dataEl = document.getElementById('cart-data');\r\n var serverState :ServerState;\r\n if (dataEl) {\r\n serverState = JSON.parse(dataEl.innerHTML);\r\n } \r\n\r\n if (serverState) { \r\n this.$scope.Updating = this.shoppingListService.checkForUpdates(serverState, () => {\r\n this.$scope.Updating = false;\r\n });\r\n }\r\n\r\n shoppingListService.subscribeOnShowChange($scope, (event, type, target) => {\r\n $scope.showType = type;\r\n\r\n if (type) {\r\n $($element).css({\r\n left: ($(target).closest('.page-el')[0] as Element).getBoundingClientRect().right - $($element).width()\r\n });\r\n $($element).find('nav li').css({\r\n right: ($(target).closest('.page-el')[0] as Element).getBoundingClientRect().right - ($(target)[0] as Element).getBoundingClientRect().right - 2\r\n });\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n $scope.lists = shoppingListService.getLists() || {};\r\n addWatcher();\r\n \r\n var clipWidth = $(\".cart-box .clip\").width(); \r\n var cartWidth = $(\".cart-box\").outerWidth() - clipWidth;\r\n var pageWidth = $(\"#page\").width();\r\n\r\n $scope.toggleCart = () => {\r\n $scope.PulledOut = !$scope.PulledOut;\r\n this.shoppingListService.setLocalSetting('PulledOut', $scope.PulledOut);\r\n\r\n var offset = pageWidth - cartWidth - clipWidth;\r\n \r\n if ($scope.PulledOut) {\r\n offset = pageWidth;\r\n } \r\n\r\n var sl = $(window).scrollLeft();\r\n if (!$scope.PulledOut) {\r\n sl = Math.max(0, pageWidth + clipWidth - $(window).width());\r\n }\r\n\r\n \r\n $('.cart-box').animate({ 'margin-left': offset - sl }, 800, 'easeOutQuart', function() { /*$(window).scroll()*/ });\r\n $('body > div').animate({ 'width': offset + cartWidth + 2 * clipWidth }, 1000, 'easeOutQuart', function() { \r\n if ($scope.PulledOut && $(window).width() < pageWidth + cartWidth + clipWidth) {\r\n $(window).scrollLeft(Math.max(0, pageWidth + clipWidth + 2 * cartWidth - $(window).width()));\r\n } else {\r\n $(window).scroll();\r\n }\r\n });\r\n\r\n //$('.cart-box').css({ 'margin-left': offset });\r\n //$('body > div').css({ 'width': offset + cartWidth + 2 * clipWidth });\r\n \r\n }; \r\n \r\n $(document).ready(function() { \r\n\r\n if ($(\".cart-box\")) {\r\n $(window).scroll(function(){\r\n $('.cart-pulled-in').css({\r\n 'margin-left': pageWidth - cartWidth - clipWidth - $(this).scrollLeft()\r\n });\r\n\r\n $('.cart-pulled-out').css({\r\n 'margin-left': pageWidth - $(this).scrollLeft()\r\n });\r\n });\r\n\r\n $('.cart-content').css({\r\n 'max-height': $(window).height() - 50\r\n });\r\n\r\n $(window).resize(function() {\r\n $('.cart-content').css({\r\n 'max-height': $(window).height() - 50\r\n });\r\n });\r\n }\r\n }); \r\n\r\n $scope.$on('cartUpdated', function(event, data) { \r\n var listId = data.ID\r\n\t $scope.requestOnGoing = false;\r\n if (!$scope.$$phase) $scope.$apply();\r\n addWatcher(listId);\r\n });\r\n \r\n\r\n }\r\n\r\n getListByType(type) {\r\n for (var key in this.$scope.lists) {\r\n if (this.$scope.lists[key] && this.$scope.lists[key].Type === type) return this.$scope.lists[key];\r\n } \r\n return null;\r\n } \r\n \r\n getTotalQty(list) {\r\n return this.shoppingListService.getTotalQty(list);\r\n };\r\n\r\n\r\n hideOverlay() {\r\n this.shoppingListService.hide();\r\n }\r\n\r\n openDetailModal(ev: MouseEvent, part: part.Part) : void {\r\n\r\n this.$mdDialog.show({\r\n controller: 'PartDetailCtrl',\r\n templateUrl: 'part/PartDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n partId: part.ID,\r\n //partToProduct: this.$scope.partToProduct,\r\n parentScope: this.$scope\r\n },\r\n })\r\n }\r\n \r\n\r\n }\r\n\r\n}\r\n\r\n","\r\n(function() {\r\n \r\n angular.module('photometer-shopping-list-button', ['photometer-shoppinglist-service', 'photometer-filter-ofnumber', 'photometer-shopping-list-direcitve'])\r\n \r\n .controller('shopping-list-button', ['$scope', function($scope) { \r\n //gähnende leere hier, wat?\r\n }])\r\n \r\n\r\n}());","\r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n export class ShareModalCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n 'shoppingListService', \r\n '$timeout',\r\n '$mdDialog',\r\n 'debounce',\r\n 'pageMetaService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IShareModalCtrlScope,\r\n private shoppingListService: IShoppingListService,\r\n private $timeout: ng.ITimeoutService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private debounce : navigation.IDebounceService,\r\n private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n\r\n $scope.vm = this;\r\n \r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.sharemode = 'offer';\r\n $scope.wizardpage = 1;\r\n $scope.requestOnGoing = false;\r\n\r\n this.setRequestOnGoing = debounce(this.setRequestOnGoing, 500, false);\r\n }\r\n\r\n //typedef for this.locals.x \r\n locals : { parentScope: IShoppingListDirectiveDirectiveScope };\r\n\r\n \r\n public $onInit(): void {\r\n this.$scope.parentScope = this.locals.parentScope;\r\n this.$scope.shoppingListId = this.locals.parentScope.shoppingList.ID\r\n }\r\n \r\n setRequestOnGoing(value) {\r\n this.$scope.requestOnGoing = value;\r\n }\r\n\r\n sendMail() {\r\n if (this.$scope.sharemode == 'offer') {\r\n this.$scope.cartShareForm.email.$setViewValue(null);\r\n this.$scope.cartShareForm.$commitViewValue();\r\n }\r\n\r\n this.$scope.cartShareForm.$setSubmitted();\r\n if (!this.$scope.cartShareForm.$valid) {\r\n return;\r\n }\r\n \r\n this.$scope.Error = null;\r\n\r\n if (this.$scope.sharemode == 'offer') {\r\n this.$scope.email = this.$scope.QuoteRequestEmail;\r\n }\r\n\r\n\r\n \r\n this.shoppingListService.shareList(this.$scope.parentScope.shoppingList.ID, this.$scope.sharemode != 'link', this.$scope.email, this.$scope.message, (data) => {\r\n this.setRequestOnGoing(false);\r\n\r\n if (!data.ListId) {\r\n this.$scope.Error = data.Error;\r\n if (data.Error == 'EMAIL') {\r\n this.$scope.cartShareForm.email.$setValidity(\"pattern\", false);\r\n return;\r\n }\r\n } else {\r\n this.$scope.shoppingListId = data.ListId;\r\n this.$scope.shoppingListLink = data.Url;\r\n }\r\n \r\n this.$scope.wizardpage += 1;\r\n }); \r\n\r\n\r\n this.setRequestOnGoing(true);\r\n }\r\n\r\n generateLink() {\r\n this.$scope.Error = null;\r\n this.shoppingListService.shareList(this.$scope.parentScope.shoppingList.ID, this.$scope.sharemode != 'link', this.$scope.email, this.$scope.message, (data) => {\r\n\r\n if (!data.ListId) {\r\n this.$scope.Error = data.Error;\r\n } else {\r\n this.$scope.shoppingListId = data.ListId;\r\n this.$scope.shoppingListLink = data.Url;\r\n }\r\n \r\n this.setRequestOnGoing(false);\r\n this.$scope.wizardpage += 1;\r\n //this.$scope.$apply();\r\n });\r\n this.setRequestOnGoing(true);\r\n\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n cancelDialog() {\r\n this.$mdDialog.cancel();\r\n };\r\n\r\n nextPage() {\r\n this.$scope.wizardpage = this.$scope.wizardpage + 1;\r\n \r\n this.$timeout(() => {\r\n this.$scope.$broadcast('md-resize-textarea');\r\n });\r\n }\r\n }\r\n};\r\n ","declare var pglob : IPhotometerGlobalVar;\r\n\r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n \r\n\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class ShoppingListViewCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n 'shoppingListService', \r\n '$timeout',\r\n '$element',\r\n '$window', \r\n '$mdDialog',\r\n '$location',\r\n '$filter',\r\n 'pageMetaService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IShoppingListViewCtrlScope,\r\n private shoppingListService: IShoppingListService,\r\n private $timeout: ng.ITimeoutService,\r\n private $element: ng.IRootElementService,\r\n private $window: ng.IWindowService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private $location : ng.ILocationService,\r\n private $filter : ng.IFilterService,\r\n private pageMetaService : navigation.IPageMetaService\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n $scope.hl = pglob.RouteData.CurrentLanguage.hl;\r\n \r\n if ($location.search() && $location.search()['id']) {\r\n shoppingListService.getListsById($location.search()['id']).then((response) => {\r\n $scope.list = response.data;\r\n shoppingListService.calculateAvailability($scope.list);\r\n }).catch((e) => {\r\n $scope.error = e.status + \": \" + e.statusText;\r\n }) \r\n } else {\r\n $scope.error = \"No list id\";\r\n }\r\n \r\n\r\n }\r\n \r\n getTotalQty(hl) { \r\n this.$scope.Availability = this.shoppingListService.calculateAvailability(this.$scope.list); \r\n return this.shoppingListService.getQtySummary(this.$scope.list);\r\n };\r\n\r\n getTotal(yourPriceEnabled : boolean) {\r\n return this.shoppingListService.getTotal(this.$scope.list, yourPriceEnabled); \r\n };\r\n\r\n \r\n getAvailabilityText(line : ShoppingListLine, hl : string) : string {\r\n if (hl == 'D') return line.Availability.TextDe;\r\n if (hl == 'E') return line.Availability.TextEn;\r\n };\r\n\r\n openDetailModal(ev: MouseEvent, part: part.Part) : void {\r\n\r\n this.$mdDialog.show({\r\n controller: 'PartDetailCtrl',\r\n templateUrl: 'part/PartDetailCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals: {\r\n partId: part.ID,\r\n //partToProduct: this.$scope.partToProduct,\r\n parentScope: this.$scope\r\n },\r\n })\r\n }\r\n\r\n print() {\r\n var printContents = this.$element.find('#printversion')[0].innerHTML;\r\n \r\n var popupWin = window.open('', '_blank');\r\n popupWin.document.open()\r\n popupWin.document.write(''\r\n + ''\r\n + '' + printContents + '');\r\n\r\n\r\n popupWin.document.title = $('.header h3', popupWin.document).text();\r\n\r\n //inject current date & user -> if we make it the angular way, we have to wait for $digest cycle to finish, \r\n //which triggers the popup blocker, or it won't get populated because hidden\r\n $('.printdate i', popupWin.document).each((index : number, el : Element) => {\r\n var text = $(el).text();\r\n\r\n text = text.replace(/__ReplaceDate:(.*?)__/, (a, b) => {\r\n return this.$filter('date')(Date.now(),b);\r\n });\r\n\r\n text = text.replace(/__User__/, (a, b) => {\r\n return this.pageMetaService.getPageMeta(navigation.USERNAME);\r\n });\r\n\r\n $(el).text(text); \r\n });\r\n\r\n $(\".no-print\", popupWin.document).empty();\r\n $(\".flex, .flex-grow, .layout-column\", popupWin.document).removeClass('flex flex-grow layout-column');\r\n\r\n };\r\n\r\n appendToShoppingList() {\r\n this.shoppingListService.appendToList(this.$scope.list.ID, ShoppingListType.Merkliste).then((response) => {\r\n this.$scope.RequestOnGoing = false;\r\n });\r\n this.$scope.RequestOnGoing = true;\r\n }\r\n\r\n\r\n }\r\n\r\n}\r\n\r\n","/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n \r\n AvailabilityDirective.$inject = [];\r\n export function AvailabilityDirective(): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE'\r\n , scope : {\r\n data : \"&\"\r\n }\r\n , replace: true\r\n , templateUrl: 'shoppinglist/AvailabilityDirective'\r\n , link: function (scope: IShoppingListDirectiveDirectiveScope, element: JQuery, attr: ng.IAttributes) {\r\n }\r\n\r\n };\r\n }\r\n}","/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n \r\n AddToCartButtonDirective.$inject = ['shoppingListService', '$timeout'];\r\n export function AddToCartButtonDirective(shoppingListService : ShoppingListService, $timeout: ng.ITimeoutService): ng.IDirective {\r\n\r\n return {\r\n restrict: 'EA'\r\n , scope : {\r\n partid : \"@\"\r\n , btnClass : \"@\"\r\n , listtype : \"@\"\r\n , qty : \"@\"\r\n , tooltip : \"@\"\r\n , requestOnGoing : \"=\"\r\n }\r\n , transclude: true\r\n , templateUrl : 'shoppinglist/AddToCartButtonDirective'\r\n , link: function(scope : IAddToCartDirectiveScope, element: JQuery, attr: ng.IAttributes ) {\r\n \r\n scope.addToCart = function() {\r\n scope.requestOnGoing = true;\r\n shoppingListService.addToList(scope.partid, scope.listtype, scope.qty, (data) => { \r\n\t scope.requestOnGoing = false;\r\n scope.success = true;\r\n $timeout(() => {\r\n scope.success = false;\r\n }, 1500);\r\n });\r\n }\r\n\r\n }\r\n };\r\n }\r\n}\r\n\r\n\r\n","/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n \r\n selectOnClickDirective.$inject = [];\r\n export function selectOnClickDirective(): ng.IDirective {\r\n return {\r\n restrict: 'A'\r\n , link: function (scope: IShoppingListDirectiveDirectiveScope, element: JQuery, attr: ng.IAttributes) {\r\n element.on('click', function () {\r\n (this).select(); //@TODO richtiger typ finden…\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n ShoppingListTableDirective.$inject = ['$timeout', '$filter', 'shoppingListService', '$mdDialog', '$templateCache', 'pageMetaService',];\r\n export function ShoppingListTableDirective(\r\n $timeout : ng.ITimeoutService\r\n , $filter : ng.IFilterService\r\n , shoppingListService : IShoppingListService\r\n , $mdDialog : ng.material.IDialogService\r\n , $templateCache : ng.ITemplateCacheService\r\n , pageMetaService: navigation.IPageMetaService): ng.IDirective {\r\n\r\n var myTemplate = $templateCache.get('shoppinglist/ShoppingListTableIndividuellDirective') || $templateCache.get('shoppinglist/ShoppingListTableDirective') || \"\";\r\n\r\n return {\r\n restrict: 'AE'\r\n , scope : {\r\n shoppingList : \"=\"\r\n , hl : \"=languageName\"\r\n , requestOnGoing: \"=\"\r\n , onOpenPartDetail : '&'\r\n }\r\n , replace: true\r\n , template: myTemplate\r\n , link: function (scope: IShoppingListDirectiveDirectiveScope, element: JQuery, attr: ng.IAttributes) {\r\n\r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n \r\n scope.showNettoNotification = shoppingListService.getLocalSetting(\"ShowNettoNotification\", true);\r\n scope.hideNettoNotification = () => { \r\n shoppingListService.setLocalSetting(\"ShowNettoNotification\", false); \r\n scope.showNettoNotification = false;\r\n }\r\n\r\n scope.yourPriceEnabled = shoppingListService.getLocalSetting(\"YourPriceEnabled\", false);\r\n scope.setYourPriceEnabled = (isEnabled: boolean) => { shoppingListService.setLocalSetting(\"YourPriceEnabled\", isEnabled); };\r\n\r\n scope.$watch('yourPriceEnabled', (newValue : boolean, oldValue : boolean) => {\r\n if (oldValue != newValue) {\r\n scope.setYourPriceEnabled(newValue);\r\n }\r\n });\r\n \r\n scope.$on('cartUpdated', function(event, data) { \r\n if (!scope.$$phase && ! scope.$root.$$phase) scope.$apply();\r\n });\r\n \r\n scope.getTotalQty = function() {\r\n scope.Availability = shoppingListService.calculateAvailability(scope.shoppingList); \r\n return shoppingListService.getQtySummary(scope.shoppingList);\r\n };\r\n\r\n scope.getTotal = function (yourPriceEnabled : boolean) {\r\n return shoppingListService.getTotal(scope.shoppingList, yourPriceEnabled); \r\n };\r\n\r\n scope.removeLine = function(index) {\r\n if (!scope.partForm.$valid) return;\r\n scope.shoppingList.Lines.splice(index, 1); //remove\r\n scope.shoppingList.dirty = true; \r\n };\r\n\r\n \r\n scope.clear = function(index) {\r\n scope.shoppingList.Lines = []; //remove all and everything\r\n scope.shoppingList.dirty = true; \r\n };\r\n\r\n scope.changeQty = function(line, amount) {\r\n if (!scope.partForm.$valid) {\r\n line.invalid = true;\r\n return;\r\n }\r\n if (amount) {\r\n line.Qty = Math.max(line.Qty + amount, 0);\r\n }\r\n scope.shoppingList.dirty = true;\r\n line.invalid = false;\r\n }; \r\n \r\n scope.getAvailabilityText = function(line, hl) {\r\n if (hl == 'D') return line.Availability.TextDe;\r\n if (hl == 'E') return line.Availability.TextEn;\r\n };\r\n\r\n scope.print = function() { \r\n var printContents = element[0].innerHTML;\r\n\r\n printContents = printContents.replace(/md-toolbar/gmi, 'div');\r\n printContents = printContents.replace(/md-content/gmi, 'div');\r\n\r\n\r\n var popupWin = window.open('', '_blank');\r\n popupWin.document.open()\r\n popupWin.document.write(''\r\n + ''\r\n + '' + printContents + '');\r\n\r\n\r\n popupWin.document.title = $('.header h3', popupWin.document).text();\r\n\r\n //$('md-toolbar', popupWin.document).replaceWith($('
').attr('class','header').html($('md-toolbar').html()));\r\n //$('md-content', popupWin.document).replaceWith($('
').attr('class','cart-art').html($('md-content').html()));\r\n\r\n\r\n //inject current date & user -> if we make it the angular way, we have to wait for $digest cycle to finish, \r\n //which triggers the popup blocker, or it won't get populated because hidden\r\n $('.printdate i', popupWin.document).each(function() {\r\n var text = $(this).text();\r\n\r\n text = text.replace(/__ReplaceDate:(.*?)__/, function(a, b) {\r\n return $filter('date')(Date.now(),b);\r\n });\r\n\r\n text = text.replace(/__User__/, function(a, b) {\r\n return pageMetaService.getPageMeta(navigation.USERNAME);\r\n });\r\n\r\n $(this).text(text); \r\n });\r\n\r\n $(\".no-print\", popupWin.document).empty();\r\n $(\".flex, .flex-grow, .layout-column\", popupWin.document).removeClass('flex flex-grow layout-column');\r\n\r\n\r\n \r\n };\r\n \r\n scope.buttonsDisabled = function() { \r\n if (!scope.shoppingList || !scope.shoppingList.Lines || scope.shoppingList.Lines.length == 0) return true;\r\n if (scope.requestOnGoing) return true;\r\n return false;\r\n }\r\n \r\n scope.showSummary = function() { \r\n if (!scope.shoppingList || !scope.shoppingList.Lines || scope.shoppingList.Lines.length == 0) return false;\r\n if (!scope.partForm || !scope.partForm.$valid) return false;\r\n return true;\r\n }\r\n\r\n \r\n scope.openModal = function(ev : MouseEvent) {\r\n $mdDialog.show({\r\n controller: 'ShareModalCtrl',\r\n templateUrl: 'shoppinglist/ShareModalCtrl',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose:true,\r\n //fullscreen: true, // Only for -xs, -sm breakpoints.\r\n locals : {\r\n parentScope : scope \r\n },\r\n })\r\n .then(function() {\r\n console.log('Modal closed at: ' + new Date());\r\n }, function() {\r\n console.log('Modal canceled at: ' + new Date());\r\n });\r\n };\r\n\r\n \r\n scope.openPartDetail = (ev: ng.IAngularEvent, p: part.Part) => {\r\n scope.onOpenPartDetail({ event: ev, part: p });\r\n }\r\n\r\n }\r\n\r\n };\r\n }\r\n};","/// \r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n \r\n var escape = new RegExp('[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]', 'g');\r\n\r\n export interface IOfNumber extends ng.IFilterService {\r\n (name: 'ofnumber'): (amount, maxFraction) => string;\r\n }\r\n \r\n OfNumber.$inject = ['$filter', '$locale'];\r\n export function OfNumber($filter, $locale) {\r\n\r\n\r\n var number = $filter('number'), formats = $locale.NUMBER_FORMATS;\r\n return function (amount : number, maxFraction : number) {\r\n var value = number(amount, maxFraction);\r\n value = value.replace(/0+$/, '');\r\n return value.replace(new RegExp('\\\\' + formats.DECIMAL_SEP + '$'), '');\r\n } \r\n \r\n }\r\n}\r\n\r\n\r\n","\r\n\r\nmodule shoppinglist {\r\n 'use strict';\r\n\r\n /**\r\n * Services that persists and retrieves TODOs from localStorage.\r\n */\r\n export class ShoppingListService implements IShoppingListService {\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$http'\r\n , '$rootScope'\r\n , 'localStorageService'\r\n , 'debounce'\r\n , '$filter'\r\n ];\r\n\r\n private _lastRequest;\r\n private _lists;\r\n private _settings : { [key: string] : any; };\r\n private _debouncedUpdateQty;\r\n private _visibleListType : number; //type or null;\r\n\r\n\r\n constructor(\r\n private $http: ng.IHttpService,\r\n private $rootScope: ng.IRootScopeService,\r\n private localStorageService: any,\r\n private debounce: navigation.IDebounceService,\r\n private $filter: IOfNumber\r\n ) {\r\n\r\n this._visibleListType = null;\r\n this._lists = this.localStorageService.get('lists') || {};\r\n this._settings = this.localStorageService.get('settings') || {}; \r\n \r\n }\r\n \r\n public show(listType, target) {\r\n this._visibleListType = listType;\r\n this.$rootScope.$emit('shopping-list-show-change', this._visibleListType, target);\r\n }\r\n\r\n public hide(target) {\r\n this._visibleListType = null;\r\n this.$rootScope.$emit('shopping-list-show-change', this._visibleListType, target);\r\n }\r\n\r\n public subscribeOnShowChange(scope : ng.IScope, callback : (event:ng.IAngularEvent, visibleListType: number, target: EventTarget) => void) {\r\n var handler = this.$rootScope.$on('shopping-list-show-change', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n public subscribeOnUpdated(scope : ng.IScope, callback : (event:ng.IAngularEvent, list : ShoppingList) => void) {\r\n var handler = this.$rootScope.$on('shopping-list-updated', callback);\r\n if (scope) scope.$on('$destroy', handler);\r\n }\r\n\r\n public getLists() :any{\r\n return this._lists;\r\n }\r\n \r\n public getList(listId) :any{\r\n return this._lists[listId];\r\n }\r\n \r\n public getLocalSetting(key, defaultValue) :any {\r\n if (this._settings[key] == undefined && defaultValue != undefined) this.setLocalSetting(key, defaultValue)\r\n return this._settings[key];\r\n }\r\n \r\n public setLocalSetting(key: string, value : any) :void {\r\n this._settings[key] = value;\r\n this.localStorageService.set('settings', this._settings);\r\n }\r\n \r\n public addToList(partid, listType : ShoppingListType, qty, onSuccess) :ng.IHttpPromise {\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ShoppingList/AddToList\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"partid\" : partid\r\n , \"listType\" : listType\r\n , \"qty\": qty\r\n }\r\n }).then( \r\n (response : { data : ShoppingList}) :any => { //success\r\n if (onSuccess) onSuccess.call(this, response.data);\r\n if (!this._lists[response.data.ID]) this._lists[response.data.ID] = {};\r\n angular.extend(this._lists[response.data.ID], response.data);\r\n this.localStorageService.set('lists', this._lists);\r\n this.$rootScope.$broadcast('cartUpdated', this._lists[response.data.ID]);\r\n this.$rootScope.$emit('shopping-list-updated', this._lists[response.data.ID]);\r\n }\r\n , (response : { data : ShoppingList[]}) :any => { //error\r\n throw \"Error in 'ShoppingListService.AddToList'\";\r\n }); \r\n \r\n }\r\n \r\n public updateQty(listid, requestid) :void {\r\n\r\n var parts = {}, requestid = requestid || new Date().getTime();\r\n\r\n this._lists[listid].Lines.forEach(function(line, index, arr) {\r\n parts[line.Part.ID] = line.Qty;\r\n });\r\n\r\n this.updateQtyNetwork(listid, parts, requestid);\r\n\r\n }\r\n \r\n public updateQtyNetwork(listid, parts, requestid) : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ShoppingList/UpdateQty\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"listType\": this._lists[listid].Type\r\n , \"version\": this._lists[listid].Changed\r\n }\r\n , data : parts\r\n }).then( \r\n (response : { data : ShoppingList}) :any => { //success\r\n //config.context.requestid\r\n if (!this._lists[response.data.ID]) this._lists[response.data.ID] = {};\r\n\r\n if (this._lastRequest != requestid) return; //there were changes in the meantime, ignore this update.\r\n\r\n angular.extend(this._lists[response.data.ID], response.data);\r\n this.localStorageService.set('lists', this._lists);\r\n this.$rootScope.$broadcast('cartUpdated', this._lists[response.data.ID]);\r\n this.$rootScope.$emit('shopping-list-updated', this._lists[response.data.ID]);\r\n }\r\n , (response : { data : ShoppingList[]}) :any => { //error\r\n throw \"Error in 'ShoppingListService.UpdateQty'\";\r\n });\r\n\r\n }\r\n\r\n \r\n public updateQtyDebounced(listid) :void {\r\n this._lastRequest = new Date().getTime();\r\n if (!this._debouncedUpdateQty) this._debouncedUpdateQty = this.debounce(this.updateQty, 500, false);\r\n this._debouncedUpdateQty.call(this, listid, this._lastRequest);\r\n }\r\n \r\n public fetchLists(id, onSuccess) :ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\",\r\n url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ShoppingList\",\r\n headers: { 'Content-Type': 'application/json' }\r\n }).then( \r\n (response : { data : ShoppingList[]}) :any => { //success\r\n if (onSuccess) onSuccess.call(this, response.data);\r\n\r\n response.data.forEach((list, index, arr) => {\r\n if (!this._lists[list.ID]) this._lists[list.ID] = {};\r\n angular.extend(this._lists[list.ID], list);\r\n this.calculateAvailability(this._lists[list.ID]);\r\n this.localStorageService.set('lists', this._lists);\r\n this.$rootScope.$broadcast('cartUpdated', this._lists[list.ID]);\r\n this.$rootScope.$emit('shopping-list-updated', this._lists[list.ID]);\r\n });\r\n }\r\n , (response : { data : ShoppingList[]}) :any => { //error\r\n throw \"Error in 'ShoppingListService.FetchLists'\";\r\n });\r\n \r\n }\r\n \r\n public getListsById(listid : string) :ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ShoppingList/ListsById\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"listId\": listid\r\n }\r\n }).then((response : {data : ShoppingList}) : any => {\r\n return response;\r\n });\r\n \r\n }\r\n \r\n public shareList(listid, sendMail, eMailAddress, message, onSuccess) :ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ShoppingList/ShareList\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"listType\": this._lists[listid].Type\r\n , \"version\": this._lists[listid].Changed\r\n , \"sendEMail\" : sendMail\r\n }\r\n , data : {\r\n \"EmailAddress\" : eMailAddress || null\r\n , \"Message\" : message || null\r\n }\r\n }).then( \r\n (response : { data : ShoppingList}) :any => { //success\r\n if (onSuccess) onSuccess.call(this, response.data);\r\n }\r\n , (response : { data : ShoppingList[]}) :any => { //error\r\n throw \"Error in 'ShoppingListService.ShareList'\";\r\n });\r\n\r\n }\r\n \r\n public appendToList(listid : string, listType : ShoppingListType) :ng.IHttpPromise {\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ShoppingList/AppendToList\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"listId\": listid\r\n , \"listType\": listType\r\n }\r\n }).then( (response : {data : ShoppingList}) : any => {\r\n if (!this._lists[response.data.ID]) this._lists[response.data.ID] = {};\r\n\r\n angular.extend(this._lists[response.data.ID], response.data);\r\n this.localStorageService.set('lists', this._lists);\r\n this.$rootScope.$broadcast('cartUpdated', this._lists[response.data.ID]);\r\n this.$rootScope.$emit('shopping-list-updated', this._lists[response.data.ID]);\r\n return response;\r\n });\r\n }\r\n\r\n \r\n public checkForUpdates(serverState, onFetched) :boolean {\r\n var fetching = false;\r\n\r\n for (var i = 0; i < serverState.length; i++) {\r\n var list = serverState[i];\r\n var serverDate = new Date(list.Changed).getTime();\r\n \r\n if (!this._lists[list.ID]) {\r\n this.fetchLists(list.ID, onFetched);\r\n fetching = true;\r\n break;\r\n }\r\n \r\n var localDate = new Date(this._lists[list.ID].Changed).getTime();\r\n\r\n if (serverDate > localDate) {\r\n this.fetchLists(list.ID, onFetched);\r\n fetching = true;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n for (var key in this._lists) {\r\n var existsOnServer = false;\r\n serverState.forEach(function(list, index, arr) {\r\n if (list.ID == key) {\r\n existsOnServer = true;\r\n return;\r\n }\r\n }, this);\r\n if (!existsOnServer) delete this._lists[key];\r\n }\r\n this.localStorageService.set('lists', this._lists);\r\n\r\n return fetching;\r\n }\r\n\r\n \r\n \r\n public getTotalQty(list) :number {\r\n if (!list) return 0;\r\n var total = 0;\r\n list.Lines.forEach(function (line, index, array) {\r\n total += line.Qty;\r\n });\r\n return total;\r\n }\r\n \r\n public calculateAvailability(list) :any {\r\n if (!list) return 'auf Anfrage';\r\n\r\n var minStatus = 99;\r\n var maxTimeToShip = 0;\r\n var maxTimeToShipPeriod = 0;\r\n\r\n list.Lines.forEach(function (line, index, array) {\r\n\r\n var tmpStatus = line.Availability.Status;\r\n if (line.Qty > line.Availability.QtyAvailable) tmpStatus = -1;\r\n minStatus = Math.min(minStatus, tmpStatus);\r\n maxTimeToShip = Math.max(line.Availability.TimeToShip, maxTimeToShip);\r\n maxTimeToShipPeriod = Math.max(line.Availability.TimeToShipPeriod, maxTimeToShipPeriod);\r\n\r\n line.calculatedAvailability = line.calculatedAvailability || {};\r\n\r\n line.calculatedAvailability.Status = tmpStatus;\r\n line.calculatedAvailability.TimeToShip = line.Availability.TimeToShip;\r\n line.calculatedAvailability.TimeToShipPeriod = line.Availability.TimeToShipPeriod;\r\n\r\n });\r\n\r\n return {\r\n Status: minStatus\r\n , TimeToShip: maxTimeToShip\r\n , TimeToShipPeriod: maxTimeToShipPeriod\r\n };\r\n }\r\n \r\n public getTotal(list, yourPriceEnabled : boolean) :number{\r\n if (!list) return 0;\r\n var total = 0;\r\n var aufAnfrage = false;\r\n list.Lines.forEach(function (line : ShoppingListLine, index, array) {\r\n aufAnfrage = line.Part.HasAufAnfrage || line.PPUAufAnfrage;\r\n if (yourPriceEnabled) {\r\n total += line.YourPPU * line.Qty;\r\n } else {\r\n total += line.PPU * line.Qty;\r\n }\r\n });\r\n if (aufAnfrage) return null;\r\n return total;\r\n }\r\n\r\n \r\n public getQtySummary(list) :string { \r\n if (!list) return '';\r\n var total = {};\r\n list.Lines.forEach(function (line, index, array) {\r\n var u = pglob.RouteData.CurrentLanguage.hl == 'D' ? line.Availability.UnitDe : line.Availability.UnitEn;\r\n total[u] = total[u] || 0;\r\n total[u] += line.Qty;\r\n });\r\n\r\n var unit = \"\";\r\n for (var key in total) {\r\n unit += this.$filter('ofnumber')(total[key],2) + ' ' + key + ' / ';\r\n }\r\n unit = unit.replace(/ \\/ $/, '');\r\n\r\n return unit;\r\n }\r\n\r\n\r\n }\r\n\r\n}\r\n\r\n","/// \r\n\r\n\r\nmodule product_references {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class ProductReferenceService {\r\n static $inject = [\r\n '$http',\r\n 'CacheFactory', \r\n ];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n private CacheFactory: CacheFactory.ICacheFactory\r\n ) { } \r\n\r\n public getReferences(re : IRouteEntry) : ng.IHttpPromise {\r\n\r\n var productFilter :IRouteParameter[] = re.RouteParameterStack.filter((param : IRouteParameter, i: number) : boolean => {\r\n return param.Placeholder === \"ProductName\"\r\n })\r\n\r\n //if (productFilter.length < 1) throw \"Error, no product\";\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/ProductReference/ByProduct/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"productId\" : productFilter[0] ? productFilter[0].Id : null\r\n }\r\n , data: re.RouteParameterStack\r\n }).then(\r\n (response : { data : ProductReferenceData}) :any => { \r\n response.data.References.forEach((ref, i, arr) => {\r\n ref.ProductReferenceDate = new Date(ref.ProductReferenceDate);//we recieve that as string, have to convert it.\r\n });\r\n response.data.showProductFilter = productFilter[0] ? false : true;\r\n return response;\r\n }); \r\n\r\n }\r\n\r\n public getProducts(): ng.IHttpPromise {\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/Product/GetAll\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {}\r\n }).then((response) => {\r\n return response;\r\n });\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule product_references {\r\n 'use strict';\r\n\r\n export class Product {\r\n public Id: number;\r\n public Name: string;\r\n }\r\n\r\n}\r\n\r\n\r\n","\r\n/// \r\n\r\nmodule product_references {\r\n 'use strict';\r\n\r\n export class ProductReferenceFilterData {\r\n constructor(\r\n public MeasuringTask: string,\r\n public inUseSince: string,\r\n public Country: string,\r\n public Industry: string,\r\n public productName?: string \r\n )\r\n {\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n","\r\n/// \r\n\r\nmodule product_references {\r\n 'use strict';\r\n\r\n export class ProductReferenceData {\r\n constructor(\r\n public References: ProductReference[],\r\n public Countries: string[],\r\n public MeasuringTasks: string[],\r\n public Industries: string[],\r\n public showProductFilter?: boolean\r\n )\r\n {\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\n/// \r\n\r\nmodule product_references {\r\n 'use strict';\r\n\r\n export class ProductReference {\r\n constructor(\r\n public MeasuringTask: string,\r\n public ProductReferenceDate: Date,\r\n public ProductReferenceCustomer: string,\r\n public ProductReferenceUnits: number,\r\n public CountryName: string,\r\n public Industry: string,\r\n public ProductName?: string\r\n )\r\n {\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n","declare var pglob : IPhotometerGlobalVar;\r\n\r\n\r\nmodule product_references {\r\n 'use strict';\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t */\r\n export class ProductReferenceCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope', \r\n 'productReferenceService', \r\n 'pageMetaService',\r\n '$filter', \r\n 'anchorNavService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IProductReferencesCtrlScope,\r\n private productReferenceService: ProductReferenceService,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $filter: IProductReferenceFilter,\r\n private anchorNavService : navigation.IAnchorNavService\r\n ) {\r\n\r\n // 'vm' stands for 'view model'. We're adding a reference to the controller to the scope\r\n // for its methods to be accessible from view / HTML\r\n $scope.vm = this;\r\n \r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.limit = 5;\r\n \r\n this.productReferenceService.getReferences(pglob.RouteData.RouteEntry).then((response : { data : ProductReferenceData}) => { \r\n this.$scope.data = response.data;\r\n if (response.data.showProductFilter) this.$scope.showProductFilter = response.data.showProductFilter;\r\n });\r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event :ng.IAngularEvent, re:IRouteEntry) => {\r\n this.productReferenceService.getReferences(re).then((response : { data : ProductReferenceData}) => { \r\n this.$scope.data = response.data;\r\n if (response.data.showProductFilter) this.$scope.showProductFilter = response.data.showProductFilter;\r\n }); \r\n });\r\n\r\n $scope.$watch('showProductFilter', (newVal, oldVal) => {\r\n if ($scope.showProductFilter && !$scope.productsLoaded) {\r\n this.productReferenceService.getProducts().then((response) => {\r\n this.$scope.allProducts = response.data;\r\n this.$scope.productsLoaded = true;\r\n })\r\n }\r\n });\r\n\r\n }\r\n\r\n public getCount() : number {\r\n if (!this.$scope.data || !this.$scope.data.References) return undefined;\r\n return this.$filter('productReferenceFilter')(this.$scope.data.References, this.$scope.filter).length; \r\n }\r\n\r\n public nextPage() {\r\n if (!this.$scope.data || !this.$scope.data.References) return;\r\n this.$scope.limit = Math.min(this.$scope.limit + 10, this.$filter('productReferenceFilter')(this.$scope.data.References, this.$scope.filter).length);\r\n }\r\n\r\n \r\n public isDownloadVisible() {\r\n if (!this.$scope.data || !this.$scope.data.References) return false;\r\n if (this.$scope.filter && (this.$scope.filter.Country || this.$scope.filter.Industry || this.$scope.filter.inUseSince || this.$scope.filter.MeasuringTask)) return true;\r\n return this.$scope.limit > 5;\r\n }\r\n\r\n \r\n\r\n\r\n }\r\n\r\n}\r\n\r\n","/// \r\n\r\nmodule product_references {\r\n 'use strict'; \r\n \r\n /**\r\n * http://stackoverflow.com/a/35299103/142679\r\n */\r\n function addMonthsUTC(date, count) {\r\n if (date && count) {\r\n var m, d = (date = new Date(+date)).getUTCDate()\r\n\r\n date.setUTCMonth(date.getUTCMonth() + count, 1)\r\n m = date.getUTCMonth()\r\n date.setUTCDate(d)\r\n if (date.getUTCMonth() !== m) date.setUTCDate(0)\r\n }\r\n return date\r\n }\r\n \r\n export interface IProductReferenceFilter extends ng.IFilterService {\r\n (name: 'productReferenceFilter'): (references: ProductReference[], filter :ProductReferenceFilterData) => ProductReference[];\r\n }\r\n\r\n\r\n export function ProductReferenceFilter() {\r\n\r\n return function (references : ProductReference[], filter: ProductReferenceFilterData) { //items, search\r\n references = references || [];\r\n if (!filter) return references;\r\n\r\n var dateFrom : number = undefined;\r\n var dateTo : number = undefined;\r\n if (filter.inUseSince) {\r\n var months : number = parseInt(filter.inUseSince.substr(2));\r\n var filterDate = addMonthsUTC(new Date(), -1 * months).getTime();\r\n if (filter.inUseSince.substr(0, 2) == \"GT\") dateFrom = filterDate;\r\n if (filter.inUseSince.substr(0, 2) == \"LT\") dateTo = filterDate;\r\n }\r\n \r\n var out = [];\r\n references.forEach(function (reference) { \r\n if ((!filter.Country || reference.CountryName === filter.Country)\r\n && (!filter.MeasuringTask || reference.MeasuringTask === filter.MeasuringTask)\r\n && (!filter.Industry || reference.Industry === filter.Industry)\r\n && (!filter.productName || reference.ProductName === filter.productName)\r\n && (!dateFrom || (reference.ProductReferenceDate.getTime() - dateFrom) >= 0)\r\n && (!dateTo || (reference.ProductReferenceDate.getTime() - dateTo) <= 0)) {\r\n\r\n out.push(reference); \r\n }\r\n });\r\n return out;\r\n }\r\n\r\n }\r\n\r\n\r\n}","/// \r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n export class BusinessArea {\r\n constructor(\r\n\r\n /**\r\n * Business area ID\r\n */\r\n public Id: number,\r\n\r\n /**\r\n * Business area German name\r\n */\r\n public NameD: string,\r\n\r\n /**\r\n * Business area English name\r\n */\r\n public NameE: string,\r\n\r\n /**\r\n * Determines if element should be hidden\r\n */\r\n public IsHidden: boolean,\r\n\r\n /**\r\n * Determines if element has been modified\r\n */\r\n public Modified: boolean,\r\n\r\n /**\r\n * Modifier's E-Mail Address\r\n */\r\n public UserEmail: string,\r\n\r\n /**\r\n * Business area \r\n */\r\n public Industries: Industry[],\r\n\r\n public MeasuringTaskGroups: MeasuringTaskGroup[]\r\n\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n export class Industry {\r\n constructor(\r\n\r\n /**\r\n * Industry ID\r\n */\r\n public Id: number,\r\n\r\n /**\r\n * Industry German name\r\n */\r\n public NameD: string,\r\n\r\n\r\n /**\r\n * Industry English name\r\n */\r\n public NameE: string,\r\n\r\n /**\r\n * Determines if element should be hidden\r\n */\r\n public IsHidden: boolean,\r\n\r\n /**\r\n * Determines if element has been modified\r\n */\r\n public Modified: boolean,\r\n\r\n /**\r\n * Modifier's E-Mail Address\r\n */\r\n public UserEmail: string,\r\n\r\n /**\r\n * Measuring task groups in industry\r\n */\r\n public MeasuringTaskGroup: MeasuringTaskGroup[]\r\n\r\n\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n export class MeasuringTask {\r\n constructor(\r\n\r\n /**\r\n * Measuring task ID\r\n */\r\n public Id: number,\r\n\r\n /**\r\n * Measuring task German name\r\n */\r\n public NameD: string,\r\n\r\n /**\r\n * Measuring task English name\r\n */\r\n public NameE: string,\r\n\r\n /**\r\n * Determines if element should be hidden\r\n */\r\n public IsHidden: boolean,\r\n\r\n /**\r\n * Determines if element has been modified\r\n */\r\n public Modified: boolean,\r\n\r\n /**\r\n * Modifier's E-Mail Address\r\n */\r\n public UserEmail: string,\r\n\r\n /**\r\n * Product in measuring task\r\n */\r\n public Product: Product[]\r\n\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n export class MeasuringTaskGroup {\r\n constructor(\r\n\r\n /**\r\n * Measuring task group ID\r\n */\r\n public Id: number,\r\n\r\n /**\r\n * Measuring task group German name\r\n */\r\n public NameD: string,\r\n\r\n\r\n /**\r\n * Measuring task group English name\r\n */\r\n public NameE: string,\r\n\r\n /**\r\n * Determines if element should be hidden\r\n */\r\n public IsHidden: boolean,\r\n\r\n /**\r\n * Determines if element has been modified\r\n */\r\n public Modified: boolean,\r\n\r\n /**\r\n * Modifier's E-Mail Address\r\n */\r\n public UserEmail: string,\r\n\r\n /**\r\n * Measuring tasks in measuring task group\r\n */\r\n public MeasuringTasks: MeasuringTask[]\r\n\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n export class Product {\r\n constructor(\r\n\r\n /**\r\n * Product ID\r\n */\r\n public Id: number,\r\n\r\n /**\r\n * Product Name\r\n */\r\n public Name: string,\r\n\r\n /**\r\n * Determines if element should be hidden\r\n */\r\n public IsHidden: boolean,\r\n\r\n /**\r\n * Determines if element has been modified\r\n */\r\n public Modified: boolean,\r\n\r\n /**\r\n * Modifier's E-Mail Address\r\n */\r\n public UserEmail: string,\r\n\r\n ) { }\r\n }\r\n}","/// \r\n\r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class MenuEditorDetailCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // it provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // see http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$mdDialog',\r\n 'menueditorService',\r\n '$timeout',\r\n 'CacheFactory'\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IMenuEditorDetailScope,\r\n private $mdDialog: ng.material.IDialogService,\r\n private menueditorService: menueditorService,\r\n private $timeout: ng.ITimeoutService,\r\n public CacheFactory: CacheFactory.ICacheFactory\r\n ) {\r\n\r\n $scope.vm = this;\r\n\r\n $scope.currentNavItem = 'Anwendungen';\r\n\r\n $scope.currentNavItem2 = 'Wasser';\r\n\r\n menueditorService.getBusinessAreaList().then((response: { data: BusinessArea[] }) => {\r\n $scope.businessAreaList = response.data;\r\n $scope.selectedMenu = 'Anwendungen';\r\n $scope.selectedBusinessArea = $scope.businessAreaList[0];\r\n $scope.selectedIndustry = $scope.selectedBusinessArea.Industries[0];\r\n $scope.selectedGroup = $scope.selectedBusinessArea.MeasuringTaskGroups[0];\r\n $scope.selectedTask = $scope.selectedGroup.MeasuringTasks[0];\r\n });\r\n\r\n\r\n $scope.$watch('selectedMenu', (oldVal: string, newVal: string) => {\r\n if (oldVal == newVal) return;\r\n if (oldVal == \"Anwendungen\") {\r\n this.$scope.selectedGroup = this.$scope.selectedBusinessArea.MeasuringTaskGroups[0];\r\n }\r\n if (oldVal == \"Industrien\") {\r\n this.$scope.selectedIndustry = this.$scope.selectedBusinessArea.Industries[0];\r\n this.$scope.selectedGroup = this.$scope.selectedIndustry.MeasuringTaskGroup[0];\r\n }\r\n })\r\n\r\n $scope.$watch('selectedBusinessArea', (oldVal: BusinessArea, newVal: BusinessArea) => {\r\n if (oldVal == newVal) return;\r\n if ($scope.currentNavItem == \"Anwendungen\") this.$scope.selectedGroup = this.$scope.selectedBusinessArea.MeasuringTaskGroups[0];\r\n if ($scope.currentNavItem == \"Industrien\") this.$scope.selectedIndustry = this.$scope.selectedBusinessArea.Industries[0];\r\n })\r\n\r\n $scope.$watch('selectedIndustry', (oldVal: Industry, newVal: Industry) => {\r\n if (oldVal == newVal) return;\r\n if ($scope.currentNavItem == \"Industrien\") this.$scope.selectedGroup = this.$scope.selectedIndustry.MeasuringTaskGroup[0];\r\n })\r\n\r\n $scope.$watch('selectedGroup', (oldVal: MeasuringTaskGroup, newVal: MeasuringTaskGroup) => {\r\n if (oldVal == newVal) return;\r\n this.$scope.selectedTask = this.$scope.selectedGroup.MeasuringTasks[0];\r\n })\r\n\r\n };\r\n\r\n setSelectedBA(area: BusinessArea) {\r\n this.$scope.selectedBusinessArea = area;\r\n }\r\n\r\n setSelectedMenu(menu: string) {\r\n this.$scope.selectedMenu = menu;\r\n }\r\n\r\n onHideGroup(item: MeasuringTaskGroup) {\r\n item.Modified = true;\r\n item.MeasuringTasks.forEach((mt: MeasuringTask) => {\r\n mt.IsHidden = item.IsHidden;\r\n mt.Modified = true;\r\n mt.Product.forEach((pr: Product) => {\r\n pr.IsHidden = item.IsHidden\r\n pr.Modified = true;\r\n })\r\n })\r\n }\r\n\r\n onHideIndustry(item: Industry) {\r\n item.Modified = true;\r\n item.MeasuringTaskGroup.forEach((mg: MeasuringTaskGroup) => {\r\n mg.IsHidden = item.IsHidden;\r\n mg.Modified = true;\r\n mg.MeasuringTasks.forEach((mt: MeasuringTask) => {\r\n mt.IsHidden = item.IsHidden;\r\n mt.Modified = true;\r\n mt.Product.forEach((pr: Product) => {\r\n pr.IsHidden = item.IsHidden;\r\n pr.Modified = true;\r\n })\r\n })\r\n })\r\n }\r\n\r\n onHideTask(item: MeasuringTask) {\r\n item.Modified = true;\r\n item.Product.forEach((pr: Product) => {\r\n pr.IsHidden = item.IsHidden;\r\n pr.Modified = true;\r\n })\r\n }\r\n\r\n onHideProduct(item) {\r\n item.Modified = true;\r\n }\r\n\r\n save() {\r\n var bas = this.$scope.businessAreaList;\r\n this.$scope.working = true;\r\n this.menueditorService.saveBusinessAreaList(bas).then((response: { data: BusinessArea[] }) => {\r\n this.CacheFactory.destroyAll();\r\n this.$scope.working = false;\r\n this.$scope.saved = true;\r\n this.$timeout(() => { this.$scope.saved = false; }, 2000);\r\n });\r\n };\r\n\r\n cancel() {\r\n this.$mdDialog.cancel();\r\n };\r\n }\r\n}","/// \r\n\r\n\r\nmodule menuEditor {\r\n 'use strict';\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class MenuEditorCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // it provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // see http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$mdDialog',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IMenuEditorScope,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n\r\n $scope.vm = this;\r\n $scope.customFullscreen = false;\r\n }\r\n\r\n showTabDialog(ev): void {\r\n this.$mdDialog.show({\r\n controller: MenuEditorDetailCtrl,\r\n templateUrl: 'menueditor/MenuEditorDialog',\r\n parent: angular.element(document.body),\r\n targetEvent: ev,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n }\r\n}","/// \r\n\r\nmodule menuEditor {\r\n\r\n MenuEntryListDirective.$inject = [\r\n ];\r\n export function MenuEntryListDirective(\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n menuData: '=',\r\n selectedEntry: \"=\",\r\n nameProperty: '@',\r\n onHideChange: '&',\r\n },\r\n templateUrl: 'menueditor/MenuEntryListDirective',\r\n link: function (scope: IMenuEditorListDirectiveScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.nameProperty = angular.isDefined(scope.nameProperty) ? scope.nameProperty : 'Name';\r\n\r\n scope.getActiveClass = function (i) {\r\n if (i && scope.selectedEntry && i.Id == scope.selectedEntry.Id) return 'active';\r\n }\r\n\r\n scope.itemDraggedAndDropped = function (item, index) {\r\n scope.menuData.splice(index, 1);\r\n scope.selectedEntry = item;\r\n var modify = scope.menuData[index];\r\n modify.Modified = true;\r\n }\r\n\r\n scope.swapItems = function (index1, index2) {\r\n var temp = scope.menuData[index1];\r\n scope.menuData[index1] = scope.menuData[index2];\r\n scope.menuData[index2] = temp;\r\n \r\n scope.menuData[index1].Modified = true; \r\n scope.menuData[index2].Modified = true;\r\n }\r\n\r\n scope.moveItemUp = function (index) {\r\n scope.swapItems(index, index - 1);\r\n }\r\n\r\n scope.moveItemDown = function (index) {\r\n scope.swapItems(index, index + 1);\r\n }\r\n\r\n scope.selectEntry = function (i) {\r\n scope.selectedEntry = i;\r\n }\r\n\r\n\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\n\r\nmodule menuEditor {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class menueditorService {\r\n static $inject = [\r\n '$http',\r\n ];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService\r\n ) { }\r\n\r\n public getBusinessAreaList(): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/D/Navigation/MeasuringTable\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response: { data: BusinessArea[] }) : any => { //success\r\n return response;\r\n });\r\n\r\n }\r\n\r\n public saveBusinessAreaList(bas: BusinessArea[]): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"PUT\"\r\n , url: \"/api/D/Navigation/SaveMeasuringTable\"\r\n , data: bas\r\n , headers: { 'Content-Type': 'application/json' }\r\n }).then((response: { data: BusinessArea[] }) : any => {\r\n return response;\r\n });\r\n }\r\n\r\n }\r\n\r\n}\r\n","/// \r\n\r\nmodule blog {\r\n 'use strict';\r\n\r\n export class SalesToolsCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n 'pageMetaService',\r\n 'blogService',\r\n 'anchorNavService',\r\n '$mdDialog',\r\n ];\r\n\r\n constructor(\r\n private $scope: ISalesToolsCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private blogService: IBlogService,\r\n private anchorNavService: navigation.IAnchorNavService,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.limit = 3;\r\n $scope.offset = 0;\r\n\r\n $scope.data = { \"Verkaufshilfen\": [], \"Blog\": [] };\r\n this.$scope.selectedTopLevel = {};\r\n\r\n \r\n var updateNav = () => {\r\n $scope.topLevelNav = [];\r\n if ($scope.data.Blog && $scope.data.Blog.length > 0) {\r\n $scope.topLevelNav.push({ 'id' : 2, 'name' : $scope.meta('hl') == 'D' ? 'Neuigkeiten' : 'News', 'entryType': 'Blog' });\r\n }\r\n if ($scope.data.Verkaufshilfen && $scope.data.Verkaufshilfen.length > 0) {\r\n $scope.topLevelNav.push({ 'id' : 1, 'name' : $scope.meta('hl') == 'D' ? 'Verkaufshilfen' : 'Sales Tools', 'entryType': 'Verkaufshilfen' });\r\n }\r\n if ($scope.data.Verkaufshilfen && $scope.data.Verkaufshilfen.length > 0) this.$scope.selectedTopLevel['entryType'] = 'Verkaufshilfen';\r\n if ($scope.data.Blog && $scope.data.Blog.length > 0) this.$scope.selectedTopLevel['entryType'] = 'Blog'; \r\n }\r\n\r\n var getStories = () => {\r\n blogService.loadByProduct(pglob.RouteData.RouteEntry.RouteParameterStack).then((response) => {\r\n $scope.data.Blog = response.data.filter((content) => {\r\n // difference in days\r\n var diff = this.getTimeDiff(content.ContentMeta.CreatedAt, new Date());\r\n return content.ContentFilter.FilterString2.toLowerCase() === \"blog\" \r\n && diff !== undefined && diff < 1825; //fünf jahre\r\n });\r\n $scope.data.Verkaufshilfen = response.data.filter((i) => i.ContentFilter.FilterString2.toLowerCase() === \"verkaufshilfen\");\r\n updateNav();\r\n });\r\n }\r\n\r\n anchorNavService.subscribeOnLocationChanged($scope, (event: ng.IAngularEvent, re: IRouteEntry) => {\r\n getStories();\r\n $scope.offset = 0;\r\n }); \r\n\r\n getStories();\r\n\r\n $scope.$watch(\"selectedTopLevel\", (newVal, oldVal) => {\r\n if (newVal != oldVal) $scope.offset = 0;\r\n })\r\n\r\n }\r\n\r\n public getTimeDiff(a, b) {\r\n var msperday = 1000 * 60 * 60 * 24;\r\n\r\n if (!a || !b) return null;\r\n\r\n if (a instanceof Date) {\r\n var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\r\n } else if (a instanceof String) {\r\n var utc1 = Date.parse(a);\r\n } else {\r\n var utc1 = a;\r\n };\r\n\r\n if (b instanceof Date) {\r\n var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\r\n } else if (b instanceof String) {\r\n var utc2 = Date.parse(b);\r\n } else {\r\n var utc2 = b;\r\n };\r\n\r\n return Math.floor((utc2 - utc1) / msperday);\r\n }\r\n\r\n public openDialog(ev : MouseEvent, entry: editor.Content) {\r\n ev.preventDefault();\r\n\r\n this.$mdDialog.show({\r\n controller: \"blogDetailCtrl\",\r\n templateUrl: 'blog/BlogEntryDetail',\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n locals: {\r\n entry: entry,\r\n currentLang: this.$scope.meta(\"hl\")\r\n },\r\n })\r\n }\r\n\r\n public getTotalPages(nrofarticles: number): number {\r\n return Math.ceil(nrofarticles / 3);\r\n }\r\n\r\n public getCurrentPage(offset: number): number {\r\n if (!this.$scope.selectedTopLevel) return 0;\r\n var currentPage = offset / this.$scope.limit + 1;\r\n this.$scope.isFirstPage = currentPage == 1;\r\n if (this.$scope.data) {\r\n this.$scope.isLastPage = this.$scope.offset >= this.$scope.data[this.$scope.selectedTopLevel['entryType']].length - this.$scope.limit;\r\n }\r\n return currentPage;\r\n }\r\n\r\n public nextPage() {\r\n if (!this.$scope.data || this.$scope.offset >= this.$scope.data[this.$scope.selectedTopLevel['entryType']].length - this.$scope.limit) return;\r\n var newOffset = this.$scope.offset + this.$scope.limit;\r\n this.$scope.offset = newOffset;\r\n }\r\n\r\n public previousPage() {\r\n if (!this.$scope.data) return;\r\n var newOffset = this.$scope.offset - this.$scope.limit;\r\n this.$scope.offset = newOffset;\r\n if (this.$scope.offset < 0) {\r\n this.$scope.offset = 0;\r\n return;\r\n }\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n 'use strict';\r\n\r\n export class BlogCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n 'pageMetaService',\r\n 'blogService',\r\n '$timeout',\r\n ];\r\n\r\n constructor(\r\n private $scope: IBlogCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private blogService: IBlogService,\r\n private $timeout: ng.ITimeoutService\r\n ) {\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.loadedBlogEntries = [];\r\n $scope.tags = [];\r\n $scope.entriesToLoad = 10;\r\n $scope.hideFooterButton = false;\r\n\r\n this.getMoreTopics();\r\n\r\n $scope.$watchCollection(\"tags\", (newVal, oldVal) => {\r\n if (newVal == oldVal) return;\r\n this.getTopicRange();\r\n });\r\n\r\n }\r\n\r\n getMoreTopics() {\r\n this.blogService.loadTopicRange(this.$scope.loadedBlogEntries.length, this.$scope.entriesToLoad, \"Blog\", this.$scope.tags, false, true).then((response) => {\r\n response.data.forEach((element) => {\r\n this.$scope.loadedBlogEntries.push(element);\r\n })\r\n // wenn keine mehr => button ausblenden\r\n if (response.data.length < this.$scope.entriesToLoad) {\r\n this.$scope.hideFooterButton = true;\r\n }\r\n })\r\n }\r\n\r\n getTopicRange() {\r\n this.blogService.loadTopicRange(0, this.$scope.entriesToLoad, \"Blog\", this.$scope.tags, false, true).then((response) => {\r\n this.$scope.loadedBlogEntries = response.data;\r\n })\r\n }\r\n\r\n addTagFilter(tag: editor.ContentTag) {\r\n if (this.$scope.tags.filter(function (aTag) { return aTag.Id == tag.Id }).length > 0) return;\r\n this.$scope.tags.push(tag);\r\n }\r\n\r\n getFeaturedTopics() {\r\n this.blogService.loadTopicRange(0, 3, \"Blog\", [], true, true);\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n 'use strict';\r\n\r\n export class BlogDetailCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n 'pageMetaService',\r\n '$mdDialog',\r\n 'blogService',\r\n '$compile',\r\n '$element',\r\n ];\r\n\r\n constructor(\r\n private $scope: IBlogDetailCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private blogService: IBlogService, \r\n private $compile : ng.ICompileService,\r\n private $element : ng.IRootElementService\r\n ) {\r\n \r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n }\r\n\r\n locals: { entry: editor.Content }\r\n \r\n public $onInit(): void {\r\n this.$scope.entry = this.locals.entry;\r\n var cnt = this.$compile('
' + this.locals.entry.ContentHtml + '
')( this.$scope );\r\n\r\n \r\n this.$element.find('md-dialog-content p').append(cnt);\r\n\r\n if (this.$scope.entry.ContentMeta.Attachment) {\r\n this.$scope.extension = this.$scope.entry.ContentMeta.Attachment.substring(this.$scope.entry.ContentMeta.Attachment.indexOf(\".\") + 1)\r\n }\r\n this.$scope.filename = this.$scope.entry.ContentMeta.RoutedURL;\r\n this.$scope.gaPath = \"/Download/\" + this.$scope.entry.ContentFilter.FilterString2 + \"/\" + this.$scope.meta(\"hl\") + \"/\" + this.$scope.filename;\r\n }\r\n\r\n closeDialog() {\r\n this.$mdDialog.hide();\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n 'use strict';\r\n\r\n export class EventCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n 'pageMetaService',\r\n 'blogService',\r\n '$timeout',\r\n '$filter', \r\n ];\r\n\r\n constructor(\r\n private $scope: IEventCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private blogService: IBlogService,\r\n private $timeout: ng.ITimeoutService,\r\n private $filter: ng.IFilterService\r\n ) {\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.loadedBlogEntries = [];\r\n $scope.tags = [];\r\n $scope.entriesToLoad = 500;\r\n $scope.hideFooterButton = false;\r\n \r\n $scope.years = [];\r\n\r\n this.getMoreTopics();\r\n \r\n \r\n }\r\n\r\n\r\n getMoreTopics() {\r\n this.blogService.loadTopicRange(this.$scope.loadedBlogEntries.length, this.$scope.entriesToLoad, \"events\", this.$scope.tags, false, false).then((response) => {\r\n var years: { [id: number] : number; } = {};\r\n var isFuterEvent = this.isFutureEvent();\r\n\r\n response.data.forEach((element) => {\r\n this.$scope.loadedBlogEntries.push(element);\r\n\r\n element.ContentMeta.ValidFrom = new Date(element.ContentMeta.ValidFrom); //from the api comes a string, typescript thinks its a date.\r\n element.ContentMeta.ValidTo = new Date(element.ContentMeta.ValidTo);\r\n\r\n if (isFuterEvent(element)) { \r\n if (!years[element.ContentMeta.ValidFrom.getFullYear()]) years[element.ContentMeta.ValidFrom.getFullYear()] = element.ContentMeta.ValidFrom.getFullYear();\r\n\r\n // open links in new window\r\n var tree = angular.element('
' + element.ContentHtml + '
');\r\n tree.find('a').attr('target', '_blank');\r\n element.ContentHtml = angular.element('
').append(tree).html();\r\n }\r\n \r\n })\r\n // wenn keine mehr => button ausblenden\r\n if (response.data.length < this.$scope.entriesToLoad) {\r\n this.$scope.hideFooterButton = true;\r\n }\r\n\r\n this.$scope.years = [];\r\n for (var year in years) this.$scope.years.push(years[year]); \r\n this.$scope.years.sort();\r\n\r\n })\r\n }\r\n\r\n getDateRange(dateFrom : Date, dateTo: Date) {\r\n var datestr : string = \"\";\r\n\r\n if (!dateFrom && !dateTo) return null;\r\n\r\n if (!dateFrom) dateFrom = dateTo\r\n if (!dateTo) dateTo = dateFrom\r\n\r\n // Freitag 5. April 2008\r\n if (dateFrom == dateTo) {\r\n datestr += this.$filter('date')(dateFrom, \"dddd dd. MMMM yyyy\", \"+02\") + \" \";\r\n return datestr;\r\n }\r\n\r\n // 1. - 5. April 2008\r\n if (dateFrom.getMonth() == dateTo.getMonth() && dateFrom.getFullYear() == dateFrom.getFullYear()) {\r\n datestr += dateFrom.getDate() + \".\\u202F–\\u202F\";\r\n datestr += dateTo.getDate() + \". \";\r\n datestr += this.$filter('date')(dateTo, \"MMMM \", \"+02\") ;\r\n datestr += dateFrom.getFullYear();\r\n return datestr\r\n }\r\n\r\n //31. März - 2.April 2008\r\n if (dateFrom.getFullYear() == dateFrom.getFullYear()) {\r\n datestr += this.$filter('date')(dateFrom, \"d. MMMM \", \"+02\");\r\n datestr += \"\\u202F–\\u202F\";\r\n datestr += this.$filter('date')(dateTo, \"d. MMMM \", \"+02\");\r\n datestr += dateFrom.getFullYear();\r\n return datestr;\r\n }\r\n\r\n // 28.12.2008 - 07.01.2009\r\n datestr += this.$filter('date')(dateTo, 'shortDate', \"+02\");\r\n datestr += \"\\u202F–\\u202F\";\r\n datestr += this.$filter('date')(dateTo, 'shortDate', \"+02\");\r\n return datestr;\r\n }\r\n\r\n getTopicRange() {\r\n this.blogService.loadTopicRange(0, this.$scope.entriesToLoad, \"events\", this.$scope.tags, false, false).then((response) => {\r\n this.$scope.loadedBlogEntries = response.data;\r\n })\r\n }\r\n\r\n isFutureEvent() {\r\n var todayPlus2 : Date = new Date()\r\n todayPlus2.setDate(todayPlus2.getDate() + 1);\r\n return function( content: editor.Content ) { \r\n return content.ContentMeta.ValidTo.getFullYear() < 3000 && content.ContentMeta.ValidTo > todayPlus2;\r\n };\r\n }\r\n\r\n isInYear(year : number) { \r\n return function( content: editor.Content ) { \r\n return content.ContentMeta.ValidFrom.getFullYear() == year;\r\n };\r\n }\r\n\r\n \r\n getImgSrc(entry: editor.Content): string {\r\n if (entry.ContentMeta.Image) {\r\n return \"/svc/blogressource.axd?id=\" + entry.ContentFilter.ContentId + \"&type=1&lang=\" + pglob.RouteData.CurrentLanguage.hl;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n 'use strict';\r\n\r\n export class BerechnungCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n 'pageMetaService',\r\n ];\r\n\r\n constructor(\r\n private $scope: IBerechnungCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n $scope.showHints = true;\r\n\r\n // Berechnungshilfe-Ozon\r\n\r\n $scope.messumfang = 300;\r\n $scope.schicht = 1;\r\n $scope.absorption = 1.761;\r\n $scope.druck = 101.3;\r\n\r\n $scope.druckEinheiten = [\r\n { name: \"kPa\", value: 1E3 },\r\n { name: \"Pa\", value: 1 },\r\n { name: \"bar\", value: 1E5 },\r\n { name: \"at\", value: 0.981E5 },\r\n { name: \"mm W.S.\", value: 9.81 },\r\n { name: \"atm\", value: 1.01E5 },\r\n { name: \"Torr\", value: 133 }\r\n ];\r\n\r\n $scope.temperatur = 20;\r\n\r\n $scope.temperaturEinheiten = [\r\n { name: \"°C\", value: \"C\" },\r\n { name: \"°F\", value: \"F\" },\r\n { name: \"K\", value: \"K\" }\r\n ];\r\n\r\n $scope.messumfangErgebnis = 300;\r\n\r\n $scope.currentPE = $scope.druckEinheiten[0];\r\n $scope.currentTE = $scope.temperaturEinheiten[0];\r\n\r\n // Berechnungshilfe-Hazen\r\n\r\n $scope.wavelengths = [\r\n { name: \"365\", value: 7.99 },\r\n { name: \"390\", value: 4.76 },\r\n { name: \"400\", value: 3.16 },\r\n { name: \"410\", value: 1.81 },\r\n { name: \"420\", value: 1.00 },\r\n { name: \"430\", value: 0.76 },\r\n { name: \"436\", value: 0.79 }\r\n ];\r\n\r\n $scope.wavelength = $scope.wavelengths[0];\r\n\r\n $scope.messumfangHazen = 200;\r\n $scope.schichtHazen = 50;\r\n $scope.absorptionHazen = 2.351;\r\n\r\n }\r\n\r\n // Berechnungshilfe-Ozon\r\n \r\n private ozon = {\r\n \"c\": 0.00587,\r\n \"aK\": new Array(1.0E9, 1020.0, 510.0, 255.0, 170.0, 127.0, 102.0, 51.0, 25.0, 17.0, 10.0, 5.0),\r\n \"aS\": new Array(\"Error\", \"0.5\", \"1\", \"2\", \"3\", \"4\", \"5\", \"10\", \"20\", \"30\", \"50\", \"100\"),\r\n \"oldPEVal\": 1.0E3,\r\n \"oldTE\": { name: \"°C\", value: \"C\" },\r\n \"p0\": 101300.0,\r\n \"p1\": 101300.0,\r\n \"t0\": 293.0,\r\n \"t1\": 293.0\r\n }\r\n\r\n private tempConvert = {\r\n \"CelsiusToKelvin\": (t) => {\r\n return t + 273.15;\r\n },\r\n \"FahrenheitToKelvin\": (t) => {\r\n return (t + 459.67) / 1.8;\r\n },\r\n \"KelvinToCelsius\": (t) => {\r\n return t - 273.15;\r\n },\r\n \"KelvinToFahrenheit\": (t) => {\r\n return 1.8 * t - 459.67;\r\n }\r\n }\r\n\r\n BerechneSchicht() {\r\n var k = this.$scope.messumfang;\r\n var i = this.ozon['aK'].length - 1;\r\n while ((k > this.ozon['aK'][i]) && (i > 0)) { i-- };\r\n this.$scope.schicht = parseFloat(this.ozon['aS'][i]);\r\n var a = this.ozon['c'] * k * parseFloat(this.ozon['aS'][i]);\r\n this.$scope.absorption = (1000.0 * a + 0.5555) / 1000.0;\r\n this.BerechneNorm();\r\n }\r\n\r\n BerechneDruck() {\r\n this.$scope.druck = this.ozon['oldPEVal'] * this.$scope.druck / this.$scope.currentPE.value;\r\n this.ozon['oldPEVal'] = this.$scope.currentPE.value;\r\n }\r\n\r\n BerechneTemperatur() {\r\n var t = this.$scope.temperatur;\r\n if (this.ozon['oldTE'].value == \"C\") { t = this.tempConvert['CelsiusToKelvin'](t) } else\r\n if (this.ozon['oldTE'].value == \"F\") { t = this.tempConvert['FahrenheitToKelvin'](t) };\r\n if (this.$scope.currentTE.value == \"C\") { t = this.tempConvert['KelvinToCelsius'](t) } else\r\n if (this.$scope.currentTE.value == \"F\") { t = this.tempConvert['KelvinToFahrenheit'](t) };\r\n this.$scope.temperatur = Math.round(t);\r\n this.ozon['oldTE'] = this.$scope.currentTE;\r\n }\r\n\r\n SetzeNormbedingungen() {\r\n this.$scope.currentTE = this.$scope.temperaturEinheiten[0];\r\n this.$scope.currentPE = this.$scope.druckEinheiten[0];\r\n this.$scope.temperatur = 20;\r\n this.$scope.druck = 101.3;\r\n this.ozon['oldPEVal'] = 1E3;\r\n this.ozon['oldTE'] = { name: \"°C\", value: \"C\" };\r\n this.ozon['p0'] = 101300.0;\r\n this.ozon['t0'] = 293.0;\r\n this.BerechneNorm();\r\n }\r\n\r\n BerechneNorm() {\r\n var k0 = this.$scope.messumfang;\r\n var a = this.$scope.absorption;\r\n this.ozon['p1'] = this.ozon['oldPEVal'] * this.$scope.druck;\r\n this.ozon['t1'] = this.$scope.temperatur;\r\n if (this.ozon['oldTE'].value == \"C\") { this.ozon['t1'] = this.tempConvert['CelsiusToKelvin'](this.ozon['t1']); }\r\n if (this.ozon['oldTE'].value == \"F\") { this.ozon['t1'] = this.tempConvert['FahrenheitToKelvin'](this.ozon['t1']); }\r\n this.$scope.messumfangErgebnis = Math.round(k0 * (this.ozon['t1'] * this.ozon['p0']) / (this.ozon['t0'] * this.ozon['p1']));\r\n }\r\n\r\n // Berechnungshilfe-Hazen\r\n\r\n private hazen = {\r\n \"c\": 0.00002942,\r\n \"aK\": new Array(1.0E9, 203000.0, 101000.0, 50900.0, 33900.0, 25400.0, 20300.0, 10100.0, 5090.0, 3390.0, 2030.0, 1000.0),\r\n \"aS\": new Array(\"Error\", \"0.5\", \"1\", \"2\", \"3\", \"4\", \"5\", \"10\", \"20\", \"30\", \"50\", \"100\")\r\n }\r\n\r\n BerechneSchichtHazen() {\r\n var w = this.$scope.wavelength.value;\r\n var k = this.$scope.messumfangHazen;\r\n k = k * w;\r\n var i = this.hazen['aK'].length - 1;\r\n while ((k > this.hazen['aK'][i]) && (i > 0)) { i-- };\r\n var s = parseFloat(this.hazen['aS'][i]);\r\n var a = this.hazen['c'] * k * parseFloat(this.hazen['aS'][i]);\r\n this.$scope.schichtHazen = s;\r\n this.$scope.absorptionHazen = Math.round(1000.0 * a) / 1000.0;\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n 'use strict';\r\n\r\n function pad(num, size) {\r\n var s = \"000000000\" + num;\r\n return s.substr(s.length-size);\r\n }\r\n\r\n export class ScrubberCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n '$timeout',\r\n 'pageMetaService',\r\n ];\r\n\r\n constructor(\r\n private $scope: IScrubberCtrlScope,\r\n private $timeout: ng.ITimeoutService,\r\n private pageMetaService: navigation.IPageMetaService\r\n ) {\r\n\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n\r\n //var data = \"FFFFFFFF\";\r\n //var data = \"013B0902\";\r\n //var data = \"00000000\";\r\n \r\n\r\n $scope.data = \"00000000\";\r\n\r\n this.$timeout(() => { $scope.dataForm.$setDirty(); })\r\n\r\n\r\n $scope.$watch('data', (newVal : string, oldVal : string) => {\r\n if (newVal != oldVal) { \r\n newVal = newVal + '00000000'; \r\n this.lowByte = parseInt(newVal.substr(4,4), 16);\r\n this.highByte = parseInt(newVal.substr(0,4), 16); \r\n if (isNaN(this.lowByte)) this.lowByte = 0;\r\n if (isNaN(this.highByte)) this.highByte = 0;\r\n $scope.binary = pad(this.highByte.toString(2),16) + pad(this.lowByte.toString(2), 16);\r\n }\r\n });\r\n\r\n }\r\n\r\n lowByte : number = 0;\r\n highByte : number = 0;\r\n\r\n\r\n getBit(index: number) : boolean {\r\n var b = this.lowByte;\r\n if (index > 15) {\r\n b = this.highByte;\r\n index = index - 16;\r\n }\r\n return (b & (1 << index)) > 0;\r\n }\r\n\r\n getBitRange(start: number, stop: number) : number {\r\n var b = this.lowByte;\r\n if (start > 15) {\r\n b = this.highByte;\r\n start = start - 16;\r\n stop = stop - 16;\r\n }\r\n\r\n var mask = 0;\r\n for (var i = start; i <= stop; i++) {\r\n mask = mask | (1 << i);\r\n }\r\n\r\n var ret = (b & mask) >> start;\r\n return ret;\r\n }\r\n\r\n public init(data : any) {\r\n this.$scope.initData = data;\r\n }\r\n \r\n\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n\r\n BlogEntryDirective.$inject = ['blogService', 'pageMetaService'];\r\n\r\n export function BlogEntryDirective(\r\n blogService: IBlogService,\r\n pageMetaService: navigation.IPageMetaService\r\n ): ng.IDirective {\r\n\r\n return {\r\n restrict: \"AE\",\r\n scope: {\r\n entry: \"=\"\r\n },\r\n templateUrl: \"blog/BlogEntryDirective\",\r\n transclude: true,\r\n link: function (scope: IBlogEntryDirective, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n\r\n scope.meta = pageMetaService.getPageMeta;\r\n\r\n scope.getEntryUrl = function (entry: editor.Content): string {\r\n if (entry.ContentMeta.URL) { \r\n return pglob.RouteData.CurrentLanguage.hlPrefix + \"/News/\" + entry.ContentMeta.URL;\r\n } else {\r\n return entry.ContentMeta.RoutedURL\r\n }\r\n }\r\n\r\n scope.getImgSrc = function (entry: editor.Content): string {\r\n if (entry.ContentMeta.Image) {\r\n return \"/svc/blogressource.axd?id=\" + entry.ContentFilter.ContentId + \"&type=1&lang=\" + pglob.RouteData.CurrentLanguage.hl;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n scope.getAttachmentLink = function (entry: editor.Content): string {\r\n if (entry.ContentMeta.Attachment) {\r\n return \"/svc/blogressource.axd?id=\" + entry.ContentFilter.ContentId + \"&type=2&lang=\" + pglob.RouteData.CurrentLanguage.hl;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n scope.getGAPath = function (entry: editor.Content): string {\r\n var filename = entry.ContentMeta.RoutedURL;\r\n return \"/Download/\" + entry.ContentFilter.FilterString2 + \"/\" + scope.meta(\"hl\") + \"/\" + filename;\r\n }\r\n\r\n scope.getAttachmentExtension = function(entry: editor.Content): string {\r\n if (entry.ContentMeta.Attachment) {\r\n return entry.ContentMeta.Attachment.substring(entry.ContentMeta.Attachment.indexOf(\".\") + 1)\r\n }\r\n }\r\n\r\n scope.getTagString = function (tags: editor.ContentTag[]): string {\r\n var tagNames = [];\r\n tags.forEach(function (element) {\r\n if (element.Name.indexOf(\"Product\") != -1) {\r\n tagNames.push(\"\" + element.Names[pglob.RouteData.CurrentLanguage.hlFull] + \"\");\r\n } else {\r\n tagNames.push(element.Name);\r\n }\r\n })\r\n\r\n return tagNames.join(\", \");\r\n }\r\n\r\n }\r\n }\r\n }\r\n}","/// \r\n\r\nmodule blog {\r\n\r\n \r\n export class blogService implements IBlogService {\r\n static $inject = ['$http'];\r\n\r\n constructor(\r\n private $http: ng.IHttpService\r\n ) { }\r\n\r\n public loadTopicRange(StartingIndex: number, \r\n NrOfItems: number, \r\n FilterString2: string, \r\n Tags: editor.ContentTag[], \r\n onlyFeatured : boolean,\r\n checkDate? : boolean,\r\n hl?: ILanguageInfo,): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Blog/GetTopicsRange\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n StartingIndex: StartingIndex,\r\n NrOfEntries: NrOfItems,\r\n FilterString2: FilterString2,\r\n onlyFeatured: onlyFeatured,\r\n checkDate: checkDate,\r\n }\r\n , data: Tags\r\n }).then((response) => {\r\n return response;\r\n });\r\n\r\n }\r\n\r\n public loadByProduct(rpv: IRouteParameter[]): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + (pglob.RouteData.CurrentLanguage).hl + \"/Blog/ByProduct\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , data : rpv \r\n }).then((response) => {\r\n response.data.forEach((c) => {\r\n if (c.ContentMeta.CreatedAt) c.ContentMeta.CreatedAt = new Date(c.ContentMeta.CreatedAt); //we recieve that as string, have to convert it.\r\n if (c.ContentMeta.PublishedAt) c.ContentMeta.PublishedAt = new Date(c.ContentMeta.PublishedAt); //we recieve that as string, have to convert it.\r\n if (c.ContentMeta.ModifiedAt) c.ContentMeta.ModifiedAt = new Date(c.ContentMeta.ModifiedAt); //we recieve that as string, have to convert it.\r\n });\r\n return response;\r\n })\r\n\r\n }\r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule training {\r\n 'use strict';\r\n\r\n \r\n export class TrainingServiceData {\r\n constructor(\r\n public Trainings: Training[],\r\n public Name: string,\r\n public EMail: string,\r\n public Agency: string\r\n ) {}\r\n }\r\n\r\n\r\n export class Training {\r\n constructor(\r\n public Description: string,\r\n public EMail: string,\r\n public EndDate: Date,\r\n public Id: number,\r\n public IsCanceled: boolean,\r\n public Language: string,\r\n public Person: string,\r\n public Products: Product[],\r\n public RegClosing: Date,\r\n public StartDate: Date,\r\n public TimeSpan: string,\r\n public TypeDescD: string,\r\n public TypeDescE: string,\r\n public TypeNameD: string,\r\n public TypeNameE: string\r\n ) { }\r\n }\r\n\r\n \r\n\r\n export class TrainingFormData {\r\n constructor(\r\n public teilnehmer: string,\r\n public email: string,\r\n public vertretung: string,\r\n public einsatzbereich: string,\r\n public hotel: boolean,\r\n public hotelFrom: Date,\r\n public hotelTo: Date,\r\n public essenswuensche: string,\r\n public essenswuenscheprosa: string,\r\n public remark: string,\r\n public submitDate: Date\r\n ) { } \r\n }\r\n\r\n}","/// \r\n\r\nmodule training {\r\n\r\n \r\n export class TrainingService implements ITrainingService {\r\n static $inject = ['$http'];\r\n\r\n constructor(\r\n private $http: ng.IHttpService\r\n ) { }\r\n\r\n public loadTrainings(hl?: ILanguageInfo): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\" \r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Training/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n }\r\n }).then((response) => {\r\n if(!response.data || !response.data.Trainings) return response;\r\n response.data.Trainings.forEach((t) => {\r\n if (t.RegClosing) t.RegClosing = new Date(t.RegClosing); //we recieve that as string, have to convert it.\r\n if (t.EndDate) t.EndDate = new Date(t.EndDate); //we recieve that as string, have to convert it.\r\n if (t.StartDate) t.StartDate = new Date(t.StartDate); //we recieve that as string, have to convert it.\r\n })\r\n return response;\r\n });\r\n\r\n }\r\n\r\n\r\n public registerTraining(model : TrainingFormData, trainingId : number, hl?: ILanguageInfo): ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\" \r\n , url: \"/api/\" + (hl || pglob.RouteData.CurrentLanguage).hl + \"/Training/Register\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n trainingId : trainingId,\r\n }\r\n , data : model\r\n })\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n}","/// \r\n\r\nmodule training {\r\n 'use strict';\r\n\r\n function addDays(date : Date, days : number) : Date {\r\n var _MS_PER_DAY = 1000 * 60 * 60 * 24;\r\n // Discard the time and time-zone information.\r\n var utc1 = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\r\n\r\n var utc2 = utc1 + days * _MS_PER_DAY;\r\n return new Date(utc2);\r\n }\r\n \r\n \r\n export class TrainingCtrl {\r\n\r\n public static $inject = [\r\n '$scope',\r\n 'pageMetaService',\r\n 'trainingService',\r\n '$timeout',\r\n ];\r\n\r\n constructor(\r\n private $scope: ITrainingCtrlScope,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private trainingService: ITrainingService,\r\n private $timeout: ng.ITimeoutService\r\n ) {\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n \r\n $scope.model = $scope.master = <{ [index: number]: TrainingFormData }>{};\r\n $scope.noTrainings = true;\r\n\r\n\r\n this.trainingService.loadTrainings()\r\n .then((response: {data :TrainingServiceData}) => {\r\n \r\n if(!response.data || !response.data.Trainings) {\r\n $scope.noTrainings = true;\r\n return;\r\n }\r\n\r\n response.data.Trainings.forEach((t) => {\r\n var m : TrainingFormData = $scope.master[t.Id] = {};\r\n m.teilnehmer = response.data.Name;\r\n m.email = response.data.EMail;\r\n m.vertretung = response.data.Agency;\r\n m.hotelFrom = addDays(t.StartDate, -1);\r\n m.hotelTo = t.EndDate;\r\n this.$scope.model[t.Id] = angular.copy(this.$scope.master[t.Id]);\r\n })\r\n $scope.data = response.data.Trainings;\r\n });\r\n\r\n }\r\n\r\n register($event : Event, childScope : ITrainingRepeatScope, model : TrainingFormData, t : Training) { \r\n\r\n childScope.error = false;\r\n childScope.success = false;\r\n\r\n model.submitDate = new Date();\r\n this.trainingService.registerTraining(model, t.Id).then(() => {\r\n childScope[\"FormAnmeldung_\" + t.Id].$setPristine();\r\n childScope[\"FormAnmeldung_\" + t.Id].$setUntouched();\r\n childScope.anmeldung = angular.copy(this.$scope.master[t.Id]);\r\n childScope.success = true;\r\n }).catch(() => {\r\n childScope.error = true;\r\n }).finally(() => {\r\n childScope.disabled = false;\r\n });\r\n\r\n }\r\n\r\n initModel(childScope : ITrainingRepeatScope, t : Training) {\r\n childScope.anmeldung = childScope.$parent.model[t.Id];\r\n }\r\n\r\n registrationPossible(date: Date) {\r\n return date.getTime() > Date.now();\r\n }\r\n\r\n }\r\n}","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * Module for Trainings and Trainings Subscriptions.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule training {\r\n 'use strict';\r\n\r\n var training = angular.module('training', [])\r\n .controller('trainingCtrl', TrainingCtrl)\r\n // .directive('todoBlur', todoBlur)\r\n // .directive('todoFocus', todoFocus)\r\n .service('trainingService', TrainingService);\r\n}","/// \r\n\r\n\r\nmodule supportportal {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class SupportPortalService implements ISupportPortalService {\r\n static $inject = [\r\n '$http',\r\n 'CacheFactory',\r\n 'userService',\r\n ];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n private CacheFactory: CacheFactory.ICacheFactory,\r\n private userService: user.UserService\r\n ) { }\r\n\r\n public getMacAddresses(serial: string): ng.IHttpPromise {\r\n const query = `{\r\n ethernetAddress(serial: \"${serial}\") {\r\n offset\r\n serial\r\n utcUpdated\r\n utcReserved\r\n ethernetAddress\r\n }\r\n }`;\r\n\r\n var tokenPromise = this.userService.getJwtToken();\r\n return tokenPromise.then((token: string): ng.IHttpPromise => {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: pglob.RouteData.PhotometerApiBaseUrl + \"/graphql\"\r\n , headers: this.userService.getBearer(token)\r\n , params: {\r\n }\r\n , data: {\r\n \"query\": query\r\n , \"variables\": {}\r\n }\r\n }).then((response: { data: any }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'SupportPortalService.getMacAddresses' \" + response.status;\r\n });\r\n });\r\n }\r\n \r\n public certsBySerials(serials: string[]): ng.IHttpPromise> {\r\n const query = `query getDocumentsBySerials($serials: [String!]!) {\r\n documentsByMultipleSerials(serials: $serials) {\r\n serialnumber\r\n documents {\r\n id\r\n type\r\n }\r\n }\r\n }`;\r\n\r\n var tokenPromise = this.userService.getJwtToken();\r\n return tokenPromise.then((token: string): ng.IHttpPromise> => {\r\n var p = this.$http({\r\n method: \"POST\"\r\n , url: pglob.RouteData.PhotometerApiBaseUrl + \"/graphql\"\r\n , headers: this.userService.getBearer(token)\r\n , params: {\r\n }\r\n , data: {\r\n \"query\": query\r\n , \"variables\": {\r\n \"serials\": serials\r\n }\r\n }\r\n }).then((response: { data: any }): any => {\r\n if (response.data.errors && response.data.errors.length > 0) {\r\n throw response.data.errors;\r\n }\r\n return response;\r\n }).catch((response) => {\r\n throw response;\r\n });\r\n return p;\r\n });\r\n\r\n }\r\n\r\n \r\n\r\n public itemsBySerial(serial: string): ng.IHttpPromise> {\r\n const query = `query GetItemBySerialWithSub($serial: String!) {\r\n itemBySerialWithSub(serial: $serial) {\r\n serialnumber\r\n itemId\r\n productId \r\n parentSerialnumber \r\n }\r\n }`;\r\n\r\n var tokenPromise = this.userService.getJwtToken();\r\n return tokenPromise.then((token: string): ng.IHttpPromise> => {\r\n var p = this.$http({\r\n method: \"POST\"\r\n , url: pglob.RouteData.PhotometerApiBaseUrl + \"/graphql\"\r\n , headers: this.userService.getBearer(token)\r\n , params: {\r\n }\r\n , data: {\r\n \"query\": query\r\n , \"variables\": {\r\n \"serial\": serial\r\n }\r\n }\r\n }).then((response: { data: any }): any => {\r\n if (response.data.errors && response.data.errors.length > 0) {\r\n throw response.data.errors;\r\n }\r\n return response;\r\n }).catch((response) => {\r\n throw response;\r\n });\r\n return p;\r\n });\r\n\r\n }\r\n\r\n \r\n\r\n\r\n\r\n }\r\n\r\n}\r\n","\r\n\r\nmodule supportportal {\r\n 'use strict';\r\n\r\n export class SupportPortalCtrl implements ng.IController {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n 'supportPortalService',\r\n '$timeout',\r\n '$q',\r\n '$mdDialog',\r\n 'debounce',\r\n '$analytics',\r\n 'partService',\r\n '$filter',\r\n 'pageMetaService',\r\n 'anchorNavService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: ISupportPortalCtrl,\r\n private supportPortalService: supportportal.ISupportPortalService,\r\n private $timeout: ng.ITimeoutService,\r\n private $q: ng.IQService,\r\n private $mdDialog: ng.material.IDialogService,\r\n private debounce: navigation.IDebounceService,\r\n private $analytics: angulartics.IAnalyticsService,\r\n private partService: part.IPartService,\r\n private $filter: misc.IAdvancedNumberFilter,\r\n private pageMetaService: navigation.IPageMetaService,\r\n private anchorNavService: navigation.IAnchorNavService\r\n ) {\r\n\r\n $scope.vm = this;\r\n $scope.meta = pageMetaService.getPageMeta;\r\n $scope.error = null;\r\n $scope.item2Serial = null;\r\n $scope.serial = null;\r\n $scope.serialFromQuery = null;\r\n $scope.snInfo = {};\r\n $scope.documents = {};\r\n\r\n $scope.$watch('$viewContentLoaded', function () {\r\n $timeout(function () {\r\n var serialFromQuery = Number(anchorNavService.getQueryValue('sn')) || 0;\r\n if (serialFromQuery > 100000 && serialFromQuery < 999999) {\r\n $scope.deviceSerialInput = serialFromQuery;\r\n $scope.deviceSerialForm.deviceSerialInput.$setDirty();\r\n $scope.deviceSerialForm.deviceSerialInput.$setTouched();\r\n $scope.deviceSerialForm.$setDirty();\r\n $scope.serialFromQuery = serialFromQuery;\r\n $scope.vm.LoadDataBySerial(\"\" + serialFromQuery);\r\n }\r\n }, 0);\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n LoadSupportData(ev: MouseEvent, serialnr: string) {\r\n if (this.$scope.deviceSerialForm.$invalid) return;\r\n debugger;\r\n this.supportPortalService.getMacAddresses(serialnr);\r\n }\r\n\r\n searchByLanguage(documentId: number, documents: part.PartDocument[], languageCode: number) {\r\n var docs = documents.filter((d) => {\r\n return d.DocumentId == documentId && d.LanguageCode.some(lc => lc == languageCode);\r\n });\r\n if (docs.length > 0) return docs; //found in gui language\r\n\r\n docs = documents.filter((d) => {\r\n return d.DocumentId == documentId;\r\n });\r\n this.$filter('orderBy')(docs, 'LanguageCode');\r\n return docs;\r\n }\r\n\r\n GetDataBySerial(ev: MouseEvent) {\r\n\r\n\r\n //ignore the not found error, as we need to query the backend to clear it.\r\n this.$scope.deviceSerialForm.deviceSerialInput.$setValidity('notfound', true);\r\n this.$scope.deviceSerialForm.deviceSerialInput.$setValidity('protocol', true);\r\n if (this.$scope.deviceSerialForm.$invalid) return;\r\n\r\n var serialnr = \"\" + this.$scope.deviceSerialInput;\r\n\r\n this.LoadDataBySerial(serialnr)\r\n }\r\n\r\n LoadDataBySerial(serialnr: string) {\r\n\r\n this.supportPortalService.itemsBySerial(serialnr).then((resp) => {\r\n this.anchorNavService.search({ \"sn\": serialnr });\r\n this.$scope.serial = serialnr;\r\n this.$scope.item2Serial = resp.data.data.itemBySerialWithSub;\r\n\r\n if (!this.$scope.item2Serial || this.$scope.item2Serial.length <= 0) {\r\n this.$scope.deviceSerialForm.deviceSerialInput.$setValidity('notfound', false);\r\n return;\r\n }\r\n // reset not found error.\r\n this.$scope.deviceSerialForm.deviceSerialInput.$setValidity('notfound', true);\r\n\r\n this.supportPortalService.certsBySerials(this.$scope.item2Serial.map(item => item.serialnumber)).then((resp) => {\r\n this.$scope.deviceDocuments = resp.data.data.documentsByMultipleSerials.reduce((acc, item) => {\r\n acc[item.serialnumber] = item.documents;\r\n return acc;\r\n }, {});\r\n }).catch((e: any) => { });\r\n\r\n for (var i = 0; i < this.$scope.item2Serial.length; i++) {\r\n let item = this.$scope.item2Serial[i];\r\n\r\n this.pageMetaService.searchPage(\"ProductName\", item.productId).then((psck) => {\r\n if (psck) {\r\n this.$scope.snInfo[item.serialnumber] = {\r\n productMenuNode: psck,\r\n productRouteStack: psck.RouteEntry.RouteParameterStack,\r\n productImage: psck.RouteEntry.RouteParameterStack[0].Options['Image'],\r\n productName: psck.RouteEntry.RouteParameterStack[0].DisplayName[this.$scope.meta(navigation.HLFULL)],\r\n productUrl: psck.RouteEntry.UrlByLanguage[this.$scope.meta(navigation.HLFULL)],\r\n };\r\n }\r\n });\r\n\r\n // @TODO: Software updates are linked to the product, not the item\r\n // => Extend PartController => Documents(…)\r\n // => Extend Elastic SearchDocuments.SearchByParts(…) \r\n this.partService.loadDocumentsByPart(item.itemId).then((resp) => {\r\n //get the best language of a document.\r\n //get distinct document ids\r\n const uniqueDocId = resp.data.map(item => item.DocumentId).filter((value, index, self) => self.indexOf(value) === index)\r\n\r\n const languageCode = this.$scope.meta(navigation.HL) == 'D' ? 1 : 2\r\n\r\n this.$scope.documents[item.serialnumber] = [];\r\n uniqueDocId.forEach((docId, i, a) => {\r\n const docs = this.searchByLanguage(docId, resp.data, languageCode);\r\n if (docs.length > 0) this.$scope.documents[item.serialnumber].push(docs[0]);\r\n });\r\n\r\n })\r\n\r\n }\r\n\r\n\r\n \r\n }).catch((e: any) => {\r\n console.error(e);\r\n\r\n this.$scope.deviceSerialForm.deviceSerialInput.$setValidity('protocol', false);\r\n\r\n if (e.status) {\r\n //this is from the xhr (network problem, iis problem)\r\n this.$scope.error = `${e.statusText} (${e.status})`;\r\n }\r\n\r\n if (angular.isArray(e)) {\r\n // error from graphql\r\n this.$scope.error = `${e[0].message}`;\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n ResetMask = () => {\r\n this.$scope.item2Serial = undefined;\r\n this.$scope.documents = null;\r\n this.$scope.deviceDocuments = null;\r\n this.anchorNavService.search({ \"sn\": null });\r\n //set focus to the input and select ther content \r\n this.$timeout(() => {\r\n const inputElement = angular.element('input[name=deviceSerialInput]') as unknown as HTMLInputElement;\r\n if (inputElement) {\r\n inputElement.focus();\r\n inputElement.select();\r\n }\r\n }, 0);\r\n }\r\n \r\n HasDocuments = (documents:part.PartDocument[], types: number[]) => {\r\n // retrurn true if there is any document that is of a type in types\r\n return documents.some(doc => types.includes(doc.TypeNameId));\r\n }\r\n\r\n ProduceDocInfo = (doc: part.PartDocument) => {\r\n if (!doc) return;\r\n return doc.RevDestName + \" (\" + this.$filter('advancedNumber')(doc.RevDestSize, 1024) + 'B)';\r\n }\r\n\r\n\r\n GetDocumentDownloadLink = (document: part.PartDocument) => {\r\n return \"/svc/document.axd?id=\" + document.Id + \"&hl=\" + this.$scope.meta('hl');\r\n }\r\n\r\n\r\n }\r\n};\r\n","/// \r\n\r\n\r\n// CHEAT SHEET: http://ivision.com/wp-content/uploads/AngularJS_v2.pdf\r\n\r\n/**\r\n * The main TodoMVC app module.\r\n *\r\n * @type {angular.Module}\r\n */\r\nmodule supportportal {\r\n 'use strict';\r\n\r\n\r\n var nav = angular.module('supportportal', ['user', 'part'])\r\n .controller('supportPortalCtrl', SupportPortalCtrl)\r\n //.directive('match', matchValidator)\r\n .service('supportPortalService', SupportPortalService);\r\n}","/// \r\n\r\n\r\nmodule pze {\r\n /**\r\n * Angular Service http://stackoverflow.com/questions/19447886/how-can-i-define-an-angularjs-service-using-a-typescript-class-that-doesnt-poll\r\n */\r\n export class PzeService implements IPzeService {\r\n static $inject = [\r\n '$http',\r\n 'CacheFactory', \r\n 'userService',\r\n '$filter',\r\n ];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n private CacheFactory: CacheFactory.ICacheFactory,\r\n private userService: user.UserService,\r\n private $filter: ng.IFilterService\r\n ) { } \r\n\r\n public timesByDate(dayFrom: Date, dayTo: Date) : ng.IHttpPromise> {\r\n\r\n \r\n var dayFromStr = this.$filter('date')(dayFrom, \"yyyy-MM-dd\");\r\n var dayToStr = this.$filter('date')(dayTo, \"yyyy-MM-dd\");\r\n\r\n const query = `{\r\n timesByDate(dayFrom: \"${dayFromStr}\", dayTo: \"${dayToStr}\") {\r\n day\r\n totalWorkTime\r\n totalWorkHours\r\n totalPaidTime\r\n totalPaidHours\r\n totalBreakTime\r\n totalBreakHours\r\n totalSystemPaidHours\r\n totalSystemPaidTime\r\n totalSystemShouldHours\r\n totalSystemShouldTime\r\n totalSystemBreakTotalHours\r\n totalSystemBreakTotalTime\r\n totalSystemBreakPaidHours\r\n totalSystemBreakPaidTime\r\n totalSystemBreakLunchHours\r\n totalSystemBreakLunchTime\r\n totalLunchBreakTime\r\n totalLunchBreakHours\r\n projectedEndOfWorkday\r\n entries {\r\n clockingStartType\r\n clockingStartTime\r\n clockingStartHours\r\n clockingEndType\r\n clockingEndTime\r\n clockingEndHours\r\n durationKind\r\n hours\r\n time\r\n paidHours\r\n paidTime\r\n }\r\n }\r\n }`;\r\n\r\n var tokenPromise = this.userService.getJwtToken();\r\n return tokenPromise.then((token: string): ng.IHttpPromise> => {\r\n return this.$http({\r\n method: \"POST\"\r\n , url: pglob.RouteData.PhotometerApiBaseUrl + \"/graphql\"\r\n , headers: { \r\n 'Authorization': 'Bearer ' + token\r\n }\r\n , params: {\r\n }\r\n , data: { \"query\": query\r\n , \"variables\": {}\r\n }\r\n }).then((response: { data: any }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'PzeService.timesByDate' \" + response.status;\r\n });\r\n }); \r\n\r\n }\r\n\r\n\r\n public personalIcalUrl() : ng.IHttpPromise> {\r\n\r\n const query = `{\r\n personalIcalUrl\r\n }`;\r\n\r\n var tokenPromise = this.userService.getJwtToken();\r\n return tokenPromise.then((token: string): ng.IHttpPromise> => {\r\n return this.$http({\r\n method: \"POST\"\r\n , url: pglob.RouteData.PhotometerApiBaseUrl + \"/graphql\"\r\n , headers: { \r\n 'Authorization': 'Bearer ' + token\r\n }\r\n , params: {\r\n }\r\n , data: { \"query\": query\r\n , \"variables\": {}\r\n }\r\n }).then((response: { data: any }): any => { //success\r\n return response;\r\n })\r\n .catch((response) => {\r\n throw \"Error in 'PzeService.timesByDate' \" + response.status;\r\n });\r\n }); \r\n\r\n }\r\n\r\n \r\n\r\n }\r\n\r\n}\r\n","\r\n\r\nmodule pze {\r\n 'use strict';\r\n\r\n export class PzeCtrl implements ng.IController {\r\n\r\n\r\n // $inject annotation.\r\n // It provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // See http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n 'pzeService',\r\n '$filter',\r\n 'visibilityApiService',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IPzeCtrl,\r\n private pzeService: pze.IPzeService,\r\n private $filter: ng.IFilterService,\r\n private visibilityApiService: navigation.IVisibilityApiService\r\n ) {\r\n\r\n $scope.vm = this; \r\n $scope.icalurl = null;\r\n\r\n visibilityApiService.subscribeOnVisibilityChange($scope, (ev: ng.IAngularEvent, isHidden: boolean) => {\r\n if (!isHidden) {\r\n $scope.vm.refresh(null);\r\n }\r\n });\r\n\r\n this.pzeService.timesByDate(this.dayStart, this.dayEnd).then((v) => { \r\n this.$scope.times = v.data.data.timesByDate; \r\n }); \r\n }\r\n\r\n dayStart = new Date(new Date().setDate(new Date().getDate() - 7));\r\n dayEnd = new Date();\r\n\r\n dayStartHour = 6;\r\n dayEndHour = 23;\r\n\r\n\r\n getHourInPercent(hour : number, absolute: boolean):number {\r\n var h = absolute ? (hour - this.dayStartHour) : hour;\r\n var p = h / (this.dayEndHour - this.dayStartHour);\r\n return p * 100;\r\n }\r\n\r\n getFormatedTime(time: string) {\r\n return this.$filter('date')(Date.parse('2000-01-01 ' + time), \"HH:mm\");\r\n }\r\n \r\n\r\n loadMoreData(ev : MouseEvent) { \r\n var oldStart = new Date(this.dayStart.setDate(this.dayStart.getDate() - 1));\r\n this.dayStart = new Date(this.dayStart.setDate(this.dayStart.getDate() - 8));\r\n this.pzeService.timesByDate(this.dayStart, oldStart).then((v) => { \r\n v.data.data.timesByDate.forEach((w) => { \r\n this.$scope.times.push(w); \r\n })\r\n }); \r\n }\r\n\r\n refresh(ev: MouseEvent) { \r\n this.dayEnd = new Date(); //maybe \"today\" has changed if user keeps page open through midnight.\r\n this.pzeService.timesByDate(this.dayStart, this.dayEnd).then((v) => { \r\n this.$scope.times = v.data.data.timesByDate; \r\n });\r\n }\r\n\r\n getDifference(t: api_photometer.Time) : number {\r\n if (!t.totalSystemPaidHours) return null;\r\n var diff = t.totalSystemPaidHours - t.totalPaidHours;\r\n if (Math.abs(diff) < 0.1) return null;\r\n return diff;\r\n }\r\n \r\n decToTime(hours: number): string {\r\n var h = Math.trunc(hours);\r\n var m = Math.trunc((hours - h) * 60);\r\n return (\"00\" + h).slice(-2) + \":\" + (\"00\" + m).slice(-2)\r\n }\r\n\r\n getSaldo(): number {\r\n if (!this.$scope.times) return;\r\n var saldo = 0;\r\n this.$scope.times.forEach((t) => {\r\n if (t.projectedEndOfWorkday == \"00:00:00\") { \r\n saldo += t.totalPaidHours - 8.5;\r\n }\r\n });\r\n return saldo;\r\n }\r\n\r\n loadICalUrl() { \r\n this.pzeService.personalIcalUrl().then((v) => { \r\n this.$scope.icalurl = pglob.RouteData.PhotometerApiBaseUrl + v.data.data.personalIcalUrl; \r\n }); \r\n }\r\n\r\n\r\n }\r\n};\r\n","/// \r\n\r\nmodule userAdmin {\r\n 'use strict';\r\n\r\n export class User {\r\n constructor(\r\n public UserName: string,\r\n public LastLoginDate: Date,\r\n public Id: string,\r\n public IsLockedOut: boolean,\r\n public IsApproved: boolean,\r\n public Groups: string[]\r\n ) { }\r\n }\r\n \r\n export class NewUserData {\r\n constructor(\r\n public UserName: string,\r\n public Password: string,\r\n public Comment: string\r\n ) { }\r\n }\r\n\r\n export class UpdateUserData {\r\n constructor(\r\n public IsApproved: boolean,\r\n public IsLockedOut: boolean,\r\n public Groups: string[]\r\n ) { }\r\n }\r\n\r\n\r\n \r\n\r\n export class Group {\r\n constructor(\r\n public Name: string,\r\n public Permissions: string[]\r\n ) { }\r\n }\r\n\r\n export class Permission {\r\n constructor(\r\n public ID: string,\r\n public Name: string,\r\n public Desc: string\r\n ) { }\r\n }\r\n\r\n \r\n export class UserAdminServiceData {\r\n constructor(\r\n public Users: { [name: string] : User } ,\r\n public Groups: { [name: string] : Group } ,\r\n public Permissions: { [name: string] : Permission } \r\n ) { }\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n\r\n //\"Users\": {\r\n // \"051099@lsmtron.com\": {\r\n // \"UserName\": \"051099@lsmtron.com\",\r\n // \"LastLoginDate\": \"2009-09-18T08:21:57+02:00\",\r\n // \"Id\": \"7bed68dd-8551-4b82-a276-2cf3106e2066\",\r\n // \"IsLockedOut\": true,\r\n // \"IsApproved\": true,\r\n // \"Groups\": [\r\n // \"Registrierter Benutzer\"\r\n // ]\r\n // }\r\n // },\r\n\r\n // \"Groups\": {\r\n // \"Administration DSA\": {\r\n // \"Name\": \"Administration DSA\",\r\n // \"Permissions\": [\r\n // \"Alle Preise\",\r\n // \"Artikelsuche\",\r\n // \"CRM Kontakte abfragen\",\r\n // \"Dokumente bestellen\",\r\n // \"Dokumentsuche\",\r\n // \"Dokustufe 0 Produktion\",\r\n // \"Dokustufe 1 Verkauf\",\r\n // \"Dokustufe 2 Vertretungen\",\r\n // \"Dokustufe 3 Service\",\r\n // \"Dokustufe 4 Händler\"\r\n // ]\r\n // }\r\n // },\r\n\r\n // \"Permissions\": {\r\n // \"Alle Preise\": {\r\n // \"ID\": \"6e71044d-888b-42b2-95bd-17258f1c3888\",\r\n // \"Name\": \"Alle Preise\",\r\n // \"Desc\": \"Darf ALLE Artikel und deren Preise sehen.\"\r\n // }\r\n // }\r\n","/// \r\n\r\n\r\nmodule userAdmin {\r\n 'use strict';\r\n\r\n\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class UserAdminDetailCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // it provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // see http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$mdDialog',\r\n 'userAdminService',\r\n '$timeout',\r\n '$mdSidenav',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IUserAdminDetailScope,\r\n private $mdDialog: ng.material.IDialogService,\r\n private userAdminService: IUserAdminService,\r\n private $timeout: ng.ITimeoutService,\r\n private $mdSidenav: ng.material.ISidenavService\r\n ) {\r\n\r\n $scope.vm = this;\r\n \r\n $scope.data = {};\r\n $scope.working = true;\r\n\r\n $scope.showUnApproved = true;\r\n $scope.showLocked = false;\r\n $scope.showRegular = true;\r\n\r\n\r\n \r\n userAdminService.getData()\r\n .then((response) => {\r\n this.refreshData(response.data.Users, response.data.Groups, response.data.Permissions);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler (Err: \" + response.status +\")\");\r\n })\r\n .finally(() => {\r\n $scope.working = false;\r\n })\r\n\r\n };\r\n\r\n refreshData(users:{ [name: string] : User }, groups:{ [name: string] : Group }, permissions:{ [name: string] : Permission }) {\r\n if (users) {\r\n this.$scope.data.Users = users;\r\n this.$scope.UserNames = Object.keys(users);\r\n }\r\n \r\n if (groups) {\r\n this.$scope.data.Groups = groups;\r\n this.$scope.GroupNames = Object.keys(groups);\r\n }\r\n\r\n if (permissions) {\r\n this.$scope.data.Permissions = permissions;\r\n this.$scope.PermissionNames = Object.keys(permissions);\r\n }\r\n }\r\n\r\n close() { \r\n this.$mdDialog.cancel();\r\n }\r\n\r\n cancel() { \r\n this.$mdDialog.cancel();\r\n }\r\n\r\n\r\n selectUser(username: string) {\r\n this.$scope.selectedUser = this.$scope.data.Users[username];\r\n this.$scope.selectedGroup = null;\r\n this.$scope.selectedPermission = null;\r\n this.$scope.groupSearch = this.$scope.permissionSearch = ''; \r\n }\r\n\r\n\r\n selectGroup(groupname: string) {\r\n this.$scope.selectedUser = null;\r\n this.$scope.selectedGroup = this.$scope.data.Groups[groupname];\r\n this.$scope.selectedPermission = null;\r\n this.$scope.userSearch = this.$scope.permissionSearch = ''; \r\n }\r\n\r\n selectPermission(permissionname: string) {\r\n this.$scope.selectedUser = null;\r\n this.$scope.selectedGroup = null;\r\n this.$scope.selectedPermission = this.$scope.data.Permissions[permissionname];\r\n this.$scope.userSearch = this.$scope.groupSearch = ''; \r\n }\r\n\r\n getUserClass(name) {\r\n var cls = this.getSelectedClass(name, 'selectedUser', 'UserName');\r\n if (!this.$scope.data.Users[name].IsApproved) cls += ' unapproved';\r\n if (this.$scope.data.Users[name].IsLockedOut) cls += ' locked';\r\n return cls;\r\n }\r\n\r\n getSelectedClass(item: string, type: string, propName : string) {\r\n if (this.$scope && this.$scope[type] && this.$scope[type][propName]) {\r\n if (item === this.$scope[type][propName]) return 'active';\r\n }\r\n return null;\r\n }\r\n\r\n filterUser() {\r\n return angular.bind(this, function(username) {\r\n var me : UserAdminDetailCtrl = this;\r\n\r\n if (!me.$scope.showUnApproved && !me.$scope.data.Users[username].IsApproved) return false;\r\n if (!me.$scope.showLocked && me.$scope.data.Users[username].IsLockedOut) return false;\r\n if (!me.$scope.showRegular && (!me.$scope.data.Users[username].IsLockedOut && me.$scope.data.Users[username].IsApproved)) return false;\r\n\r\n if (me.$scope.userSearch > '' && username.indexOf(me.$scope.userSearch) < 0) return false;\r\n\r\n //filter by group\r\n if (me.$scope.selectedGroup) {\r\n return me.$scope.data.Users[username].Groups.indexOf(me.$scope.selectedGroup.Name) >= 0;\r\n }\r\n\r\n //filter by permission\r\n if (me.$scope.selectedPermission) {\r\n for (var i = 0; i < me.$scope.data.Users[username].Groups.length; i++) {\r\n var g = me.$scope.data.Users[username].Groups[i];\r\n if (me.$scope.data.Groups[g].Permissions.indexOf(me.$scope.selectedPermission.Name) >= 0) return true;\r\n }\r\n return false;\r\n }\r\n\r\n return true;\r\n }); \r\n }\r\n\r\n filterGroups() {\r\n return angular.bind(this, function(groupname) {\r\n var me : UserAdminDetailCtrl = this;\r\n\r\n //filter by user\r\n if (me.$scope.selectedUser) {\r\n return me.$scope.selectedUser.Groups.indexOf(groupname) >= 0;\r\n }\r\n\r\n //filter by permission\r\n if (me.$scope.selectedPermission) {\r\n return me.$scope.data.Groups[groupname].Permissions.indexOf(me.$scope.selectedPermission.Name) >= 0;\r\n }\r\n\r\n return true;\r\n }); \r\n }\r\n \r\n \r\n filterPermissions() {\r\n return angular.bind(this, function(permissionname) {\r\n var me : UserAdminDetailCtrl = this;\r\n \r\n //filter by user\r\n if (me.$scope.selectedUser) {\r\n for (var i = 0; i < me.$scope.selectedUser.Groups.length; i++) {\r\n var g = me.$scope.selectedUser.Groups[i];\r\n return me.$scope.data.Groups[g].Permissions.indexOf(permissionname) >= 0;\r\n }\r\n }\r\n\r\n //filter by group\r\n if (me.$scope.selectedGroup) {\r\n return me.$scope.selectedGroup.Permissions.indexOf(permissionname) >= 0;\r\n }\r\n\r\n return true;\r\n }); \r\n }\r\n\r\n\r\n\r\n /*\r\n * User Actions\r\n */\r\n filterUserNotInRole() {\r\n return angular.bind(this, function(username) {\r\n if (!this.$scope.selectedGroup) return null;\r\n return !((this).$scope.data.Users[username].Groups.indexOf((this).$scope.selectedGroup.Name) >= 0);\r\n }); \r\n }\r\n\r\n addUserToRole(selectUserNameForAdd) {\r\n var user = this.$scope.data.Users[selectUserNameForAdd]\r\n var groups = angular.copy(user.Groups);\r\n groups.push(this.$scope.selectedGroup.Name);\r\n\r\n this.userAdminService.updateUser(user.Id, {\"Groups\" : groups})\r\n .then((response) => {\r\n this.$scope.data.Users[selectUserNameForAdd] = response.data;\r\n this.$scope.message = \"Der User '\" + response.data.UserName + \"' wurde erfolgreich der Rolle '\" + this.$scope.selectedGroup.Name + \"' hinzugefügt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('user-to-role').close();\r\n });\r\n }\r\n\r\n removeUserFromRole(selectUserNameForRemove) {\r\n var user = this.$scope.data.Users[selectUserNameForRemove]\r\n var groups = angular.copy(user.Groups);\r\n var indexOfRole= groups.indexOf(this.$scope.selectedGroup.Name);\r\n groups.splice(indexOfRole, 1); \r\n\r\n this.userAdminService.updateUser(user.Id, {\"Groups\" : groups})\r\n .then((response) => {\r\n this.$scope.data.Users[selectUserNameForRemove] = response.data;\r\n this.$scope.message = \"Der User '\" + response.data.UserName + \"' wurde erfolgreich aus der Rolle '\" + this.$scope.selectedGroup.Name + \"' entfernt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n }\r\n\r\n \r\n createUser() {\r\n\r\n this.userAdminService.createUser(this.$scope.newUserData)\r\n .then((response) => {\r\n this.$scope.data.Users[response.data.UserName] = response.data;\r\n this.refreshData( this.$scope.data.Users, null, null);\r\n this.$scope.message = \"Der Benutzer '\" + response.data.UserName + \"' wurde erfolgreich erstellt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n this.$mdSidenav('user-new').close();\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n });\r\n }\r\n\r\n \r\n updateUser() {\r\n\r\n var data = new UpdateUserData(this.$scope.selectedUser.IsApproved, null, null);\r\n\r\n this.userAdminService.updateUser(this.$scope.selectedUser.Id, data)\r\n .then((response) => {\r\n this.$scope.selectedUser = this.$scope.data.Users[this.$scope.selectedUser.UserName] = response.data; \r\n this.$scope.message = \"Der Benutzer '\" + response.data.UserName + \"' wurde erfolgreich aktualisiert.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('user-edit').close();\r\n });\r\n\r\n }\r\n \r\n \r\n unlockUser() {\r\n\r\n var data = new UpdateUserData(null, false, null);\r\n\r\n this.userAdminService.updateUser(this.$scope.selectedUser.Id, data)\r\n .then((response) => {\r\n this.$scope.selectedUser = this.$scope.data.Users[this.$scope.selectedUser.UserName] = response.data; \r\n this.$scope.message = \"Der Benutzer '\" + response.data.UserName + \"' wurde erfolgreich entsperrt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('user-edit').close();\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n /**\r\n * Right Sidebar for adding Permissions\r\n */\r\n filterNotInSelectedGroup() {\r\n return angular.bind(this, function(permissionname) {\r\n if (!this.$scope.selectedGroup) return null;\r\n return !(this.$scope.selectedGroup.Permissions.indexOf(permissionname) >= 0);\r\n }); \r\n }\r\n\r\n addPermission(selectPermissionForAdd) {\r\n var permissions = angular.copy(this.$scope.selectedGroup.Permissions);\r\n permissions.push(selectPermissionForAdd);\r\n var selectedGroup = this.$scope.selectedGroup.Name;\r\n\r\n this.userAdminService.UpdateGroup(this.$scope.selectedGroup.Name, permissions)\r\n .then((response) => {\r\n this.refreshData(null, response.data, null);\r\n this.$scope.selectedGroup = this.$scope.data.Groups[selectedGroup];\r\n this.$scope.message = \"Die Berechtigung '\" + selectPermissionForAdd + \"' wurde erfolgreich der Gruppe '\" + selectedGroup + \"' hinzugefügt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('permission-add').close();\r\n });\r\n }\r\n\r\n \r\n removePermission(selectPermissionForRemove) {\r\n var permissions = angular.copy(this.$scope.selectedGroup.Permissions);\r\n var indexOfPerm = permissions.indexOf(selectPermissionForRemove);\r\n permissions.splice(indexOfPerm, 1);\r\n var selectedGroup = this.$scope.selectedGroup.Name;\r\n\r\n this.userAdminService.UpdateGroup(this.$scope.selectedGroup.Name, permissions)\r\n .then((response) => {\r\n this.refreshData(null, response.data, null)\r\n this.$scope.selectedGroup = this.$scope.data.Groups[selectedGroup];\r\n this.$scope.message = \"Die Berechtigung '\" + selectPermissionForRemove + \"' wurde erfolgreich aus der Gruppe '\" + selectedGroup + \"' entfernt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('permission-add').close();\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Right Sidebar for create Permissions\r\n */\r\n\r\n createPermission() {\r\n var name = this.$scope.newPermissionData.Name;\r\n var description = this.$scope.newPermissionData.Desc;\r\n\r\n this.userAdminService.createPermission(name, description)\r\n .then((response) => {\r\n this.refreshData(null, null, response.data)\r\n this.$scope.message = \"Die Berechtigung '\" + name + \"' wurde erfolgreich erstellt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n this.$mdSidenav('permission-new').close();\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n });\r\n }\r\n\r\n \r\n\r\n /**\r\n * Right Sidebar for adding Roles to Users\r\n */\r\n filterRoleNotInSelectedUser() {\r\n return angular.bind(this, function(rolename) {\r\n if (!this.$scope.selectedUser) return null;\r\n return !((this).$scope.selectedUser.Groups.indexOf(rolename) >= 0);\r\n }); \r\n }\r\n\r\n addRoleToUser(selectRoleForAdd) {\r\n var groups = angular.copy(this.$scope.selectedUser.Groups);\r\n groups.push(selectRoleForAdd);\r\n var user = this.$scope.selectedUser.UserName;\r\n\r\n this.userAdminService.updateUser(this.$scope.selectedUser.Id, {\"Groups\" : groups})\r\n .then((response) => {\r\n this.$scope.selectedUser = this.$scope.data.Users[user] = response.data; \r\n this.$scope.message = \"Die Rolle '\" + selectRoleForAdd + \"' wurde erfolgreich dem User '\" + user + \"' hinzugefügt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('role-to-user').close();\r\n });\r\n }\r\n \r\n removeRoleFromUser(selectRoleForRemove) {\r\n var groups = angular.copy(this.$scope.selectedUser.Groups);\r\n var indexOfPerm = groups.indexOf(selectRoleForRemove);\r\n groups.splice(indexOfPerm, 1);\r\n var user = this.$scope.selectedUser.UserName;\r\n\r\n this.userAdminService.updateUser(this.$scope.selectedUser.Id, {\"Groups\" : groups})\r\n .then((response) => {\r\n this.$scope.selectedUser = this.$scope.data.Users[user] = response.data; \r\n this.$scope.message = \"Die Rolle '\" + selectRoleForRemove + \"' wurde erfolgreich vom User '\" + user + \"' entfernt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('role-to-user').close();\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Right Sidebar for adding Roles to Permision\r\n */\r\n filterRoleNotInSelectedPermission() {\r\n return angular.bind(this, function(rolename) {\r\n if (!this.$scope.selectedPermission) return null;\r\n return this.$scope.data.Groups[rolename].Permissions.indexOf(this.$scope.selectedPermission.Name) < 0;\r\n }); \r\n }\r\n\r\n \r\n addRoleToPermission(selectRoleForAdd) {\r\n var groups = this.$scope.GroupNames.filter((groupname) => {\r\n return this.$scope.data.Groups[groupname].Permissions.indexOf(this.$scope.selectedPermission.Name) >= 0;\r\n });\r\n groups.push(selectRoleForAdd);\r\n\r\n this.userAdminService.updatePermission(this.$scope.selectedPermission.Name, groups)\r\n .then((response) => {\r\n this.refreshData(null, response.data, null); \r\n this.$scope.message = \"Der Rolle '\" + selectRoleForAdd + \"' wurde erfolgreich die Berechtigung '\" + this.$scope.selectedPermission.Name + \"' erteilt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('role-to-permission').close();\r\n });\r\n }\r\n\r\n \r\n removeRoleFromPermission(selectRoleForRemove) {\r\n var groups = this.$scope.GroupNames.filter((groupname) => {\r\n return this.$scope.data.Groups[groupname].Permissions.indexOf(this.$scope.selectedPermission.Name) >= 0;\r\n });\r\n var indexOfPerm = groups.indexOf(selectRoleForRemove);\r\n groups.splice(indexOfPerm, 1); \r\n\r\n this.userAdminService.updatePermission(this.$scope.selectedPermission.Name, groups)\r\n .then((response) => {\r\n this.refreshData(null, response.data, null); \r\n this.$scope.message = \"Der Rolle '\" + selectRoleForRemove + \"' wurde erfolgreich die Berechtigung '\" + selectRoleForRemove + \"' entzogen.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n }) \r\n .finally(() => {\r\n this.$mdSidenav('role-to-permission').close();\r\n });\r\n }\r\n\r\n\r\n\r\n \r\n createRole() {\r\n var name = this.$scope.newRoleName;\r\n\r\n this.userAdminService.createGroup(name)\r\n .then((response) => {\r\n this.refreshData(null, response.data, null);\r\n this.$scope.message = \"Die Rolle '\" + name + \"' wurde erfolgreich erstellt.\"\r\n this.$timeout(() => {this.$scope.message = null}, 6000);\r\n this.$mdSidenav('role-new').close();\r\n })\r\n .catch((response) => {\r\n alert(\"Fehler \" + response.data + \" (Err: \" + response.status +\")\");\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n toggleSidebar(id) {\r\n this.$mdSidenav(id).toggle();\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n}","/// \r\n\r\n\r\nmodule userAdmin {\r\n 'use strict';\r\n\r\n\t/**\r\n\t * The main controller for the app. The controller:\r\n\t * - retrieves and persists the model via the todoStorage service\r\n\t * - exposes the model to the template and provides event handlers\r\n\t */\r\n export class UserAdminCtrl {\r\n\r\n\r\n // $inject annotation.\r\n // it provides $injector with information about dependencies to be injected into constructor\r\n // it is better to have it close to the constructor, because the parameters must match in count and type.\r\n // see http://docs.angularjs.org/guide/di\r\n public static $inject = [\r\n '$scope',\r\n '$mdDialog',\r\n ];\r\n\r\n // dependencies are injected via AngularJS $injector\r\n // controller's name is registered in Application.ts and specified from ng-controller attribute in index.html\r\n constructor(\r\n private $scope: IUserAdminScope,\r\n private $mdDialog: ng.material.IDialogService\r\n ) {\r\n\r\n $scope.vm = this;\r\n }\r\n\r\n showDialog(ev): void {\r\n this.$mdDialog.show({\r\n controller: UserAdminDetailCtrl,\r\n templateUrl: 'user/UserAdminDialog',\r\n parent: angular.element(document.body),\r\n targetEvent: ev,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n }\r\n}","/// \r\n\r\n\r\nmodule userAdmin {\r\n\r\n\r\n export class UserAdminService implements IUserAdminService {\r\n static $inject = [\r\n '$http',\r\n ];\r\n\r\n constructor(\r\n // Add the parameter and type definition.\r\n public $http: ng.IHttpService,\r\n ) { } \r\n\r\n\r\n\r\n //User\r\n\r\n public getData() : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"GET\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n }); \r\n\r\n }\r\n\r\n\r\n public createUser(newUser : NewUserData) : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/CreateUser\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , data: newUser \r\n }); \r\n\r\n }\r\n\r\n \r\n public updateUser(userId : string, userData : UpdateUserData) : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"PUT\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/UpdateUser\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"userId\" : userId,\r\n }\r\n , data: userData \r\n }); \r\n\r\n }\r\n\r\n\r\n public deleteUser(guid : string) : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"DELETE\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/DeleteUser\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"userId\" : guid,\r\n }\r\n }); \r\n\r\n }\r\n\r\n\r\n // Group\r\n\r\n \r\n public createGroup(groupname : string) : ng.IHttpPromise<{ [name: string] : Group }> {\r\n\r\n return this.$http<{ [name: string] : Group }>({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/CreateGroup\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"groupname\" : groupname,\r\n }\r\n }); \r\n\r\n }\r\n\r\n \r\n public UpdateGroup(groupname : string, permissions : string[]) : ng.IHttpPromise<{ [name: string] : Group }> {\r\n\r\n return this.$http<{ [name: string] : Group }>({\r\n method: \"PUT\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/UpdateGroup\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"groupname\" : groupname,\r\n }\r\n , data: permissions \r\n }); \r\n\r\n }\r\n\r\n\r\n public deleteGroup(groupname : string) : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"DELETE\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/DeleteGroup\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"groupname\" : groupname,\r\n }\r\n }); \r\n\r\n }\r\n\r\n // Permission\r\n\r\n \r\n public createPermission(permissionName : string, desc : string) : ng.IHttpPromise<{ [name: string] : Permission }> {\r\n\r\n return this.$http<{ [name: string] : Permission }>({\r\n method: \"POST\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/CreatePermission\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"permissionName\" : permissionName,\r\n }\r\n , data: JSON.stringify(desc)\r\n }); \r\n\r\n }\r\n\r\n \r\n public updatePermission(permissionName : string, groups : string[]) : ng.IHttpPromise<{ [name: string] : Group }> {\r\n\r\n return this.$http<{ [name: string] : Group }>({\r\n method: \"PUT\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/UpdatePermission\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"permissionName\" : permissionName,\r\n }\r\n , data: groups \r\n }); \r\n\r\n }\r\n\r\n\r\n public deletePermission(permissionName : string) : ng.IHttpPromise {\r\n\r\n return this.$http({\r\n method: \"DELETE\"\r\n , url: \"/api/\" + pglob.RouteData.CurrentLanguage.hl + \"/UserAdmin/DeletePermission\"\r\n , headers: { 'Content-Type': 'application/json' }\r\n , params: {\r\n \"permissionName\" : permissionName,\r\n }\r\n }); \r\n\r\n }\r\n\r\n \r\n }\r\n\r\n}\r\n","\r\nmodule part {\r\n 'use strict';\r\n\r\n\r\n export class PartCtrlSettings {\r\n constructor(\r\n public showList : boolean\r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule user {\r\n\r\n ifIntranet.$inject = ['userService'];\r\n export function ifIntranet(userService: user.UserService, $window): ng.IDirective {\r\n return {\r\n restrict: 'A',\r\n priority: 100,\r\n scope: false,\r\n link: function (scope: ILoginFormScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes) {\r\n var destroy = !userService.isLoggedIn();\r\n \r\n if (attr['ifLoggedIn'] === 'false') destroy = !destroy;\r\n\r\n if (destroy) {\r\n element.remove();\r\n element = null; \r\n }\r\n }\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule user {\r\n 'use strict';\r\n\r\n export class FormSrvErrorCollection {\r\n constructor(\r\n public errors: { [validator: string] : boolean } \r\n ) { }\r\n }\r\n}","/// \r\n\r\nmodule editor {\r\n 'use strict';\r\n\r\n export enum ContentMetaStatus {\r\n Draft = 1,\r\n Published = 2,\r\n Archived = 3,\r\n Deleted = 4,\r\n }\r\n\r\n \r\n export enum ContentAttachementType {\r\n ContentImage = 1,\r\n ContentAttachment = 2,\r\n }\r\n\r\n export class ContentMeta {\r\n constructor(\r\n public Id: number,\r\n public Title: string,\r\n public URL: string,\r\n public Image: string,\r\n public Tags: ContentTag[],\r\n public Attachment: string,\r\n public IsFeatured: boolean,\r\n public Status: ContentMetaStatus,\r\n public IsVisible: boolean,\r\n public MetaTitle: string,\r\n public MetaDescription: string,\r\n public Permission: string,\r\n public ValidFrom: Date,\r\n public ValidTo: Date,\r\n public CreatedAt: Date,\r\n public ModifiedAt: Date,\r\n public CreatedBy?: string, // erweitern\r\n public ModifiedBy?: string, // erweitern\r\n public PublishedAt?: Date,\r\n public PublishedBy?: string, // erweitern\r\n public LastAuthor?: string,\r\n public RoutedURL?: string,\r\n public RowVersion?:string, //base64 encoded byte array of row version\r\n ) { }\r\n }\r\n}"]}