yet-another-js-utils 0.0.8 → 0.0.11

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/README.md CHANGED
@@ -1,25 +1,26 @@
1
- - Each CID has an npm counterpart
2
- - One main function for inputs
3
- - Link to original
4
- - Happy programming
1
+ # Yet-Another-JS-Utils
5
2
 
6
- # Usage
3
+ ## Installation
7
4
 
8
- - update package.json
9
- - update .nvmrc
10
- - update grunfile.js
11
- - update launcher.sh
12
- - update index.md
13
- - update LICENSE.txt
14
- - update README.md
15
- - Run "Tasks: Allow Automatic Tasks" in vscode's palette (Ctrl+Shift+P)
5
+ ```
6
+ npm install yet-another-js-utils
7
+ ```
16
8
 
17
- # Dependencies
9
+ ## Usage
18
10
 
19
- - normalize.css
20
- - https://github.com/csstools/normalize.css/blob/main/normalize.css
11
+ ```js
12
+ const yaju = require('yet-another-js-utils');
13
+ // (...)
14
+ yaju.diffVDomAndUpdate(newRender, previousRender, dom);
15
+ this.previousRender = newRender;
16
+ applyState(dom);
17
+ ```
21
18
 
22
- # License
19
+ ## Dependencies
20
+
21
+ 0
22
+
23
+ ## License
23
24
 
24
25
  Copyright (c) PLANVIII. All rights reserved.
25
26
 
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=l((g,p)=>{"use strict";p.exports={nil(e){return e===null||typeof e>"u"},hack(e,t,r){return e.slice(t,r+1)},pick(e,t){return e.filter(t)},prune(e,t){return e.filter(function(r){return!t(r)})},check(e,t){return e.every(t)},escape(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")},html(e){let t=e[0],r=Math.max(e.length,arguments.length-1);for(let s=1;s<r;s++)t+=arguments[s],t+=e[s];return t},diffVDomAndUpdate(e,t,r){let s=this;s.changedNodes=[];let n=e.childNodes,d=t.childNodes,i=r.childNodes;if(i.length>d.length){let a=i.length-d.length;for(let u=0,o=a;u<o;u++)r.lastChild.remove()}for(let a=0,u=d.length;a<u;a++)if(n[a]){if(n[a].outerHTML!==d[a].outerHTML){let o=d[a].cloneNode(!0);s.changedNodes.push(o),i[a].replaceWith(o)}}else{let o=d[a].cloneNode(!0);s.changedNodes.push(o),r.appendChild(o)}},addDataState(e,t){let r=[];e.dataset.state&&e.dataset.state.indexOf(" ")>-1?r=e.dataset.state.split(" "):r=[e.dataset.state],r.indexOf(t)===-1&&(r.push(t),e.dataset.state=r.join(" "))},removeDataState(e,t){let r=[];e.dataset.state&&e.dataset.state.indexOf(" ")>-1?r=e.dataset.state.split(" "):r=[e.dataset.state],e.dataset.state=r.filter(s=>s!==t).join(" ")},replaceDataState(e,t,r){this.removeDataState(e,t),this.addDataState(e,r)},toggleDataState(e,t){e.dataset.state.split(" ").indexOf(t)==-1?this.addDataState(e,t):this.removeDataState(e,t)},ajaxGet(e,t,r,s){var n=new XMLHttpRequest;n.open("GET",e),n.addEventListener("load",function(){if(n.status>=200&&n.status<400)if(r){var d={};try{d=JSON.parse(n.responseText)}catch{console.error("Get request returned invalid JSON.")}s===void 0?t(d):t.apply(s,[d])}else s===void 0?t(n.responseText):t.apply(s,[n.responseText]);else console.error(n.status+" "+n.statusText+" "+e)}),n.addEventListener("error",function(){console.error("Network error trying to access: "+e)}),n.send(null)},ajaxPost(e,t,r,s,n,d,i){var a=new XMLHttpRequest;a.open("POST",e),a.addEventListener("load",function(){a.status>=200&&a.status<400?d===void 0?r(a):r.apply(d,[a]):(i===void 0?s(a):s.apply(i,[a]),console.error(a.status+" "+a.statusText+" "+e))}),a.addEventListener("error",function(){console.error("Network error trying to access: "+e)}),n&&(a.setRequestHeader("Content-Type","application/json"),t=JSON.stringify(t)),a.send(t)},pipe(e,...t){return t.reduce((r,s)=>s(r),e)}}});(function(){window.yaju=f()})();})();
package/gruntfile.js CHANGED
@@ -21,13 +21,6 @@ module.exports = function(grunt) {
21
21
  livereload: true
22
22
  },
23
23
  },
24
- cssConcatenation: {
25
- files: ['css/*.css', '!css/main.css'],
26
- tasks: ['concat:css'],
27
- options: {
28
- livereload: true
29
- },
30
- },
31
24
  },
32
25
  exec: {
33
26
  mocha: {
@@ -45,44 +38,21 @@ module.exports = function(grunt) {
45
38
  minify: true
46
39
  },
47
40
  dev: {
48
- entryPoints: ['app.js'],
41
+ entryPoints: ['main.js'],
49
42
  outfile: './out.js',
50
43
  bundle: true,
51
44
  sourcemap: true,
52
45
  }
53
46
  },
54
- concat: {
55
- css: {
56
- options: {
57
- separator: '\n',
58
- },
59
- src: [
60
- 'css/0-noscript.css',
61
- 'css/1-root.css',
62
- 'css/2-contents.css'
63
- ],
64
- dest: 'css/main.css'
65
- }
66
- },
67
- cssmin: {
68
- options: {},
69
- target: {
70
- files: {
71
- 'css/main.min.css': ['css/main.css']
72
- }
73
- }
74
- }
75
47
  });
76
48
 
77
49
  // Load the plugin that provides the tasks.
78
50
  grunt.loadNpmTasks('grunt-exec');
79
51
  grunt.loadNpmTasks('grunt-esbuild');
80
52
  grunt.loadNpmTasks('grunt-concurrent');
81
- grunt.loadNpmTasks('grunt-contrib-concat');
82
- grunt.loadNpmTasks('grunt-contrib-cssmin');
83
53
  grunt.loadNpmTasks('grunt-contrib-watch');
84
54
 
85
55
  // Default task(s).
86
56
  grunt.registerTask('test', ['exec:mocha']);
87
- grunt.registerTask('dist', ['esbuild', 'cssmin']);
57
+ grunt.registerTask('dist', ['esbuild']);
88
58
  };
