Energyxxer

JS Selector Class

Oct 29th, 2016
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2.  
  3. function Selector(sel) {
  4.     this.valid = true;
  5.     this.header = "@a";
  6.     this.args = {};
  7.  
  8.     {
  9.         if(typeof sel != "string") {this.valid = false;return null};
  10.         var validHeaders = ["@a","@p","@e","@r"];
  11.         if(validHeaders.indexOf(sel.substring(0,2)) > -1) {
  12.             this.header = sel.substring(0,2);
  13.         } else {this.valid = false;return null;}
  14.  
  15.         sel = sel.substring(2);
  16.  
  17.         var tempArgs = {};
  18.  
  19.         var token = "";
  20.         var key = "";
  21.         var argsCount = 0;
  22.  
  23.         var action = "GET_KEY";
  24.  
  25.         iteration: for(var i = 0; i < sel.length; i++) {
  26.             var c = sel.charAt(i);
  27.  
  28.             if(i == 0) {
  29.                 if(c != "[") break; else continue;
  30.             }
  31.  
  32.             if("]=, ".indexOf(c) > -1) {
  33.                 switch(c) {
  34.                     case "]":
  35.                     case ",": {
  36.                         if(action == "GET_KEY" && token.length > 0) {
  37.                             key = ["x","y","z","r"][argsCount];
  38.                             if(key == undefined) {
  39.                                 break iteration;
  40.                             }
  41.                             tempArgs[key] = token;
  42.                             token = key = "";
  43.                             argsCount++;
  44.                             break;
  45.                         } else if(action == "GET_VALUE") {
  46.                             tempArgs[key] = token;
  47.                             token = key = "";
  48.                             action = "GET_KEY";
  49.                             argsCount++;
  50.                             break;
  51.                         }
  52.                         if(c == "]") {
  53.                             break iteration;
  54.                         }
  55.                     }
  56.                     case "=": {
  57.                         if(action == "GET_KEY") {
  58.                             key = token;
  59.                             token = "";
  60.                             action = "GET_VALUE";
  61.                             break;
  62.                         } else if(action == "GET_VALUE") {
  63.                             break iteration;
  64.                         }
  65.                     } case " ": {
  66.                         break iteration;
  67.                     }
  68.                 }
  69.             } else {
  70.                 token += c;
  71.             }
  72.  
  73.         }
  74.         this.args = tempArgs;
  75.     }
  76.  
  77.     this.clone = function() {
  78.         var ns = new Selector();
  79.         ns.valid = this.valid;
  80.         ns.header = this.header;
  81.         ns.args = {};
  82.         for(var i  in this.args) {
  83.             ns.args[i] = this.args[i];
  84.         }
  85.         return ns;
  86.     }
  87. }
  88.  
  89. Selector.prototype.toString = function() {
  90.     if(!this.valid) return null;
  91.     var s = this.header;
  92.     var hasArgs = false;
  93.     var argsRaw = "";
  94.  
  95.     for(var i in this.args) {
  96.         hasArgs = true;
  97.         argsRaw += i + "=" + this.args[i] + ",";
  98.     }
  99.     if(argsRaw.charAt(argsRaw.length-1) == ",") argsRaw = argsRaw.substring(0,argsRaw.length-1);
  100.  
  101.     s += (hasArgs) ? ("[" + argsRaw + "]") : "";
  102.     return s;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment