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.
 
 

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