index.html 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Pokemon By Color</title>
  6. <link rel="stylesheet" href="styles.css" />
  7. <script src="https://unpkg.com/d3-color@3.0.1/dist/d3-color.min.js"></script>
  8. <script src="https://unpkg.com/d3-cam02@0.1.5/build/d3-cam02.min.js"></script>
  9. <script src="https://unpkg.com/fuse.js@6.5.3/dist/fuse.min.js"></script>
  10. <script src="database-v3.js"></script>
  11. <script src="math.js"></script>
  12. <script src="form.js"></script>
  13. </head>
  14. <body>
  15. <noscript>Requires javascript</noscript>
  16. <template id="metric-select-template">
  17. <fieldset
  18. class="metric-select-fieldset"
  19. onchange="onMetricChange(event.target.form.elements)"
  20. >
  21. <legend>Metric</legend>
  22. <div>
  23. <label>
  24. <input type="radio" name="metricKind" value="whole" />
  25. Set Comparison
  26. </label>
  27. </div>
  28. <div>
  29. <label>
  30. <input type="radio" name="metricKind" value="mean" />
  31. Mean Comparison
  32. </label>
  33. </div>
  34. <div>
  35. <label>
  36. <input type="radio" name="metricKind" value="statistic" />
  37. Set Statistics
  38. </label>
  39. </div>
  40. <select name="whole" disabled>
  41. <option value="sigma">RMS Deviation (σ)</option>
  42. <option value="bigTheta">Cosine Difference (Θ)</option>
  43. <option value="alpha" selected>Geometric Difference (α)</option>
  44. </select>
  45. <select name="mean" disabled>
  46. <option value="theta">Angular Difference (θ)</option>
  47. <option value="phi">Hue Azimuth (ϕ)</option>
  48. <option value="delta">Euclidean (δ)</option>
  49. <option value="manhattan">Manhattan (M)</option>
  50. <option value="ch">Chebyshev (Ч)</option>
  51. <option value="lightnessDiff">Lightness (ℓ)</option>
  52. </select>
  53. <select name="statistic" disabled>
  54. <option value="inertia">Inertia (I)</option>
  55. <option value="variance">Variance (V)</option>
  56. <option value="muNuAngle">Mu-Nu Angle (Φ)</option>
  57. <option value="size">Size (N)</option>
  58. <option value="lightness">Mean Lightness (L)</option>
  59. <option value="chroma">Mean Chroma (C)</option>
  60. <option value="importance">Visual Importance (β)</option>
  61. </select>
  62. <output name="sortMetric" hidden aria-hidden="true"></output>
  63. </fieldset>
  64. </template>
  65. <template id="pkmn-template">
  66. <div class="pkmn">
  67. <img />
  68. <div class="pkmn-name"></div>
  69. <div class="pkmn-total"></div>
  70. <div class="pkmn-score"></div>
  71. <div class="pkmn-cls pkmn-cls1"><span></span><span></span></div>
  72. <div class="pkmn-cls pkmn-cls2"><span></span><span></span></div>
  73. <div class="pkmn-cls pkmn-cls3"><span></span><span></span></div>
  74. <div class="pkmn-cls pkmn-cls4"><span></span><span></span></div>
  75. </div>
  76. </template>
  77. <div class="main-container">
  78. <form
  79. action="javascript:void(0);"
  80. id="sortFunction"
  81. autocomplete="off"
  82. onchange="updateSort()"
  83. >
  84. <div class="fn-group fn-group-outer">
  85. <label class="fn-minmax">
  86. <input type="checkbox" name="sortOrder" role="button" hidden />
  87. <div class="fn-minmax-toggle">
  88. <span>min</span>
  89. <span>max</span>
  90. </div>
  91. </label>
  92. <span class="fn-bracket">[</span>
  93. <div
  94. class="fn-group"
  95. onchange="event.target.parentNode.classList.toggle('fn-part--disabled')"
  96. >
  97. <label class="fn-part">
  98. <input type="checkbox" name="useWholeImage" checked />
  99. <output name="metricSymbolP">α</output>(P)
  100. </label>
  101. <label class="fn-part">
  102. <input type="checkbox" name="totalSize" checked />
  103. |P|
  104. </label>
  105. <label class="fn-part fn-part--disabled">
  106. <input type="checkbox" name="invTotalSize" />
  107. |P|<sup>-1</sup>
  108. </label>
  109. <label class="fn-part">
  110. <input type="checkbox" name="useBestCluster" checked />
  111. <output name="metricSymbolB">α</output>(B)
  112. </label>
  113. <label class="fn-part fn-part--disabled">
  114. <input type="checkbox" name="clusterSize" />
  115. |B|
  116. </label>
  117. <label class="fn-part">
  118. <input type="checkbox" name="invClusterSize" checked />
  119. |B|<sup>-1</sup>
  120. </label>
  121. </div>
  122. <span class="fn-bracket">]</span>
  123. </div>
  124. </form>
  125. <form
  126. action="javascript:void(0);"
  127. id="clusterFunction"
  128. autocomplete="off"
  129. onchange="updateSort()"
  130. >
  131. <div class="fn-group">
  132. <span>where B =&nbsp;</span>
  133. <label class="fn-minmax fn-minmax--wide">
  134. <input type="checkbox" name="sortOrder" role="button" checked hidden />
  135. <div class="fn-minmax-toggle">
  136. <span>argmin</span>
  137. <span>argmax</span>
  138. </div>
  139. </label>
  140. <span class="fn-bracket">[</span>
  141. <div
  142. class="fn-group"
  143. onchange="event.target.parentNode.classList.toggle('fn-part--disabled')"
  144. >
  145. <span class="fn-part fn-part--fixed">
  146. <output name="metricSymbol">β</output>(K)
  147. </span>
  148. <label class="fn-part fn-part--disabled">
  149. <input type="checkbox" name="clusterSize" />
  150. |K|
  151. </label>
  152. <label class="fn-part fn-part--disabled">
  153. <input type="checkbox" name="invClusterSize" />
  154. |K|<sup>-1</sup>
  155. </label>
  156. <label class="fn-part fn-part--disabled">
  157. <input type="checkbox" name="totalSize" />
  158. |P|
  159. </label>
  160. <label class="fn-part fn-part--disabled">
  161. <input type="checkbox" name="invTotalSize" />
  162. |P|<sup>-1</sup>
  163. </label>
  164. </div>
  165. <span class="fn-bracket">]</span>
  166. </div>
  167. </form>
  168. <form action="javascript:void(0);" id="sortMetric">
  169. <!-- Template mount point -->
  170. </form>
  171. <form action="javascript:void(0);" id="clusterMetric">
  172. <!-- Template mount point -->
  173. </form>
  174. <form action="javascript:void(0);" id="colorSelect" autocomplete="off">
  175. <label for="color-input-text">Target Color</label>
  176. <button type="button" onclick="onColorChange(randomColor())">Random Color</button>
  177. <input
  178. id="color-input-text"
  179. name="colorText"
  180. type="text"
  181. maxlength="7"
  182. oninput="onColorChange(event.target.value)"
  183. />
  184. <input
  185. name="colorPicker"
  186. type="color"
  187. onchange="onColorChange(event.target.value)"
  188. />
  189. </form>
  190. <form action="javascript:void(0);" id="sortControl" autocomplete="off">
  191. <div>
  192. <label>
  193. <div>Results:&nbsp;<output name="resultsToDisplayOutput">10</output></div>
  194. <input
  195. name="resultsToDisplay"
  196. type="range"
  197. min="1"
  198. max="100"
  199. value="6"
  200. oninput="
  201. event.target.form.elements.resultsToDisplayOutput.value = event.target.value
  202. "
  203. onchange="showResults()"
  204. />
  205. </label>
  206. </div>
  207. <div>
  208. <label>
  209. <input
  210. type="radio"
  211. onchange="updateSort()"
  212. name="colorSpace"
  213. value="jab"
  214. checked
  215. />
  216. CIECAM
  217. </label>
  218. </div>
  219. <div>
  220. <label>
  221. <input type="radio" onchange="updateSort()" name="colorSpace" value="rgb" />
  222. sRGB
  223. </label>
  224. </div>
  225. </form>
  226. <div id="color-results-label">By Color</div>
  227. <div id="name-results-label">By Name</div>
  228. <div id="color-results"></div>
  229. <div id="name-results"></div>
  230. <div id="prev-colors-container">
  231. <div>Previous Colors</div>
  232. <div id="prev-colors"></div>
  233. </div>
  234. <div id="name-search-container">
  235. <div>Name Search</div>
  236. <button type="button" onclick="randomPokemon()">Random Pokemon</button>
  237. <input
  238. type="text"
  239. autocomplete="off"
  240. id="name-search"
  241. oninput="searchByName(event.target.value)"
  242. />
  243. </div>
  244. </div>
  245. </body>
  246. </html>