isite 2023.1.10 → 2023.8.10
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/apps/client-side/app.js +39 -14
- package/apps/client-side/site_files/css/bootstrap5-addon.css +2 -2
- package/apps/client-side/site_files/css/effect.css +2 -2
- package/apps/client-side/site_files/css/font-awesome.css +6 -6
- package/apps/client-side/site_files/css/font-awesome.min.css +1 -1
- package/apps/client-side/site_files/css/layout.css +4 -4
- package/apps/client-side/site_files/css/modal.css +3 -3
- package/apps/client-side/site_files/css/tabs.css +72 -68
- package/apps/client-side/site_files/css/treeview.css +49 -48
- package/apps/client-side/site_files/html/require_payments.html +11 -12
- package/apps/client-side/site_files/html/require_permissions.html +2 -2
- package/apps/client-side/site_files/html/words.html +66 -0
- package/apps/client-side/site_files/js/app.js +162 -0
- package/apps/client-side/site_files/js/bootstrap-5-directive.js +0 -1
- package/apps/client-side/site_files/js/directive-core.js +1 -7
- package/apps/client-side/site_files/js/site.js +4 -1
- package/index.js +5 -0
- package/lib/app.js +379 -0
- package/lib/collection.js +12 -4
- package/lib/data.js +1 -0
- package/lib/fsm.js +398 -387
- package/lib/parser.js +3 -3
- package/lib/routing.js +36 -25
- package/lib/words.js +17 -30
- package/object-options/index.js +7 -7
- package/object-options/lib/fn.js +0 -30
- package/package.json +2 -1
|
@@ -1,81 +1,87 @@
|
|
|
1
1
|
.tabs {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
display: inline-block;
|
|
3
|
+
padding: 5px;
|
|
4
|
+
width: 100%;
|
|
5
|
+
transition: all 0.1s ease;
|
|
6
6
|
}
|
|
7
|
-
.links .tabs{
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
.links .tabs {
|
|
8
|
+
display: none;
|
|
9
|
+
transition: all 0.1s ease;
|
|
10
10
|
}
|
|
11
|
-
.links .tabs .tabs-header{
|
|
12
|
-
|
|
11
|
+
.links .tabs .tabs-header {
|
|
12
|
+
width: 100%;
|
|
13
13
|
}
|
|
14
14
|
.tabs .tabs-header {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
padding: 1px;
|
|
16
|
+
width: var(--tabs-header-width);
|
|
17
|
+
margin: 0px;
|
|
18
|
+
display: inline-block;
|
|
19
|
+
float: var(--float);
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
background: none;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
.tabs .tabs-header .tab-link {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
border-radius: var(--tabs-header-link-radius);
|
|
26
|
+
background: var(--tabs-header-link-background);
|
|
27
|
+
border: var(--tabs-header-link-border);
|
|
28
|
+
border-bottom: var(--tabs-header-link-border-bottom);
|
|
29
|
+
outline: none;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
padding: 10px 12px;
|
|
32
|
+
transition: 0.1s;
|
|
33
|
+
font-size: var(--tabs-header-link-font-size);
|
|
34
|
+
font-weight: var(--tabs-header-link-font-weight);
|
|
35
|
+
color: var(--tabs-header-link-color);
|
|
36
|
+
margin: 10px;
|
|
37
|
+
display: block;
|
|
38
|
+
text-decoration: none;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.tabs .tabs-header .tab-link:hover {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
background-color: var(--tabs-background-color2);
|
|
43
|
+
color: var(--tabs-header-link-color2);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
.tabs .tabs-header .tab-link.active {
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
background-color: var(--tabs-background-color);
|
|
48
|
+
color: var(--tabs-color);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
.tabs .tabs-content {
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
width: var(--tabs-content-width);
|
|
53
|
+
display: inline-block;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.tabs .tabs-content .tab-content {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
display: none;
|
|
58
|
+
padding: 6px 12px;
|
|
59
|
+
width: 100%;
|
|
60
|
+
overflow: visible;
|
|
61
|
+
-webkit-animation-name: var(--tab-animation-name);
|
|
62
|
+
-webkit-animation-duration: var(--tab-animation-duration);
|
|
63
|
+
animation-name: var(--tab-animation-name);
|
|
64
|
+
animation-duration: var(--tab-animation-duration);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
.tabs .full {
|
|
68
|
-
|
|
68
|
+
width: 100% !important;
|
|
69
|
+
}
|
|
70
|
+
.tabs.full .tabs-header,
|
|
71
|
+
.tabs.full .tabs-content {
|
|
72
|
+
width: 100% !important;
|
|
73
|
+
}
|
|
74
|
+
.tabs.full .tabs-header .tab-link {
|
|
75
|
+
display: inline-block;
|
|
69
76
|
}
|
|
70
77
|
|
|
71
78
|
.tabs .full .tab-link {
|
|
72
|
-
|
|
79
|
+
display: inline-block;
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
@media screen and (max-width: 768px
|
|
76
|
-
/*mobile*/
|
|
77
|
-
|
|
78
|
-
/*
|
|
83
|
+
/*mobile*/) {
|
|
84
|
+
/*
|
|
79
85
|
.tabs .tabs-content,
|
|
80
86
|
.tabs .tabs-header {
|
|
81
87
|
width: 100% !important;
|
|
@@ -95,28 +101,26 @@
|
|
|
95
101
|
*/
|
|
96
102
|
}
|
|
97
103
|
|
|
98
|
-
|
|
99
|
-
|
|
100
104
|
@-webkit-keyframes animatetabs {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
from {
|
|
106
|
+
width: 50%;
|
|
107
|
+
opacity: 0;
|
|
108
|
+
}
|
|
105
109
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
to {
|
|
111
|
+
width: 100%;
|
|
112
|
+
opacity: 1;
|
|
113
|
+
}
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
@keyframes animatetabs {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
from {
|
|
118
|
+
width: 50%;
|
|
119
|
+
opacity: 0;
|
|
120
|
+
}
|
|
117
121
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
122
|
+
to {
|
|
123
|
+
width: 100%;
|
|
124
|
+
opacity: 1;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -1,83 +1,84 @@
|
|
|
1
1
|
.treeview {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
color: var(--treeview-color);
|
|
3
|
+
background: var(--treeview-background-color);
|
|
4
|
+
user-select: none;
|
|
5
|
+
-webkit-user-select: none;
|
|
6
|
+
-moz-user-select: none;
|
|
7
|
+
-ms-user-select: none;
|
|
8
8
|
}
|
|
9
|
-
.treeview .main-node{
|
|
10
|
-
|
|
9
|
+
.treeview .main-node {
|
|
10
|
+
display: block;
|
|
11
11
|
}
|
|
12
|
-
.treeview .main-node > i{
|
|
13
|
-
|
|
12
|
+
.treeview .main-node > i {
|
|
13
|
+
display: inline-block;
|
|
14
14
|
}
|
|
15
|
-
.treeview .main-node > h2{
|
|
16
|
-
|
|
15
|
+
.treeview .main-node > h2 {
|
|
16
|
+
display: inline-block;
|
|
17
17
|
}
|
|
18
|
-
.treeview .main-node > i-button{
|
|
19
|
-
|
|
18
|
+
.treeview .main-node > i-button {
|
|
19
|
+
display: inline-block;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
.treeview i-treenode ul{
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
.treeview i-treenode ul {
|
|
23
|
+
transition: all linear 0.3s;
|
|
24
|
+
-webkit-transition: all linear 0.3s;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
.treeview i-treenode.ng-hide ul {
|
|
28
|
-
|
|
28
|
+
opacity: 0;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
.treeview .actions {
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
display: inline-block;
|
|
33
|
+
width: auto;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
.treeview ul {
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
list-style: none;
|
|
38
|
+
margin-top: 10px;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.treeview .title {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
cursor: pointer;
|
|
43
|
+
padding-bottom: 10px;
|
|
44
|
+
font-size: 16px;
|
|
45
|
+
font-weight: bold;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.treeview .display {
|
|
49
|
-
|
|
49
|
+
color: var(--treeview-display-color);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
.treenode li {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
border-left: 1px solid var(--treeview-border-color);
|
|
53
|
+
display: block;
|
|
54
|
+
margin: 10px;
|
|
55
|
+
padding: 3px;
|
|
56
|
+
cursor: pointer;
|
|
58
57
|
}
|
|
59
58
|
.ar .treenode li {
|
|
60
|
-
|
|
59
|
+
border-right: 1px solid var(--treeview-border-color);
|
|
60
|
+
}
|
|
61
|
+
.en .treenode li {
|
|
62
|
+
border-left: 1px solid var(--treeview-border-color);
|
|
61
63
|
}
|
|
62
|
-
|
|
63
64
|
.treenode li span {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
font-size: 14px;
|
|
66
|
+
font-weight: bold;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
padding: 10px 10px;
|
|
69
|
+
border-radius: 5px;
|
|
70
|
+
transition: all ease-out 0.2s;
|
|
71
|
+
-webkit-transition: all ease-out 0.2s;
|
|
72
|
+
display: inline-block;
|
|
73
|
+
width: auto;
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
.treenode li span.text:hover {
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
background: var(--treeview-background-color2);
|
|
78
|
+
color: var(--treeview-color2);
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
.treenode li .selected {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
82
|
+
background: var(--treeview-background-color2);
|
|
83
|
+
color: var(--treeview-color2);
|
|
84
|
+
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Server Error</title>
|
|
7
|
+
<link rel="stylesheet" href="/x-css/all.css" />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<h1 class="text-center bold red">DNS Server Error</h1>
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
</body>
|
|
12
|
+
<br /><br />
|
|
13
|
+
<h2 class="text-center">Call Site Administrator or Development Team</h2>
|
|
14
|
+
</body>
|
|
16
15
|
</html>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="stylesheet" href="/x-css/all.css" />
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
10
|
-
<h1 class="center bold red">Require Permissions</h1>
|
|
11
|
-
<h2 class="center">##data.permissions##</h2>
|
|
10
|
+
<h1 class="text-center bold red">Require Permissions</h1>
|
|
11
|
+
<h2 class="text-center">##data.permissions##</h2>
|
|
12
12
|
</body>
|
|
13
13
|
</html>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" ng-app="myApp">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Document</title>
|
|
7
|
+
<link rel="stylesheet" href="/x-css/bootstrap-5-support.css" />
|
|
8
|
+
</head>
|
|
9
|
+
<body ng-controller="mainController" class="container loaded">
|
|
10
|
+
<h1 class="center">##word.counts## : {{words.length}}</h1>
|
|
11
|
+
<div class="row padding margin border">
|
|
12
|
+
<div class="col9">
|
|
13
|
+
<i-control ng-model="nameSearch" label="Search Words"></i-control>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="col3">
|
|
16
|
+
<i-button type="save" ng-click="saveWords()" label="Save All Words"></i-button>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<table class="table">
|
|
21
|
+
<tr>
|
|
22
|
+
<th>ID</th>
|
|
23
|
+
<th>Name</th>
|
|
24
|
+
<th>En</th>
|
|
25
|
+
<th>Ar</th>
|
|
26
|
+
</tr>
|
|
27
|
+
<tr ng-repeat="word in words | filter:nameSearch">
|
|
28
|
+
<td>{{$index+1}}</td>
|
|
29
|
+
<td>{{word.name}}</td>
|
|
30
|
+
<td>
|
|
31
|
+
<i-control ng-model="word.En"></i-control>
|
|
32
|
+
</td>
|
|
33
|
+
<td><i-control ng-model="word.Ar"></i-control></td>
|
|
34
|
+
</tr>
|
|
35
|
+
</table>
|
|
36
|
+
|
|
37
|
+
<script src="/x-js/bootstrap-5-support.js"></script>
|
|
38
|
+
<script>
|
|
39
|
+
site.connectScope({}, ($scope, $http) => {
|
|
40
|
+
$scope.name = 'Amr Barakat';
|
|
41
|
+
$scope.loadWords = function () {
|
|
42
|
+
$http({
|
|
43
|
+
method: 'get',
|
|
44
|
+
url: '/x-api/words',
|
|
45
|
+
}).then(function (response) {
|
|
46
|
+
if (response.data.done) {
|
|
47
|
+
$scope.words = response.data.words;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
$scope.saveWords = function () {
|
|
52
|
+
$http({
|
|
53
|
+
method: 'POST',
|
|
54
|
+
url: '/x-api/words/save',
|
|
55
|
+
data: $scope.words,
|
|
56
|
+
}).then(function (response) {
|
|
57
|
+
if (response.data.done) {
|
|
58
|
+
console.log(response.data);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
$scope.loadWords();
|
|
63
|
+
});
|
|
64
|
+
</script>
|
|
65
|
+
</body>
|
|
66
|
+
</html>
|
|
@@ -2,3 +2,165 @@ var app = angular.module('myApp', []);
|
|
|
2
2
|
app.config(function ($sceDelegateProvider) {
|
|
3
3
|
$sceDelegateProvider.resourceUrlWhitelist(['self', 'https://www.youtube.com/**']);
|
|
4
4
|
});
|
|
5
|
+
|
|
6
|
+
site.connectScope = app.connectScope = function (_scope, callback) {
|
|
7
|
+
if (!_scope) {
|
|
8
|
+
_scope = {};
|
|
9
|
+
}
|
|
10
|
+
if (!_scope.name) {
|
|
11
|
+
if ((elem = document.querySelector('[ng-controller]'))) {
|
|
12
|
+
_scope.name = elem.getAttribute('ng-controller');
|
|
13
|
+
} else {
|
|
14
|
+
_scope.name = 'mainController';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (!_scope.app) {
|
|
18
|
+
_scope.app = _scope.name;
|
|
19
|
+
}
|
|
20
|
+
if (typeof _scope.app === 'string') {
|
|
21
|
+
_scope.apps = [{ name: _scope.app, as: _scope.app, modal: '#' + _scope.app + 'Modal' }];
|
|
22
|
+
}
|
|
23
|
+
if (typeof _scope.app === 'object') {
|
|
24
|
+
_scope.apps = [{ ..._scope.app }];
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(_scope.app)) {
|
|
27
|
+
_scope.apps = [..._scope.app];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
app.controller(_scope.name, function ($scope, $http, $timeout, $interval) {
|
|
31
|
+
$scope.onError = function () {};
|
|
32
|
+
if (Array.isArray(_scope.apps)) {
|
|
33
|
+
_scope.apps.forEach((_app, index) => {
|
|
34
|
+
$scope[_app.as + 'DefaultItem'] = {};
|
|
35
|
+
$scope[_app.as + 'Item'] = {};
|
|
36
|
+
$scope[_app.as + 'List'] = [];
|
|
37
|
+
|
|
38
|
+
$scope[_app.as + 'Display'] = function () {
|
|
39
|
+
$scope.error = '';
|
|
40
|
+
$scope[_app.as + 'Item'] = { ...$scope[_app.as + 'DefaultItem'] };
|
|
41
|
+
site.showModal(_app.modal);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
$scope[_app.as + 'Add'] = function () {
|
|
45
|
+
$scope.error = '';
|
|
46
|
+
const v = site.validated(_app.modal);
|
|
47
|
+
if (!v.ok) {
|
|
48
|
+
$scope.error = v.messages[0].ar;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
$scope.busy = true;
|
|
52
|
+
$http({
|
|
53
|
+
method: 'POST',
|
|
54
|
+
url: `/api/${_app.name}/add`,
|
|
55
|
+
data: $scope[_app.as + 'Item'],
|
|
56
|
+
}).then(
|
|
57
|
+
function (response) {
|
|
58
|
+
$scope.busy = false;
|
|
59
|
+
if (response.data.done) {
|
|
60
|
+
$scope[_app.as + 'List'].push(response.data.doc);
|
|
61
|
+
$scope[_app.as + 'Item'] = { ...$scope[_app.as + 'DefaultItem'] };
|
|
62
|
+
} else {
|
|
63
|
+
$scope.error = 'Please Login First';
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
function (err) {
|
|
67
|
+
$scope.onError({ error: err, func: _app.as + 'Add' });
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
$scope[_app.as + 'Update'] = function (selectedItem) {
|
|
72
|
+
$scope.error = '';
|
|
73
|
+
const v = site.validated(_app.modal);
|
|
74
|
+
if (!v.ok) {
|
|
75
|
+
$scope.error = v.messages[0].ar;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
$scope.busy = true;
|
|
79
|
+
$http({
|
|
80
|
+
method: 'POST',
|
|
81
|
+
url: `/api/${_app.name}/update`,
|
|
82
|
+
data: selectedItem,
|
|
83
|
+
}).then(
|
|
84
|
+
function (response) {
|
|
85
|
+
$scope.busy = false;
|
|
86
|
+
if (response.data.done) {
|
|
87
|
+
let index = $scope[_app.as + 'List'].findIndex((ss) => ss.id === selectedItem.id);
|
|
88
|
+
if (index > -1) {
|
|
89
|
+
$scope[_app.as + 'List'][index] = response.data.doc;
|
|
90
|
+
}
|
|
91
|
+
$scope[_app.as + 'Item'] = { ...$scope[_app.as + 'DefaultItem'] };
|
|
92
|
+
} else {
|
|
93
|
+
$scope.error = 'Please Login First';
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
function (err) {
|
|
97
|
+
$scope.onError({ error: err, func: _app.as + 'Update' });
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
};
|
|
101
|
+
$scope[_app.as + 'Delete'] = function (selectedItem) {
|
|
102
|
+
$scope.error = '';
|
|
103
|
+
const v = site.validated(_app.modal);
|
|
104
|
+
if (!v.ok) {
|
|
105
|
+
$scope.error = v.messages[0].ar;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
$scope.busy = true;
|
|
109
|
+
$http({
|
|
110
|
+
method: 'POST',
|
|
111
|
+
url: `/api/${_app.name}/delete`,
|
|
112
|
+
data: selectedItem,
|
|
113
|
+
}).then(
|
|
114
|
+
function (response) {
|
|
115
|
+
$scope.busy = false;
|
|
116
|
+
if (response.data.done) {
|
|
117
|
+
let index = $scope[_app.as + 'List'].findIndex((ss) => ss.id === selectedItem.id);
|
|
118
|
+
if (index > -1) {
|
|
119
|
+
$scope[_app.as + 'List'].splice(index, 1);
|
|
120
|
+
}
|
|
121
|
+
} else {
|
|
122
|
+
$scope.error = 'Please Login First';
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
function (err) {
|
|
126
|
+
$scope.onError({ error: err, func: _app.as + 'Delete' });
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
$scope[_app.as + 'LoadAll'] = function () {
|
|
131
|
+
$scope.busy = true;
|
|
132
|
+
$http({
|
|
133
|
+
method: 'POST',
|
|
134
|
+
url: `/api/${_app.name}/all`,
|
|
135
|
+
data: {
|
|
136
|
+
where: {},
|
|
137
|
+
select: {},
|
|
138
|
+
},
|
|
139
|
+
}).then(
|
|
140
|
+
function (response) {
|
|
141
|
+
$scope.busy = false;
|
|
142
|
+
if (response.data.done && response.data.list.length > 0) {
|
|
143
|
+
$scope[_app.as + 'List'] = response.data.list;
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
function (err) {
|
|
147
|
+
$scope.busy = false;
|
|
148
|
+
$scope.onError({ error: err, func: _app.as + 'LoadAll' });
|
|
149
|
+
}
|
|
150
|
+
);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
if (index === 0) {
|
|
154
|
+
$scope.display = $scope[_app.as + 'Display'];
|
|
155
|
+
$scope.add = $scope[_app.as + 'Add'];
|
|
156
|
+
$scope.update = $scope[_app.as + 'Update'];
|
|
157
|
+
$scope.delete = $scope[_app.as + 'Delete'];
|
|
158
|
+
$scope.loadAll = $scope[_app.as + 'LoadAll'];
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (callback) {
|
|
163
|
+
callback($scope, $http, $timeout, $interval);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
};
|
|
@@ -906,7 +906,6 @@ app.directive('iImage', [
|
|
|
906
906
|
ngChange: '&',
|
|
907
907
|
},
|
|
908
908
|
link: function ($scope, element, attrs, ctrl) {
|
|
909
|
-
$scope.folder = $scope.folder || 'default';
|
|
910
909
|
$scope.accept = $scope.accept ? $scope.accept : 'image/*';
|
|
911
910
|
$scope.viewOnly = $scope.view === undefined ? false : true;
|
|
912
911
|
|
|
@@ -60,12 +60,6 @@ app.service('isite', [
|
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
this.uploadImage = function (files, options, callback) {
|
|
63
|
-
options = Object.assign(
|
|
64
|
-
{
|
|
65
|
-
category: 'default',
|
|
66
|
-
},
|
|
67
|
-
options
|
|
68
|
-
);
|
|
69
63
|
callback = callback || function () {};
|
|
70
64
|
|
|
71
65
|
var fd = new FormData();
|
|
@@ -75,7 +69,7 @@ app.service('isite', [
|
|
|
75
69
|
withCredentials: !0,
|
|
76
70
|
headers: {
|
|
77
71
|
'Content-Type': undefined,
|
|
78
|
-
|
|
72
|
+
...options
|
|
79
73
|
},
|
|
80
74
|
uploadEventHandlers: {
|
|
81
75
|
progress: function (e) {
|
|
@@ -577,6 +577,9 @@
|
|
|
577
577
|
return site.to123(JSON.parse(obj));
|
|
578
578
|
};
|
|
579
579
|
site.show = site.showObject = function (obj) {
|
|
580
|
+
if (!obj) {
|
|
581
|
+
return {};
|
|
582
|
+
}
|
|
580
583
|
return JSON.parse(site.from123(obj));
|
|
581
584
|
};
|
|
582
585
|
|
|
@@ -709,7 +712,7 @@
|
|
|
709
712
|
en: 'Data Is Required',
|
|
710
713
|
ar: 'هذا البيان مطلوب',
|
|
711
714
|
});
|
|
712
|
-
} else if (el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA' || el.nodeName === 'I-DATETIME'|| el.nodeName === 'I-DATE') {
|
|
715
|
+
} else if (el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA' || el.nodeName === 'I-DATETIME' || el.nodeName === 'I-DATE') {
|
|
713
716
|
el.classList.add('is-valid');
|
|
714
717
|
}
|
|
715
718
|
} else if (vl.like('ml*')) {
|
package/index.js
CHANGED
|
@@ -28,8 +28,10 @@ module.exports = function init(options) {
|
|
|
28
28
|
____0.md5 = ____0.hash = ____0.x0md50x = require('md5');
|
|
29
29
|
____0.nodemailer = require('nodemailer');
|
|
30
30
|
____0.child_process = require('child_process');
|
|
31
|
+
____0.webp = require('webp-converter');
|
|
31
32
|
|
|
32
33
|
____0.setting = {};
|
|
34
|
+
____0.collectionList = [];
|
|
33
35
|
____0.apps = [];
|
|
34
36
|
____0.appList = [];
|
|
35
37
|
____0.addApp = function (app) {
|
|
@@ -176,6 +178,8 @@ module.exports = function init(options) {
|
|
|
176
178
|
require('./lib/vars.js')(____0);
|
|
177
179
|
|
|
178
180
|
//DataBase Management Oprations
|
|
181
|
+
|
|
182
|
+
|
|
179
183
|
if (____0.options.mongodb.enabled) {
|
|
180
184
|
____0.mongodb = require('./lib/mongodb.js')(____0);
|
|
181
185
|
____0.connectCollection = function (option, db) {
|
|
@@ -210,6 +214,7 @@ module.exports = function init(options) {
|
|
|
210
214
|
require('./lib/browser.js')(____0);
|
|
211
215
|
require('./lib/helper.js')(____0);
|
|
212
216
|
require('./lib/pdf.js')(____0);
|
|
217
|
+
require('./lib/app.js')(____0);
|
|
213
218
|
|
|
214
219
|
//Master Pages
|
|
215
220
|
____0.masterPages = [];
|