jqx-es 1.1.8 → 1.2.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jqx-es",
3
- "version": "1.1.8",
3
+ "version": "1.2.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "The good parts of JQuery",
package/src/DOMCleanup.js CHANGED
@@ -1,7 +1,6 @@
1
- import { truncate2SingleStr, IS } from "./JQxExtensionHelpers.js";
1
+ import { truncate2SingleStr, IS, debugLog } from "./JQxExtensionHelpers.js";
2
2
  import cleanupTagInfo from "./HTMLTags.js";
3
3
  import {ATTRS} from "./EmbedResources.js";
4
- import {debugLog} from "./JQxLog.js";
5
4
  import {escHtml} from "./Utilities.js";
6
5
 
7
6
  let logElementCreationErrors2Console = true;
@@ -31,7 +30,7 @@ const cleanupHtml = el2Clean => {
31
30
  rawHTML: el2Clean?.parentElement?.getHTML() ?? `no html`,
32
31
  removed: { },
33
32
  }
34
-
33
+
35
34
  if (IS(el2Clean, HTMLElement)) {
36
35
  [...el2Clean.childNodes].forEach(child => {
37
36
  if (child?.children?.length) {
@@ -58,11 +57,11 @@ const cleanupHtml = el2Clean => {
58
57
  }
59
58
  });
60
59
  }
61
-
60
+
62
61
  const allowed = elementCheck(child) ||
63
62
  child.constructor === CharacterData ||
64
63
  child.constructor === Comment;
65
-
64
+
66
65
  if (!allowed) {
67
66
  const tag = (child?.outerHTML || child?.textContent).trim();
68
67
  let tagValue = truncate2SingleStr(tag, 60) ?? `EMPTY`;
@@ -1,14 +1,13 @@
1
- import jqx from "../index.js";
2
- import {isNonEmptyString} from "./Utilities.js";
1
+ import { isNonEmptyString } from "./Utilities.js";
3
2
  const handlerStore = {};
4
3
  const shouldCaptureEventTypes = [
5
4
  `load`, `unload`, `scroll`, `focus`, `blur`, `DOMNodeRemovedFromDocument`,
6
5
  `DOMNodeInsertedIntoDocument`, `loadstart`, `progress`, `error`, `abort`,
7
6
  `load`, `loadend`, `pointerenter`, `pointerleave`, `readystatechange`];
8
7
  const getCapture = eventType => !!(shouldCaptureEventTypes.find(t => t === eventType));
9
- export {handlerStore as listeners, HandleFactory as default};
8
+ export { handlerStore as listeners, HandleFactory as default };
10
9
 
11
- function HandleFactory() {
10
+ function HandleFactory(jqx) {
12
11
  return function(spec) { /*NODOC*/
13
12
  let {eventType, selector, callback, name, capture, once, canRemove} = spec;
14
13
 
@@ -1,8 +1,8 @@
1
- import { createElementFromHtmlString, insertPositions, inject2DOMTree, cleanupHtml, ATTRS} from "./DOM.js";
2
- import { debugLog, Log, systemLog } from "./JQxLog.js";
3
- import allMethods from "./JQxMethods.js";
1
+ import { createElementFromHtmlString, insertPositions, inject2DOMTree, cleanupHtml } from "./DOM.js";
2
+ import logFactory from "./JQxLog.js";
3
+ import allMethodsFactory from "./JQxMethods.js";
4
4
  import PopupFactory from "./Popup.js";
5
- import {listeners, default as HandleFactory} from "./HandlerFactory.js";
5
+ import { listeners, default as HandleFactory } from "./HandlerFactory.js";
6
6
  import tagLib from "./HTMLTags.js";
7
7
  import {
8
8
  randomString, toDashedNotation, IS, truncateHtmlStr, tagFNFactory as $T,
@@ -10,8 +10,10 @@ import {
10
10
  isNonEmptyString, resolveEventTypeParameter,
11
11
  } from "./Utilities.js";
12
12
  let static4Docs = {};
13
+ let instanceGetters, instanceMethods, $, systemLogger, debugLogger;
14
+
13
15
  const {
14
- instanceMethods, instanceGetters,isCommentOrTextNode, isNode,
16
+ isCommentOrTextNode, isNode,
15
17
  isHtmlString, isArrayOfHtmlElements, isArrayOfHtmlStrings, ElemArray2HtmlString,
16
18
  input2Collection, setCollectionFromCssSelector, addHandlerId, cssRuleEdit,
17
19
  addFn, elems4Docs } = smallHelpersFactory();
@@ -20,8 +22,6 @@ const {
20
22
  function smallHelpersFactory() {
21
23
  const cssRuleEdit = styleFactory( { createWithId: `JQxStylesheet` } );
22
24
  const addFn = (name, fn) => instanceMethods[name] = (self, ...params) => fn(self, ...params);
23
- const instanceMethods = allMethods.instanceExtensions;
24
- const instanceGetters = allMethods.factoryExtensions;
25
25
  const isCommentOrTextNode = elem => IS(elem, Comment, Text);
26
26
  const isNode = input => IS(input, Text, HTMLElement, Comment);
27
27
  const isComment = input => IS(input, Comment);
@@ -60,10 +60,9 @@ function smallHelpersFactory() {
60
60
  .sort( (a, b) => a.localeCompare(b));
61
61
 
62
62
  return {
63
- instanceMethods, instanceGetters,isCommentOrTextNode, isNode, isComment, isText,
64
- isHtmlString, isArrayOfHtmlElements, isArrayOfHtmlStrings, ElemArray2HtmlString,
65
- input2Collection, setCollectionFromCssSelector, addHandlerId, cssRuleEdit,
66
- addFn, elems4Docs };
63
+ isCommentOrTextNode, isNode, isComment, isText, isHtmlString, isArrayOfHtmlElements,
64
+ isArrayOfHtmlStrings, ElemArray2HtmlString, input2Collection, setCollectionFromCssSelector,
65
+ addHandlerId, cssRuleEdit, addFn, elems4Docs };
67
66
  }
68
67
 
69
68
  function proxify(instance) {
@@ -148,14 +147,12 @@ function virtualFactory(jqx) {
148
147
 
149
148
  function combineObjectSources(...sources) {
150
149
  const result = {};
151
-
152
150
  for (const source of sources) {
153
151
  const descriptors = Object.getOwnPropertyDescriptors(source);
154
152
  for (const [key, descriptor] of Object.entries(descriptors)) {
155
153
  !(key in result) && Object.defineProperty(result, key, descriptor);
156
154
  }
157
155
  }
158
-
159
156
  return result;
160
157
  }
161
158
 
@@ -166,7 +163,6 @@ function tagNotAllowed(tagName) {
166
163
 
167
164
  function tagGetterFactory(tagName, cando, jqx, webComponentTagName) {
168
165
  tagName = toDashedNotation(webComponentTagName || tagName.toLowerCase());
169
-
170
166
  return {
171
167
  get() {
172
168
  return (...args) => {
@@ -182,7 +178,6 @@ function tagGetterFactory(tagName, cando, jqx, webComponentTagName) {
182
178
  function addGetters(tag, cando, jqx, webComponentTagName) {
183
179
  tag = tag.toLowerCase();
184
180
  const jqxGetterForThisTag = tagGetterFactory(tag, cando, jqx, webComponentTagName);
185
-
186
181
  return webComponentTagName
187
182
  ? { [webComponentTagName]: jqxGetterForThisTag, [toCamelcase(webComponentTagName)]: jqxGetterForThisTag, }
188
183
  : { [tag]: jqxGetterForThisTag, [tag.toUpperCase()]: jqxGetterForThisTag, };
@@ -223,10 +218,6 @@ function delegateCaptureFactory(listen) {
223
218
  canRemove = IS(canRemove, Boolean) ? canRemove : false;
224
219
  const params = { eventType: typesResolved, selector: selector || origin, capture,
225
220
  name: specifiedName, once, canRemove};
226
- const doHandle = handler => {
227
- params.name = specifiedName;
228
- IS(handler, Function) && listen({...params, callback: handler});
229
- }
230
221
  switch(true) {
231
222
  case IS(typesResolved, Array) && typesResolved.length > 0:
232
223
  for (const type of typesResolved) {
@@ -234,8 +225,12 @@ function delegateCaptureFactory(listen) {
234
225
  for (const handler of handlers) { doHandle(handler); }
235
226
  }
236
227
  return;
237
- default:
238
- for (const handler of handlers) { doHandle(handler); }
228
+ default: for (const handler of handlers) { doHandle(handler); }
229
+ }
230
+
231
+ function doHandle(handler) {
232
+ params.name = specifiedName;
233
+ IS(handler, Function) && listen({...params, callback: handler});
239
234
  }
240
235
  }
241
236
  }
@@ -248,51 +243,58 @@ function getNamedListener(type, name) {
248
243
  }
249
244
  }
250
245
 
246
+ function popupGetter(jqx) {
247
+ if (!jqx.activePopup) {
248
+ Object.defineProperty(
249
+ jqx, `activePopup`, {
250
+ value: PopupFactory(jqx),
251
+ enumerable: false
252
+ } );
253
+ }
254
+ return jqx.activePopup;
255
+ }
256
+
251
257
  function staticMethodsFactory(jqx) {
258
+ const { debugLog, Log, systemLog } = logFactory(jqx);
259
+ const { factoryExtensions, instanceExtensions } = allMethodsFactory(jqx);
260
+ systemLogger = systemLog;
261
+ debugLogger = debugLog;
262
+ instanceGetters = factoryExtensions;
263
+ instanceMethods = instanceExtensions;
264
+ $ = jqx;
252
265
  const editCssRule = (ruleOrSelector, ruleObject) => cssRuleEdit(ruleOrSelector, ruleObject);
253
266
  const allowProhibit = allowances(jqx);
254
- const handle = HandleFactory();
267
+ const handle = HandleFactory(jqx);
255
268
  const capturedHandling = delegateCaptureFactory(handle);
269
+
256
270
  return {
257
- debugLog,
258
- log: (...args) => Log(`fromStatic`, ...args),
259
- insertPositions,
271
+ log(...args) { Log(`fromStatic`, ...args); },
272
+ editCssRules(...rules) { for (const rule of rules) { cssRuleEdit(rule); } },
273
+ createStyle(id) { return styleFactory({createWithId: id || `jqx${randomString()}`}); },
274
+ editStylesheet(id) { return styleFactory({createWithId: id || `jqx${randomString()}`}); },
275
+ text(str, isComment = false) { return isComment ? jqx.comment(str) : document.createTextNode(str); },
276
+ node(selector, root = document) { return root.querySelector(selector, root); },
277
+ nodes(selector, root = document) {return [...root.querySelectorAll(selector, root)]; },
278
+ get editCssRule() { return editCssRule; },
279
+ get getNamedListener() { return getNamedListener; },
280
+ get debugLog() { return debugLog },
281
+ get virtual() { return virtualFactory(jqx); },
282
+ get allowTag() { return allowProhibit.allow; },
283
+ get prohibitTag() { return allowProhibit.prohibit; },
284
+ get removeCssRule() { return cssRemove; },
285
+ get removeCssRules() { return cssRemove; },
286
+ get delegate() { return delegateFactory(capturedHandling); },
287
+ get delegateCaptured() { return capturedHandling; } ,
288
+ get handle() { return capturedHandling; },
260
289
  get at() { return insertPositions; },
261
- editCssRules: (...rules) => { for (const rule of rules) { cssRuleEdit(rule); } },
262
- editCssRule,
263
290
  get setStyle() { /*deprecated*/return editCssRule; },
264
- getNamedListener,
265
- delegate: delegateFactory(capturedHandling),
266
- delegateCaptured: capturedHandling,
267
- handle: capturedHandling,
268
- virtual: virtualFactory(jqx),
269
291
  get fn() { return addFn; },
270
- allowTag: allowProhibit.allow,
271
- prohibitTag: allowProhibit.prohibit,
272
292
  get lenient() { return tagLib.allowUnknownHtmlTags; },
273
293
  get IS() { return IS; },
274
- get Popup() {
275
- if (!jqx.activePopup) {
276
- Object.defineProperty(
277
- jqx, `activePopup`, {
278
- value: PopupFactory(jqx),
279
- enumerable: false
280
- } );
281
- }
282
- return jqx.activePopup;
283
- },
284
- popup: () => jqx.Popup,
285
- createStyle: id => styleFactory({createWithId: id || `jqx${randomString()}`}),
286
- editStylesheet: id => styleFactory({createWithId: id || `jqx${randomString()}`}),
287
- removeCssRule: cssRemove,
288
- removeCssRules: cssRemove,
289
- text: (str, isComment = false) => isComment ? jqx.comment(str) : document.createTextNode(str),
290
- node: (selector, root = document) => root.querySelector(selector, root),
291
- nodes: (selector, root = document) => [...root.querySelectorAll(selector, root)],
294
+ get Popup() { return popupGetter(jqx); },
292
295
  };
293
296
  }
294
297
  /* endregion functions */
295
-
296
298
  export {
297
299
  hex2RGBA,
298
300
  addHandlerId,
@@ -314,8 +316,10 @@ export {
314
316
  addJQxStaticMethods,
315
317
  createElementFromHtmlString,
316
318
  insertPositions,
317
- systemLog,
319
+ systemLogger as systemLog,
320
+ debugLogger as debugLog,
318
321
  IS,
319
322
  static4Docs,
320
323
  elems4Docs,
324
+ $ as jqx,
321
325
  };
package/src/JQxLog.js CHANGED
@@ -1,144 +1,172 @@
1
- import jqx from "../index.js";
2
- import {createElementFromHtmlString, element2DOM, insertPositions} from "./DOM.js";
3
- import {IS, logTime,} from "./JQxExtensionHelpers.js";
4
- import {logStyling} from "./EmbedResources.js";
5
- let logSystem = false;
6
- let useLogging = false;
7
- let log2Console = true;
8
- let reverseLogging = false;
9
- let useHtml = true;
10
- let editLogRule;
11
- const getLogBox = () => jqx(`#logBox`);
12
- const logBoxTextBoxId = `#jqx_logger`;
13
-
14
- const setStyling4Log = setStyle => { logStyling?.forEach(selector => setStyle(selector)); };
15
-
16
- const createLogElement = () => {
17
- if (logStyling) {
18
- setStyling4Log(editLogRule);
19
- }
20
- const jqx_logger_element_name = useHtml ? `div` : `pre`;
21
- const loggingFieldSet = `<div id="logBox"><div class="legend"><div></div></div><${
22
- jqx_logger_element_name} id="jqx_logger"></${jqx_logger_element_name}></div>`;
23
- element2DOM(createElementFromHtmlString(loggingFieldSet), undefined, insertPositions.AfterBegin);
24
- return jqx.node(logBoxTextBoxId);
25
- };
1
+ import { logTime } from "./Utilities.js";
2
+ import { createElementFromHtmlString, element2DOM, insertPositions } from "./DOM.js";
3
+ import { logStyling } from "./EmbedResources.js";
4
+
5
+ function logFactory(jqx) {
6
+ let logSystem = false;
7
+ let useLogging = false;
8
+ let log2Console = true;
9
+ let reverseLogging = false;
10
+ let useHtml = true;
11
+ let editLogRules;
12
+ const getLogBox = () => jqx(`#logBox`);
13
+ const logBoxTextBoxId = `#jqx_logger`;
14
+ const setStyling4Log = setStyle => {
15
+ logStyling?.forEach(selector => setStyle(selector));
16
+ };
26
17
 
27
- const decodeForConsole = something => IS(something, String) &&
28
- Object.assign(document.createElement(`textarea`), {innerHTML: something}).textContent || something;
18
+ const decodeForConsole = something => jqx.IS(something, String) &&
19
+ Object.assign(document.createElement(`textarea`), {innerHTML: something}).textContent || something;
20
+
21
+ function createLogElement(jqx) {
22
+ // note: jqx is not fully proxified here ...
23
+ const jqx_logger_element_name = useHtml ? `div` : `pre`;
24
+ const loggingFieldSet = `
25
+ <div id="logBox">
26
+ <div class="legend">
27
+ <div><!--legend text--></div>
28
+ </div>
29
+ <${jqx_logger_element_name} id="jqx_logger"></${jqx_logger_element_name}>`;
30
+ const logBoxElement = createElementFromHtmlString(loggingFieldSet);
31
+ element2DOM(logBoxElement, undefined, insertPositions.AfterBegin);
32
+ return jqx.node(logBoxTextBoxId);
33
+ }
29
34
 
30
- const Log = (...args) => {
35
+ const Log = (...args) => {
31
36
  const isInstanceLog = args[0] === `fromStatic`;
37
+
38
+ if (!jqx.node(`#JQxLogCSS`)) {
39
+ editLogRules = jqx.editStylesheet(`JQxLogCSS`);
40
+ for (const rule of logStyling) { editLogRules(rule); }
41
+ }
42
+
32
43
  args = isInstanceLog ? args.slice(1) : args;
33
- if ( isInstanceLog && !useLogging) {
44
+
45
+ if (isInstanceLog && !useLogging) {
34
46
  return args.forEach(arg => console.info(`${logTime()} ✔ ${decodeForConsole(arg)}`));
35
47
  }
36
48
 
37
49
  if (!useLogging) { return; }
38
50
 
39
- if (!log2Console && !jqx.node(`#logBox`)) {
40
- editLogRule = jqx.createStyle(`JQxLogCSS`);
41
- createLogElement();
42
- }
51
+ if (!log2Console && !jqx.node(`#logBox`)) { createLogElement(jqx); }
43
52
 
44
- const logLine = arg => `${IS(arg, Object) ? JSON.stringify(arg, null, 2) : arg}\n`;
53
+ const logLine = arg => `${jqx.IS(arg, Object) ? JSON.stringify(arg, null, 2) : arg}\n`;
45
54
 
46
- args.forEach( arg => log2Console
55
+ args.forEach(arg => log2Console
47
56
  ? console.info(`${logTime()} ✔ ${decodeForConsole(arg)}`)
48
57
  : jqx.node(`#jqx_logger`).insertAdjacentHTML(
49
- reverseLogging ? `afterbegin` : `beforeend`,
50
- `<div class="entry">${logTime()} ${logLine(arg.replace(/\n/g, `<br>`))}</div>`)
58
+ reverseLogging ? `afterbegin` : `beforeend`,
59
+ `<div class="entry">${logTime()} ${logLine(arg.replace(/\n/g, `<br>`))}</div>`)
51
60
  );
52
- };
61
+ };
53
62
 
54
- const logActive = {
55
- on() { useLogging = true; Log(`Logging activated`); },
56
- off() { useLogging = false; console.log(`Logging deactivated`) },
57
- }
63
+ const logActive = {
64
+ on() {
65
+ useLogging = true;
66
+ Log(`Logging activated (CSS in style#JQxLogCSS)`);
67
+ },
68
+ off() {
69
+ useLogging = false;
70
+ console.log(`${logTime()} ✔ Logging deactivated`)
71
+ },
72
+ }
58
73
 
59
- const setSystemLog = {
60
- on() { logSystem = true; },
61
- off() { logSystem = false; },
62
- };
63
-
64
- const systemLog = (...logTxt) => logSystem && Log(...logTxt);
65
-
66
- const debugLog = {
67
- get isConsole() { return log2Console === true; },
68
- get isOn() { return useLogging; },
69
- isVisible: function() { return jqx(`#jqx_logger`).is(`visible`); },
70
- on() {
71
- logActive.on();
72
- setSystemLog.on();
73
- if (!log2Console) {
74
- getLogBox()?.addClass(`visible`);
75
- }
76
- Log(`Debug logging started. Every call to [jqx instance] is logged`);
77
- return debugLog;
78
- },
79
- off() {
80
- if (!getLogBox().isEmpty) {
81
- setSystemLog.off();
82
- Log(`Debug logging stopped`);
83
- getLogBox()?.removeClass(`visible`);
84
- }
85
- logActive.off();
86
- return debugLog;
87
- },
88
- toConsole: {
74
+ const setSystemLog = {
75
+ on() {
76
+ logSystem = true;
77
+ },
78
+ off() {
79
+ logSystem = false;
80
+ },
81
+ };
82
+
83
+ const systemLog = (...logTxt) => logSystem && Log(...logTxt);
84
+
85
+ const debugLog = {
86
+ get isConsole() {
87
+ return log2Console === true;
88
+ },
89
+ get isOn() {
90
+ return useLogging;
91
+ },
92
+ isVisible: function () {
93
+ return jqx(`#jqx_logger`).is(`visible`);
94
+ },
89
95
  on() {
90
- log2Console = true;
91
- Log(`Started logging to console`);
96
+ logActive.on();
97
+ setSystemLog.on();
98
+ if (!log2Console) {
99
+ getLogBox()?.addClass(`visible`);
100
+ }
101
+ Log(`Debug logging started. Every call to [jqx instance] is logged`);
92
102
  return debugLog;
93
103
  },
94
104
  off() {
95
- Log(`Stopped logging to console (except error messages)`);
96
- log2Console = false;
105
+ if (!getLogBox().isEmpty) {
106
+ setSystemLog.off();
107
+ Log(`Debug logging stopped`);
108
+ getLogBox()?.removeClass(`visible`);
109
+ }
110
+ logActive.off();
97
111
  return debugLog;
98
- }
99
- },
100
- remove() {
101
- logActive.off();
102
- setSystemLog.off();
103
- getLogBox()?.remove();
104
- console.clear();
105
- console.log(`${logTime()} logging completely disabled and all entries removed`);
106
- return debugLog;
107
- },
108
- log: function(...args) {
109
- Log(...args);
110
- return debugLog;
111
- },
112
- hide() {
113
- getLogBox()?.removeClass(`visible`);
114
- return debugLog;
115
- },
116
- show: () => {
117
- getLogBox()?.addClass(`visible`);
118
- return debugLog;
119
- },
120
- get reversed() {
121
- return {
122
- on: () => {
123
- reverseLogging = true;
124
- Log(`Reverse logging set: now logging bottom to top (latest first)`);
125
- jqx(`#logBox .legend`).addClass(`reversed`);
112
+ },
113
+ toConsole: {
114
+ on() {
115
+ log2Console = true;
116
+ Log(`Started logging to console`);
126
117
  return debugLog;
127
118
  },
128
- off: () => {
129
- reverseLogging = false;
130
- jqx(`#logBox .legend`).removeClass(`reversed`);
131
- Log(`Reverse logging reset: now logging chronological (latest last)`);
119
+ off() {
120
+ Log(`Stopped logging to console (except error messages)`);
121
+ log2Console = false;
132
122
  return debugLog;
133
- },
134
- };
135
- },
136
- clear() {
137
- jqx(logBoxTextBoxId).text(``);
138
- console.clear();
139
- Log(`Logging cleared`);
140
- return debugLog;
141
- }
142
- };
123
+ }
124
+ },
125
+ remove() {
126
+ logActive.off();
127
+ setSystemLog.off();
128
+ getLogBox()?.remove();
129
+ console.clear();
130
+ console.log(`${logTime()} logging completely disabled and all entries removed`);
131
+ return debugLog;
132
+ },
133
+ log: function (...args) {
134
+ Log(...args);
135
+ return debugLog;
136
+ },
137
+ hide() {
138
+ getLogBox()?.removeClass(`visible`);
139
+ return debugLog;
140
+ },
141
+ show: () => {
142
+ getLogBox()?.addClass(`visible`);
143
+ return debugLog;
144
+ },
145
+ get reversed() {
146
+ return {
147
+ on: () => {
148
+ reverseLogging = true;
149
+ Log(`Reverse logging set: now logging bottom to top (latest first)`);
150
+ jqx(`#logBox .legend`).addClass(`reversed`);
151
+ return debugLog;
152
+ },
153
+ off: () => {
154
+ reverseLogging = false;
155
+ jqx(`#logBox .legend`).removeClass(`reversed`);
156
+ Log(`Reverse logging reset: now logging chronological (latest last)`);
157
+ return debugLog;
158
+ },
159
+ };
160
+ },
161
+ clear() {
162
+ jqx(logBoxTextBoxId).text(``);
163
+ console.clear();
164
+ Log(`Logging cleared`);
165
+ return debugLog;
166
+ }
167
+ };
168
+
169
+ return { Log, debugLog, systemLog };
170
+ }
143
171
 
144
- export { Log, debugLog, systemLog };
172
+ export default logFactory;