package/js-utils.js CHANGED
@@ -107,38 +107,43 @@ module.exports = {
107
107
  output += arguments[i];
108
108
  output += strings[i];
109
109
  }
110
- let fragment = document.createDocumentFragment();
111
- fragment.innerHTML = output;
112
- return fragment;
110
+ return output;
113
111
  },
114
112
 
115
113
  /**
116
114
  * Basic contents updater
117
115
  * Assuming:
118
- * - secondNode already holds states updates
119
- * - rendering applied event-listeners already
120
- * @param {*} firstNode
121
- * @param {*} secondNode
116
+ * - Rendering applied event-listeners already
117
+ * - You can apply state afterwards
118
+ * - You can store newRender afterwards
119
+ * @param {object} previousRender
120
+ * @param {object} newRender
121
+ * @param {object} dom
122
122
  */
123
- replaceChildren(firstNode, secondNode) {
124
- let firstNodeChildren = firstNode.childNodes,
125
- secondNodeChildren = secondNode.childNodes;
126
- for (let i = 0, c = firstNodeChildren.length; i < c; i++) {
127
- if (
128
- secondNodeChildren[i]
129
- && firstNodeChildren[i].outerHTML !== secondNodeChildren[i].outerHTML
130
- ) {
131
- firstNodeChildren[i].parentNode.replaceChild(firstNodeChildren[i], secondNodeChildren[i]);
132
- }
133
- }
134
- if (firstNodeChildren.length < secondNodeChildren.length) {
135
- for (let i = firstNodeChildren.length, c = secondNodeChildren.length; i < c; i++) {
136
- firstNodeChildren[i].parentNode.appendChild(secondNodeChildren[i])
123
+ diffVDomAndUpdate(previousRender, newRender, dom) {
124
+ // Assuming overwrite or insertion
125
+ let $ = this;
126
+ $.changedNodes = [];
127
+ let leftItems = previousRender.childNodes,
128
+ rightItems = newRender.childNodes,
129
+ domItems = dom.childNodes;
130
+ if (domItems.length > rightItems.length) {
131
+ let diffLength = domItems.length - rightItems.length;
132
+ for (let i = 0, c = diffLength; i < c; i++) {
133
+ dom.lastChild.remove();
137
134
  }
138
135
  }
139
- if (firstNodeChildren.length > secondNodeChildren.length) {
140
- for (let i = firstNodeChildren.length - 1; i > secondNodeChildren.length - 1; i--) {
141
- firstNodeChildren[i].remove();
136
+ for (let i = 0, c = rightItems.length; i < c; i++) {
137
+ if (!leftItems[i]) {
138
+ let node = rightItems[i].cloneNode(true);
139
+ $.changedNodes.push(node);
140
+ dom.appendChild(node);
141
+ } else if (
142
+ leftItems[i].outerHTML !== rightItems[i].outerHTML
143
+ ) {
144
+ let node = rightItems[i].cloneNode(true);
145
+ $.changedNodes.push(node);
146
+ domItems[i].replaceWith(node);
142
147
  }
143
148
  }
144
149
  },
package/out.js ADDED
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ (() => {
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __commonJS = (cb, mod) => function __require() {
5
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
+ };
7
+
8
+ // js-utils.js
9
+ var require_js_utils = __commonJS({
10
+ "js-utils.js"(exports, module) {
11
+ "use strict";
12
+ module.exports = {
13
+ // # Nil
14
+ // I like the NOT operator
15
+ // I like strict type checking
16
+ // Hence a strictly typed equivalent:
17
+ // - 3-letters name n
18
+ // - single argument
19
+ /**
20
+ * Nil
21
+ * Neither null nor undefined
22
+ * @param { boolean } exp
23
+ * @returns { boolean }
24
+ */
25
+ nil(exp) {
26
+ if (exp === null || typeof exp === "undefined") {
27
+ return true;
28
+ } else {
29
+ return false;
30
+ }
31
+ },
32
+ // # Hack
33
+ // .slice() uses a closed-open interval
34
+ // the mathematical convention goes closed-closed
35
+ /**
36
+ * Hack
37
+ * @param { number } start
38
+ * @param { number } end
39
+ * @returns
40
+ */
41
+ hack(array, start, end) {
42
+ return array.slice(start, end + 1);
43
+ },
44
+ // # Prune/Pick
45
+ // Javascript inherited spreadsheet-like .filter()
46
+ // It felt confusing there
47
+ // It feels confusing here too
48
+ /**
49
+ * Pick
50
+ * @param {*} array
51
+ * @param {*} pruningFunction
52
+ * @returns
53
+ */
54
+ pick(array, pruningFunction) {
55
+ return array.filter(pruningFunction);
56
+ },
57
+ /**
58
+ * Prune
59
+ * The inverse of filter()
60
+ * @param {*} array
61
+ * @param {*} filteringFunction
62
+ * @returns
63
+ */
64
+ prune(array, filteringFunction) {
65
+ return array.filter(function(x) {
66
+ return !filteringFunction(x);
67
+ });
68
+ },
69
+ // # Check
70
+ // .every() just sounds weird
71
+ /**
72
+ * Check
73
+ * @param {*} array
74
+ * @param {*} checkingFunction
75
+ * @returns
76
+ */
77
+ check(array, checkingFunction) {
78
+ return array.every(checkingFunction);
79
+ },
80
+ /**
81
+ * Escape
82
+ * @param { string } string
83
+ * @returns
84
+ */
85
+ escape(string) {
86
+ return string.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
87
+ },
88
+ /**
89
+ * DOM-rendering template tag
90
+ * @param {Array} strings
91
+ * @returns {object} a DocumentFragment
92
+ */
93
+ html(strings) {
94
+ let output = strings[0], max = Math.max(strings.length, arguments.length - 1);
95
+ for (let i = 1; i < max; i++) {
96
+ output += arguments[i];
97
+ output += strings[i];
98
+ }
99
+ return output;
100
+ },
101
+ /**
102
+ * Basic contents updater
103
+ * Assuming:
104
+ * - Rendering applied event-listeners already
105
+ * - You can apply state afterwards
106
+ * - You can store newRender afterwards
107
+ * @param {object} previousRender
108
+ * @param {object} newRender
109
+ * @param {object} dom
110
+ */
111
+ diffVDomAndUpdate(previousRender, newRender, dom) {
112
+ let $ = this;
113
+ $.changedNodes = [];
114
+ let leftItems = previousRender.childNodes, rightItems = newRender.childNodes, domItems = dom.childNodes;
115
+ if (domItems.length > rightItems.length) {
116
+ let diffLength = domItems.length - rightItems.length;
117
+ for (let i = 0, c = diffLength; i < c; i++) {
118
+ dom.lastChild.remove();
119
+ }
120
+ }
121
+ for (let i = 0, c = rightItems.length; i < c; i++) {
122
+ if (!leftItems[i]) {
123
+ let node = rightItems[i].cloneNode(true);
124
+ $.changedNodes.push(node);
125
+ dom.appendChild(node);
126
+ } else if (leftItems[i].outerHTML !== rightItems[i].outerHTML) {
127
+ let node = rightItems[i].cloneNode(true);
128
+ $.changedNodes.push(node);
129
+ domItems[i].replaceWith(node);
130
+ }
131
+ }
132
+ },
133
+ // # DATA-STATE
134
+ // Alternative CSS state management
135
+ // - using data-attributes instead of classes
136
+ // - easier to match model and vue
137
+ // - dataset over classlist allows specialization
138
+ // - classes work as booleans (".walked")
139
+ // - you need to notice abscence
140
+ // - data-state work as a string type you can dedicate to store state only, and more than one state
141
+ /**
142
+ * Add
143
+ * @param { object } element
144
+ * @param { string } state
145
+ */
146
+ addDataState(element, state) {
147
+ let stateArray = [];
148
+ if (element.dataset.state && element.dataset.state.indexOf(" ") > -1) {
149
+ stateArray = element.dataset.state.split(" ");
150
+ } else {
151
+ stateArray = [element.dataset.state];
152
+ }
153
+ if (stateArray.indexOf(state) === -1) {
154
+ stateArray.push(state);
155
+ element.dataset.state = stateArray.join(" ");
156
+ }
157
+ },
158
+ /**
159
+ * Remove
160
+ * @param { object } element
161
+ * @param { string } state
162
+ */
163
+ removeDataState(element, state) {
164
+ let stateArray = [];
165
+ if (element.dataset.state && element.dataset.state.indexOf(" ") > -1) {
166
+ stateArray = element.dataset.state.split(" ");
167
+ } else {
168
+ stateArray = [element.dataset.state];
169
+ }
170
+ element.dataset.state = stateArray.filter((element2) => element2 !== state).join(" ");
171
+ },
172
+ /**
173
+ * Replace
174
+ * @param { object } element
175
+ * @param { string } stateToRemove
176
+ * @param { string } stateToAdd
177
+ */
178
+ replaceDataState(element, stateToRemove, stateToAdd) {
179
+ this.removeDataState(element, stateToRemove);
180
+ this.addDataState(element, stateToAdd);
181
+ },
182
+ /**
183
+ * Toggle
184
+ * @param { object } element
185
+ * @param { string } state
186
+ */
187
+ toggleDataState(element, state) {
188
+ let stateArray = element.dataset.state.split(" ");
189
+ if (stateArray.indexOf(state) == -1) {
190
+ this.addDataState(element, state);
191
+ } else {
192
+ this.removeDataState(element, state);
193
+ }
194
+ },
195
+ //# AJAX Functions
196
+ /**
197
+ * AJAX GET
198
+ * @param {string} url The target url
199
+ * @param {function} callback
200
+ * @param {boolean} isJson Response contains json
201
+ * @param {object} callbackContext
202
+ */
203
+ ajaxGet(url, callback, isJson, callbackContext) {
204
+ var req = new XMLHttpRequest();
205
+ req.open("GET", url);
206
+ req.addEventListener("load", function() {
207
+ if (req.status >= 200 && req.status < 400) {
208
+ if (isJson) {
209
+ var json = {};
210
+ try {
211
+ json = JSON.parse(req.responseText);
212
+ } catch (error) {
213
+ console.error("Get request returned invalid JSON.");
214
+ }
215
+ callbackContext === void 0 ? callback(json) : callback.apply(callbackContext, [json]);
216
+ } else {
217
+ callbackContext === void 0 ? callback(req.responseText) : callback.apply(callbackContext, [req.responseText]);
218
+ }
219
+ } else {
220
+ console.error(req.status + " " + req.statusText + " " + url);
221
+ }
222
+ });
223
+ req.addEventListener("error", function() {
224
+ console.error("Network error trying to access: " + url);
225
+ });
226
+ req.send(null);
227
+ },
228
+ /**
229
+ * AJAX POST
230
+ * @param {string} url
231
+ * @param {string} data
232
+ * @param {function} successCallback
233
+ * @param {function} failureCallback
234
+ * @param {boolean} isJson
235
+ * @param {object} successCallbackContext
236
+ * @param {object} failureCallbackContext
237
+ */
238
+ ajaxPost(url, data, successCallback, failureCallback, isJson, successCallbackContext, failureCallbackContext) {
239
+ var req = new XMLHttpRequest();
240
+ req.open("POST", url);
241
+ req.addEventListener("load", function() {
242
+ if (req.status >= 200 && req.status < 400) {
243
+ successCallbackContext === void 0 ? successCallback(req) : successCallback.apply(successCallbackContext, [req]);
244
+ } else {
245
+ failureCallbackContext === void 0 ? failureCallback(req) : failureCallback.apply(failureCallbackContext, [req]);
246
+ console.error(req.status + " " + req.statusText + " " + url);
247
+ }
248
+ });
249
+ req.addEventListener("error", function() {
250
+ console.error("Network error trying to access: " + url);
251
+ });
252
+ if (isJson) {
253
+ req.setRequestHeader("Content-Type", "application/json");
254
+ data = JSON.stringify(data);
255
+ }
256
+ req.send(data);
257
+ },
258
+ /**
259
+ * Pipe
260
+ * Function piping with initial input
261
+ * @param {*} functions
262
+ * @param {*} input
263
+ * @returns {*}
264
+ */
265
+ pipe(input, ...functions) {
266
+ return functions.reduce((res, fun) => fun(res), input);
267
+ }
268
+ };
269
+ }
270
+ });
271
+
272
+ // main.js
273
+ (function() {
274
+ window.yaju = require_js_utils();
275
+ })();
276
+ })();
277
+ //# sourceMappingURL=out.js.map
package/out.js.map ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["js-utils.js", "main.js"],
4
+ "sourcesContent": ["module.exports = {\r\n // # Nil\r\n\r\n // I like the NOT operator\r\n // I like strict type checking\r\n // Hence a strictly typed equivalent:\r\n // - 3-letters name n\r\n // - single argument\r\n\r\n /**\r\n * Nil\r\n * Neither null nor undefined\r\n * @param { boolean } exp\r\n * @returns { boolean }\r\n */\r\n nil(exp) { // values implicitly considered functions\r\n if (\r\n exp === null\r\n || typeof exp === 'undefined'\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n // # Hack\r\n\r\n // .slice() uses a closed-open interval\r\n // the mathematical convention goes closed-closed\r\n\r\n /**\r\n * Hack\r\n * @param { number } start\r\n * @param { number } end\r\n * @returns\r\n */\r\n hack(array, start, end) {\r\n return array.slice(start, end + 1);\r\n },\r\n\r\n // # Prune/Pick\r\n\r\n // Javascript inherited spreadsheet-like .filter()\r\n // It felt confusing there\r\n // It feels confusing here too\r\n\r\n /**\r\n * Pick\r\n * @param {*} array\r\n * @param {*} pruningFunction\r\n * @returns\r\n */\r\n pick(array, pruningFunction) {\r\n return array.filter(pruningFunction);\r\n },\r\n\r\n /**\r\n * Prune\r\n * The inverse of filter()\r\n * @param {*} array\r\n * @param {*} filteringFunction\r\n * @returns\r\n */\r\n prune(array, filteringFunction) {\r\n return array.filter(function (x) {\r\n return !filteringFunction(x);\r\n });\r\n },\r\n\r\n // # Check\r\n\r\n // .every() just sounds weird\r\n /**\r\n * Check\r\n * @param {*} array\r\n * @param {*} checkingFunction\r\n * @returns\r\n */\r\n check(array, checkingFunction) {\r\n return array.every(checkingFunction);\r\n },\r\n\r\n /**\r\n * Escape\r\n * @param { string } string\r\n * @returns\r\n */\r\n escape(string) {\r\n return string\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#039;');\r\n },\r\n\r\n /**\r\n * DOM-rendering template tag\r\n * @param {Array} strings\r\n * @returns {object} a DocumentFragment\r\n */\r\n html(strings) {\r\n let output = strings[0], // assumes empty string start?\r\n max = Math.max(strings.length, arguments.length - 1);\r\n for (let i = 1; i < max; i++) {\r\n output += arguments[i];\r\n output += strings[i];\r\n }\r\n return output;\r\n },\r\n\r\n /**\r\n * Basic contents updater\r\n * Assuming:\r\n * - Rendering applied event-listeners already\r\n * - You can apply state afterwards\r\n * - You can store newRender afterwards\r\n * @param {object} previousRender\r\n * @param {object} newRender\r\n * @param {object} dom\r\n */\r\n diffVDomAndUpdate(previousRender, newRender, dom) {\r\n // Assuming overwrite or insertion\r\n let $ = this;\r\n $.changedNodes = [];\r\n let leftItems = previousRender.childNodes,\r\n rightItems = newRender.childNodes,\r\n domItems = dom.childNodes;\r\n if (domItems.length > rightItems.length) {\r\n let diffLength = domItems.length - rightItems.length;\r\n for (let i = 0, c = diffLength; i < c; i++) {\r\n dom.lastChild.remove();\r\n }\r\n }\r\n for (let i = 0, c = rightItems.length; i < c; i++) {\r\n if (!leftItems[i]) {\r\n let node = rightItems[i].cloneNode(true);\r\n $.changedNodes.push(node);\r\n dom.appendChild(node);\r\n } else if (\r\n leftItems[i].outerHTML !== rightItems[i].outerHTML\r\n ) {\r\n let node = rightItems[i].cloneNode(true);\r\n $.changedNodes.push(node);\r\n domItems[i].replaceWith(node);\r\n }\r\n }\r\n },\r\n\r\n // # DATA-STATE\r\n\r\n // Alternative CSS state management\r\n // - using data-attributes instead of classes\r\n // - easier to match model and vue\r\n // - dataset over classlist allows specialization\r\n // - classes work as booleans (\".walked\")\r\n // - you need to notice abscence\r\n // - data-state work as a string type you can dedicate to store state only, and more than one state\r\n\r\n /**\r\n * Add\r\n * @param { object } element\r\n * @param { string } state\r\n */\r\n addDataState(element, state) {\r\n let stateArray = [];\r\n if (\r\n element.dataset.state\r\n && element.dataset.state.indexOf(' ') > -1\r\n ) {\r\n stateArray = element.dataset.state.split(' ');\r\n } else {\r\n stateArray = [element.dataset.state];\r\n }\r\n if (stateArray.indexOf(state) === -1) {\r\n stateArray.push(state);\r\n element.dataset.state = stateArray.join(' ');\r\n }\r\n },\r\n\r\n /**\r\n * Remove\r\n * @param { object } element\r\n * @param { string } state\r\n */\r\n removeDataState(element, state) {\r\n let stateArray = [];\r\n if (\r\n element.dataset.state\r\n && element.dataset.state.indexOf(' ') > -1\r\n ) {\r\n stateArray = element.dataset.state.split(' ');\r\n } else {\r\n stateArray = [element.dataset.state];\r\n }\r\n element.dataset.state =\r\n stateArray\r\n .filter(element => (element !== state))\r\n .join(' ');\r\n },\r\n\r\n /**\r\n * Replace\r\n * @param { object } element\r\n * @param { string } stateToRemove\r\n * @param { string } stateToAdd\r\n */\r\n replaceDataState(element, stateToRemove, stateToAdd) {\r\n this.removeDataState(element, stateToRemove);\r\n this.addDataState(element, stateToAdd);\r\n },\r\n\r\n /**\r\n * Toggle\r\n * @param { object } element\r\n * @param { string } state\r\n */\r\n toggleDataState(element, state) {\r\n let stateArray = element.dataset.state.split(' ');\r\n if (stateArray.indexOf(state) == -1) {\r\n this.addDataState(element, state);\r\n } else {\r\n this.removeDataState(element, state);\r\n }\r\n },\r\n\r\n //# AJAX Functions\r\n\r\n /**\r\n * AJAX GET\r\n * @param {string} url The target url\r\n * @param {function} callback\r\n * @param {boolean} isJson Response contains json\r\n * @param {object} callbackContext\r\n */\r\n ajaxGet(url, callback, isJson, callbackContext) {\r\n var req = new XMLHttpRequest();\r\n req.open(\"GET\", url);\r\n req.addEventListener(\"load\", function () {\r\n if (req.status >= 200 && req.status < 400) {\r\n if (isJson) {\r\n var json = {};\r\n try {\r\n json = JSON.parse(req.responseText);\r\n } catch (error) {\r\n console.error(\"Get request returned invalid JSON.\")\r\n }\r\n callbackContext === undefined ? callback(json) : callback.apply(callbackContext, [json]);\r\n } else {\r\n callbackContext === undefined ? callback(req.responseText) : callback.apply(callbackContext, [req.responseText]);\r\n }\r\n } else {\r\n console.error(req.status + \" \" + req.statusText + \" \" + url);\r\n }\r\n });\r\n req.addEventListener(\"error\", function () {\r\n console.error(\"Network error trying to access: \" + url);\r\n });\r\n req.send(null);\r\n },\r\n\r\n /**\r\n * AJAX POST\r\n * @param {string} url\r\n * @param {string} data\r\n * @param {function} successCallback\r\n * @param {function} failureCallback\r\n * @param {boolean} isJson\r\n * @param {object} successCallbackContext\r\n * @param {object} failureCallbackContext\r\n */\r\n ajaxPost(url, data, successCallback, failureCallback, isJson, successCallbackContext, failureCallbackContext) {\r\n var req = new XMLHttpRequest();\r\n req.open(\"POST\", url);\r\n req.addEventListener(\"load\", function () {\r\n if (req.status >= 200 && req.status < 400) {\r\n successCallbackContext === undefined ? successCallback(req) : successCallback.apply(successCallbackContext, [req]);\r\n } else {\r\n failureCallbackContext === undefined ? failureCallback(req) : failureCallback.apply(failureCallbackContext, [req]);\r\n console.error(req.status + \" \" + req.statusText + \" \" + url);\r\n }\r\n });\r\n req.addEventListener(\"error\", function () {\r\n console.error(\"Network error trying to access: \" + url);\r\n });\r\n if (isJson) {\r\n req.setRequestHeader(\"Content-Type\", \"application/json\");\r\n data = JSON.stringify(data);\r\n }\r\n req.send(data);\r\n },\r\n\r\n /**\r\n * Pipe\r\n * Function piping with initial input\r\n * @param {*} functions\r\n * @param {*} input\r\n * @returns {*}\r\n */\r\n pipe(input, ...functions) {\r\n return functions.reduce((res, fun) => fun(res), input);\r\n }\r\n}\r\n", "(function () {\r\n window.yaju = require('./js-utils.js');\r\n})();\r\n"],
5
+ "mappings": "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",
6
+ "names": ["element"]
7
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "yet-another-js-utils",
3
3
  "description": "Basic javascript utils",
4
4
  "authors": "Adrian Turcev",
5
- "version": "0.0.8",
5
+ "version": "0.0.11",
6
6
  "license": "MPL-2.0",
7
7
  "homepage": "https://github.com/adrianturcev/js-utils",
8
8
  "repository": {