"use strict";angular.module("ulakbus",["angular-loading-bar","ngRoute","ngSanitize","ngCookies","ulakbus.formService","ulakbus.messaging","ulakbus.dashboard","ulakbus.auth","ulakbus.error_pages","ulakbus.crud","ulakbus.debug","ulakbus.devSettings","ulakbus.version","gettext","markdown","templates-prod"]).constant("RESTURL",function(){varbackendurl=location.href.indexOf("nightly")>-1?"//nightly.api.ulakbus.net/":"//api.ulakbus.net/";if(document.cookie.indexOf("backendurl")>-1){varcookiearray=document.cookie.split(";");angular.forEach(cookiearray,function(item){item.indexOf("backendurl")>-1&&(backendurl=item.split("=")[1],"/"!==backendurl.slice(-1)&&(backendurl+="/"),"http"!==backendurl.substring(0,4)&&(backendurl="http://"+backendurl))})}if(location.href.indexOf("backendurl")>-1){varurlfromqstr=location.href.split("?")[1].split("=")[1];backendurl=decodeURIComponent(urlfromqstr.replace(/\+/g," ")),"/"!==backendurl.slice(-1)&&(backendurl+="/"),"http"!==backendurl.substring(0,4)&&(backendurl="http://"+backendurl),document.cookie="backendurl="+backendurl,window.location.href=window.location.href.split("?")[0]}return{url:backendurl}}()).factory("IsOnline",function($window,$document,$rootScope){varisOnlineService={};isOnlineService.status=!0;varofflineMask=angular.element('<div class="body-mask" style="z-index: 2010; opacity: 0.6"><div class="alert alert-danger text-center" role="alert" style="z-index: 2011; position: relative">İnternet bağlantınız kesilmiştir. Bağlantı sağlandığında kaldığınız yerden devam edebilirsiniz.</div></div>'),body=$document.find("body").eq(0);returnisOnlineService.set_status=function(state){state!=isOnlineService.status&&(state?(offlineMask.remove(),$rootScope.current_user===!0&&window.location.reload()):body.append(offlineMask)),isOnlineService.status=state},isOnlineService.get_status=function(){returnisOnlineService.status},isOnlineService.status=navigator.onLine,$window.addEventListener("offline",function(){isOnlineService.set_status(!1)}),$window.addEventListener("online",function(){isOnlineService.set_status(!0)}),isOnlineService}).constant("toastr",window.toastr).constant("WS",window.WebSocket).config(function($logProvider){$logProvider.debugEnabled(!1)}).config(function(markdownProvider){}),angular.module("ulakbus").config(["$routeProvider",function($routeProvider,$route){$routeProvider.when("/login",{templateUrl:"components/auth/login.html",controller:"LoginController"}).when("/dashboard",{templateUrl:"components/dashboard/dashboard.html",controller:"DashController"}).when("/dev/settings",{templateUrl:"components/devSettings/devSettings.html",controller:"DevSettingsController"}).when("/debug/list",{templateUrl:"components/debug/debug.html",controller:"DebugController"}).when("/admin/bpmnmanager",{templateUrl:"components/admin/bpmn_manager.html",controller:"BpmnManagerController"}).when("/newdesigns",{templateUrl:"components/uitemplates/base.html",controller:"NewDesignsCtrl"}).when("/formservicepg",{templateUrl:"components/uitemplates/form_service_pg.html",controller:"FormServicePg"}).when("/:wf/",{templateUrl:"components/crud/templates/crud-preload.html",controller:"CRUDController"}).when("/cwf/:wf/:token",{templateUrl:"components/crud/templates/crud.html",controller:"CRUDController"}).when("/:wf/do/:cmd",{templateUrl:"components/crud/templates/crud.html",controller:"CRUDListFormController"}).when("/:wf/do/:cmd/:key",{templateUrl:"components/crud/templates/crud.html",controller:"CRUDListFormController"}).when("/:wf/:model",{templateUrl:"components/crud/templates/crud-preload.html",controller:"CRUDController"}).when("/:wf/:model/do/:cmd",{templateUrl:"components/crud/templates/crud.html",controller:"CRUDListFormController"}).when("/:wf/:model/do/:cmd/:key",{templateUrl:"components/crud/templates/crud.html",controller:"CRUDListFormController"}).otherwise({redirectTo:"/dashboard"})}]).run(function($rootScope,AuthService){AuthService.check_auth(),$rootScope.loggedInUser=!1,$rootScope.loginAttempt=0,$rootScope.websocketIsOpen=!1,$rootScope.current_user=!0,$rootScope.$on("$routeChangeStart",function(event,next,current){})}).config(["$httpProvider",function($httpProvider){$httpProvider.defaults.withCredentials=!0}]).run(function(gettextCatalog){gettextCatalog.setCurrentLanguage("tr"),gettextCatalog.debug=!0}).config(["cfpLoadingBarProvider",function(cfpLoadingBarProvider){cfpLoadingBarProvider.includeBar=!1,cfpLoadingBarProvider.parentSelector="loaderdiv",cfpLoadingBarProvider.spinnerTemplate='<div class="loader">Loading...</div>'}]),angular.module("ulakbus").config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push(function(ErrorService,$q,$rootScope,$location,$timeout,$log,toastr){return{request:function(config){return"POST"===config.method&&(config.headers["Content-Type"]="text/plain"),config},response:function(response){returnresponse.data._debug_queries&&response.data._debug_queries.length>0&&($rootScope.debug_queries=$rootScope.debug_queries||[],$rootScope.debug_queries.push({url:response.config.url,queries:response.data._debug_queries})),response.data.is_login===!1&&($rootScope.loggedInUser=response.data.is_login,$location.path("/login")),response.data.is_login===!0&&($rootScope.loggedInUser=!0,$rootScope.loginAttempt=1,"/login"===$location.path()&&$location.path("/dashboard")),response.data.notify&&toastr.info(response.data.notify),response},responseError:function(rejection){returnErrorService.handle(rejection,"http"),$q.reject(rejection)}}})}]),angular.module("ulakbus.formService",["ui.bootstrap"]).service("Moment",function(){returnwindow.moment}).factory("Generator",function($http,$q,$timeout,$sce,$location,$route,$compile,$log,RESTURL,$rootScope,Moment,WSOps,FormConstraints,$uibModal,$filter,Utils){vargenerator={};returngenerator.makeUrl=function(scope){vargetparams=scope.form_params.param?"?"+scope.form_params.param+"="+scope.form_params.id:"";returnRESTURL.url+scope.url+getparams},generator.generate=function(scope,data){return$log.debug("data before generation:",data),data.forms?(angular.forEach(data.forms,function(value,key){scope[key]=data.forms[key]}),scope.client_cmd=data.client_cmd,scope.token=data.token,scope.initialModel=angular.copy(scope.model),generator.prepareFormItems(scope),scope.object_id=scope.form_params.object_id,$log.debug("scope at after generate",scope),scope):scope},generator.group=function(scope){if(!scope.grouping)returnscope;varnewForm=[],extractFormItem=function(itemList){varextractedList=[];returnangular.forEach(itemList,function(value,key){varitem=getFormItem(value);item&&extractedList.push(item)}),$log.debug("extractedList: ",extractedList),extractedList},getFormItem=function(item){varformItem;returnscope.form.indexOf(item)>-1?(formItem=scope.form[scope.form.indexOf(item)],scope.form.splice(scope.form.indexOf(item),1),formItem):(angular.forEach(scope.form,function(value,key){if(value.key===item)returnformItem=value,voidscope.form.splice(key,1)}),formItem)},makeGroup=function(itemsToGroup){varsubItems=[];returnangular.forEach(itemsToGroup,function(value,key){subItems.push({type:"fieldset",items:extractFormItem(value.items),title:value.group_title})}),subItems};returnangular.forEach(scope.grouping,function(value,key){newForm.push({type:"fieldset",items:makeGroup(value.groups),htmlClass:"col-md-"+value.layout,title:value.group_title})}),newForm.length>0&&($log.debug("grouped form: ",newForm),$log.debug("rest of form: ",scope.form),$log.debug("form united: ",newForm.concat(scope.form))),scope.form=newForm.concat(scope.form),scope},generator.constraints=function(scope){returnangular.forEach(scope.form,function(v,k){try{varcons=scope.forms.constraints[v]||scope.forms.constraints[v.key];angular.isDefined(cons)&&(v.constructor===String?scope.form[k]={key:v,validationMessage:{form_cons:cons.val_msg},$validators:{form_cons:function(value){returnFormConstraints[cons.cons](value,cons.val,v)}}}:(v.key=v.key,v.validationMessage=angular.extend({form_cons:cons.val_msg},v.validationMessage),v.$validators=angular.extend({form_cons:function(value){returnFormConstraints[cons.cons](value,cons.val,v.key)}},v.$asyncValidators)))}catch(e){$log.error(e.message)}}),generator.group(scope)},generator.prepareFormItems=function(scope){angular.forEach(scope.form,function(value,key){if("help"===value.type){varmarkdown=$filter("markdown");value.helpvalue=markdown(value.helpvalue)}"select"===value.type&&(scope.schema.properties[value.key].type="select",scope.schema.properties[value.key].titleMap=value.titleMap,scope.form[key]=value.key)});var_buttons=function(scope,v,k){varbuttonPositions=scope.modalElements?scope.modalElements.buttonPositions:{bottom:"move-to-bottom",top:"move-to-top",none:""},workOnForm=scope.modalElements?scope.modalElements.workOnForm:"formgenerated",workOnDiv=scope.modalElements?scope.modalElements.workOnDiv:"",buttonClass=buttonPositions[v.position]||buttonPositions.bottom,redirectTo=!scope.modalElements;scope.form[scope.form.indexOf(k)]={type:v.type,title:v.title,style:(v.style||"btn-danger")+" hide bottom-margined "+buttonClass,onClick:function(){deletescope.form_params.cmd,deletescope.form_params.flow,v.cmd&&(scope.form_params.cmd=v.cmd),v.flow&&(scope.form_params.flow=v.flow),v.wf&&(deletescope.form_params.cmd,scope.form_params.wf=v.wf),scope.model[k]=1,scope.modalElements?scope.submitModalForm():!v.form_validate&&angular.isDefined(v.form_validate)?generator.submit(scope,redirectTo):(scope.$broadcast("schemaFormValidate"),scope[workOnForm].$valid?(generator.submit(scope,redirectTo),scope.$broadcast("disposeModal")):$timeout(function(){varfirsterror=angular.element(document.querySelectorAll("input.ng-invalid"))[0];firsterror.focus()}))}},$timeout(function(){varselectorBottom=".buttons-on-bottom"+workOnDiv,buttonsToBottom=angular.element(document.querySelector("."+buttonClass));angular.element(document.querySelector(selectorBottom)).append(buttonsToBottom),buttonsToBottom.removeClass("hide")},500)},_numbers=function(scope,v,k){v.type="number",v.validationMessage={max:"bu alan -2147483647 ve 2147483647 arasında olmalıdır."},v.$validators={max:function(value){return2147483647>value>-2147483647}},scope.model[k]=parseInt(scope.model[k])},_node_default=function(scope,v,k){scope[v.type]=scope[v.type]||{},scope[v.type][k]=angular.copy({title:v.title,form:[],schema:{properties:{},properties_list:[],required:[],title:v.title,type:"object",formType:v.type,model_name:k,inline_edit:scope.inline_edit},buttons:v.buttons,url:scope.url,wf:v.wf||scope.wf,quick_add:v.quick_add,quick_add_view:v.quick_add_view,quick_add_model:v.quick_add_model,quick_add_field:v.quick_add_field,nodeModelChange:function(item){}}),angular.forEach(v.schema,function(item){scope[v.type][k].schema.properties[item.name]=angular.copy(item),"idx"!=item.name&&scope[v.type][k].schema.properties_list.push(scope[v.type][k].schema.properties[item.name]),angular.isDefined(item.wf)&&(scope[v.type][k].schema.properties[item.name].wf=angular.copy(item.wf)),item.required===!0&&"idx"!==item.name&&scope[v.type][k].schema.required.push(angular.copy(item.name)),"idx"!==item.name&&scope[v.type][k].form.push(item.name);try{"date"===item.type}catch(e){$log.debug("Error: ",e.message)}}),$timeout(function(){if("ListNode"==v.type){varlist=scope[v.type][k];list.items=angular.copy(scope.model[k]||[]),angular.forEach(list.items,function(node,fieldName){Object.keys(node).length&&angular.forEach(node,function(prop,propName){varpropInSchema=list.schema.properties[propName];try{"date"===propInSchema.type&&(node[propName]=generator.dateformatter(prop),list.model[fieldName][propName]=generator.dateformatter(prop)),"select"===propInSchema.type&&(node[propName]=generator.item_from_array(prop.toString(),list.schema.properties[propName].titleMap)),propInSchema.titleMap&&(node[propName]={key:prop,unicode:generator.item_from_array(prop,propInSchema.titleMap)})}catch(e){$log.debug("Field is not date")}})})}}),scope.model[k]=scope.model[k]||[],scope[v.type][k].model=scope.model[k],scope[v.type][k].lengthModels=scope.model[k]?1:0},_node_filter_interface=function(scope,v,k){varformitem=scope.form[scope.form.indexOf(k)],modelScope={form_params:{wf:v.wf||scope.wf||scope.form_params.wf,model:v.model_name||v.schema[0].model_name,cmd:v.list_cmd||"select_list",query:""}};scope.generateTitleMap=function(modelScope){generator.get_list(modelScope).then(function(res){formitem.titleMap=[],angular.forEach(res.objects,function(item){"-1"!==item&&formitem.titleMap.push({value:item.key,name:item.value})}),formitem.filteredItems=generator.get_diff_array(angular.copy(formitem.titleMap),angular.copy(formitem.selectedFilteredItems),1)})};varmodelItems=[],modelKeys=[];angular.forEach(scope.model[k],function(value,mkey){modelItems.push({value:value[v.schema[0].name].key,name:value[v.schema[0].name].unicode});varmodelKey={};modelKey[v.schema[0].name]=value[v.schema[0].name].key,modelKeys.push(modelKey)}),scope.model[k]=angular.copy(modelKeys),formitem={type:"template",templateUrl:"shared/templates/multiselect.html",title:v.title,formName:k,wf:v.wf||scope.wf,add_cmd:v.add_cmd,name:v.model_name||v.schema[0].model_name,model_name:v.model_name||v.schema[0].model_name,filterValue:"",selected_item:{},filteredItems:[],selectedFilteredItems:modelItems,titleMap:scope.generateTitleMap(modelScope),appendFiltered:function(filterValue){filterValue.length>2&&(formitem.filteredItems=[],angular.forEach(formitem.titleMap,function(value,key){value.name.indexOf(filterValue)>-1&&formitem.filteredItems.push(formitem.titleMap[key])})),filterValue<=2&&(formitem.filteredItems=formitem.titleMap),formitem.filteredItems=generator.get_diff_array(formitem.filteredItems,formitem.selectedFilteredItems)},select:function(selectedItemsModel){selectedItemsModel&&(formitem.selectedFilteredItems=formitem.selectedFilteredItems.concat(selectedItemsModel),formitem.appendFiltered(formitem.filterValue),scope.model[k]=(scope.model[k]||[]).concat(formitem.dataToModel(selectedItemsModel)))},deselect:function(selectedFilteredItemsModel){selectedFilteredItemsModel&&(formitem.selectedFilteredItems=generator.get_diff_array(angular.copy(formitem.selectedFilteredItems),angular.copy(selectedFilteredItemsModel)),formitem.appendFiltered(formitem.filterValue),formitem.filteredItems=formitem.filteredItems.concat(selectedFilteredItemsModel),scope.model[k]=generator.get_diff_array(scope.model[k]||[],formitem.dataToModel(selectedFilteredItemsModel)))},dataToModel:function(data){vardataValues=[];returnangular.forEach(data,function(value,key){vardataKey={};dataKey[v.schema[0].name]=value.value,dataValues.push(dataKey)}),dataValues}},scope.form[scope.form.indexOf(k)]=formitem},generate_fields={button:{default:_buttons},submit:{default:_buttons},file:{default:function(scope,v,k){scope.form[scope.form.indexOf(k)]={type:"template",title:v.title,templateUrl:"shared/templates/filefield.html",name:k,key:k,fileInsert:function(){$scope.$broadcast("schemaForm.error."+k,"tv4-302",!0)},imageSrc:scope.model[k]?$rootScope.settings.static_url+scope.model[k]:"",avatar:"avatar"===k},v.type="string"}},select:{default:function(scope,v,k){scope.form[scope.form.indexOf(k)]={type:"template",title:v.title,templateUrl:"shared/templates/select.html",name:k,key:k,titleMap:v.titleMap}}},confirm:{default:function(scope,v,k){scope.form[scope.form.indexOf(k)]={type:"template",title:v.title,confirm_message:v.confirm_message,templateUrl:"shared/templates/confirm.html",name:k,key:k,style:v.style,buttons:v.buttons,modalInstance:"",modalFunction:function(){deletescope.form_params.cmd,deletescope.form_params.flow,v.cmd&&(scope.form_params.cmd=v.cmd),v.flow&&(scope.form_params.flow=v.flow),v.wf&&(deletescope.form_params.cmd,scope.form_params.wf=v.wf);varmodalInstance=$uibModal.open({animation:!0,templateUrl:"shared/templates/confirmModalContent.html",controller:"ModalController",resolve:{items:function(){varnewscope={form:{title:v.title,confirm_message:v.confirm_message,buttons:v.buttons,onClick:function(cmd){modalInstance.dismiss(),cmd&&generator.submit(scope,!1)}}};returnnewscope}}})},openModal:function(){varworkOnForm=scope.modalElements?scope.modalElements.workOnForm:"formgenerated";!v.form_validate&&angular.isDefined(v.form_validate)?this.modalFunction():(scope.$broadcast("schemaFormValidate"),scope[workOnForm].$valid?this.modalFunction():$timeout(function(){varfirsterror=angular.element(document.querySelectorAll("input.ng-invalid"))[0];firsterror.focus()}))}}}},date:{default:function(scope,v,k){$log.debug("date:",scope.model[k]),scope.model[k]=generator.dateformatter(scope.model[k]),scope.form[scope.form.indexOf(k)]={key:k,name:k,title:v.title,type:"template",templateUrl:"shared/templates/datefield.html",validationMessage:{dateNotValid:"Girdiğiniz tarih geçerli değildir. <i>orn: '01.01.2015'<i/>",302:"Bu alan zorunludur."},$asyncValidators:{dateNotValid:function(value){vardeferred=$q.defer();return$timeout(function(){if(scope.model[k]=angular.copy(generator.dateformatter(value)),scope.schema.required.indexOf(k)>-1&&deferred.resolve(),value.constructor===Date)deferred.resolve();else{vardateValue=d=value.split(".");isNaN(Date.parse(value))||3!==dateValue.length?deferred.reject():deferred.resolve()}}),deferred.promise}},disabled:!1,is_disabled:function(){returnthis.disabled},status:{opened:!1},open:function($event){this.disabled=!0,scope.model[k]=Moment(scope.model[k],"DD.MM.YYYY").toDate();varthat=this;$timeout(function(){that.status.opened=!0},100)},format:"dd.MM.yyyy",onSelect:function(){this.disabled=!1,scope.model[k]=angular.copy(generator.dateformatter(scope.model[k]))}}}},int:{default:_numbers},boolean:{default:function(scope,v,k){}},string:{default:function(scope,v,k){}},typeahead:{default:function(scope,v,k){scope.form[scope.form.indexOf(k)]={type:"template",title:v.title,titleMap:v.titleMap,templateUrl:"shared/templates/typeahead.html",name:k,key:k,onDropdownSelect:function(item,inputname){scope.model[k]=item.value,$timeout(function(){document.querySelector("input[name="+inputname+"]").value=item.name})}},v.type="string"},custom:function(scope,v,k){scope.form[scope.form.indexOf(k)]={type:"template",title:v.title,widget:v.widget,getTitleMap:function(viewValue){varsearchData={form_params:{url:v.wf,wf:v.wf,view:v.view,query:viewValue}};generator.get_list(searchData).then(function(res){returnres})},templateUrl:"shared/templates/typeahead.html",name:k,key:k,onDropdownSelect:function(item,inputname){scope.model[k]=item.value,$timeout(function(){document.querySelector("input[name="+inputname+"]").value=item.name})}},v.type="string"}},text_general:{default:function(scope,v,k){v.type="string",v["x-schema-form"]={type:"textarea"}}},float:{default:_numbers},model:{default:function(scope,v,k){varformitem=scope.form[scope.form.indexOf(k)],modelScope={url:v.wf,wf:v.wf,form_params:{wf:v.wf,model:v.model_name,cmd:v.list_cmd}},generateTitleMap=function(modelScope){returngenerator.get_list(modelScope).then(function(res){returnformitem.titleMap=[],angular.forEach(res.objects,function(item){item!==-1?formitem.titleMap.push({value:item.key,name:item.value}):formitem.focusToInput=!0}),formitem.titleMap})};formitem={type:"template",templateUrl:"shared/templates/foreignKey.html",formName:k,title:v.title,wf:v.wf,add_cmd:v.add_cmd,name:k,key:k,model_name:v.model_name,selected_item:{},titleMap:[],onSelect:function(item,inputname){scope.model[k]=item.value,$timeout(function(){document.querySelector("input[name="+inputname+"]").value=item.name})},onDropdownSelect:function(item,inputname){scope.model[k]=item.value,$timeout(function(){document.querySelector("input[name="+inputname+"]").value=item.name})},getTitleMap:function(viewValue){returnmodelScope.form_params.query=viewValue,generateTitleMap(modelScope)},getDropdownTitleMap:function(){deletemodelScope.form_params.query,formitem.gettingTitleMap=!0,generateTitleMap(modelScope).then(function(data){formitem.titleMap=data,formitem.gettingTitleMap=!1})}},scope.form[scope.form.indexOf(k)]=formitem,scope.model[k]&&generator.get_list({url:"crud",form_params:{wf:v.wf,model:v.model_name,object_id:scope.model[k],cmd:"object_name"}}).then(function(data){try{$timeout(function(){document.querySelector("input[name="+k+"]").value=data.object_name},200)}catch(e){document.querySelector("input[name="+k+"]").value=data.object_name,$log.debug("exception",e)}})}},Node:{default:_node_default,filter_interface:_node_filter_interface},ListNode:{default:_node_default,filter_interface:_node_filter_interface}};angular.forEach(scope.schema.properties,function(v,k){if("form_params"inscope&&k==scope.form_params.param)returnscope.model[k]=scope.form_params.id,voidscope.form.splice(scope.form.indexOf(k),1);try{generate_fields[v.type][v.widget||"default"](scope,v,k)}catch(e){console.log(v.type)}}),$log.debug("scope at after prepareformitems",scope),generator.constraints(scope)},generator.dateformatter=function(formObject){varndate=newDate(formObject);if(isNaN(ndate))return"";varnewdatearray=Moment(ndate).format("DD.MM.YYYY");return$log.debug("date formatted: ",newdatearray),newdatearray},generator.doItemAction=function($scope,key,todo,mode){$scope.form_params.cmd=todo.cmd,$scope.form_params.wf=$scope.wf,todo.wf&&($scope.url=todo.wf,$scope.form_params.wf=todo.wf,delete$scope.token,delete$scope.form_params.model,delete$scope.form_params.cmd),todo.object_key?$scope.form_params[todo.object_key]=key:$scope.form_params.object_id=key,$scope.form_params.param=$scope.param,$scope.form_params.id=$scope.param_id,$scope.form_params.token=$scope.token;var_do={normal:function(){return$log.debug("normal mode starts"),generator.get_wf($scope)},modal:function(){$log.debug("modal mode starts");varmodalInstance=$uibModal.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"shared/templates/confirmModalContent.html",controller:"ModalController",size:"",resolve:{items:function(){varnewscope={form:{buttons:[{text:"Evet",style:"btn-success",cmd:"confirm"},{text:"Hayir",style:"btn-warning",dismiss:!0}],title:todo.name,confirm_message:"Islemi onayliyor musunuz?",onClick:function(cmd){if(modalInstance.close(),"confirm"===cmd&&angular.isDefined(cmd))returnmodalInstance.close(),generator.get_wf($scope)}}};returnnewscope}}})},new:function(){$log.debug("new mode is not not ready")}};return_do[mode]()},generator.button_switch=function(position){varbuttons=angular.element(document.querySelectorAll("button")),positions={true:"enabled",false:"disabled"};angular.forEach(buttons,function(button,key){button[positions[position]]=!0}),$log.debug("buttons >> ",positions[position])},generator.get_form=function(scope){return$rootScope.websocketIsOpen===!0?WSOps.request(scope.form_params).then(function(data){returngenerator.generate(scope,data)}):void$timeout(function(){generator.get_form(scope)},500)},generator.get_list=function(scope){return$rootScope.websocketIsOpen===!0?WSOps.request(scope.form_params).then(function(data){returndata}):void$timeout(function(){generator.get_list(scope)},500)},generator.get_wf=function(scope){$rootScope.websocketIsOpen===!0?WSOps.request(scope.form_params).then(function(data){returngenerator.pathDecider(data.client_cmd||["list"],scope,data)}):$timeout(function(){generator.get_wf(scope)},500)},generator.pageData={},generator.getPageData=function(){returngenerator.pageData},generator.setPageData=function(value){generator.pageData=value},generator.pathDecider=function(client_cmd,$scope,data){functionredirectTo(scope,page){varpathUrl="/"+scope.form_params.wf;returnpathUrl+=scope.form_params.model?"/"+scope.form_params.model+"/do/"+page:"/do/"+page,$location.path()===pathUrl?$route.reload():void$location.path(pathUrl)}functiondispatchClientCmd(){data[$scope.form_params.param]=$scope.form_params.id,data.model=$scope.form_params.model,data.wf=$scope.form_params.wf,data.param=$scope.form_params.param,data.param_id=$scope.form_params.id,data.pageData=!0,generator.setPageData(data),redirectTo($scope,client_cmd[0])}dispatchClientCmd()},generator.get_diff=function(oldObj,newObj){varresult={};returnangular.forEach(newObj,function(value,key){oldObj[key]?oldObj[key].constructor!==newObj[key].constructor||newObj[key].constructor!==Object&&newObj[key].constructor!==Array?oldObj[key]!=newObj[key]&&(result[key]=angular.copy(newObj[key])):angular.forEach(value,function(v,k){oldObj[key][k]!=value[k]&&(result[key][k]=angular.copy(value[k]))}):result[key]=angular.copy(newObj[key])}),result},generator.get_diff_array=function(array1,array2,way){varresult=[];returnangular.forEach(array1,function(value,key){1===way?angular.toJson(array2).indexOf(value.value)<0&&result.push(value):angular.toJson(array2).indexOf(angular.toJson(value))<0&&result.push(value)}),result},generator.item_from_array=function(item,array){varresult=item;returnangular.forEach(array,function(value,key){value.value===item&&(result=value.name)}),result},generator.submit=function($scope,redirectTo,dontProcessReply){angular.forEach($scope.ListNode,function(value,key){$scope.model[key]=value.model}),angular.forEach($scope.Node,function(value,key){$scope.model[key]=value.model});varsend_data={form:$scope.model,object_key:$scope.object_key,token:$scope.token,model:$scope.form_params.model,wf:$scope.form_params.wf,cmd:$scope.form_params.cmd,flow:$scope.form_params.flow,object_id:$scope.object_id,filter:$scope.filter,query:$scope.form_params.query};return$rootScope.websocketIsOpen===!0?WSOps.request(send_data).then(function(data){returndontProcessReply?data:generator.pathDecider(data.client_cmd||["list"],$scope,data)}):void$timeout(function(){generator.scope($scope,redirectTo)},500)},generator}).controller("ModalController",function($scope,$uibModalInstance,Generator,items,$timeout,Utils){angular.forEach(items,function(value,key){$scope[key]=items[key]}),$scope.$on("disposeModal",function(){$scope.cancel()}),$scope.$on("modalFormLocator",function(event){$timeout(function(){Utils.iterate($scope.model,function(modelValue,k){if(!angular.isUndefined($scope.edit)){varunicode=$scope.items[$scope.edit][k].unicode;unicode&&(document.querySelector("input[name="+k+"]").value=unicode)}})}),$scope.linkedModelForm=event.targetScope.linkedModelForm}),$scope.$on("submitModalForm",function(){$scope.onSubmit($scope.linkedModelForm)}),$scope.$on("validateModalDate",function(event,field){$scope.$broadcast("schemaForm.error."+field,"tv4-302",!0)}),$scope.onSubmit=function(form){$scope.$broadcast("schemaFormValidate"),form.$valid&&$uibModalInstance.close($scope)},$scope.onNodeSubmit=function(){$scope.$broadcast("schemaFormValidate"),$scope.modalForm.$valid&&$uibModalInstance.close($scope)},$scope.cancel=function(){$uibModalInstance.dismiss("cancel")}}).directive("modalForNodes",function($uibModal,Generator,Utils){return{link:function(scope,element,attributes){element.on("click",function(){varmodalInstance=$uibModal.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"shared/templates/listnodeModalContent.html",controller:"ModalController",size:"lg",resolve:{items:function(){varattribs=attributes.modalForNodes.split(","),node=angular.copy(scope.$parent[attribs[1]][attribs[0]]);"add"===attribs[2]&&(node.model={}),attribs[3]&&(node.model=node.model[attribs[3]]),node.edit=attribs[3],scope.node.schema.wf=scope.node.url,angular.forEach(scope.node.schema.properties,function(value,key){angular.isDefined(scope.node.schema.properties[key].wf)||(scope.node.schema.properties[key].wf=scope.node.url),scope.node.schema.properties[key].list_cmd="select_list"});varnewscope={wf:scope.node.wf,url:scope.node.url,form_params:{model:scope.node.schema.model_name},edit:attribs[3]};returnGenerator.generate(newscope,{forms:scope.node}),newscope.model=newscope.model[node.edit]||{},newscope}}});modalInstance.result.then(function(childmodel,key){varlistNodeItem=scope.$parent[childmodel.schema.formType][childmodel.schema.model_name];if("Node"===childmodel.schema.formType&&(listNodeItem.model=angular.copy(childmodel.model),listNodeItem.lengthModels+=1),"ListNode"===childmodel.schema.formType){varreformattedModel={};angular.forEach(childmodel.model,function(value,key){key.indexOf("_id")>-1?(angular.isObject(value)&&value.value&&(value=value.value,childmodel.model[key]=value),angular.forEach(childmodel.form,function(v,k){if(v.formName===key){varunicodeValue=v.titleMap.find(function(element,index,array){if(element.value===value)returnelement});unicodeValue&&(unicodeValue=unicodeValue.name,reformattedModel[key]={key:value,unicode:unicodeValue})}})):reformattedModel[key]={key:key,unicode:Generator.item_from_array(value,childmodel.schema.properties[key].titleMap)}}),childmodel.edit?(listNodeItem.model[childmodel.edit]=childmodel.model,Object.keys(reformattedModel).length>0?listNodeItem.items[childmodel.edit]=reformattedModel:listNodeItem.items[childmodel.edit]=angular.copy(childmodel.model)):(listNodeItem.model.push(angular.copy(childmodel.model)),Object.keys(reformattedModel).length>0?listNodeItem.items.push(reformattedModel):listNodeItem.items.push(angular.copy(childmodel.model))),listNodeItem.lengthModels+=1}})})}}}).directive("addModalForLinkedModel",function($uibModal,$rootScope,$route,Generator){return{link:function(scope,element,attributes){element.on("click",function(){varmodalInstance=$uibModal.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"shared/templates/linkedModelModalContent.html",controller:"ModalController",size:"lg",resolve:{items:function(){varformName=attributes.addModalForLinkedModel;returnGenerator.get_form({form_params:{wf:scope.form.wf,model:scope.form.model_name,cmd:scope.form.add_cmd},modalElements:{buttonPositions:{bottom:"move-to-bottom-modal",top:"move-to-top-modal",none:""},workOnForm:"linkedModelForm",workOnDiv:"-modal"+formName},submitModalForm:function(){$rootScope.$broadcast("submitModalForm")},validateModalDate:function(field){$rootScope.$broadcast("validateModalDate",field)},formName:formName})}}});modalInstance.result.then(function(childscope,key){varformName=childscope.formName;Generator.submit(childscope,!1,!0).then(function(data){varitem={value:data.forms.model.object_key,name:data.forms.model.unicode};scope.form.titleMap.push(item),scope.form.onSelect(item,formName)})})})}}}).directive("modalFormLocator",function(){return{link:function(scope){scope.$emit("modalFormLocator")}}}),angular.module("ulakbus").factory("FormConstraints",function($q,$log,$timeout){varcond=function(condition){return!condition},cond_generator=function(){return{lt:function(a,b){return!(a<b)},gt:function(a,b){return!(a>b)}}},cond_multiple=function(val1,val2,condition){varvalid=!0;returnangular.forEach(val2,function(value,key){inputval=angular.element(document.querySelector("#"+value)).val(),cond_generator()[condition](val1,inputval)&&(valid=!1)}),valid},fo_co={};returnfo_co.lt=function(value,ref_val,input_name){returncond(value>ref_val)},fo_co.lt_date=function(value,ref_val,input_name){returncond(value>ref_val)},fo_co.ltm=function(value,ref_vals,input_name){returncond_multiple(value,ref_vals,"lt")},fo_co.gt=function(value,ref_val,input_name){returncond(value<ref_val)},fo_co.gt_date=function(value,ref_val,input_name){returncond(value<ref_val)},fo_co.gtm=function(value,ref_vals,input_name){returncond_multiple(value,ref_vals,"gt")},fo_co.selectbox_fields=function(value,fields,input_name){varform_items=angular.element(document.querySelectorAll("bootstrap-decorator"));angular.forEach(form_items,function(v,k){angular.element(v).removeClass("hide");varcheckpoint;try{checkpoint=angular.isDefined(v.querySelector("input"))&&null!==v.querySelector("input")?v.querySelector("input").name:v.querySelector("select").name,checkpoint!==input_name[0]&&checkpoint!==fields[value][0]&&(angular.element(v).addClass("hide"),$log.debug(checkpoint,fields[value],angular.isDefined(fields[checkpoint])))}catch(e){$log.error(e.message)}})},fo_co}),angular.module("ulakbus").factory("ErrorService",function(toastr,$rootScope,$location,$log){
varerror_service={};returnerror_service.handle=function(rejection,prtcl){varerrorInModal;"http"===prtcl&&(errorInModal=!!rejection.data&&"error"inrejection.data),"ws"===prtcl&&(rejection.status=rejection.status||rejection.code,rejection.data={error:rejection.error,title:rejection.title},errorInModal=!0);varerrorModal=function(){if(0===$rootScope.loginAttempt&&"http"===prtcl)returnvoid$log.debug("not logged in, no alert message triggered");varcodefield="";if(rejection.data.error&&(codefield="<p><pre>"+rejection.data.error+"</pre></p>"),$('<div class="modal"><div class="modal-dialog" style="width:100%;" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="exampleModalLabel">Error Status: '+rejection.status+"<br>Error Title: "+rejection.data.title+'</h4></div><div class="modal-body"><div class="alert alert-danger"><strong>'+rejection.data.description+"</strong>"+codefield+'</div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Kapat</button></div></div></div></div>').modal(),!rejection.no_highlight)try{$("pre:not(.hljs)").each(function(i,block){hljs.highlightBlock(block)})}catch(e){$log.debug("Exception: ",e.message)}},errorInAlertBox=function(alertContent){errorInModal?errorModal():$rootScope.loginAttempt>0&&toastr.error(alertContent.msg,alertContent.title)},errorForAlertBox={title:rejection.status,msg:rejection.data?rejection.data.description:"Error",type:"error"},errorDispatch={"-1":function(){$log.error("-1 returned:",rejection)},400:function(){$location.reload()},401:function(){return"/login"!==$location.path()?window.location.reload():void$log.debug("show errors on login form")},403:function(){rejection.data.is_login===!0&&($rootScope.loggedInUser=!0,"/login"===$location.path()&&$location.path("/dashboard"))},404:function(){errorInAlertBox(errorForAlertBox)},500:function(){errorInAlertBox(errorForAlertBox)},503:function(){rejection.data={description:"Servise erişilemiyor."},errorInAlertBox(errorForAlertBox)}};errorDispatch[rejection.status||rejection.code]()},error_service}),angular.module("ulakbus").controller("KeyListenController",function($scope,action_service){$scope.keylog=[0,1],$scope.down=function(e){angular.forEach(action_service.combinations,function(value,key){action_service.equal(value,$scope.keylog.concat([e.keyCode]))&&action_service.acts[key]()}),$scope.keylog.shift(),$scope.keylog.push(e.keyCode)},$scope.$on("user_ready",function(){$scope.user_ready=!0}),$scope.user_ready=!1}).factory("action_service",function($uibModal,$log){varactions={};returnactions.equal=function(a,b){return!(a<b||b<a)},actions.combinations={open_inspector:[91,16,75]},actions.acts={open_inspector:function(){varmodalInstance=$uibModal.open({animation:!0,templateUrl:"shared/templates/actionsModalContent.html",controller:"ActionsModalController",resolve:{items:function(){returndocument.querySelectorAll(".navbar-collapse a, #side-user-menu a, .dropdown-menu li a")}}});modalInstance.result.then(function(selectedItem){$log.info("resirect to:",selectedItem),location.hash=selectedItem.value})}},actions}).controller("ActionsModalController",function($scope,$uibModalInstance,items){$scope.actions=[],angular.forEach(items,function(value,key){value.children[1]||$scope.actions.push({name:value.innerHTML,value:value.hash})}),$scope.doThis=function(item){$uibModalInstance.close(item)},$scope.cancel=function(){$uibModalInstance.dismiss("cancel")}}),angular.module("ulakbus").service("WSUri",function(RESTURL){varbase=RESTURL.url.replace("http","ws");return{url:base+"ws"}}).factory("WSOps",function(WSUri,$q,$log,$rootScope,$timeout,$document,ErrorService,WS,IsOnline,DevSettings){$rootScope.$on("ws_turn_on",function(){generate_ws()});varwebsocket,refresh_count=0,refresh_websocket=refresh_count<5?1e3:5e3,isSupported=function(){return"WebSocket"inwindow},generate_ws=function(){if(isSupported())$log.info("Openning web socket..."),websocket=newWS(WSUri.url),websocket.onopen=function(evt){wsOps.onOpen(evt),refresh_count=0},websocket.onclose=function(evt){wsOps.onClose(evt),wsOps.loggedOut!==!0&&$timeout(function(){generate_ws(),refresh_count+=1},refresh_websocket)},websocket.onmessage=function(evt){wsOps.onMessage(evt)},websocket.onerror=function(evt){wsOps.onError(evt)};else{varerror={error:"Tarayıcınız websocket desteklememektedir. Lütfen güncel bir tarayıcı kullanınız.",code:500,title:"Uyumsuz Tarayıcı",no_highlight:!0};ErrorService.handle(error,"ws")}},wsOps={},pingCounter=0,checkPing=function(){pingCounter>2&&(websocket.close(),$log.debug("websocket not pong"),pingCounter=0)},keepAlivePing=function(interval){returnsetInterval(function(){$rootScope.websocketIsOpen&&IsOnline.get_status()&&"on"===DevSettings.settings.keepAlive&&(wsOps.doSend(angular.toJson({data:{view:"ping"}})),pingCounter+=1,checkPing())},interval)};wsOps.onOpen=function(evt){$rootScope.websocketIsOpen=!0,$log.info("CONNECTED",evt),keepAlivePing(2e4),wsOps.loggedOut=!1},wsOps.onClose=function(event){$rootScope.websocketIsOpen=!1,$log.info("DISCONNECTED",event)},wsOps.callbacks={},wsOps.onMessage=function(event){varmsg_methods={init:function(data){if(angular.isDefined(wsOps.callbacks[data.callbackID])){varcallback=wsOps.callbacks[data.callbackID];deletewsOps.callbacks[data.callbackID],callback.resolve(data)}else"pong"!=data.msg&&$log.info("Data without callback: %o",data),"pong"===msg_data.msg&&(pingCounter-=1)},error:function(){returnErrorService.handle(msg_data,"ws")},message:function(){vartype={1:"notifications",11:"notifications",111:"notifications",2:"message",3:"message",4:"message"};$timeout(function(){$rootScope.$broadcast(type[msg_data.type],msg_data)})},dashboard:function(){varcallback=wsOps.callbacks[msg_data.callbackID];deletewsOps.callbacks[msg_data.callbackID],callback.resolve(msg_data)},task_list:function(){$rootScope.$broadcast("task_list",msg_data.task_list)},channel_subscription:function(){$timeout(function(){$rootScope.$broadcast("channel_change","add",msg_data)})},user_status:function(){$timeout(function(){$rootScope.$broadcast("channel_change","status",msg_data)})}},do_action=function(options){varargs=[].slice.call(arguments,0),action="init";return"function"==typeofmsg_methods[args[1]]&&(action=args[1],args.shift()),msg_methods[action](args[0])},msg_data=angular.fromJson(event.data);msg_data.error&&(msg_data.cmd="error"),do_action(msg_data,msg_data.cmd),"pong"!=msg_data.msg&&$log.info("MESSAGE:",event,"Data:",angular.copy(msg_data))},wsOps.onError=function(evt){$log.error("ERROR :: "+evt)},wsOps.doSend=function(data){websocket.send(data),$log.info("SENT:",data)},wsOps.request=function(data){if($rootScope.websocketIsOpen){varrequest={callbackID:Math.random().toString(36).substring(7),data:data},deferred=$q.defer();returnwsOps.callbacks[request.callbackID]=deferred,websocket.send(angular.toJson(request)),$log.info("SENT:",data),deferred.promise.then(function(response){returnrequest.response=response,response})}$timeout(function(){wsOps.request(data)},1e3)},wsOps.close=function(){wsOps.loggedOut=!0,websocket.close(),$log.info("CLOSED")};varmask=angular.element('<div class="body-mask"><div class="loader"></div></div>');mask.css({zIndex:"2010",opacity:"0.6"});$document.find("body").eq(0);returnwsOps}),angular.module("ulakbus").service("Utils",function(){functionhasEqualProperties(obj1,obj2){varresult=!0;for(varpropinobj2)obj2.hasOwnProperty(prop)&&(result=result&&obj2[prop]==obj1[prop]);returnresult}this.groupBy=function(list,propName,initialObject){returninitialObject||(initialObject={}),list.reduce(function(acc,item){return(acc[item[propName]]=acc[item[propName]]||[]).push(item),acc},initialObject)},this.deleteWhere=function(list,condition){for(vari=0;i<list.length;i++)if(hasEqualProperties(list[i],condition))returnlist.splice(i,1),list[i]},this.findWhere=function(list,condition){for(vari=0;i<list.length;i++)if(hasEqualProperties(list[i],condition))returnlist[i]},this.iterate=function(collection,callback){angular.forEach(collection,function(val,key){key.indexOf&&0==key.indexOf("$$")||callback(val,key)})}}).filter("formatJson",function(){returnfunction(val){try{returnJSON.stringify(val,null,4)}catch(e){returnval}}}),angular.module("ulakbus").directive("logout",function($http,$location,RESTURL,AuthService){return{link:function($scope,$element,$rootScope){$element.on("click",function(){AuthService.logout()})}}}).directive("headerNotification",function($rootScope,$uibModal,MessagingService){return{templateUrl:"shared/templates/directives/header-notification.html",restrict:"E",replace:!0,scope:{},controller:function($scope,$log){$scope.count=MessagingService.get_unread_counters(),$scope.showMessagesWindow=function(type){return"notifications"==type?MessagingService.get_notifications_channel_key().then(function(channelKey){returnMessagingService.show_messaging_window(channelKey)}):voidMessagingService.show_messaging_window()}}}}).directive("searchDirective",function(Generator,$log,$rootScope){return{templateUrl:"shared/templates/directives/search.html",restrict:"E",replace:!0,link:function($scope){$scope.searchForm=[{key:"searchbox",htmlClass:"pull-left"},{type:"submit",title:"Ara",style:"btn-info",htmlClass:"pull-left"}],$scope.searchSchema={type:"object",properties:{searchbox:{type:"string",minLength:2,title:"Ara","x-schema-form":{placeholder:"Arama kriteri giriniz..."}}},required:[]},$scope.searchModel={searchbox:""},$scope.searchSubmit=function(form){if($scope.$broadcast("schemaFormValidate"),form.$valid){varsearchparams={token:$scope.$parent.token,object_id:$scope.$parent.object_id,form_params:{wf:$scope.$parent.wf,model:$scope.$parent.form_params.model,cmd:$scope.$parent.reload_cmd,flow:$scope.$parent.form_params.flow,query:$scope.searchModel.searchbox}};Generator.submit(searchparams)}}}}}).directive("sortDirective",function(Generator,$log){return{templateUrl:"shared/templates/directives/sort.html",restrict:"E",replace:!0,link:function($scope){$scope.titleMap=[{value:"artan",name:"Artan"},{value:"azalan",name:"Azalan"}],$scope.sortForm=[{key:"sortbox",htmlClass:"pull-left",type:"select",titleMap:$scope.titleMap},{type:"submit",title:"Sırala",htmlClass:"pull-left"}],$scope.sortSchema={type:"object",properties:{sortbox:{type:"select",title:"Sırala"}},required:["sortbox"]},$scope.sortModel={sortbox:""},$scope.sortSubmit=function(form){if($scope.$broadcast("schemaFormValidate"),form.$valid){varsortparams={url:$scope.wf,token:$scope.$parent.token,object_id:$scope.$parent.object_id,form_params:{model:$scope.$parent.form_params.model,cmd:$scope.$parent.reload_cmd,flow:$scope.$parent.form_params.flow,param:"sort",id:$scope.sortModel.sortbox}};Generator.submit(sortparams)}}}}}).directive("collapseMenu",function($timeout,$window,$cookies){return{templateUrl:"shared/templates/directives/menuCollapse.html",restrict:"E",replace:!0,scope:{},controller:function($scope,$rootScope){$rootScope.collapsed=!1,$rootScope.sidebarPinned=$cookies.get("sidebarPinned")||1,$scope.collapseToggle=function(){$window.innerWidth>"768"&&($rootScope.collapsed===!1?(jQuery(".sidebar").css("width","62px"),jQuery(".manager-view").css("width","calc(100% - 62px)"),$rootScope.collapsed=!0,$rootScope.sidebarPinned=0,$cookies.put("sidebarPinned",0)):(jQuery("span.menu-text, span.arrow, .sidebar footer").fadeIn(400),jQuery(".sidebar").css("width","250px"),jQuery(".manager-view").css("width","calc(100% - 250px)"),$rootScope.collapsed=!1,$rootScope.sidebarPinned=1,$cookies.put("sidebarPinned",1)))},$timeout(function(){"0"===$cookies.get("sidebarPinned")&&$scope.collapseToggle()})}}}).directive("headerSubMenu",function($location){return{templateUrl:"shared/templates/directives/header-sub-menu.html",restrict:"E",replace:!0,link:function($scope){$scope.style="width:calc(100% - 300px);",$scope.$on("$routeChangeStart",function(){$scope.style="/dashboard"===$location.path()?"width:calc(100% - 300px);":"width:%100 !important;"})}}}).directive("headerBreadcrumb",function($location){return{templateUrl:"shared/templates/directives/header-breadcrumb.html",restrict:"E",replace:!1,link:function($scope){$scope.goBack=function(){$location.state()}}}}).directive("sidebar",["$location",function(){return{templateUrl:"shared/templates/directives/sidebar.html",restrict:"E",replace:!0,scope:{},controller:function($scope,$rootScope,$cookies,$route,AuthService,WSOps,RESTURL,$log,$location,$window,$timeout){$scope.prepareMenu=function(menuItems){varnewMenuItems={};returnangular.forEach(menuItems,function(value,key){angular.forEach(value,function(v,k){newMenuItems[k]=v})}),newMenuItems};vargenerate_dashboard=function(){if($rootScope.current_user===!0)if($rootScope.websocketIsOpen){varsidebarmenu=$("#side-menu");sidebarmenu.metisMenu(),WSOps.request({view:"dashboard"}).then(function(data){functionreGroupMenuItems(items,baseCategory){varnewItems={};returnangular.forEach(items,function(value,key){newItems[value.kategori]=newItems[value.kategori]||[],newItems[value.kategori].push(value)}),newItems}$scope.allMenuItems=angular.copy(data),angular.forEach($scope.allMenuItems,function(value,key){"current_user"!==key&&"settings"!==key&&($scope.allMenuItems[key]=reGroupMenuItems(value,key))}),$rootScope.quick_menu=reGroupMenuItems(data.quick_menu,"quick_menus"),$rootScope.quick_menu=data.quick_menu,deletedata.quick_menu,$log.debug("quick menu",$rootScope.quick_menu),$rootScope.$broadcast("authz",data),$rootScope.searchInputs=data,data.current_user,$rootScope.current_user=data.current_user,(data.ogrenci||data.personel)&&($rootScope.current_user.can_search=!0),$rootScope.settings=data.settings,$scope.menuItems=$scope.prepareMenu({other:$scope.allMenuItems.other}),$timeout(function(){sidebarmenu.metisMenu()})})}else$timeout(function(){generate_dashboard()},500)};$scope.$on("generate_dashboard",function(){generate_dashboard()}),$scope.$on("menuitems",function(event,data){varmenu={};menu[data]=$scope.allMenuItems[data],$rootScope.$broadcast("usermenuitems",$scope.prepareMenu(menu))}),$scope.$on("selectedUser",function($event,data){$scope.selectedUser=data}),$scope.deselectUser=function(){delete$scope.selectedUser,delete$scope.selectedMenuItems},$rootScope.$watch(function($rootScope){return$rootScope.section},function(newindex,oldindex){newindex>-1&&($scope.menuItems=[$scope.allMenuItems[newindex]],$scope.collapseVar=0)}),$scope.selectedMenu=$location.path(),$scope.collapseVar=0,$scope.multiCollapseVar=0,$scope.check=function(x){x===$scope.collapseVar?$scope.collapseVar=0:$scope.collapseVar=x},$scope.breadcrumb=function(itemlist,$event){$rootScope.breadcrumblinks=itemlist},$scope.multiCheck=function(y){y===$scope.multiCollapseVar?$scope.multiCollapseVar=0:$scope.multiCollapseVar=y}}}}]).directive("rightSidebar",["$location",function(){return{templateUrl:"shared/templates/directives/right-sidebar.html",restrict:"E",replace:!0,scope:{},controller:function($scope,$rootScope,$cookies,$route,$http,RESTURL,$log,$location,$window,$timeout){varsidebarUserMenu=$("#side-user-menu");sidebarUserMenu.metisMenu(),$scope.$on("usermenuitems",function(event,data){$scope.selectedMenuItems=data,$timeout(function(){sidebarUserMenu.metisMenu()}),jQuery(".right-sidebar").css("width","300px"),jQuery(".manager-view-inner").css("width","calc(100% - 300px)")}),$scope.$on("selectedUser",function($event,data){$scope.selectedUser=data}),$scope.deselectUser=function(){jQuery(".right-sidebar").css("width","0px"),jQuery(".manager-view-inner").css("width",""),delete$scope.selectedUser,delete$scope.selectedMenuItems},$rootScope.$watch(function($rootScope){return$rootScope.section},function(newindex,oldindex){newindex>-1&&($scope.menuItems=[$scope.allMenuItems[newindex]],$scope.collapseVar=0)}),$scope.selectedMenu=$location.path(),$scope.collapseVar=0,$scope.multiCollapseVar=0,$scope.check=function(x){x===$scope.collapseVar?$scope.collapseVar=0:$scope.collapseVar=x},$scope.multiCheck=function(y){y===$scope.multiCollapseVar?$scope.multiCollapseVar=0:$scope.multiCollapseVar=y}}}}]).directive("stats",function(){return{templateUrl:"shared/templates/directives/stats.html",restrict:"E",replace:!0,scope:{model:"=",comments:"@",number:"@",name:"@",colour:"@",details:"@",type:"@",goto:"@"}}}).directive("notifications",function(){return{templateUrl:"shared/templates/directives/notifications.html",restrict:"E",replace:!0}}).directive("msgbox",function(){return{templateUrl:"shared/templates/directives/msgbox.html",restrict:"E",replace:!1}}).directive("alertBox",function($timeout){return{templateUrl:"shared/templates/directives/alert.html",restrict:"E",replace:!0,link:function($scope){$scope.$on("alertBox",function($event,data){$timeout(function(){delete$scope.alerts},5e3),$scope.alerts=[data]})}}}).directive("sidebarSearch",function(){return{templateUrl:"shared/templates/directives/sidebar-search.html",restrict:"E",replace:!0,scope:{},controller:function($scope){$scope.selectedMenu="home"}}}).directive("fileread",function($timeout){return{scope:{fileread:"="},link:function(scope,element,attributes){element.bind("change",function(changeEvent){varreader=newFileReader;reader.onload=function(loadEvent){scope.$apply(function(){scope.fileread=loadEvent.target.result}),$timeout(function(){scope.$parent.model[changeEvent.target.name]={file_name:changeEvent.target.files[0].name,file_content:scope.$parent.model[changeEvent.target.name]},document.querySelector("#image-preview").src=URL.createObjectURL(changeEvent.target.files[0])})},reader.readAsDataURL(changeEvent.target.files[0])})}}}).directive("timetableActionSelector",function($timeout){return$("html").on("click",function(e){vartarget=$(e.target);returntarget.parents().is(".action-selector")?voidtarget.parents(".action-selector").children(".popover").toggleClass("ng-hide"):target.hasClass("action-selector")?voidtarget.children(".popover").toggleClass("ng-hide"):void$(".course-prg-scheduler .action-selector>.popover").toggleClass("ng-hide",!0)}),{templateUrl:"shared/templates/directives/timetable-action-selector.html",scope:{externalModel:"=ngModel",onChange:"&ngChange"},link:function(iScope,iElem,iAttrs){varvalueToClassMap={1:"action-indicator_appropriate",2:"action-indicator_uncertain",3:"action-indicator_busy"};iAttrs.hasOwnProperty("readonly")&&iAttrs.$observe("readonly",function(v){v&&"false"==v&&(v=!1),iScope.readonly=v}),iScope.$watch("externalModel",function(value){iScope.value=valueToClassMap[value]}),iScope.setModelValue=function(value){varoldValue=iScope.externalModel;iScope.externalModel=value,$timeout(function(){iScope.onChange&&value!=oldValue&&iScope.onChange()})}}}}).directive("onEnterPressed",function(){return{link:function(scope,element,attrs){element.bind("keydown keypress",function(event){13!==event.which||event.ctrlKey||(scope.$apply(function(){scope.$eval(attrs.onEnterPressed)}),event.preventDefault())}),scope.$on("$destroy",function(){element.unbind("keydown keypress")})}}}).directive("onEscPressed",function(){return{link:function(scope,element,attrs){element.bind("keydown keypress",function(event){27===event.which&&(scope.$apply(function(){scope.$eval(attrs.onEscPressed)}),event.preventDefault())}),scope.$on("$destroy",function(){element.unbind("keydown keypress")})}}}),angular.module("ulakbus.auth",["ngRoute","ngCookies"]).controller("LoginController",function($scope,$q,$timeout,$location,$routeParams,$rootScope,$log,WSOps,Generator,AuthService){$scope.url="login",$scope.form_params={},$scope.form_params.clear_wf=1;try{WSOps.close()}catch(e){$log.error(e.message)}AuthService.get_form($scope).then(function(data){data.login&&$location.path("/"),$scope.form=[{key:"username",type:"string",title:"Kullanıcı Adı"},{key:"password",type:"password",title:"Şifre"},{type:"submit",title:"Giriş Yap"}]}),$scope.loggingIn=!1,$scope.onSubmit=function(form){$scope.$broadcast("schemaFormValidate"),form.$valid?($scope.loggingIn=!0,$rootScope.loginAttempt=1,Generator.button_switch(!1),AuthService.login($scope.url,$scope.model).success(function(data){$scope.message=data.title,$scope.loggingIn=!1}).error(function(data){$scope.message=data.title,$scope.loggingIn=!1}).then(function(){$scope.loggingIn=!1,Generator.button_switch(!0)})):$log.debug("not valid")},$log.debug("login attempt: ",$rootScope.loginAttempt)}),angular.module("ulakbus.auth").factory("AuthService",function($http,$rootScope,$location,$log,$route,Generator,RESTURL,WSOps){varauthService={};returnauthService.get_form=function(scope){return$http.post(Generator.makeUrl(scope),scope.form_params).success(function(data,status,headers,config){return"upgrade"===data.cmd?($rootScope.loggedInUser=!0,$rootScope.$broadcast("user_ready"),$rootScope.$broadcast("ws_turn_on"),$location.path("/dashboard")):"retry"!==data.cmd?(angular.isDefined(data.forms)&&"/login"!==$location.path()&&$location.path("/login"),Generator.generate(scope,data)):void$location.path("/login")})},authService.login=function(url,credentials){returncredentials.cmd="do",$http.post(RESTURL.url+url,credentials).success(function(data,status,headers,config){if(Generator.button_switch(!0),"upgrade"===data.cmd&&($rootScope.loggedInUser=!0,$rootScope.$broadcast("user_ready"),$rootScope.$broadcast("ws_turn_on"),$location.path("/dashboard")),403===data.status_code)returndata.title="İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz.",data}).error(function(data,status,headers,config){returndata.title="İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz.",data})},authService.logout=function(){$rootScope.loginAttempt=0,WSOps.request({wf:"logout"}).then(function(data){$rootScope.loggedInUser=!1,$rootScope.current_user=!0,$log.debug("loggedout"),$location.path("/login"),WSOps.close()})},authService.check_auth=function(){varpost_data={url:"login",form_params:{}};returnauthService.get_form(post_data)},authService}),angular.module("ulakbus.dashboard",[]).config(function($uibTooltipProvider){$uibTooltipProvider.setTriggers({click:"mouseleave"})}).controller("DashController",function($scope,$rootScope,$routeParams,$route,$timeout,$http,$cookies,RESTURL,Generator,WSOps){$rootScope.$broadcast("generate_dashboard"),$scope.section=function(section_index){$rootScope.section=section_index},$scope.$on("authz",function(event,data){$rootScope.searchInputs=data}),$scope.keyword={student:"",staff:""},$scope.students=[],$scope.staffs=[],$scope.search=function(where){($scope.keyword.staff.length>2||$scope.keyword.student.length>2)&&$timeout(function(){"personel"===where&&$scope.getItems(where,$scope.keyword.staff).then(function(data){$scope.staffs=data.results}),"ogrenci"===where&&$scope.getItems(where,$scope.keyword.student).then(function(data){$scope.students=data.results})},500)},$scope.getItems=function(where,what){return$scope.showResults=!0,WSOps.request({view:where+"_ara",query:what})},$scope.userPopover={templateUrl:"components/dashboard/user-info.html"},$scope.get_info=function(type,key){Generator.get_list({url:"crud",form_params:{wf:"crud",model:type,object_id:key,cmd:"show"}}).then(function(data){$scope.userPopover.name=data.object.Ad+" "+data.object.Soyad,$scope.userPopover.tcno=data.object["TC Kimlik No"],$scope.userPopover.image=data.object.Avatar||"img/sample-profile-pic.jpg"})},$scope.select=function(who,type){$rootScope.$broadcast("selectedUser",{name:who[0],tcno:who[1],key:who[2]}),$rootScope.$broadcast("menuitems",type),$scope.showResults=!1},$scope.$on("notifications",function(event,data){$scope.notifications=data}),$scope.$on("selectedUser",function($event,data){$scope.selectedUser=data}),$scope.deselectUser=function(){delete$scope.selectedUser,delete$scope.selectedMenuItems},$scope.markAsRead=function(items){$rootScope.$broadcast("markasread",items)}}),angular.module("ulakbus.crud",["schemaForm","ui.bootstrap","ulakbus.formService"]).config(function(sfErrorMessageProvider){sfErrorMessageProvider.setDefaultMessage(302,"Bu alan zorunludur."),sfErrorMessageProvider.setDefaultMessage(200,"En az {{schema.minLength}} değer giriniz."),sfErrorMessageProvider.setDefaultMessage(201,"En fazla {{schema.minLength}} değer giriniz.")}).service("CrudUtility",function($log,$rootScope){return{generateParam:function(scope,routeParams,cmd){returnscope.url=routeParams.wf,angular.forEach(routeParams,function(value,key){key.indexOf("_id")>-1&&"param_id"!==key&&(scope.param=key,scope.param_id=value)}),scope.form_params={model:routeParams.model,param:scope.param||routeParams.param,id:scope.param_id||routeParams.param_id,wf:routeParams.wf,object_id:routeParams.key,filters:{},token:routeParams.token},scope.param_id&&(scope.form_params.filters[scope.param]={values:[scope.param_id],type:"check"}),scope.model=scope.form_params.model,scope.wf=scope.form_params.wf,scope.param=scope.form_params.param,scope.param_id=scope.form_params.id,scope},listPageItems:function(scope,pageData){angular.forEach(pageData,function(value,key){scope[key]=value}),scope.meta.selective_listing===!0?angular.forEach(scope.objects,function(_v,_k){angular.forEach(_v.objects,function(value,key){if(_v.selected===!0&&(scope.selected_key=_k),key>0){varlinkIndexes={};angular.forEach(value.actions,function(v,k){"link"===v.show_as&&(linkIndexes=v)}),angular.forEach(value.fields,function(v,k){try{value.actions.length>0&&linkIndexes.fields?scope.objects[_k][key].fields[k]={type:linkIndexes.fields.indexOf(k)>-1?"link":"str",content:v,cmd:linkIndexes.cmd,mode:linkIndexes.mode}:scope.objects[_k].objects[key].fields[k]={type:"str",content:v}}catch(e){$log.error(e),scope.objects[_k].objects[key].fields[k]={type:"str",content:v}}})}})}):angular.forEach(scope.objects,function(value,key){if(key>0){varlinkIndexes={};angular.forEach(value.actions,function(v,k){"link"===v.show_as&&(linkIndexes=v)}),angular.forEach(value.fields,function(v,k){value.actions.length>0&&linkIndexes.fields?scope.objects[key].fields[k]={type:linkIndexes.fields.indexOf(k)>-1?"link":"str",content:v,cmd:linkIndexes.cmd,mode:linkIndexes.mode}:scope.objects[key].fields[k]={type:"str",content:v}})}}),$log.debug(scope.objects)}}}).controller("CRUDController",function($scope,$routeParams,$location,Generator,CrudUtility){return$location.url().indexOf("?=")>0?$location.url($location.url().replace("?=","")):(CrudUtility.generateParam($scope,$routeParams),voidGenerator.get_wf($scope))}).controller("CRUDListFormController",function($scope,$rootScope,$location,$sce,$http,$log,$uibModal,$timeout,Generator,$routeParams,CrudUtility){$scope.show_crud=!1,$scope.$on("$viewContentLoaded",function(){$timeout(function(){$scope.show_crud=!0},500)}),$scope.wf_step=$routeParams.step,$scope.paginate=function(reloadData){$scope.form_params.cmd=$scope.reload_cmd,$scope.form_params=angular.extend($scope.form_params,reloadData),$log.debug("reload data",$scope),Generator.get_wf($scope)},$scope.$on("reload_cmd",function(event,data){$scope.reload_cmd=data,$scope.reloadCmd()}),$scope.$on("updateObjects",function($event,data){$scope.objects=data,CrudUtility.listPageItems($scope,{objects:$scope.objects})}),$scope.$on("formLocator",function(event){$scope.formgenerated=event.targetScope.formgenerated}),$scope.remove=function(item,type,index){$scope[type][item.title].model.splice(index,1),$scope[type][item.title].items.splice(index,1)},$scope.onSubmit=function(form){$scope.$broadcast("schemaFormValidate"),form.$valid&&Generator.submit($scope)},$scope.do_action=function(key,todo){Generator.doItemAction($scope,key,todo,todo.mode||"normal")},$scope.getNumber=function(num){returnnewArray(num)},$scope.markdownWorkaround=function(value){returnvalue.replace("\n","<br>")},$scope.datepickerstatuses={},$scope.inline_datepicker_status=function(field){return$scope.datepickerstatuses[field]||!1},$scope.openDatepicker=function(field){$scope.datepickerstatuses[field]=!0},$scope.createListObjects=function(){$scope.object.constructor===Array?$log.debug("new type show object"):$scope.object.type?$scope.object=[$scope.object]:$scope.object=[{type:"table",fields:angular.copy($scope.object)}]},$scope.showCmd=function(){CrudUtility.generateParam($scope,$routeParams,$routeParams.cmd);varpageData=Generator.getPageData();pageData.pageData===!0?($scope.object=pageData.object,Generator.setPageData({pageData:!1})):Generator.get_wf($scope).then(function(res){$scope.object=res.data.object,$scope.model=$routeParams.model}),$scope.createListObjects()},$scope.update_selective_list=function(key){$scope.objects=key.objects},$scope.listFormCmd=function(){varsetpageobjects=function(data){CrudUtility.listPageItems($scope,data),Generator.generate($scope,data),Generator.setPageData({pageData:!1})},pageData=Generator.getPageData();pageData.pageData===!0&&($log.debug("pagedata",pageData.pageData),CrudUtility.generateParam($scope,pageData,$routeParams.cmd),setpageobjects(pageData,pageData),$scope.second_client_cmd&&$scope.createListObjects()),void0!==pageData.pageData&&pageData.pageData!==!1||(CrudUtility.generateParam($scope,$routeParams,$routeParams.cmd),Generator.get_wf($scope)),$scope.object&&$scope.createListObjects(),angular.isDefined($scope.meta.selective_listing)&&($scope.all_objects=angular.copy($scope.objects),$scope.selective_list_key=$scope.all_objects[$scope.selected_key],$scope.objects=$scope.selective_list_key.objects)},$scope.reloadCmd=function(){varpageData=Generator.getPageData();CrudUtility.generateParam($scope,pageData,$routeParams.cmd),$log.debug("reload data",$scope),Generator.get_wf($scope)},$scope.resetCmd=function(){varpageData=Generator.getPageData();CrudUtility.generateParam($scope,pageData,$routeParams.cmd),delete$scope.token,delete$scope.filters,delete$scope.cmd,Generator.get_wf($scope)};varexecuteCmd={show:$scope.showCmd,list:$scope.listFormCmd,form:$scope.listFormCmd,reload:$scope.reloadCmd,reset:$scope.resetCmd};returnexecuteCmd[$routeParams.cmd]()}).directive("crudListDirective",function(){return{templateUrl:"components/crud/templates/list.html",restrict:"E",replace:!0}}).directive("crudFormDirective",function(){return{templateUrl:"components/crud/templates/form.html",restrict:"E",replace:!0}}).directive("crudShowDirective",function(){return{templateUrl:"components/crud/templates/show.html",restrict:"E",replace:!0}}).directive("formLocator",function(){return{link:function(scope){scope.$emit("formLocator")}}}).directive("crudFilters",function(Generator){return{templateUrl:"components/crud/templates/filter.html",restrict:"E",replace:!0,link:function($scope){$scope.form_params.filters=$scope.form_params.filters||{},$scope.form_params.token=$scope.token,$scope.filterList={},$scope.filterCollapsed={},$scope.$watch("list_filters",function(){angular.forEach($scope.list_filters,function(value,key){$scope.filterList[value.field]={values:value.values||[],type:value.type},$scope.filterCollapsed[value.field]=Object.keys($scope.filterCollapsed).length>0})}),$scope.collapseFilter=function(field){$scope.filterCollapsed[field]=!$scope.filterCollapsed[field]},$scope.status={startOpened:!1,endOpened:!1},$scope.dateFilterOpen=function($event,which){this.status[which]=!0},$scope.format="dd.MM.yyyy",$scope.filterSubmit=function(){angular.forEach($scope.filterList,function(value,key){if(value.model)if("date"===value.type){vardateValues=[null,null];angular.forEach(value.model,function(v,k){dateValues[k]=Generator.dateformatter(v)}),$scope.form_params.filters[key]={values:dateValues,type:value.type}}else$scope.form_params.filters[key]={values:Object.keys(value.model),type:value.type||"check"}}),Generator.get_wf($scope)}}}}).controller("crudTimetableDirectiveCtrl",function($scope,WSOps,$q){functiongroupBy(list,propName){returnlist.reduce(function(acc,item){return(acc[item[propName]]=acc[item[propName]]||[]).push(item),acc},{})}$scope.groupBy=groupBy,$scope.get_wf=function(data){varfieldName=$scope.mainFieldName||"ogretim_elemani_zt";
returndata.token=$scope.token,data.wf=$scope.wf,WSOps.request(data).then(function(result){returnresult[fieldName]?result:(Generator.pathDecider(result.client_cmd||["list"],$scope,result),$q.reject())}).then(function(result){return$scope.message=result.notification,result[fieldName]})},$scope.prepareTimetable=function(timetable){vargrouped=groupBy(timetable,"saat");for(vardayingrouped)if(grouped.hasOwnProperty(day)){vardayItems=grouped[day];grouped[day]=dayItems.sort(function(a,b){returna.gun<b.gun?-1:1})}varacc=[];for(vartingrouped)grouped.hasOwnProperty(t)&&acc.push([t,grouped[t]]);returnacc.sort(function(a,b){returna[0]>b[0]?1:-1})}}).directive("crudTimetableDirective",function(){return{templateUrl:"components/crud/templates/timetable.html",restrict:"E",replace:!0,controller:"crudTimetableDirectiveCtrl",link:function(iScope,iElem,iAtrrs){functioninitLecturer(data){iScope.currentTable={key:data.oe_key,name:data.name,avatar_url:data.avatar_url,totalHours:data.toplam_ders_saati,readonly:data.readonly},iScope.timetable=iScope.prepareTimetable(data.uygunluk_durumu)}varmainFieldName="ogretim_elemani_zt";iScope.mainFieldName=mainFieldName,iScope.tablesList=iScope[mainFieldName].ogretim_elemanlari,iScope.widgetTitle="Öğretim Elemanı Zaman Tablosu",initLecturer(iScope[mainFieldName]),iScope.selectTable=function(lecturer){iScope.loadingTable=!0,iScope.get_wf({cmd:"personel_sec",secili_og_elemani:{key:lecturer.key}}).then(function(response){initLecturer(response)}).finally(function(){iScope.loadingTable=!1})},iScope.changeValue=function(time){iScope.loadingAction=!0,iScope.get_wf({cmd:"degistir",change:{key:time.key,durum:time.durum}}).then(function(table){for(vardays=table.uygunluk_durumu,i=0;i<days.length;i++)if(days[i].key==time.key){time.durum=days[i].durum;break}}).finally(function(){iScope.loadingAction=!1})}}}}).directive("crudTimetableDirective2",function(){return{templateUrl:"components/crud/templates/timetable.html",restrict:"E",replace:!0,controller:"crudTimetableDirectiveCtrl",link:function(iScope,iElem,iAtrrs){functioninitTable(data){iScope.currentTable={key:data.oe_key,name:data.name,avatar_url:data.avatar_url,readonly:data.readonly},iScope.timetable=iScope.prepareTimetable(data.zaman_plani)}varmainFieldName="derslik_zaman_tablosu";iScope.mainFieldName=mainFieldName,iScope.tablesList=iScope[mainFieldName].derslikler,iScope.widgetTitle="Derslik Zaman Tablosu",initTable(iScope[mainFieldName]),iScope.selectTable=function(table){iScope.loadingTable=!0,iScope.get_wf({cmd:"derslik_degistir",secili_derslik:{key:table.key}}).then(function(response){initTable(response)}).finally(function(){iScope.loadingTable=!1})},iScope.changeValue=function(time){iScope.loadingAction=!0,iScope.get_wf({cmd:"degistir",change:{key:time.key,durum:time.durum}}).then(function(table){for(vardays=table.uygunluk_durumu,i=0;i<days.length;i++)if(days[i].key==time.key){time.durum=days[i].durum;break}}).finally(function(){iScope.loadingAction=!1})}}}}),angular.module("ulakbus.crud").directive("quickAdd",function(Generator){return{templateUrl:"components/crud/templates/quick_add.html",restrict:"E",replace:!0,scope:{node:"="},controller:function($scope){$scope.kw="",$scope.getTitleMap=function(){return$scope.generateTitleMap($scope.kw)},$scope.generateTitleMap=function(kw){varsearchData={form_params:{view:$scope.node.quick_add_view,model:$scope.node.quick_add_model,query:kw}};returnangular.isDefined($scope.$parent.form_params.param)&&(searchData.form_params.id=$scope.$parent.form_params.id),Generator.get_list(searchData).then(function(res){vartitleMap=[];returnangular.forEach(res.objects,function(item){titleMap.push({value:item[0],name:item[1]})}),titleMap})},$scope.onSelect=function(item){varget_first_key=function(){returnObject.keys($scope.node.schema.properties)[0]},field=$scope.node.quick_add_field||get_first_key(),f={key:item.value};f[field]=item.name,angular.forEach($scope.node.items[0],function(value,key){angular.isDefined(f[key])||(f[key]=void0)});try{angular.forEach($scope.node.items,function(value,key){if(value.key===item.value)throwError()}),$scope.node.model.push(f),$scope.node.items.push(f)}catch(e){alert("bu öğe listede zaten mevcut!!")}}}}}),angular.module("ulakbus.debug",["ngRoute"]).controller("DebugController",function($scope,$rootScope,$location){$scope.debug_queries=$rootScope.debug_queries}),angular.module("ulakbus").factory("DevSettings",function($cookies){vardevSettings={};returndevSettings.settings={keepAlive:$cookies.get("keepAlive")||"on"},devSettings}),angular.module("ulakbus.devSettings",["ngRoute"]).controller("DevSettingsController",function($scope,$cookies,$rootScope,RESTURL,DevSettings){$scope.backendurl=$cookies.get("backendurl"),$scope.keepAlive=$cookies.get("keepAlive")||"on",$scope.changeSettings=function(what,set){document.cookie=what+"="+set,$scope[what]=set,$rootScope.$broadcast(what,set)},$scope.switchOnOff=function(pinn){return"on"==pinn?"off":"on"},$scope.setbackendurl=function(){$scope.changeSettings("backendurl",$scope.backendurl),RESTURL.url=$scope.backendurl},$scope.setKeepAlive=function(){$scope.changeSettings("keepAlive",$scope.switchOnOff($scope.keepAlive)),DevSettings.settings.keepAlive=$cookies.get("keepAlive")}}),angular.module("ulakbus").config(["$routeProvider",function($routeProvider){$routeProvider.when("/error/500",{templateUrl:"components/error_pages/500.html",controller:"500Controller"}).when("/error/404",{templateUrl:"components/error_pages/404.html",controller:"404Controller"})}]),angular.module("ulakbus.error_pages",["ngRoute"]).controller("500Controller",function($scope,$rootScope,$location){}).controller("404Controller",function($scope,$rootScope,$location){}),angular.module("ulakbus.version",["ulakbus.version.interpolate-filter","ulakbus.version.version-directive"]).value("version","0.1.1"),angular.module("ulakbus.version.interpolate-filter",[]).filter("interpolate",["version",function(version){returnfunction(text){returnString(text).replace(/\%VERSION\%/gm,version)}}]),angular.module("ulakbus.version.version-directive",[]).directive("appVersion",["version",function(version){returnfunction(scope,elm,attrs){elm.text(version)}}]),angular.module("ulakbus.messaging",["ui.bootstrap"]).factory("MessagingService",function($q,$timeout,$compile,$log,$rootScope,Moment,WSOps,Utils){functionwsReady(){vardeferred=$q.defer(),dismissWatcher=$rootScope.$watch("websocketIsOpen",function(isOpen){isOpen&&(dismissWatcher(),deferred.resolve())});returndeferred.promise}functionwsRequest(outgoing){returnwsReady().then(function(){returnWSOps.request(outgoing)})}functionprepareMessages(messages){for(vari=0;i<messages.length;i++){varmessage=messages[i];msg.prepareMessage(message)}}functionincreaseUnread(message,messageType){(messagingAppIsHidden||message.channel_key!=currentChannelKey)&&(message.is_update||checkIfInitialized().then(function(){varchannel=channelsMap[message.channel_key];channel&&(channel.unread+=1),unread[messageType].count+=1}))}functiondecreaseUnread(channel){if(channel=channelsMap[channel.key],channel&&channel.unread){varcounter;counter=channel.type==msg.CHANNEL_TYPE.NOTIFICATION?unread.notifications:unread.messages,counter.count-=channel.unread,counter.count<0&&(counter.count=0),channel.unread=0}}functioncheckIfInitialized(){returnchannelsLoader?channelsLoader:msg.list_channels()}varnotificationsChannelKey,channelsLoader,msg={},channelsMap={},groupedChannels={};msg.CHANNEL_TYPE={PUBLIC:15,DIRECT:10,NOTIFICATION:5},msg.SHOW_MESSAGING_WINDOW_EVENT="show_messaging_window";varcurrentChannelKey,unread={messages:{count:0},notifications:{count:0}},messagingAppIsHidden=!0;returnmsg.prepareMessage=function(message){if(message.timestamp){varts=message.timestamp.replace("Z","");message.moment=Moment(ts)}elsemessage.moment=Moment();returnmessage},msg.get_notifications_channel_key=function(){returncheckIfInitialized().then(function(){returnnotificationsChannelKey})},msg.get_unread_counters=function(){returnunread},msg.reset_state=function(){currentChannelKey=null,notificationsChannelKey=null,channelsMap={},groupedChannels={},unread.messages.count=0,unread.notifications.count=0,channelsLoader=!1},msg.toggle_messaging_window_visibility=function(visibility,resetState){messagingAppIsHidden=!visibility,resetState&&msg.reset_state()},msg.show_messaging_window=function(channelKey){$rootScope.$broadcast(msg.SHOW_MESSAGING_WINDOW_EVENT,channelKey)},msg.list_channels=function(){varoutgoing={view:"_zops_list_channels"};returnchannelsLoader=wsRequest(outgoing).then(function(data){varinitialGroups={};initialGroups[msg.CHANNEL_TYPE.PUBLIC]=[],initialGroups[msg.CHANNEL_TYPE.DIRECT]=[],initialGroups[msg.CHANNEL_TYPE.NOTIFICATION]=[],groupedChannels=Utils.groupBy(data.channels||[],"type",initialGroups);for(vari=0;i<data.channels.length;i++){varchannel=data.channels[i];channelsMap[channel.key]=channel}returnnotificationsChannelKey=groupedChannels[msg.CHANNEL_TYPE.NOTIFICATION][0].key,{grouped:groupedChannels,channelsMap:channelsMap}})},msg.search_user=function(query){varoutgoing={view:"_zops_search_user",query:query};returnwsRequest(outgoing).then(function(data){returndata.results})},msg.search_unit=function(query){varoutgoing={view:"_zops_search_unit",query:query};returnwsRequest(outgoing).then(function(data){returndata.results})},msg.create_direct_channel=function(key){varoutgoing={view:"_zops_create_direct_channel",user_key:key};returnwsRequest(outgoing).then(function(result){return$log.info("Create direct channel result: ",result),result})},msg.create_channel=function(name,desription){varoutgoing={view:"_zops_create_channel",name:name,description:desription};returnwsRequest(outgoing).then(function(result){return$log.info("Channel ",name,"created: ",result),result})},msg.add_members=function(channelKey,members,readOnly){varoutgoing={view:"_zops_add_members",channel_key:channelKey,read_only:!!readOnly,members:members};returnwsRequest(outgoing).then(function(result){return$log.info("Members ",members," added to channel ",channelKey,": ",result),result})},msg.add_unit_to_channel=function(channelKey,unitKey,readOnly){varoutgoing={view:"_zops_add_unit_to_channel",channel_key:channelKey,unit_key:unitKey,read_only:!!readOnly};returnwsRequest(outgoing).then(function(result){return$log.info("Unit ",unitKey," added to channel ",channelKey,": ",result),result})},msg.delete_channel=function(channelKey){varoutgoing={view:"_zops_delete_channel",channel_key:channelKey};returnwsRequest(outgoing).then(function(result){return$log.info("Channel ",channelKey," deleted: ",result),channelsMap[channelKey]&&(channelsMap[channelKey].deleted=!0),result})},msg.edit_channel=function(channelKey,name,desription){varoutgoing={view:"_zops_edit_channel",channel_key:channelKey,name:name,description:desription};returnwsRequest(outgoing).then(function(result){return$log.info("Channel ",channelKey," edited: ",outgoing,result),result})},msg.pin_channel=function(channelKey){varoutgoing={view:"_zops_pin_channel",channel_key:channelKey};returnwsRequest(outgoing).then(function(result){return$log.info("Channel ",channelKey," pinned: ",result),result})},msg.show_channel=function(channelKey){varoutgoing={view:"_zops_show_channel",key:channelKey};returnwsRequest(outgoing).then(function(result){return$log.info("Show channel ",channelKey,": ",result),decreaseUnread(result),currentChannelKey=result.key,prepareMessages(result.last_messages),result})},msg.channel_history=function(channelKey,lastMessageTimestamp){varoutgoing={view:"_zops_channel_history",channel_key:channelKey,timestamp:lastMessageTimestamp};returnwsRequest(outgoing).then(function(result){return$log.info("Load channel ",channelKey,"history: ",result),prepareMessages(result.messages),result})},msg.get_unread_messages_count=function(){varoutgoing={view:"_zops_unread_count"};returnwsRequest(outgoing).then(function(result){return$log.info("Get unread messages count: ",result),unread.messages.count=result.messages,unread.notifications.count=result.notifications,result})},msg.report_last_seen_message=function(channelKey,msgKey,timestamp){varoutgoing={view:"_zops_report_last_seen_message",channel_key:channelKey,msg_key:msgKey,timestamp:timestamp};returnwsRequest(outgoing).then(function(result){return$log.info("Report last seen message ",channelKey,msgKey,timestamp,": ",result),result})},msg.create_message=function(channelKey,msgType,body,attachments){varoutgoing={view:"_zops_create_message",message:{channel:channelKey,type:msgType,title:"",receiver:"",body:body,attachments:attachments}};returnwsRequest(outgoing).then(function(result){return$log.info("Message sent: ",result),result})},msg.find_message=function(channelKey,query,pageNumber){varoutgoing={view:"_zops_search_find_message",channel_key:channelKey,query:query,page:pageNumber};returnwsRequest(outgoing).then(function(result){return$log.info("Find message: ",result),result})},msg.delete_message=function(msgKey){varoutgoing={view:"_zops_delete_message",key:msgKey};returnwsRequest(outgoing).then(function(result){return$log.info("Delete message ",msgKey,":",result),result})},msg.edit_message=function(msgKey,body){varoutgoing={view:"_zops_edit_message",message:{key:msgKey,body:body}};returnwsRequest(outgoing).then(function(result){return$log.info("Edit message",msgKey,":",result),result})},msg.flag_message=function(msgKey,flag){varoutgoing={view:"_zops_flag_message",key:msgKey,flag:flag};returnwsRequest(outgoing).then(function(result){return$log.info("Flag message ",msgKey,flag,":",result),result})},msg.get_message_actions=function(msgKey){varoutgoing={view:"_zops_get_message_actions",key:msgKey};returnwsRequest(outgoing).then(function(result){return$log.info("Get message actions",msgKey,":",result),result})},msg.add_to_favorites=function(msgKey){varoutgoing={view:"_zops_add_to_favorites",key:msgKey};returnwsRequest(outgoing).then(function(result){return$log.info("Add message ",msgKey," to favorites: ",result),result})},msg.remove_from_favorites=function(msgKey){varoutgoing={view:"_zops_remove_to_favorites",key:msgKey};returnwsRequest(outgoing).then(function(result){return$log.info("Remove message ",msgKey," from favorites: ",result),result})},msg.list_favorites=function(channelKey){varoutgoing={view:"_zops_list_favorites",channel_key:channelKey};returnwsRequest(outgoing).then(function(result){return$log.info("List favorites for channel",channelKey,": ",result),result})},$rootScope.$on("message",function(e,message){increaseUnread(message,"messages")}),$rootScope.$on("notifications",function(e,message){increaseUnread(message,"notifications")}),$rootScope.$on("channel_change",function(e,action,channel){checkIfInitialized().then(function(){if("add"==action){vargroup=groupedChannels[channel.type];returnchannelsMap[channel.key]||(channelsMap[channel.key]=channel),group.push(channel)}if("status"==action){varlocalChannel=channelsMap[channel.channel_key];localChannel&&(localChannel.is_online=channel.is_online)}})}),$rootScope.$watch("loggedInUser",function(value){value||msg.reset_state()}),$rootScope.$on("user_ready",function(){msg.get_unread_messages_count()}),msg}).service("MessagingPopup",function($q,$compile,$http,$rootScope){functioncompile(template,config){varoriginalContent,element,resultDeferred=$q.defer(),scope=config.scope||$rootScope.$new(!0),rootElement=config.rootElement;returnconfig.inplaceEditor&&(originalContent=rootElement.text(),scope.content=originalContent),scope.done=function(result){resultDeferred.resolve.apply(this,arguments)},scope.cancel=function(){resultDeferred.reject.apply(this,arguments)},config.link&&config.link(scope),element=$compile(template)(scope),rootElement.empty(),rootElement.append(element),resultDeferred.promise._done=scope.done,resultDeferred.promise._cancel=scope.cancel,resultDeferred.promise.finally(function(){config.inplaceEditor?rootElement.text(scope.content):rootElement.empty(),scope.$destroy()})}this.show=function(config){returnconfig.templateUrl?$http({method:"GET",url:config.templateUrl,cache:!0}).then(function(result){returncompile(result.data,config)}):compile(config.template,config)}}),angular.module("ulakbus.messaging").directive("messaging",function(Generator,MessagingService,$log,$rootScope,MessagingPopup,Utils,$q,$timeout){functiongetKey(channel){if(channel){if(!angular.isObject(channel))returnchannel;varchannelKey=channel.channel_key;return!channelKey&&channel.hasOwnProperty("key")&&(channelKey=channel.key),channelKey}}functionsearchWrapper(scope,promiseWrapper){scope.loading=!0,scope.searchResult=[],promiseWrapper().then(function(result){scope.searchResult=result}).finally(function(){scope.loading=!1})}return{templateUrl:"components/messaging/templates/index.html",restrict:"E",scope:{},link:function(iScope,iElem,iAttrs){functionreset(){iScope.selectedChannel=null,iScope.allMessagesLoaded=!1,iScope.publicChannels=[],iScope.notificationsChannel=[],iScope.directChannels=[]}functioneditChannelPopup(channel){returnMessagingPopup.show({templateUrl:"components/messaging/templates/create_channel.html",rootElement:popupRootElement,link:function(scope){scope.channel=channel||{},scope.title="Kanalı düzenle",scope.actionTitle="Düzenle",channel||(scope.title="Yeni Kanal Oluştur",scope.actionTitle="Oluştur")}})}functiongetMessageElementByKey(key){return$("#msg-"+key)}functionupdateLastMessage(message){if(!message&&iScope.selectedChannel&&iScope.selectedChannel.messages.length>0){varlast=iScope.selectedChannel.messages.length-1;returniScope.lastMessage=iScope.selectedChannel.messages[last]}returniScope.lastMessage=message}functionappendMessage(channel,message){channel&&getKey(message)==getKey(channel)&&channel.messages&&channel.messages.push(message),updateLastMessage(message),reportLastSeenMessage()}functionupdateMessage(message){if(message.channel_key==getKey(iScope.selectedChannel)){varstoredMessage=Utils.findWhere(iScope.selectedChannel.messages,{key:message.key});if(storedMessage){angular.extend(storedMessage,message);varmsgElement=getMessageElementByKey(message.key);msgElement&&msgElement.text(message.content)}}}functionupdateAndSelect(channelKey){returnchannelKey=getKey(channelKey),iScope.updateChannelsList().then(function(){returniScope.selectChannel(channelKey)})}functiondeleteMessageLocally(messageKey){iScope.selectedChannel&&Utils.deleteWhere(iScope.selectedChannel.messages,{key:messageKey})}functionreportLastSeenMessage(){if(iScope.lastMessage&&iScope.selectedChannel){varts=iScope.lastMessage.moment.format("YYYY-MM-DDTHH:mm:ss");MessagingService.report_last_seen_message(getKey(iScope.selectedChannel),iScope.lastMessage.key,ts)}}functionselectChannel(channelKey,silent){returnsilent||(iScope.loadingChannel=!0),MessagingService.show_channel(channelKey).finally(function(){iScope.loadingChannel=!1})}iScope.chatAppIsHidden=!0,$rootScope.$watch("loggedInUser",function(v){iScope.loggedIn=v,reset()}),iScope.shared={};varpopupRootElement=$(iElem).find(".popup-placeholder");iScope.deleteConfirmation=function(title){returnMessagingPopup.show({templateUrl:"components/messaging/templates/delete_confirmation.html",link:function(scope){scope.title=title||"Silmek istediğinize emin misiniz?"},rootElement:popupRootElement})},iScope.updateChannelsList=function(){returnMessagingService.list_channels().then(function(channels){vargroupedChannels=channels.grouped;iScope.publicChannels=groupedChannels[MessagingService.CHANNEL_TYPE.PUBLIC],iScope.notificationsChannel=groupedChannels[MessagingService.CHANNEL_TYPE.NOTIFICATION][0],iScope.directChannels=groupedChannels[MessagingService.CHANNEL_TYPE.DIRECT]})},iScope.createDirectChannel=function(user){varkey=user[1];MessagingService.create_direct_channel(key).then(function(result){updateAndSelect(getKey(result))})},iScope.hideApp=function(){iScope.chatAppIsHidden=!0,MessagingService.toggle_messaging_window_visibility(!1)},iScope.showApp=function(){returniScope.chatAppIsHidden=!1,MessagingService.toggle_messaging_window_visibility(!0),iScope.updateChannelsList()},iScope.searchUser=function(){MessagingPopup.show({templateUrl:"components/messaging/templates/search_user.html",rootElement:popupRootElement,link:function(scope){scope.onChange=function(query){searchWrapper(scope,function(){returnMessagingService.search_user(query)})},scope.onChange("")}}).then(function(user){returniScope.createDirectChannel(user)})},iScope.createChannel=function(){returneditChannelPopup().then(function(channel){returnMessagingService.create_channel(channel.name,channel.description||"").then(function(newChannel){updateAndSelect(newChannel)})})},iScope.applyChannelAction=function(channel,action){varactionView=action[1];switch(actionView){case"_zops_pin_channel":MessagingService.pin_channel(getKey(channel));break;case"_zops_delete_channel":iScope.deleteConfirmation("Kanalı silmek istediğinize emin misiniz?").then(function(){MessagingService.delete_channel(getKey(channel)).then(function(){iScope.selectedChannel=null})});break;case"_zops_edit_channel":editChannelPopup(channel).then(function(channelData){returnMessagingService.edit_channel(getKey(channelData),channelData.name,channelData.description||"")});break;case"_zops_add_members":MessagingPopup.show({templateUrl:"components/messaging/templates/add_user_unit.html",rootElement:popupRootElement,link:function(scope){scope.title="Kanala kullanıcı ekle",scope.placeholder="Eklemek için kullanıcı ara",scope.onChange=function(query){searchWrapper(scope,function(){returnMessagingService.search_user(query)})},scope.onChange("")}}).then(function(user){varuserKey=user.key,channelKey=getKey(channel);returnMessagingService.add_members(channelKey,[userKey],user.readonly)});break;case"_zops_add_unit_to_channel":MessagingPopup.show({templateUrl:"components/messaging/templates/add_user_unit.html",rootElement:popupRootElement,link:function(scope){scope.title="Birim Ekle",scope.placeholder="Kanala eklemek için birim ara",scope.onChange=function(query){searchWrapper(scope,function(){returnMessagingService.search_unit(query)})},scope.onChange("")}}).then(function(unit){varunitKey=unit.key,channelKey=getKey(channel);returnMessagingService.add_members(channelKey,unitKey,unit.readonly)})}},iScope.selectChannel=function(channel,silent){iScope.allMessagesLoaded=!1;varchannelKey=getKey(channel);selectChannel(channelKey,silent).then(function(result){iScope.selectedChannel=result,iScope.selectedChannel.read_only=channel.read_only,iScope.selectedChannel.messages=result.last_messages,iScope.selectedChannel.messages.length<15&&(iScope.allMessagesLoaded=!0),updateLastMessage(channel.messages),reportLastSeenMessage()})},iScope.isChannelSelected=function(channel){returniScope.selectedChannel&&getKey(channel)==getKey(iScope.selectedChannel)},iScope.sendMessage=function(content){if(content){varchannelKey=getKey(iScope.selectedChannel),msgType=iScope.selectedChannel.type==MessagingService.CHANNEL_TYPE.DIRECT?2:4;MessagingService.create_message(channelKey,msgType,content).then(function(){iScope.shared.message=""})}},iScope.applyMessageAction=function(message,action){varactionView=action[1];switch(actionView){case"_zops_favorite_message":MessagingService.add_to_favorites(message.key).then(function(){message.actions=null});break;case"_zops_flag_message":MessagingService.flag_message(message.key,!0).then(function(){message.actions=null});break;case"_zops_unflag_message":MessagingService.flag_message(message.key,!1).then(function(){message.actions=null});break;case"_zops_delete_message":iScope.deleteConfirmation("Mesajı silmek istediğinize emin misiniz?").then(function(){returnMessagingService.delete_message(message.key).then(function(){deleteMessageLocally(message.key)})});break;case"_zops_edit_message":varmessageContainer=getMessageElementByKey(message.key);MessagingPopup.show({templateUrl:"components/messaging/templates/edit_message.html",rootElement:messageContainer,inplaceEditor:!0,link:function(scope){scope.internalContent=scope.content,scope.save=function(){returnscope.internalContent?voidMessagingService.edit_message(message.key,scope.internalContent).then(function(){scope.content=scope.internalContent,scope.done()}):iScope.applyMessageAction(message,["_","_zops_delete_message"])}}})}},iScope.getMessageActions=function(message){message.actions||MessagingService.get_message_actions(message.key).then(function(result){message.actions=result.actions})},iScope.loadMore=function(){if(!iScope.allMessagesLoaded&&iScope.selectedChannel.messages.length>0){varfirst=iScope.selectedChannel.messages[0];returnMessagingService.channel_history(getKey(iScope.selectedChannel),first.timestamp).then(function(result){varmessages=iScope.selectedChannel.messages;return0==result.messages.length?void(iScope.allMessagesLoaded=!0):(messages.unshift.apply(messages,result.messages),!0)})}},$rootScope.$on("message",function(e,message){message.is_update?updateMessage(message):appendMessage(iScope.selectedChannel,MessagingService.prepareMessage(message))}),$rootScope.$on("notifications",function(e,notification){appendMessage(iScope.selectedChannel,MessagingService.prepareMessage(notification))}),$rootScope.$on("user_ready",function(){reset(),iScope.hideApp()}),$rootScope.$on(MessagingService.SHOW_MESSAGING_WINDOW_EVENT,function(e,channelKey){varshowApp=$q.when();iScope.chatAppIsHidden&&(showApp=iScope.showApp()),channelKey&&channelKey!=getKey(iScope.selectedChannel)&&showApp.then(function(){iScope.selectChannel(channelKey)})})}}}).filter("fromNow",function(Moment){returnfunction(datetime){returnMoment(datetime).fromNow()}}).directive("scrollDownWhenUpdate",function($timeout){return{link:function(iScope,iElem,iAttrs){varelem=$(iElem);iAttrs.$observe("scrollDownWhenUpdate",function(value){value&&$timeout(function(){elem.scrollTop(elem[0].scrollHeight)},0)})}}}).directive("loadMoreTop",function($compile,$timeout,$q){varloaderTpl=$compile('<div class="loader" style="float: none; margin: auto; margin-top: 10px;" ng-show="loading"></div>');return{scope:{loadMoreCallback:"&loadMoreTop"},link:function(iScope,iElem,iAttrs){functiononScroll(){varscrollTop=elem.scrollTop();if(scrollTop<=0&&!iScope.loading&&iScope.loadMoreCallback){varid=elem.find("[id]").first().attr("id");$timeout(function(){iScope.loading=!0}),$q.when(iScope.loadMoreCallback()).finally(function(loaded){$timeout(function(){if(iScope.loading=!1,loaded){varlastTopElem=elem.find("#"+id);if(lastTopElem){vartop=lastTopElem.offset().top-elem.offset().top-100;elem.scrollTop(top)}}})})}}varelem=$(iElem);iElem.prepend(angular.element(loaderTpl(iScope))),iScope.loading=!1,elem.scroll(onScroll)}}}).directive("contenteditable",function(){return{require:"?ngModel",scope:{},link:function(iScope,iElem,iAttrs,ngModel){functionread(){varhtml=iElem.text();ngModel.$setViewValue(html)}ngModel&&(ngModel.$render=function(){iElem.text(ngModel.$viewValue||"")},iElem.on("blur keyup change",function(){iScope.$evalAsync(read)}),iScope.$on("$destroy",function(){iElem.off("blur keyup change")}))}}}).directive("autoFocus",function($timeout){functionplaceCaretAtEnd(el){if(el.focus(),"undefined"!=typeofwindow.getSelection&&"undefined"!=typeofdocument.createRange){varrange=document.createRange();range.selectNodeContents(el),range.collapse(!1);varsel=window.getSelection();sel.removeAllRanges(),sel.addRange(range)}elseif("undefined"!=typeofdocument.body.createTextRange){vartextRange=document.body.createTextRange();textRange.moveToElementText(el),textRange.collapse(!1),textRange.select()}}return{link:function(iScope,iElem){$timeout(function(){placeCaretAtEnd(iElem[0])},500)}}});
height:"0"}}).then(collapseDone))):collapseDone()}function collapseDone(){element.css({height:"0"}),element.removeClass("collapsing").addClass("collapse")}scope.$watch(attrs.uibCollapse,function(shouldCollapse){shouldCollapse?collapse():expand()})}}}]),angular.module("ui.bootstrap.collapse").value("$collapseSuppressWarning",!1).directive("collapse",["$animate","$injector","$log","$collapseSuppressWarning",function($animate,$injector,$log,$collapseSuppressWarning){var $animateCss=$injector.has("$animateCss")?$injector.get("$animateCss"):null;return{link:function(scope,element,attrs){function expand(){element.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),$animateCss?$animateCss(element,{easing:"ease",to:{height:element[0].scrollHeight+"px"}}).start().done(expandDone):$animate.animate(element,{},{height:element[0].scrollHeight+"px"}).then(expandDone)}function expandDone(){element.removeClass("collapsing").addClass("collapse in").css({height:"auto"})}function collapse(){return element.hasClass("collapse")||element.hasClass("in")?(element.css({height:element[0].scrollHeight+"px"}).removeClass("collapse in").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),void($animateCss?$animateCss(element,{to:{height:"0"}}).start().done(collapseDone):$animate.animate(element,{},{height:"0"}).then(collapseDone))):collapseDone()}function collapseDone(){element.css({height:"0"}),element.removeClass("collapsing").addClass("collapse")}$collapseSuppressWarning||$log.warn("collapse is now deprecated. Use uib-collapse instead."),scope.$watch(attrs.collapse,function(shouldCollapse){shouldCollapse?collapse():expand()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("uibAccordionConfig",{closeOthers:!0}).controller("UibAccordionController",["$scope","$attrs","uibAccordionConfig",function($scope,$attrs,accordionConfig){this.groups=[],this.closeOthers=function(openGroup){var closeOthers=angular.isDefined($attrs.closeOthers)?$scope.$eval($attrs.closeOthers):accordionConfig.closeOthers;closeOthers&&angular.forEach(this.groups,function(group){group!==openGroup&&(group.isOpen=!1)})},this.addGroup=function(groupScope){var that=this;this.groups.push(groupScope),groupScope.$on("$destroy",function(event){that.removeGroup(groupScope)})},this.removeGroup=function(group){var index=this.groups.indexOf(group);index!==-1&&this.groups.splice(index,1)}}]).directive("uibAccordion",function(){return{controller:"UibAccordionController",controllerAs:"accordion",transclude:!0,templateUrl:function(element,attrs){return attrs.templateUrl||"template/accordion/accordion.html"}}}).directive("uibAccordionGroup",function(){return{require:"^uibAccordion",transclude:!0,replace:!0,templateUrl:function(element,attrs){return attrs.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(element){this.heading=element}},link:function(scope,element,attrs,accordionCtrl){accordionCtrl.addGroup(scope),scope.openClass=attrs.openClass||"panel-open",scope.panelClass=attrs.panelClass,scope.$watch("isOpen",function(value){element.toggleClass(scope.openClass,!!value),value&&accordionCtrl.closeOthers(scope)}),scope.toggleOpen=function($event){scope.isDisabled||$event&&32!==$event.which||(scope.isOpen=!scope.isOpen)}}}}).directive("uibAccordionHeading",function(){return{transclude:!0,template:"",replace:!0,require:"^uibAccordionGroup",link:function(scope,element,attrs,accordionGroupCtrl,transclude){accordionGroupCtrl.setHeading(transclude(scope,angular.noop))}}}).directive("uibAccordionTransclude",function(){return{require:["?^uibAccordionGroup","?^accordionGroup"],link:function(scope,element,attrs,controller){controller=controller[0]?controller[0]:controller[1],scope.$watch(function(){return controller[attrs.uibAccordionTransclude]},function(heading){heading&&(element.find("span").html(""),element.find("span").append(heading))})}}}),angular.module("ui.bootstrap.accordion").value("$accordionSuppressWarning",!1).controller("AccordionController",["$scope","$attrs","$controller","$log","$accordionSuppressWarning",function($scope,$attrs,$controller,$log,$accordionSuppressWarning){$accordionSuppressWarning||$log.warn("AccordionController is now deprecated. Use UibAccordionController instead."),angular.extend(this,$controller("UibAccordionController",{$scope:$scope,$attrs:$attrs}))}]).directive("accordion",["$log","$accordionSuppressWarning",function($log,$accordionSuppressWarning){return{restrict:"EA",controller:"AccordionController",controllerAs:"accordion",transclude:!0,replace:!1,templateUrl:function(element,attrs){return attrs.templateUrl||"template/accordion/accordion.html"},link:function(){$accordionSuppressWarning||$log.warn("accordion is now deprecated. Use uib-accordion instead.")}}}]).directive("accordionGroup",["$log","$accordionSuppressWarning",function($log,$accordionSuppressWarning){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(element,attrs){return attrs.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(element){this.heading=element}},link:function(scope,element,attrs,accordionCtrl){$accordionSuppressWarning||$log.warn("accordion-group is now deprecated. Use uib-accordion-group instead."),accordionCtrl.addGroup(scope),scope.openClass=attrs.openClass||"panel-open",scope.panelClass=attrs.panelClass,scope.$watch("isOpen",function(value){element.toggleClass(scope.openClass,!!value),value&&accordionCtrl.closeOthers(scope)}),scope.toggleOpen=function($event){scope.isDisabled||$event&&32!==$event.which||(scope.isOpen=!scope.isOpen)}}}}]).directive("accordionHeading",["$log","$accordionSuppressWarning",function($log,$accordionSuppressWarning){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(scope,element,attr,accordionGroupCtrl,transclude){$accordionSuppressWarning||$log.warn("accordion-heading is now deprecated. Use uib-accordion-heading instead."),accordionGroupCtrl.setHeading(transclude(scope,angular.noop))}}}]).directive("accordionTransclude",["$log","$accordionSuppressWarning",function($log,$accordionSuppressWarning){return{require:"^accordionGroup",link:function(scope,element,attr,controller){$accordionSuppressWarning||$log.warn("accordion-transclude is now deprecated. Use uib-accordion-transclude instead."),scope.$watch(function(){return controller[attr.accordionTransclude]},function(heading){heading&&(element.find("span").html(""),element.find("span").append(heading))})}}}]),angular.module("ui.bootstrap.alert",[]).controller("UibAlertController",["$scope","$attrs","$interpolate","$timeout",function($scope,$attrs,$interpolate,$timeout){$scope.closeable=!!$attrs.close;var dismissOnTimeout=angular.isDefined($attrs.dismissOnTimeout)?$interpolate($attrs.dismissOnTimeout)($scope.$parent):null;dismissOnTimeout&&$timeout(function(){$scope.close()},parseInt(dismissOnTimeout,10))}]).directive("uibAlert",function(){return{controller:"UibAlertController",controllerAs:"alert",templateUrl:function(element,attrs){return attrs.templateUrl||"template/alert/alert.html"},transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}),angular.module("ui.bootstrap.alert").value("$alertSuppressWarning",!1).controller("AlertController",["$scope","$attrs","$controller","$log","$alertSuppressWarning",function($scope,$attrs,$controller,$log,$alertSuppressWarning){$alertSuppressWarning||$log.warn("AlertController is now deprecated. Use UibAlertController instead."),angular.extend(this,$controller("UibAlertController",{$scope:$scope,$attrs:$attrs}))}]).directive("alert",["$log","$alertSuppressWarning",function($log,$alertSuppressWarning){return{controller:"AlertController",controllerAs:"alert",templateUrl:function(element,attrs){return attrs.templateUrl||"template/alert/alert.html"},transclude:!0,replace:!0,scope:{type:"@",close:"&"},link:function(){$alertSuppressWarning||$log.warn("alert is now deprecated. Use uib-alert instead.")}}}]),angular.module("ui.bootstrap.buttons",[]).constant("uibButtonConfig",{activeClass:"active",toggleEvent:"click"}).controller("UibButtonsController",["uibButtonConfig",function(buttonConfig){this.activeClass=buttonConfig.activeClass||"active",this.toggleEvent=buttonConfig.toggleEvent||"click"}]).directive("uibBtnRadio",function(){return{require:["uibBtnRadio","ngModel"],controller:"UibButtonsController",controllerAs:"buttons",link:function(scope,element,attrs,ctrls){var buttonsCtrl=ctrls[0],ngModelCtrl=ctrls[1];element.find("input").css({display:"none"}),ngModelCtrl.$render=function(){element.toggleClass(buttonsCtrl.activeClass,angular.equals(ngModelCtrl.$modelValue,scope.$eval(attrs.uibBtnRadio)))},element.on(buttonsCtrl.toggleEvent,function(){if(!attrs.disabled){var isActive=element.hasClass(buttonsCtrl.activeClass);isActive&&!angular.isDefined(attrs.uncheckable)||scope.$apply(function(){ngModelCtrl.$setViewValue(isActive?null:scope.$eval(attrs.uibBtnRadio)),ngModelCtrl.$render()})}})}}}).directive("uibBtnCheckbox",function(){return{require:["uibBtnCheckbox","ngModel"],controller:"UibButtonsController",controllerAs:"button",link:function(scope,element,attrs,ctrls){function getTrueValue(){return getCheckboxValue(attrs.btnCheckboxTrue,!0)}function getFalseValue(){return getCheckboxValue(attrs.btnCheckboxFalse,!1)}function getCheckboxValue(attribute,defaultValue){return angular.isDefined(attribute)?scope.$eval(attribute):defaultValue}var buttonsCtrl=ctrls[0],ngModelCtrl=ctrls[1];element.find("input").css({display:"none"}),ngModelCtrl.$render=function(){element.toggleClass(buttonsCtrl.activeClass,angular.equals(ngModelCtrl.$modelValue,getTrueValue()))},element.on(buttonsCtrl.toggleEvent,function(){attrs.disabled||scope.$apply(function(){ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass)?getFalseValue():getTrueValue()),ngModelCtrl.$render()})})}}}),angular.module("ui.bootstrap.buttons").value("$buttonsSuppressWarning",!1).controller("ButtonsController",["$controller","$log","$buttonsSuppressWarning",function($controller,$log,$buttonsSuppressWarning){$buttonsSuppressWarning||$log.warn("ButtonsController is now deprecated. Use UibButtonsController instead."),angular.extend(this,$controller("UibButtonsController"))}]).directive("btnRadio",["$log","$buttonsSuppressWarning",function($log,$buttonsSuppressWarning){return{require:["btnRadio","ngModel"],controller:"ButtonsController",controllerAs:"buttons",link:function(scope,element,attrs,ctrls){$buttonsSuppressWarning||$log.warn("btn-radio is now deprecated. Use uib-btn-radio instead.");var buttonsCtrl=ctrls[0],ngModelCtrl=ctrls[1];element.find("input").css({display:"none"}),ngModelCtrl.$render=function(){element.toggleClass(buttonsCtrl.activeClass,angular.equals(ngModelCtrl.$modelValue,scope.$eval(attrs.btnRadio)))},element.bind(buttonsCtrl.toggleEvent,function(){if(!attrs.disabled){var isActive=element.hasClass(buttonsCtrl.activeClass);isActive&&!angular.isDefined(attrs.uncheckable)||scope.$apply(function(){ngModelCtrl.$setViewValue(isActive?null:scope.$eval(attrs.btnRadio)),ngModelCtrl.$render()})}})}}}]).directive("btnCheckbox",["$document","$log","$buttonsSuppressWarning",function($document,$log,$buttonsSuppressWarning){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",controllerAs:"button",link:function(scope,element,attrs,ctrls){function getTrueValue(){return getCheckboxValue(attrs.btnCheckboxTrue,!0)}function getFalseValue(){return getCheckboxValue(attrs.btnCheckboxFalse,!1)}function getCheckboxValue(attributeValue,defaultValue){var val=scope.$eval(attributeValue);return angular.isDefined(val)?val:defaultValue}$buttonsSuppressWarning||$log.warn("btn-checkbox is now deprecated. Use uib-btn-checkbox instead.");var buttonsCtrl=ctrls[0],ngModelCtrl=ctrls[1];element.find("input").css({display:"none"}),ngModelCtrl.$render=function(){element.toggleClass(buttonsCtrl.activeClass,angular.equals(ngModelCtrl.$modelValue,getTrueValue()))},element.bind(buttonsCtrl.toggleEvent,function(){attrs.disabled||scope.$apply(function(){ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass)?getFalseValue():getTrueValue()),ngModelCtrl.$render()})}),element.on("keypress",function(e){attrs.disabled||32!==e.which||$document[0].activeElement!==element[0]||scope.$apply(function(){ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass)?getFalseValue():getTrueValue()),ngModelCtrl.$render()})})}}}]),angular.module("ui.bootstrap.carousel",[]).controller("UibCarouselController",["$scope","$element","$interval","$animate",function($scope,$element,$interval,$animate){function goNext(slide,index,direction){destroyed||(angular.extend(slide,{direction:direction,active:!0}),angular.extend(self.currentSlide||{},{direction:direction,active:!1}),$animate.enabled()&&!$scope.noTransition&&!$scope.$currentTransition&&slide.$element&&self.slides.length>1&&(slide.$element.data(SLIDE_DIRECTION,slide.direction),self.currentSlide&&self.currentSlide.$element&&self.currentSlide.$element.data(SLIDE_DIRECTION,slide.direction),$scope.$currentTransition=!0,NEW_ANIMATE?$animate.on("addClass",slide.$element,function(element,phase){"close"===phase&&($scope.$currentTransition=null,$animate.off("addClass",element))}):slide.$element.one("$animate:close",function(){$scope.$currentTransition=null})),self.currentSlide=slide,currentIndex=index,restartTimer())}function getSlideByIndex(index){if(angular.isUndefined(slides[index].index))return slides[index];var i;slides.length;for(i=0;i<slides.length;++i)if(slides[i].index==index)return slides[i]}function restartTimer(){resetTimer();var interval=+$scope.interval;!isNaN(interval)&&interval>0&&(currentInterval=$interval(timerFn,interval))}function resetTimer(){currentInterval&&($interval.cancel(currentInterval),currentInterval=null)}function timerFn(){var interval=+$scope.interval;isPlaying&&!isNaN(interval)&&interval>0&&slides.length?$scope.next():$scope.pause()}function resetTransition(slides){slides.length||($scope.$currentTransition=null)}var currentInterval,isPlaying,self=this,slides=self.slides=$scope.slides=[],NEW_ANIMATE=angular.version.minor>=4,NO_TRANSITION="uib-noTransition",SLIDE_DIRECTION="uib-slideDirection",currentIndex=-1;self.currentSlide=null;var destroyed=!1;self.select=$scope.select=function(nextSlide,direction){var nextIndex=$scope.indexOfSlide(nextSlide);void 0===direction&&(direction=nextIndex>self.getCurrentIndex()?"next":"prev"),nextSlide&&nextSlide!==self.currentSlide&&!$scope.$currentTransition&&goNext(nextSlide,nextIndex,direction)},$scope.$on("$destroy",function(){destroyed=!0}),self.getCurrentIndex=function(){return self.currentSlide&&angular.isDefined(self.currentSlide.index)?+self.currentSlide.index:currentIndex},$scope.indexOfSlide=function(slide){return angular.isDefined(slide.index)?+slide.index:slides.indexOf(slide)},$scope.next=function(){var newIndex=(self.getCurrentIndex()+1)%slides.length;return 0===newIndex&&$scope.noWrap()?void $scope.pause():self.select(getSlideByIndex(newIndex),"next")},$scope.prev=function(){var newIndex=self.getCurrentIndex()-1<0?slides.length-1:self.getCurrentIndex()-1;return $scope.noWrap()&&newIndex===slides.length-1?void $scope.pause():self.select(getSlideByIndex(newIndex),"prev")},$scope.isActive=function(slide){return self.currentSlide===slide},$scope.$watch("interval",restartTimer),$scope.$watchCollection("slides",resetTransition),$scope.$on("$destroy",resetTimer),$scope.play=function(){isPlaying||(isPlaying=!0,restartTimer())},$scope.pause=function(){$scope.noPause||(isPlaying=!1,resetTimer())},self.addSlide=function(slide,element){slide.$element=element,slides.push(slide),1===slides.length||slide.active?(self.select(slides[slides.length-1]),1===slides.length&&$scope.play()):slide.active=!1},self.removeSlide=function(slide){angular.isDefined(slide.index)&&slides.sort(function(a,b){return+a.index>+b.index});var index=slides.indexOf(slide);slides.splice(index,1),slides.length>0&&slide.active?index>=slides.length?self.select(slides[index-1]):self.select(slides[index]):currentIndex>index&¤tIndex--,0===slides.length&&(self.currentSlide=null)},$scope.$watch("noTransition",function(noTransition){$element.data(NO_TRANSITION,noTransition)})}]).directive("uibCarousel",[function(){return{transclude:!0,replace:!0,controller:"UibCarouselController",controllerAs:"carousel",require:"carousel",templateUrl:function(element,attrs){return attrs.templateUrl||"template/carousel/carousel.html"},scope:{interval:"=",noTransition:"=",noPause:"=",noWrap:"&"}}}]).directive("uibSlide",function(){return{require:"^uibCarousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(element,attrs){return attrs.templateUrl||"template/carousel/slide.html"},scope:{active:"=?",actual:"=?",index:"=?"},link:function(scope,element,attrs,carouselCtrl){carouselCtrl.addSlide(scope,element),scope.$on("$destroy",function(){carouselCtrl.removeSlide(scope)}),scope.$watch("active",function(active){active&&carouselCtrl.select(scope)})}}}).animation(".item",["$injector","$animate",function($injector,$animate){function removeClass(element,className,callback){element.removeClass(className),callback&&callback()}var NO_TRANSITION="uib-noTransition",SLIDE_DIRECTION="uib-slideDirection",$animateCss=null;return $injector.has("$animateCss")&&($animateCss=$injector.get("$animateCss")),{beforeAddClass:function(element,className,done){if("active"==className&&element.parent()&&element.parent().parent()&&!element.parent().parent().data(NO_TRANSITION)){var stopped=!1,direction=element.data(SLIDE_DIRECTION),directionClass="next"==direction?"left":"right",removeClassFn=removeClass.bind(this,element,directionClass+" "+direction,done);return element.addClass(direction),$animateCss?$animateCss(element,{addClass:directionClass}).start().done(removeClassFn):$animate.addClass(element,directionClass).then(function(){stopped||removeClassFn(),done()}),function(){stopped=!0}}done()},beforeRemoveClass:function(element,className,done){if("active"===className&&element.parent()&&element.parent().parent()&&!element.parent().parent().data(NO_TRANSITION)){var stopped=!1,direction=element.data(SLIDE_DIRECTION),directionClass="next"==direction?"left":"right",removeClassFn=removeClass.bind(this,element,directionClass,done);return $animateCss?$animateCss(element,{addClass:directionClass}).start().done(removeClassFn):$animate.addClass(element,directionClass).then(function(){stopped||removeClassFn(),done()}),function(){stopped=!0}}done()}}}]),angular.module("ui.bootstrap.carousel").value("$carouselSuppressWarning",!1).controller("CarouselController",["$scope","$element","$controller","$log","$carouselSuppressWarning",function($scope,$element,$controller,$log,$carouselSuppressWarning){$carouselSuppressWarning||$log.warn("CarouselController is now deprecated. Use UibCarouselController instead."),angular.extend(this,$controller("UibCarouselController",{$scope:$scope,$element:$element}))}]).directive("carousel",["$log","$carouselSuppressWarning",function($log,$carouselSuppressWarning){return{transclude:!0,replace:!0,controller:"CarouselController",controllerAs:"carousel",require:"carousel",templateUrl:function(element,attrs){return attrs.templateUrl||"template/carousel/carousel.html"},scope:{interval:"=",noTransition:"=",noPause:"=",noWrap:"&"},link:function(){$carouselSuppressWarning||$log.warn("carousel is now deprecated. Use uib-carousel instead.")}}}]).directive("slide",["$log","$carouselSuppressWarning",function($log,$carouselSuppressWarning){return{require:"^carousel",transclude:!0,replace:!0,templateUrl:function(element,attrs){return attrs.templateUrl||"template/carousel/slide.html"},scope:{active:"=?",actual:"=?",index:"=?"},link:function(scope,element,attrs,carouselCtrl){$carouselSuppressWarning||$log.warn("slide is now deprecated. Use uib-slide instead."),carouselCtrl.addSlide(scope,element),scope.$on("$destroy",function(){carouselCtrl.removeSlide(scope)}),scope.$watch("active",function(active){active&&carouselCtrl.select(scope)})}}}]),angular.module("ui.bootstrap.dateparser",[]).service("uibDateParser",["$log","$locale","orderByFilter",function($log,$locale,orderByFilter){function createParser(format){var map=[],regex=format.split("");return angular.forEach(formatCodeToRegex,function(data,code){var index=format.indexOf(code);if(index>-1){format=format.split(""),regex[index]="("+data.regex+")",format[index]="$";for(var i=index+1,n=index+code.length;i<n;i++)regex[i]="",format[i]="$";format=format.join(""),map.push({index:index,apply:data.apply})}}),{regex:new RegExp("^"+regex.join("")+"$"),map:orderByFilter(map,"index")}}function isValid(year,month,date){return!(date<1)&&(1===month&&date>28?29===date&&(year%4===0&&year%100!==0||year%400===0):3!==month&&5!==month&&8!==month&&10!==month||date<31)}var localeId,formatCodeToRegex,SPECIAL_CHARACTERS_REGEXP=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.init=function(){localeId=$locale.id,this.parsers={},formatCodeToRegex={yyyy:{regex:"\\d{4}",apply:function(value){this.year=+value}},yy:{regex:"\\d{2}",apply:function(value){this.year=+value+2e3}},y:{regex:"\\d{1,4}",apply:function(value){this.year=+value}},MMMM:{regex:$locale.DATETIME_FORMATS.MONTH.join("|"),apply:function(value){this.month=$locale.DATETIME_FORMATS.MONTH.indexOf(value)}},MMM:{regex:$locale.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(value){this.month=$locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(value){this.month=value-1}},M:{regex:"[1-9]|1[0-2]",apply:function(value){this.month=value-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(value){this.date=+value}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(value){this.date=+value}},EEEE:{regex:$locale.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:$locale.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(value){this.hours=+value}},hh:{regex:"0[0-9]|1[0-2]",apply:function(value){this.hours=+value}},H:{regex:"1?[0-9]|2[0-3]",apply:function(value){this.hours=+value}},h:{regex:"[0-9]|1[0-2]",apply:function(value){this.hours=+value}},mm:{regex:"[0-5][0-9]",apply:function(value){this.minutes=+value}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(value){this.minutes=+value}},sss:{regex:"[0-9][0-9][0-9]",apply:function(value){this.milliseconds=+value}},ss:{regex:"[0-5][0-9]",apply:function(value){this.seconds=+value}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(value){this.seconds=+value}},a:{regex:$locale.DATETIME_FORMATS.AMPMS.join("|"),apply:function(value){12===this.hours&&(this.hours=0),"PM"===value&&(this.hours+=12)}}}},this.init(),this.parse=function(input,format,baseDate){if(!angular.isString(input)||!format)return input;format=$locale.DATETIME_FORMATS[format]||format,format=format.replace(SPECIAL_CHARACTERS_REGEXP,"\\$&"),$locale.id!==localeId&&this.init(),this.parsers[format]||(this.parsers[format]=createParser(format));var parser=this.parsers[format],regex=parser.regex,map=parser.map,results=input.match(regex);if(results&&results.length){var fields,dt;angular.isDate(baseDate)&&!isNaN(baseDate.getTime())?fields={year:baseDate.getFullYear(),month:baseDate.getMonth(),date:baseDate.getDate(),hours:baseDate.getHours(),minutes:baseDate.getMinutes(),seconds:baseDate.getSeconds(),milliseconds:baseDate.getMilliseconds()}:(baseDate&&$log.warn("dateparser:","baseDate is not a valid date"),fields={year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0});for(var i=1,n=results.length;i<n;i++){var mapper=map[i-1];mapper.apply&&mapper.apply.call(fields,results[i])}return isValid(fields.year,fields.month,fields.date)&&(angular.isDate(baseDate)&&!isNaN(baseDate.getTime())?(dt=new Date(baseDate),dt.setFullYear(fields.year,fields.month,fields.date,fields.hours,fields.minutes,fields.seconds,fields.milliseconds||0)):dt=new Date(fields.year,fields.month,fields.date,fields.hours,fields.minutes,fields.seconds,fields.milliseconds||0)),dt}}}]),angular.module("ui.bootstrap.dateparser").value("$dateParserSuppressWarning",!1).service("dateParser",["$log","$dateParserSuppressWarning","uibDateParser",function($log,$dateParserSuppressWarning,uibDateParser){$dateParserSuppressWarning||$log.warn("dateParser is now deprecated. Use uibDateParser instead."),angular.extend(this,uibDateParser)}]),angular.module("ui.bootstrap.position",[]).factory("$uibPosition",["$document","$window",function($document,$window){function getStyle(el,cssprop){return el.currentStyle?el.currentStyle[cssprop]:$window.getComputedStyle?$window.getComputedStyle(el)[cssprop]:el.style[cssprop]}function isStaticPositioned(element){return"static"===(getStyle(element,"position")||"static")}var parentOffsetEl=function(element){for(var docDomEl=$document[0],offsetParent=element.offsetParent||docDomEl;offsetParent&&offsetParent!==docDomEl&&isStaticPositioned(offsetParent);)offsetParent=offsetParent.offsetParent;return offsetParent||docDomEl};return{position:function(element){var elBCR=this.offset(element),offsetParentBCR={top:0,left:0},offsetParentEl=parentOffsetEl(element[0]);offsetParentEl!=$document[0]&&(offsetParentBCR=this.offset(angular.element(offsetParentEl)),offsetParentBCR.top+=offsetParentEl.clientTop-offsetParentEl.scrollTop,offsetParentBCR.left+=offsetParentEl.clientLeft-offsetParentEl.scrollLeft);var boundingClientRect=element[0].getBoundingClientRect();return{width:boundingClientRect.width||element.prop("offsetWidth"),height:boundingClientRect.height||element.prop("offsetHeight"),top:elBCR.top-offsetParentBCR.top,left:elBCR.left-offsetParentBCR.left}},offset:function(element){var boundingClientRect=element[0].getBoundingClientRect();return{width:boundingClientRect.width||element.prop("offsetWidth"),height:boundingClientRect.height||element.prop("offsetHeight"),top:boundingClientRect.top+($window.pageYOffset||$document[0].documentElement.scrollTop),left:boundingClientRect.left+($window.pageXOffset||$document[0].documentElement.scrollLeft)}},positionElements:function(hostEl,targetEl,positionStr,appendToBody){var hostElPos,targetElWidth,targetElHeight,targetElPos,positionStrParts=positionStr.split("-"),pos0=positionStrParts[0],pos1=positionStrParts[1]||"center";hostElPos=appendToBody?this.offset(hostEl):this.position(hostEl),targetElWidth=targetEl.prop("offsetWidth"),targetElHeight=targetEl.prop("offsetHeight");var shiftWidth={center:function(){return hostElPos.left+hostElPos.width/2-targetElWidth/2},left:function(){return hostElPos.left},right:function(){return hostElPos.left+hostElPos.width}},shiftHeight={center:function(){return hostElPos.top+hostElPos.height/2-targetElHeight/2},top:function(){return hostElPos.top},bottom:function(){return hostElPos.top+hostElPos.height}};switch(pos0){case"right":targetElPos={top:shiftHeight[pos1](),left:shiftWidth[pos0]()};break;case"left":targetElPos={top:shiftHeight[pos1](),left:hostElPos.left-targetElWidth};break;case"bottom":targetElPos={top:shiftHeight[pos0](),left:shiftWidth[pos1]()};break;default:targetElPos={top:hostElPos.top-targetElHeight,left:shiftWidth[pos1]()}}return targetElPos}}}]),angular.module("ui.bootstrap.position").value("$positionSuppressWarning",!1).service("$position",["$log","$positionSuppressWarning","$uibPosition",function($log,$positionSuppressWarning,$uibPosition){$positionSuppressWarning||$log.warn("$position is now deprecated. Use $uibPosition instead."),angular.extend(this,$uibPosition)}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).value("$datepickerSuppressError",!1).constant("uibDatepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("UibDatepickerController",["$scope","$attrs","$parse","$interpolate","$log","dateFilter","uibDatepickerConfig","$datepickerSuppressError",function($scope,$attrs,$parse,$interpolate,$log,dateFilter,datepickerConfig,$datepickerSuppressError){var self=this,ngModelCtrl={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","showWeeks","startingDay","yearRange","shortcutPropagation"],function(key,index){self[key]=angular.isDefined($attrs[key])?index<6?$interpolate($attrs[key])($scope.$parent):$scope.$parent.$eval($attrs[key]):datepickerConfig[key]}),angular.forEach(["minDate","maxDate"],function(key){$attrs[key]?$scope.$parent.$watch($parse($attrs[key]),function(value){self[key]=value?new Date(value):null,self.refreshView()}):self[key]=datepickerConfig[key]?new Date(datepickerConfig[key]):null}),angular.forEach(["minMode","maxMode"],function(key){$attrs[key]?$scope.$parent.$watch($parse($attrs[key]),function(value){self[key]=angular.isDefined(value)?value:$attrs[key],$scope[key]=self[key],("minMode"==key&&self.modes.indexOf($scope.datepickerMode)<self.modes.indexOf(self[key])||"maxMode"==key&&self.modes.indexOf($scope.datepickerMode)>self.modes.indexOf(self[key]))&&($scope.datepickerMode=self[key])}):(self[key]=datepickerConfig[key]||null,$scope[key]=self[key])}),$scope.datepickerMode=$scope.datepickerMode||datepickerConfig.datepickerMode,$scope.uniqueId="datepicker-"+$scope.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined($attrs.initDate)?(this.activeDate=$scope.$parent.$eval($attrs.initDate)||new Date,$scope.$parent.$watch($attrs.initDate,function(initDate){initDate&&(ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue)||ngModelCtrl.$invalid)&&(self.activeDate=initDate,self.refreshView())})):this.activeDate=new Date,$scope.isActive=function(dateObject){return 0===self.compare(dateObject.date,self.activeDate)&&($scope.activeDateId=dateObject.uid,!0)},this.init=function(ngModelCtrl_){ngModelCtrl=ngModelCtrl_,ngModelCtrl.$render=function(){self.render()}},this.render=function(){if(ngModelCtrl.$viewValue){var date=new Date(ngModelCtrl.$viewValue),isValid=!isNaN(date);isValid?this.activeDate=date:$datepickerSuppressError||$log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var date=ngModelCtrl.$viewValue?new Date(ngModelCtrl.$viewValue):null;ngModelCtrl.$setValidity("dateDisabled",!date||this.element&&!this.isDisabled(date))}},this.createDateObject=function(date,format){var model=ngModelCtrl.$viewValue?new Date(ngModelCtrl.$viewValue):null;return{date:date,label:dateFilter(date,format),selected:model&&0===this.compare(date,model),disabled:this.isDisabled(date),current:0===this.compare(date,new Date),customClass:this.customClass(date)}},this.isDisabled=function(date){return this.minDate&&this.compare(date,this.minDate)<0||this.maxDate&&this.compare(date,this.maxDate)>0||$attrs.dateDisabled&&$scope.dateDisabled({date:date,mode:$scope.datepickerMode})},this.customClass=function(date){return $scope.customClass({date:date,mode:$scope.datepickerMode})},this.split=function(arr,size){for(var arrays=[];arr.length>0;)arrays.push(arr.splice(0,size));return arrays},$scope.select=function(date){if($scope.datepickerMode===self.minMode){var dt=ngModelCtrl.$viewValue?new Date(ngModelCtrl.$viewValue):new Date(0,0,0,0,0,0,0);dt.setFullYear(date.getFullYear(),date.getMonth(),date.getDate()),ngModelCtrl.$setViewValue(dt),ngModelCtrl.$render()}else self.activeDate=date,$scope.datepickerMode=self.modes[self.modes.indexOf($scope.datepickerMode)-1]},$scope.move=function(direction){var year=self.activeDate.getFullYear()+direction*(self.step.years||0),month=self.activeDate.getMonth()+direction*(self.step.months||0);self.activeDate.setFullYear(year,month,1),