isite 2022.8.4 → 2022.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/apps/client-side/app.js +8 -3
- package/apps/client-side/site_files/css/bootstrap5-addon.css +55 -7
- package/apps/client-side/site_files/css/bootstrap5.css +1 -1
- package/apps/client-side/site_files/css/bootstrap5.css.map +1 -0
- package/apps/client-side/site_files/css/dropdown.css +3 -0
- package/apps/client-side/site_files/css/effect.css +136 -77
- package/apps/client-side/site_files/css/images.css +0 -3
- package/apps/client-side/site_files/css/layout.css +45 -51
- package/apps/client-side/site_files/css/modal.css +5 -6
- package/apps/client-side/site_files/css/normalize.css +146 -0
- package/apps/client-side/site_files/css/scrollbar.css +5 -5
- package/apps/client-side/site_files/css/table.css +3 -3
- package/apps/client-side/site_files/html/directive/i-button.html +5 -0
- package/apps/client-side/site_files/html/directive/i-checkbox.html +4 -0
- package/apps/client-side/site_files/html/directive/i-checklist.html +6 -0
- package/apps/client-side/site_files/html/directive/i-control.html +5 -0
- package/apps/client-side/site_files/html/directive/i-date.html +21 -16
- package/apps/client-side/site_files/html/directive/i-datetime.html +32 -0
- package/apps/client-side/site_files/html/{sub/i-file.content.html → directive/i-file.html} +3 -5
- package/apps/client-side/site_files/html/directive/i-image.html +7 -0
- package/apps/client-side/site_files/html/{sub/i-list2.content.html → directive/i-list.html} +2 -2
- package/apps/client-side/site_files/html/directive/i-radio.html +4 -0
- package/apps/client-side/site_files/html/directive/i-textarea.html +4 -0
- package/apps/client-side/site_files/html/directive/i-treenode.html +20 -0
- package/apps/client-side/site_files/html/directive/i-treeview.html +13 -0
- package/apps/client-side/site_files/html/directive/i-upload.html +5 -0
- package/apps/client-side/site_files/html/directive-core/i-date.html +64 -0
- package/apps/client-side/site_files/html/directive-core/i-list.html +22 -0
- package/apps/client-side/site_files/js/bootstrap-5-addon.js +1 -0
- package/apps/client-side/site_files/js/bootstrap-5-directive.js +171 -862
- package/apps/client-side/site_files/js/bootstrap.js.map +1 -0
- package/apps/client-side/site_files/js/directive.js +1865 -2044
- package/apps/client-side/site_files/js/directive.min.js +2 -2
- package/apps/client-side/site_files/js/site.js +26 -3
- package/apps/client-side/site_files/js/site.min.js +1 -1
- package/apps/security/site_files/html/login_modal.html +18 -26
- package/index.js +277 -278
- package/lib/email.js +108 -0
- package/lib/integrated.js +10 -26
- package/lib/parser.js +538 -514
- package/lib/routing.js +21 -15
- package/lib/security.js +1109 -1081
- package/lib/sessions.js +182 -247
- package/object-options/index.js +24 -4
- package/object-options/lib/fn.js +9 -3
- package/package.json +5 -3
- package/pull.bat +3 -0
- package/push.bat +2 -5
- package/apps/client-side/site_files/html/sub/i-list.content.html +0 -31
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var app=app||angular.module("myApp",[]);window.$=window.jQuery,app.filter("xdate",function(){return function(e){if(e)return e.day2?`${e.day} - ${e.month+1} - ${e.year} -- ${e.day2} - ${e.month2+1} - ${e.year2}`:`${e.day} - ${e.month+1} - ${e.year}`}}),app.filter("xmoney",function(){return function(e){return site.toMoney(e,!1)}}),app.service("isite",["$http",function(e){this.getValue=function(e,n){if(!e||!n)return null;if("_"==n)return e;let l=n.split(".");return 1===l.length?e[l[0]]:2===l.length?e[l[0]][l[1]]:3===l.length?e[l[0]][l[1]][l[2]]:null},this.uploadImage=function(n,l,a){l=Object.assign({category:"default"},l),a=a||function(){};var d=new FormData;d.append("fileToUpload",n[0]),e.post("/api/upload/image/"+l.category,d,{withCredentials:!0,headers:{"Content-Type":void 0},uploadEventHandlers:{progress:function(e){a(null,null,e)}},transformRequest:angular.identity}).then(function(e){e.data&&e.data.done&&a(null,e.data.image_url)},function(e){a(e,null,null)})},this.uploadFile=function(n,l,a){l=Object.assign({category:"default"},l),a=a||function(){};var d=new FormData;d.append("fileToUpload",n[0]),e.post("/api/upload/file/"+l.category,d,{withCredentials:!0,headers:{"Content-Type":void 0},uploadEventHandlers:{progress:function(e){a(null,null,e)}},transformRequest:angular.identity}).then(function(e){e.data&&e.data.done&&e.data.file&&a(null,{name:e.data.file.name,url:e.data.file.url})},function(e){a(e,null,null)})},this.deleteFile=function(e,n){n=n||function(){},n()},this.upload=function(n,l,a){l=Object.assign({api:"/api/upload/file"},l),a=a||function(){};var d=new FormData;d.append("fileToUpload",n[0]),e.post(l.api,d,{withCredentials:!0,headers:{"Content-Type":void 0},uploadEventHandlers:{progress:function(e){a(null,null,e)}},transformRequest:angular.identity}).then(function(e){e.data&&e.data.done&&e.data.file&&a(null,{name:e.data.file.name,url:e.data.file.url})},function(e){a(e,null,null)})}}]),app.directive("iDate",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",$(n).find("select").focus(()=>{$(".popup").hide()}),e.days1=[];for(let n=1;n<32;n++)e.days1.push(n);e.years1=[];for(let n=1900;n<2100;n++)e.years1.push(n);e.monthes1=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"]},restrict:"E",require:"ngModel",scope:{v:"@",label:"@",disabled:"@",ngModel:"="},template:'\n <div class="row i-date">\n \n <div class=" control">\n <label> {{label}} </label>\n <div class="row">\n <div class="col3 day"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="ngModel.day" class="appearance-none no-border-left no-border-radius" >\n <option ng-repeat="d1 in days1" ng-value="d1"> {{d1}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="ngModel.month" class="appearance-none no-border-left no-border-right no-border-radius" >\n <option ng-repeat="m1 in monthes1" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n <div class="col4 year"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="ngModel.year" class="appearance-none no-border-right no-border-radius" >\n <option ng-repeat="y1 in years1" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n </div>\n </div>\n \n \n </div>\n '}}),app.directive("iDate2",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.y_search=l.year||"202",e.m_search=l.month||"",e.d_search=l.day||"",e.days1=[];for(let n=1;n<32;n++)e.days1.push({id:n,name:n});e.years1=[];for(let n=1900;n<2100;n++)e.years1.push({id:n,name:n});e.monthes1=[{id:0,name:"يناير / Jan"},{id:1,name:"فبراير / Feb"},{id:2,name:"مارس / Mar"},{id:3,name:"ابريل / Aper"},{id:4,name:"مايو / May"},{id:5,name:"يونيو / June"},{id:6,name:"يوليو / Jule"},{id:7,name:"اغسطس / Aug"},{id:8,name:"سبتمبر / Sep"},{id:9,name:"اكتوبر / Oct"},{id:10,name:"نوفمبر / Nov"},{id:11,name:"ديسمبر / Des"}],e.model=null,e.$watch("ngModel",function(n){n?(n=new Date(n),e.model=e.model||{},e.model.day=n.getDate(),e.model.day_name=e.model.day,e.model.month=n.getMonth(),e.model.month_name=e.monthes1.find(n=>n.id==e.model.month).name,e.model.year=n.getFullYear(),e.model.year_name=e.model.year):(e.model=e.model||{},e.model.day=0,e.model.day_name="",e.model.month=-1,e.model.month_name="",e.model.year=0,e.model.year_name="")}),e.setDay=function(){e.ngModel=new Date},e.updateDate=function(n){n.year?(e.model.year=n.year.id,e.model.year_name=n.year.name):n.month?(e.model.month=n.month.id,e.model.month_name=n.month.name):n.day&&(e.model.day=n.day.id,e.model.day_name=n.day.name),e.model&&e.model.year&&e.model.day&&e.model.month>-1?e.ngModel=new Date(e.model.year,e.model.month,e.model.day,0,0,0):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",disabled:"@",label:"@",ngModel:"="},template:"/*##client-side/sub/i-date2.content.html*/"}}),app.directive("iTime",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.model={},e.hours=[];for(let n=1;n<25;n++)e.hours.push(n);e.minutes=[];for(let n=0;n<60;n++)e.minutes.push(n);$(n).find("select").focus(()=>{$(".popup").hide()}),e.$watch("ngModel",function(n){n?(n.date=new Date(n.date),e.model=e.model||{},e.model.hour=n.hour,e.model.minute=n.minute):(e.model=e.model||{},e.model.hour=0,e.model.minute=0)}),e.updateTime=function(){e.model?(e.ngModel=e.ngModel||{},e.ngModel.hour=e.model.hour,e.ngModel.minute=e.model.minute,e.ngModel.date=new Date(null,null,null,e.model.hour,e.model.minute,null)):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",disabled:"@",label:"@",ngModel:"="},template:'\n <div class="row i-time">\n <div class=" control ">\n <label class="text-center"> {{label}} </label>\n <div class="row">\n <div class="col6 right">\n <div class="row">\n <div class="col2"></div>\n <div class="col8">\n <select ng-disabled="disabled" ng-model="model.minute" ng-change="updateTime()" class="small appearance-none no-border-left no-border-radius" >\n <option ng-repeat="m in minutes" ng-value="m"> {{m}}</option>\n </select>\n </div>\n <div class="col2"></div>\n </div>\n \n </div>\n <div class="col6">\n <div class="row">\n <div class="col2 space right">\n <span> : </span>\n </div>\n <div class="col8">\n <select ng-disabled="disabled" ng-model="model.hour" ng-change="updateTime()" class="large blue appearance-none no-border-left no-border-radius" >\n <option ng-repeat="h in hours" ng-value="h"> {{h}} </option>\n </select>\n </div>\n \n </div>\n \n </div>\n </div>\n </div>\n '}}),app.directive("iDatetime2",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.hour1=[];for(let n=1;n<25;n++)e.hour1.push(n);e.minute_list=[];for(let n=1;n<60;n++)e.minute_list.push({name:n});e.days1=[];for(let n=1;n<32;n++)e.days1.push(n);e.years1=[];for(let n=1900;n<2100;n++)e.years1.push(n);e.monthes1=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],e.model=null,$(n).find("select").focus(()=>{$(".popup").hide()}),e.$watch("ngModel",function(n){n?(n=new Date(n),e.model=e.model||{},e.model.hour=n.getHours(),e.model.minute=n.getMinutes(),e.model.day=n.getDate(),e.model.month=n.getMonth(),e.model.year=n.getFullYear()):(e.model=e.model||{},e.model.hour=0,e.model.minute=0,e.model.day=0,e.model.month=-1,e.model.year=0)}),e.updateDate=function(){e.model&&e.model.year&&e.model.day?e.ngModel=new Date(e.model.year,e.model.month,e.model.day,e.model.hour,e.model.minute):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",disabled:"@",label:"@",ngModel:"="},template:'\n <div class="row i-datetime2">\n \n <div class=" control">\n <label> {{label}} </label>\n <div class="row">\n\n <div class="col2 day"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.day" ng-change="updateDate()" class="appearance-none no-border-left no-border-radius" >\n <option ng-repeat="d1 in days1" ng-value="d1"> {{d1}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.month" ng-change="updateDate()" class="appearance-none no-border-left no-border-right no-border-radius" >\n <option ng-repeat="m1 in monthes1" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n <div class="col3 year"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.year" ng-change="updateDate()" class="appearance-none no-border-right no-border-radius" >\n <option ng-repeat="y1 in years1" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n\n <div class="col1 hour"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.hour" ng-change="updateDate()" class="appearance-none no-border-radius" >\n <option ng-repeat="h1 in hour1" ng-value="h1"> {{h1}} </option>\n </select>\n </div>\n <div class="col1 minute"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.minute" ng-change="updateDate()" class="green appearance-none no-border-right no-border-radius" >\n <option ng-repeat="m1 in minute_list" ng-value="m1.name" class="green"> {{m1.name}} </option>\n </select>\n </div>\n\n </div>\n </div>\n \n \n </div>\n '}}),app.directive("iMonth2",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.years=[];for(let n=1900;n<2100;n++)e.years.push(n);e.monthes=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],e.model=null,$(n).find("select").focus(()=>{$(".popup").hide()}),e.$watch("ngModel",function(n){n?(n=new Date(n),e.model=e.model||{},e.model.day=1,e.model.month=n.getMonth(),e.model.year=n.getFullYear()):(e.model=e.model||{},e.model.day=0,e.model.month=-1,e.model.year=0)}),e.updateDate=function(){e.model&&e.model.year?e.ngModel=new Date(e.model.year,e.model.month,1):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",label:"@",disabled:"@",ngModel:"="},template:'\n <div class="row i-date2">\n \n <div class=" control">\n <label> {{label}} </label>\n <div class="row">\n \n <div class="col7 month"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="model.month" ng-change="updateDate()" class="appearance-none no-border-left no-border-radius" >\n <option ng-repeat="m1 in monthes" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n\n <div class="col5 year"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="model.year" ng-change="updateDate()" class="appearance-none no-border-right no-border-radius" >\n <option ng-repeat="y1 in years" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n\n </div>\n </div>\n \n \n </div>\n '}}),app.directive("iFulldate",["$http",function(e){return{link:function(n,l,a,d){let t=!1;void 0!==a.disabled?a.disabled="disabled":a.disabled="",$(l).find("select").focus(()=>{$(".popup").hide()}),n.days1=[];for(let e=1;e<32;e++)n.days1.push(e);n.years1=[];for(let e=1950;e<2030;e++)n.years1.push(e);n.monthes1=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],n.days2=[];for(let e=1;e<31;e++)n.days2.push(e);n.years2=[];for(let e=1370;e<1450;e++)n.years2.push(e);n.monthes2=["محرم","صفر","ربيع اول","ربيع ثان","جمادى اول","جمادى ثان","رجب","شعبان","رمضان","شوال","ذى القعدة","ذى الحجة"],n.model={},n.$watch("ngModel",function(e){n.model=e||{}}),n.$watch("ngModel.date",function(e){e&&("string"==typeof e&&(e=new Date(e)),n.model=n.model||{},n.model.date=e,n.model.day=e.getDate(),n.model.month=e.getMonth(),n.model.year=e.getFullYear(),n.get_hijri_date())}),n.get_hijri_date=function(){if(n.model&&n.model.year&&n.model.day){if(d.$setViewValue(n.model),t)return;t=!0,n.model.date=new Date(n.model.year,n.model.month,n.model.day),e({method:"POST",url:"/api/get_hijri_date",data:{date:n.model.year+"/"+(n.model.month+1)+"/"+n.model.day}}).then(e=>{e.data.done&&(n.model.hijri=e.data.hijri,n.model.day2=parseInt(n.model.hijri.split("/")[2]),n.model.month2=parseInt(n.model.hijri.split("/")[1])-1,n.model.year2=parseInt(n.model.hijri.split("/")[0]),d.$setViewValue(n.model),t=!1)}).catch(()=>{t=!1})}},n.get_normal_date=function(){if(n.model&&n.model.year2&&n.model.day2){if(d.$setViewValue(n.model),t)return;t=!0,e({method:"POST",url:"/api/get_normal_date",data:{hijri:n.model.year2+"/"+(n.model.month2+1)+"/"+n.model.day2}}).then(e=>{e.data.done&&(n.model.date=new Date(e.data.date),n.model.day=parseInt(e.data.date.split("/")[2]),n.model.month=parseInt(e.data.date.split("/")[1])-1,n.model.year=parseInt(e.data.date.split("/")[0]),d.$setViewValue(n.model),t=!1)}).catch(()=>{t=!1})}}},restrict:"E",require:"ngModel",scope:{v:"@",label1:"@",label2:"@",disabled:"@",ngModel:"=",ngChange:"&"},template:'\n <div class="row i-date">\n \n <div class="col6 control">\n <label> {{label1}} </label>\n <div class="row">\n <div class="col3 day"> \n <select ng-change="get_hijri_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.day" class="appearance-none no-border-left no-border-radius">\n <option ng-repeat="d1 in days1" ng-value="d1"> {{d1}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select ng-change="get_hijri_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.month" class="appearance-none no-border-left no-border-right no-border-radius">\n <option ng-repeat="m1 in monthes1" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n <div class="col4 year"> \n <select ng-change="get_hijri_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.year" class="appearance-none no-border-right no-border-radius">\n <option ng-repeat="y1 in years1" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n </div>\n </div>\n \n <div class="col6 control">\n <label> {{label2}} </label>\n <div class="row">\n <div class="col3 day"> \n <select ng-change="get_normal_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.day2" class="appearance-none no-border-left no-border-radius">\n <option ng-repeat="d2 in days2" ng-value="d2"> {{d2}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select ng-change="get_normal_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.month2" class="appearance-none no-border-left no-border-right no-border-radius">\n <option ng-repeat="m2 in monthes2" ng-value="$index"> {{m2}} </option>\n </select>\n </div>\n <div class="col4 year"> \n <select ng-change="get_normal_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.year2" class="appearance-none no-border-right no-border-radius">\n <option ng-repeat="y2 in years2" ng-value="y2"> {{y2}} </option>\n </select>\n </div>\n </div>\n </div>\n \n </div>\n '}}]),app.directive("iControl",function(){return{restrict:"E",require:"ngModel",scope:{v:"@",id2:"@",label:"@",type:"@",disabled:"@",ngModel:"=",ngChange:"&",ngKeydown:"&"},link:function(e,n,l,a){l.type=l.type||"text",void 0!==l.disabled?l.disabled="disabled":l.disabled="",$(n).find("input").focus(()=>{$(".i-list .dropdown-content").css("display","none")}),e.$watch(l.ngModel,function(e){})},template:'\n <div class="control">\n <label> {{label}} </label>\n <input id="{{id2}}" ng-disabled="disabled" autofocus v="{{v}}" type="{{type}}" ng-model="ngModel" ng-change="ngChange()" ngKeydown="ngKeydown()">\n </div>\n '}}),app.directive("iTextarea",function(){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",disabled:"@",rows:"@",ngModel:"=",ngChange:"&"},link:function(e,n,l,a){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.rows=e.rows||4,$(n).find("textarea").focus(()=>{$(".popup").hide()})},template:'\n <div class="control">\n <label> {{label}} </label>\n <textarea ng-disabled="disabled" rows="{{rows}}" v="{{v}}" ng-model="ngModel" ng-change="ngChange()"></textarea>\n </div>\n '}}),app.directive("iCheckbox",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngModel:"=",ngChange:"&"},link:function(e,n,l,a){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.updateModal=function(n){return"disabled"!=l.disabled&&(e.ngModel=!n,!0)}},template:'\n <div class="selector" ng-class="{\'selected\' : ngModel , \'un-selected\' : !ngModel }" ng-click="updateModal(ngModel);ngChange($event , ngModel)">\n <i ng-show="!ngModel" class="fa fa-square"></i> <i ng-show="ngModel" class="fa fa-check"></i> {{label}}\n </div>\n '}}),app.directive("iCheckbox2",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngModel:"="},link:function(e,n,l,a){},template:'\n <div class="control">\n <label class="checkbox">\n <span class="title"> {{label}} </span>\n <input type="checkbox" ng-model="ngModel" >\n <span class="checkmark"></span>\n </label>\n </div>\n '}}),app.directive("iRadio",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngValue:"@",group:"@",ngModel:"="},link:function(e,n,l,a){l.group||(l.group=l.ngModel),e.changeModal=function(n){e.ngModel=n},e.$watch("ngModel",n=>{n&&e.ngValue}),e.$watch("ngValue",n=>{n&&e.ngModel})},template:'\n <div group="{{group}}" class="selector" ng-class="{\'selected\' : ngModel == ngValue , \'un-selected\' : ngModel != ngValue }" ng-click="changeModal(ngValue);ngChange($event , ngModel , ngValue)">\n <i ng-show="ngModel != ngValue" class="fa fa-circle"></i> <i ng-show="ngModel == ngValue" class="fa fa-circle"></i> {{label}}\n </div>\n '}}),app.directive("iRadio2",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngValue:"@",group:"@",ngModel:"="},link:function(e,n,l,a){l.group||(l.group=l.ngModel);let d=$(n).find("input");e.$watch("ngModel",n=>{n&&(e.ngModel=n,n==e.ngValue&&d.prop("checked",!0))}),e.$watch("ngValue",n=>{n&&n==e.ngModel&&d.prop("checked",!0)})},template:'\n <div class="control">\n <label class="radio">\n <span > {{label}} </span>\n <input name="{{group}}" ng-value="ngValue" type="radio" ng-model="ngModel" >\n <span class="checkmark"></span>\n </label>\n </div>\n '}}),app.directive("iButton",function(){return{restrict:"E",scope:{label:"@",type:"@",click:"@",fa:"@"},link:function(e,n,l,a){!l.fa&&l.type&&(l.type.like("*exit*")||l.type.like("*close*")?l.fa="times":l.type.like("*view*")||l.type.like("*details*")?l.fa="file":l.type.like("*add*")||l.type.like("*new*")?l.fa="plus-circle":l.type.like("*update*")||l.type.like("*edit*")?l.fa="edit":l.type.like("*save*")?l.fa="save":l.type.like("*delete*")||l.type.like("*remove*")?l.fa="trash":l.type.like("*print*")?l.fa="print":l.type.like("*search*")?l.fa="search":(l.type.like("*export*")||l.type.like("*excel*"))&&(l.fa="table"))},template:'\n <a class="btn {{type}}">\n {{label}}\n <i ng-show="fa" class="fa fa-{{fa}}" aria-hidden="true"></i> </a>\n '}}),app.directive("iList",["$interval","$timeout","isite",function(e,n,l){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",display:"@",display2:"@",disabled:"@",css:"@",space:"@",primary:"@",ngValue:"@",ngModel:"=",ngSearch:"=",ngChange:"&",ngAdd:"&",items:"="},link:function(e,a,d,t){e.display=d.display=d.display||"name",e.primary=d.primary=d.primary||"id",d.space=d.space||" ",d.ngValue=d.ngValue||"",e.searchElement=$(a).find(".dropdown .search"),e.popupElement=$(a).find(".dropdown .dropdown-content"),void 0!==d.disabled?d.disabled="disabled":d.disabled="",void 0===d.ngAdd?e.fa_add="fa-search":e.fa_add="fa-plus",void 0===d.ngSearch?e.showSearch=!1:e.showSearch=!0;let i=$(a).find("input");$(a).hover(()=>{e.popupElement.css("display","block")},()=>{e.popupElement.css("display","none")}),e.focus=function(){$(".i-list .dropdown-content").css("display","none"),e.popupElement.css("display","block"),e.searchElement.focus()},e.hide=function(){e.popupElement.css("display","none")},e.getValue=function(n){let a=l.getValue(n,e.display);return a||""},e.getValue2=function(n){return e.display2&&l.getValue(n,e.display2)||""},e.getNgModelValue=function(n){return n&&e.display&&e.ngValue?l.getValue(n,e.display.replace(e.ngValue+".",""))||"":n&&e.display&&l.getValue(n,e.display)||""},e.getNgModelValue2=function(n){return n&&e.display2&&e.ngValue?l.getValue(n,e.display2.replace(e.ngValue+".",""))||"":n&&e.display2&&l.getValue(n,e.display2)||""},e.getNgValue=function(n){return n&&e.ngValue?l.getValue(n,e.ngValue):n},e.$watch("items",n=>{i.val(""),n&&n.forEach(n=>{n.$display=e.getValue(n)+d.space+e.getValue2(n)}),n&&e.ngModel&&n.forEach(n=>{l.getValue(n,e.primary)==l.getValue(e.ngModel,e.primary)&&(e.ngModel=n,n.$display=e.getValue(n)+d.space+e.getValue2(n),i.val(n.$display))})}),e.$watch("ngModel",n=>{i.val(""),e.ngModel=n,n&&i.val(" "+e.getNgModelValue(n)+d.space+e.getNgModelValue2(n))}),e.updateModel=function(l){e.ngModel=e.getNgValue(l,e.ngValue),i.val(e.getNgModelValue(e.ngModel)+d.space+e.getNgModelValue2(e.ngModel)),n(()=>{e.ngChange()}),e.hide()}},template:"/*##client-side/sub/i-list2.content.html*/"}}]),app.directive("iChecklist",["$interval",function(e){return{restrict:"E",required:"ngModel",scope:{label:"@",primary:"@",display:"@",ngModel:"=",items:"=",like:"&"},link:function(e,n,l,a){l.primary=l.primary||"id",e.selectedItems=[],e.$watch("ngModel",n=>{e.reload()}),e.reload=function(){e.selectedItems=[],e.ngModel&&(e.ngModel.forEach(n=>{e.selectedItems.push(n)}),e.items&&e.items.forEach(n=>{let l=!1;e.selectedItems.forEach(a=>{n[e.primary]===a[e.primary]&&(l=!0)}),n.$selected=!!l})),e.ngModel||(e.selectedItems=[],e.items&&e.items.forEach(e=>{e.$selected=!1}))},e.change=function(n){if(n.$selected=!n.$selected,n.$selected){let l=!1;e.selectedItems.forEach(a=>{a[e.primary]===n[e.primary]&&(l=!0)}),l||e.selectedItems.push(n)}else e.selectedItems.forEach((l,a)=>{l[e.primary]===n[e.primary]&&e.selectedItems.splice(a,1)});e.ngModel=e.selectedItems}},template:'\n <div class="row padding check-list">\n <label class="title"> {{label}} </label>\n <div ng-repeat="item in items" ng-click="change(item);ngChange($event , item);" class="selector" ng-class="{\'selected\' : item.$selected , \'un-selected\' : !item.$selected }" >\n <i ng-show="!item.$selected" class="fa fa-square"></i> <i ng-show="item.$selected" class="fa fa-check"></i> {{item[display]}}\n </div>\n </div>\n '}}]),app.directive("iChecklist2",["$interval",function(e){return{restrict:"E",required:"ngModel",scope:{label:"@",primary:"@",display:"@",ngModel:"=",items:"=",like:"&"},link:function(e,n,l,a){l.primary=l.primary||"id",e.selectedItems=[],e.$watch("ngModel",n=>{e.reload()}),e.reload=function(){e.selectedItems=[],e.ngModel&&(e.ngModel.forEach(n=>{e.selectedItems.push(n)}),e.items&&e.items.forEach(n=>{let l=!1;e.selectedItems.forEach(a=>{n[e.primary]===a[e.primary]&&(l=!0)}),n.$selected=!!l})),e.ngModel||(e.selectedItems=[],e.items&&e.items.forEach(e=>{e.$selected=!1}))},e.change=function(n){if(n.$selected){let l=!1;e.selectedItems.forEach(a=>{a[e.primary]===n[e.primary]&&(l=!0)}),l||e.selectedItems.push(n)}else e.selectedItems.forEach((l,a)=>{l[e.primary]===n[e.primary]&&e.selectedItems.splice(a,1)});e.ngModel=e.selectedItems}},template:'\n <div class="row padding check-list">\n <label class="title"> {{label}} </label>\n <div class="control" ng-repeat="item in items">\n <label class="checkbox" >\n <span > {{item[display]}} </span>\n <input type="checkbox" ng-model="item.$selected" ng-change="change(item)" >\n <span class="checkmark"></span>\n </label>\n </div>\n </div>\n '}}]),app.directive("iRadiolist",["$interval",function(e){return{restrict:"E",required:"ngModel",scope:{label:"@",display:"@",ngModel:"=",items:"="},link:function(e,n,l){e.model=e.ngModel,e.code="radio_"+Math.random(),e.change=function(n){e.ngModel=n},e.isChecked=function(n){return!(!n||!e.ngModel||e.ngModel.id!==n.id)}},template:'\n <div class="row padding radio-list">\n <label class="title"> {{label}} </label>\n <div class="control" ng-repeat="item in items">\n <label class="radio" >\n <span > {{item[display]}} </span>\n <input name="{{code}}" type="radio" ng-model="model" ng-checked="isChecked(item)" ng-click="change(item)" ng-change="change(item)" >\n <span class="checkmark"></span>\n </label>\n </div>\n </div>\n '}}]),app.directive("iFile",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{label:"@",type:"@",ngModel:"=",ngClick:"&",onSelected:"&"},link:function(e,n,l,a){e.type=e.type||"bg-green";let d=$(n).find("input")[0],t=$(n).find("a")[0];""!==l.view&&t.addEventListener("click",function(){d.click()}),d.addEventListener("change",function(){e.ngModel=this.files[0].path,e.onSelected(this.files[0].path),e.$applyAsync()}),e.$watch("ngModel",e=>{e&&t.setAttribute("url",e)})},template:'\n <form class="form text-center pointer">\n <input class="hidden" type="file" name="file" />\n <a class="btn {{type}}" ngClick="ngClick()" url="{{ngModel}}"> {{label}} </a>\n </form>\n '}}]),app.directive("iImage",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{category:"@",ngModel:"=",ngClick:"&"},link:function(e,l,a,d){e.category=e.category||"default";let t=$(l).find("input")[0],i=$(l).find("img")[0],o=$(l).find("progress")[0];$(o).hide(),""!==a.view&&i.addEventListener("click",function(){t.click()}),t.addEventListener("change",function(){n.uploadImage(this.files,{category:e.category},(n,l,a)=>{a&&($(o).show(),o.value=a.loaded,o.max=a.total),l&&(e.ngModel=l)})}),e.$watch("ngModel",e=>{e&&i.setAttribute("src",e)})},template:'\n <form class="form text-center pointer">\n <input class="hidden" type="file" name="file" />\n <img class="bg-white" ng-src="{{ngModel}}" ngClick="ngClick()" onerror="this.src=\'/images/no.jpg\'" />\n <progress class="row"></progress>\n </form>\n '}}]),app.directive("iUpload",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{label:"@",api:"@",type:"@",ngModel:"=",ngClick:"&",onUploaded:"&"},link:function(e,l,a,d){e.type=e.type||"bg-green";let t=$(l).find("input")[0],i=$(l).find("a")[0],o=$(l).find("progress")[0];$(o).hide(),""!==a.view&&i.addEventListener("click",function(){t.click()}),t.addEventListener("change",function(){n.upload(this.files,{api:e.api},(n,l,a)=>{a&&($(o).show(),o.value=a.loaded,o.max=a.total),l&&(e.ngModel=l,e.onUploaded())})}),e.$watch("ngModel",e=>{e&&i.setAttribute("url",e)})},template:'\n <form class="form text-center pointer">\n <input class="hidden" type="file" name="file" />\n <a class="btn {{type}}" ngClick="ngClick()" url="{{ngModel}}"> {{label}} </a>\n <progress class="row"></progress>\n </form>\n '}}]),app.directive("iFiles",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{category:"@",label:"@",ngModel:"="},link:function(l,a,d,t){""===d.view&&(l.viewOnly=!0);let i=$(a).find("progress")[0];l.category=l.category||"default",l.id=Math.random().toString().replace(".","_"),l.deleteFile=function(e){n.deleteFile(e,()=>{for(let n=0;n<l.ngModel.length;n++){let a=l.ngModel[n];if(a.url===e.url)return void l.ngModel.splice(n,1)}})};let o=!1;e(()=>{if(!o)if(""!==d.view){let e=document.querySelector("#btn_"+l.id);e&&(o=!0,e.addEventListener("click",function(){document.querySelector("#input_"+l.id).click()}));let a=document.querySelector("#input_"+l.id);a&&a.addEventListener("change",function(){n.uploadFile(this.files,{category:l.category},(e,n,a)=>{a&&($(i).show(),i.value=a.loaded,i.max=a.total),n&&(void 0===l.ngModel&&(l.ngModel=[]),l.ngModel.push(n))})})}else o=!0},500)},template:'\n <div class="files">\n <label> {{label}} </label>\n <form ng-if="viewOnly !== !0" id="img_{{id}}" class="form text-center pointer">\n <input id="input_{{id}}" class="hidden" type="file" name="file" />\n <a id="btn_{{id}}" class="btn bg-green"> <i class="fa fa-upload white"></i> </a>\n </form>\n <progress class="row"></progress>\n <div class="padding">\n \n <div class="row padding" ng-repeat="f in ngModel">\n <h2> \n <a class="btn default bg-blue" href="{{f.url}}"> <i class="fa fa-2x fa-download white"></i> </a>\n <a ng-if="viewOnly !== !0" class="btn default bg-red" ng-click="deleteFile(f)"> <i class="fa fa-trash white"></i> </a>\n <span> {{f.name}} </span>\n </h2> \n </div>\n </div>\n </div>\n \n '}}]),app.directive("iDrag",["$document",function(e){return function(n,l,a){function d(e){r=e.screenY-o,s=e.screenX-i,l.css({top:r+"px",left:s+"px"})}function t(){e.off("mousemove",d),e.off("mouseup",t)}var i=0,o=0,s=0,r=0;l.css({position:"relative"}),l.on("mousedown",function(n){n.preventDefault(),i=n.screenX-s,o=n.screenY-r,e.on("mousemove",d),e.on("mouseup",t)})}}]),app.directive("iTreeview",["$interval","$timeout","isite",function(e,n,l){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",display:"@",display2:"@",disabled:"@",space:"@",primary:"@",ngValue:"@",ngModel:"=",ngSearch:"=",ngChange:"&",ngClick:"&",ngAdd:"&",ngNode:"&",ngEdit:"&",ngDelete:"&",nodes:"="},link:function(e,n,l,a){l.display=l.display||"name",l.primary=l.primary||"id",l.space=l.space||" ",l.ngValue=l.ngValue||"",e.source={},e.setNodes=function(n){n.nodes.forEach(n=>{n.nodes=n.nodes||[],e.nodes.forEach(e=>{if(e.$parent_id==n.id){e.v_display=e.v_display||"",e.v_display+=e[l.display];let a=!1;n.nodes.forEach(n=>{n.id==e.id&&(a=!0)}),a||n.nodes.push(e)}}),e.setNodes(n)})},e.v_nodes=[],e.$watch("ngModel",n=>{n&&(e.ngModel=n,e.ngModel.v_display=e.ngModel.v_display||n[l.display])}),e.$watch("nodes",n=>{e.v_nodes=[],n&&(n.forEach(n=>{if(n.$parent_id=n.parent_id||0,n.v_display=n.v_display||"",n.v_display+=n[l.display],
|
|
2
|
-
|
|
1
|
+
var app=app||angular.module("myApp",[]);window.$=window.jQuery,app.directive("iDate",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",$(n).find("select").focus(()=>{$(".popup").hide()}),e.days1=[];for(let n=1;n<32;n++)e.days1.push(n);e.years1=[];for(let n=1900;n<2100;n++)e.years1.push(n);e.monthes1=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"]},restrict:"E",require:"ngModel",scope:{v:"@",label:"@",disabled:"@",ngModel:"="},template:'\n <div class="row i-date">\n \n <div class=" control">\n <label> {{label}} </label>\n <div class="row">\n <div class="col3 day"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="ngModel.day" class="appearance-none no-border-left no-border-radius" >\n <option ng-repeat="d1 in days1" ng-value="d1"> {{d1}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="ngModel.month" class="appearance-none no-border-left no-border-right no-border-radius" >\n <option ng-repeat="m1 in monthes1" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n <div class="col4 year"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="ngModel.year" class="appearance-none no-border-right no-border-radius" >\n <option ng-repeat="y1 in years1" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n </div>\n </div>\n \n \n </div>\n '}}),app.directive("iDate2",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.y_search=l.year||"202",e.m_search=l.month||"",e.d_search=l.day||"",e.days1=[];for(let n=1;n<32;n++)e.days1.push({id:n,name:n});e.years1=[];for(let n=1900;n<2100;n++)e.years1.push({id:n,name:n});e.monthes1=[{id:0,name:"يناير / Jan"},{id:1,name:"فبراير / Feb"},{id:2,name:"مارس / Mar"},{id:3,name:"ابريل / Aper"},{id:4,name:"مايو / May"},{id:5,name:"يونيو / June"},{id:6,name:"يوليو / Jule"},{id:7,name:"اغسطس / Aug"},{id:8,name:"سبتمبر / Sep"},{id:9,name:"اكتوبر / Oct"},{id:10,name:"نوفمبر / Nov"},{id:11,name:"ديسمبر / Des"}],e.model=null,e.$watch("ngModel",function(n){n?(n=new Date(n),e.model=e.model||{},e.model.day=n.getDate(),e.model.day_name=e.model.day,e.model.month=n.getMonth(),e.model.month_name=e.monthes1.find(n=>n.id==e.model.month).name,e.model.year=n.getFullYear(),e.model.year_name=e.model.year):(e.model=e.model||{},e.model.day=0,e.model.day_name="",e.model.month=-1,e.model.month_name="",e.model.year=0,e.model.year_name="")}),e.setDay=function(){e.ngModel=new Date},e.updateDate=function(n){n.year?(e.model.year=n.year.id,e.model.year_name=n.year.name):n.month?(e.model.month=n.month.id,e.model.month_name=n.month.name):n.day&&(e.model.day=n.day.id,e.model.day_name=n.day.name),e.model&&e.model.year&&e.model.day&&e.model.month>-1?e.ngModel=new Date(e.model.year,e.model.month,e.model.day,0,0,0):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",disabled:"@",label:"@",ngModel:"="},template:"/*##client-side/directive-core/i-date.html*/"}}),app.directive("iTime",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.model={},e.hours=[];for(let n=1;n<25;n++)e.hours.push(n);e.minutes=[];for(let n=0;n<60;n++)e.minutes.push(n);$(n).find("select").focus(()=>{$(".popup").hide()}),e.$watch("ngModel",function(n){n?(n.date=new Date(n.date),e.model=e.model||{},e.model.hour=n.hour,e.model.minute=n.minute):(e.model=e.model||{},e.model.hour=0,e.model.minute=0)}),e.updateTime=function(){e.model?(e.ngModel=e.ngModel||{},e.ngModel.hour=e.model.hour,e.ngModel.minute=e.model.minute,e.ngModel.date=new Date(null,null,null,e.model.hour,e.model.minute,null)):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",disabled:"@",label:"@",ngModel:"="},template:'\n <div class="row i-time">\n <div class=" control ">\n <label class="text-center"> {{label}} </label>\n <div class="row">\n <div class="col6 right">\n <div class="row">\n <div class="col2"></div>\n <div class="col8">\n <select ng-disabled="disabled" ng-model="model.minute" ng-change="updateTime()" class="small appearance-none no-border-left no-border-radius" >\n <option ng-repeat="m in minutes" ng-value="m"> {{m}}</option>\n </select>\n </div>\n <div class="col2"></div>\n </div>\n \n </div>\n <div class="col6">\n <div class="row">\n <div class="col2 space right">\n <span> : </span>\n </div>\n <div class="col8">\n <select ng-disabled="disabled" ng-model="model.hour" ng-change="updateTime()" class="large blue appearance-none no-border-left no-border-radius" >\n <option ng-repeat="h in hours" ng-value="h"> {{h}} </option>\n </select>\n </div>\n \n </div>\n \n </div>\n </div>\n </div>\n '}}),app.directive("iDatetime2",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.hour1=[];for(let n=1;n<25;n++)e.hour1.push(n);e.minute_list=[];for(let n=1;n<60;n++)e.minute_list.push({name:n});e.days1=[];for(let n=1;n<32;n++)e.days1.push(n);e.years1=[];for(let n=1900;n<2100;n++)e.years1.push(n);e.monthes1=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],e.model=null,$(n).find("select").focus(()=>{$(".popup").hide()}),e.$watch("ngModel",function(n){n?(n=new Date(n),e.model=e.model||{},e.model.hour=n.getHours(),e.model.minute=n.getMinutes(),e.model.day=n.getDate(),e.model.month=n.getMonth(),e.model.year=n.getFullYear()):(e.model=e.model||{},e.model.hour=0,e.model.minute=0,e.model.day=0,e.model.month=-1,e.model.year=0)}),e.updateDate=function(){e.model&&e.model.year&&e.model.day?e.ngModel=new Date(e.model.year,e.model.month,e.model.day,e.model.hour,e.model.minute):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",disabled:"@",label:"@",ngModel:"="},template:'\n <div class="row i-datetime2">\n \n <div class=" control">\n <label> {{label}} </label>\n <div class="row">\n\n <div class="col2 day"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.day" ng-change="updateDate()" class="appearance-none no-border-left no-border-radius" >\n <option ng-repeat="d1 in days1" ng-value="d1"> {{d1}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.month" ng-change="updateDate()" class="appearance-none no-border-left no-border-right no-border-radius" >\n <option ng-repeat="m1 in monthes1" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n <div class="col3 year"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.year" ng-change="updateDate()" class="appearance-none no-border-right no-border-radius" >\n <option ng-repeat="y1 in years1" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n\n <div class="col1 hour"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.hour" ng-change="updateDate()" class="appearance-none no-border-radius" >\n <option ng-repeat="h1 in hour1" ng-value="h1"> {{h1}} </option>\n </select>\n </div>\n <div class="col1 minute"> \n <select v="{{v}}" ng-disabled="disabled" ng-model="model.minute" ng-change="updateDate()" class="green appearance-none no-border-right no-border-radius" >\n <option ng-repeat="m1 in minute_list" ng-value="m1.name" class="green"> {{m1.name}} </option>\n </select>\n </div>\n\n </div>\n </div>\n \n \n </div>\n '}}),app.directive("iMonth2",function(){return{link:function(e,n,l){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.years=[];for(let n=1900;n<2100;n++)e.years.push(n);e.monthes=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],e.model=null,$(n).find("select").focus(()=>{$(".popup").hide()}),e.$watch("ngModel",function(n){n?(n=new Date(n),e.model=e.model||{},e.model.day=1,e.model.month=n.getMonth(),e.model.year=n.getFullYear()):(e.model=e.model||{},e.model.day=0,e.model.month=-1,e.model.year=0)}),e.updateDate=function(){e.model&&e.model.year?e.ngModel=new Date(e.model.year,e.model.month,1):delete e.ngModel}},restrict:"E",require:"ngModel",scope:{v:"@",label:"@",disabled:"@",ngModel:"="},template:'\n <div class="row i-date2">\n \n <div class=" control">\n <label> {{label}} </label>\n <div class="row">\n \n <div class="col7 month"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="model.month" ng-change="updateDate()" class="appearance-none no-border-left no-border-radius" >\n <option ng-repeat="m1 in monthes" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n\n <div class="col5 year"> \n <select ng-disabled="disabled" v="{{v}}" ng-model="model.year" ng-change="updateDate()" class="appearance-none no-border-right no-border-radius" >\n <option ng-repeat="y1 in years" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n\n </div>\n </div>\n \n \n </div>\n '}}),app.directive("iFulldate",["$http",function(e){return{link:function(n,l,d,a){let i=!1;void 0!==d.disabled?d.disabled="disabled":d.disabled="",$(l).find("select").focus(()=>{$(".popup").hide()}),n.days1=[];for(let e=1;e<32;e++)n.days1.push(e);n.years1=[];for(let e=1950;e<2030;e++)n.years1.push(e);n.monthes1=["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],n.days2=[];for(let e=1;e<31;e++)n.days2.push(e);n.years2=[];for(let e=1370;e<1450;e++)n.years2.push(e);n.monthes2=["محرم","صفر","ربيع اول","ربيع ثان","جمادى اول","جمادى ثان","رجب","شعبان","رمضان","شوال","ذى القعدة","ذى الحجة"],n.model={},n.$watch("ngModel",function(e){n.model=e||{}}),n.$watch("ngModel.date",function(e){e&&("string"==typeof e&&(e=new Date(e)),n.model=n.model||{},n.model.date=e,n.model.day=e.getDate(),n.model.month=e.getMonth(),n.model.year=e.getFullYear(),n.get_hijri_date())}),n.get_hijri_date=function(){if(n.model&&n.model.year&&n.model.day){if(a.$setViewValue(n.model),i)return;i=!0,n.model.date=new Date(n.model.year,n.model.month,n.model.day),e({method:"POST",url:"/api/get_hijri_date",data:{date:n.model.year+"/"+(n.model.month+1)+"/"+n.model.day}}).then(e=>{e.data.done&&(n.model.hijri=e.data.hijri,n.model.day2=parseInt(n.model.hijri.split("/")[2]),n.model.month2=parseInt(n.model.hijri.split("/")[1])-1,n.model.year2=parseInt(n.model.hijri.split("/")[0]),a.$setViewValue(n.model),i=!1)}).catch(()=>{i=!1})}},n.get_normal_date=function(){if(n.model&&n.model.year2&&n.model.day2){if(a.$setViewValue(n.model),i)return;i=!0,e({method:"POST",url:"/api/get_normal_date",data:{hijri:n.model.year2+"/"+(n.model.month2+1)+"/"+n.model.day2}}).then(e=>{e.data.done&&(n.model.date=new Date(e.data.date),n.model.day=parseInt(e.data.date.split("/")[2]),n.model.month=parseInt(e.data.date.split("/")[1])-1,n.model.year=parseInt(e.data.date.split("/")[0]),a.$setViewValue(n.model),i=!1)}).catch(()=>{i=!1})}}},restrict:"E",require:"ngModel",scope:{v:"@",label1:"@",label2:"@",disabled:"@",ngModel:"=",ngChange:"&"},template:'\n <div class="row i-date">\n \n <div class="col6 control">\n <label> {{label1}} </label>\n <div class="row">\n <div class="col3 day"> \n <select ng-change="get_hijri_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.day" class="appearance-none no-border-left no-border-radius">\n <option ng-repeat="d1 in days1" ng-value="d1"> {{d1}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select ng-change="get_hijri_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.month" class="appearance-none no-border-left no-border-right no-border-radius">\n <option ng-repeat="m1 in monthes1" ng-value="$index"> {{m1}} </option>\n </select>\n </div>\n <div class="col4 year"> \n <select ng-change="get_hijri_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.year" class="appearance-none no-border-right no-border-radius">\n <option ng-repeat="y1 in years1" ng-value="y1"> {{y1}} </option>\n </select>\n </div>\n </div>\n </div>\n \n <div class="col6 control">\n <label> {{label2}} </label>\n <div class="row">\n <div class="col3 day"> \n <select ng-change="get_normal_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.day2" class="appearance-none no-border-left no-border-radius">\n <option ng-repeat="d2 in days2" ng-value="d2"> {{d2}} </option>\n </select>\n </div>\n <div class="col5 month"> \n <select ng-change="get_normal_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.month2" class="appearance-none no-border-left no-border-right no-border-radius">\n <option ng-repeat="m2 in monthes2" ng-value="$index"> {{m2}} </option>\n </select>\n </div>\n <div class="col4 year"> \n <select ng-change="get_normal_date()" ng-disabled="disabled" v="{{v}}" ng-model="model.year2" class="appearance-none no-border-right no-border-radius">\n <option ng-repeat="y2 in years2" ng-value="y2"> {{y2}} </option>\n </select>\n </div>\n </div>\n </div>\n \n </div>\n '}}]),app.directive("iControl",function(){return{restrict:"E",require:"ngModel",scope:{v:"@",id2:"@",label:"@",type:"@",disabled:"@",ngModel:"=",ngChange:"&",ngKeydown:"&"},link:function(e,n,l,d){l.type=l.type||"text",void 0!==l.disabled?l.disabled="disabled":l.disabled="",$(n).find("input").focus(()=>{$(".i-list .dropdown-content").css("display","none")}),e.$watch(l.ngModel,function(e){})},template:'\n <div class="control">\n <label> {{label}} </label>\n <input id="{{id2}}" ng-disabled="disabled" autofocus v="{{v}}" type="{{type}}" ng-model="ngModel" ng-change="ngChange()" ngKeydown="ngKeydown()">\n </div>\n '}}),app.directive("iTextarea",function(){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",disabled:"@",rows:"@",ngModel:"=",ngChange:"&"},link:function(e,n,l,d){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.rows=e.rows||4,$(n).find("textarea").focus(()=>{$(".popup").hide()})},template:'\n <div class="control">\n <label> {{label}} </label>\n <textarea ng-disabled="disabled" rows="{{rows}}" v="{{v}}" ng-model="ngModel" ng-change="ngChange()"></textarea>\n </div>\n '}}),app.directive("iCheckbox",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngModel:"=",ngChange:"&"},link:function(e,n,l,d){void 0!==l.disabled?l.disabled="disabled":l.disabled="",e.updateModal=function(n){return"disabled"!=l.disabled&&(e.ngModel=!n,!0)}},template:'\n <div class="selector" ng-class="{\'selected\' : ngModel , \'un-selected\' : !ngModel }" ng-click="updateModal(ngModel);ngChange($event , ngModel)">\n <i ng-show="!ngModel" class="fa fa-square"></i> <i ng-show="ngModel" class="fa fa-check"></i> {{label}}\n </div>\n '}}),app.directive("iCheckbox2",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngModel:"="},link:function(e,n,l,d){},template:'\n <div class="control">\n <label class="checkbox">\n <span class="title"> {{label}} </span>\n <input type="checkbox" ng-model="ngModel" >\n <span class="checkmark"></span>\n </label>\n </div>\n '}}),app.directive("iRadio",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngValue:"@",group:"@",ngModel:"="},link:function(e,n,l,d){l.group||(l.group=l.ngModel),e.changeModal=function(n){e.ngModel=n},e.$watch("ngModel",n=>{n&&e.ngValue}),e.$watch("ngValue",n=>{n&&e.ngModel})},template:'\n <div group="{{group}}" class="selector" ng-class="{\'selected\' : ngModel == ngValue , \'un-selected\' : ngModel != ngValue }" ng-click="changeModal(ngValue);ngChange($event , ngModel , ngValue)">\n <i ng-show="ngModel != ngValue" class="fa fa-circle"></i> <i ng-show="ngModel == ngValue" class="fa fa-circle"></i> {{label}}\n </div>\n '}}),app.directive("iRadio2",function(){return{restrict:"E",require:"ngModel",scope:{label:"@",ngValue:"@",group:"@",ngModel:"="},link:function(e,n,l,d){l.group||(l.group=l.ngModel);let a=$(n).find("input");e.$watch("ngModel",n=>{n&&(e.ngModel=n,n==e.ngValue&&a.prop("checked",!0))}),e.$watch("ngValue",n=>{n&&n==e.ngModel&&a.prop("checked",!0)})},template:'\n <div class="control">\n <label class="radio">\n <span > {{label}} </span>\n <input name="{{group}}" ng-value="ngValue" type="radio" ng-model="ngModel" >\n <span class="checkmark"></span>\n </label>\n </div>\n '}}),app.directive("iButton",function(){return{restrict:"E",scope:{label:"@",type:"@",click:"@",fa:"@"},link:function(e,n,l,d){!l.fa&&l.type&&(l.type.like("*exit*")||l.type.like("*close*")?l.fa="times":l.type.like("*view*")||l.type.like("*details*")?l.fa="file":l.type.like("*add*")||l.type.like("*new*")?l.fa="plus-circle":l.type.like("*update*")||l.type.like("*edit*")?l.fa="edit":l.type.like("*save*")?l.fa="save":l.type.like("*delete*")||l.type.like("*remove*")?l.fa="trash":l.type.like("*print*")?l.fa="print":l.type.like("*search*")?l.fa="search":(l.type.like("*export*")||l.type.like("*excel*"))&&(l.fa="table"))},template:'\n <a class="btn {{type}}">\n {{label}}\n <i ng-show="fa" class="fa fa-{{fa}}" aria-hidden="true"></i> </a>\n '}}),app.directive("iList",["$interval","$timeout","isite",function(e,n,l){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",display:"@",display2:"@",disabled:"@",css:"@",space:"@",primary:"@",ngValue:"@",ngModel:"=",ngSearch:"=",ngChange:"&",ngAdd:"&",items:"="},link:function(e,d,a,i){e.display=a.display=a.display||"name",e.primary=a.primary=a.primary||"id",a.space=a.space||" ",a.ngValue=a.ngValue||"",e.searchElement=$(d).find(".dropdown .search"),e.popupElement=$(d).find(".dropdown .dropdown-content"),void 0!==a.disabled?a.disabled="disabled":a.disabled="",void 0===a.ngAdd?e.fa_add="fa-search":e.fa_add="fa-plus",void 0===a.ngSearch?e.showSearch=!1:e.showSearch=!0;let t=$(d).find("input");$(d).hover(()=>{e.popupElement.css("display","block")},()=>{e.popupElement.css("display","none")}),e.focus=function(){$(".i-list .dropdown-content").css("display","none"),e.popupElement.css("display","block"),e.searchElement.focus()},e.hide=function(){e.popupElement.css("display","none")},e.getValue=function(n){let d=l.getValue(n,e.display);return d||""},e.getValue2=function(n){return e.display2&&l.getValue(n,e.display2)||""},e.getNgModelValue=function(n){return n&&e.display&&e.ngValue?l.getValue(n,e.display.replace(e.ngValue+".",""))||"":n&&e.display&&l.getValue(n,e.display)||""},e.getNgModelValue2=function(n){return n&&e.display2&&e.ngValue?l.getValue(n,e.display2.replace(e.ngValue+".",""))||"":n&&e.display2&&l.getValue(n,e.display2)||""},e.getNgValue=function(n){return n&&e.ngValue?l.getValue(n,e.ngValue):n},e.$watch("items",n=>{t.val(""),n&&n.forEach(n=>{n.$display=e.getValue(n)+a.space+e.getValue2(n)}),n&&e.ngModel&&n.forEach(n=>{l.getValue(n,e.primary)==l.getValue(e.ngModel,e.primary)&&(e.ngModel=n,n.$display=e.getValue(n)+a.space+e.getValue2(n),t.val(n.$display))})}),e.$watch("ngModel",n=>{t.val(""),e.ngModel=n,n&&t.val(" "+e.getNgModelValue(n)+a.space+e.getNgModelValue2(n))}),e.updateModel=function(l){e.ngModel=e.getNgValue(l,e.ngValue),t.val(e.getNgModelValue(e.ngModel)+a.space+e.getNgModelValue2(e.ngModel)),n(()=>{e.ngChange()}),e.hide()}},template:"/*##client-side/directive-core/i-list.html*/"}}]),app.directive("iChecklist",["$interval",function(e){return{restrict:"E",required:"ngModel",scope:{label:"@",primary:"@",display:"@",ngModel:"=",items:"=",like:"&"},link:function(e,n,l,d){l.primary=l.primary||"id",e.selectedItems=[],e.$watch("ngModel",n=>{e.reload()}),e.reload=function(){e.selectedItems=[],e.ngModel&&(e.ngModel.forEach(n=>{e.selectedItems.push(n)}),e.items&&e.items.forEach(n=>{let l=!1;e.selectedItems.forEach(d=>{n[e.primary]===d[e.primary]&&(l=!0)}),n.$selected=!!l})),e.ngModel||(e.selectedItems=[],e.items&&e.items.forEach(e=>{e.$selected=!1}))},e.change=function(n){if(n.$selected=!n.$selected,n.$selected){let l=!1;e.selectedItems.forEach(d=>{d[e.primary]===n[e.primary]&&(l=!0)}),l||e.selectedItems.push(n)}else e.selectedItems.forEach((l,d)=>{l[e.primary]===n[e.primary]&&e.selectedItems.splice(d,1)});e.ngModel=e.selectedItems}},template:'\n <div class="row padding check-list">\n <label class="title"> {{label}} </label>\n <div ng-repeat="item in items" ng-click="change(item);ngChange($event , item);" class="selector" ng-class="{\'selected\' : item.$selected , \'un-selected\' : !item.$selected }" >\n <i ng-show="!item.$selected" class="fa fa-square"></i> <i ng-show="item.$selected" class="fa fa-check"></i> {{item[display]}}\n </div>\n </div>\n '}}]),app.directive("iChecklist2",["$interval",function(e){return{restrict:"E",required:"ngModel",scope:{label:"@",primary:"@",display:"@",ngModel:"=",items:"=",like:"&"},link:function(e,n,l,d){l.primary=l.primary||"id",e.selectedItems=[],e.$watch("ngModel",n=>{e.reload()}),e.reload=function(){e.selectedItems=[],e.ngModel&&(e.ngModel.forEach(n=>{e.selectedItems.push(n)}),e.items&&e.items.forEach(n=>{let l=!1;e.selectedItems.forEach(d=>{n[e.primary]===d[e.primary]&&(l=!0)}),n.$selected=!!l})),e.ngModel||(e.selectedItems=[],e.items&&e.items.forEach(e=>{e.$selected=!1}))},e.change=function(n){if(n.$selected){let l=!1;e.selectedItems.forEach(d=>{d[e.primary]===n[e.primary]&&(l=!0)}),l||e.selectedItems.push(n)}else e.selectedItems.forEach((l,d)=>{l[e.primary]===n[e.primary]&&e.selectedItems.splice(d,1)});e.ngModel=e.selectedItems}},template:'\n <div class="row padding check-list">\n <label class="title"> {{label}} </label>\n <div class="control" ng-repeat="item in items">\n <label class="checkbox" >\n <span > {{item[display]}} </span>\n <input type="checkbox" ng-model="item.$selected" ng-change="change(item)" >\n <span class="checkmark"></span>\n </label>\n </div>\n </div>\n '}}]),app.directive("iRadiolist",["$interval",function(e){return{restrict:"E",required:"ngModel",scope:{label:"@",display:"@",ngModel:"=",items:"="},link:function(e,n,l){e.model=e.ngModel,e.code="radio_"+Math.random(),e.change=function(n){e.ngModel=n},e.isChecked=function(n){return!(!n||!e.ngModel||e.ngModel.id!==n.id)}},template:'\n <div class="row padding radio-list">\n <label class="title"> {{label}} </label>\n <div class="control" ng-repeat="item in items">\n <label class="radio" >\n <span > {{item[display]}} </span>\n <input name="{{code}}" type="radio" ng-model="model" ng-checked="isChecked(item)" ng-click="change(item)" ng-change="change(item)" >\n <span class="checkmark"></span>\n </label>\n </div>\n </div>\n '}}]),app.directive("iFile",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{label:"@",type:"@",ngModel:"=",ngClick:"&",onSelected:"&"},link:function(e,n,l,d){e.type=e.type||"bg-green";let a=$(n).find("input")[0],i=$(n).find("a")[0];""!==l.view&&i.addEventListener("click",function(){a.click()}),a.addEventListener("change",function(){e.ngModel=this.files[0].path,e.onSelected(this.files[0].path),e.$applyAsync()}),e.$watch("ngModel",e=>{e&&i.setAttribute("url",e)})},template:'\n <form class="form text-center pointer">\n <input class="hidden" type="file" name="file" />\n <a class="btn {{type}}" ngClick="ngClick()" url="{{ngModel}}"> {{label}} </a>\n </form>\n '}}]),app.directive("iImage",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{category:"@",ngModel:"=",ngClick:"&"},link:function(e,l,d,a){e.category=e.category||"default";let i=$(l).find("input")[0],t=$(l).find("img")[0],o=$(l).find("progress")[0];$(o).hide(),""!==d.view&&t.addEventListener("click",function(){i.click()}),i.addEventListener("change",function(){n.uploadImage(this.files,{category:e.category},(n,l,d)=>{d&&($(o).show(),o.value=d.loaded,o.max=d.total),l&&(e.ngModel=l.url)})}),e.$watch("ngModel",e=>{e&&t.setAttribute("src",e)})},template:'\n <form class="form text-center pointer">\n <input class="hidden" type="file" name="file" />\n <img class="bg-white" ng-src="{{ngModel}}" ngClick="ngClick()" onerror="this.src=\'/images/no.jpg\'" />\n <progress class="row"></progress>\n </form>\n '}}]),app.directive("iUpload",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{label:"@",api:"@",type:"@",ngModel:"=",ngClick:"&",onUploaded:"&"},link:function(e,l,d,a){e.type=e.type||"bg-green";let i=$(l).find("input")[0],t=$(l).find("a")[0],o=$(l).find("progress")[0];$(o).hide(),""!==d.view&&t.addEventListener("click",function(){i.click()}),i.addEventListener("change",function(){n.upload(this.files,{api:e.api},(n,l,d)=>{d&&($(o).show(),o.value=d.loaded,o.max=d.total),l&&(e.ngModel=l.url,e.onUploaded())})}),e.$watch("ngModel",e=>{e&&t.setAttribute("url",e)})},template:'\n <form class="form text-center pointer">\n <input class="hidden" type="file" name="file" />\n <a class="btn {{type}}" ngClick="ngClick()" url="{{ngModel}}"> {{label}} </a>\n <progress class="row"></progress>\n </form>\n '}}]),app.directive("iFiles",["$interval","isite",function(e,n){return{restrict:"E",required:"ngModel",scope:{category:"@",label:"@",ngModel:"="},link:function(l,d,a,i){""===a.view&&(l.viewOnly=!0);let t=$(d).find("progress")[0];l.category=l.category||"default",l.id=Math.random().toString().replace(".","_"),l.deleteFile=function(e){n.deleteFile(e,()=>{for(let n=0;n<l.ngModel.length;n++){let d=l.ngModel[n];if(d.url===e.url)return void l.ngModel.splice(n,1)}})};let o=!1;e(()=>{if(!o)if(""!==a.view){let e=document.querySelector("#btn_"+l.id);e&&(o=!0,e.addEventListener("click",function(){document.querySelector("#input_"+l.id).click()}));let d=document.querySelector("#input_"+l.id);d&&d.addEventListener("change",function(){n.uploadFile(this.files,{category:l.category},(e,n,d)=>{d&&($(t).show(),t.value=d.loaded,t.max=d.total),n&&(void 0===l.ngModel&&(l.ngModel=[]),l.ngModel.push(n.url))})})}else o=!0},500)},template:'\n <div class="files">\n <label> {{label}} </label>\n <form ng-if="viewOnly !== !0" id="img_{{id}}" class="form text-center pointer">\n <input id="input_{{id}}" class="hidden" type="file" name="file" />\n <a id="btn_{{id}}" class="btn bg-green"> <i class="fa fa-upload white"></i> </a>\n </form>\n <progress class="row"></progress>\n <div class="padding">\n \n <div class="row padding" ng-repeat="f in ngModel">\n <h2> \n <a class="btn default bg-blue" href="{{f.url}}"> <i class="fa fa-2x fa-download white"></i> </a>\n <a ng-if="viewOnly !== !0" class="btn default bg-red" ng-click="deleteFile(f)"> <i class="fa fa-trash white"></i> </a>\n <span> {{f.name}} </span>\n </h2> \n </div>\n </div>\n </div>\n \n '}}]),app.directive("iDrag",["$document",function(e){return function(n,l,d){function a(e){r=e.screenY-o,s=e.screenX-t,l.css({top:r+"px",left:s+"px"})}function i(){e.off("mousemove",a),e.off("mouseup",i)}var t=0,o=0,s=0,r=0;l.css({position:"relative"}),l.on("mousedown",function(n){n.preventDefault(),t=n.screenX-s,o=n.screenY-r,e.on("mousemove",a),e.on("mouseup",i)})}}]),app.directive("iTreeview",["$interval","$timeout","isite",function(e,n,l){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",display:"@",display2:"@",disabled:"@",space:"@",primary:"@",ngValue:"@",ngModel:"=",ngSearch:"=",ngChange:"&",ngClick:"&",ngAdd:"&",ngNode:"&",ngEdit:"&",ngDelete:"&",nodes:"="},link:function(e,n,l,d){l.display=l.display||"name",l.primary=l.primary||"id",l.space=l.space||" ",l.ngValue=l.ngValue||"",e.source={},e.setNodes=function(n){n.nodes.forEach(n=>{n.nodes=n.nodes||[],e.nodes.forEach(e=>{if(e.$parent_id==n.id){e.v_display=e.v_display||"",e.v_display+=e[l.display];let d=!1;n.nodes.forEach(n=>{n.id==e.id&&(d=!0)}),d||n.nodes.push(e)}}),e.setNodes(n)})},e.v_nodes=[],e.$watch("ngModel",n=>{n&&(e.ngModel=n,e.ngModel.v_display=e.ngModel.v_display||n[l.display])}),e.$watch("nodes",n=>{e.v_nodes=[],n&&(n.forEach(n=>{if(n.$parent_id=n.parent_id||0,n.v_display=n.v_display||"",n.v_display+=n[l.display],0==n.$parent_id){let l=!1;e.v_nodes.forEach(e=>{e.id==n.id&&(l=!0)}),l||e.v_nodes.push(n)}}),e.v_nodes.forEach(d=>{d.nodes=d.nodes||[],n.forEach(e=>{if(e.$parent_id=e.parent_id||0,e.$parent_id==d.id){e.v_display=e.v_display||"",e.v_display+=e[l.display];let n=!1;d.nodes.forEach(l=>{l.id==e.id&&(n=!0)}),n||d.nodes.push(e)}}),e.setNodes(d)}))})},template:'\n <div class="treeview">\n <ul >\n <li ng-dblclick="$event.preventDefault();$event.stopPropagation();source.$actions = !0" ng-mouseleave="source.$actions = !1">\n \n <i ng-hide="openTree" class="fa fa-folder"></i> <i ng-show="openTree" class="fa fa-folder"></i> \n \n\n <span ng-click="openTree = !openTree" class="title"> {{label}} <small class="display"> [ {{ngModel.v_display}} ] </small> </span>\n <div class="actions" ng-show="source.$actions === !0">\n <i-button type="add default" ng-click="ngClick($event , ngModel);ngNode($event , ngModel)"></i-button>\n </div>\n <i-treenode display="{{display}}" ng-click="ngClick($event)" ng-add="ngAdd()" ng-edit="ngEdit()" ng-delete="ngDelete()" ng-show="openTree" ng-model="ngModel" nodes="v_nodes" ></i-treenode>\n </li>\n </ul>\n </div>\n '}}]),app.directive("iTreenode",["$interval","$timeout","isite",function(e,n,l){return{restrict:"E",require:"ngModel",scope:{v:"@",label:"@",display:"@",display2:"@",disabled:"@",space:"@",primary:"@",ngValue:"@",ngChange:"&",ngClick:"&",ngAdd:"&",ngEdit:"&",ngDelete:"&",ngModel:"=",ngSearch:"=",nodes:"=",nodes:"="},link:function(e,n,l,d){l.display=l.display||"name",l.primary=l.primary||"id",l.space=l.space||" ",l.ngValue=l.ngValue||"",e.nodes=e.nodes||[],e.v_nodes=[],e.$watch("nodes",n=>{e.v_nodes=[],n&&n.forEach((e,n)=>{
|
|
2
|
+
e.nodes&&e.nodes.forEach((n,d)=>{n.$parent_id=n.parent_id||e.id,n.v_display=e.v_display||" ",n.v_display+=" - "+n[l.display]})})}),e.updateParentModal=function(n,l){n&&(n.ngModel=l,n.$parent&&e.updateParentModal(n.$parent,l))},e.unSelectParent=function(n){n&&n.nodes&&(n.nodes.forEach(e=>{e.$selected=!1}),n.$parent&&e.unSelectParent(n.$parent))},e.unSelectNodes=function(n){n&&n.forEach(n=>{n.$selected=!1,n.nodes&&e.unSelectNodes(n.nodes)})},e.updateModal=function(n){e.ngModel=n,e.updateParentModal(e.$parent,n)},e.selected=function(n){e.unSelectParent(e.$parent),e.unSelectNodes(e.nodes),n.nodes&&n.nodes.forEach(e=>{e.$selected=!1}),n.$selected=!0}},template:'\n <div class="treenode"> \n <ul >\n <li ng-repeat="node in nodes" >\n <div class="row" ng-dblclick="$event.preventDefault();$event.stopPropagation();node.$actions = !0;source.$actions = !1" ng-mouseleave="node.$actions = !1">\n <span ng-show="node.nodes.length > 0" ng-click="node.$expand = !node.$expand;">\n <i ng-hide="node.$expand" class="fa fa-caret-left"></i> <i ng-show="node.$expand" class="fa fa-caret-down"></i> \n </span>\n <span ng-hide="node.nodes.length > 0" >\n <i class="fa fa-file"></i>\n </span>\n\n <span class="text" ng-class="{\'selected\' : node.$selected == !0}" ng-click="ngClick($event , node);node.$expand = !node.$expand;selected(node);updateModal(node)" > {{node[display]}} </span>\n <div class="actions" ng-show="node.$actions === !0">\n <i-button type="add default" ng-click="ngAdd(node)"></i-button>\n <i-button type="edit default" ng-click="ngEdit(node)"></i-button>\n <i-button type="delete default" ng-click="ngDelete(node)"></i-button>\n </div>\n </div> \n <i-treenode display="{{display}}" ng-click="ngClick($event)" ng-add="ngAdd()" ng-edit="ngEdit()" ng-delete="ngDelete()" ng-show="node.$expand" ng-model="ngModel" nodes="node.nodes" nodes="node.nodes"></i-treenode>\n </li>\n </ul>\n </div>\n '}}]);
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
|
|
111
111
|
return site.printerList;
|
|
112
112
|
};
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
site.render = function (selector, data) {
|
|
115
115
|
let template = document.querySelector(selector);
|
|
116
116
|
if (template) {
|
|
@@ -543,6 +543,13 @@
|
|
|
543
543
|
return newData;
|
|
544
544
|
};
|
|
545
545
|
|
|
546
|
+
site.hide = function (obj) {
|
|
547
|
+
return site.to123(obj);
|
|
548
|
+
};
|
|
549
|
+
site.show = function (obj) {
|
|
550
|
+
return JSON.parse(site.from123(obj));
|
|
551
|
+
};
|
|
552
|
+
|
|
546
553
|
site.typeOf = site.typeof = function type(elem) {
|
|
547
554
|
return Object.prototype.toString.call(elem).slice(8, -1);
|
|
548
555
|
};
|
|
@@ -609,6 +616,15 @@
|
|
|
609
616
|
return '';
|
|
610
617
|
};
|
|
611
618
|
|
|
619
|
+
site.resetValidated = function (s) {
|
|
620
|
+
s = s || 'body';
|
|
621
|
+
const arr = document.querySelectorAll(s + ' [v]');
|
|
622
|
+
arr.forEach((el) => {
|
|
623
|
+
el.classList.remove('is-invalid');
|
|
624
|
+
el.classList.remove('is-valid');
|
|
625
|
+
});
|
|
626
|
+
};
|
|
627
|
+
|
|
612
628
|
site.validated = function (s) {
|
|
613
629
|
const res = {
|
|
614
630
|
ok: !0,
|
|
@@ -625,7 +641,7 @@
|
|
|
625
641
|
vList.forEach((vl) => {
|
|
626
642
|
vl = vl.toLowerCase().trim();
|
|
627
643
|
if (vl === 'r') {
|
|
628
|
-
if ((el.nodeName === 'INPUT' || el.nodeName === 'SELECT') && (!el.value || el.value.like('*undefined*'))) {
|
|
644
|
+
if ((el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.like('*undefined*'))) {
|
|
629
645
|
el.classList.add('is-invalid');
|
|
630
646
|
if ((f = el.parentNode.querySelector('.invalid-feedback'))) {
|
|
631
647
|
if (site.session && site.session.lang == 'en') {
|
|
@@ -639,7 +655,14 @@
|
|
|
639
655
|
en: 'Data Is Required',
|
|
640
656
|
ar: 'هذا البيان مطلوب',
|
|
641
657
|
});
|
|
642
|
-
}
|
|
658
|
+
} if (el.nodeName === 'I-DATETIME' && !el.getAttribute('value')){
|
|
659
|
+
el.classList.add('is-invalid');
|
|
660
|
+
res.ok = !1;
|
|
661
|
+
res.messages.push({
|
|
662
|
+
en: 'Data Is Required',
|
|
663
|
+
ar: 'هذا البيان مطلوب',
|
|
664
|
+
});
|
|
665
|
+
} else {
|
|
643
666
|
el.classList.add('is-valid');
|
|
644
667
|
}
|
|
645
668
|
} else if (vl.like('ml*')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(t,e,n,r){function o(t){return t?("string"!=typeof t&&(t=t.toString()),t.replace(/[\/\\^$*+?.()\[\]{}]/g,"\\$&")):""}function a(t,e){let n="";return g.forEach(r=>{r.n==t&&(n=r.i0[e])}),n}function l(t,e){let n="";return 11==t?g.forEach(r=>{r.n==t&&(n=r.i0[e])}):12==t?g.forEach(r=>{r.n==t&&(n=r.i0[e])}):(g.forEach(r=>{r.n==t[1]&&(n=r.i0[e])}),g.forEach(r=>{r.n==t[0]&&(t[1]>0&&t[0]>1?n+=p.strings.space[e]+p.strings.and[e]:n+="",n+=r.i1[e])})),n}function s(t,e){let n="";g.forEach(r=>{r.n==t[0]&&(n=r.i2[e]+p.strings.space[e])});let r=l(t.substring(1),e);return r&&(n&&(n+=p.strings.and[e]),n+=r),n}function c(t,e){let n="";g.forEach(r=>{r.n==t[0]&&(n=r.i3[e]+p.strings.space[e])});let r=s(t.substring(1),e);return r&&(n&&(n+=p.strings.and[e]),n+=r),n}function u(t,e){let n=l(t.substring(0,2),e)+p.strings.space[e];1==t[0]?n+=p.strings[10][e]+p.strings.space[e]:n+=p.strings[20][e]+p.strings.space[e];let r=s(t.substring(2),e);return r&&(n+=p.strings.and[e]+r),n}function f(t,e){let n=s(t.substring(0,3),e)+p.strings.space[e];n+=p.strings[100][e]+p.strings.space[e];let r=s(t.substring(3),e);return r&&(n+=p.strings.and[e]+r),n}if(String.prototype.test||(String.prototype.test=function(t,e="gium"){try{return new RegExp(t,e).test(this)}catch(t){return!1}}),String.prototype.like||(String.prototype.like=function(t){if(!t)return!1;let e=!1;return t.split("|").forEach(t=>{t=t.split("*"),t.forEach((e,n)=>{t[n]=o(e)}),t=t.join(".*"),this.test("^"+t+"$","gium")&&(e=!0)}),e}),String.prototype.contains||(String.prototype.contains=function(t){let e=!1;return t?(t.split("|").forEach(t=>{t&&this.test("^.*"+o(t)+".*$","gium")&&(e=!0)}),e):e}),"object"==typeof SOCIALBROWSER){if(SOCIALBROWSER.var=SOCIALBROWSER.var||{},SOCIALBROWSER.var.white_list=SOCIALBROWSER.var.white_list||[],e.location.hostname){let t=`*${e.location.hostname}*`,n=!1;SOCIALBROWSER.var.white_list.forEach(e=>{e.url==t&&(n=!0)}),n||(SOCIALBROWSER.var.white_list.push({url:t}),SOCIALBROWSER.call("set_var",{name:"white_list",data:SOCIALBROWSER.var.white_list}))}SOCIALBROWSER.var.blocking=SOCIALBROWSER.var.blocking||{},SOCIALBROWSER.var.blocking.block_ads=!1,SOCIALBROWSER.var.blocking.block_empty_iframe=!1,SOCIALBROWSER.var.blocking.remove_external_iframe=!1,SOCIALBROWSER.var.blocking.skip_video_ads=!1,SOCIALBROWSER.var.blocking.popup=SOCIALBROWSER.var.blocking.popup||{},SOCIALBROWSER.var.blocking.popup.allow_external=!0,SOCIALBROWSER.var.blocking.popup.allow_internal=!0,SOCIALBROWSER.var.blocking.javascript=SOCIALBROWSER.var.blocking.javascript||{},SOCIALBROWSER.var.blocking.javascript.block_window_open=!1,SOCIALBROWSER.var.blocking.javascript.block_eval=!1,SOCIALBROWSER.var.blocking.javascript.block_console_output=!1}let p={render:function(t,n){let r=e.querySelector(t);return r?Mustache.render(r.innerHTML,n):""},html:function(t,e){return Mustache.render(t,e)},getUniqueObjects:function(t,e){const n=t.map(t=>t[e]).map((t,e,n)=>n.indexOf(t)===e&&e).filter(e=>t[e]).map(e=>t[e]);return n},$:function(t){let n=e.querySelectorAll(t);return n}},d=999999;p.showModal=function(e){r(e).click(()=>{r("popup").hide()}),d++;let n=p.$(e);if(0===n.length)return;n[0].style.zIndex=d,n[0].style.display="block";let o=n[0].getAttribute("fixed");""!==o&&n[0].addEventListener("click",function(){p.hideModal(e)});let a=p.$(e+" i-control input");a.length>0&&a[0].focus(),p.$(e+" .close").forEach(t=>{t.addEventListener("click",function(){p.hideModal(e)})}),p.$(e+" .modal-header").forEach(e=>{e.addEventListener("click",function(e){e=e||t.event,e.stopPropagation()})}),p.$(e+" .modal-body").forEach(e=>{e.addEventListener("click",function(e){e=e||t.event,e.stopPropagation()})}),p.$(e+" .modal-footer").forEach(e=>{e.addEventListener("click",function(e){e=e||t.event,e.stopPropagation()})})},p.hideModal=function(t){r("popup").hide();let e=p.$(t);e.length>0&&(e[0].style.display="none")},p.eventList=[],p.on=function(t,e){e=e||function(){},p.eventList.push({name:t,callback:e})},p.call=function(t,e){for(var n=0;n<p.eventList.length;n++){var r=p.eventList[n];r.name==t&&r.callback(e)}},p.translate=function(t,e){"string"==typeof t&&(t={text:t,lang:"ar"}),t.url=`https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${t.lang}&dt=t&dt=bd&dj=1&q=${t.text}`,p.getData(t,e)},p.getData=function(t,e,n){e=e||function(){},n=n||function(){},"string"==typeof t&&(t={url:t}),t.headers=t.headers||{Accept:"application/json","Content-Type":"application/json"},t.url=p.handle_url(t.url),fetch(t.url,{mode:"cors",method:"get",headers:t.headers}).then(t=>t.json()).then(t=>{e(t)}).catch(t=>{n(t)})},p.getContent=function(t,e,n){e=e||function(){},n=n||function(){},"string"==typeof t&&(t={url:t}),t.url=p.handle_url(t.url),fetch(t.url,{mode:"cors",method:"get"}).then(function(t){return t.text()}).then(function(t){e(t)})},p.handle_url=function(e){if("string"!=typeof e)return e;if(e=e.trim(),e.like("http*")||0===e.indexOf("//")||0===e.indexOf("data:"))e=e;else if(0===e.indexOf("/"))e=t.location.origin+e;else if(e.split("?")[0].split(".").length<3){let n=t.location.pathname.split("/").pop();e=t.location.origin+t.location.pathname.replace(n,"")+e}return e},p.postData=function(n,r,o){r=r||function(){},o=o||function(){},"string"==typeof n&&(n={url:n}),n.data=n.data||n.body,delete n.body,n.data&&"object"==typeof n.data&&(n.data=JSON.stringify(n.data)),n.headers=n.headers||{Accept:"application/json","Content-Type":"application/json"},n.data&&"string"==typeof n.data&&(n.headers["Content-Length"]=n.data.length.toString());try{n.headers.Cookie=e.cookie}catch(o){console.log(o)}n.method="post",n.redirect="follow",n.mode="cors",n.url=p.handle_url(n.url),t.SOCIALBROWSER&&t.SOCIALBROWSER.fetchJson?SOCIALBROWSER.fetchJson(n,t=>{r(t)}):fetch(n.url,{mode:n.mode,method:n.method,headers:n.headers,body:n.data,redirect:n.redirect}).then(t=>t.json()).then(t=>{r(t)}).catch(t=>{o(t)})},p.typeOf=function(t){return Object.prototype.toString.call(t).slice(8,-1)},p.toDateTime=function(t){return t?new Date(t):new Date},p.toDateX=function(t){let e=p.toDateTime(t);return e.getFullYear()+"-"+(e.getMonth()+1)+"-"+e.getDate()},p.toDateXT=function(t){let e=p.toDateTime(t);return e.getHours()+":"+e.getMinutes()+":"+e.getSeconds()},p.toDateXF=function(t){let e=p.toDateTime(t);return e.getFullYear()+"-"+(e.getMonth()+1)+"-"+e.getDate()+" "+e.getHours()+":"+e.getMinutes()+":"+e.getSeconds()},p.toDateOnly=function(t){let e=p.toDateTime(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0)},p.toDateT=function(t){return p.toDateOnly(t).getTime()},p.toDateF=function(t){return p.toDateTime(t).getTime()},p.addZero=function(t,e){let n=e-t.toString().length;for(let e=0;e<n;e++)t="0"+t.toString();return t},p.addSubZero=function(t,e){let n=e;if(2==t.toString().split(".").length){t.toString().split(".")[1].length;t=t.toString()}else t=t.toString()+".";for(let e=0;e<n;e++)t=t.toString()+0;return t},p.fixed=2,p.to_number=p.toNumber=function(t,e){let n=e||p.fixed,r=0;return t&&(r=parseFloat(t).toFixed(n)),parseFloat(r)},p.to_money=p.toMoney=function(t,e=!0){let n=0;if(t){t=t.toFixed(2).split(".");t[0];let e=t[1]||"00";if(e){let n=e[0]||"0",r=e[1]||"0";r&&parseInt(r)>5?(n=parseInt(n)+1,n*=10,100==n?(n=0,t[0]=parseInt(t[0])+1,t[1]=""):t[1]=n):r&&5==parseInt(r)?t[1]=e:r&&parseInt(r)>2?(r=5,t[1]=n+r):t[1]=n+"0"}n=t.join(".")}return e?p.to_float(n):n},p.to_float=p.toFloat=function(t){return t?parseFloat(t):0},p.to_int=p.toInt=function(t){return t?parseInt(t):0},p.$base64Letter="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",p.$base64Numbers=[];for(let t=11;t<99;t++)t%10!=0&&t%11!=0&&p.$base64Numbers.push(t);p.toJson=(t=>typeof t===n||null===t?"":JSON.stringify(t)),p.fromJson=(t=>"string"!=typeof t?t:JSON.parse(t)),p.toBase64=(t=>typeof t===n||null===t||""===t?"":("string"!=typeof t&&(t=p.toJson(t)),Base64.encode(t))),p.fromBase64=(t=>typeof t===n||null===t||""===t?"":Base64.decode(t)),p.to123=(t=>{t=p.toBase64(t);let e="";for(let n=0;n<t.length;n++){let r=t[n];e+=p.$base64Numbers[p.$base64Letter.indexOf(r)]}return e}),p.from123=(t=>{let e="";for(let n=0;n<t.length;n++){let r=t[n]+t[n+1],o=p.$base64Numbers.indexOf(parseInt(r));e+=p.$base64Letter[o],n++}return e=p.fromBase64(e),e}),p.typeOf=p.typeof=function(t){return Object.prototype.toString.call(t).slice(8,-1)},p.showTabContent=function(t,n){let r=e.querySelectorAll(".tab-content");for(i=0;i<r.length;i++)r[i].style.display="none";let o=e.querySelectorAll(".tab-link");for(i=0;i<o.length;i++)o[i].className=o[i].className.replace(" active","");e.querySelectorAll(n+".tab-content").forEach(t=>{t.style.display="inline-block"}),t&&(t.currentTarget.className+=" active")},p.showTabs=function(t,e){t&&t.stopPropagation(),r(".main-menu .tabs").hide(),r(e).show(100)},p.toHtmlTable=function(t){if(t===n||null===t)return"";if("Object"==p.typeOf(t)){let e='<table class="table">';for(let n=0;n<Object.getOwnPropertyNames(t).length;n++){let r=Object.getOwnPropertyNames(t)[n];e+="<tr>",e+=`<td><p> ${r} </p></td>`,"Object"==p.typeOf(t[r])||"Array"==p.typeOf(t[r])?e+=`<td><p> ${p.toHtmlTable(t[r])} </p></td>`:e+=`<td><p> ${t[r]} </p></td>`,e+="</tr>"}return e+="</table>",e}if("Array"==p.typeOf(t)){let e='<table class="table">';for(let n=0;n<t.length;n++)"Object"==p.typeOf(t[n])||"Array"==p.typeOf(t[n])?e+=`<tr><td><p>${p.toHtmlTable(t[n])}</p></td></tr>`:e+=`<tr><td><p>${t[n]}</p></td></tr>`;return e+="</table>",e}return""},p.vControles=[],p.validated=function(t){const n={ok:!0,messages:[]};p.vControles.forEach(t=>{t.el.style.border=t.border}),p.vControles=[],t=t||"body";const r=e.querySelectorAll(t+" [v]");return r.forEach(t=>{const e=t.style.border,r=t.getAttribute("v"),o=r.split(" ");o.forEach(r=>{if(r=r.toLowerCase().trim(),"r"===r)"INPUT"!==t.nodeName&&"SELECT"!==t.nodeName||t.value&&!t.value.like("*undefined*")||(p.vControles.push({el:t,border:e}),t.style.border="2px solid #ff1100",n.ok=!1,n.messages.push({en:"Data Is Required",ar:"هذا البيان مطلوب"}));else if(r.like("ml*")){const o=parseInt(r.replace("ml",""));"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&!(t.value.length>o)||(p.vControles.push({el:t,border:e}),t.style.border="2px solid #ff1100",n.ok=!1,n.messages.push({en:"Letter Count Must be <= "+o,ar:"عدد الاحرف يجب ان يكون أقل من أو يساوى "+o}))}else if(r.like("ll*")){const o=parseInt(r.replace("ll",""));"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&!(t.value.length<o)||(p.vControles.push({el:t,border:e}),t.style.border="2px solid #ff1100",n.ok=!1,n.messages.push({en:"Letter Count Must be >= "+o,ar:"عدد الاحرف يجب ان يكون اكبر من أو يساوى "+o}))}else if(r.like("l*")){const o=parseInt(r.replace("l",""));"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&t.value.length===o||(p.vControles.push({el:t,border:e}),t.style.border="2px solid #ff1100",n.ok=!1,n.messages.push({en:"Letter Count Must be = "+o,ar:"عدد الاحرف يجب ان يساوى "+o}))}})}),n};let g=[{n:1,i0:{ar:"واحد"},i1:{ar:"عشرة"},i2:{ar:"مائة"},i3:{ar:"الف"},i4:{ar:"عشرة الاف"}},{n:2,i0:{ar:"اثنان "},i1:{ar:"عشرون"},i2:{ar:"مائتان"},i3:{ar:"الفان"},i4:{ar:"عشرون الف"}},{n:3,i0:{ar:"ثلاثة"},i1:{ar:"ثلاثون"},i2:{ar:"ثلاثمائة"},i3:{ar:"ثلاث الاف"},i4:{ar:"ثلاثون الف"}},{n:4,i0:{ar:"اربعة"},i1:{ar:"اربعون"},i2:{ar:"اربعة مائة"},i3:{ar:"اربعة الاف"},i4:{ar:"اربعون الف"}},{n:5,i0:{ar:"خمسة"},i1:{ar:"خمسون"},i2:{ar:"خمسمائة"},i3:{ar:"خمسة الاف"},i4:{ar:"خمسون الف"}},{n:6,i0:{ar:"ستة"},i1:{ar:"ستون"},i2:{ar:"ستة مائة"},i3:{ar:"ستة الااف"},i4:{ar:"ستون الف"}},{n:7,i0:{ar:"سبعة"},i1:{ar:"سبعون"},i2:{ar:"سبعمائة"},i3:{ar:"سبعة الااف"},i4:{ar:"سبعون الف"}},{n:8,i0:{ar:"ثمانية"},i1:{ar:"ثمانون"},i2:{ar:"ثمانمائة"},i3:{ar:"ثمان الااف"},i4:{ar:"ثمانون الف"}},{n:9,i0:{ar:"تسعة"},i1:{ar:"تسعون"},i2:{ar:"تسعمائة"},i3:{ar:"تسعة الااف"},i4:{ar:"تسعون الف"}},{n:11,i0:{ar:"احدى عشر"}},{n:12,i0:{ar:"اثنى عشر"}}];p.strings={and:{ar:"و"},space:{ar:" "},10:{ar:"آلاف"},20:{ar:"ألفاً"},100:{ar:"ألف"},currency:{ar:" جنيها مصريا فقط لاغير "},from10:{ar:" قروش "},from100:{ar:" قرش "},from1000:{ar:" من الف "}},p.stringfiy=function(t,e){t=t||"",e=e||"ar",t=t.toString().split(".");let n=t[0],r=t[1],o="";1==n.length?o=a(n,e):2==n.length?o=l(n,e):3==n.length?o=s(n,e):4==n.length?o=c(n,e):5==n.length?o=u(n,e):6==n.length&&(o=f(n,e));let i="";return r&&(1==r.length&&(r+="0"),1==r.length?i=a(r,e)+p.strings.from10[e]:2==r.length?i=l(r,e)+p.strings.from100[e]:3==r.length&&(i=s(r,e)+p.strings.from1000[e])),o+=p.strings.currency[e],i&&(o+=p.strings.space[e]+p.strings.and[e]+p.strings.space[e]+i),o},p.ws=function(e,n){if("WebSocket"in t){"string"==typeof e&&(e={url:e});var r=new WebSocket(e.url);let t={ws:r,options:e,closed:!0,onError:t=>{console.log("server.onError Not Implement ... ")},onClose:function(t){t.wasClean?console.log(`[ws closed] Connection closed cleanly, code=${t.code} reason=${t.reason}`):(console.warn("[ws closed] Connection died"),setTimeout(()=>{p.ws(e,n)},5e3))},onOpen:()=>{console.log("server.onOpen Not Implement ... ")},onMessage:()=>{console.log("server.onMessage Not Implement ... ")},onData:()=>{console.log("server.onData Not Implement ... ")},send:function(t){if(this.closed)return!1;"object"!=typeof t&&(t={type:"text",content:t}),this.ws.send(JSON.stringify(t))}};r.onerror=function(e){t.onError(e)},r.onclose=function(e){t.closed=!0,t.onClose(e)},r.onopen=function(){t.closed=!1,t.onOpen()},r.onmessage=function(e){e instanceof Blob?t.onData(e):t.onMessage(JSON.parse(e.data))},n(t)}else console.error("WebSocket Not Supported")},p.hex=function(t){if("string"==typeof t){const e=new TextEncoder;return Array.from(e.encode(t)).map(t=>t.toString(16).padStart(2,"0")).join("")}if("number"==typeof t){let e=t.toString(16);return 1==e.length&&(e="0"+e),e}},p.zakat=function(t){let e="";return t.name&&(e+="01"+p.hex(t.name.length)+p.hex(t.name)),t.vat_number&&(e+="02"+p.hex(t.vat_number.length)+p.hex(t.vat_number)),t.time&&(e+="03"+p.hex(t.time.length)+p.hex(t.time)),t.total&&(e+="04"+p.hex(t.total.length)+p.hex(t.total)),t.vat_total&&(e+="05"+p.hex(t.vat_total.length)+p.hex(t.vat_total)),p.toBase64(e)},p.zakat2=function(t,e){fetch("/x-api/zakat",{method:"POST",body:JSON.stringify(t)}).then(t=>t.json()).then(t=>{e(t)})},p.barcode=function(t){if(t&&t.selector&&t.text)return JsBarcode(t.selector,t.selector,t.options);console.error("qrcode need {selector , text}")},p.qrcode=function(t){if(!t||!t.selector||!t.text)return void console.error("qrcode need {selector , text}");let n="string"==typeof t.selector?e.querySelector(t.selector):t.selector;return n?(n.innerHTML="",new QRCode(n,{text:t.text,width:t.width||256,height:t.height||256,colorDark:t.colorDark||"#000000",colorLight:t.colorLight||"#ffffff",correctLevel:t.correctLevel||QRCode.CorrectLevel.H})):void 0},t.site=p})(window,document,"undefined",jQuery);
|
|
1
|
+
(function(t,e,n,r){function o(t){return t?("string"!=typeof t&&(t=t.toString()),t.replace(/[\/\\^$*+?.()\[\]{}]/g,"\\$&")):""}function a(t,e){let n="";return h.forEach(r=>{r.n==t&&(n=r.i0[e])}),n}function s(t,e){let n="";return 11==t?h.forEach(r=>{r.n==t&&(n=r.i0[e])}):12==t?h.forEach(r=>{r.n==t&&(n=r.i0[e])}):(h.forEach(r=>{r.n==t[1]&&(n=r.i0[e])}),h.forEach(r=>{r.n==t[0]&&(t[1]>0&&t[0]>1?n+=p.strings.space[e]+p.strings.and[e]:n+="",n+=r.i1[e])})),n}function l(t,e){let n="";h.forEach(r=>{r.n==t[0]&&(n=r.i2[e]+p.strings.space[e])});let r=s(t.substring(1),e);return r&&(n&&(n+=p.strings.and[e]),n+=r),n}function c(t,e){let n="";h.forEach(r=>{r.n==t[0]&&(n=r.i3[e]+p.strings.space[e])});let r=l(t.substring(1),e);return r&&(n&&(n+=p.strings.and[e]),n+=r),n}function u(t,e){let n=s(t.substring(0,2),e)+p.strings.space[e];1==t[0]?n+=p.strings[10][e]+p.strings.space[e]:n+=p.strings[20][e]+p.strings.space[e];let r=l(t.substring(2),e);return r&&(n+=p.strings.and[e]+r),n}function d(t,e){let n=l(t.substring(0,3),e)+p.strings.space[e];n+=p.strings[100][e]+p.strings.space[e];let r=l(t.substring(3),e);return r&&(n+=p.strings.and[e]+r),n}if(String.prototype.test||(String.prototype.test=function(t,e="gium"){try{return new RegExp(t,e).test(this)}catch(t){return!1}}),String.prototype.like||(String.prototype.like=function(t){if(!t)return!1;let e=!1;return t.split("|").forEach(t=>{t=t.split("*"),t.forEach((e,n)=>{t[n]=o(e)}),t=t.join(".*"),this.test("^"+t+"$","gium")&&(e=!0)}),e}),String.prototype.contains||(String.prototype.contains=function(t){let e=!1;return t?(t.split("|").forEach(t=>{t&&this.test("^.*"+o(t)+".*$","gium")&&(e=!0)}),e):e}),t.SOCIALBROWSER){if(SOCIALBROWSER.var=SOCIALBROWSER.var||{},SOCIALBROWSER.var.white_list=SOCIALBROWSER.var.white_list||[],e.location.hostname){let t=`*${e.location.hostname}*`,n=!1;SOCIALBROWSER.var.white_list.forEach(e=>{e.url==t&&(n=!0)}),n||(SOCIALBROWSER.var.white_list.push({url:t}),SOCIALBROWSER.call("set_var",{name:"white_list",data:SOCIALBROWSER.var.white_list}))}SOCIALBROWSER.var.blocking=SOCIALBROWSER.var.blocking||{},SOCIALBROWSER.var.blocking.block_ads=!1,SOCIALBROWSER.var.blocking.block_empty_iframe=!1,SOCIALBROWSER.var.blocking.remove_external_iframe=!1,SOCIALBROWSER.var.blocking.skip_video_ads=!1,SOCIALBROWSER.var.blocking.popup=SOCIALBROWSER.var.blocking.popup||{},SOCIALBROWSER.var.blocking.popup.allow_external=!0,SOCIALBROWSER.var.blocking.popup.allow_internal=!0,SOCIALBROWSER.var.blocking.javascript=SOCIALBROWSER.var.blocking.javascript||{},SOCIALBROWSER.var.blocking.javascript.block_window_open=!1,SOCIALBROWSER.var.blocking.javascript.block_eval=!1,SOCIALBROWSER.var.blocking.javascript.block_console_output=!1}let p={printerList:[],getPrinters:function(){return t.SOCIALBROWSER&&SOCIALBROWSER.currentWindow.webContents.getPrintersAsync?SOCIALBROWSER.currentWindow.webContents.getPrintersAsync().then(t=>{p.printerList=t}):t.SOCIALBROWSER&&SOCIALBROWSER.currentWindow.webContents.getPrinters?p.printerList=SOCIALBROWSER.currentWindow.webContents.getPrinters():fetch("http://127.0.0.1:60080/printers/all").then(t=>t.json()).then(t=>{p.printerList=t.list}),p.printerList},render:function(t,n){let r=e.querySelector(t);return r?Mustache.render(r.innerHTML,n):""},html:function(t,e){return Mustache.render(t,e)},getUniqueObjects:function(t,e){const n=t.map(t=>t[e]).map((t,e,n)=>n.indexOf(t)===e&&e).filter(e=>t[e]).map(e=>t[e]);return n},$:function(t){let n=e.querySelectorAll(t);return n}},g=999999;p.showModal=function(e){r(e).click(()=>{r("popup").hide()}),g++;let n=p.$(e);if(0===n.length)return;n[0].style.zIndex=g,n[0].style.display="block";let o=n[0].getAttribute("fixed");""!==o&&n[0].addEventListener("click",function(){p.hideModal(e)});let i=p.$(e+" i-control input");i.length>0&&i[0].focus(),p.$(e+" .close").forEach(t=>{t.addEventListener("click",function(){p.hideModal(e)})}),p.$(e+" .modal-header").forEach(e=>{e.addEventListener("click",function(e){e=e||t.event,e.stopPropagation()})}),p.$(e+" .modal-body").forEach(e=>{e.addEventListener("click",function(e){e=e||t.event,e.stopPropagation()})}),p.$(e+" .modal-footer").forEach(e=>{e.addEventListener("click",function(e){e=e||t.event,e.stopPropagation()})})},p.hideModal=function(t){r("popup").hide();let e=p.$(t);e.length>0&&(e[0].style.display="none")},p.eventList=[],p.on=function(t,e){e=e||function(){},p.eventList.push({name:t,callback:e})},p.call=function(t,e){for(var n=0;n<p.eventList.length;n++){var r=p.eventList[n];r.name==t&&r.callback(e)}},p.translate=function(t,e){"string"==typeof t&&(t={text:t,lang:"ar"}),t.url=`https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${t.lang}&dt=t&dt=bd&dj=1&q=${t.text}`,p.getData(t,e)},p.getData=function(t,e,n){e=e||function(){},n=n||function(){},"string"==typeof t&&(t={url:t}),t.headers=t.headers||{Accept:"application/json","Content-Type":"application/json"},t.url=p.handle_url(t.url),fetch(t.url,{mode:"cors",method:"get",headers:t.headers}).then(t=>t.json()).then(t=>{e(t)}).catch(t=>{n(t)})},p.getContent=function(t,e,n){e=e||function(){},n=n||function(){},"string"==typeof t&&(t={url:t}),t.url=p.handle_url(t.url),fetch(t.url,{mode:"cors",method:"get"}).then(function(t){return t.text()}).then(function(t){e(t)})},p.handle_url=function(e){if("string"!=typeof e)return e;if(e=e.trim(),e.like("http*")||0===e.indexOf("//")||0===e.indexOf("data:"))e=e;else if(0===e.indexOf("/"))e=t.location.origin+e;else if(e.split("?")[0].split(".").length<3){let n=t.location.pathname.split("/").pop();e=t.location.origin+t.location.pathname.replace(n,"")+e}return e},p.postData=function(n,r,o){r=r||function(){},o=o||function(){},"string"==typeof n&&(n={url:n}),n.data=n.data||n.body,delete n.body,n.data&&"object"==typeof n.data&&(n.data=JSON.stringify(n.data)),n.headers=n.headers||{Accept:"application/json","Content-Type":"application/json"},n.data&&"string"==typeof n.data&&(n.headers["Content-Length"]=n.data.length.toString());try{n.headers.Cookie=e.cookie}catch(o){console.log(o)}n.method="post",n.redirect="follow",n.mode="cors",n.url=p.handle_url(n.url),t.SOCIALBROWSER&&t.SOCIALBROWSER.fetchJson?SOCIALBROWSER.fetchJson(n,t=>{r(t)}):fetch(n.url,{mode:n.mode,method:n.method,headers:n.headers,body:n.data,redirect:n.redirect}).then(t=>t.json()).then(t=>{r(t)}).catch(t=>{o(t)})},p.typeOf=function(t){return Object.prototype.toString.call(t).slice(8,-1)},p.toDateTime=function(t){return t?new Date(t):new Date},p.toDateX=function(t){let e=p.toDateTime(t);return e.getFullYear()+"-"+(e.getMonth()+1)+"-"+e.getDate()},p.toDateXT=function(t){let e=p.toDateTime(t);return e.getHours()+":"+e.getMinutes()+":"+e.getSeconds()},p.toDateXF=function(t){let e=p.toDateTime(t);return e.getFullYear()+"-"+(e.getMonth()+1)+"-"+e.getDate()+" "+e.getHours()+":"+e.getMinutes()+":"+e.getSeconds()},p.toDateOnly=function(t){let e=p.toDateTime(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0)},p.toDateT=function(t){return p.toDateOnly(t).getTime()},p.toDateF=function(t){return p.toDateTime(t).getTime()},p.addZero=function(t,e){let n=e-t.toString().length;for(let e=0;e<n;e++)t="0"+t.toString();return t},p.addSubZero=function(t,e){let n=e;if(2==t.toString().split(".").length){t.toString().split(".")[1].length;t=t.toString()}else t=t.toString()+".";for(let e=0;e<n;e++)t=t.toString()+0;return t},p.fixed=3,p.to_number=p.toNumber=function(t,e){let n=e||p.fixed,r=0;return t&&(r=parseFloat(t).toFixed(n)),parseFloat(r)},p.to_money=p.toMoney=function(t,e=!0){let n=0;if(t){t=t.toFixed(2).split(".");t[0];let e=t[1]||"00";if(e){let n=e[0]||"0",r=e[1]||"0";r&&parseInt(r)>5?(n=parseInt(n)+1,n*=10,100==n?(n=0,t[0]=parseInt(t[0])+1,t[1]=""):t[1]=n):r&&5==parseInt(r)?t[1]=e:r&&parseInt(r)>2?(r=5,t[1]=n+r):t[1]=n+"0"}n=t.join(".")}return e?p.to_float(n):(n&&n.endsWith(".")&&(n+="00"),n)},p.to_float=p.toFloat=function(t){return t?parseFloat(t):0},p.to_int=p.toInt=function(t){return t?parseInt(t):0},p.$base64Letter="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",p.$base64Numbers=[];for(let t=11;t<99;t++)t%10!=0&&t%11!=0&&p.$base64Numbers.push(t);p.toJson=(t=>typeof t===n||null===t?"":JSON.stringify(t)),p.fromJson=(t=>"string"!=typeof t?t:JSON.parse(t)),p.toBase64=(t=>typeof t===n||null===t||""===t?"":("string"!=typeof t&&(t=p.toJson(t)),Base64.encode(t))),p.fromBase64=(t=>typeof t===n||null===t||""===t?"":Base64.decode(t)),p.to123=(t=>{t=p.toBase64(t);let e="";for(let n=0;n<t.length;n++){let r=t[n];e+=p.$base64Numbers[p.$base64Letter.indexOf(r)]}return e}),p.from123=(t=>{let e="";for(let n=0;n<t.length;n++){let r=t[n]+t[n+1],o=p.$base64Numbers.indexOf(parseInt(r));e+=p.$base64Letter[o],n++}return e=p.fromBase64(e),e}),p.hide=function(t){return p.to123(t)},p.show=function(t){return JSON.parse(p.from123(t))},p.typeOf=p.typeof=function(t){return Object.prototype.toString.call(t).slice(8,-1)},p.showTabContent=function(t,n){let r=e.querySelectorAll(".tab-content");for(i=0;i<r.length;i++)r[i].style.display="none";let o=e.querySelectorAll(".tab-link");for(i=0;i<o.length;i++)o[i].className=o[i].className.replace(" active","");e.querySelectorAll(n+".tab-content").forEach(t=>{t.style.display="inline-block"}),t&&(t.currentTarget.className+=" active")},p.showTabs=function(t,e){t&&t.stopPropagation(),r(".main-menu .tabs").hide(),r(e).show(100)},p.toHtmlTable=function(t){if(t===n||null===t)return"";if("Object"==p.typeOf(t)){let e='<table class="table">';for(let n=0;n<Object.getOwnPropertyNames(t).length;n++){let r=Object.getOwnPropertyNames(t)[n];e+="<tr>",e+=`<td><p> ${r} </p></td>`,"Object"==p.typeOf(t[r])||"Array"==p.typeOf(t[r])?e+=`<td><p> ${p.toHtmlTable(t[r])} </p></td>`:e+=`<td><p> ${t[r]} </p></td>`,e+="</tr>"}return e+="</table>",e}if("Array"==p.typeOf(t)){let e='<table class="table">';for(let n=0;n<t.length;n++)"Object"==p.typeOf(t[n])||"Array"==p.typeOf(t[n])?e+=`<tr><td><p>${p.toHtmlTable(t[n])}</p></td></tr>`:e+=`<tr><td><p>${t[n]}</p></td></tr>`;return e+="</table>",e}return""},p.resetValidated=function(t){t=t||"body";const n=e.querySelectorAll(t+" [v]");n.forEach(t=>{t.classList.remove("is-invalid"),t.classList.remove("is-valid")})},p.validated=function(t){const n={ok:!0,messages:[]};t=t||"body";const r=e.querySelectorAll(t+" [v]");return r.forEach(t=>{t.classList.remove("is-invalid"),t.classList.remove("is-valid");const e=t.getAttribute("v"),r=e.split(" ");r.forEach(e=>{if(e=e.toLowerCase().trim(),"r"===e)"INPUT"!==t.nodeName&&"SELECT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&!t.value.like("*undefined*")||(t.classList.add("is-invalid"),(f=t.parentNode.querySelector(".invalid-feedback"))&&(p.session&&"en"==p.session.lang?f.innerHTML="Data Is Required":p.session&&"ar"==p.session.lang&&(f.innerHTML="هذا البيان مطلوب")),n.ok=!1,n.messages.push({en:"Data Is Required",ar:"هذا البيان مطلوب"})),"I-DATETIME"!==t.nodeName||t.getAttribute("value")?t.classList.add("is-valid"):(t.classList.add("is-invalid"),n.ok=!1,n.messages.push({en:"Data Is Required",ar:"هذا البيان مطلوب"}));else if(e.like("ml*")){const r=parseInt(e.replace("ml",""));"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&!(t.value.length>r)||(t.classList.add("is-invalid"),n.ok=!1,n.messages.push({en:"Letter Count Must be <= "+r,ar:"عدد الاحرف يجب ان يكون أقل من أو يساوى "+r}))}else if(e.like("ll*")){const r=parseInt(e.replace("ll",""));"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&!(t.value.length<r)||(t.classList.add("is-invalid"),n.ok=!1,n.messages.push({en:"Letter Count Must be >= "+r,ar:"عدد الاحرف يجب ان يكون اكبر من أو يساوى "+r}))}else if(e.like("l*")){const r=parseInt(e.replace("l",""));"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.value&&t.value.length===r||(t.classList.add("is-invalid"),n.ok=!1,n.messages.push({en:"Letter Count Must be = "+r,ar:"عدد الاحرف يجب ان يساوى "+r}))}})}),n};let h=[{n:1,i0:{ar:"واحد"},i1:{ar:"عشرة"},i2:{ar:"مائة"},i3:{ar:"الف"},i4:{ar:"عشرة الاف"}},{n:2,i0:{ar:"اثنان "},i1:{ar:"عشرون"},i2:{ar:"مائتان"},i3:{ar:"الفان"},i4:{ar:"عشرون الف"}},{n:3,i0:{ar:"ثلاثة"},i1:{ar:"ثلاثون"},i2:{ar:"ثلاثمائة"},i3:{ar:"ثلاث الاف"},i4:{ar:"ثلاثون الف"}},{n:4,i0:{ar:"اربعة"},i1:{ar:"اربعون"},i2:{ar:"اربعة مائة"},i3:{ar:"اربعة الاف"},i4:{ar:"اربعون الف"}},{n:5,i0:{ar:"خمسة"},i1:{ar:"خمسون"},i2:{ar:"خمسمائة"},i3:{ar:"خمسة الاف"},i4:{ar:"خمسون الف"}},{n:6,i0:{ar:"ستة"},i1:{ar:"ستون"},i2:{ar:"ستة مائة"},i3:{ar:"ستة الااف"},i4:{ar:"ستون الف"}},{n:7,i0:{ar:"سبعة"},i1:{ar:"سبعون"},i2:{ar:"سبعمائة"},i3:{ar:"سبعة الااف"},i4:{ar:"سبعون الف"}},{n:8,i0:{ar:"ثمانية"},i1:{ar:"ثمانون"},i2:{ar:"ثمانمائة"},i3:{ar:"ثمان الااف"},i4:{ar:"ثمانون الف"}},{n:9,i0:{ar:"تسعة"},i1:{ar:"تسعون"},i2:{ar:"تسعمائة"},i3:{ar:"تسعة الااف"},i4:{ar:"تسعون الف"}},{n:11,i0:{ar:"احدى عشر"}},{n:12,i0:{ar:"اثنى عشر"}}];p.strings={and:{ar:"و"},space:{ar:" "},10:{ar:"آلاف"},20:{ar:"ألفاً"},100:{ar:"ألف"},currency:{ar:" جنيها مصريا فقط لاغير "},from10:{ar:" قروش "},from100:{ar:" قرش "},from1000:{ar:" من الف "}},p.stringfiy=function(t,e){t=t||"",e=e||"ar",t=t.toString().split(".");let n=t[0],r=t[1],o="";1==n.length?o=a(n,e):2==n.length?o=s(n,e):3==n.length?o=l(n,e):4==n.length?o=c(n,e):5==n.length?o=u(n,e):6==n.length&&(o=d(n,e));let i="";return r&&(1==r.length&&(r+="0"),1==r.length?i=a(r,e)+p.strings.from10[e]:2==r.length?i=s(r,e)+p.strings.from100[e]:3==r.length&&(i=l(r,e)+p.strings.from1000[e])),o+=p.strings.currency[e],i&&(o+=p.strings.space[e]+p.strings.and[e]+p.strings.space[e]+i),o},p.ws=function(e,n){if("WebSocket"in t){"string"==typeof e&&(e={url:e});var r=new WebSocket(e.url);let t={ws:r,options:e,closed:!0,onError:t=>{console.log("server.onError Not Implement ... ")},onClose:function(t){t.wasClean?console.log(`[ws closed] Connection closed cleanly, code=${t.code} reason=${t.reason}`):(console.warn("[ws closed] Connection died"),setTimeout(()=>{p.ws(e,n)},5e3))},onOpen:()=>{console.log("server.onOpen Not Implement ... ")},onMessage:()=>{console.log("server.onMessage Not Implement ... ")},onData:()=>{console.log("server.onData Not Implement ... ")},send:function(t){if(this.closed)return!1;"object"!=typeof t&&(t={type:"text",content:t}),this.ws.send(JSON.stringify(t))}};r.onerror=function(e){t.onError(e)},r.onclose=function(e){t.closed=!0,t.onClose(e)},r.onopen=function(){t.closed=!1,t.onOpen()},r.onmessage=function(e){e instanceof Blob?t.onData(e):t.onMessage(JSON.parse(e.data))},n(t)}else console.error("WebSocket Not Supported")},p.hex=function(t){if("string"==typeof t){const e=new TextEncoder;return Array.from(e.encode(t)).map(t=>t.toString(16).padStart(2,"0")).join("")}if("number"==typeof t){let e=t.toString(16);return 1==e.length&&(e="0"+e),e}},p.zakat=function(t){let e="";return t.name&&(e+="01"+p.hex(t.name.length)+p.hex(t.name)),t.vat_number&&(e+="02"+p.hex(t.vat_number.length)+p.hex(t.vat_number)),t.time&&(e+="03"+p.hex(t.time.length)+p.hex(t.time)),t.total&&(e+="04"+p.hex(t.total.length)+p.hex(t.total)),t.vat_total&&(e+="05"+p.hex(t.vat_total.length)+p.hex(t.vat_total)),p.toBase64(e)},p.zakat2=function(t,e){fetch("/x-api/zakat",{method:"POST",body:JSON.stringify(t)}).then(t=>t.json()).then(t=>{e(t)})},p.barcode=function(t){if(t&&t.selector&&t.text)return JsBarcode(t.selector,t.selector,t.options);console.error("qrcode need {selector , text}")},p.qrcode=function(t){if(!t||!t.selector||!t.text)return void console.error("qrcode need {selector , text}");let n="string"==typeof t.selector?e.querySelector(t.selector):t.selector;return n?(n.innerHTML="",new QRCode(n,{text:t.text,width:t.width||256,height:t.height||256,colorDark:t.colorDark||"#000000",colorLight:t.colorLight||"#ffffff",correctLevel:t.correctLevel||QRCode.CorrectLevel.H})):void 0},t.site=p})(window,document,"undefined",jQuery);
|
|
@@ -1,32 +1,24 @@
|
|
|
1
|
-
<div data-ng-controller="login" id="loginModal" class="modal small
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<div data-ng-controller="login" id="loginModal" class="modal small" fixed>
|
|
2
|
+
<div class="modal-content">
|
|
3
|
+
<div class="modal-header">
|
|
4
|
+
<span class="close">×</span>
|
|
5
|
+
<h2 class="text-center"><i class="fas fa-sign-in-alt"></i> ##word.security_login##</h2>
|
|
6
|
+
</div>
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
<div class="modal-body">
|
|
9
|
+
<h1 ng-show="busy" class="center"><i class="fas fa-spinner fa-pulse fa-3x fa-fw"></i></h1>
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
</div>
|
|
16
|
-
<div class="control">
|
|
17
|
-
<label>##word.security_user_password##</label>
|
|
18
|
-
<input id="userPassword" ng-model="userPassword" type="password" ng-keydown="tryLogin($event)" />
|
|
19
|
-
</div>
|
|
20
|
-
</form>
|
|
11
|
+
<form ng-hide="busy">
|
|
12
|
+
<i-control label="##word.security_user_email##" ng-model="userEmail" ng-keydown="tryLogin($event)"></i-control>
|
|
13
|
+
<i-control type="password" label="##word.security_user_password##" ng-model="userPassword" ng-keydown="tryLogin($event)"></i-control>
|
|
14
|
+
</form>
|
|
21
15
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
</div>
|
|
16
|
+
<p class="yellow">{{error}}</p>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="modal-footer center">
|
|
19
|
+
<i-button ng-hide="busy" fa="fa fa-sign-in" ng-click="login()" label="##word.security_login##"></i-button>
|
|
20
|
+
<i-button ng-hide="busy" type="close" onclick="site.hideModal('#loginModal')" label="##word.close##"></i-button>
|
|
28
21
|
</div>
|
|
29
|
-
|
|
22
|
+
</div>
|
|
30
23
|
</div>
|
|
31
|
-
<!-- /.modal -->
|
|
32
24
|
<script x-import="security/login.js"></script>
|