isite 2024.6.7 → 2024.8.2
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/LICENSE +21 -21
- package/README.md +1387 -1387
- package/apps/charts/site_files/html/PieChart.html +35 -35
- package/apps/charts/site_files/html/PieChart2.html +35 -35
- package/apps/charts/site_files/html/XYChart.html +42 -42
- package/apps/charts/site_files/html/column.html +60 -60
- package/apps/charts/site_files/html/gauge.html +44 -44
- package/apps/charts/site_files/html/index.html +92 -92
- package/apps/charts/site_files/html/line-graph.html +42 -42
- package/apps/charts/site_files/html/pie-chart-rounded-corners.html +38 -38
- package/apps/charts/site_files/html/simple-3D-pie-chart.html +43 -43
- package/apps/charts/site_files/js/chart-animated.js +2 -2
- package/apps/charts/site_files/json/PieChart.json +41 -41
- package/apps/charts/site_files/json/PieChart2.json +23 -23
- package/apps/charts/site_files/json/XYChart.json +74 -74
- package/apps/charts/site_files/json/bar-chart.json +99 -99
- package/apps/charts/site_files/json/column-chart.json +80 -80
- package/apps/charts/site_files/json/gauge.json +36 -36
- package/apps/charts/site_files/json/line-graph.json +1867 -1867
- package/apps/charts/site_files/json/pie-chart-rounded-corners.json +42 -42
- package/apps/charts/site_files/json/simple-3D-pie-chart.json +50 -50
- package/apps/client-side/package-lock.json +5 -5
- package/apps/client-side/package.json +21 -21
- package/apps/client-side/site_files/css/bootstrap3.css +5 -5
- package/apps/client-side/site_files/css/bootstrap4.css +6 -6
- package/apps/client-side/site_files/css/bootstrap5-addon.css +1 -1
- package/apps/client-side/site_files/css/bootstrap5.css +6 -6
- package/apps/client-side/site_files/css/checkbox.css +125 -125
- package/apps/client-side/site_files/css/font-awesome.css +4616 -4616
- package/apps/client-side/site_files/css/font-awesome.min.css +4 -4
- package/apps/client-side/site_files/css/fonts.css +85 -85
- package/apps/client-side/site_files/css/help.css +51 -51
- package/apps/client-side/site_files/css/images.css +4 -3
- package/apps/client-side/site_files/css/main-menu.css +66 -66
- package/apps/client-side/site_files/css/print.css +144 -144
- package/apps/client-side/site_files/css/prism.css +139 -139
- package/apps/client-side/site_files/css/progress.css +7 -7
- package/apps/client-side/site_files/css/radio.css +103 -103
- package/apps/client-side/site_files/css/scrollbar.css +13 -13
- package/apps/client-side/site_files/css/semantic.css +363 -363
- package/apps/client-side/site_files/css/table.css +87 -87
- package/apps/client-side/site_files/css/treeview.css +84 -84
- package/apps/client-side/site_files/css/ui.css +28 -28
- package/apps/client-side/site_files/fonts/fontawesome-webfont.svg +2671 -2671
- package/apps/client-side/site_files/fonts/glyphicons-halflings-regular.svg +287 -287
- package/apps/client-side/site_files/fonts/icons.svg +684 -684
- package/apps/client-side/site_files/js/angular-animate.js +4179 -4179
- package/apps/client-side/site_files/js/angular.js +36599 -36599
- package/apps/client-side/site_files/js/angular.min.js +351 -351
- package/apps/client-side/site_files/js/angular.min.js.map +8 -8
- package/apps/client-side/site_files/js/barcode.js +1 -1
- package/apps/client-side/site_files/js/base64.js +319 -319
- package/apps/client-side/site_files/js/bootstrap-5-directive.js +1456 -1456
- package/apps/client-side/site_files/js/bootstrap3.js +6 -6
- package/apps/client-side/site_files/js/bootstrap4.js +6 -6
- package/apps/client-side/site_files/js/bootstrap5.js +6 -6
- package/apps/client-side/site_files/js/custom.js +149 -149
- package/apps/client-side/site_files/js/directive.min.js +1 -1
- package/apps/client-side/site_files/js/hijri.js +965 -965
- package/apps/client-side/site_files/js/jquery.js +2 -2
- package/apps/client-side/site_files/js/moment.js +4511 -4511
- package/apps/client-side/site_files/js/prism.js +6 -6
- package/apps/client-side/site_files/js/qrcode.js +1398 -1398
- package/apps/client-side/site_files/js/semantic.js +10 -10
- package/apps/client-side/site_files/js/xlsx.js +23 -23
- package/apps/client-side/site_files/semantic-themes/default/assets/fonts/brand-icons.svg +1008 -1008
- package/apps/client-side/site_files/semantic-themes/default/assets/fonts/icons.svg +1518 -1518
- package/apps/client-side/site_files/semantic-themes/default/assets/fonts/outline-icons.svg +366 -366
- package/apps/client-side/site_files/webfonts/fa-brands-400.svg +3717 -3717
- package/apps/client-side/site_files/webfonts/fa-regular-400.svg +801 -801
- package/apps/client-side/site_files/webfonts/fa-solid-900.svg +5034 -5034
- package/apps/security/README.md +12 -12
- package/apps/security/app.js +288 -288
- package/apps/security/libs/notifications.js +89 -89
- package/apps/security/site_files/html/add_modal.html +36 -36
- package/apps/security/site_files/html/content.html +36 -36
- package/apps/security/site_files/html/delete_modal.html +31 -31
- package/apps/security/site_files/html/head.html +7 -7
- package/apps/security/site_files/html/index.html +80 -80
- package/apps/security/site_files/html/login_modal.html +24 -24
- package/apps/security/site_files/html/logout_modal.html +21 -21
- package/apps/security/site_files/html/navbar.html +8 -8
- package/apps/security/site_files/html/register_modal.html +32 -32
- package/apps/security/site_files/html/update_modal.html +28 -28
- package/apps/security/site_files/html/view.html +74 -74
- package/apps/security/site_files/html/view_modal.html +32 -32
- package/apps/security/site_files/js/app.js +1 -1
- package/apps/security/site_files/js/index.js +278 -278
- package/apps/security/site_files/js/login.js +35 -35
- package/apps/security/site_files/js/logout.js +22 -22
- package/apps/security/site_files/js/navbar.js +26 -26
- package/apps/security/site_files/js/register.js +30 -30
- package/apps/security/site_files/json/permissions.json +7 -7
- package/apps/security/site_files/json/roles.json +33 -33
- package/apps/security/site_files/json/words.json +28 -28
- package/gulpfile.js +17 -17
- package/index.js +1 -0
- package/isite.postman_collection.json +7 -7
- package/isite_files/css/bootstrap.css +5 -5
- package/isite_files/css/font-awesome.css +4 -4
- package/isite_files/css/prism.css +139 -139
- package/isite_files/fonts/fontawesome-webfont.svg +2671 -2671
- package/isite_files/fonts/glyphicons-halflings-regular.svg +287 -287
- package/isite_files/html/files.html +9 -9
- package/isite_files/html/head.html +12 -12
- package/isite_files/html/index.html +30 -30
- package/isite_files/html/installing.html +27 -27
- package/isite_files/html/navbar.html +51 -51
- package/isite_files/html/routes.html +13 -13
- package/isite_files/html/sessions.html +13 -13
- package/isite_files/html/vars.html +9 -9
- package/isite_files/js/angular.js +334 -334
- package/isite_files/js/bootstrap.js +6 -6
- package/isite_files/js/custom.js +149 -149
- package/isite_files/js/jquery.js +4 -4
- package/isite_files/js/prism.js +6 -6
- package/lib/README.md +1 -1
- package/lib/cookie.js +81 -81
- package/lib/dashboard.js +189 -189
- package/lib/mongodb.js +686 -686
- package/lib/parser.js +910 -910
- package/lib/session.js +158 -158
- package/lib/storage.js +6 -0
- package/lib/ws.js +4 -26
- package/object-options/lib/isite.code-workspace +10 -10
- package/object-options/lib/safty.js +13 -16
- package/package.json +55 -54
- package/ssl/create_ssl.sh +3 -3
|
@@ -1,150 +1,150 @@
|
|
|
1
|
-
$(function () {
|
|
2
|
-
$('[data-toggle="tooltip"]').tooltip()
|
|
3
|
-
})
|
|
4
|
-
|
|
5
|
-
var app = angular.module('html', []);
|
|
6
|
-
app.controller('body', function ($scope, $http) {
|
|
7
|
-
|
|
8
|
-
$scope.isLoged = !1;
|
|
9
|
-
$scope.error = '';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
$scope.register = function () {
|
|
13
|
-
$('#registerBtn').button('loading')
|
|
14
|
-
var email = $scope.register_userEmail
|
|
15
|
-
var password = $scope.register_userPassword
|
|
16
|
-
|
|
17
|
-
$http({
|
|
18
|
-
method: 'POST',
|
|
19
|
-
url: '/x-security/api/user/register',
|
|
20
|
-
transformRequest: function (obj) {
|
|
21
|
-
var str = [];
|
|
22
|
-
for (var p in obj)
|
|
23
|
-
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
|
24
|
-
return str.join("&");
|
|
25
|
-
},
|
|
26
|
-
data: {
|
|
27
|
-
email: email,
|
|
28
|
-
password: password
|
|
29
|
-
},
|
|
30
|
-
headers: {
|
|
31
|
-
'Content-Type': 'application/x-www-form-urlencoded'
|
|
32
|
-
}
|
|
33
|
-
}).then(function (response) {
|
|
34
|
-
$('#registerBtn').button('reset')
|
|
35
|
-
if (response.data.error) {
|
|
36
|
-
$scope.error = response.data.error;
|
|
37
|
-
}
|
|
38
|
-
if (response.data.user) {
|
|
39
|
-
$scope.user = response.data.user
|
|
40
|
-
$scope.isLoged = !0
|
|
41
|
-
$('#registerModal').modal('hide')
|
|
42
|
-
window.location.href = '/@admin'
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
$scope.login = function () {
|
|
48
|
-
$('#loginBtn').button('loading')
|
|
49
|
-
var email = $scope.userEmail
|
|
50
|
-
var password = $scope.userPassword
|
|
51
|
-
|
|
52
|
-
$http({
|
|
53
|
-
method: 'POST',
|
|
54
|
-
url: '/x-security/api/user/login',
|
|
55
|
-
transformRequest: function (obj) {
|
|
56
|
-
var str = [];
|
|
57
|
-
for (var p in obj)
|
|
58
|
-
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
|
59
|
-
return str.join("&");
|
|
60
|
-
},
|
|
61
|
-
data: {
|
|
62
|
-
email: email,
|
|
63
|
-
password: password
|
|
64
|
-
},
|
|
65
|
-
headers: {
|
|
66
|
-
'Content-Type': 'application/x-www-form-urlencoded'
|
|
67
|
-
}
|
|
68
|
-
}).then(function (response) {
|
|
69
|
-
$('#loginBtn').button('reset')
|
|
70
|
-
if (response.data.error) {
|
|
71
|
-
$scope.error = response.data.error;
|
|
72
|
-
}
|
|
73
|
-
if (response.data.user) {
|
|
74
|
-
$scope.user = response.data.user
|
|
75
|
-
$scope.isLoged = !0
|
|
76
|
-
$('#loginModal').modal('hide')
|
|
77
|
-
window.location.href = '/@admin'
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
$scope.logout = function () {
|
|
83
|
-
|
|
84
|
-
$http({
|
|
85
|
-
method: 'POST',
|
|
86
|
-
url: '/x-security/api/user/logout',
|
|
87
|
-
transformRequest: function (obj) {
|
|
88
|
-
var str = [];
|
|
89
|
-
for (var p in obj)
|
|
90
|
-
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
|
91
|
-
return str.join("&");
|
|
92
|
-
},
|
|
93
|
-
data: {},
|
|
94
|
-
headers: {
|
|
95
|
-
'Content-Type': 'application/x-www-form-urlencoded'
|
|
96
|
-
}
|
|
97
|
-
}).then(function (response) {
|
|
98
|
-
|
|
99
|
-
if (response.data.done) {
|
|
100
|
-
window.location.href = '/@admin'
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
$scope.hideALL = function () {
|
|
106
|
-
$scope.sessionsDisplay = !1;
|
|
107
|
-
$scope.routesDisplay = !1;
|
|
108
|
-
$scope.filesDisplay = !1;
|
|
109
|
-
$scope.varsDisplay = !1;
|
|
110
|
-
$scope.installingDisplay = !1;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
$scope.showInstalling = function () {
|
|
114
|
-
$scope.hideALL();
|
|
115
|
-
$scope.installingDisplay = !0;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
$scope.showSessions = function () {
|
|
119
|
-
$scope.hideALL();
|
|
120
|
-
$http.get('/@admin/api/sessions').then(function (response) {
|
|
121
|
-
$scope.sessionsDisplay = !0;
|
|
122
|
-
$scope.sessions = response.data;
|
|
123
|
-
})
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
$scope.showRoutes = function () {
|
|
127
|
-
$scope.hideALL();
|
|
128
|
-
$http.get('/@admin/api/routes').then(function (response) {
|
|
129
|
-
$scope.routesDisplay = !0;
|
|
130
|
-
$scope.routes = response.data;
|
|
131
|
-
})
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
$scope.showFiles = function () {
|
|
135
|
-
$scope.hideALL();
|
|
136
|
-
$http.get('/@admin/api/files').then(function (response) {
|
|
137
|
-
$scope.filesDisplay = !0;
|
|
138
|
-
$scope.files = response.data;
|
|
139
|
-
})
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
$scope.showVars = function () {
|
|
143
|
-
$scope.hideALL();
|
|
144
|
-
$http.get('/@admin/api/vars').then(function (response) {
|
|
145
|
-
$scope.varsDisplay = !0;
|
|
146
|
-
$scope.vars = response.data;
|
|
147
|
-
})
|
|
148
|
-
}
|
|
149
|
-
|
|
1
|
+
$(function () {
|
|
2
|
+
$('[data-toggle="tooltip"]').tooltip()
|
|
3
|
+
})
|
|
4
|
+
|
|
5
|
+
var app = angular.module('html', []);
|
|
6
|
+
app.controller('body', function ($scope, $http) {
|
|
7
|
+
|
|
8
|
+
$scope.isLoged = !1;
|
|
9
|
+
$scope.error = '';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
$scope.register = function () {
|
|
13
|
+
$('#registerBtn').button('loading')
|
|
14
|
+
var email = $scope.register_userEmail
|
|
15
|
+
var password = $scope.register_userPassword
|
|
16
|
+
|
|
17
|
+
$http({
|
|
18
|
+
method: 'POST',
|
|
19
|
+
url: '/x-security/api/user/register',
|
|
20
|
+
transformRequest: function (obj) {
|
|
21
|
+
var str = [];
|
|
22
|
+
for (var p in obj)
|
|
23
|
+
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
|
24
|
+
return str.join("&");
|
|
25
|
+
},
|
|
26
|
+
data: {
|
|
27
|
+
email: email,
|
|
28
|
+
password: password
|
|
29
|
+
},
|
|
30
|
+
headers: {
|
|
31
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
32
|
+
}
|
|
33
|
+
}).then(function (response) {
|
|
34
|
+
$('#registerBtn').button('reset')
|
|
35
|
+
if (response.data.error) {
|
|
36
|
+
$scope.error = response.data.error;
|
|
37
|
+
}
|
|
38
|
+
if (response.data.user) {
|
|
39
|
+
$scope.user = response.data.user
|
|
40
|
+
$scope.isLoged = !0
|
|
41
|
+
$('#registerModal').modal('hide')
|
|
42
|
+
window.location.href = '/@admin'
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
$scope.login = function () {
|
|
48
|
+
$('#loginBtn').button('loading')
|
|
49
|
+
var email = $scope.userEmail
|
|
50
|
+
var password = $scope.userPassword
|
|
51
|
+
|
|
52
|
+
$http({
|
|
53
|
+
method: 'POST',
|
|
54
|
+
url: '/x-security/api/user/login',
|
|
55
|
+
transformRequest: function (obj) {
|
|
56
|
+
var str = [];
|
|
57
|
+
for (var p in obj)
|
|
58
|
+
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
|
59
|
+
return str.join("&");
|
|
60
|
+
},
|
|
61
|
+
data: {
|
|
62
|
+
email: email,
|
|
63
|
+
password: password
|
|
64
|
+
},
|
|
65
|
+
headers: {
|
|
66
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
67
|
+
}
|
|
68
|
+
}).then(function (response) {
|
|
69
|
+
$('#loginBtn').button('reset')
|
|
70
|
+
if (response.data.error) {
|
|
71
|
+
$scope.error = response.data.error;
|
|
72
|
+
}
|
|
73
|
+
if (response.data.user) {
|
|
74
|
+
$scope.user = response.data.user
|
|
75
|
+
$scope.isLoged = !0
|
|
76
|
+
$('#loginModal').modal('hide')
|
|
77
|
+
window.location.href = '/@admin'
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
$scope.logout = function () {
|
|
83
|
+
|
|
84
|
+
$http({
|
|
85
|
+
method: 'POST',
|
|
86
|
+
url: '/x-security/api/user/logout',
|
|
87
|
+
transformRequest: function (obj) {
|
|
88
|
+
var str = [];
|
|
89
|
+
for (var p in obj)
|
|
90
|
+
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
|
91
|
+
return str.join("&");
|
|
92
|
+
},
|
|
93
|
+
data: {},
|
|
94
|
+
headers: {
|
|
95
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
96
|
+
}
|
|
97
|
+
}).then(function (response) {
|
|
98
|
+
|
|
99
|
+
if (response.data.done) {
|
|
100
|
+
window.location.href = '/@admin'
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
$scope.hideALL = function () {
|
|
106
|
+
$scope.sessionsDisplay = !1;
|
|
107
|
+
$scope.routesDisplay = !1;
|
|
108
|
+
$scope.filesDisplay = !1;
|
|
109
|
+
$scope.varsDisplay = !1;
|
|
110
|
+
$scope.installingDisplay = !1;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
$scope.showInstalling = function () {
|
|
114
|
+
$scope.hideALL();
|
|
115
|
+
$scope.installingDisplay = !0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
$scope.showSessions = function () {
|
|
119
|
+
$scope.hideALL();
|
|
120
|
+
$http.get('/@admin/api/sessions').then(function (response) {
|
|
121
|
+
$scope.sessionsDisplay = !0;
|
|
122
|
+
$scope.sessions = response.data;
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
$scope.showRoutes = function () {
|
|
127
|
+
$scope.hideALL();
|
|
128
|
+
$http.get('/@admin/api/routes').then(function (response) {
|
|
129
|
+
$scope.routesDisplay = !0;
|
|
130
|
+
$scope.routes = response.data;
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
$scope.showFiles = function () {
|
|
135
|
+
$scope.hideALL();
|
|
136
|
+
$http.get('/@admin/api/files').then(function (response) {
|
|
137
|
+
$scope.filesDisplay = !0;
|
|
138
|
+
$scope.files = response.data;
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
$scope.showVars = function () {
|
|
143
|
+
$scope.hideALL();
|
|
144
|
+
$http.get('/@admin/api/vars').then(function (response) {
|
|
145
|
+
$scope.varsDisplay = !0;
|
|
146
|
+
$scope.vars = response.data;
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
|
|
150
150
|
});
|
|
@@ -1,2 +1,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)=>{
|
|
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
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 '}}]);
|