encommon 0.21.0__py3-none-any.whl → 0.22.1__py3-none-any.whl
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.
- encommon/times/common.py +3 -0
- encommon/times/unitime.py +23 -11
- encommon/version.txt +1 -1
- encommon/webkit/__init__.py +15 -0
- encommon/webkit/content.py +94 -0
- encommon/webkit/images/enasis.svg +174 -0
- encommon/webkit/images/failure.svg +15 -0
- encommon/webkit/images/information.svg +18 -0
- encommon/webkit/images/success.svg +18 -0
- encommon/webkit/images/warning.svg +16 -0
- encommon/webkit/index.html +218 -0
- encommon/webkit/scripts/color.js +60 -0
- encommon/webkit/scripts/datagrid.js +105 -0
- encommon/webkit/scripts/datetime.js +160 -0
- encommon/webkit/scripts/default.js +327 -0
- encommon/webkit/scripts/duration.js +150 -0
- encommon/webkit/scripts/helpers.js +247 -0
- encommon/webkit/scripts/image.js +39 -0
- encommon/webkit/scripts/message.js +31 -0
- encommon/webkit/scripts/moderate.js +71 -0
- encommon/webkit/scripts/numeric.js +189 -0
- encommon/webkit/scripts/statate.js +35 -0
- encommon/webkit/scripts/tagues.js +34 -0
- encommon/webkit/styles/color.css +57 -0
- encommon/webkit/styles/datagrid.css +58 -0
- encommon/webkit/styles/datetime.css +50 -0
- encommon/webkit/styles/default.css +204 -0
- encommon/webkit/styles/duration.css +44 -0
- encommon/webkit/styles/image.css +60 -0
- encommon/webkit/styles/message.css +88 -0
- encommon/webkit/styles/moderate.css +64 -0
- encommon/webkit/styles/numeric.css +55 -0
- encommon/webkit/styles/statate.css +50 -0
- encommon/webkit/styles/tagues.css +45 -0
- encommon/webkit/test/__init__.py +39 -0
- encommon/webkit/test/conftest.py +52 -0
- encommon/webkit/test/test_color.py +64 -0
- encommon/webkit/test/test_content.py +98 -0
- encommon/webkit/test/test_datagrid.py +90 -0
- encommon/webkit/test/test_datetime.py +75 -0
- encommon/webkit/test/test_default.py +314 -0
- encommon/webkit/test/test_duration.py +74 -0
- encommon/webkit/test/test_helpers.py +382 -0
- encommon/webkit/test/test_image.py +62 -0
- encommon/webkit/test/test_message.py +64 -0
- encommon/webkit/test/test_moderate.py +75 -0
- encommon/webkit/test/test_numeric.py +164 -0
- encommon/webkit/test/test_statate.py +78 -0
- encommon/webkit/test/test_tagues.py +66 -0
- {encommon-0.21.0.dist-info → encommon-0.22.1.dist-info}/METADATA +1 -1
- {encommon-0.21.0.dist-info → encommon-0.22.1.dist-info}/RECORD +54 -8
- {encommon-0.21.0.dist-info → encommon-0.22.1.dist-info}/LICENSE +0 -0
- {encommon-0.21.0.dist-info → encommon-0.22.1.dist-info}/WHEEL +0 -0
- {encommon-0.21.0.dist-info → encommon-0.22.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
/*
|
2
|
+
Functions and routines associated with Enasis Network Common Library.
|
3
|
+
|
4
|
+
This file is part of Enasis Network software eco-system. Distribution
|
5
|
+
is permitted, for more information consult the project license file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
function colordiv(
|
11
|
+
input,
|
12
|
+
label=null,
|
13
|
+
) {
|
14
|
+
// Construct element for displaying the specified color.
|
15
|
+
|
16
|
+
assert(!isnull(input));
|
17
|
+
|
18
|
+
|
19
|
+
let element =
|
20
|
+
$('<div/>').addClass(
|
21
|
+
'encommon_colordiv');
|
22
|
+
|
23
|
+
|
24
|
+
let known = [
|
25
|
+
'gray',
|
26
|
+
'red',
|
27
|
+
'blue',
|
28
|
+
'green',
|
29
|
+
'yellow',
|
30
|
+
'pink',
|
31
|
+
'teal'];
|
32
|
+
|
33
|
+
if (known.includes(input))
|
34
|
+
input =
|
35
|
+
'rgb(var(--color-'
|
36
|
+
+ `${input}-dark))`;
|
37
|
+
|
38
|
+
|
39
|
+
let value =
|
40
|
+
$('<div/>')
|
41
|
+
.addClass('_value');
|
42
|
+
|
43
|
+
value.css(
|
44
|
+
'background-color',
|
45
|
+
input);
|
46
|
+
|
47
|
+
element.append(value);
|
48
|
+
|
49
|
+
|
50
|
+
if (!isnull(label)) {
|
51
|
+
|
52
|
+
let _label =
|
53
|
+
$('<div/>')
|
54
|
+
.addClass('_label')
|
55
|
+
.html(label);
|
56
|
+
|
57
|
+
element.append(_label); }
|
58
|
+
|
59
|
+
|
60
|
+
return element; }
|
@@ -0,0 +1,105 @@
|
|
1
|
+
/*
|
2
|
+
Functions and routines associated with Enasis Network Common Library.
|
3
|
+
|
4
|
+
This file is part of Enasis Network software eco-system. Distribution
|
5
|
+
is permitted, for more information consult the project license file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
function datagrid(
|
11
|
+
fields,
|
12
|
+
values,
|
13
|
+
) {
|
14
|
+
// Construct the table with the header using the contents.
|
15
|
+
|
16
|
+
assert(!isnull(fields));
|
17
|
+
assert(!isnull(values));
|
18
|
+
|
19
|
+
|
20
|
+
let element =
|
21
|
+
$('<table/>').addClass(
|
22
|
+
'encommon_datagrid');
|
23
|
+
|
24
|
+
|
25
|
+
element.append(
|
26
|
+
_table_header(fields));
|
27
|
+
|
28
|
+
element.append(
|
29
|
+
_table_records(
|
30
|
+
fields, values));
|
31
|
+
|
32
|
+
|
33
|
+
return element; }
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
function _table_header(
|
38
|
+
fields,
|
39
|
+
) {
|
40
|
+
// Construct the header for use with the table contents.
|
41
|
+
|
42
|
+
let element = $('<thead/>');
|
43
|
+
let trow = $('<tr/>');
|
44
|
+
|
45
|
+
|
46
|
+
let _fields =
|
47
|
+
Object.keys(fields);
|
48
|
+
|
49
|
+
_fields.forEach(key => {
|
50
|
+
|
51
|
+
let tcell = $('<th/>');
|
52
|
+
|
53
|
+
let value = fields[key];
|
54
|
+
|
55
|
+
tcell.text(value);
|
56
|
+
|
57
|
+
trow.append(tcell); });
|
58
|
+
|
59
|
+
|
60
|
+
element.append(trow);
|
61
|
+
|
62
|
+
return element; }
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
function _table_records(
|
67
|
+
fields,
|
68
|
+
values,
|
69
|
+
) {
|
70
|
+
// Construct the records for use with the table contents.
|
71
|
+
|
72
|
+
let element = $('<tbody/>');
|
73
|
+
|
74
|
+
|
75
|
+
values.forEach(record => {
|
76
|
+
|
77
|
+
let trow = $('<tr/>');
|
78
|
+
|
79
|
+
|
80
|
+
let _fields =
|
81
|
+
Object.keys(fields);
|
82
|
+
|
83
|
+
_fields.forEach(key => {
|
84
|
+
|
85
|
+
let tcell = $('<td/>');
|
86
|
+
let value = record[key];
|
87
|
+
|
88
|
+
if (isquery(value))
|
89
|
+
tcell.html(
|
90
|
+
value[0].outerHTML);
|
91
|
+
|
92
|
+
else if (isnode(value))
|
93
|
+
tcell.html(
|
94
|
+
value.outerHTML);
|
95
|
+
|
96
|
+
else if (!isnull(value))
|
97
|
+
tcell.text(value);
|
98
|
+
|
99
|
+
trow.append(tcell); });
|
100
|
+
|
101
|
+
|
102
|
+
element.append(trow); });
|
103
|
+
|
104
|
+
|
105
|
+
return element; }
|
@@ -0,0 +1,160 @@
|
|
1
|
+
/*
|
2
|
+
Functions and routines associated with Enasis Network Common Library.
|
3
|
+
|
4
|
+
This file is part of Enasis Network software eco-system. Distribution
|
5
|
+
is permitted, for more information consult the project license file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
function datestamp(
|
11
|
+
value,
|
12
|
+
) {
|
13
|
+
// Return the timestamp using provided format for instance.
|
14
|
+
|
15
|
+
assert(!isnull(value));
|
16
|
+
|
17
|
+
|
18
|
+
let element =
|
19
|
+
$('<div/>').addClass(
|
20
|
+
'encommon_datestamp');
|
21
|
+
|
22
|
+
|
23
|
+
let date =
|
24
|
+
new Date(value);
|
25
|
+
|
26
|
+
let time =
|
27
|
+
date.getTime();
|
28
|
+
|
29
|
+
assert(time);
|
30
|
+
|
31
|
+
|
32
|
+
let pad = num =>
|
33
|
+
String(num)
|
34
|
+
.padStart(2, '0');
|
35
|
+
|
36
|
+
let source_month =
|
37
|
+
pad(date.getMonth() + 1);
|
38
|
+
|
39
|
+
let source_day =
|
40
|
+
pad(date.getDate());
|
41
|
+
|
42
|
+
let source_year =
|
43
|
+
date.getFullYear();
|
44
|
+
|
45
|
+
let source_hours =
|
46
|
+
pad(date.getHours());
|
47
|
+
|
48
|
+
let source_minutes =
|
49
|
+
pad(date.getMinutes());
|
50
|
+
|
51
|
+
let source_seconds =
|
52
|
+
pad(date.getSeconds());
|
53
|
+
|
54
|
+
let source_tzname =
|
55
|
+
_tzname(date);
|
56
|
+
|
57
|
+
if (source_tzname == 'GMT')
|
58
|
+
source_tzname = 'UTC';
|
59
|
+
|
60
|
+
|
61
|
+
element.append(
|
62
|
+
$('<span/>')
|
63
|
+
.addClass('_value')
|
64
|
+
.addClass('_year')
|
65
|
+
.text(source_year));
|
66
|
+
|
67
|
+
element.append(
|
68
|
+
$('<span/>')
|
69
|
+
.addClass('_delim')
|
70
|
+
.addClass('_slash')
|
71
|
+
.text('-'));
|
72
|
+
|
73
|
+
element.append(
|
74
|
+
$('<span/>')
|
75
|
+
.addClass('_value')
|
76
|
+
.addClass('_month')
|
77
|
+
.text(source_month));
|
78
|
+
|
79
|
+
element.append(
|
80
|
+
$('<span/>')
|
81
|
+
.addClass('_delim')
|
82
|
+
.addClass('_slash')
|
83
|
+
.text('-'));
|
84
|
+
|
85
|
+
element.append(
|
86
|
+
$('<span/>')
|
87
|
+
.addClass('_value')
|
88
|
+
.addClass('_day')
|
89
|
+
.text(source_day));
|
90
|
+
|
91
|
+
element.append(
|
92
|
+
$('<span/>')
|
93
|
+
.addClass('_delim')
|
94
|
+
.addClass('_space')
|
95
|
+
.html(' '));
|
96
|
+
|
97
|
+
element.append(
|
98
|
+
$('<span/>')
|
99
|
+
.addClass('_value')
|
100
|
+
.addClass('_hours')
|
101
|
+
.text(source_hours));
|
102
|
+
|
103
|
+
element.append(
|
104
|
+
$('<span/>')
|
105
|
+
.addClass('_delim')
|
106
|
+
.addClass('_colon')
|
107
|
+
.text(':'));
|
108
|
+
|
109
|
+
element.append(
|
110
|
+
$('<span/>')
|
111
|
+
.addClass('_value')
|
112
|
+
.addClass('_minutes')
|
113
|
+
.text(source_minutes));
|
114
|
+
|
115
|
+
element.append(
|
116
|
+
$('<span/>')
|
117
|
+
.addClass('_delim')
|
118
|
+
.addClass('_colon')
|
119
|
+
.text(':'));
|
120
|
+
|
121
|
+
element.append(
|
122
|
+
$('<span/>')
|
123
|
+
.addClass('_value')
|
124
|
+
.addClass('_seconds')
|
125
|
+
.text(source_seconds));
|
126
|
+
|
127
|
+
element.append(
|
128
|
+
$('<span/>')
|
129
|
+
.addClass('_delim')
|
130
|
+
.addClass('_space')
|
131
|
+
.html(' '));
|
132
|
+
|
133
|
+
element.append(
|
134
|
+
$('<span/>')
|
135
|
+
.addClass('_tzname')
|
136
|
+
.text(source_tzname));
|
137
|
+
|
138
|
+
|
139
|
+
return element; }
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
function _tzname(
|
144
|
+
date,
|
145
|
+
) {
|
146
|
+
// Return the located timezone object for the provided date.
|
147
|
+
|
148
|
+
assert(!isnull(date));
|
149
|
+
|
150
|
+
let tzname =
|
151
|
+
new Intl.DateTimeFormat(
|
152
|
+
'en-US',
|
153
|
+
{'timeZoneName': 'short'})
|
154
|
+
.formatToParts(date)
|
155
|
+
.find(
|
156
|
+
x =>
|
157
|
+
x.type === 'timeZoneName')
|
158
|
+
.value;
|
159
|
+
|
160
|
+
return tzname; }
|
@@ -0,0 +1,327 @@
|
|
1
|
+
/*
|
2
|
+
Functions and routines associated with Enasis Network Common Library.
|
3
|
+
|
4
|
+
This file is part of Enasis Network software eco-system. Distribution
|
5
|
+
is permitted, for more information consult the project license file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
(function (global) {
|
11
|
+
// jQuery like object for use in Enasis Network projects.
|
12
|
+
|
13
|
+
'use strict';
|
14
|
+
|
15
|
+
global.$ = $;
|
16
|
+
|
17
|
+
|
18
|
+
function $(selector) {
|
19
|
+
|
20
|
+
if (!(this instanceof $))
|
21
|
+
return new $(selector);
|
22
|
+
|
23
|
+
|
24
|
+
if (!selector) {
|
25
|
+
|
26
|
+
this.length = 0;
|
27
|
+
this.elements = [];
|
28
|
+
|
29
|
+
return this; }
|
30
|
+
|
31
|
+
|
32
|
+
if (isquery(selector))
|
33
|
+
return selector;
|
34
|
+
|
35
|
+
else if (isnodes(selector))
|
36
|
+
this.elements = selector;
|
37
|
+
|
38
|
+
else if (isnode(selector))
|
39
|
+
this.elements = [selector];
|
40
|
+
|
41
|
+
else if (isstr(selector))
|
42
|
+
_enquery(this, selector);
|
43
|
+
|
44
|
+
|
45
|
+
this.length =
|
46
|
+
this.elements
|
47
|
+
.length;
|
48
|
+
|
49
|
+
this.elements
|
50
|
+
.forEach(
|
51
|
+
(x, y) =>
|
52
|
+
{ this[y] = x; }); }
|
53
|
+
|
54
|
+
|
55
|
+
$.prototype
|
56
|
+
.enquery = true;
|
57
|
+
|
58
|
+
$.prototype
|
59
|
+
.each = _enquery_each;
|
60
|
+
|
61
|
+
$.prototype
|
62
|
+
.clone = _enquery_clone;
|
63
|
+
|
64
|
+
$.prototype
|
65
|
+
.css = _enquery_css;
|
66
|
+
|
67
|
+
$.prototype
|
68
|
+
.addClass = _enquery_addcls;
|
69
|
+
|
70
|
+
$.prototype
|
71
|
+
.remClass = _enquery_remcls;
|
72
|
+
|
73
|
+
$.prototype
|
74
|
+
.hide = _enquery_hide;
|
75
|
+
|
76
|
+
$.prototype
|
77
|
+
.show = _enquery_show;
|
78
|
+
|
79
|
+
$.prototype
|
80
|
+
.text = _enquery_text;
|
81
|
+
|
82
|
+
$.prototype
|
83
|
+
.html = _enquery_html;
|
84
|
+
|
85
|
+
$.prototype
|
86
|
+
.append = _enquery_append;
|
87
|
+
|
88
|
+
$.prototype
|
89
|
+
.replace = _enquery_replace;
|
90
|
+
|
91
|
+
$.prototype
|
92
|
+
.attr = _enquery_attr;
|
93
|
+
|
94
|
+
})(window);
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
function _enquery(
|
99
|
+
source,
|
100
|
+
selector,
|
101
|
+
) {
|
102
|
+
// Helper function for Enasis Network jQuery replacement.
|
103
|
+
|
104
|
+
const create = /^<(\w+)\/>$/;
|
105
|
+
|
106
|
+
assert(isstr(selector));
|
107
|
+
|
108
|
+
if (!create.test(selector))
|
109
|
+
source.elements =
|
110
|
+
document
|
111
|
+
.querySelectorAll(selector);
|
112
|
+
|
113
|
+
else {
|
114
|
+
|
115
|
+
let tagName =
|
116
|
+
selector
|
117
|
+
.match(create)[1];
|
118
|
+
|
119
|
+
let element =
|
120
|
+
document
|
121
|
+
.createElement(tagName);
|
122
|
+
|
123
|
+
source.elements = [element]; } }
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
function _enquery_each(
|
128
|
+
element,
|
129
|
+
) {
|
130
|
+
// Helper function for Enasis Network jQuery replacement.
|
131
|
+
|
132
|
+
let items = this.elements;
|
133
|
+
|
134
|
+
this.elements.forEach(
|
135
|
+
(x, y) =>
|
136
|
+
element.call(x, y, x));
|
137
|
+
|
138
|
+
return this; }
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
function _enquery_css(
|
143
|
+
name,
|
144
|
+
value,
|
145
|
+
) {
|
146
|
+
// Helper function for Enasis Network jQuery replacement.
|
147
|
+
|
148
|
+
function _each() {
|
149
|
+
this.style[name] = value; }
|
150
|
+
|
151
|
+
return this.each(_each); }
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
function _enquery_addcls(
|
156
|
+
name,
|
157
|
+
) {
|
158
|
+
// Helper function for Enasis Network jQuery replacement.
|
159
|
+
|
160
|
+
function _each() {
|
161
|
+
this.classList
|
162
|
+
.add(name); }
|
163
|
+
|
164
|
+
return this.each(_each); }
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
function _enquery_remcls(
|
169
|
+
name,
|
170
|
+
) {
|
171
|
+
// Helper function for Enasis Network jQuery replacement.
|
172
|
+
|
173
|
+
function _each() {
|
174
|
+
this.classList
|
175
|
+
.remove(name); }
|
176
|
+
|
177
|
+
return this.each(_each); }
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
function _enquery_hide() {
|
182
|
+
// Helper function for Enasis Network jQuery replacement.
|
183
|
+
|
184
|
+
let returned =
|
185
|
+
this.css('display', 'none');
|
186
|
+
|
187
|
+
return returned; }
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
function _enquery_show() {
|
192
|
+
// Helper function for Enasis Network jQuery replacement.
|
193
|
+
|
194
|
+
let returned =
|
195
|
+
this.css('display', 'block');
|
196
|
+
|
197
|
+
return returned; }
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
function _enquery_text(
|
202
|
+
text,
|
203
|
+
) {
|
204
|
+
// Helper function for Enasis Network jQuery replacement.
|
205
|
+
|
206
|
+
if (text === undefined) {
|
207
|
+
|
208
|
+
if (this.length > 0)
|
209
|
+
return this[0].textContent;
|
210
|
+
|
211
|
+
return undefined; }
|
212
|
+
|
213
|
+
else {
|
214
|
+
|
215
|
+
function _each() {
|
216
|
+
this.textContent = text; }
|
217
|
+
|
218
|
+
return this.each(_each); } }
|
219
|
+
|
220
|
+
|
221
|
+
|
222
|
+
function _enquery_html(
|
223
|
+
html,
|
224
|
+
) {
|
225
|
+
// Helper function for Enasis Network jQuery replacement.
|
226
|
+
|
227
|
+
if (html === undefined) {
|
228
|
+
|
229
|
+
if (this.length > 0)
|
230
|
+
return this[0].innerHTML;
|
231
|
+
|
232
|
+
return undefined; }
|
233
|
+
|
234
|
+
else {
|
235
|
+
|
236
|
+
if (isquery(html))
|
237
|
+
html = html[0].outerHTML;
|
238
|
+
|
239
|
+
else if (isnode(html))
|
240
|
+
html = html.outerHTML;
|
241
|
+
|
242
|
+
function _each() {
|
243
|
+
this.innerHTML = html; }
|
244
|
+
|
245
|
+
return this.each(_each); } }
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
function _enquery_append(
|
250
|
+
element,
|
251
|
+
) {
|
252
|
+
// Helper function for Enasis Network jQuery replacement.
|
253
|
+
|
254
|
+
assert(element.enquery)
|
255
|
+
|
256
|
+
let nodes = element.elements;
|
257
|
+
|
258
|
+
|
259
|
+
function _each(index) {
|
260
|
+
|
261
|
+
nodes.forEach(
|
262
|
+
(x) => {
|
263
|
+
const element =
|
264
|
+
index < 1 ?
|
265
|
+
x : node.cloneNode(true);
|
266
|
+
this
|
267
|
+
.appendChild(element); }); }
|
268
|
+
|
269
|
+
|
270
|
+
return this.each(_each); }
|
271
|
+
|
272
|
+
|
273
|
+
|
274
|
+
function _enquery_replace(
|
275
|
+
element,
|
276
|
+
) {
|
277
|
+
// Helper function for Enasis Network jQuery replacement.
|
278
|
+
|
279
|
+
assert(element.enquery)
|
280
|
+
|
281
|
+
let nodes = element.elements;
|
282
|
+
|
283
|
+
|
284
|
+
function _each(index) {
|
285
|
+
|
286
|
+
nodes.forEach(
|
287
|
+
(x) => {
|
288
|
+
const element =
|
289
|
+
index < 1 ?
|
290
|
+
x : x.cloneNode(true);
|
291
|
+
this
|
292
|
+
.replaceChildren(element); }); }
|
293
|
+
|
294
|
+
|
295
|
+
return this.each(_each); }
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
function _enquery_attr(
|
300
|
+
name,
|
301
|
+
value,
|
302
|
+
) {
|
303
|
+
// Helper function for Enasis Network jQuery replacement.
|
304
|
+
|
305
|
+
if (this.length === 0)
|
306
|
+
return undefined;
|
307
|
+
|
308
|
+
if (value !== undefined)
|
309
|
+
this[0]
|
310
|
+
.setAttribute(name, value);
|
311
|
+
|
312
|
+
let returned =
|
313
|
+
this[0]
|
314
|
+
.getAttribute(name);
|
315
|
+
|
316
|
+
return returned; }
|
317
|
+
|
318
|
+
|
319
|
+
|
320
|
+
function _enquery_clone() {
|
321
|
+
|
322
|
+
let clones =
|
323
|
+
Array
|
324
|
+
.from(this.elements)
|
325
|
+
.map(x => x.cloneNode(true));
|
326
|
+
|
327
|
+
return $(clones); }
|