total5 0.0.8-2 → 0.0.8

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/builders.js CHANGED
@@ -47,6 +47,11 @@ Options.prototype = {
47
47
  this.payload = value;
48
48
  },
49
49
 
50
+ get hostname() {
51
+ let ctrl = this.controller;
52
+ return ctrl ? ((ctrl.protocol || 'https') + '://' + ctrl.headers.host) : null;
53
+ },
54
+
50
55
  get url() {
51
56
  return (this.controller ? this.controller.url : '') || '';
52
57
  },
@@ -121,6 +126,7 @@ Options.prototype.promisify = function(fn, a, b, c) {
121
126
 
122
127
  var callback = function(err, response) {
123
128
  if (err)
129
+
124
130
  $.invalid(err);
125
131
  else
126
132
  resolve(response);
@@ -941,9 +947,12 @@ function restbuilder_callback(err, response) {
941
947
 
942
948
  if (self.options.custom) {
943
949
  if (self.$resolve) {
944
- if (err)
945
- self.$.invalid(err);
946
- else
950
+ if (err) {
951
+ if (self.$)
952
+ self.$.invalid(err);
953
+ else
954
+ self.$reject(err);
955
+ } else
947
956
  self.$resolve(response);
948
957
  self.$ = null;
949
958
  self.$reject = null;
@@ -1042,8 +1051,12 @@ function restbuilder_callback(err, response) {
1042
1051
 
1043
1052
  if (self.$resolve) {
1044
1053
 
1045
- if (err)
1046
- self.$.invalid(err);
1054
+ if (err) {
1055
+ if (self.$)
1056
+ self.$.invalid(err);
1057
+ else
1058
+ self.$reject(err);
1059
+ }
1047
1060
  else
1048
1061
  self.$resolve(val);
1049
1062
 
package/changelog.txt CHANGED
@@ -11,6 +11,10 @@
11
11
  - fixed context in the components
12
12
  - fixed URL downloading templates in `TEMPLATE()` method
13
13
  - fixed parsing of unpaired elements in HTMLParser
14
+ - added support for `log` extension in static file processing
15
+ - fixed selectors in the HTMLParser
16
+ - added `$.hostname {String}` to the `SchemaOptions`
17
+ - fixed `RESTBuilder.promise()`
14
18
 
15
19
  ========================
16
20
  0.0.7
package/htmlparser.js CHANGED
@@ -24,23 +24,23 @@ function parseRule(selector, output) {
24
24
  rule.attrs = [];
25
25
  rule.output = output || [];
26
26
 
27
+ // > div
27
28
  // div div[name="Peter Sirka"]
28
29
  // div > div[name="Peter Sirka"]
29
30
 
30
- // for (var c of selector) {
31
- // if (c === '>')
32
- // console.log(c);
33
- // }
34
-
35
31
  var cache = [];
36
32
 
37
- selector = selector.replace(/\[.*?\]/gi, text => '[' + (cache.push(text) - 1) + ']').replace(/(\s)?>(\s)?/, '>').replace(/\s{2}/g, '');
33
+ selector = selector.replace(/\[.*?\]/gi, text => '[' + (cache.push(text) - 1) + ']').replace(/(\s)?>(\s)?/, '>').replace(/\s{2}/g, '').trim();
34
+
35
+ rule.notravelse = selector[0] === '>';
36
+
37
+ if (rule.notravelse)
38
+ selector = selector.substring(1);
38
39
 
39
40
  var m = selector.match(/>|\s/);
40
41
  if (m) {
41
- var nested = selector.substring(m.index + 1).trim().replace(/\[\d+\]/g, text => cache[+text.substring(1, text.length - 1)]);
42
+ var nested = selector.substring(m.index).trim().replace(/\[\d+\]/g, text => cache[+text.substring(1, text.length - 1)]);
42
43
  rule.nested = parseRule(nested, rule.output);
43
- rule.direct = m[0] === '>';
44
44
  selector = selector.substring(0, m.index).trim();
45
45
  }
46
46
 
@@ -156,6 +156,48 @@ function extendarr(output) {
156
156
  return output;
157
157
  }
158
158
 
159
+ function compare(rule, node) {
160
+
161
+ if (rule.prefix === '*') {
162
+ var tagName = node.tagName;
163
+ if (node.prefix)
164
+ tagName = tagName.substring(node.prefix.length);
165
+ if (tagName !== rule.tagName)
166
+ return false;
167
+ } else {
168
+ if (rule.tagName && rule.tagName !== node.tagName)
169
+ return false;
170
+ if (rule.prefix && rule.prefix !== node.prefix)
171
+ return false;
172
+ }
173
+
174
+ if (rule.attrs.length) {
175
+ for (var attr of rule.attrs) {
176
+ switch (attr.id) {
177
+ case 'class':
178
+ var tmp = node.attrs[attr.id];
179
+ if (tmp) {
180
+ tmp = tmp.split(' ');
181
+ if (!tmp.includes(attr.value))
182
+ return false;
183
+ } else
184
+ return false;
185
+ break;
186
+ default:
187
+ if (attr.value) {
188
+ if (node.attrs[attr.id] !== attr.value)
189
+ return false;
190
+ } else if (node.attrs[attr.id] === undefined)
191
+ return false;
192
+
193
+ break;
194
+ }
195
+ }
196
+ }
197
+
198
+ return true;
199
+ }
200
+
159
201
  HTMLElement.prototype.find = function(selector, reverse) {
160
202
 
161
203
  var self = this;
@@ -166,81 +208,33 @@ HTMLElement.prototype.find = function(selector, reverse) {
166
208
  for (var sel of selectors)
167
209
  rules.push(parseRule(sel.trim()));
168
210
 
169
- var browse = function(rule, children, parent) {
211
+ var browse = function(rule, children) {
170
212
 
171
- for (var node of children) {
213
+ for (let node of children) {
172
214
 
173
215
  if (!node.tagName)
174
216
  continue;
175
217
 
176
- var skip = false;
177
-
178
- if (rule.prefix === '*') {
179
-
180
- var tagName = node.tagName;
181
- if (node.prefix)
182
- tagName = tagName.substring(node.prefix.length);
183
-
184
- if (tagName !== rule.tagName)
185
- skip = true;
186
-
187
- } else {
188
- if (rule.tagName && rule.tagName !== node.tagName)
189
- skip = true;
190
- if (rule.prefix && rule.prefix !== node.prefix)
191
- skip = true;
192
- }
193
-
194
- if (rule.attrs.length && !skip) {
195
- for (var attr of rule.attrs) {
196
- switch (attr.id) {
197
-
198
- case 'class':
199
- var tmp = node.attrs[attr.id];
200
- if (tmp) {
201
- tmp = tmp.split(' ');
202
- if (!tmp.includes(attr.value))
203
- skip = true;
204
- } else
205
- skip = true;
206
- break;
207
-
208
- default:
209
- if (attr.value) {
210
- if (node.attrs[attr.id] !== attr.value)
211
- skip = true;
212
- } else if (node.attrs[attr.id] === undefined)
213
- skip = true;
214
-
215
- break;
216
- }
218
+ let children = reverse ? [node.parentNode] : node.children;
217
219
 
218
- if (skip)
219
- break;
220
- }
220
+ if (!compare(rule, node)) {
221
+ if (!rule.notravelse)
222
+ browse(rule, children);
223
+ continue;
221
224
  }
222
225
 
223
- var next = ((reverse && node.parentNode) || (!reverse && node.children.length));
224
-
225
- if (parent) {
226
- if (skip && parent.direct)
227
- continue;
228
- }
226
+ // types complexType attribute
227
+ // types > complexType attribute
228
+ // types complexType > attribute
229
229
 
230
230
  if (rule.nested) {
231
+ browse(rule.nested, children);
232
+ } else {
231
233
 
232
- if (!skip && next)
233
- browse(rule.nested, reverse ? [node.parentNode] : node.children, rule);
234
-
235
- // Again same
236
- if (!parent)
237
- browse(rule, reverse ? [node.parentNode] : node.children);
234
+ rule.output.push(node);
238
235
 
239
- } else {
240
- if (!skip)
241
- rule.output.push(node);
242
- if (next)
243
- browse(rule, reverse ? [node.parentNode] : node.children);
236
+ if (!rule.notravelse)
237
+ browse(rule, children);
244
238
  }
245
239
  }
246
240
  };
@@ -249,7 +243,9 @@ HTMLElement.prototype.find = function(selector, reverse) {
249
243
  return output;
250
244
 
251
245
  for (var rule of rules) {
246
+
252
247
  browse(rule, reverse ? [self.parentNode] : self.children);
248
+
253
249
  if (rule.output.length)
254
250
  output.push.apply(output, rule.output);
255
251
  }
@@ -626,17 +622,23 @@ function parseHTML(html, trim, onerror, isxml) {
626
622
  }
627
623
  }
628
624
 
629
- var pos = 0;
625
+ var pos = -1;
630
626
  var tagBeg = '<' + dom.raw;
631
627
  var tagEnd = '</' + dom.raw + '>';
628
+ var unpair = false;
632
629
 
633
630
  while (true) {
634
631
 
635
632
  if (counter++ > 10000)
636
633
  break;
637
634
 
638
- beg = str.indexOf(tagBeg, pos);
635
+ if (unpair)
636
+ unpair = false;
637
+ else
638
+ end = str.indexOf(tagEnd, pos);
639
639
 
640
+ // Tries to find the same tag
641
+ beg = str.indexOf(tagBeg, pos);
640
642
  if (beg !== -1) {
641
643
 
642
644
  // another one with the same type
@@ -651,13 +653,11 @@ function parseHTML(html, trim, onerror, isxml) {
651
653
  if (str[posend - 1] === '/') {
652
654
  // unpair
653
655
  pos = posend + 1;
656
+ unpair = true;
654
657
  continue;
655
658
  }
656
-
657
659
  }
658
660
 
659
- end = str.indexOf(tagEnd, pos);
660
-
661
661
  // Fallback for the non-exists end tag
662
662
  if (end === -1) {
663
663
  end = str.length;
@@ -671,20 +671,17 @@ function parseHTML(html, trim, onerror, isxml) {
671
671
  }
672
672
 
673
673
  if (beg === -1 || end < beg) {
674
-
675
674
  pos = end + tagEnd.length;
676
-
677
675
  if (count) {
678
676
  count--;
679
677
  continue;
680
678
  }
681
-
682
679
  break;
683
680
  }
681
+
684
682
  }
685
683
 
686
684
  var inner = str.substring(0, pos - tagEnd.length);
687
-
688
685
  if (inner.indexOf('<') === -1 || (!isxml && (/\<(script|style|template)/).test(tag))) {
689
686
  if (trim)
690
687
  inner = inner.trim();
@@ -700,7 +697,6 @@ function parseHTML(html, trim, onerror, isxml) {
700
697
  if (str && str.indexOf('<') === -1) {
701
698
  if (trim)
702
699
  str = str.trim();
703
-
704
700
  // Commented because it inserts the same textContent twice
705
701
  // str && parent.children.push(makeText(parent, str));
706
702
  }
package/index.js CHANGED
@@ -354,7 +354,7 @@ function unlink(arr, callback) {
354
354
  CONF.$httpmaxsize = 256; // kB
355
355
  CONF.$httprangebuffer = 5120; // 5 MB
356
356
  CONF.$httptimeout = 5; // 5 seconds
357
- CONF.$httpfiles = { flac: true, jpg: true, jpeg: true, png: true, gif: true, ico: true, wasm: true, js: true, mjs: true, css: true, txt: true, xml: true, woff: true, woff2: true, otf: true, ttf: true, eot: true, svg: true, zip: true, rar: true, pdf: true, docx: true, xlsx: true, doc: true, xls: true, html: true, htm: true, appcache: true, manifest: true, map: true, ogv: true, ogg: true, mp4: true, mp3: true, webp: true, webm: true, swf: true, package: true, json: true, ui: true, md: true, m4v: true, jsx: true, heif: true, heic: true, ics: true, ts: true, m3u8: true, wav: true, xsd: true, xsl: true, xslt: true, ipynb: true, ijsnb: true };
357
+ CONF.$httpfiles = { flac: true, jpg: true, jpeg: true, png: true, gif: true, ico: true, wasm: true, js: true, mjs: true, css: true, txt: true, xml: true, woff: true, woff2: true, otf: true, ttf: true, eot: true, svg: true, zip: true, rar: true, pdf: true, docx: true, xlsx: true, doc: true, xls: true, html: true, htm: true, appcache: true, manifest: true, map: true, ogv: true, ogg: true, mp4: true, mp3: true, webp: true, webm: true, swf: true, package: true, json: true, ui: true, md: true, m4v: true, jsx: true, heif: true, heic: true, ics: true, ts: true, m3u8: true, wav: true, xsd: true, xsl: true, xslt: true, ipynb: true, ijsnb: true, log: true };
358
358
  CONF.$httpchecktypes = true; // for multipart data only
359
359
  CONF.$httpmaxage = 60; // in seconds
360
360
  CONF.$httpmaxkeys = 33;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "total5",
3
- "version": "0.0.8-2",
3
+ "version": "0.0.8",
4
4
  "description": "Total.js framework v5",
5
5
  "main": "index.js",
6
6
  "directories": {
package/utils.js CHANGED
@@ -325,6 +325,7 @@ var CONTENTTYPES = {
325
325
  ui: 'application/json', // UI builder
326
326
  jsx: 'text/jsx',
327
327
  less: 'text/css',
328
+ log: 'text/plain',
328
329
  m3u8: 'application/x-mpegURL',
329
330
  m4a: 'audio/mp4a-latm',
330
331
  m4v: 'video/x-m4v',