commit 65a196fb3113e2dbaf4f70176e267916cd292d86
parent c4c1daade9149a4c61261f1f25fc6996dab67d67
Author: Jan Dankert <develop@jandankert.de>
Date: Thu, 1 Apr 2021 22:20:52 +0200
Using subclasses for the "JQuery"-Plugins.
Diffstat:
2 files changed, 64 insertions(+), 73 deletions(-)
diff --git a/modules/cms/ui/themes/default/script/Oquery.js b/modules/cms/ui/themes/default/script/Oquery.js
@@ -1,35 +1,39 @@
+/*! OQuery */
/**
* OQuery is a very light ES6-ready replacement for JQuery
*
*/
-let selector = function ( selector ) {
+let query = function (selector ) {
if ( typeof selector === 'string' )
- return new OQuery( document.querySelectorAll(selector) );
+ return query.createQuery( document.querySelectorAll(selector) );
else if ( selector instanceof HTMLElement )
- return new OQuery([selector] );
+ return query.createQuery([selector] );
else if ( selector instanceof OQuery )
return selector;
else
//console.warn( new Error("Illegal argument '"+selector+"' of type "+(typeof selector)) );
- return new OQuery( [] );
+ return query.createQuery( [] );
}
-selector.create = function(tagName ) {
- return new OQuery( [document.createElement( tagName )] );
-};
+query.createQuery = function(nodeList ) {
+ return new OQuery( nodeList );
+}
-selector.id = function( id ) {
- return new OQuery( [document.getElementById( id )] );
+query.create = function(tagName ) {
+ return query.createQuery( [document.createElement( tagName )] );
};
-selector.one = function( selector ) {
- return new OQuery( [document.querySelector( selector )] );
+query.id = function(id ) {
+ return query.createQuery( [document.getElementById( id )] );
};
+query.one = function(selector ) {
+ return query.createQuery( [document.querySelector( selector )] );
+};
-selector.extend = function() {
+query.extend = function() {
for(let i=1; i<arguments.length; i++)
for(let key in arguments[i])
if(arguments[i].hasOwnProperty(key))
@@ -37,12 +41,16 @@ selector.extend = function() {
return arguments[0];
}
-export default selector;
+export default query;
export class OQuery {
static fn = OQuery.prototype;
+
+ createNew(nodeList) {
+ return new OQuery(nodeList)
+ };
constructor( nodeList ) {
@@ -53,30 +61,30 @@ export class OQuery {
return this.nodes[idx];
}
first() {
- return new OQuery( this.nodes.length > 0 ? [this.nodes[0]] : [] );
+ return this.createNew( this.nodes.length > 0 ? [this.nodes[0]] : [] );
};
parent() {
- return new OQuery( this.nodes.map(node => node.parentNode ).filter( node => node !== null ) );
+ return this.createNew( this.nodes.map(node => node.parentNode ).filter( node => node !== null ) );
};
closest( selector ) {
- return new OQuery( this.nodes.map(node => node.closest( selector ) ).filter( node => node !== null ) );
+ return this.createNew( this.nodes.map(node => node.closest( selector ) ).filter( node => node !== null ) );
};
children( selector ) {
let result = [];
for( let node of this.nodes )
result = result.concat( Array.from(node.children).filter( node => selector ? node.matches(selector) : true ) );
- return new OQuery( result );
+ return this.createNew( result );
};
find(selector) {
let result = [];
for( let node of this.nodes )
result = result.concat( Array.from(node.querySelectorAll(selector)) );
- return new OQuery( result );
+ return this.createNew( result );
};
text( value ) {
@@ -186,7 +194,7 @@ export class OQuery {
}
appendTo( el ) {
- let to = selector( el );
+ let to = query( el );
to.append( this )
return this;
}
diff --git a/modules/cms/ui/themes/default/script/jquery-global.js b/modules/cms/ui/themes/default/script/jquery-global.js
@@ -1,9 +1,4 @@
-/*
-import './jquery.min.js';
-
-let jQuery = $;
-export default jQuery;
-window.$ = $;
+import query, {OQuery} from './Oquery.js';
import autoheight from './plugin/jquery-plugin-orAutoheight.js';
import button from './plugin/jquery-plugin-orButton.js';
@@ -12,63 +7,51 @@ import search from './plugin/jquery-plugin-orSearch.js';
import tree from './plugin/jquery-plugin-orTree.js';
import toggleAttr from './plugin/jquery-plugin-toggleAttr.js';
-jQuery.fn.orAutoheight = autoheight;
-jQuery.fn.orButton = button;
-jQuery.fn.orLinkify = linkify;
-jQuery.fn.orSearch = search;
-jQuery.fn.orTree = tree;
-jQuery.fn.toggleAttr = toggleAttr;
+query.createQuery = (nodeList) => new CMSQuery(nodeList);
-let originalAddClass = jQuery.fn.addClass;
-jQuery.fn.addClass = function (styleClass) {
- return originalAddClass.call(this,'or-'+styleClass);
-}
+export default query;
-let originalRemoveClass = jQuery.fn.removeClass;
-jQuery.fn.removeClass = function (styleClass) {
- return originalRemoveClass.call(this,'or-'+styleClass);
-}
+class CMSQuery extends OQuery {
-let originalHasClass = jQuery.fn.hasClass;
-jQuery.fn.hasClass = function (styleClass) {
- return originalHasClass.call(this,'or-'+styleClass);
-}
-*/
+ createNew(nodeList) {
+ return new CMSQuery(nodeList);
+ }
-import $, {OQuery} from './Oquery.js';
+ static classPrefix = 'or-';
-export default $;
+ addClass( styleClass ) {
+ return super.addClass( CMSQuery.classPrefix + styleClass )
+ }
+ removeClass( styleClass ) {
+ return super.removeClass( CMSQuery.classPrefix + styleClass )
+ }
+ hasClass( styleClass ) {
+ return super.hasClass( CMSQuery.classPrefix + styleClass )
+ }
-import autoheight from './plugin/jquery-plugin-orAutoheight.js';
-import button from './plugin/jquery-plugin-orButton.js';
-import linkify from './plugin/jquery-plugin-orLinkify.js';
-import search from './plugin/jquery-plugin-orSearch.js';
-import tree from './plugin/jquery-plugin-orTree.js';
-import toggleAttr from './plugin/jquery-plugin-toggleAttr.js';
+ orAutoheight() {
+ return autoheight.call(this);
+ };
-OQuery.fn.orAutoheight = autoheight;
-OQuery.fn.orButton = button;
-OQuery.fn.orLinkify = linkify;
-OQuery.fn.orSearch = search;
-OQuery.fn.orTree = tree;
-OQuery.fn.toggleAttr = toggleAttr;
+ orButton() {
+ return button.call(this);
+ };
-let originalAddClass = OQuery.fn.addClass;
-OQuery.fn.addClass = function (styleClass) {
- return originalAddClass.call(this,'or-'+styleClass);
-}
+ orLinkify() {
+ return linkify.call(this);
+ };
-let originalRemoveClass = OQuery.fn.removeClass;
-OQuery.fn.removeClass = function (styleClass) {
- return originalRemoveClass.call(this,'or-'+styleClass);
-}
+ orSearch() {
+ return search.call(this);
+ };
+
+ orTree() {
+ return tree.call(this);
+ };
-let originalHasClass = OQuery.fn.hasClass;
-OQuery.fn.hasClass = function (styleClass) {
- return originalHasClass.call(this,'or-'+styleClass);
+ toggleAttr() {
+ return toggleAttr.call(this);
+ };
}
-//let originalToggleClass = OQuery.fn.toggleClass;
-//OQuery.fn.toggleClass = function (styleClass) {
-// return originalToggleClass.call(this,'or-'+styleClass);
-//}
+