summaryrefslogtreecommitdiff
path: root/school/node_modules/nwsapi/src/modules/nwsapi-jquery.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
committerMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
commit99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch)
treee663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/nwsapi/src/modules/nwsapi-jquery.js
parent9871b03912fc28ad38b4037ebf26a78aa937baba (diff)
downloadpluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/nwsapi/src/modules/nwsapi-jquery.js')
-rw-r--r--school/node_modules/nwsapi/src/modules/nwsapi-jquery.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/school/node_modules/nwsapi/src/modules/nwsapi-jquery.js b/school/node_modules/nwsapi/src/modules/nwsapi-jquery.js
new file mode 100644
index 0000000..961cb30
--- /dev/null
+++ b/school/node_modules/nwsapi/src/modules/nwsapi-jquery.js
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2007-2017 Diego Perini
+ * All rights reserved.
+ *
+ * this is just a small example to show
+ * how an extension for NWMatcher could be
+ * adapted to handle special jQuery selectors
+ *
+ * Child Selectors
+ * :even, :odd, :eq, :lt, :gt, :first, :last, :nth
+ *
+ * Pseudo Selectors
+ * :has, :button, :header, :input, :checkbox, :radio, :file, :image
+ * :password, :reset, :submit, :text, :hidden, :visible, :parent
+ *
+ */
+
+// for structural pseudo-classes extensions
+NW.Dom.registerSelector(
+ 'jquery:child',
+ /^\:((?:(nth|eq|lt|gt)\(([^()]*)\))|(?:even|odd|first|last))(.*)/i,
+ (function(global) {
+
+ return function(match, source, mode, callback) {
+
+ var status = true,
+ macro = mode ? NW.Dom.S_BODY : NW.Dom.M_BODY;
+
+ macro = macro.replace('@', typeof callback == 'function' ? (mode ? NW.Dom.S_TEST : NW.Dom.M_TEST) : '');
+
+ switch (match[1].toLowerCase()) {
+ case 'odd':
+ source = source.replace(macro, 'if((n=n^1)==0){' + macro + '}');
+ break;
+ case 'even':
+ source = source.replace(macro, 'if((n=n^1)==1){' + macro + '}');
+ break;
+ case 'first':
+ source = 'n=s.root.getElementsByTagName(e.nodeName);if(n.length&&n[0]===e){' + source + '}';
+ break;
+ case 'last':
+ source = 'n=s.root.getElementsByTagName(e.nodeName);if(n.length&&n[n.length-1]===e){' + source + '}';
+ break;
+ default:
+ switch (match[2].toLowerCase()) {
+ case 'nth':
+ source = 'n=s.root.getElementsByTagName(e.nodeName);if(n.length&&n[' + match[3] + ']===e){' + source + '}';
+ break;
+ case 'eq':
+ source = source.replace(macro, 'if(x++==' + match[3] + '){' + macro + '}');
+ break;
+ case 'lt':
+ source = source.replace(macro, 'if(x++<' + match[3] + '){' + macro + '}');
+ break;
+ case 'gt':
+ source = source.replace(macro, 'if(x++>' + match[3] + '){' + macro + '}');
+ break;
+ default:
+ status = false;
+ break;
+ }
+ break;
+ }
+
+ // compiler will add this to "source"
+ return {
+ 'source': source,
+ 'status': status,
+ 'modvar': 'x=0'
+ };
+
+ };
+
+ })(this));
+
+// for element pseudo-classes extensions
+NW.Dom.registerSelector(
+ 'jquery:pseudo',
+ /^\:(has|checkbox|file|image|password|radio|reset|submit|text|button|input|header|hidden|visible|parent)(?:\(\s*(["']*)?([^'"()]*)\2\s*\))?(.*)/i,
+ (function(global) {
+
+ return function(match, source, mode, callback) {
+
+ var status = true,
+ macro = mode ? NW.Dom.S_BODY : NW.Dom.M_BODY;
+
+ macro = macro.replace('@', typeof callback == 'function' ? (mode ? NW.Dom.S_TEST : NW.Dom.M_TEST) : '');
+
+ switch(match[1].toLowerCase()) {
+ case 'has':
+ source = source.replace(macro, 'if(e.getElementsByTagName("' + match[3].replace(/^\s|\s$/g, '') + '")[0]){' + macro + '}');
+ break;
+ case 'checkbox':
+ case 'file':
+ case 'image':
+ case 'password':
+ case 'radio':
+ case 'reset':
+ case 'submit':
+ case 'text':
+ // :checkbox, :file, :image, :password, :radio, :reset, :submit, :text
+ source = 'if(/^' + match[1] + '$/i.test(e.type)){' + source + '}';
+ break;
+ case 'button':
+ source = 'if(/^button$/i.test(e.nodeName)){' + source + '}';
+ break;
+ case 'input':
+ source = 'if(/^(?:button|input|select|textarea)$/i.test(e.nodeName)){' + source + '}';
+ break;
+ case 'header':
+ source = 'if(/^h[1-6]$/i.test(e.nodeName)){' + source + '}';
+ break;
+ case 'hidden':
+ source = 'if(!e.offsetWidth&&!e.offsetHeight){' + source + '}';
+ break;
+ case 'visible':
+ source = 'if(e.offsetWidth||e.offsetHeight){' + source + '}';
+ break;
+ case 'parent':
+ source = 'if(e.firstChild){' + source + '}';
+ break;
+ default:
+ status = false;
+ break;
+ }
+
+ // compiler will add this to "source"
+ return {
+ 'source': source,
+ 'status': status
+ };
+
+ };
+
+ })(this));