First commit
This commit is contained in:
418
framework/client/queryManager.js
Normal file
418
framework/client/queryManager.js
Normal file
@@ -0,0 +1,418 @@
|
||||
|
||||
export default class queryManager{
|
||||
|
||||
selectors = new Array();
|
||||
|
||||
|
||||
createSelector( character, name ) {
|
||||
|
||||
var selector = new Object();
|
||||
|
||||
selector.character = character;
|
||||
|
||||
selector.name = name;
|
||||
|
||||
this.selectors.push( selector );
|
||||
|
||||
}
|
||||
|
||||
constructor() {
|
||||
|
||||
this.createSelector( "#", "id" )
|
||||
|
||||
this.createSelector( ":", "selector" )
|
||||
|
||||
this.createSelector( "@", "propertyName" )
|
||||
|
||||
}
|
||||
|
||||
query( query, unifyObject ) {
|
||||
|
||||
var terms = query.split(" ");
|
||||
|
||||
var objectSelection = new Array( unifyObject );
|
||||
|
||||
for ( var i = 0; i < terms.length; i++ ) {
|
||||
|
||||
var term = terms[i];
|
||||
|
||||
objectSelection = this.processTerm( term, objectSelection );
|
||||
|
||||
}
|
||||
|
||||
//console.log( objectSelection );
|
||||
|
||||
return objectSelection;
|
||||
|
||||
}
|
||||
|
||||
clone( object ) {
|
||||
|
||||
return JSON.parse( JSON.stringify( object ) )
|
||||
|
||||
}
|
||||
|
||||
processTerm( term, objectSelection ) {
|
||||
|
||||
//console.log("\n\n" )
|
||||
|
||||
//console.log( "process term", term );
|
||||
|
||||
var newSelection = new Array();
|
||||
|
||||
for (var j = 0; j < objectSelection.length; j++) {
|
||||
|
||||
var currentObjectSelection = objectSelection[j];
|
||||
|
||||
var selected = this.processSelector( term, currentObjectSelection );
|
||||
|
||||
newSelection = [...newSelection, ...selected]
|
||||
|
||||
}
|
||||
|
||||
return newSelection;
|
||||
|
||||
}
|
||||
|
||||
processSelector( term, objectSelection ) {
|
||||
|
||||
var allSelectors = new Array();
|
||||
|
||||
|
||||
for ( var j = 0; j < this.selectors.length; j++ ) {
|
||||
|
||||
var selector = this.selectors[j];
|
||||
|
||||
var indices = this.getIndicesOf( selector.character, term );
|
||||
|
||||
|
||||
for (var i = 0; i < indices.length; i++) {
|
||||
|
||||
var index = indices[i];
|
||||
|
||||
var uniuqeSelector = this.clone( selector );
|
||||
|
||||
uniuqeSelector.startIndex = index;
|
||||
|
||||
allSelectors.push( uniuqeSelector );
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var sortedSelectors = allSelectors.sort( function ( a, b ) { return a.startIndex - b.startIndex } );
|
||||
|
||||
|
||||
var firstSelector = sortedSelectors[0];
|
||||
|
||||
//console.log(allSelectors);
|
||||
|
||||
if( firstSelector ) {
|
||||
|
||||
var startIndex = firstSelector.startIndex;
|
||||
|
||||
} else {
|
||||
|
||||
var createFirstSelector = true;
|
||||
|
||||
}
|
||||
|
||||
if( createFirstSelector || startIndex != 0 ) {
|
||||
|
||||
var selector = new Object();
|
||||
|
||||
selector.character = "";
|
||||
|
||||
selector.name = "className";
|
||||
|
||||
selector.startIndex = 0;
|
||||
|
||||
|
||||
sortedSelectors = this.addItemToStartOfArray( sortedSelectors, selector );
|
||||
|
||||
}
|
||||
|
||||
|
||||
for (var i = 0; i < sortedSelectors.length; i++) {
|
||||
|
||||
var selector = sortedSelectors[i];
|
||||
|
||||
var nextSelector = sortedSelectors[i+1];
|
||||
|
||||
var currentStartIndex = selector.startIndex;
|
||||
|
||||
if( nextSelector ) {
|
||||
|
||||
var nextStartIndex = nextSelector.startIndex;
|
||||
|
||||
} else {
|
||||
|
||||
var nextStartIndex = term.length;
|
||||
|
||||
}
|
||||
|
||||
selector.term = term.substr( currentStartIndex + selector.character.length, nextStartIndex - currentStartIndex - selector.character.length );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
var objectSelection = new Array( objectSelection );
|
||||
|
||||
//console.log(" process selector", term, sortedSelectors)
|
||||
|
||||
|
||||
for ( var i = 0; i < sortedSelectors.length; i++ ) {
|
||||
|
||||
//console.log(" executeSelector", objectSelection);
|
||||
|
||||
var selector = sortedSelectors[i];
|
||||
|
||||
objectSelection = this.executeSelector( selector, objectSelection );
|
||||
|
||||
//console.log( " objectSelection", objectSelection );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//console.log( " objectSelection", objectSelection );
|
||||
|
||||
return objectSelection;
|
||||
|
||||
}
|
||||
|
||||
executeSelector( selector, ObjectSelection ) {
|
||||
|
||||
var name = selector.name;
|
||||
|
||||
switch( name ) {
|
||||
|
||||
case "className":
|
||||
|
||||
var allSelectors = new Array();
|
||||
|
||||
for (var i = 0; i < ObjectSelection.length; i++) {
|
||||
|
||||
var currentUnifyObject = ObjectSelection[i];
|
||||
|
||||
//console.log(currentUnifyObject);
|
||||
|
||||
//console.log(" currentUnifyObject.findAll( selector.term )", selector.term);
|
||||
|
||||
// by class name
|
||||
var results = currentUnifyObject.findAll( selector.term );
|
||||
|
||||
allSelectors = [...allSelectors, ...results]
|
||||
|
||||
|
||||
}
|
||||
|
||||
ObjectSelection = allSelectors
|
||||
|
||||
//console.log(" afterObjectSelection", ObjectSelection);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case "propertyName":
|
||||
|
||||
if( selector.startIndex == 0 ) {
|
||||
|
||||
var allSelectors = new Array();
|
||||
|
||||
for (var i = 0; i < ObjectSelection.length; i++) {
|
||||
|
||||
var currentUnifyObject = ObjectSelection[i];
|
||||
|
||||
var results = currentUnifyObject.getByPropertyName( selector.term );
|
||||
|
||||
allSelectors = [...allSelectors, ...results]
|
||||
|
||||
|
||||
}
|
||||
|
||||
ObjectSelection = allSelectors
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
for (var i = 0; i < ObjectSelection.length; i++) {
|
||||
|
||||
var currentUnifyObject = ObjectSelection[i];
|
||||
|
||||
//console.log("currentUnifyObject.findChildByID( selector.term )", selector.term);
|
||||
|
||||
if( currentUnifyObject.propertyName == selector.term ) {
|
||||
|
||||
return new Array( currentUnifyObject );
|
||||
|
||||
} else {
|
||||
|
||||
return new Array( );
|
||||
|
||||
}
|
||||
// by class name
|
||||
//ObjectSelection = currentUnifyObject.getChildById( selector.term );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case "id":
|
||||
|
||||
if( selector.startIndex == 0 ) {
|
||||
|
||||
var allSelectors = new Array();
|
||||
|
||||
for (var i = 0; i < ObjectSelection.length; i++) {
|
||||
|
||||
var currentUnifyObject = ObjectSelection[i];
|
||||
|
||||
var results = currentUnifyObject.getByID( selector.term );
|
||||
|
||||
allSelectors = [...allSelectors, ...results]
|
||||
|
||||
|
||||
}
|
||||
|
||||
ObjectSelection = allSelectors
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
for (var i = 0; i < ObjectSelection.length; i++) {
|
||||
|
||||
var currentUnifyObject = ObjectSelection[i];
|
||||
|
||||
//console.log("currentUnifyObject.findChildByID( selector.term )", selector.term);
|
||||
|
||||
if( currentUnifyObject.id == selector.term ) {
|
||||
|
||||
return new Array( currentUnifyObject );
|
||||
|
||||
} else {
|
||||
|
||||
return new Array( );
|
||||
|
||||
}
|
||||
// by class name
|
||||
//ObjectSelection = currentUnifyObject.getChildById( selector.term );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case "selector":
|
||||
|
||||
var term = selector.term;
|
||||
|
||||
switch( term ) {
|
||||
|
||||
case "first-child":
|
||||
|
||||
//console.log("return ObjectSelection[0];", term);
|
||||
|
||||
if( ObjectSelection[0] ) {
|
||||
|
||||
return new Array( ObjectSelection[0] );
|
||||
|
||||
} else {
|
||||
|
||||
return new Array( );
|
||||
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case "last-child":
|
||||
|
||||
//console.log("return ObjectSelection[ObjectSelection.length-1]", term);
|
||||
|
||||
var lastObject = ObjectSelection[ObjectSelection.length-1];
|
||||
|
||||
if( lastObject ) {
|
||||
|
||||
return new Array( lastObject );
|
||||
|
||||
} else {
|
||||
|
||||
return new Array( );
|
||||
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return ObjectSelection;
|
||||
|
||||
}
|
||||
|
||||
addItemToStartOfArray( array, newFirstElement ) {
|
||||
|
||||
return [ newFirstElement ].concat( array )
|
||||
|
||||
}
|
||||
|
||||
getIndicesOf( searchStr, str, caseSensitive ) {
|
||||
|
||||
var searchStrLen = searchStr.length;
|
||||
|
||||
if ( searchStrLen == 0 ) {
|
||||
|
||||
return new Array();
|
||||
|
||||
}
|
||||
|
||||
var startIndex = 0;
|
||||
|
||||
var index;
|
||||
|
||||
var indices = new Array();
|
||||
|
||||
if ( !caseSensitive ) {
|
||||
|
||||
str = str.toLowerCase();
|
||||
|
||||
searchStr = searchStr.toLowerCase();
|
||||
|
||||
}
|
||||
|
||||
while ( ( index = str.indexOf( searchStr, startIndex ) ) > -1 ) {
|
||||
|
||||
indices.push( index );
|
||||
|
||||
startIndex = index + searchStrLen;
|
||||
|
||||
}
|
||||
|
||||
return indices;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user