parse.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>CSSOM.js parse method</title>
  6. <script>
  7. var exports = {};
  8. function require(){
  9. return exports;
  10. }
  11. </script>
  12. <script src="../lib/CSSStyleDeclaration.js"></script>
  13. <script src="../lib/CSSRule.js"></script>
  14. <script src="../lib/CSSStyleRule.js"></script>
  15. <script src="../lib/CSSImportRule.js"></script>
  16. <script src="../lib/MediaList.js"></script>
  17. <script src="../lib/CSSMediaRule.js"></script>
  18. <script src="../lib/StyleSheet.js"></script>
  19. <script src="../lib/CSSStyleSheet.js"></script>
  20. <script src="../lib/parse.js"></script>
  21. <script>
  22. window.CSSOM = exports;
  23. </script>
  24. <style type="text/css">
  25. html, body {
  26. background: #333;
  27. color: #EEE;
  28. font: 12px sans-serif;
  29. margin: 0;
  30. height: 100%;
  31. }
  32. body {
  33. padding-bottom: 1.7em;
  34. -webkit-box-sizing: border-box;
  35. -moz-box-sizing: border-box;
  36. box-sizing: border-box;
  37. }
  38. table {
  39. width: 100%;
  40. table-layout: fixed;
  41. margin: 0 auto;
  42. }
  43. td {
  44. vertical-align: top;
  45. }
  46. h1 {
  47. font: normal 1em sans-serif;
  48. display: inline;
  49. }
  50. #labels {
  51. color: #FFE992;
  52. width: 66%;
  53. }
  54. #labels td {
  55. width: 50%;
  56. text-align: center;
  57. }
  58. #labels td::before {
  59. content: '↱ ';
  60. color: #998e62;
  61. position: relative;
  62. top: .4em;
  63. }
  64. #labels td::after {
  65. content: ' ↴';
  66. color: #998e62;
  67. position: relative;
  68. top: .4em;
  69. }
  70. #content {
  71. width: 100%;
  72. height: 100%;
  73. }
  74. #content td {
  75. width: 33%;
  76. }
  77. #content td + td {
  78. padding-left: 1%;
  79. }
  80. .style-cell textarea {
  81. width: 99%;
  82. height: 100%;
  83. font: 12px monospace;
  84. white-space: pre-wrap;
  85. }
  86. .serialized-cell {
  87. border-left: 1px solid #363636;
  88. }
  89. #message {
  90. visibility: hidden;
  91. }
  92. .error #message {
  93. visibility: visible;
  94. position: absolute;
  95. top: 0;
  96. left: 34%;
  97. padding: 1em;
  98. background: black;
  99. color: #e34343;
  100. font-size: 24px;
  101. }
  102. </style>
  103. </head>
  104. <body>
  105. <table id="labels">
  106. <tr><td><h1>CSSOM.parse</h1></td><td>.toString</td></tr>
  107. </table>
  108. <table id="content">
  109. <tr>
  110. <td class="style-cell">
  111. <textarea id="style" spellcheck="false" rows="40">img {
  112. border: none
  113. }</textarea></td>
  114. <td class="output-cell"><pre id="output"></pre></td>
  115. <td class="serialized-cell"><pre id="serialized"></pre></td>
  116. </tr>
  117. </table>
  118. <div id="message"></div>
  119. <script defer>
  120. var errors = [];
  121. if (!("__defineGetter__" in {})) {
  122. errors.push("Object.prototype.__defineGetter__ isn’t supported");
  123. }
  124. if (errors.length) {
  125. document.getElementById("message").innerHTML = errors.join("<br>");
  126. document.body.className = "error";
  127. throw errors.join("\n\n");
  128. }
  129. var style = document.getElementById("style");
  130. var output = document.getElementById("output");
  131. var serialized = document.getElementById("serialized");
  132. function outputUpdated(){
  133. var value = style.value;
  134. if (value != style.prevValue) {
  135. var css = CSSOM.parse(value);
  136. output.innerHTML = JSON.stringify(css, null, 2);
  137. serialized.innerHTML = css.toString();
  138. style.prevValue = value;
  139. }
  140. }
  141. function hashChanged(){
  142. var hash = location.hash;
  143. var splitted = hash.split("=");
  144. if (splitted.length < 2) {
  145. return;
  146. }
  147. var name = splitted[0];
  148. var value = splitted[1];
  149. if (name == "#css") {
  150. style.value = decodeURIComponent(value);
  151. outputUpdated();
  152. }
  153. }
  154. hashChanged();
  155. outputUpdated();
  156. window.onhashchange = hashChanged;
  157. style.onkeyup = style.onpaste = function changed(){
  158. outputUpdated();
  159. };
  160. style.onchange = function updateLocation(){
  161. location.hash = "css=" + encodeURIComponent(style.value);
  162. };
  163. </script>
  164. </body>
  165. </html>