Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Basically an initial commit, Imported all my JS libs, started playing…

… with jquery.couch
  • Loading branch information...
commit 72dedcafb338832c6225b030818c91038a3a6a8f 1 parent 7f1290f
@quirkey authored
Showing with 17,373 additions and 15 deletions.
  1. +2 −1  .gitignore
  2. +20 −12 _attachments/index.html
  3. +42 −0 _attachments/javascripts/app.js
  4. +205 −0 _attachments/javascripts/jquery.easing.js
  5. +860 −0 _attachments/javascripts/sammy.js
  6. +5 −0 _attachments/javascripts/sammy.min.js
  7. +25 −0 _attachments/javascripts/shjs/README.txt
  8. +1 −0  _attachments/javascripts/shjs/VERSION.txt
  9. +151 −0 _attachments/javascripts/shjs/css/sh_acid.css
  10. +1 −0  _attachments/javascripts/shjs/css/sh_acid.min.css
  11. +151 −0 _attachments/javascripts/shjs/css/sh_berries-dark.css
  12. +1 −0  _attachments/javascripts/shjs/css/sh_berries-dark.min.css
  13. +151 −0 _attachments/javascripts/shjs/css/sh_berries-light.css
  14. +1 −0  _attachments/javascripts/shjs/css/sh_berries-light.min.css
  15. +151 −0 _attachments/javascripts/shjs/css/sh_bipolar.css
  16. +1 −0  _attachments/javascripts/shjs/css/sh_bipolar.min.css
  17. +151 −0 _attachments/javascripts/shjs/css/sh_blacknblue.css
  18. +1 −0  _attachments/javascripts/shjs/css/sh_blacknblue.min.css
  19. +151 −0 _attachments/javascripts/shjs/css/sh_bright.css
  20. +1 −0  _attachments/javascripts/shjs/css/sh_bright.min.css
  21. +151 −0 _attachments/javascripts/shjs/css/sh_contrast.css
  22. +1 −0  _attachments/javascripts/shjs/css/sh_contrast.min.css
  23. +151 −0 _attachments/javascripts/shjs/css/sh_darkblue.css
  24. +1 −0  _attachments/javascripts/shjs/css/sh_darkblue.min.css
  25. +151 −0 _attachments/javascripts/shjs/css/sh_darkness.css
  26. +1 −0  _attachments/javascripts/shjs/css/sh_darkness.min.css
  27. +151 −0 _attachments/javascripts/shjs/css/sh_desert.css
  28. +1 −0  _attachments/javascripts/shjs/css/sh_desert.min.css
  29. +151 −0 _attachments/javascripts/shjs/css/sh_dull.css
  30. +1 −0  _attachments/javascripts/shjs/css/sh_dull.min.css
  31. +151 −0 _attachments/javascripts/shjs/css/sh_easter.css
  32. +1 −0  _attachments/javascripts/shjs/css/sh_easter.min.css
  33. +139 −0 _attachments/javascripts/shjs/css/sh_emacs.css
  34. +1 −0  _attachments/javascripts/shjs/css/sh_emacs.min.css
  35. +151 −0 _attachments/javascripts/shjs/css/sh_golden.css
  36. +1 −0  _attachments/javascripts/shjs/css/sh_golden.min.css
  37. +151 −0 _attachments/javascripts/shjs/css/sh_greenlcd.css
  38. +1 −0  _attachments/javascripts/shjs/css/sh_greenlcd.min.css
  39. +139 −0 _attachments/javascripts/shjs/css/sh_ide-anjuta.css
  40. +1 −0  _attachments/javascripts/shjs/css/sh_ide-anjuta.min.css
  41. +139 −0 _attachments/javascripts/shjs/css/sh_ide-codewarrior.css
  42. +1 −0  _attachments/javascripts/shjs/css/sh_ide-codewarrior.min.css
  43. +139 −0 _attachments/javascripts/shjs/css/sh_ide-devcpp.css
  44. +1 −0  _attachments/javascripts/shjs/css/sh_ide-devcpp.min.css
  45. +139 −0 _attachments/javascripts/shjs/css/sh_ide-eclipse.css
  46. +1 −0  _attachments/javascripts/shjs/css/sh_ide-eclipse.min.css
  47. +139 −0 _attachments/javascripts/shjs/css/sh_ide-kdev.css
  48. +1 −0  _attachments/javascripts/shjs/css/sh_ide-kdev.min.css
  49. +139 −0 _attachments/javascripts/shjs/css/sh_ide-msvcpp.css
  50. +1 −0  _attachments/javascripts/shjs/css/sh_ide-msvcpp.min.css
  51. +139 −0 _attachments/javascripts/shjs/css/sh_kwrite.css
  52. +1 −0  _attachments/javascripts/shjs/css/sh_kwrite.min.css
  53. +127 −0 _attachments/javascripts/shjs/css/sh_matlab.css
  54. +1 −0  _attachments/javascripts/shjs/css/sh_matlab.min.css
  55. +151 −0 _attachments/javascripts/shjs/css/sh_navy.css
  56. +1 −0  _attachments/javascripts/shjs/css/sh_navy.min.css
  57. +151 −0 _attachments/javascripts/shjs/css/sh_nedit.css
  58. +1 −0  _attachments/javascripts/shjs/css/sh_nedit.min.css
  59. +151 −0 _attachments/javascripts/shjs/css/sh_neon.css
  60. +1 −0  _attachments/javascripts/shjs/css/sh_neon.min.css
  61. +151 −0 _attachments/javascripts/shjs/css/sh_night.css
  62. +1 −0  _attachments/javascripts/shjs/css/sh_night.min.css
  63. +151 −0 _attachments/javascripts/shjs/css/sh_pablo.css
  64. +1 −0  _attachments/javascripts/shjs/css/sh_pablo.min.css
  65. +139 −0 _attachments/javascripts/shjs/css/sh_peachpuff.css
  66. +1 −0  _attachments/javascripts/shjs/css/sh_peachpuff.min.css
  67. +145 −0 _attachments/javascripts/shjs/css/sh_print.css
  68. +1 −0  _attachments/javascripts/shjs/css/sh_print.min.css
  69. +151 −0 _attachments/javascripts/shjs/css/sh_rand01.css
  70. +1 −0  _attachments/javascripts/shjs/css/sh_rand01.min.css
  71. +139 −0 _attachments/javascripts/shjs/css/sh_the.css
  72. +1 −0  _attachments/javascripts/shjs/css/sh_the.min.css
  73. +151 −0 _attachments/javascripts/shjs/css/sh_typical.css
  74. +1 −0  _attachments/javascripts/shjs/css/sh_typical.min.css
  75. +151 −0 _attachments/javascripts/shjs/css/sh_vampire.css
  76. +1 −0  _attachments/javascripts/shjs/css/sh_vampire.min.css
  77. +139 −0 _attachments/javascripts/shjs/css/sh_vim-dark.css
  78. +1 −0  _attachments/javascripts/shjs/css/sh_vim-dark.min.css
  79. +139 −0 _attachments/javascripts/shjs/css/sh_vim.css
  80. +1 −0  _attachments/javascripts/shjs/css/sh_vim.min.css
  81. +151 −0 _attachments/javascripts/shjs/css/sh_whatis.css
  82. +1 −0  _attachments/javascripts/shjs/css/sh_whatis.min.css
  83. +139 −0 _attachments/javascripts/shjs/css/sh_whitengrey.css
  84. +1 −0  _attachments/javascripts/shjs/css/sh_whitengrey.min.css
  85. +139 −0 _attachments/javascripts/shjs/css/sh_zellner.css
  86. +1 −0  _attachments/javascripts/shjs/css/sh_zellner.min.css
  87. BIN  _attachments/javascripts/shjs/favicon.ico
  88. +674 −0 _attachments/javascripts/shjs/gpl.txt
  89. +787 −0 _attachments/javascripts/shjs/lang/sh_bison.js
  90. +1 −0  _attachments/javascripts/shjs/lang/sh_bison.min.js
  91. +409 −0 _attachments/javascripts/shjs/lang/sh_c.js
  92. +1 −0  _attachments/javascripts/shjs/lang/sh_c.min.js
  93. +76 −0 _attachments/javascripts/shjs/lang/sh_caml.js
  94. +1 −0  _attachments/javascripts/shjs/lang/sh_caml.min.js
  95. +40 −0 _attachments/javascripts/shjs/lang/sh_changelog.js
  96. +1 −0  _attachments/javascripts/shjs/lang/sh_changelog.min.js
  97. +419 −0 _attachments/javascripts/shjs/lang/sh_cpp.js
  98. +1 −0  _attachments/javascripts/shjs/lang/sh_cpp.min.js
  99. +424 −0 _attachments/javascripts/shjs/lang/sh_csharp.js
  100. +1 −0  _attachments/javascripts/shjs/lang/sh_csharp.min.js
  101. +316 −0 _attachments/javascripts/shjs/lang/sh_css.js
  102. +1 −0  _attachments/javascripts/shjs/lang/sh_css.min.js
  103. +29 −0 _attachments/javascripts/shjs/lang/sh_desktop.js
  104. +1 −0  _attachments/javascripts/shjs/lang/sh_desktop.min.js
  105. +122 −0 _attachments/javascripts/shjs/lang/sh_diff.js
  106. +1 −0  _attachments/javascripts/shjs/lang/sh_diff.min.js
  107. +787 −0 _attachments/javascripts/shjs/lang/sh_flex.js
  108. +1 −0  _attachments/javascripts/shjs/lang/sh_flex.min.js
  109. +409 −0 _attachments/javascripts/shjs/lang/sh_glsl.js
  110. +1 −0  _attachments/javascripts/shjs/lang/sh_glsl.min.js
  111. +337 −0 _attachments/javascripts/shjs/lang/sh_haxe.js
  112. +1 −0  _attachments/javascripts/shjs/lang/sh_haxe.min.js
  113. +126 −0 _attachments/javascripts/shjs/lang/sh_html.js
  114. +1 −0  _attachments/javascripts/shjs/lang/sh_html.min.js
  115. +337 −0 _attachments/javascripts/shjs/lang/sh_java.js
  116. +1 −0  _attachments/javascripts/shjs/lang/sh_java.min.js
  117. +347 −0 _attachments/javascripts/shjs/lang/sh_javascript.js
  118. +1 −0  _attachments/javascripts/shjs/lang/sh_javascript.min.js
  119. +357 −0 _attachments/javascripts/shjs/lang/sh_javascript_dom.js
  120. +1 −0  _attachments/javascripts/shjs/lang/sh_javascript_dom.min.js
  121. +364 −0 _attachments/javascripts/shjs/lang/sh_latex.js
  122. +1 −0  _attachments/javascripts/shjs/lang/sh_latex.min.js
  123. +29 −0 _attachments/javascripts/shjs/lang/sh_ldap.js
  124. +1 −0  _attachments/javascripts/shjs/lang/sh_ldap.min.js
  125. +231 −0 _attachments/javascripts/shjs/lang/sh_log.js
  126. +1 −0  _attachments/javascripts/shjs/lang/sh_log.min.js
  127. +22 −0 _attachments/javascripts/shjs/lang/sh_lsm.js
  128. +1 −0  _attachments/javascripts/shjs/lang/sh_lsm.min.js
  129. +198 −0 _attachments/javascripts/shjs/lang/sh_m4.js
  130. +1 −0  _attachments/javascripts/shjs/lang/sh_m4.min.js
  131. +118 −0 _attachments/javascripts/shjs/lang/sh_makefile.js
  132. +1 −0  _attachments/javascripts/shjs/lang/sh_makefile.min.js
  133. +339 −0 _attachments/javascripts/shjs/lang/sh_oracle.js
  134. +1 −0  _attachments/javascripts/shjs/lang/sh_oracle.min.js
  135. +110 −0 _attachments/javascripts/shjs/lang/sh_pascal.js
  136. +1 −0  _attachments/javascripts/shjs/lang/sh_pascal.min.js
  137. +419 −0 _attachments/javascripts/shjs/lang/sh_perl.js
  138. +1 −0  _attachments/javascripts/shjs/lang/sh_perl.min.js
  139. +325 −0 _attachments/javascripts/shjs/lang/sh_php.js
  140. +1 −0  _attachments/javascripts/shjs/lang/sh_php.min.js
  141. +120 −0 _attachments/javascripts/shjs/lang/sh_prolog.js
  142. +1 −0  _attachments/javascripts/shjs/lang/sh_prolog.min.js
  143. +29 −0 _attachments/javascripts/shjs/lang/sh_properties.js
  144. +1 −0  _attachments/javascripts/shjs/lang/sh_properties.min.js
  145. +141 −0 _attachments/javascripts/shjs/lang/sh_python.js
  146. +1 −0  _attachments/javascripts/shjs/lang/sh_python.min.js
  147. +142 −0 _attachments/javascripts/shjs/lang/sh_ruby.js
  148. +1 −0  _attachments/javascripts/shjs/lang/sh_ruby.min.js
  149. +332 −0 _attachments/javascripts/shjs/lang/sh_scala.js
  150. +1 −0  _attachments/javascripts/shjs/lang/sh_scala.min.js
  151. +93 −0 _attachments/javascripts/shjs/lang/sh_sh.js
  152. +1 −0  _attachments/javascripts/shjs/lang/sh_sh.min.js
  153. +93 −0 _attachments/javascripts/shjs/lang/sh_slang.js
  154. +1 −0  _attachments/javascripts/shjs/lang/sh_slang.min.js
  155. +76 −0 _attachments/javascripts/shjs/lang/sh_sml.js
  156. +1 −0  _attachments/javascripts/shjs/lang/sh_sml.min.js
  157. +44 −0 _attachments/javascripts/shjs/lang/sh_spec.js
  158. +1 −0  _attachments/javascripts/shjs/lang/sh_spec.min.js
  159. +339 −0 _attachments/javascripts/shjs/lang/sh_sql.js
  160. +1 −0  _attachments/javascripts/shjs/lang/sh_sql.min.js
  161. +78 −0 _attachments/javascripts/shjs/lang/sh_tcl.js
  162. +1 −0  _attachments/javascripts/shjs/lang/sh_tcl.min.js
  163. +115 −0 _attachments/javascripts/shjs/lang/sh_xml.js
  164. +1 −0  _attachments/javascripts/shjs/lang/sh_xml.min.js
  165. +68 −0 _attachments/javascripts/shjs/lang/sh_xorg.js
  166. +1 −0  _attachments/javascripts/shjs/lang/sh_xorg.min.js
  167. +538 −0 _attachments/javascripts/shjs/sh_main.js
  168. +4 −0 _attachments/javascripts/shjs/sh_main.min.js
  169. +66 −0 _attachments/javascripts/shjs/sh_style.css
  170. +1 −0  _attachments/javascripts/shjs/sh_style.min.css
  171. +12 −0 _attachments/templates/index.html.erb
  172. +2 −2 couchapp.json
