Web based virtual Nixie Tube Clock
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

288 regels
9.2 KiB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <!-- SOURCE: http://cestmir.freeside.sk/projects/dhtml-nixie-display/ -->
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Virtual nixie tube display</title>
  7. <script type="text/javascript" src="nixie.js?1"></script>
  8. <style type="text/css">
  9. html, body, td, th {
  10. font-family: Verdana, Arial, Helvetica, sans-serif;
  11. font-size: 12px;
  12. color: black;
  13. background-color: black;
  14. }
  15. body {
  16. margin: 30px;
  17. }
  18. th {
  19. text-align: left;
  20. vertical-align: top;
  21. font-weight: normal;
  22. font-style: italic;
  23. white-space: nowrap;
  24. }
  25. h1, h2, h3, h4, h5, h6 {
  26. border-bottom: 1px solid #DFDFDF;
  27. color: #660000;
  28. font-weight: normal;
  29. }
  30. h1 {
  31. font-size: 24px;
  32. }
  33. h2 {
  34. font-size: 18px;
  35. margin-top: 1.5em;
  36. }
  37. h3 {
  38. font-size: 16px;
  39. }
  40. h4 {
  41. font-size: 12px;
  42. }
  43. h5 {
  44. font-size: 12px;
  45. font-weight: bold;
  46. }
  47. .note {
  48. font-size: 9px;
  49. }
  50. li {
  51. margin: 0.2em;
  52. }
  53. table.references td {
  54. vertical-align: top;
  55. }
  56. .skin-switch {
  57. display: none;
  58. font-size: 9px;
  59. }
  60. pre {
  61. font-weight: bold;
  62. color: #333333;
  63. }
  64. </style>
  65. </head>
  66. <body>
  67. <div style="text-align: center; display: none">
  68. <div style="position: absolute; right: 3em;"><a href="#" id="ndDate1SkinSwitch" class="skin-switch">skin...</a></div>
  69. <table style="margin: 0 auto;"><tr><td>
  70. <div style="background: black; padding: 5px 20px; ">
  71. <div id="ndDate1" style="">
  72. </div>
  73. </div>
  74. </td></tr></table>
  75. </div>
  76. <div style="text-align: center; margin-top: 4em;">
  77. <div style="position: absolute; right: 3em;"><a href="#" id="ndTime1SkinSwitch" class="skin-switch">skin...</a></div>
  78. <table style="margin: 0 auto;"><tr><td>
  79. <div style="background: white; padding: 5px 20px; border: none;">
  80. <div id="ndTime1" style="">
  81. </div>
  82. </div>
  83. </td></tr></table>
  84. </div>
  85. <div style="text-align: center; display:none;">
  86. <div style="position: absolute; right: 3em;"><a href="#" id="ndCalc1SkinSwitch" class="skin-switch">skin...</a></div>
  87. <table style="margin: 0 auto;"><tr><td>
  88. <div style="background: black; padding: 5px 20px; ">
  89. <div id="ndCalc1" style="">
  90. </div>
  91. </div>
  92. <div style="font-size: 80%; line-height: 150%;">
  93. (just type expressions on keyboard as on any basic electronic calculator)<br />
  94. [q] sqrt &nbsp; [Q] sqr &nbsp; [^] pow &nbsp; [m] +/- &nbsp; [p] PI &nbsp; [Enter] = &nbsp; [Esc] clear
  95. </div>
  96. </td></tr></table>
  97. </div>
  98. <script type="text/javascript">
  99. // *** Simple display ***
  100. nixieDate1 = new NixieDisplay();
  101. nixieDate1.id = 'ndDate1';
  102. nixieDate1.charCount = 8;
  103. nixieDate1.extraGapsWidths[3] = 20;
  104. nixieDate1.extraGapsWidths[5] = 20;
  105. nixieDate1.init();
  106. var d = new Date();
  107. nixieDate1.setText(d.getFullYear().toString() + (d.getMonth() + 1).toString().replace(/^(\d)$/, '0$1') + d.getDate().toString().replace(/^(\d)$/, '0$1'));
  108. // setup skin switching
  109. nixieDate1.__skinId = 0 - 1;
  110. nixieDate1.__skinCount = 3;
  111. nixieDate1.__skinSwitch = function() {
  112. var nd = nixieDate1;
  113. nd.__skinId = (nd.__skinId + 1) % nd.__skinCount;
  114. switch (nd.__skinId) {
  115. case 0:
  116. nd.urlCharsetImage = 'zm1082_l1_09bdm_62x150_8b.png';
  117. nd.charWidth = 62;
  118. nd.charHeight = 150;
  119. nixieDate1.extraGapsWidths[3] = 20;
  120. nixieDate1.extraGapsWidths[5] = 20;
  121. nd.charGapWidth = 0;
  122. document.getElementById(nd.id).parentNode.style.background = "white";
  123. document.getElementById(nd.id).parentNode.style.border = "none";
  124. break;
  125. case 1:
  126. nd.urlCharsetImage = 'zm1080_l1_09bdm_62x150_8b.png';
  127. nd.charWidth = 62;
  128. nd.charHeight = 150;
  129. nixieDate1.extraGapsWidths[3] = 20;
  130. nixieDate1.extraGapsWidths[5] = 20;
  131. nd.charGapWidth = 0;
  132. document.getElementById(nd.id).parentNode.style.background = "white";
  133. document.getElementById(nd.id).parentNode.style.border = "none";
  134. break;
  135. case 2:
  136. nd.urlCharsetImage = 'zm1080_l2_09bdm_45x75_8b.png';
  137. nd.charWidth = 45;
  138. nd.charHeight = 75;
  139. nixieDate1.extraGapsWidths[3] = 20;
  140. nixieDate1.extraGapsWidths[5] = 20;
  141. nd.charGapWidth = 10;
  142. document.getElementById(nd.id).parentNode.style.background = "black";
  143. break;
  144. }
  145. nd.init();
  146. return false;
  147. }
  148. document.getElementById('ndDate1SkinSwitch').onclick = nixieDate1.__skinSwitch; // attach skinswitch event handler
  149. nixieDate1.__skinSwitch(); // assign primary skin
  150. // *** Clock ***
  151. nixieTime1 = new NixieClock(); // create component instance
  152. nixieTime1.id = 'ndTime1'; // assign instance id
  153. nixieTime1.init(); // initialize component (after assigning params)
  154. nixieTime1.run(); // run clock
  155. // setup skin switching
  156. nixieTime1.__skinId = 3 - 1;
  157. nixieTime1.__skinCount = 4;
  158. nixieTime1.__skinSwitch = function() {
  159. var nd = nixieTime1;
  160. nd.__skinId = (nd.__skinId + 1) % nd.__skinCount;
  161. switch (nd.__skinId) {
  162. case 0:
  163. nd.urlCharsetImage = 'zm1082_l1_09bdm_62x150_8b.png';
  164. nd.charWidth = 62;
  165. nd.charHeight = 150;
  166. nd.extraGapsWidths[1] = 15;
  167. nd.extraGapsWidths[3] = 15;
  168. nd.charGapWidth = 0;
  169. document.getElementById(nd.id).parentNode.style.background = "white";
  170. document.getElementById(nd.id).parentNode.style.border = "none";
  171. break;
  172. case 1:
  173. nd.urlCharsetImage = 'zm1080_l1_09bdm_62x150_8b.png';
  174. nd.charWidth = 62;
  175. nd.charHeight = 150;
  176. nd.extraGapsWidths[1] = 15;
  177. nd.extraGapsWidths[3] = 15;
  178. nd.charGapWidth = 0;
  179. document.getElementById(nd.id).parentNode.style.background = "white";
  180. document.getElementById(nd.id).parentNode.style.border = "none";
  181. break;
  182. case 2:
  183. nd.urlCharsetImage = 'zm1080_l2_09bdm_45x75_8b.png';
  184. nd.charWidth = 45;
  185. nd.charHeight = 75;
  186. nd.extraGapsWidths[1] = 12;
  187. nd.extraGapsWidths[3] = 12;
  188. nd.charGapWidth = 10;
  189. document.getElementById(nd.id).parentNode.style.background = "black";
  190. break;
  191. case 3:
  192. nd.urlCharsetImage = 'zm1080_d1_09bdm_62x100_8b.png';
  193. nd.charWidth = 62;
  194. nd.charHeight = 100;
  195. nd.extraGapsWidths[1] = 20;
  196. nd.extraGapsWidths[3] = 20;
  197. nd.charGapWidth = 10;
  198. document.getElementById(nd.id).parentNode.style.background = "black";
  199. break;
  200. }
  201. nd.init();
  202. return false;
  203. }
  204. document.getElementById('ndTime1SkinSwitch').onclick = nixieTime1.__skinSwitch; // attach skinswitch event handler
  205. nixieTime1.__skinSwitch(); // assign primary skin
  206. // *** Calculaor ***
  207. nixieCalc1 = new NixieCalculator(); // create component instance
  208. nixieCalc1.id = 'ndCalc1'; // assign instance id
  209. // assign keyboard event handlers
  210. document.onkeydown = function(e0) { return nixieCalc1.keyDown(e0); };
  211. document.onkeypress = function(e0) { return nixieCalc1.keyPress(e0); };
  212. nixieCalc1.init(); // initialize component (after assigning params)
  213. // setup skin switching
  214. nixieCalc1.display.__skinId = 2 - 1;
  215. nixieCalc1.display.__skinCount = 4;
  216. nixieCalc1.__skinSwitch = function() {
  217. var nd = nixieCalc1.display;
  218. nd.__skinId = (nd.__skinId + 1) % nd.__skinCount;
  219. switch (nd.__skinId) {
  220. case 0:
  221. nd.urlCharsetImage = 'zm1082_l1_09bdm_62x150_8b.png';
  222. nd.charWidth = 62;
  223. nd.charHeight = 150;
  224. nd.charGapWidth = 0;
  225. document.getElementById(nd.id).parentNode.style.background = "white";
  226. document.getElementById(nd.id).parentNode.style.border = "none";
  227. break;
  228. case 1:
  229. nd.urlCharsetImage = 'zm1080_l1_09bdm_62x150_8b.png';
  230. nd.charWidth = 62;
  231. nd.charHeight = 150;
  232. nd.charGapWidth = 0;
  233. document.getElementById(nd.id).parentNode.style.background = "white";
  234. document.getElementById(nd.id).parentNode.style.border = "none";
  235. break;
  236. case 2:
  237. nd.urlCharsetImage = 'zm1080_l2_09bdm_45x75_8b.png';
  238. nd.charWidth = 45;
  239. nd.charHeight = 75;
  240. nd.charGapWidth = 10;
  241. document.getElementById(nd.id).parentNode.style.background = "black";
  242. document.getElementById(nd.id).parentNode.style.border = "2px solid #AAAAAA";
  243. break;
  244. case 3:
  245. nd.urlCharsetImage = 'zm1080_d1_09bdm_46x75_8b.png';
  246. nd.charWidth = 46;
  247. nd.charHeight = 75;
  248. nd.charGapWidth = 10;
  249. document.getElementById(nd.id).parentNode.style.background = "black";
  250. document.getElementById(nd.id).parentNode.style.border = "2px solid #AAAAAA";
  251. break;
  252. }
  253. nd.init();
  254. return false;
  255. }
  256. document.getElementById('ndCalc1SkinSwitch').onclick = nixieCalc1.__skinSwitch; // attach skinswitch event handler
  257. nixieCalc1.__skinSwitch(); // assign primary skin
  258. </script>
  259. </body>
  260. </html>