Advertisement
Guest User

Untitled

a guest
Jan 17th, 2020
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 9.01 KB | None | 0 0
  1.  
  2. <!DOCTYPE html>
  3. <html>
  4.  
  5. <head>
  6.     <title>Cor_Vous Corridor Solution Search</title>
  7.     <meta name="viewport" content="initial-scale=1">
  8.     <meta charset="UTF-8">
  9. </head>
  10.  
  11. <body>
  12.     <div>
  13.         <img id="cauldron" src="cauldron.png" />
  14.         <img id="clover" src="clover.png" />
  15.         <img id="diamond" src="diamond.png" />
  16.         <img id="hex" src="hex.png" />
  17.         <img id="plus" src="plus.png" />
  18.         <img id="snake" src="snake.png" />
  19.     </div>
  20.     <p>@Cor_Vous Corridor Vault Search</p>
  21.     <form>
  22.         <fieldset>
  23.             <legend>Options</legend>
  24.             <div><label><input type="radio" id="VaultOnly" name="SelectedData" value="vault" >Vault Data</label> <a href="https://docs.google.com/spreadsheets/d/1bYi_-XApwf_avyIuExGULdWa4oxzLr7upelAtRq38TA/edit#gid=710933392">https://docs.google.com/spreadsheets/d/1bYi_-XApwf_avyIuExGULdWa4oxzLr7upelAtRq38TA/edit#gid=710933392</a></div><br>
  25.             <div><label><input type="radio" id="VerifiedOnly" name="SelectedData" value="verified" >Verified Combined Data</label> <a href="https://docs.google.com/spreadsheets/d/1T4h8B3LF7jCNKccMAUjRDPJYetA7WJlFeit6Fon6xoA/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1T4h8B3LF7jCNKccMAUjRDPJYetA7WJlFeit6Fon6xoA/edit?usp=sharing</a></div><br>
  26.             <div><label><input type="radio" id="MasterOnly" name="SelectedData" value="master"checked>Unfiltered Compiled Data (1/17/2020 3:27 AM PST)</label> <a href="https://docs.google.com/spreadsheets/d/1bYi_-XApwf_avyIuExGULdWa4oxzLr7upelAtRq38TA/edit#gid=1755434390">https://docs.google.com/spreadsheets/d/1bYi_-XApwf_avyIuExGULdWa4oxzLr7upelAtRq38TA/edit#gid=1755434390</a></div><br>
  27.             <br>
  28.             <div><label>Main Symbol:</label>
  29.                 <select id="Symbol">
  30.                     <option value="any" selected="selected">Any</option>
  31.                     <option value="some">Non-blank</option>
  32.                     <option value="">Blank</option>
  33.                     <option value="cauldron">Cauldron</option>
  34.                     <option value="clover">Clover</option>
  35.                     <option value="diamond">Diamond</option>
  36.                     <option value="hex">Hex</option>
  37.                     <option value="plus">Plus</option>
  38.                     <option value="snake">Snake</option>
  39.                 </select>
  40.             </div><br>
  41.             <div><label>Has subnode:</label><input type="text" id="SubNode" name="SubNode" /></div><br>
  42.             <div><label><input type="checkbox" id="StartEnd" name="StartEnd">Is Start/End</label></div><br>
  43.             <input id="search-button" type="button" onclick="search()" value="Search">
  44.         </fieldset>
  45.     </form>
  46.     <textarea id="json-export" style="display: none;" cols="100" rows="10"></textarea>
  47.     <br>
  48.     <div id="results">
  49.         <table>
  50.             <thead>
  51.                 <th>ID</th>
  52.                 <th>Symbol</th>
  53.                 <th>Open Sides</th>
  54.                 <th>Subnodes</th>
  55.                 <th>Image</th>
  56.             </thead>
  57.             <tbody id="results-table">
  58.                 <tr id="result-placeholder" style="display: none;">
  59.                     <td></td>
  60.                     <td></td>
  61.                     <td></td>
  62.                     <td></td>
  63.                     <td></td>
  64.                 </tr>
  65.             </tbody>
  66.         </table>
  67.     </div>
  68.     <script>
  69.         class Node {
  70.             constructor(id, subNodes, openSides, symbol=null, corridorLink) {
  71.                 this.id = id;
  72.                 this.subNodes = subNodes;
  73.                 this.openSides = openSides;
  74.                 this.symbol = symbol;
  75.                 this.corridorLink = corridorLink;
  76.             }
  77.         }
  78.  
  79.         class SubNode {
  80.             constructor(code = "") {
  81.                 this.code = code;
  82.             }
  83.         }
  84.  
  85.         function search() {
  86.             var verifiedOnly = document.getElementById("VerifiedOnly").checked;
  87.             var vaultOnly = document.getElementById("VaultOnly").checked;
  88.             var masterOnly = document.getElementById("MasterOnly").checked;
  89.             var selectedData = "";
  90.             var selectedData = verifiedOnly?"verifiedOnly":selectedData;
  91.             var selectedData = vaultOnly?"vaultOnly":selectedData;
  92.             var selectedData = masterOnly?"masterOnly":selectedData;
  93.  
  94.             var startEnd = document.getElementById("StartEnd").checked;
  95.  
  96.             var symbolSearch = document.getElementById("Symbol").selectedOptions[0].value;
  97.             var subNodeSearch = document.getElementById("SubNode").value;
  98.             window.history.pushState("", "document.title", window.location.href.split('?')[0]+"?Search="+selectedData+"&SubNode="+subNodeSearch);
  99.  
  100.             var resultRows = document.getElementById("results-table").getElementsByClassName("result-row");
  101.             while (resultRows.length > 0) resultRows[0].remove();
  102.             document.getElementById("search-button").style.display = "none";
  103.             document.getElementById("json-export").style.display = "none";
  104.             var dataTest = [];
  105.             var nodes = [];
  106.             var nodeSignature = {};
  107.  
  108.             var xmlhttp = new XMLHttpRequest();
  109.             xmlhttp.onreadystatechange = function() {
  110.               if (this.readyState == 4 && this.status == 200) {
  111.                 let counter = 0;
  112.                 var data = JSON.parse(this.responseText);
  113.                 data.feed.entry.forEach(function(sheetData){
  114.                     if (sheetData["gs$cell"]["col"] == 2 && sheetData["gs$cell"]["row"] >= 2) {
  115.                         x = sheetData.content["$t"];
  116.                         x = x.replace(/\\""/g, '"');
  117.                         try {
  118.                             JSON.parse(x);
  119.                         } catch(e) {
  120.                             return;
  121.                         }
  122.                         dataTest.push([JSON.parse(x), sheetData["gs$cell"]["row"]]);
  123.                     }
  124.                 });
  125.                 dataTest.forEach(function(data) {
  126.                     let signature = "";
  127.                     var newSubNodes = [];
  128.                     try {
  129.                         data[0].nodes.forEach(function(subData){
  130.                             if (subData.join('') == "BBBBBBB") {
  131.                                 var newSubNode = new SubNode();
  132.                             } else {
  133.                                 var newSubNode = new SubNode(subData.join(''));
  134.                             }
  135.                             signature+=subData.join('');
  136.                             newSubNodes.push(newSubNode);
  137.                         });
  138.                     } catch(e) {
  139.                         //console.log(e);
  140.                         return;
  141.                     }
  142.                    
  143.                     var newOpenSides = [];
  144.                     for(i=0; i<6; i++) {
  145.                         if (!data[0].walls[i]) {
  146.                             signature+=i+1;
  147.                             newOpenSides.push(i+1);
  148.                         }
  149.                     }
  150.  
  151.                     var newSymbol;
  152.                     switch(data[0].center) {
  153.                         case 'T':
  154.                             newSymbol = "cauldron";
  155.                             break;
  156.                         case 'C':
  157.                             newSymbol = "clover";
  158.                             break;
  159.                         case 'H':
  160.                             newSymbol = "hex";
  161.                             break;
  162.                         case 'S':
  163.                             newSymbol = "snake";
  164.                             break;
  165.                         case 'D':
  166.                             newSymbol = "diamond";
  167.                             break;
  168.                         case 'P':
  169.                             newSymbol = "plus";
  170.                             break;
  171.                         case 'B':
  172.                             newSymbol = null;
  173.                             break;
  174.                     }
  175.                     signature+=newSymbol;
  176.  
  177.                     var corridors = "https://tjl.co/corridors-of-time/viewer.html#"+btoa(JSON.stringify(data));
  178.                     var newNode = new Node(data[1], newSubNodes, newOpenSides, newSymbol, corridors);
  179.                     newNode.image = data[0].image;
  180.                     if (!nodeSignature[signature]) {
  181.                         nodeSignature[signature] = data[1];
  182.                         nodes.push(newNode);
  183.                     } else {
  184.                         //console.log("Duplicate found at: "+data[1]+". Original at: "+nodeSignature[signature]);
  185.                     }
  186.                 });
  187.                 console.log(nodes.length + " rows");
  188.                 var results = nodes.slice();
  189.                 if (symbolSearch == "some") {
  190.                     results = results.filter(n => n.symbol != null)
  191.                 } else if (symbolSearch != "any") {
  192.                     results = results.filter(n => n.symbol == symbolSearch || symbolSearch == "" && n.symbol == null);
  193.                 }
  194.                 if (subNodeSearch != "") {
  195.                     results = results.filter(n => n.subNodes.find(subNode => subNode.code.toUpperCase() == subNodeSearch.toUpperCase() || subNode.code == "" && subNodeSearch.toUpperCase() == "BBBBBB"));
  196.                 }
  197.                 if (startEnd) {
  198.                     results = results.filter(n => {
  199.                         for (let k=0; k<n.openSides.length; k++) {
  200.                             if (n.subNodes[n.openSides[k]-1].code == "") return true;
  201.                         }
  202.                         return false;
  203.                     });
  204.                 }
  205.                 console.log(results.length + " results");
  206.                 let resultPlaceholder = document.getElementById("result-placeholder");
  207.                 let resultContainer = document.getElementById("results-table");
  208.                 let j=0;
  209.                 results.forEach(result => {
  210.                     let resultElement = resultPlaceholder.cloneNode(true);
  211.                     resultContainer.append(resultElement);
  212.                     resultElement.id = "result-" + j++;
  213.                     resultElement.classList.add("result-row");
  214.                     resultElement.children[0].innerHTML = result.id;
  215.                     resultElement.children[1].innerHTML = result.symbol == null ? "Blank" : result.symbol.charAt(0).toUpperCase() + result.symbol.slice(1);
  216.                     resultElement.children[2].innerHTML = result.openSides.join(", ");
  217.                     resultElement.children[3].innerHTML = result.subNodes.map(sn => sn.code == "" ? "BBBBBB" : sn.code).join(", ");
  218.                     resultElement.children[4].innerHTML = '<a href="'+result.image+'">'+result.image+"</a>";
  219.                     resultElement.style.display = "";
  220.                 });
  221.  
  222.                 document.getElementById("search-button").style.display = "block";
  223.               }
  224.             };
  225.            
  226.             if (verifiedOnly) {
  227.                 //xmlhttp.open("GET", "https://spreadsheets.google.com/feeds/cells/1Z16lZS_Uo-Go9hyxxY3oZlFqObkGpgmThSvJUrwSBFk/7/public/full?alt=json", true);
  228.                 xmlhttp.open("GET", "https://spreadsheets.google.com/feeds/cells/1T4h8B3LF7jCNKccMAUjRDPJYetA7WJlFeit6Fon6xoA/1/public/full?alt=json", true);
  229.                 xmlhttp.send();
  230.             }
  231.             else if (masterOnly) {
  232.                 xmlhttp.open("GET", "https://spreadsheets.google.com/feeds/cells/1bYi_-XApwf_avyIuExGULdWa4oxzLr7upelAtRq38TA/5/public/full?alt=json", true);
  233.                 xmlhttp.send();
  234.             }
  235.             else {
  236.                 xmlhttp.open("GET", "https://spreadsheets.google.com/feeds/cells/1bYi_-XApwf_avyIuExGULdWa4oxzLr7upelAtRq38TA/1/public/full?alt=json", true);
  237.                 xmlhttp.send();
  238.             }
  239.         }
  240.  
  241.     </script>
  242. </body>
  243.  
  244. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement