index.html 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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="database-v3.js"></script>
  10. <script src="math.js"></script>
  11. <script src="form.js"></script>
  12. </head>
  13. <body>
  14. <noscript>Requires javascript</noscript>
  15. <template id="metric-form-template">
  16. <div>
  17. <label>
  18. <input type="checkbox" name="sortOrder" role="button" hidden />
  19. <output name="sortOrderLabel"></output>
  20. (click to toggle)
  21. </label>
  22. </div>
  23. <div>
  24. <label>
  25. <input type="radio" name="metricKind" value="whole" />
  26. Set Comparison
  27. </label>
  28. </div>
  29. <div>
  30. <label>
  31. <input type="radio" name="metricKind" value="mean" />
  32. Mean Comparison
  33. </label>
  34. </div>
  35. <div>
  36. <label>
  37. <input type="radio" name="metricKind" value="statistic" />
  38. Set Statistics
  39. </label>
  40. </div>
  41. <select name="whole" disabled>
  42. <option value="sigma">RMS Deviation (σ)</option>
  43. <option value="bigTheta">Cosine Difference (Θ)</option>
  44. <option value="alpha">Geometric Difference (α)</option>
  45. </select>
  46. <select name="mean" disabled>
  47. <option value="theta">Angular Difference (θ)</option>
  48. <option value="phi">Hue Azimuth (ϕ)</option>
  49. <option value="delta">Euclidean (δ)</option>
  50. <option value="manhattan">Manhattan (M)</option>
  51. <option value="ch">Chebyshev (Ч)</option>
  52. <option value="lightnessDiff">Lightness (ℓ)</option>
  53. </select>
  54. <select name="statistic" disabled>
  55. <option value="inertia">Inertia (I)</option>
  56. <option value="variance">Variance (V)</option>
  57. <option value="muNuAngle">Mu-Nu Angle (Φ)</option>
  58. <option value="size">Size (N)</option>
  59. <option value="lightness">Mean Lightness (L)</option>
  60. <option value="chroma">Mean Chroma (C)</option>
  61. <option value="importance">Visual Importance (β)</option>
  62. </select>
  63. <output name="sortMetric" hidden aria-hidden="true"></output>
  64. </template>
  65. <template id="scale-form-template">
  66. <div>
  67. <label>
  68. <input type="radio" name="rescaleFactor" value="none" />
  69. None
  70. </label>
  71. </div>
  72. <div>
  73. <label>
  74. <input type="radio" name="rescaleFactor" value="direct" />
  75. Cluster Size
  76. </label>
  77. </div>
  78. <div>
  79. <label>
  80. <input type="radio" name="rescaleFactor" value="inverse" />
  81. Inverse Cluster Size
  82. </label>
  83. </div>
  84. <div>
  85. <label>
  86. <input type="radio" name="rescaleFactor" value="size" />
  87. Image Size
  88. </label>
  89. </div>
  90. <div>
  91. <label>
  92. <input type="radio" name="rescaleFactor" value="inverseSize" />
  93. Inverse Image Size
  94. </label>
  95. </div>
  96. </template>
  97. <template id="pkmn-template">
  98. <div class="pkmn">
  99. <img />
  100. <div class="pkmn-name"></div>
  101. <div class="pkmn-total"></div>
  102. <div class="pkmn-score"></div>
  103. <div class="pkmn-cls pkmn-cls1"><span></span><span></span></div>
  104. <div class="pkmn-cls pkmn-cls2"><span></span><span></span></div>
  105. <div class="pkmn-cls pkmn-cls3"><span></span><span></span></div>
  106. <div class="pkmn-cls pkmn-cls4"><span></span><span></span></div>
  107. </div>
  108. </template>
  109. <form action="javascript:void(0);" id="sortControl" autocomplete="off">
  110. <div>
  111. <label>
  112. <div>Target Color</div>
  113. <input
  114. name="colorText"
  115. type="text"
  116. maxlength="7"
  117. oninput="onColorChange(event.target.value)"
  118. />
  119. </label>
  120. <input
  121. name="colorPicker"
  122. type="color"
  123. onchange="onColorChange(event.target.value)"
  124. />
  125. <button type="button" onclick="onColorChange(randomColor())">Random Color</button>
  126. </div>
  127. <div>
  128. <label>
  129. <div>Results:&nbsp;<output name="resultsToDisplayOutput">10</output></div>
  130. <input
  131. name="resultsToDisplay"
  132. type="range"
  133. min="1"
  134. max="100"
  135. value="10"
  136. oninput="
  137. event.target.form.elements.resultsToDisplayOutput.value = event.target.value
  138. "
  139. onchange="showResults()"
  140. />
  141. </label>
  142. </div>
  143. <fieldset onchange="updateSort()">
  144. <legend>Color Space</legend>
  145. <div>
  146. <label>
  147. <input type="radio" name="colorSpace" value="jab" checked />
  148. CIECAM
  149. </label>
  150. </div>
  151. <div>
  152. <label>
  153. <input type="radio" name="colorSpace" value="rgb" />
  154. sRGB
  155. </label>
  156. </div>
  157. </fieldset>
  158. <fieldset name="metric" onchange="onMetricChange(event.target.form.elements)">
  159. <legend>Distance Metric</legend>
  160. <!-- template mount point -->
  161. </fieldset>
  162. <fieldset name="rescaleSection" onchange="updateSort()">
  163. <legend>Scaled By</legend>
  164. <!-- template mount point -->
  165. </fieldset>
  166. <fieldset
  167. onchange="
  168. const elements = event.target.form.elements;
  169. document.forms.sortControl.elements.rescaleSection.hidden = elements.useClusters.value === 'off';
  170. document.forms.clusterControl.hidden = elements.useClusters.value === 'off';
  171. onMetricChange(elements);
  172. "
  173. >
  174. <legend>Compare With</legend>
  175. <div>
  176. <label>
  177. <input type="radio" name="useClusters" value="off" />
  178. Whole Image
  179. </label>
  180. </div>
  181. <div>
  182. <label>
  183. <input type="radio" name="useClusters" value="on" />
  184. Best Cluster
  185. </label>
  186. </div>
  187. <div>
  188. <label>
  189. <input type="radio" name="useClusters" value="mult" checked />
  190. Best Cluster Times Whole
  191. </label>
  192. </div>
  193. </fieldset>
  194. </form>
  195. <form action="javascript:void(0);" id="clusterControl" autocomplete="off">
  196. <div>Cluster Ranking</div>
  197. <fieldset name="metric" onchange="onMetricChange(event.target.form.elements)">
  198. <legend>Distance Metric</legend>
  199. <!-- template mount point -->
  200. </fieldset>
  201. <fieldset name="rescaleSection" onchange="updateSort()">
  202. <legend>Scaled By</legend>
  203. <!-- template mount point -->
  204. </fieldset>
  205. </form>
  206. <div id="color-results"></div>
  207. <div>
  208. <div>Previous Colors</div>
  209. <div id="prev-colors"></div>
  210. </div>
  211. </body>
  212. </html>