jsf.js_next_gen 4.0.0-RC.8 → 4.0.0-RC.9

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.
@@ -42,7 +42,7 @@ const SourcesCollectors_1 = __webpack_require__(/*! ./SourcesCollectors */ "./no
42
42
  const Lang_1 = __webpack_require__(/*! ./Lang */ "./node_modules/mona-dish/src/main/typescript/Lang.ts");
43
43
  var trim = Lang_1.Lang.trim;
44
44
  var isString = Lang_1.Lang.isString;
45
- var eIgnoreC = Lang_1.Lang.equalsIgnoreCase;
45
+ var eqi = Lang_1.Lang.equalsIgnoreCase;
46
46
  const Global_1 = __webpack_require__(/*! ./Global */ "./node_modules/mona-dish/src/main/typescript/Global.ts");
47
47
  var objToArray = Lang_1.Lang.objToArray;
48
48
  /**
@@ -866,6 +866,30 @@ class DomQuery {
866
866
  });
867
867
  return this;
868
868
  }
869
+ /**
870
+ * replace convenience function, replaces one or more elements with
871
+ * a set of elements passed as DomQuery
872
+ * @param toReplace the replaced nodes as reference (original node has been replaced)
873
+ */
874
+ replace(toReplace) {
875
+ this.each(item => {
876
+ let asElem = item.getAsElem(0).value;
877
+ let parent = asElem.parentElement;
878
+ let nextElement = asElem.nextElementSibling;
879
+ let previousElement = asElem.previousElementSibling;
880
+ if (nextElement != null) {
881
+ new DomQuery(nextElement).insertBefore(toReplace);
882
+ }
883
+ else if (previousElement) {
884
+ new DomQuery(previousElement).insertAfter(toReplace);
885
+ }
886
+ else {
887
+ new DomQuery(parent).append(toReplace);
888
+ }
889
+ item.delete();
890
+ });
891
+ return toReplace;
892
+ }
869
893
  /**
870
894
  * returns a new dom query containing only the first element max
871
895
  *
@@ -1184,7 +1208,7 @@ class DomQuery {
1184
1208
  let tagName = item.tagName;
1185
1209
  let itemType = ((_a = item === null || item === void 0 ? void 0 : item.type) !== null && _a !== void 0 ? _a : '').toLowerCase();
1186
1210
  if (tagName &&
1187
- eIgnoreC(tagName, "script") &&
1211
+ eqi(tagName, "script") &&
1188
1212
  allowedItemTypes.indexOf(itemType) != -1) {
1189
1213
  let src = item.getAttribute('src');
1190
1214
  if ('undefined' != typeof src
@@ -1270,36 +1294,30 @@ class DomQuery {
1270
1294
  return this;
1271
1295
  }
1272
1296
  runCss() {
1273
- const applyStyle = (item, style) => {
1274
- var _a, _b, _c, _d;
1275
- let newSS = document.createElement("style");
1276
- document.getElementsByTagName("head")[0].appendChild(newSS);
1277
- let styleSheet = (_a = newSS.sheet) !== null && _a !== void 0 ? _a : newSS.styleSheet;
1278
- newSS.setAttribute("rel", (_b = item.getAttribute("rel")) !== null && _b !== void 0 ? _b : "stylesheet");
1279
- newSS.setAttribute("type", (_c = item.getAttribute("type")) !== null && _c !== void 0 ? _c : "text/css");
1280
- if ((_d = styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.cssText) !== null && _d !== void 0 ? _d : false) {
1281
- styleSheet.cssText = style;
1282
- }
1283
- else {
1284
- newSS.appendChild(document.createTextNode(style));
1285
- }
1286
- }, execCss = (item) => {
1287
- const tagName = item.tagName;
1288
- if (tagName && eIgnoreC(tagName, "link") && eIgnoreC(item.getAttribute("type"), "text/css")) {
1289
- applyStyle(item, "@import url('" + item.getAttribute("href") + "');");
1290
- }
1291
- else if (tagName && eIgnoreC(tagName, "style") && eIgnoreC(item.getAttribute("type"), "text/css")) {
1292
- let innerText = [];
1293
- // compliant browsers know child nodes
1294
- let childNodes = Array.prototype.slice.call(item.childNodes);
1295
- if (childNodes) {
1296
- childNodes.forEach(child => innerText.push(child.innerHTML || child.data));
1297
- // non-compliant elements innerHTML
1297
+ const execCss = (toReplace) => {
1298
+ const _toReplace = DomQuery.byId(toReplace);
1299
+ const tagName = _toReplace.tagName.orElse("").value;
1300
+ const head = DomQuery.byTagName("head");
1301
+ if (tagName && eqi(tagName, "link") && eqi(toReplace.getAttribute("rel"), "stylesheet")) {
1302
+ const rel = toReplace.getAttribute("rel");
1303
+ //if possible we are now replacing the existing elements where we reference this stylesheet
1304
+ const matches = head.querySelectorAll(`link[rel='stylesheet'][href='${rel}']`);
1305
+ if (matches.length) {
1306
+ matches.replace(_toReplace);
1298
1307
  }
1299
- else if (item.innerHTML) {
1300
- innerText.push(item.innerHTML);
1308
+ else {
1309
+ head.append(_toReplace);
1310
+ }
1311
+ }
1312
+ else if (tagName && eqi(tagName, "style")) {
1313
+ let innerText = _toReplace.innerHTML.replace(/\s+/gi, "");
1314
+ let styles = head.querySelectorAll("style");
1315
+ styles = styles.stream.filter(style => {
1316
+ return style.innerHTML.replace(/\s+/gi, "") == innerText;
1317
+ }).collect(new DomQueryCollector());
1318
+ if (!styles.length) { //already present
1319
+ head.append(_toReplace);
1301
1320
  }
1302
- applyStyle(item, innerText.join(""));
1303
1321
  }
1304
1322
  };
1305
1323
  const scriptElements = new DomQuery(this.filterSelector("link, style"), this.querySelectorAll("link, style"));
@@ -2719,7 +2737,7 @@ exports.Config = Config;
2719
2737
  * limitations under the License.
2720
2738
  */
2721
2739
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2722
- exports.QueryFormStringCollector = exports.QueryFormDataCollector = exports.FormDataCollector = exports.AssocArrayCollector = exports.Run = exports.ArrayAssocArrayCollector = exports.ArrayCollector = exports.FlatMapStreamDataSource = exports.MappedStreamDataSource = exports.FilteredStreamDatasource = exports.ArrayStreamDataSource = exports.SequenceDataSource = exports.ITERATION_STATUS = void 0;
2740
+ exports.QueryFormStringCollector = exports.QueryFormDataCollector = exports.FormDataCollector = exports.AssocArrayCollector = exports.Run = exports.ArrayAssocArrayCollector = exports.InverseArrayCollector = exports.ArrayCollector = exports.FlatMapStreamDataSource = exports.MappedStreamDataSource = exports.FilteredStreamDatasource = exports.ArrayStreamDataSource = exports.SequenceDataSource = exports.ITERATION_STATUS = void 0;
2723
2741
  const Stream_1 = __webpack_require__(/*! ./Stream */ "./node_modules/mona-dish/src/main/typescript/Stream.ts");
2724
2742
  /**
2725
2743
  * special status of the datasource location pointer
@@ -3026,6 +3044,21 @@ class ArrayCollector {
3026
3044
  }
3027
3045
  }
3028
3046
  exports.ArrayCollector = ArrayCollector;
3047
+ /**
3048
+ * collects the values as inverse array
3049
+ */
3050
+ class InverseArrayCollector {
3051
+ constructor() {
3052
+ this.data = [];
3053
+ }
3054
+ collect(element) {
3055
+ this.data.unshift(element);
3056
+ }
3057
+ get finalValue() {
3058
+ return this.data;
3059
+ }
3060
+ }
3061
+ exports.InverseArrayCollector = InverseArrayCollector;
3029
3062
  /**
3030
3063
  * collects an tuple array stream into an assoc array with elements being collected into arrays
3031
3064
  *
@@ -6630,16 +6663,21 @@ class ResponseProcessor {
6630
6663
  if (!shadowHead.isPresent()) {
6631
6664
  return;
6632
6665
  }
6633
- let oldHead = ExtDomQuery_1.ExtDomQuery.querySelectorAll(Const_1.TAG_HEAD);
6666
+ let head = ExtDomQuery_1.ExtDomQuery.querySelectorAll(Const_1.TAG_HEAD);
6634
6667
  //delete all to avoid script and style overlays
6635
- oldHead.querySelectorAll(Const_1.SEL_SCRIPTS_STYLES).delete();
6636
- // we cannot replace new elements in the head, but we can eval the elements
6637
- // eval means the scripts will get attached (eval script attach method)
6638
- // but this is done by DomQuery not in this code
6639
- this.storeForEval(shadowHead);
6668
+ // we delete everything
6669
+ head.childNodes.delete();
6670
+ let postProcessTags = ["STYLE", "LINK", "SCRIPT"];
6671
+ shadowHead.stream
6672
+ .filter(item => postProcessTags.indexOf(item.tagName.orElse("").value) == -1)
6673
+ .each(item => {
6674
+ head.append(item);
6675
+ });
6640
6676
  //incoming either the outer head tag or its children
6641
- //shadowHead = (shadowHead.tagName.value === "HEAD") ? shadowHead.childNodes : shadowHead;
6642
- //this.addToHead(shadowHead);
6677
+ const nodesToAdd = (shadowHead.tagName.value === "HEAD") ? shadowHead.childNodes : shadowHead;
6678
+ // this is stored for post processing
6679
+ // after the rest of the "pyhsical build up", head before body
6680
+ this.addToHead(nodesToAdd);
6643
6681
  }
6644
6682
  addToHead(newElements) {
6645
6683
  this.internalContext.assign(Const_1.DEFERRED_HEAD_INSERTS).value.push(newElements);
Binary file
Binary file