View
3  .gitignore
@@ -1 +1,2 @@
-.couchapprc
+.couchapprc
+.DS_Store
View
32 _attachments/index.html 100755 → 100644
@@ -1,14 +1,22 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
- <head>
- <title>Generated CouchApp</title>
- <link rel="stylesheet" href="style/main.css" type="text/css">
- </head>
- <body>
- <h1>Generated CouchApp</h1>
- <p>This is a placeholder page</p>
- </body>
- <script src="/_utils/script/json2.js"></script>
- <script src="/_utils/script/jquery.js?1.3.1"></script>
- <script src="/_utils/script/jquery.couch.js?0.9.0"></script>
+<head>
+ <title>swinger</title>
+ <link rel="stylesheet" href="stylesheets/swinger.css" type="text/css" media="screen" charset="utf-8"/>
+
+ <script src="/_utils/script/json2.js" type="text/javascript" charset="utf-8"></script>
+ <script src="/_utils/script/jquery.js?1.3.1" type="text/javascript" charset="utf-8"></script>
+ <script src="/_utils/script/jquery.couch.js?0.9.0" type="text/javascript" charset="utf-8"></script>
+ <script src="vendor/couchapp/jquery.couchapp.js" type="text/javascript" charset="utf-8"></script>
+ <script src="javascripts/jquery.easing.js" type="text/javascript" charset="utf-8"></script>
+ <script src="javascripts/sammy.js" type="text/javascript" charset="utf-8"></script>
+ <script src="javascripts/app.js" type="text/javascript" charset="utf-8"></script>
+
+</head>
+<body>
+ <div id="container">
+
+ </div>
+</body>
</html>
View
42 _attachments/javascripts/app.js
@@ -0,0 +1,42 @@
+;(function($) {
+
+ var dbname = window.location.pathname.split('/')[1];
+ var db = $.couch.db(dbname);
+
+ Presentation = function(doc) {
+ var default_doc = {
+ name: "",
+ slides: [],
+ type: "presentation"
+ };
+ this.database = db;
+ this.attributes = $.extend(default_doc, doc);
+ }
+
+ $.extend(Presentation.prototype, {
+ save: function(callback) {
+ this.database.saveDoc(this.attributes, {
+ success: function(resp) {
+ console.log('save success', resp);
+ $.extend(this.attributes, resp);
+ callback.apply(this, [resp]);
+ }
+ });
+ }
+ });
+
+ var app = $.sammy(function() {
+ this.debug = true;
+ this.element_selector = '#container';
+
+ this.get('#/', function() {
+ this.partial('templates/index.html.erb');
+ });
+
+ });
+
+ $(function() {
+ app.run('#/');
+ });
+
+})(jQuery);
View
205 _attachments/javascripts/jquery.easing.js
@@ -0,0 +1,205 @@
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright © 2008 George McGinley Smith
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+jQuery.easing['jswing'] = jQuery.easing['swing'];
+
+jQuery.extend( jQuery.easing,
+{
+ def: 'easeOutQuad',
+ swing: function (x, t, b, c, d) {
+ //alert(jQuery.easing.default);
+ return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
+ },
+ easeInQuad: function (x, t, b, c, d) {
+ return c*(t/=d)*t + b;
+ },
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ },
+ easeInOutQuad: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+ },
+ easeInCubic: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t + b;
+ },
+ easeOutCubic: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t + 1) + b;
+ },
+ easeInOutCubic: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
+ return c/2*((t-=2)*t*t + 2) + b;
+ },
+ easeInQuart: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t + b;
+ },
+ easeOutQuart: function (x, t, b, c, d) {
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
+ },
+ easeInOutQuart: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
+ },
+ easeInQuint: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t*t + b;
+ },
+ easeOutQuint: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
+ },
+ easeInOutQuint: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
+ },
+ easeInSine: function (x, t, b, c, d) {
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+ },
+ easeOutSine: function (x, t, b, c, d) {
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
+ },
+ easeInOutSine: function (x, t, b, c, d) {
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+ },
+ easeInExpo: function (x, t, b, c, d) {
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+ },
+ easeOutExpo: function (x, t, b, c, d) {
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+ },
+ easeInOutExpo: function (x, t, b, c, d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+ },
+ easeInCirc: function (x, t, b, c, d) {
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+ },
+ easeOutCirc: function (x, t, b, c, d) {
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+ },
+ easeInOutCirc: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+ },
+ easeInElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ },
+ easeOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+ },
+ easeInOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+ },
+ easeInBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*(t/=d)*t*((s+1)*t - s) + b;
+ },
+ easeOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+ },
+ easeInOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+ },
+ easeInBounce: function (x, t, b, c, d) {
+ return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+ },
+ easeOutBounce: function (x, t, b, c, d) {
+ if ((t/=d) < (1/2.75)) {
+ return c*(7.5625*t*t) + b;
+ } else if (t < (2/2.75)) {
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+ } else if (t < (2.5/2.75)) {
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+ } else {
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+ }
+ },
+ easeInOutBounce: function (x, t, b, c, d) {
+ if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+ return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+ }
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright © 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
View
860 _attachments/javascripts/sammy.js
@@ -0,0 +1,860 @@
+// jresig's Class implementation
+(function(){
+ var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
+ this.Class = function(){};
+ Class.extend = function(prop) {
+ var _super = this.prototype;
+ initializing = true;
+ var prototype = new this();
+ initializing = false;
+ for (var name in prop) {
+ prototype[name] = typeof prop[name] == "function" &&
+ typeof _super[name] == "function" && fnTest.test(prop[name]) ?
+ (function(name, fn){
+ return function() {
+ var tmp = this._super;
+ this._super = _super[name];
+ var ret = fn.apply(this, arguments);
+ this._super = tmp;
+ return ret;
+ };
+ })(name, prop[name]) :
+ prop[name];
+ }
+ function Class() {
+ if ( !initializing && this.init )
+ this.init.apply(this, arguments);
+ }
+ Class.prototype = prototype;
+ Class.constructor = Class;
+ Class.extend = arguments.callee;
+ return Class;
+ };
+})();
+
+(function($) {
+ // Simple JavaScript Templating
+ // John Resig - http://ejohn.org/ - MIT Licensed
+ // adapted from: http://ejohn.org/blog/javascript-micro-templating/
+ // by Greg Borenstein http://ideasfordozens.com in Feb 2009
+ // --
+ // slightly modified for Sammy for caching templates by name
+ $.srender = function(name, template, data) {
+ $.srender.cache = $.srender.cache || {};
+ // target is an optional element; if provided, the result will be inserted into it
+ // otherwise the result will simply be returned to the caller
+ if ($.srender.cache[name]) {
+ fn = $.srender.cache[name];
+ } else {
+ if (typeof template == 'undefined') {
+ // was a cache check, return false
+ return false;
+ }
+ // Generate a reusable function that will serve as a template
+ // generator (and which will be cached).
+ fn = $.srender.cache[name] = new Function("obj",
+ "var p=[],print=function(){p.push.apply(p,arguments);};" +
+
+ // Introduce the data as local variables using with(){}
+ "with(obj){p.push(\"" +
+
+ // Convert the template into pure JavaScript
+ template
+ .replace(/[\r\t\n]/g, " ")
+ .replace(/\"/g, '\\"')
+ .split("<%").join("\t")
+ .replace(/((^|%>)[^\t]*)/g, "$1\r")
+ .replace(/\t=(.*?)%>/g, "\",$1,\"")
+ .split("\t").join("\");")
+ .split("%>").join("p.push(\"")
+ .split("\r").join("")
+ + "\");}return p.join('');");
+ }
+
+ if (typeof data != 'undefined') {
+ return fn(data);
+ } else {
+ return fn;
+ }
+ }
+})(jQuery);
+
+(function($) {
+
+ var PATH_REPLACER = "([^\/]+)";
+ var PATH_NAME_MATCHER = /:([\w\d]+)/g;
+ var QUERY_STRING_MATCHER = /\?([^#]*)$/;
+
+ Sammy = {};
+
+ Sammy.VERSION = '0.2.1';
+
+ // == Sammy.Object
+ //
+ // Sammy.Object is the base for all other Sammy classes. It provides some useful
+ // functionality, including cloning, iterating, etc.
+ Sammy.Object = Class.extend({
+
+ // Extend the passed object as a Sammy.Object
+ init: function(set) {
+ $.extend(this, set);
+ },
+
+ // If passed an obj, clone the attributes and methods of that object
+ // If called without arguments, clones the callee.
+ clone: function(obj) {
+ if (typeof obj == 'undefined') obj = this;
+ return $.extend({}, obj);
+ },
+
+ // Returns a copy of the object with Functions removed.
+ toHash: function() {
+ var json = {};
+ this.each(function(k,v) {
+ if (!$.isFunction(v)) {
+ json[k] = v
+ }
+ });
+ return json;
+ },
+
+ // Renders a simple HTML version of this Objects attributes.
+ // Does not render functions.
+ // For example. Given this Sammy.Object:
+ //
+ // var s = new Sammy.Object({first_name: 'Sammy', last_name: 'Davis Jr.'});
+ // s.toHTML() //=> '<strong>first_name</strong> Sammy<br /><strong>last_name</strong> Davis Jr.<br />'
+ //
+ toHTML: function() {
+ var display = "";
+ this.each(function(k, v) {
+ if (!$.isFunction(v)) {
+ display += "<strong>" + k + "</strong> " + v + "<br />";
+ }
+ });
+ return display;
+ },
+
+ // Generates a unique identifing string. Used for application namespaceing.
+ uuid: function() {
+ if (typeof this._uuid == 'undefined' || !this._uuid) {
+ this._uuid = (new Date()).getTime() + '-' + parseInt(Math.random() * 1000);
+ }
+ return this._uuid;
+ },
+
+ // If passed an object and a callback, will iterate over the object
+ // with (k, v) in the context of this object.
+ // If passed just an argument - will itterate over
+ // the properties of this Sammy.Object
+ each: function() {
+ var context, object, callback, bound_callback;
+ context = this;
+ if (typeof arguments[0] != 'function') {
+ object = arguments[0];
+ callback = arguments[1];
+ } else {
+ object = this;
+ callback = arguments[0];
+ }
+ bound_callback = function() {
+ return callback.apply(context, arguments);
+ }
+ $.each(object, bound_callback);
+ },
+
+ // Uses console.log to log the arguments. If console (firebug is not present),
+ // it logs to the ether.
+ // Also prefixes the arguments with a timestamp.
+ log: function() {
+ var args = [].slice.call(arguments);
+ args.unshift("[" + Date() + "]");
+ if (typeof window.console != 'undefined') {
+ window.console.log.apply(window.console, args);
+ } else if (typeof console != 'undefined') {
+ console.log.apply(this, args);
+ } else {
+ // do nothing
+ }
+ }
+ });
+
+ // == Sammy.Application
+ //
+ // Sammy.Application is the Base prototype for defining 'applications'.
+ // An 'application' is a collection of 'routes' and bound events that is
+ // attached to an element when <tt>run()</tt> is called.
+ //
+ Sammy.Application = Sammy.Object.extend({
+
+ // the four route verbs
+ ROUTE_VERBS: ['get','post','put','delete'],
+
+ // An array of the default events triggered by the
+ // application during its lifecycle
+ APP_EVENTS: ['run','unload','lookup-route','run-route','route-found','event-context-before','event-context-after','changed','error-404','check-form-submission','redirect'],
+
+ _last_route: null,
+ _running: false,
+
+ // On <tt>run()</tt> the application object is stored in a <tt>$.data</tt> entry
+ // assocciated with the application's <tt>$element()</tt>
+ data_store_name: 'sammy-app',
+
+ // Defines what element the application is bound to. Provide a selector
+ // (parseable by <tt>jQuery()</tt>) and this will be used by <tt>$element()</tt>
+ element_selector: 'body',
+
+ // When set to true, logs all of the default events using <tt>log()</tt>
+ debug: false,
+
+ // When set to false, will throw a javascript error when a route is invoked
+ // and can not be found.
+ silence_404: true,
+
+ // The time in milliseconds that the URL is queried for changes
+ run_interval_every: 50,
+
+ // Initializes a new Sammy.Application.
+ // The only argument an 'app_function' is evaluated within the context of the application.
+ init: function(app_function) {
+ var app = this;
+ this.routes = {};
+ this.listeners = {};
+ this.befores = [];
+ this.namespace = this.uuid();
+ this.context_prototype = Sammy.EventContext.extend({});
+ this.each(this.ROUTE_VERBS, function(i, verb) {
+ this._defineRouteShortcut(verb);
+ });
+ app_function.apply(this);
+ if (this.debug) {
+ this.addLogger(function(e, data) {
+ app.log(app.toString(), e.cleaned_type, data || {});
+ })
+ }
+ },
+
+ // //=> Sammy.Application: body
+ toString: function() {
+ return 'Sammy.Application:' + this.element_selector;
+ },
+
+ // returns a jQuery object of the Applications bound element.
+ $element: function() {
+ return $(this.element_selector);
+ },
+
+ // <tt>route()</tt> is the main method for defining routes within an application.
+ // For great detail on routes, check out: http://code.quirkey.com/sammy/doc/routes.html
+ //
+ // This method also has aliases for each of the different verbs (eg. <tt>get()</tt>, <tt>post()</tt>, etc.)
+ //
+ // === Arguments
+ //
+ // +verb+:: A String in the set of ROUTE_VERBS
+ // +path+:: A Regexp or a String representing the path to match to invoke this verb.
+ // +callback+:: A Function that is called/evaluated whent the route is run see: <tt>runRoute()</tt>
+ //
+ route: function(verb, path, callback) {
+ // turn path into regex
+ // create a simple object and add the route to it
+ var app = this;
+ var param_names = [];
+ // if path is a string turn it into a regex
+ if (path.constructor == String) {
+ // find the names
+ while ((path_match = PATH_NAME_MATCHER.exec(path)) != null) {
+ param_names.push(path_match[1]);
+ }
+ // replace with the path replacement
+ path = new RegExp(path.replace(PATH_NAME_MATCHER, PATH_REPLACER) + "$");
+ }
+ var r = {verb: verb, path: path, callback: callback, param_names: param_names};
+ // add route to routes array
+ if (typeof this.routes[verb] == 'undefined' || this.routes[verb].length == 0) {
+ // add to the front of an empty array
+ this.routes[verb] = [r];
+ } else {
+ // place in order of longest path first
+ var placed = false;
+ this.each(this.routes[verb], function(i, route) {
+ if (path.toString().length >= route.path.toString().length) {
+ this.routes[verb].splice(i, 0, r);
+ placed = true;
+ // exit each()
+ return false;
+ }
+ });
+ // not placed? path is the shortest seen so far. append to the end
+ if (!placed) {
+ this.routes[verb].push(r);
+ }
+ }
+ // return the route
+ return r;
+ },
+
+ // A unique event namespace defined per application.
+ // All events bound with <tt>bind()</tt> are automatically bound within this space.
+ eventNamespace: function() {
+ return this.data_store_name + '-' + this.namespace + '-';
+ },
+
+ // Works just like <tt>jQuery.bind()</tt> with a couple noteable differences.
+ //
+ // * It binds all events to the application element
+ // * All events are bound within the <tt>eventNamespace()</tt>
+ // * Events are not actually bound until the application is started with <tt>run()</tt>
+ //
+ // See http://code.quirkey.com/sammy/docs/events.html for more info.
+ //
+ bind: function(name, data, callback) {
+ // build the callback
+ // if the arity is 2, callback is the second argument
+ if (typeof callback == 'undefined') callback = data;
+ var listener_callback = function() {
+ // pull off the context from the arguments to the callback
+ var e, context, data;
+ e = arguments[0];
+ context = arguments[1];
+ data = arguments[2];
+ e.cleaned_type = e.type.replace(context.eventNamespace(), '');
+ callback.apply(context, [e, data]);
+ };
+
+ // it could be that the app element doesnt exist yet
+ // so attach to the listeners array and then run()
+ // will actually bind the event.
+ if (!this.listeners[name]) this.listeners[name] = [];
+ this.listeners[name].push(listener_callback);
+ if (this.isRunning()) {
+ // if the app is running
+ // *actually* bind the event to the app element
+ return this._listen(name, listener_callback);
+ }
+ },
+
+ // Triggers custom events defined with <tt>bind()</tt>
+ //
+ // === Arguments
+ //
+ // +name+:: The name of the event. Automatically prefixed with the <tt>eventNamespace()</tt>
+ // +data+:: An optional Object that can be passed to the bound callback.
+ // +context+:: An optional context/Object in which to execute the bound callback.
+ // If no context is supplied a the context is a new <tt>Sammy.EventContext</tt>
+ //
+ trigger: function(name, data, context) {
+ if (typeof context == 'undefined') {
+ context = new this.context_prototype(this, 'bind', name, data);
+ }
+ return this.$element().triggerHandler(context.eventNamespace() + name, [context, data]);
+ },
+
+ // Takes a single callback that is pushed on to a stack.
+ // Before any route is run, the callbacks are evaluated in order within
+ // the current <tt>Sammy.EventContext</tt>
+ //
+ // If any of the callbacks explicitly return false, execution of any
+ // further callbacks and the route itself is halted.
+ before: function(callback) {
+ return this.befores.push(callback);
+ },
+
+ // A shortcut for binding a callback to be run after a route is executed.
+ // After callbacks have no guarunteed order.
+ after: function(callback) {
+ return this.bind('event-context-after', callback);
+ },
+
+ // Returns a boolean of weather the current application is running.
+ isRunning: function() {
+ return this._running;
+ },
+
+ // Helpers extends the EventContext prototype specific to this app.
+ // This allows you to define app specific helper functions that can be used
+ // whenever you're inside of an event context (templates, routes, bind).
+ //
+ // === Example
+ //
+ // var app = $.sammy(function() {
+ //
+ // helpers({
+ // upcase: function(text) {
+ // return text.toString().toUpperCase();
+ // }
+ // });
+ //
+ // get('#/', function() { with(this) {
+ // // inside of this context I can use the helpers
+ // $('#main').html(upcase($('#main').text());
+ // }});
+ //
+ // });
+ //
+ // === Arguments
+ //
+ // +extensions+:: An object collection of functions to extend the context.
+ //
+ helpers: function(extensions) {
+ this.context_prototype = this.context_prototype.extend(extensions);
+ },
+
+ // Actually starts the application's lifecycle. <tt>run()</tt> should be invoked
+ // within a document.ready block to ensure the DOM exists before binding events, etc.
+ //
+ // === Example
+ //
+ // var app = $.sammy(function() { ... }); // your application
+ // $(function() { // document.ready
+ // app.run();
+ // });
+ //
+ // === Arguments
+ //
+ // +start_url+:: "value", Optionally, a String can be passed which the App will redirect to
+ // after the events/routes have been bound.
+ run: function(start_url) {
+ if (this.isRunning()) return false;
+ var app = this;
+
+ // actually bind all the listeners
+ this.each(this.listeners, function(name, listeners) {
+ this.each(listeners, function(i, listener_callback) {
+ this._listen(name, listener_callback);
+ });
+ });
+
+ this.trigger('run', {start_url: start_url});
+ this._running = true;
+ // set data for app
+ this.$element().data(this.data_store_name, this);
+ // set last location
+ this.last_location = null;
+ if (this.getLocation() == '' && typeof start_url != 'undefined') {
+ this.setLocation(start_url);
+ }
+ // check url
+ this._checkLocation();
+ // set interval for url check
+ this._interval = setInterval(function () {
+ app._checkLocation.apply(app);
+ }, this.run_interval_every);
+
+ // bind re-binding to after route
+ this.bind('changed', function() {
+ // bind form submission
+ app.$element().find('form:not(.' + app.eventNamespace() + ')').bind('submit', function() {
+ return app._checkFormSubmission(this);
+ }).addClass(app.eventNamespace());
+ });
+ // bind unload to body unload
+ $('body').bind('onunload', function() {
+ app.unload();
+ });
+
+ // trigger html changed
+ this.trigger('changed');
+ },
+
+ // The opposite of <tt>run()</tt>, un-binds all event listeners and intervals
+ // <tt>run()</tt> Automaticaly binds a <tt>onunload</tt> event to run this when
+ // the document is closed.
+ unload: function() {
+ if (!this.isRunning()) return false;
+ var app = this;
+ this.trigger('unload');
+ // clear interval
+ clearInterval(this._interval);
+ // unbind form submits
+ this.$element().find('form')
+ .unbind('submit')
+ .removeClass(app.eventNamespace());
+ // clear data
+ this.$element().removeData(this.data_store_name);
+ // unbind all events
+ this.each(this.listeners, function(name, listeners) {
+ this.each(listeners, function(i, listener_callback) {
+ this._unlisten(name, listener_callback);
+ });
+ });
+ this._running = false;
+ },
+
+ // Provide a callback that is invoked every time one of the APP_EVENTS is triggered.
+ //
+ // === Example
+ //
+ // // Prints log messages to #debug
+ // $(function() {
+ // app.addLogger(function(e, data) {
+ // $('#debug').append([app.toString(), app.namespace, e.cleaned_type, data, '<br />'].join(' '));
+ // })
+ // app.run('#/');
+ // });
+ //
+ addLogger: function(logger) {
+ this.each(this.APP_EVENTS, function(i, e) {
+ this.bind(e, logger);
+ });
+ },
+
+ // Returns a copy of the given path with any query string after the hash
+ // removed.
+ _canonical: function(path) {
+ return path.replace(QUERY_STRING_MATCHER, '');
+ },
+
+ // Given a verb and a String path, will return either a route object or false
+ // if a matching route can be found within the current defined set.
+ lookupRoute: function(verb, path) {
+ var routed = false;
+ this.trigger('lookup-route', {verb: verb, path: path});
+ if (typeof this.routes[verb] != 'undefined') {
+ this.each(this.routes[verb], function(i, route) {
+ if (this._canonical(path).match(route.path)) {
+ routed = route;
+ return false;
+ }
+ });
+ }
+ return routed;
+ },
+
+ // Pull out a query string from the path fragment. Returns an object
+ // representing parameters in the query string.
+ _parse_query: function(path) {
+ var query = {}, parts, pairs, pair, i;
+
+ parts = path.match(QUERY_STRING_MATCHER);
+ if (parts) {
+ pairs = parts[1].split('&');
+ for (i = 0; i < pairs.length; i += 1) {
+ pair = pairs[i].split('=');
+ query[pair[0]] = pair[1];
+ }
+ }
+
+ return query;
+ },
+
+ // First, invokes <tt>lookupRoute()</tt> and if a route is found, parses the
+ // possible URL params and then invokes the route's callback within a new
+ // <tt>Sammy.EventContext</tt>. If the route can not be found, it calls
+ // <tt>notFound()</tt> and raise an error. If <tt>silence_404</tt> is <tt>true</tt>
+ // this error will be caught be the internal methods that call <tt>runRoute</tt>.
+ //
+ // You probably will never have to call this directly.
+ //
+ // === Arguments
+ //
+ // +verb+:: A String for the verb.
+ // +path+:: A String path to lookup.
+ // +params+:: An Object of Params pulled from the URI or passed directly.
+ //
+ // === Returns
+ //
+ // Either returns the value returned by the route callback or raises a 404 Not Found error.
+ //
+ runRoute: function(verb, path, params) {
+ this.trigger('run-route', {verb: verb, path: path, params: params});
+ if (typeof params == 'undefined') params = {};
+
+ jQuery.extend(params, this._parse_query(path));
+
+ var route = this.lookupRoute(verb, path);
+ if (route) {
+ this.trigger('route-found', {route: route});
+ // pull out the params from the path
+ if ((path_params = route.path.exec(this._canonical(path))) != null) {
+ // first match is the full path
+ path_params.shift();
+ // for each of the matches
+ this.each(path_params, function(i, param) {
+ // if theres a matching param name
+ if (route.param_names[i]) {
+ // set the name to the match
+ params[route.param_names[i]] = param;
+ } else {
+ // initialize 'splat'
+ if (!params['splat']) params['splat'] = [];
+ params['splat'].push(param);
+ }
+ });
+ }
+
+ // set event context
+ var context = new this.context_prototype(this, verb, path, params);
+ this.last_route = route;
+ // run all the before filters
+ var before_value = true;
+ var befores = this.befores.slice(0);
+ while (befores.length > 0) {
+ if (befores.shift().apply(context) === false) return false;
+ }
+ context.trigger('event-context-before');
+ var returned = route.callback.apply(context);
+ context.trigger('event-context-after');
+ return returned;
+ } else {
+ this.notFound(verb, path);
+ }
+ },
+
+ // The default behavior is to return the current window's location hash.
+ // Override this and <tt>setLocation()</tt> to detach the app from the
+ // window.location object.
+ getLocation: function() {
+ // Bypass the `window.location.hash` attribute. If a question mark
+ // appears in the hash IE6 will strip it and all of the following
+ // characters from `window.location.hash`.
+ var matches = window.location.toString().match(/^[^#]*(#.+)$/);
+ if (matches) {
+ return matches[1];
+ } else {
+ return '';
+ }
+ },
+
+ // The default behavior is to set the current window's location.
+ // Override this and <tt>getLocation()</tt> to detach the app from the
+ // window.location object.
+ //
+ // === Arguments
+ //
+ // +new_location+:: A new location string (e.g. '#/')
+ //
+ setLocation: function(new_location) {
+ window.location = new_location;
+ },
+
+ // Swaps the content of <tt>$element()</tt> with <tt>content</tt>
+ // You can override this method to provide an alternate swap behavior
+ // for <tt>EventContext.partial()</tt>.
+ //
+ // === Example
+ //
+ // var app = $.sammy(function() {
+ //
+ // // implements a 'fade out'/'fade in'
+ // this.swap = function(content) {
+ // this.$element().hide('slow').html(content).show('slow');
+ // }
+ //
+ // get('#/', function() {
+ // this.partial('index.html.erb') // will fade out and in
+ // });
+ //
+ // });
+ //
+ swap: function(content) {
+ return this.$element().html(content);
+ },
+
+ // This thows a '404 Not Found' error.
+ notFound: function(verb, path) {
+ this.trigger('error-404', {verb: verb, path: path});
+ throw('404 Not Found ' + verb + ' ' + path);
+ },
+
+ _defineRouteShortcut: function(verb) {
+ var app = this;
+ this[verb] = function(path, callback) {
+ app.route.apply(app, [verb, path, callback]);
+ }
+ },
+
+ _checkLocation: function() {
+ try { // try, catch 404s
+ // get current location
+ var location, returned;
+ location = this.getLocation();
+ // compare to see if hash has changed
+ if (location != this.last_location) {
+ // lookup route for current hash
+ returned = this.runRoute('get', location);
+ // compare to see if path has changed
+ }
+ // reset last location
+ this.last_location = location;
+ } catch(e) {
+ // reset last location
+ this.last_location = location;
+ // unless the error is a 404 and 404s are silenced
+ if (e.toString().match(/^404/) && this.silence_404) {
+ return returned;
+ } else {
+ throw(e);
+ }
+ }
+ return returned;
+ },
+
+ _checkFormSubmission: function(form) {
+ var $form, path, verb, params, returned;
+ this.trigger('check-form-submission', {form: form});
+ $form = $(form);
+ path = $form.attr('action');
+ verb = $form.attr('method').toString().toLowerCase();
+ params = {};
+ $form.find(':input[type!=submit]').each(function() {
+ params[$(this).attr('name')] = $(this).val();
+ });
+ try { // catch 404s
+ returned = this.runRoute(verb, path, params);
+ this.last_location = path;
+ } catch(e) {
+ if (e.toString().match(/^404/) && this.silence_404) {
+ return true;
+ } else {
+ throw(e);
+ }
+ }
+ return (typeof returned == 'undefined') ? false : returned;
+ },
+
+ _listen: function(name, callback) {
+ return this.$element().bind(this.eventNamespace() + name, callback);
+ },
+
+ _unlisten: function(name, callback) {
+ return this.$element().unbind(this.eventNamespace() + name, callback);
+ }
+
+ });
+
+ // == Sammy.EventContext
+ //
+ // <tt>Sammy.EventContext</tt> objects are created every time a route is run or a
+ // bound event is triggered. The callbacks for these events are evaluated within a <tt>Sammy.EventContext</tt>
+ // This within these callbacks the special methods of <tt>EventContext</tt> are available.
+ //
+ // === Example
+ //
+ // $.sammy(function() { with(this) {
+ // // The context here is this Sammy.Application
+ // get('#/:name', function() { with(this) {
+ // // The context here is a new Sammy.EventContext
+ // if (params['name'] == 'sammy') {
+ // partial('name.html.erb', {name: 'Sammy'});
+ // } else {
+ // redirect('#/somewhere-else')
+ // }
+ // }});
+ // }});
+ //
+ Sammy.EventContext = Sammy.Object.extend({
+
+ // Initialize a new EventContext
+ //
+ // === Arguments
+ //
+ // +app+:: The <tt>Sammy.Application</tt> this event is called within.
+ // +verb+:: The verb invoked to run this context/route.
+ // +path+:: The string path invoked to run this context/route.
+ // +params+:: An Object of optional params to pass to the context. Is converted
+ // to a <tt>Sammy.Object</tt>.
+ init: function(app, verb, path, params) {
+ this.app = app;
+ this.verb = verb;
+ this.path = path;
+ this.params = new Sammy.Object(params);
+ },
+
+ // A shortcut to the app's <tt>$element()</tt>
+ $element: function() {
+ return this.app.$element();
+ },
+
+ // Uses <tt>$.srender</tt> to parse ERB like templates.
+ //
+ // === Arguments
+ //
+ // +template+:: A String template. '<% %>' tags are evaluated as Javascript and replaced with the elements in data.
+ // +data+:: An Object containing the replacement values for the template.
+ // data is extended with the <tt>EventContext</tt> allowing you to call its methods within the template.
+ // +name+:: An optional String name to cache the template. Is used in <tt>partial()</tt> to cache remote templates.
+ //
+ template: function(template, data, name) {
+ // use name for caching
+ if (typeof name == 'undefined') name = template;
+ return $.srender(name, template, $.extend({}, data, this));
+ },
+
+ // Used for rendering remote templates or documents within the current application/DOM.
+ //
+ // There are a couple different ways to use <tt>partial()</tt>:
+ //
+ // partial('doc.html');
+ // //=> Replaces $element() with the contents of doc.html
+ //
+ // partial('doc.html.erb', {name: 'Sammy'});
+ // //=> Replaces $element() with the contents of doc.html.erb run through <tt>template()</tt>
+ //
+ // partial('doc.html.erb', function(data) {
+ // // data is the contents of the template.
+ // $('.other-selector').html(data);
+ // });
+ //
+ partial: function(path, data, callback) {
+ var t, rendered, context;
+ context = this;
+ if (typeof callback == 'undefined') {
+ if (typeof data == 'function') {
+ // callback is in the data position
+ callback = data;
+ data = {};
+ } else {
+ // we should use the default callback
+ callback = function(data) {
+ context.app.swap(data);
+ }
+ }
+ }
+ t = $.srender(path);
+ data = $.extend({}, data, this);
+ if (t && !this.app.debug) {
+ // the template was already cached
+ rendered = t(data);
+ callback.apply(context, [rendered]);
+ context.trigger('changed');
+ } else {
+ // the template wasnt cached, we need to fetch it
+ $.get(path, function(template) {
+ rendered = $.srender(path, template, data);
+ callback.apply(context, [rendered]);
+ context.trigger('changed');
+ });
+ }
+ },
+
+ // Changes the location of the current window. If <tt>to</tt> begins with
+ // '#' it only changes the document's hash.
+ redirect: function(to) {
+ this.trigger('redirect', {to: to});
+ return this.app.setLocation(to);
+ },
+
+ // Triggers events on <tt>app</tt> within the current context.
+ trigger: function(name, data) {
+ return this.app.trigger(name, data, this);
+ },
+
+ // A shortcut to app's <tt>eventNamespace()</tt>
+ eventNamespace: function() {
+ return this.app.eventNamespace();
+ },
+
+ // Raises a possible <tt>notFound()</tt> error for the current path.
+ notFound: function() {
+ return this.app.notFound(this.verb, this.path);
+ }
+
+ });
+
+ $.sammy = function(app_function) {
+ return new Sammy.Application(app_function);
+ };
+
+})(jQuery);
View
5 _attachments/javascripts/sammy.min.js
@@ -0,0 +1,5 @@
+// -- Sammy --
+// http://code.quirkey.com/sammy
+// Version: 0.2.1
+// Built: 2009-08-28 14:22:24 -0400
+(function(){var a=false,b=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;this.Class=function(){};Class.extend=function(g){var f=this.prototype;a=true;var e=new this();a=false;for(var d in g){e[d]=typeof g[d]=="function"&&typeof f[d]=="function"&&b.test(g[d])?(function(h,i){return function(){var k=this._super;this._super=f[h];var j=i.apply(this,arguments);this._super=k;return j}})(d,g[d]):g[d]}function c(){if(!a&&this.init){this.init.apply(this,arguments)}}c.prototype=e;c.constructor=c;c.extend=arguments.callee;return c}})();(function(a){a.srender=function(b,c,d){a.srender.cache=a.srender.cache||{};if(a.srender.cache[b]){fn=a.srender.cache[b]}else{if(typeof c=="undefined"){return false}fn=a.srender.cache[b]=new Function("obj",'var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push("'+c.replace(/[\r\t\n]/g," ").replace(/\"/g,'\\"').split("<%").join("\t").replace(/((^|%>)[^\t]*)/g,"$1\r").replace(/\t=(.*?)%>/g,'",$1,"').split("\t").join('");').split("%>").join('p.push("').split("\r").join("")+"\");}return p.join('');")}if(typeof d!="undefined"){return fn(d)}else{return fn}}})(jQuery);(function(c){var a="([^/]+)";var b=/:([\w\d]+)/g;Sammy={};Sammy.VERSION="0.2.1";Sammy.Object=Class.extend({init:function(d){c.extend(this,d)},clone:function(d){if(typeof d=="undefined"){d=this}return c.extend({},d)},toHash:function(){var d={};this.each(function(f,e){if(!c.isFunction(e)){d[f]=e}});return d},toHTML:function(){var d="";this.each(function(f,e){if(!c.isFunction(e)){d+="<strong>"+f+"</strong> "+e+"<br />"}});return d},uuid:function(){if(typeof this._uuid=="undefined"||!this._uuid){this._uuid=(new Date()).getTime()+"-"+parseInt(Math.random()*1000)}return this._uuid},each:function(){var f,e,g,d;f=this;if(typeof arguments[0]!="function"){e=arguments[0];g=arguments[1]}else{e=this;g=arguments[0]}d=function(){return g.apply(f,arguments)};c.each(e,d)},log:function(){var d=[].slice.call(arguments);d.unshift("["+Date()+"]");if(typeof window.console!="undefined"){window.console.log.apply(window.console,d)}else{if(typeof console!="undefined"){console.log.apply(this,d)}else{}}}});Sammy.Application=Sammy.Object.extend({ROUTE_VERBS:["get","post","put","delete"],APP_EVENTS:["run","unload","lookup-route","run-route","route-found","event-context-before","event-context-after","changed","error-404","check-form-submission","redirect"],_last_route:null,_running:false,data_store_name:"sammy-app",element_selector:"body",debug:false,silence_404:true,run_interval_every:50,init:function(d){var e=this;this.routes={};this.listeners={};this.befores=[];this.namespace=this.uuid();this.context_prototype=Sammy.EventContext.extend({});this.each(this.ROUTE_VERBS,function(f,g){this._defineRouteShortcut(g)});d.apply(this);if(this.debug){this.addLogger(function(g,f){e.log(e.toString(),g.cleaned_type,f||{})})}},toString:function(){return"Sammy.Application:"+this.element_selector},$element:function(){return c(this.element_selector)},route:function(h,f,j){var g=this;var i=[];if(f.constructor==String){while((path_match=b.exec(f))!=null){i.push(path_match[1])}f=new RegExp(f.replace(b,a)+"$")}var d={verb:h,path:f,callback:j,param_names:i};if(typeof this.routes[h]=="undefined"||this.routes[h].length==0){this.routes[h]=[d]}else{var e=false;this.each(this.routes[h],function(l,k){if(f.toString().length>=k.path.toString().length){this.routes[h].splice(l,0,d);e=true;return false}});if(!e){this.routes[h].push(d)}}return d},eventNamespace:function(){return this.data_store_name+"-"+this.namespace+"-"},bind:function(d,f,g){if(typeof g=="undefined"){g=f}var e=function(){var j,h,i;j=arguments[0];h=arguments[1];i=arguments[2];j.cleaned_type=j.type.replace(h.eventNamespace(),"");g.apply(h,[j,i])};if(!this.listeners[d]){this.listeners[d]=[]}this.listeners[d].push(e);if(this.isRunning()){return this._listen(d,e)}},trigger:function(d,f,e){if(typeof e=="undefined"){e=new this.context_prototype(this,"bind",d,f)}return this.$element().triggerHandler(e.eventNamespace()+d,[e,f])},before:function(d){return this.befores.push(d)},after:function(d){return this.bind("event-context-after",d)},isRunning:function(){return this._running},helpers:function(d){this.context_prototype=this.context_prototype.extend(d)},run:function(d){if(this.isRunning()){return false}var e=this;this.each(this.listeners,function(f,g){this.each(g,function(j,h){this._listen(f,h)})});this.trigger("run",{start_url:d});this._running=true;this.$element().data(this.data_store_name,this);this.last_location=null;if(this.getLocation()==""&&typeof d!="undefined"){this.setLocation(d)}this._checkLocation();this._interval=setInterval(function(){e._checkLocation.apply(e)},this.run_interval_every);this.bind("changed",function(){e.$element().find("form:not(."+e.eventNamespace()+")").bind("submit",function(){return e._checkFormSubmission(this)}).addClass(e.eventNamespace())});c("body").bind("onunload",function(){e.unload()});this.trigger("changed")},unload:function(){if(!this.isRunning()){return false}var d=this;this.trigger("unload");clearInterval(this._interval);this.$element().find("form").unbind("submit").removeClass(d.eventNamespace());this.$element().removeData(this.data_store_name);this.each(this.listeners,function(e,f){this.each(f,function(h,g){this._unlisten(e,g)})});this._running=false},addLogger:function(d){this.each(this.APP_EVENTS,function(f,g){this.bind(g,d)})},lookupRoute:function(g,f){var d=false,e=f.match(/^(.*#.*)\?/);if(e){f=e[1]}this.trigger("lookup-route",{verb:g,path:f});if(typeof this.routes[g]!="undefined"){this.each(this.routes[g],function(j,h){if(f.match(h.path)){d=h;return false}})}return d},_parse_query:function(h){var f={},g,e,j,d;g=h.match(/^#.*\?(.*)$/);if(g){e=g[1].split("&");for(d=0;d<e.length;d+=1){j=e[d].split("=");f[j[0]]=j[1]}}return f},runRoute:function(k,h,j){this.trigger("run-route",{verb:k,path:h,params:j});if(typeof j=="undefined"){j={}}jQuery.extend(j,this._parse_query(h));var e=this.lookupRoute(k,h);if(e){this.trigger("route-found",{route:e});if((path_params=e.path.exec(h))!=null){path_params.shift();this.each(path_params,function(l,m){if(e.param_names[l]){j[e.param_names[l]]=m}else{if(!j.splat){j.splat=[]}j.splat.push(m)}})}var f=new this.context_prototype(this,k,h,j);this.last_route=e;var d=true;var i=this.befores.slice(0);while(i.length>0){if(i.shift().apply(f)===false){return false}}f.trigger("event-context-before");var g=e.callback.apply(f);f.trigger("event-context-after");return g}else{this.notFound(k,h)}},getLocation:function(){return this.clone(window.location).hash.toString()},setLocation:function(d){window.location=d},swap:function(d){return this.$element().html(d)},notFound:function(e,d){this.trigger("error-404",{verb:e,path:d});throw ("404 Not Found "+e+" "+d)},_defineRouteShortcut:function(e){var d=this;this[e]=function(f,g){d.route.apply(d,[e,f,g])}},_checkLocation:function(){try{var d,f;d=this.getLocation();if(d!=this.last_location){f=this.runRoute("get",d)}this.last_location=d}catch(g){this.last_location=d;if(g.toString().match(/^404/)&&this.silence_404){return f}else{throw (g)}}return f},_checkFormSubmission:function(g){var d,i,k,j,f;this.trigger("check-form-submission",{form:g});d=c(g);i=d.attr("action");k=d.attr("method").toString().toLowerCase();j={};d.find(":input[type!=submit]").each(function(){j[c(this).attr("name")]=c(this).val()});try{f=this.runRoute(k,i,j);this.last_location=i}catch(h){if(h.toString().match(/^404/)&&this.silence_404){return true}else{throw (h)}}return(typeof f=="undefined")?false:f},_listen:function(d,e){return this.$element().bind(this.eventNamespace()+d,e)},_unlisten:function(d,e){return this.$element().unbind(this.eventNamespace()+d,e)}});Sammy.EventContext=Sammy.Object.extend({init:function(g,f,d,e){this.app=g;this.verb=f;this.path=d;this.params=new Sammy.Object(e)},$element:function(){return this.app.$element()},template:function(e,f,d){if(typeof d=="undefined"){d=e}return c.srender(d,e,c.extend({},f,this))},partial:function(g,f,i){var e,h,d;d=this;if(typeof i=="undefined"){if(typeof f=="function"){i=f;f={}}else{i=function(j){d.app.swap(j)}}}e=c.srender(g);f=c.extend({},f,this);if(e&&!this.app.debug){h=e(f);i.apply(d,[h]);d.trigger("changed")}else{c.get(g,function(j){h=c.srender(g,j,f);i.apply(d,[h]);d.trigger("changed")})}},redirect:function(d){this.trigger("redirect",{to:d});return this.app.setLocation(d)},trigger:function(d,e){return this.app.trigger(d,e,this)},eventNamespace:function(){return this.app.eventNamespace()},notFound:function(){return this.app.notFound(this.verb,this.path)}});c.sammy=function(d){return new Sammy.Application(d)}})(jQuery);
View
25 _attachments/javascripts/shjs/README.txt
@@ -0,0 +1,25 @@
+This is the README file for SHJS - Syntax Highlighting in JavaScript.
+
+This distribution contains the following files:
+
+sh_main.js
+ The main script.
+sh_main.min.js
+ The main script, compressed by YUI Compressor
+ (http://www.julienlecomte.net/yuicompressor/).
+sh_style.css
+ Default style sheet.
+css/*.css
+ Style sheets for different highlighting themes.
+css/*.min.css
+ Compressed versions of the above.
+lang/*.js
+ Scripts for different programming languages.
+lang/*.min.js
+ Compressed versions of the above.
+doc/
+ Documentation.
+
+See index.html for instructions.
+
+See gpl.txt for licensing terms.
View
1  _attachments/javascripts/shjs/VERSION.txt
@@ -0,0 +1 @@
+0.6
View
151 _attachments/javascripts/shjs/css/sh_acid.css
@@ -0,0 +1,151 @@
+pre.sh_sourceCode {
+ background-color: #eeeeee;
+ color: #000000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_keyword {
+ color: #bb7977;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_type {
+ color: #8080c0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_string {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_regexp {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_specialchar {
+ color: #ff00ff;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_comment {
+ color: #ff8000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_number {
+ color: #800080;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_preproc {
+ color: #0080c0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_symbol {
+ color: #ff0080;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_function {
+ color: #004466;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_cbracket {
+ color: #ff0080;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_url {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_date {
+ color: #bb7977;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_time {
+ color: #bb7977;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_file {
+ color: #bb7977;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_ip {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_name {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_variable {
+ color: #0080c0;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_oldfile {
+ color: #ff00ff;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_newfile {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_difflines {
+ color: #bb7977;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_selector {
+ color: #0080c0;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_property {
+ color: #bb7977;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_value {
+ color: #a68500;
+ font-weight: normal;
+ font-style: normal;
+}
+
View
1  _attachments/javascripts/shjs/css/sh_acid.min.css
@@ -0,0 +1 @@
+pre.sh_sourceCode{background-color:#eee;color:#000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_keyword{color:#bb7977;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_type{color:#8080c0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_string{color:#a68500;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_regexp{color:#a68500;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_specialchar{color:#f0f;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_comment{color:#ff8000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_number{color:#800080;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_preproc{color:#0080c0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_symbol{color:#ff0080;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_function{color:#046;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_cbracket{color:#ff0080;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_url{color:#a68500;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_date{color:#bb7977;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_time{color:#bb7977;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_file{color:#bb7977;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_ip{color:#a68500;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_name{color:#a68500;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_variable{color:#0080c0;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_oldfile{color:#f0f;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_newfile{color:#a68500;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_difflines{color:#bb7977;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_selector{color:#0080c0;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_property{color:#bb7977;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_value{color:#a68500;font-weight:normal;font-style:normal;}
View
151 _attachments/javascripts/shjs/css/sh_berries-dark.css
@@ -0,0 +1,151 @@
+pre.sh_sourceCode {
+ background-color: #80bfff;
+ color: #400080;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_keyword {
+ color: #3f2bf0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_type {
+ color: #3f2bf0;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_string {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_regexp {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_specialchar {
+ color: #77379a;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_comment {
+ color: #df0959;
+ font-weight: normal;
+ font-style: italic;
+}
+
+pre.sh_sourceCode .sh_number {
+ color: #20755a;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_preproc {
+ color: #0628cb;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_symbol {
+ color: #000000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_function {
+ color: #901164;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_cbracket {
+ color: #000000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_url {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_date {
+ color: #3f2bf0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_time {
+ color: #3f2bf0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_file {
+ color: #3f2bf0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_ip {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_name {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_variable {
+ color: #a91ea7;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_oldfile {
+ color: #77379a;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_newfile {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_difflines {
+ color: #3f2bf0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_selector {
+ color: #a91ea7;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_property {
+ color: #3f2bf0;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_value {
+ color: #c40000;
+ font-weight: normal;
+ font-style: normal;
+}
+
View
1  _attachments/javascripts/shjs/css/sh_berries-dark.min.css
@@ -0,0 +1 @@
+pre.sh_sourceCode{background-color:#80bfff;color:#400080;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_keyword{color:#3f2bf0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_type{color:#3f2bf0;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_string{color:#c40000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_regexp{color:#c40000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_specialchar{color:#77379a;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_comment{color:#df0959;font-weight:normal;font-style:italic;}pre.sh_sourceCode .sh_number{color:#20755a;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_preproc{color:#0628cb;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_symbol{color:#000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_function{color:#901164;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_cbracket{color:#000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_url{color:#c40000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_date{color:#3f2bf0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_time{color:#3f2bf0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_file{color:#3f2bf0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_ip{color:#c40000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_name{color:#c40000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_variable{color:#a91ea7;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_oldfile{color:#77379a;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_newfile{color:#c40000;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_difflines{color:#3f2bf0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_selector{color:#a91ea7;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_property{color:#3f2bf0;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_value{color:#c40000;font-weight:normal;font-style:normal;}
View
151 _attachments/javascripts/shjs/css/sh_berries-light.css
@@ -0,0 +1,151 @@
+pre.sh_sourceCode {
+ background-color: #d7ffff;
+ color: #47406d;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_keyword {
+ color: #2cae1e;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_type {
+ color: #8b51c0;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_string {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_regexp {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_specialchar {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_comment {
+ color: #9c3caf;
+ font-weight: normal;
+ font-style: italic;
+}
+
+pre.sh_sourceCode .sh_number {
+ color: #20755a;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_preproc {
+ color: #0628cb;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_symbol {
+ color: #d2073b;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_function {
+ color: #901164;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_cbracket {
+ color: #d2073b;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_url {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_date {
+ color: #2cae1e;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_time {
+ color: #2cae1e;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_file {
+ color: #2cae1e;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_ip {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_name {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_variable {
+ color: #0628cb;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_oldfile {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_newfile {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_difflines {
+ color: #2cae1e;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_selector {
+ color: #0628cb;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_property {
+ color: #2cae1e;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_value {
+ color: #5f81b3;
+ font-weight: normal;
+ font-style: normal;
+}
+
View
1  _attachments/javascripts/shjs/css/sh_berries-light.min.css
@@ -0,0 +1 @@
+pre.sh_sourceCode{background-color:#d7ffff;color:#47406d;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_keyword{color:#2cae1e;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_type{color:#8b51c0;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_string{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_regexp{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_specialchar{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_comment{color:#9c3caf;font-weight:normal;font-style:italic;}pre.sh_sourceCode .sh_number{color:#20755a;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_preproc{color:#0628cb;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_symbol{color:#d2073b;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_function{color:#901164;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_cbracket{color:#d2073b;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_url{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_date{color:#2cae1e;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_time{color:#2cae1e;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_file{color:#2cae1e;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_ip{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_name{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_variable{color:#0628cb;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_oldfile{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_newfile{color:#5f81b3;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_difflines{color:#2cae1e;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_selector{color:#0628cb;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_property{color:#2cae1e;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_value{color:#5f81b3;font-weight:normal;font-style:normal;}
View
151 _attachments/javascripts/shjs/css/sh_bipolar.css
@@ -0,0 +1,151 @@
+pre.sh_sourceCode {
+ background-color: #000000;
+ color: #d149a6;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_keyword {
+ color: #ee85e2;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_type {
+ color: #aadd8b;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_string {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_regexp {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_specialchar {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_comment {
+ color: #35d6e5;
+ font-weight: normal;
+ font-style: italic;
+}
+
+pre.sh_sourceCode .sh_number {
+ color: #ffffff;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_preproc {
+ color: #07f6bf;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_symbol {
+ color: #348fef;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_function {
+ color: #d51993;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_cbracket {
+ color: #348fef;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_url {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_date {
+ color: #ee85e2;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_time {
+ color: #ee85e2;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_file {
+ color: #ee85e2;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_ip {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_name {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_variable {
+ color: #72d42c;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_oldfile {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_newfile {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_difflines {
+ color: #ee85e2;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_selector {
+ color: #72d42c;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_property {
+ color: #ee85e2;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_value {
+ color: #9ef457;
+ font-weight: normal;
+ font-style: normal;
+}
+
View
1  _attachments/javascripts/shjs/css/sh_bipolar.min.css
@@ -0,0 +1 @@
+pre.sh_sourceCode{background-color:#000;color:#d149a6;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_keyword{color:#ee85e2;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_type{color:#aadd8b;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_string{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_regexp{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_specialchar{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_comment{color:#35d6e5;font-weight:normal;font-style:italic;}pre.sh_sourceCode .sh_number{color:#fff;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_preproc{color:#07f6bf;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_symbol{color:#348fef;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_function{color:#d51993;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_cbracket{color:#348fef;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_url{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_date{color:#ee85e2;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_time{color:#ee85e2;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_file{color:#ee85e2;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_ip{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_name{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_variable{color:#72d42c;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_oldfile{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_newfile{color:#9ef457;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_difflines{color:#ee85e2;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_selector{color:#72d42c;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_property{color:#ee85e2;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_value{color:#9ef457;font-weight:normal;font-style:normal;}
View
151 _attachments/javascripts/shjs/css/sh_blacknblue.css
@@ -0,0 +1,151 @@
+pre.sh_sourceCode {
+ background-color: #000000;
+ color: #2346d5;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_keyword {
+ color: #1ededc;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_type {
+ color: #c06cf8;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_string {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_regexp {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_specialchar {
+ color: #ccc6c6;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_comment {
+ color: #6fb2c4;
+ font-weight: normal;
+ font-style: italic;
+}
+
+pre.sh_sourceCode .sh_number {
+ color: #c4ac60;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_preproc {
+ color: #8080ff;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_symbol {
+ color: #ccc6c6;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_function {
+ color: #1c96ed;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_cbracket {
+ color: #ccc6c6;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_url {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_date {
+ color: #1ededc;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_time {
+ color: #1ededc;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_file {
+ color: #1ededc;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_ip {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_name {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_variable {
+ color: #ecea26;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_oldfile {
+ color: #ccc6c6;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_newfile {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_difflines {
+ color: #1ededc;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_selector {
+ color: #ecea26;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_property {
+ color: #1ededc;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_value {
+ color: #cfc631;
+ font-weight: normal;
+ font-style: normal;
+}
+
View
1  _attachments/javascripts/shjs/css/sh_blacknblue.min.css
@@ -0,0 +1 @@
+pre.sh_sourceCode{background-color:#000;color:#2346d5;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_keyword{color:#1ededc;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_type{color:#c06cf8;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_string{color:#cfc631;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_regexp{color:#cfc631;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_specialchar{color:#ccc6c6;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_comment{color:#6fb2c4;font-weight:normal;font-style:italic;}pre.sh_sourceCode .sh_number{color:#c4ac60;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_preproc{color:#8080ff;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_symbol{color:#ccc6c6;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_function{color:#1c96ed;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_cbracket{color:#ccc6c6;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_url{color:#cfc631;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_date{color:#1ededc;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_time{color:#1ededc;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_file{color:#1ededc;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_ip{color:#cfc631;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_name{color:#cfc631;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_variable{color:#ecea26;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_oldfile{color:#ccc6c6;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_newfile{color:#cfc631;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_difflines{color:#1ededc;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_selector{color:#ecea26;font-weight:normal;font-style:normal;}pre.sh_sourceCode .sh_property{color:#1ededc;font-weight:bold;font-style:normal;}pre.sh_sourceCode .sh_value{color:#cfc631;font-weight:normal;font-style:normal;}
View
151 _attachments/javascripts/shjs/css/sh_bright.css
@@ -0,0 +1,151 @@
+pre.sh_sourceCode {
+ background-color: #ffffff;
+ color: #401e7a;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_keyword {
+ color: #ff3030;
+ font-weight: bold;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_type {
+ color: #f7b92c;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_string {
+ color: #1861a7;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_regexp {
+ color: #1861a7;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_specialchar {
+ color: #1861a7;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_comment {
+ color: #38ad24;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_number {
+ color: #32ba06;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_preproc {
+ color: #5374b0;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_symbol {
+ color: #3030ee;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_function {
+ color: #d11ced;
+ font-weight: normal;
+ font-style: normal;
+}
+
+pre.sh_sourceCode .sh_cbracket {
+ color: #3030ee;
+ font-weight: normal;