keydown 0.7.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +3 -0
  3. data/LICENSE +1 -1
  4. data/README.md +16 -15
  5. data/VERSION +1 -1
  6. data/keydown.gemspec +9 -6
  7. data/lib/keydown.rb +9 -22
  8. data/lib/keydown/html_helpers.rb +12 -0
  9. data/lib/keydown/{lib/slide.rb → slide.rb} +16 -19
  10. data/lib/keydown/{lib/slidedeck.rb → slidedeck.rb} +20 -5
  11. data/lib/keydown/tasks.rb +5 -0
  12. data/lib/keydown/tasks/base.rb +15 -0
  13. data/lib/keydown/tasks/generate.rb +5 -1
  14. data/lib/keydown/tasks/slides.rb +1 -1
  15. data/lib/version.rb +1 -1
  16. data/spec/lib/html_helpers_spec.rb +26 -0
  17. data/spec/lib/slide_spec.rb +29 -17
  18. data/spec/lib/slidedeck_spec.rb +41 -13
  19. data/spec/spec_helper.rb +2 -6
  20. data/spec/tasks/generate_spec.rb +41 -20
  21. data/spec/tasks/slides_spec.rb +83 -44
  22. data/templates/deck.js/code.html.haml +1 -0
  23. data/templates/deck.js/index.html.haml +54 -0
  24. data/templates/deck.js/slide.html.haml +6 -0
  25. data/templates/generate/css/%presentation_name%.css +12 -1
  26. data/templates/generate/deck.js/core/deck.core.css +394 -0
  27. data/templates/generate/deck.js/core/deck.core.js +461 -0
  28. data/templates/generate/deck.js/core/deck.core.scss +432 -0
  29. data/templates/generate/deck.js/extensions/codemirror/CONTRIBUTORS.txt +2 -0
  30. data/templates/generate/deck.js/extensions/codemirror/MIT-LICENSE.txt +21 -0
  31. data/templates/generate/deck.js/extensions/codemirror/README.md +120 -0
  32. data/templates/generate/deck.js/extensions/codemirror/VERSION.txt +1 -0
  33. data/templates/generate/deck.js/extensions/codemirror/codemirror.js +21 -0
  34. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.css +89 -0
  35. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.js +213 -0
  36. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.scss +107 -0
  37. data/templates/generate/deck.js/extensions/codemirror/mode/clike/clike.js +247 -0
  38. data/templates/generate/deck.js/extensions/codemirror/mode/clike/index.html +102 -0
  39. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/clojure.js +207 -0
  40. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/index.html +85 -0
  41. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/LICENSE +22 -0
  42. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/coffeescript.js +325 -0
  43. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/index.html +722 -0
  44. data/templates/generate/deck.js/extensions/codemirror/mode/css/css.js +124 -0
  45. data/templates/generate/deck.js/extensions/codemirror/mode/css/index.html +56 -0
  46. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.css +3 -0
  47. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.js +13 -0
  48. data/templates/generate/deck.js/extensions/codemirror/mode/diff/index.html +99 -0
  49. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/haskell.js +242 -0
  50. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/index.html +60 -0
  51. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/htmlmixed.js +79 -0
  52. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/index.html +52 -0
  53. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/index.html +78 -0
  54. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/javascript.js +348 -0
  55. data/templates/generate/deck.js/extensions/codemirror/mode/lua/index.html +72 -0
  56. data/templates/generate/deck.js/extensions/codemirror/mode/lua/lua.js +138 -0
  57. data/templates/generate/deck.js/extensions/codemirror/mode/php/index.html +49 -0
  58. data/templates/generate/deck.js/extensions/codemirror/mode/php/php.js +115 -0
  59. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/index.html +63 -0
  60. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/plsql.js +217 -0
  61. data/templates/generate/deck.js/extensions/codemirror/mode/python/LICENSE.txt +21 -0
  62. data/templates/generate/deck.js/extensions/codemirror/mode/python/index.html +123 -0
  63. data/templates/generate/deck.js/extensions/codemirror/mode/python/python.js +321 -0
  64. data/templates/generate/deck.js/extensions/codemirror/mode/r/LICENSE +24 -0
  65. data/templates/generate/deck.js/extensions/codemirror/mode/r/index.html +74 -0
  66. data/templates/generate/deck.js/extensions/codemirror/mode/r/r.js +141 -0
  67. data/templates/generate/deck.js/extensions/codemirror/mode/rst/index.html +526 -0
  68. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.css +75 -0
  69. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.js +333 -0
  70. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/LICENSE +24 -0
  71. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/index.html +172 -0
  72. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/ruby.js +195 -0
  73. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/index.html +65 -0
  74. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/scheme.js +202 -0
  75. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/index.html +56 -0
  76. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/smalltalk.js +122 -0
  77. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/index.html +41 -0
  78. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/sparql.js +143 -0
  79. data/templates/generate/deck.js/extensions/codemirror/mode/stex/index.html +96 -0
  80. data/templates/generate/deck.js/extensions/codemirror/mode/stex/stex.js +167 -0
  81. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/index.html +103 -0
  82. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/velocity.js +146 -0
  83. data/templates/generate/deck.js/extensions/codemirror/mode/xml/index.html +42 -0
  84. data/templates/generate/deck.js/extensions/codemirror/mode/xml/xml.js +231 -0
  85. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/index.html +60 -0
  86. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/xmlpure.js +481 -0
  87. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/index.html +68 -0
  88. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/yaml.js +95 -0
  89. data/templates/generate/deck.js/extensions/codemirror/themes/cobalt.css +17 -0
  90. data/templates/generate/deck.js/extensions/codemirror/themes/default.css +19 -0
  91. data/templates/generate/deck.js/extensions/codemirror/themes/elegant.css +9 -0
  92. data/templates/generate/deck.js/extensions/codemirror/themes/neat.css +8 -0
  93. data/templates/generate/deck.js/extensions/codemirror/themes/night.css +20 -0
  94. data/templates/generate/deck.js/extensions/goto/deck.goto.css +41 -0
  95. data/templates/generate/deck.js/extensions/goto/deck.goto.html +6 -0
  96. data/templates/generate/deck.js/extensions/goto/deck.goto.js +118 -0
  97. data/templates/generate/deck.js/extensions/goto/deck.goto.scss +46 -0
  98. data/templates/generate/deck.js/extensions/hash/deck.hash.css +13 -0
  99. data/templates/generate/deck.js/extensions/hash/deck.hash.html +2 -0
  100. data/templates/generate/deck.js/extensions/hash/deck.hash.js +125 -0
  101. data/templates/generate/deck.js/extensions/hash/deck.hash.scss +15 -0
  102. data/templates/generate/deck.js/extensions/menu/deck.menu.css +24 -0
  103. data/templates/generate/deck.js/extensions/menu/deck.menu.js +127 -0
  104. data/templates/generate/deck.js/extensions/menu/deck.menu.scss +29 -0
  105. data/templates/generate/deck.js/extensions/navigation/deck.navigation.css +43 -0
  106. data/templates/generate/deck.js/extensions/navigation/deck.navigation.html +3 -0
  107. data/templates/generate/deck.js/extensions/navigation/deck.navigation.js +83 -0
  108. data/templates/generate/deck.js/extensions/navigation/deck.navigation.scss +56 -0
  109. data/templates/generate/deck.js/extensions/scale/deck.scale.css +16 -0
  110. data/templates/generate/deck.js/extensions/scale/deck.scale.js +155 -0
  111. data/templates/generate/deck.js/extensions/scale/deck.scale.scss +17 -0
  112. data/templates/generate/deck.js/extensions/status/deck.status.css +14 -0
  113. data/templates/generate/deck.js/extensions/status/deck.status.html +6 -0
  114. data/templates/generate/deck.js/extensions/status/deck.status.js +42 -0
  115. data/templates/generate/deck.js/extensions/status/deck.status.scss +16 -0
  116. data/templates/generate/deck.js/support/jquery.1.6.4.min.js +4 -0
  117. data/templates/generate/deck.js/support/modernizr.custom.js +4 -0
  118. data/templates/generate/deck.js/themes/style/neon.css +114 -0
  119. data/templates/generate/deck.js/themes/style/neon.scss +139 -0
  120. data/templates/generate/deck.js/themes/style/swiss.css +75 -0
  121. data/templates/generate/deck.js/themes/style/swiss.scss +91 -0
  122. data/templates/generate/deck.js/themes/style/web-2.0.css +187 -0
  123. data/templates/generate/deck.js/themes/style/web-2.0.scss +214 -0
  124. data/templates/generate/deck.js/themes/transition/fade.css +44 -0
  125. data/templates/generate/deck.js/themes/transition/fade.scss +70 -0
  126. data/templates/generate/deck.js/themes/transition/horizontal-slide.css +79 -0
  127. data/templates/generate/deck.js/themes/transition/horizontal-slide.scss +94 -0
  128. data/templates/generate/deck.js/themes/transition/vertical-slide.css +97 -0
  129. data/templates/generate/deck.js/themes/transition/vertical-slide.scss +116 -0
  130. data/templates/keydown.css.erb +27 -23
  131. metadata +171 -32
  132. data/Gemfile.lock +0 -41
  133. data/templates/generate/css/rocks.css +0 -392
  134. data/templates/generate/css/syntax_highlighting.css +0 -135
  135. data/templates/generate/js/rocks.js +0 -419
  136. data/templates/rocks/index.rhtml +0 -132
  137. data/templates/rocks/slide.rhtml +0 -10
@@ -0,0 +1,120 @@
1
+ Deck.js-CodeMirror Extension
2
+ ============================
3
+
4
+ This extension allows you to embed codemirror code snippets in your slides. Those codeblocks
5
+ can also be executable, which is pretty exciting.
6
+
7
+ An example is running here: http://ireneros.com/deck/deck.js-codemirror/introduction
8
+
9
+ You can also see those slides in the `introduction` folder.
10
+
11
+ # Installation: #
12
+
13
+ Move all this into a folder called 'codemirror' in your deck.js/extensions/ folder.
14
+
15
+ # Setup: #
16
+
17
+ Include the stylesheet:
18
+
19
+ <link rel="stylesheet" href="../extensions/codemirror/deck.codemirror.css">
20
+
21
+ Include the JS source:
22
+
23
+ <!-- Base codemiror code -->
24
+ <script src="../extensions/codemirror/codemirror.js"></script>
25
+
26
+ <!-- Syntax highlighting Modes -->
27
+
28
+ <!-- javascript -->
29
+ <script src="../mode/javascript/javascript.js"></script>
30
+
31
+ <!-- html mode (note html mode requires xml, css and javascript) -->
32
+ <script src="../extensions/codemirror/mode/xml/xml.js"></script>
33
+ <script src="../extensions/codemirror/mode/css/css.js"></script>
34
+ <script src="../extensions/codemirror/mode/htmlmixed/htmlmixed.js"></script>
35
+
36
+ <!-- Plugin code -->
37
+ <script src="../extensions/codemirror/deck.codemirror.js"></script>
38
+
39
+ Include your favorite CodeMirror syntax style:
40
+
41
+ <link rel="stylesheet" href="../extensions/codemirror/themes/default.css">
42
+
43
+ Options are:
44
+
45
+ cobalt.css
46
+ default.css
47
+ elegant.css
48
+ neat.css
49
+ night.css
50
+
51
+
52
+ # Use: #
53
+
54
+ There are two ways to create code blocks:
55
+ Inside your slide:
56
+
57
+ ## Text Area:
58
+
59
+ <div>
60
+ <textarea id="code" name="code" class="code" mode="javascript" style="display: none;" runnable="true">// codemirror demo party!
61
+ var greeter = function(name) {
62
+ return "Why hello there " + name;
63
+ }
64
+ console.log(greeter("Joe"));
65
+ </textarea>
66
+ </div>
67
+
68
+ ## Any other item:
69
+
70
+ <div>
71
+ <div id="code" name="code" class="code" mode="javascript" style="display: none;">// codemirror demo party!
72
+ var obj = { text : "Hello all!"};
73
+ console.log("HI THERE");
74
+ </div>
75
+ </div>
76
+
77
+ # Setup scripts: #
78
+
79
+ Sometimes you have to do a lot of set up for your code that doesn't need to live inside
80
+ the actual codemirror editor (because it's not of interest to your readers.) You can now
81
+ create hidden script tags that will be evaluated on "Run" before the editor code runs.
82
+
83
+ It must have the type set to "codemirror" and the data-selector must be set to the selector of
84
+ the editor that it's running for:
85
+
86
+ <script type="codemirror" data-selector="#code4">
87
+ var someVar = 10;
88
+ </script>
89
+
90
+ <textarea id="code4" name="code" class="code" mode="javascript" style="display: none;" runnable="true">
91
+ // output my log
92
+ console.log(someVar);
93
+ </textarea>
94
+
95
+ # Globals! #
96
+
97
+ Sometimes you just need to access a global of some kind. The code in the codemirror editors is executed
98
+ in a sandbox, which means whatever it is you load in your actual slides, is NOT going to be available by default.
99
+ To give access to, for example, jQuery object, define a "globals" attribute on the code blocks with
100
+ the names of the vars you need. Globals can be comma delimited, for example: "$,Backbone,_".
101
+
102
+ <textarea id="code4" name="code" class="code" mode="javascript" style="display: none;" runnable="true" globals="$">
103
+ // output my log
104
+ console.log($('script').size());
105
+ </textarea>
106
+
107
+ # Element Attributes: #
108
+
109
+ Regardless of your element type, the following attributes should be set:
110
+
111
+ * class - code (should always be set to code.)
112
+ * mode - language mode. This plugin now supports all modes. Look into the mode directory and include the ones you like. Note that some require additional modes so be sure to check the Codemirror site.
113
+ * theme (optional) - If you want multiple themes in your slides, include multiple stylesheets and set this attribute to the theme name.
114
+ * runnable (optiona) - If true, will add a Run button to the window and pipe the eval's console output to an output element right below.
115
+
116
+ # Contact: #
117
+ Irene Ros (@ireneros)
118
+ http://bocoup.com
119
+
120
+
@@ -0,0 +1,21 @@
1
+ // Copyright (C) 2011 by Marijn Haverbeke <marijnh@gmail.com>
2
+
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ var CodeMirror=function(){function a(b,c){function bw(a){return a>=0&&a<$.length}function by(a){ba=null;var b={line:0,ch:0};bI(b,{line:$.length-1,ch:$[$.length-1].text.length},N(a),b,b),ba=new j,bg=!0}function bz(a){var b=[];for(var c=0,d=$.length;c<d;++c)b.push($[c].text);return b.join("\n")}function bA(a){function h(){bX(),bg=!0,j(),k()}function i(a){var b=cI(a,!0);if(b&&!G(b,e)){bb||bG(),e=b,cf(d,b),bg=!1;var c=b_();if(b.line>=c.to||b.line<c.from)f=setTimeout(cV(function(){i(a)}),150)}}for(var b=p(a);b!=w;b=b.parentNode)if(b.parentNode==J&&b!=Q)return;var c=bf;bf=null;for(var b=p(a);b!=w;b=b.parentNode)if(b.parentNode==S)return g.onGutterClick&&g.onGutterClick(bx,M(S.childNodes,b)+bm,a),m(a);var d=cI(a);switch(q(a)){case 3:u&&!z&&cJ(a);return;case 2:d&&ch(d.line,d.ch,!0);return}if(!d){p(a)==D&&m(a);return}bb||bG(),m(a);if(c&&+(new Date)-c<400)return co(d.line);ch(d.line,d.ch,!0);var e=d,f,j=r(n,"mousemove",cV(function(a){clearTimeout(f),m(a),i(a)}),!0),k=r(n,"mouseup",cV(function(a){clearTimeout(f);var b=cI(a);b&&cf(d,b),m(a),h()}),!0)}function bB(a){var b=cI(a);if(!b)return;cn(b),m(a),bf=+(new Date)}function bC(a){a.preventDefault();var b=cI(a,!0),c=a.dataTransfer.files;if(!b||g.readOnly)return;if(c&&c.length&&window.FileReader&&window.File){function d(a,c){var d=new FileReader;d.onload=function(){f[c]=d.result,++h==e&&bN(f.join(""),cj(b),cj(b))},d.readAsText(a)}var e=c.length,f=Array(e),h=0;for(var i=0;i<e;++i)d(c[i],i)}else try{var f=a.dataTransfer.getData("Text");f&&bN(f,b,b)}catch(a){}}function bD(a){bb||bG();var b=a.keyCode;v&&b==27&&(a.returnValue=!1);var c=(z?a.metaKey:a.ctrlKey)&&!a.altKey,d=a.ctrlKey||a.altKey||a.metaKey;b==16||a.shiftKey?bd=bd||(bc.inverted?bc.to:bc.from):bd=null;if(g.onKeyEvent&&g.onKeyEvent(bx,l(a)))return;if(b==33||b==34)return ck(b==34),m(a);if(c&&(b==36||b==35||z&&(b==38||b==40)))return cl(b==36||b==38),m(a);if(c&&b==65)return cm(),m(a);if(!g.readOnly){if(!d&&b==13)return;if(!d&&b==9&&cq(a.shiftKey))return m(a);if(c&&b==90)return bK(),m(a);if(c&&(a.shiftKey&&b==90||b==89))return bL(),m(a)}if(b==36&&g.smartHome)return cr(),m(a);bp=(c?"c":"")+(a.altKey?"a":"")+b;if(bc.inverted&&A[bp]===!0){var e=O(C);e&&(be={anchor:e.start},P(C,e.start,e.start))}!c&&!a.altKey&&(bp=null),bU(bp)}function bE(a){if(g.onKeyEvent&&g.onKeyEvent(bx,l(a)))return;be&&(be=null,bg=!0),a.keyCode==16&&(bd=null)}function bF(a){if(g.onKeyEvent&&g.onKeyEvent(bx,l(a)))return;if(g.electricChars&&Z.electricChars){var b=String.fromCharCode(a.charCode==null?a.keyCode:a.charCode);Z.electricChars.indexOf(b)>-1&&setTimeout(cV(function(){cs(bc.to.line,"smart")}),50)}var c=a.keyCode;c==13?(g.readOnly||cp(),m(a)):!a.ctrlKey&&!a.altKey&&!a.metaKey&&c==9&&g.tabMode!="default"?m(a):bU(bp)}function bG(){if(g.readOnly=="nocursor")return;bb||(g.onFocus&&g.onFocus(bx),bb=!0,w.className.search(/\bCodeMirror-focused\b/)==-1&&(w.className+=" CodeMirror-focused"),bk||bW()),bT(),cK()}function bH(){bb&&(g.onBlur&&g.onBlur(bx),bb=!1,w.className=w.className.replace(" CodeMirror-focused","")),clearInterval(Y),setTimeout(function(){bb||(bd=null)},150)}function bI(a,b,c,d,e){if(ba){var f=[];for(var h=a.line,i=b.line+1;h<i;++h)f.push($[h].text);ba.addChange(a.line,c.length,f);while(ba.done.length>g.undoDepth)ba.done.shift()}bM(a,b,c,d,e)}function bJ(a,b){var c=a.pop();if(c){var d=[],e=c.start+c.added;for(var f=c.start;f<e;++f)d.push($[f].text);b.push({start:c.start,added:c.old.length,old:d});var g=cj({line:c.start+c.old.length-1,ch:L(d[d.length-1],c.old[c.old.length-1])});bM({line:c.start,ch:0},{line:e-1,ch:$[e-1].text.length},c.old,g,g),bg=!0}}function bK(){bJ(ba.done,ba.undone)}function bL(){bJ(ba.undone,ba.done)}function bM(a,b,c,d,e){function s(a){return a<=Math.min(b.line,b.line+q)?a:a+q}var f=!1,g=bs.length;for(var i=a.line;i<=b.line;++i)if($[i].text.length==g){f=!0;break}var j=b.line-a.line,k=$[a.line],l=$[b.line];if(k==l)if(c.length==1)k.replace(a.ch,b.ch,c[0]);else{l=k.split(b.ch,c[c.length-1]);var m=[a.line+1,j];k.replace(a.ch,k.text.length,c[0]);for(var i=1,n=c.length-1;i<n;++i)m.push(new h(c[i]));m.push(l),$.splice.apply($,m)}else if(c.length==1)k.replace(a.ch,k.text.length,c[0]+l.text.slice(b.ch)),$.splice(a.line+1,j);else{var m=[a.line+1,j-1];k.replace(a.ch,k.text.length,c[0]),l.replace(0,b.ch,c[c.length-1]);for(var i=1,n=c.length-1;i<n;++i)m.push(new h(c[i]));$.splice.apply($,m)}for(var i=a.line,n=i+c.length;i<n;++i){var o=$[i].text;o.length>g&&(bs=o,g=o.length,bt=null,f=!1)}if(f){g=0,bs="",bt=null;for(var i=0,n=$.length;i<n;++i){var o=$[i].text;o.length>g&&(g=o.length,bs=o)}}var p=[],q=c.length-j-1;for(var i=0,o=_.length;i<o;++i){var r=_[i];r<a.line?p.push(r):r>b.line&&p.push(r+q)}c.length<5?(cP(a.line,a.line+c.length),p.push(a.line+c.length)):p.push(a.line),_=p,cR(100),bh.push({from:a.line,to:b.line+1,diff:q}),bi={from:a,to:b,text:c},cg(d,e,s(bc.from.line),s(bc.to.line)),J.style.height=$.length*cF()+2*cG()+"px"}function bN(a,b,c){function d(d){if(H(d,b))return d;if(!H(c,d))return e;var f=d.line+a.length-(c.line-b.line)-1,g=d.ch;return d.line==c.line&&(g+=a[a.length-1].length-(c.ch-(c.line==b.line?b.ch:0))),{line:f,ch:g}}b=cj(b),c?c=cj(c):c=b,a=N(a);var e;return bP(a,b,c,function(a){return e=a,{from:d(bc.from),to:d(bc.to)}}),e}function bO(a,b){bP(N(a),bc.from,bc.to,function(a){return b=="end"?{from:a,to:a}:b=="start"?{from:bc.from,to:bc.from}:{from:bc.from,to:a}})}function bP(a,b,c,d){var e=a.length==1?a[0].length+b.ch:a[a.length-1].length,f=d({line:b.line+a.length-1,ch:e});bI(b,c,a,f.from,f.to)}function bQ(a,b){var c=a.line,d=b.line;if(c==d)return $[c].text.slice(a.ch,b.ch);var e=[$[c].text.slice(a.ch)];for(var f=c+1;f<d;++f)e.push($[f].text);return e.push($[d].text.slice(0,b.ch)),e.join("\n")}function bR(){return bQ(bc.from,bc.to)}function bT(){if(bS)return;W.set(2e3,function(){cS(),bV(),bb&&bT(),cT()})}function bU(a){function c(){cS();var d=bV();d&&a&&(d=="moved"&&A[a]==null&&(A[a]=!0),d=="changed"&&(A[a]=!1)),!d&&!b?(b=!0,W.set(80,c)):(bS=!1,bT()),cT()}var b=!1;bS=!0,W.set(20,c)}function bV(){function f(a,c){var d=0;for(;;){var e=b.indexOf("\n",d);if(e==-1||(b.charAt(e-1)=="\r"?e-1:e)>=a)return{line:c,ch:a-d};++c,d=e+1}}if(bk||!bb)return;var a=!1,b=C.value,c=O(C);if(!c)return!1;var a=bq.text!=b,d=be,e=a||c.start!=bq.start||c.end!=(d?bq.start:bq.end);if(!e&&!d)return!1;if(a){bd=be=null;if(g.readOnly)return bg=!0,"changed"}var h=f(c.start,bq.from),i=f(c.end,bq.from);if(d){var j=c.start==d.anchor?i:h,k=bd?bc.to:c.start==d.anchor?h:i;(bc.inverted=H(j,k))?(h=j,i=k):(be=null,h=k,i=j)}h.line==i.line&&h.line==bc.from.line&&h.line==bc.to.line&&!bd&&(bg=!1);if(a){var l=0,m=b.length,n=Math.min(m,bq.text.length),o,p=bq.from,q=-1;while(l<n&&(o=b.charAt(l))==bq.text.charAt(l))++l,o=="\n"&&(p++,q=l);var r=q>-1?l-q:l,s=bq.to-1,t=bq.text.length;for(;;){o=bq.text.charAt(t);if(b.charAt(m)!=o){++m,++t;break}o=="\n"&&s--;if(t<=l||m<=l)break;--m,--t}var q=bq.text.lastIndexOf("\n",t-1),u=q==-1?t:t-q-1;bI({line:p,ch:r},{line:s,ch:u},N(b.slice(l,m)),h,i);if(p!=s||h.line!=p)bg=!0}else cg(h,i);return bq.text=b,bq.start=c.start,bq.end=c.end,a?"changed":e?"moved":!1}function bW(){var a=[],b=Math.max(0,bc.from.line-1),c=Math.min($.length,bc.to.line+2);for(var d=b;d<c;++d)a.push($[d].text);a=C.value=a.join(x);var e=bc.from.ch,f=bc.to.ch;for(var d=b;d<bc.from.line;++d)e+=x.length+$[d].text.length;for(var d=b;d<bc.to.line;++d)f+=x.length+$[d].text.length;bq={text:a,from:b,to:c,start:e,end:f},P(C,e,be?e:f)}function bX(){g.readOnly!="nocursor"&&C.focus()}function bY(){if(!U.getBoundingClientRect)return;var a=U.getBoundingClientRect(),b=window.innerHeight||document.body.offsetHeight||document.documentElement.offsetHeight;(a.top<0||a.bottom>b)&&U.scrollIntoView()}function bZ(){var a=cD(bc.inverted?bc.from:bc.to);return b$(a.x,a.y,a.x,a.yBot)}function b$(a,b,c,d){var e=cH(),f=cG(),h=cF();b+=f,d+=f,a+=e,c+=e;var i=D.clientHeight,j=D.scrollTop,k=!1,l=!0;b<j?(D.scrollTop=Math.max(0,b-2*h),k=!0):d>j+i&&(D.scrollTop=d+h-i,k=!0);var m=D.clientWidth,n=D.scrollLeft,o=g.fixedGutter?R.clientWidth:0;return a<n+o?(a<50&&(a=0),D.scrollLeft=Math.max(0,a-10-o),k=!0):c>m+n&&(D.scrollLeft=c+10-m,k=!0,c>J.clientWidth&&(l=!1)),k&&g.onScroll&&g.onScroll(bx),l}function b_(){var a=cF(),b=D.scrollTop-cG();return{from:Math.min($.length,Math.max(0,Math.floor(b/a))),to:Math.min($.length,Math.ceil((b+D.clientHeight)/a))}}function ca(a){if(!D.clientWidth){bm=bn=0;return}var b=a===!0?[]:[{from:bm,to:bn,domStart:0}];for(var c=0,d=a.length||0;c<d;++c){var e=a[c],f=[],g=e.diff||0;for(var h=0,i=b.length;h<i;++h){var j=b[h];e.to<=j.from?f.push({from:j.from+g,to:j.to+g,domStart:j.domStart}):j.to<=e.from?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from,domStart:j.domStart}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g,domStart:j.domStart+(e.to-j.from)}))}b=f}var k=b_(),l=Math.min(bm,Math.max(k.from-3,0)),m=Math.min($.length,Math.max(bn,k.to+3)),n=[],o=0,p=bn-bm,q=l,r=0;for(var c=0,d=b.length;c<d;++c){var j=b[c];if(j.to<=l)continue;if(j.from>=m)break;if(j.domStart>o||j.from>q)n.push({from:q,to:j.from,domSize:j.domStart-o,domStart:o}),r+=j.from-q;q=j.to,o=j.domStart+(j.to-j.from)}if(o!=p||q!=m)r+=Math.abs(m-q),n.push({from:q,to:m,domSize:p-o,domStart:o}),m-q!=p-o&&(bl=!0);if(!n.length)return;V.style.display="none",r>(k.to-k.from)*.3?cb(l=Math.max(k.from-10,0),m=Math.min(k.to+7,$.length)):cc(n),V.style.display="";var s=l!=bm||m!=bn||bo!=D.clientHeight;bm=l,bn=m,Q.style.top=l*cF()+"px",s&&(bo=D.clientHeight,J.style.height=$.length*cF()+2*cG()+"px"),(s||bl)&&cd(),bt==null&&(bt=cA(bs)),bt>D.clientWidth?(T.style.width=bt+"px",J.style.width="",J.style.width=D.scrollWidth+"px"):T.style.width=J.style.width="";if(V.childNodes.length!=bn-bm)throw new Error("BAD PATCH! "+JSON.stringify(n)+" size="+(bn-bm)+" nodes="+V.childNodes.length);ce()}function cb(a,b){var c=[],d={line:a,ch:0},e=H(bc.from,d)&&!H(bc.to,d);for(var f=a;f<b;++f){var g=null,h=null;e?(g=0,bc.to.line==f&&(e=!1,h=bc.to.ch)):bc.from.line==f&&(bc.to.line==f?(g=bc.from.ch,h=bc.to.ch):(e=!0,g=bc.from.ch)),c.push($[f].getHTML(g,h,!0))}V.innerHTML=c.join("")}function cc(a){var b=bc.from.line,c=bc.to.line,d=0,e=t&&n.createElement("div");for(var f=0,g=a.length;f<g;++f){var h=a[f],i=h.to-h.from-h.domSize,j=V.childNodes[h.domStart+h.domSize+d]||null;if(t)for(var k=Math.max(-i,h.domSize);k>0;--k)V.removeChild(j?j.previousSibling:V.lastChild);else if(i){for(var k=Math.max(0,i);k>0;--k)V.insertBefore(n.createElement("pre"),j);for(var k=Math.max(0,-i);k>0;--k)V.removeChild(j?j.previousSibling:V.lastChild)}var l=V.childNodes[h.domStart+d],m=b<h.from&&c>=h.from;for(var k=h.from;k<h.to;++k){var o=null,p=null;m?(o=0,c==k&&(m=!1,p=bc.to.ch)):b==k&&(c==k?(o=bc.from.ch,p=bc.to.ch):(m=!0,o=bc.from.ch)),t?(e.innerHTML=$[k].getHTML(o,p,!0),V.insertBefore(e.firstChild,j)):(l.innerHTML=$[k].getHTML(o,p,!1),l.className=$[k].className||"",l=l.nextSibling)}d+=i}}function cd(){if(!g.gutter&&!g.lineNumbers)return;var a=Q.offsetHeight,b=D.clientHeight;R.style.height=(a-b<2?b:a)+"px";var c=[];for(var d=bm;d<Math.max(bn,bm+1);++d){var e=$[d].gutterMarker,f=g.lineNumbers?d+g.firstLineNumber:null;e&&e.text?f=e.text.replace("%N%",f!=null?f:""):f==null&&(f="\u00a0"),c.push(e&&e.style?'<pre class="'+e.style+'">':"<pre>",f,"</pre>")}R.style.display="none",S.innerHTML=c.join("");var h=String($.length).length,i=S.firstChild,j=F(i),k="";while(j.length+k.length<h)k+="\u00a0";k&&i.insertBefore(n.createTextNode(k),i.firstChild),R.style.display="",T.style.marginLeft=R.offsetWidth+"px",bl=!1}function ce(){var a=bc.inverted?bc.from:bc.to,b=cF(),c=cB(a.line,a.ch);B.style.top=a.line*b-D.scrollTop+"px",B.style.left=c-D.scrollLeft+"px",G(bc.from,bc.to)?(U.style.top=(a.line-bm)*b+"px",U.style.left=c+"px",U.style.display=""):U.style.display="none"}function cf(a,b){var c=bd&&cj(bd);c&&(H(c,a)?a=c:H(b,c)&&(b=c)),cg(a,b)}function cg(a,b,c,d){if(G(bc.from,a)&&G(bc.to,b))return;if(H(b,a)){var e=b;b=a,a=e}G(a,b)?bc.inverted=!1:G(a,bc.to)?bc.inverted=!1:G(b,bc.from)&&(bc.inverted=!0),c==null&&(c=bc.from.line,d=bc.to.line),G(a,b)?G(bc.from,bc.to)||bh.push({from:c,to:d+1}):G(bc.from,bc.to)?bh.push({from:a.line,to:b.line+1}):(G(a,bc.from)||(a.line<c?bh.push({from:a.line,to:Math.min(b.line,c)+1}):bh.push({from:c,to:Math.min(d,a.line)+1})),G(b,bc.to)||(b.line<d?bh.push({from:Math.max(c,a.line),to:d+1}):bh.push({from:Math.max(a.line,d),to:b.line+1}))),bc.from=a,bc.to=b,bj=!0}function ch(a,b,c){var d=cj({line:a,ch:b||0});(c?cf:cg)(d,d)}function ci(a){return Math.max(0,Math.min(a,$.length-1))}function cj(a){if(a.line<0)return{line:0,ch:0};if(a.line>=$.length)return{line:$.length-1,ch:$[$.length-1].text.length};var b=a.ch,c=$[a.line].text.length;return b==null||b>c?{line:a.line,ch:c}:b<0?{line:a.line,ch:0}:a}function ck(a){var b=Math.floor(D.clientHeight/cF()),c=bc.inverted?bc.from:bc.to;ch(c.line+Math.max(b-1,1)*(a?1:-1),c.ch,!0)}function cl(a){var b=a?{line:0,ch:0}:{line:$.length-1,ch:$[$.length-1].text.length};cf(b,b)}function cm(){var a=$.length-1;cg({line:0,ch:0},{line:a,ch:$[a].text.length})}function cn(a){var b=$[a.line].text,c=a.ch,d=a.ch;while(c>0&&/\w/.test(b.charAt(c-1)))--c;while(d<b.length&&/\w/.test(b.charAt(d)))++d;cf({line:a.line,ch:c},{line:a.line,ch:d})}function co(a){cf({line:a,ch:0},{line:a,ch:$[a].text.length})}function cp(){bO("\n","end"),g.enterMode!="flat"&&cs(bc.from.line,g.enterMode=="keep"?"prev":"smart")}function cq(a){function b(a){if(G(bc.from,bc.to))return cs(bc.from.line,a);var b=bc.to.line-(bc.to.ch?0:1);for(var c=bc.from.line;c<=b;++c)cs(c,a)}bd=null;switch(g.tabMode){case"default":return!1;case"indent":b("smart");break;case"classic":if(G(bc.from,bc.to)){a?cs(bc.from.line,"smart"):bO("\t","end");break};case"shift":b(a?"subtract":"add")}return!0}function cr(){var a=Math.max(0,$[bc.from.line].text.search(/\S/));ch(bc.from.line,bc.from.ch<=a&&bc.from.ch?0:a,!0)}function cs(a,b){if(b=="smart")if(!Z.indent)b="prev";else var c=cO(a);var d=$[a],e=d.indentation(),f=d.text.match(/^\s*/)[0],h;b=="prev"?a?h=$[a-1].indentation():h=0:b=="smart"?h=Z.indent(c,d.text.slice(f.length)):b=="add"?h=e+g.indentUnit:b=="subtract"&&(h=e-g.indentUnit),h=Math.max(0,h);var i=h-e;if(!i){if(bc.from.line!=a&&bc.to.line!=a)return;var j=f}else{var j="",k=0;if(g.indentWithTabs)for(var l=Math.floor(h/y);l;--l)k+=y,j+="\t";while(k<h)++k,j+=" "}bN(j,{line:a,ch:0},{line:a,ch:f.length})}function ct(){Z=a.getMode(g,g.mode);for(var b=0,c=$.length;b<c;++b)$[b].stateAfter=null;_=[0],cR()}function cu(){var a=g.gutter||g.lineNumbers;R.style.display=a?"":"none",a?bl=!0:V.parentNode.style.marginLeft=0}function cv(a,b,c){function e(a,b,c,e){var a=$[a],f=a.addMark(b,c,e);f.line=a,d.push(f)}a=cj(a),b=cj(b);var d=[];if(a.line==b.line)e(a.line,a.ch,b.ch,c);else{e(a.line,a.ch,null,c);for(var f=a.line+1,g=b.line;f<g;++f)e(f,0,null,c);e(b.line,0,b.ch,c)}return bh.push({from:a.line,to:b.line+1}),function(){var a,b;for(var c=0;c<d.length;++c){var e=d[c],f=M($,e.line);e.line.removeMark(e),f>-1&&(a==null&&(a=f),b=f)}a!=null&&bh.push({from:a,to:b+1})}}function cw(a,b,c){return typeof a=="number"&&(a=$[ci(a)]),a.gutterMarker={text:b,style:c},bl=!0,a}function cx(a){typeof a=="number"&&(a=$[ci(a)]),a.gutterMarker=null,bl=!0}function cy(a,b){if(typeof a=="number"){var c=a;a=$[ci(a)]}else{var c=M($,a);if(c==-1)return null}return a.className!=b&&(a.className=b,bh.push({from:c,to:c+1})),a}function cz(a){if(typeof a=="number"){var b=a;a=$[a];if(!a)return null}else{var b=M($,a);if(b==-1)return null}var c=a.gutterMarker;return{line:b,text:a.text,markerText:c&&c.text,markerClass:c&&c.style}}function cA(a){return K.innerHTML="<pre><span>x</span></pre>",K.firstChild.firstChild.firstChild.nodeValue=a,K.firstChild.firstChild.offsetWidth||10}function cB(a,b){return b==0?0:(K.innerHTML="<pre><span>"+$[a].getHTML(null,null,!1,b)+"</span></pre>",K.firstChild.firstChild.offsetWidth)}function cC(a,b){function e(a){return K.innerHTML="<pre><span>"+c.getHTML(null,null,!1,a)+"</span></pre>",K.firstChild.firstChild.offsetWidth}if(b<=0)return 0;var c=$[a],d=c.text,f=0,g=0,h=d.length,i,j=Math.min(h,Math.ceil(b/cA("x")));for(;;){var k=e(j);if(k<=b&&j<h)j=Math.min(h,Math.ceil(j*1.2));else{i=k,h=j;break}}if(b>i)return h;j=Math.floor(h*.8),k=e(j),k<b&&(f=j,g=k);for(;;){if(h-f<=1)return i-b>b-g?f:h;var l=Math.ceil((f+h)/2),m=e(l);m>b?(h=l,i=m):(f=l,g=m)}}function cD(a,b){var c=cF(),d=a.line-(b?bm:0);return{x:cB(a.line,a.ch),y:d*c,yBot:(d+1)*c}}function cE(a){var b=cD(a,!0),c=E(T);return{x:c.left+b.x,y:c.top+b.y,yBot:c.top+b.yBot}}function cF(){var a=V.childNodes.length;return a?V.offsetHeight/a||1:(K.innerHTML="<pre>x</pre>",K.firstChild.offsetHeight||1)}function cG(){return T.offsetTop}function cH(){return T.offsetLeft}function cI(a,b){var c=E(D,!0),d,e;try{d=a.clientX,e=a.clientY}catch(a){return null}if(!b&&(d-c.left>D.clientWidth||e-c.top>D.clientHeight))return null;var f=E(T,!0),g=bm+Math.floor((e-f.top)/cF());return cj({line:g,ch:cC(ci(g),d-f.left)})}function cJ(a){function e(){var a=N(C.value).join("\n");a!=d&&cV(bO)(a,"end"),B.style.position="relative",C.style.cssText=c,bk=!1,bW(),bT()}var b=cI(a);if(!b||window.opera)return;(G(bc.from,bc.to)||H(b,bc.from)||!H(b,bc.to))&&cV(ch)(b.line,b.ch);var c=C.style.cssText;B.style.position="absolute",C.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(a.clientY-5)+"px; left: "+(a.clientX-5)+"px; z-index: 1000; background: white; "+"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",bk=!0;var d=C.value=bR();bX(),P(C,0,C.value.length);if(u){o(a);var f=r(window,"mouseup",function(){f(),setTimeout(e,20)},!0)}else setTimeout(e,50)}function cK(){clearInterval(Y);var a=!0;U.style.visibility="",Y=setInterval(function(){U.style.visibility=(a=!a)?"":"hidden"},650)}function cM(a){function p(a,b,c){if(!a.text)return;var d=a.styles,e=g?0:a.text.length-1,f;for(var i=g?0:d.length-2,j=g?d.length:-2;i!=j;i+=2*h){var k=d[i];if(d[i+1]!=null&&d[i+1]!=m){e+=h*k.length;continue}for(var l=g?0:k.length-1,p=g?k.length:-1;l!=p;l+=h,e+=h)if(e>=b&&e<c&&o.test(f=k.charAt(l))){var q=cL[f];if(q.charAt(1)==">"==g)n.push(f);else{if(n.pop()!=q.charAt(0))return{pos:e,match:!1};if(!n.length)return{pos:e,match:!0}}}}}var b=bc.inverted?bc.from:bc.to,c=$[b.line],d=b.ch-1,e=d>=0&&cL[c.text.charAt(d)]||cL[c.text.charAt(++d)];if(!e)return;var f=e.charAt(0),g=e.charAt(1)==">",h=g?1:-1,i=c.styles;for(var j=d+1,k=0,l=i.length;k<l;k+=2)if((j-=i[k].length)<=0){var m=i[k+1];break}var n=[c.text.charAt(d)],o=/[(){}[\]]/;for(var k=b.line,l=g?Math.min(k+100,$.length):Math.max(-1,k-100);k!=l;k+=h){var c=$[k],q=k==b.line,r=p(c,q&&g?d+1:0,q&&!g?d:c.text.length);if(r)break}r||(r={pos:null,match:!1});var m=r.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket",s=cv({line:b.line,ch:d},{line:b.line,ch:d+1},m),t=r.pos!=null?cv({line:k,ch:r.pos},{line:k,ch:r.pos+1},m):function(){},u=cV(function(){s(),t()});a?setTimeout(u,800):br=u}function cN(a){var b,c;for(var d=a,e=a-40;d>e;--d){if(d==0)return 0;var f=$[d-1];if(f.stateAfter)return d;var g=f.indentation();if(c==null||b>g)c=d-1,b=g}return c}function cO(a){var b=cN(a),c=b&&$[b-1].stateAfter;c?c=e(Z,c):c=f(Z);for(var d=b;d<a;++d){var g=$[d];g.highlight(Z,c),g.stateAfter=e(Z,c)}return a<$.length&&!$[a].stateAfter&&_.push(a),c}function cP(a,b){var c=cO(a);for(var d=a;d<b;++d){var f=$[d];f.highlight(Z,c),f.stateAfter=e(Z,c)}}function cQ(){var a=+(new Date)+g.workTime,b=_.length;while(_.length){if(!$[bm].stateAfter)var c=bm;else var c=_.pop();if(c>=$.length)continue;var d=cN(c),h=d&&$[d-1].stateAfter;h?h=e(Z,h):h=f(Z);var i=0,j=Z.compareStates,k=!1;for(var l=d,m=$.length;l<m;++l){var n=$[l],o=n.stateAfter;if(+(new Date)>a){_.push(l),cR(g.workDelay),k&&bh.push({from:c,to:l+1});return}var p=n.highlight(Z,h);p&&(k=!0),n.stateAfter=e(Z,h);if(j){if(o&&j(o,h))break}else if(p!==!1||!o)i=0;else if(++i>3)break}k&&bh.push({from:c,to:l+1})}b&&g.onHighlightComplete&&g.onHighlightComplete(bx)}function cR(a){if(!_.length)return;X.set(a,cV(cQ))}function cS(){bg=null,bh=[],bi=bj=!1}function cT(){var a=!1;bj&&(a=!bZ()),bh.length?ca(bh):(bj&&ce(),bl&&cd()),a&&bZ(),bj&&(bY(),cK()),bb&&!bk&&(bg===!0||bg!==!1&&bj)&&bW(),bj&&g.matchBrackets&&setTimeout(cV(function(){br&&(br(),br=null),cM(!1)}),20);var b=bi;bj&&g.onCursorActivity&&g.onCursorActivity(bx),b&&g.onChange&&bx&&g.onChange(bx,b)}function cV(a){return function(){cU++||cS();try{var b=a.apply(this,arguments)}finally{--cU||cT()}return b}}function cW(a,b,c){this.atOccurrence=!1,c==null&&(c=typeof a=="string"&&a==a.toLowerCase()),b&&typeof b=="object"?b=cj(b):b={line:0,ch:0},this.pos={from:b,to:b};if(typeof a!="string")this.matches=function(b,c){if(b){var d=$[c.line].text.slice(0,c.ch),e=d.match(a),f=0;while(e){var g=d.indexOf(e[0]);f+=g,d=d.slice(g+1);var h=d.match(a);if(h)e=h;else break;f++}}else var d=$[c.line].text.slice(c.ch),e=d.match(a),f=e&&c.ch+d.indexOf(e[0]);if(e)return{from:{line:c.line,ch:f},to:{line:c.line,ch:f+e[0].length},match:e}};else{c&&(a=a.toLowerCase());var d=c?function(a){return a.toLowerCase()}:function(a){return a},e=a.split("\n");e.length==1?this.matches=function(b,c){var e=d($[c.line].text),f=a.length,g;if(b?c.ch>=f&&(g=e.lastIndexOf(a,c.ch-f))!=-1:(g=e.indexOf(a,c.ch))!=-1)return{from:{line:c.line,ch:g},to:{line:c.line,ch:g+f}}}:this.matches=function(a,b){var c=b.line,f=a?e.length-1:0,g=e[f],h=d($[c].text),i=a?h.indexOf(g)+g.length:h.lastIndexOf(g);if(a?i>=b.ch||i!=g.length:i<=b.ch||i!=h.length-g.length)return;for(;;){if(a?!c:c==$.length-1)return;h=d($[c+=a?-1:1].text),g=e[a?--f:++f];if(f>0&&f<e.length-1){if(h!=g)return;continue}var j=a?h.lastIndexOf(g):h.indexOf(g)+g.length;if(a?j!=h.length-g.length:j!=g.length)return;var k={line:b.line,ch:i},l={line:c,ch:j};return{from:a?l:k,to:a?k:l}}}}}var g={},i=a.defaults;for(var k in i)i.hasOwnProperty(k)&&(g[k]=(c&&c.hasOwnProperty(k)?c:i)[k]);var n=g.document,w=n.createElement("div");w.className="CodeMirror",w.innerHTML='<div style="overflow: hidden; position: relative; width: 1px; height: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-'+g.theme+'">'+'<div style="position: relative">'+'<div style="position: absolute; height: 0; width: 0; overflow: hidden;"></div>'+'<div style="position: relative">'+'<div class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div>'+'<div class="CodeMirror-lines"><div style="position: relative">'+'<pre class="CodeMirror-cursor">&#160;</pre>'+"<div></div>"+"</div></div></div></div></div>",b.appendChild?b.appendChild(w):b(w);var B=w.firstChild,C=B.firstChild,D=w.lastChild,J=D.firstChild,K=J.firstChild,Q=K.nextSibling,R=Q.firstChild,S=R.firstChild,T=R.nextSibling.firstChild,U=T.firstChild,V=U.nextSibling;g.tabindex!=null&&(C.tabindex=g.tabindex),!g.gutter&&!g.lineNumbers&&(R.style.display="none");var W=new s,X=new s,Y,Z,$=[new h("")],_,ba=new j,bb;ct();var bc={from:{line:0,ch:0},to:{line:0,ch:0},inverted:!1},bd,be,bf,bg,bh,bi,bj,bk,bl,bm=0,bn=0,bo=0,bp=null,bq,br,bs="",bt;cV(function(){by(g.value||""),bg=!1})(),r(D,"mousedown",cV(bA)),u||r(D,"contextmenu",cJ),r(J,"dblclick",cV(bB)),r(D,"scroll",function(){ca([]),g.fixedGutter&&(R.style.left=D.scrollLeft+"px"),g.onScroll&&g.onScroll(bx)}),r(window,"resize",function(){ca(!0)}),r(C,"keyup",cV(bE)),r(C,"keydown",cV(bD)),r(C,"keypress",cV(bF)),r(C,"focus",bG),r(C,"blur",bH),r(D,"dragenter",o),r(D,"dragover",o),r(D,"drop",cV(bC)),r(D,"paste",function(){bX(),bU()}),r(C,"paste",function(){bU()}),r(C,"cut",function(){bU()});var bu;try{bu=n.activeElement==C}catch(bv){}bu?setTimeout(bG,20):bH();var bx=w.CodeMirror={getValue:bz,setValue:cV(by),getSelection:bR,replaceSelection:cV(bO),focus:function(){bX(),bG(),bU()},setOption:function(a,b){g[a]=b,a=="lineNumbers"||a=="gutter"||a=="firstLineNumber"?cV(cu)():a=="mode"||a=="indentUnit"?ct():a=="readOnly"&&b=="nocursor"?C.blur():a=="theme"&&(D.className=D.className.replace(/cm-s-\w+/,"cm-s-"+b))},getOption:function(a){return g[a]},undo:cV(bK),redo:cV(bL),indentLine:cV(function(a,b){bw(a)&&cs(a,b==null?"smart":b?"add":"subtract")}),historySize:function(){return{undo:ba.done.length,redo:ba.undone.length}},matchBrackets:cV(function(){cM(!0)}),getTokenAt:function(a){return a=cj(a),$[a.line].getTokenAt(Z,cO(a.line),a.ch)},getStateAfter:function(a){return a=ci(a==null?$.length-1:a),cO(a+1)},cursorCoords:function(a){return a==null&&(a=bc.inverted),cE(a?bc.from:bc.to)},charCoords:function(a){return cE(cj(a))},coordsChar:function(a){var b=E(T),c=ci(Math.min($.length-1,bm+Math.floor((a.y-b.top)/cF())));return cj({line:c,ch:cC(ci(c),a.x-b.left)})},getSearchCursor:function(a,b,c){return new cW(a,b,c)},markText:cV(function(a,b,c){return cV(cv(a,b,c))}),setMarker:cV(cw),clearMarker:cV(cx),setLineClass:cV(cy),lineInfo:cz,addWidget:function(a,b,c,d,e){a=cD(cj(a));var f=a.yBot,g=a.x;b.style.position="absolute",J.appendChild(b);if(d=="over")f=a.y;else if(d=="near"){var h=Math.max(D.offsetHeight,$.length*cF()),i=Math.max(J.clientWidth,T.clientWidth)-cH();a.yBot+b.offsetHeight>h&&a.y>b.offsetHeight&&(f=a.y-b.offsetHeight),g+b.offsetWidth>i&&(g=i-b.offsetWidth)}b.style.top=f+cG()+"px",b.style.left=b.style.right="",e=="right"?(g=J.clientWidth-b.offsetWidth,b.style.right="0px"):(e=="left"?g=0:e=="middle"&&(g=(J.clientWidth-b.offsetWidth)/2),b.style.left=g+cH()+"px"),c&&b$(g,f,g+b.offsetWidth,f+b.offsetHeight)},lineCount:function(){return $.length},getCursor:function(a){return a==null&&(a=bc.inverted),I(a?bc.from:bc.to)},somethingSelected:function(){return!G(bc.from,bc.to)},setCursor:cV(function(a,b){b==null&&typeof a.line=="number"?ch(a.line,a.ch):ch(a,b)}),setSelection:cV(function(a,b){cg(cj(a),cj(b||a))}),getLine:function(a){if(bw(a))return $[a].text},setLine:cV(function(a,b){bw(a)&&bN(b,{line:a,ch:0},{line:a,ch:$[a].text.length})}),removeLine:cV(function(a){bw(a)&&bN("",{line:a,ch:0},cj({line:a+1,ch:0}))}),replaceRange:cV(bN),getRange:function(a,b){return bQ(cj(a),cj(b))},operation:function(a){return cV(a)()},refresh:function(){ca(!0)},getInputField:function(){return C},getWrapperElement:function(){return w},getScrollerElement:function(){return D},getGutterElement:function(){return R}},bS=!1,cL={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<"},cU=0;cW.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(a){function d(a){var c={line:a,ch:0};return b.pos={from:c,to:c},b.atOccurrence=!1,!1}var b=this,c=cj(a?this.pos.from:this.pos.to);for(;;){if(this.pos=this.matches(a,c))return this.atOccurrence=!0,this.pos.match||!0;if(a){if(!c.line)return d(0);c={line:c.line-1,ch:$[c.line-1].text.length}}else{if(c.line==$.length-1)return d($.length);c={line:c.line+1,ch:0}}}},from:function(){if(this.atOccurrence)return I(this.pos.from)},to:function(){if(this.atOccurrence)return I(this.pos.to)},replace:function(a){var b=this;this.atOccurrence&&cV(function(){b.pos.to=bN(a,b.pos.from,b.pos.to)})()}};for(var cX in d)d.propertyIsEnumerable(cX)&&!bx.propertyIsEnumerable(cX)&&(bx[cX]=d[cX]);return bx}function e(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function f(a,b,c){return a.startState?a.startState(b,c):!0}function g(a){this.pos=this.start=0,this.string=a}function h(a,b){this.styles=b||[a,null],this.stateAfter=null,this.text=a,this.marked=this.gutterMarker=this.className=null}function i(a,b,c,d){for(var e=0,f=0,g=0;f<b;e+=2){var h=c[e],i=f+h.length;g==0?(i>a&&d.push(h.slice(a-f,Math.min(h.length,b-f)),c[e+1]),i>=a&&(g=1)):g==1&&(i>b?d.push(h.slice(0,b-f),c[e+1]):d.push(h,c[e+1])),f=i}}function j(){this.time=0,this.done=[],this.undone=[]}function k(){o(this)}function l(a){return a.stop||(a.stop=k),a}function m(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function n(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function o(a){m(a),n(a)}function p(a){return a.target||a.srcElement}function q(a){if(a.which)return a.which;if(a.button&1)return 1;if(a.button&2)return 3;if(a.button&4)return 2}function r(a,b,c,d){function e(a){c(a||window.event)}if(typeof a.addEventListener=="function"){a.addEventListener(b,e,!1);if(d)return function(){a.removeEventListener(b,e,!1)}}else{a.attachEvent("on"+b,e);if(d)return function(){a.detachEvent("on"+b,e)}}}function s(){this.id=null}function C(a,b){b==null&&(b=a.search(/[^\s\u00a0]/),b==-1&&(b=a.length));for(var c=0,d=0;c<b;++c)a.charAt(c)=="\t"?d+=y-d%y:++d;return d}function D(a){return a.currentStyle?a.currentStyle:window.getComputedStyle(a,null)}function E(a,b){var c=a.ownerDocument.body,d=0,e=0,f=!1;for(var g=a;g;g=g.offsetParent)d+=g.offsetLeft,e+=g.offsetTop,b&&D(g).position=="fixed"&&(f=!0);var h=b&&!f?null:c;for(var g=a.parentNode;g!=h;g=g.parentNode)g.scrollLeft!=null&&(d-=g.scrollLeft,e-=g.scrollTop);return{left:d,top:e}}function F(a){return a.textContent||a.innerText||a.nodeValue||""}function G(a,b){return a.line==b.line&&a.ch==b.ch}function H(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function I(a){return{line:a.line,ch:a.ch}}function K(a){return J.innerText=J.textContent=a,J.innerHTML}function L(a,b){if(!b)return a?a.length:0;if(!a)return b.length;for(var c=a.length,d=b.length;c>=0&&d>=0;--c,--d)if(a.charAt(c)!=b.charAt(d))break;return d+1}function M(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;++c)if(a[c]==b)return c;return-1}a.defaults={value:"",mode:null,theme:"default",indentUnit:2,indentWithTabs:!1,tabMode:"classic",enterMode:"indent",electricChars:!0,onKeyEvent:null,lineNumbers:!1,gutter:!1,fixedGutter:!1,firstLineNumber:1,readOnly:!1,smartHome:!0,onChange:null,onCursorActivity:null,onGutterClick:null,onHighlightComplete:null,onFocus:null,onBlur:null,onScroll:null,matchBrackets:!1,workTime:100,workDelay:200,undoDepth:40,tabindex:null,document:window.document};var b={},c={};a.defineMode=function(c,d){!a.defaults.mode&&c!="null"&&(a.defaults.mode=c),b[c]=d},a.defineMIME=function(a,b){c[a]=b},a.getMode=function(d,e){typeof e=="string"&&c.hasOwnProperty(e)&&(e=c[e]);if(typeof e=="string")var f=e,g={};else if(e!=null)var f=e.name,g=e;var h=b[f];return h?h(d,g||{}):(window.console&&console.warn("No mode "+f+" found, falling back to plain text."),a.getMode(d,"text/plain"))},a.listModes=function(){var a=[];for(var c in b)b.propertyIsEnumerable(c)&&a.push(c);return a},a.listMIMEs=function(){var a=[];for(var b in c)c.propertyIsEnumerable(b)&&a.push(b);return a};var d={};a.defineExtension=function(a,b){d[a]=b},a.fromTextArea=function(b,c){function d(){b.value=h.getValue()}c||(c={}),c.value=b.value,!c.tabindex&&b.tabindex&&(c.tabindex=b.tabindex);if(b.form){var e=r(b.form,"submit",d,!0);if(typeof b.form.submit=="function"){var f=b.form.submit;function g(){d(),b.form.submit=f,b.form.submit(),b.form.submit=g}b.form.submit=g}}b.style.display="none";var h=a(function(a){b.parentNode.insertBefore(a,b.nextSibling)},c);return h.save=d,h.toTextArea=function(){d(),b.parentNode.removeChild(h.getWrapperElement()),b.style.display="",b.form&&(e(),typeof b.form.submit=="function"&&(b.form.submit=f))},h},a.startState=f,a.copyState=e,g.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==0},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(a){var b=this.string.charAt(this.pos);if(typeof a=="string")var c=b==a;else var c=b&&(a.test?a.test(b):a(b));if(c)return++this.pos,b},eatWhile:function(a){var b=this.pos;while(this.eat(a));return this.pos>b},eatSpace:function(){var a=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return C(this.string,this.start)},indentation:function(){return C(this.string)},match:function(a,b,c){if(typeof a!="string"){var e=this.string.slice(this.pos).match(a);return e&&b!==!1&&(this.pos+=e[0].length),e}function d(a){return c?a.toLowerCase():a}if(d(this.string).indexOf(d(a),this.pos)==this.pos)return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},a.StringStream=g,h.prototype={replace:function(a,b,c){var d=[],e=this.marked;i(0,a,this.styles,d),c&&d.push(c,null),i(b,this.text.length,this.styles,d),this.styles=d,this.text=this.text.slice(0,a)+c+this.text.slice(b),this.stateAfter=null;if(e){var f=c.length-(b-a),g=this.text.length;function h(a){return a<=Math.min(b,b+f)?a:a+f}for(var j=0;j<e.length;++j){var k=e[j],l=!1;k.from>=g?l=!0:(k.from=h(k.from),k.to!=null&&(k.to=h(k.to)));if(l||k.from>=k.to)e.splice(j,1),j--}}},split:function(a,b){var c=[b,null];return i(a,this.text.length,this.styles,c),new h(b+this.text.slice(a),c)},addMark:function(a,b,c){var d=this.marked,e={from:a,to:b,style:c};return this.marked==null&&(this.marked=[]),this.marked.push(e),this.marked.sort(function(a,b){return a.from-b.from}),e},removeMark:function(a){var b=this.marked;if(!b)return;for(var c=0;c<b.length;++c)if(b[c]==a){b.splice(c,1);break}},highlight:function(a,b){var c=new g(this.text),d=this.styles,e=0,f=!1,h=d[0],i;this.text==""&&a.blankLine&&a.blankLine(b);while(!c.eol()){var j=a.token(c,b),k=this.text.slice(c.start,c.pos);c.start=c.pos,e&&d[e-1]==j?d[e-2]+=k:k&&(!f&&(d[e+1]!=j||e&&d[e-2]!=i)&&(f=!0),d[e++]=k,d[e++]=j,i=h,h=d[e]);if(c.pos>5e3){d[e++]=this.text.slice(c.pos),d[e++]=null;break}}return d.length!=e&&(d.length=e,f=!0),e&&d[e-2]!=i&&(f=!0),f||(d.length<5&&this.text.length<10?null:!1)},getTokenAt:function(a,b,c){var d=this.text,e=new g(d);while(e.pos<c&&!e.eol()){e.start=e.pos;var f=a.token(e,b)}return{start:e.start,end:e.pos,string:e.current(),className:f||null,state:b}},indentation:function(){return C(this.text)},getHTML:function(a,b,c,d){function f(a,b){if(!a)return;b?e.push('<span class="',b,'">',K(a),"</span>"):e.push(K(a))}var e=[];c&&e.push(this.className?'<pre class="'+this.className+'">':"<pre>");var g=this.styles,h=this.text,i=this.marked;a==b&&(a=null);var j=h.length;d!=null&&(j=Math.min(d,j));if(!h&&d==null)f(" ",a!=null&&b==null?"CodeMirror-selected":null);else if(!i&&a==null)for(var k=0,l=0;l<j;k+=2){var m=g[k],n=m.length;l+n>j&&(m=m.slice(0,j-l)),l+=n,f(m,"cm-"+g[k+1])}else{var o=0,k=0,p="",q,r=0,s=-1,t=null;function u(){i&&(s+=1,t=s<i.length?i[s]:null)}u();while(o<j){var v=j,w="";if(a!=null)if(a>o)v=a;else if(b==null||b>o)w=" CodeMirror-selected",b!=null&&(v=Math.min(v,b));while(t&&t.to!=null&&t.to<=o)u();t&&(t.from>o?v=Math.min(v,t.from):(w+=" "+t.style,t.to!=null&&(v=Math.min(v,t.to))));for(;;){var x=o+p.length,y=q;w&&(y=q?q+w:w),f(x>v?p.slice(0,v-o):p,y);if(x>=v){p=p.slice(v-o),o=v;break}o=x,p=g[k++],q="cm-"+g[k++]}}a!=null&&b==null&&f(" ","CodeMirror-selected")}return c&&e.push("</pre>"),e.join("")}},j.prototype={addChange:function(a,b,c){this.undone.length=0;var d=+(new Date),e=this.done[this.done.length-1];if(d-this.time>400||!e||e.start>a+b||e.start+e.added<a-e.added+e.old.length)this.done.push({start:a,added:b,old:c});else{var f=0;if(a<e.start){for(var g=e.start-a-1;g>=0;--g)e.old.unshift(c[g]);e.added+=e.start-a,e.start=a}else e.start<a&&(f=a-e.start,b+=f);for(var g=e.added-f,h=c.length;g<h;++g)e.old.push(c[g]);e.added<b&&(e.added=b)}this.time=d}},s.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}};var t=function(){var a=document.createElement("pre");return a.innerHTML=" ",!a.innerHTML}(),u=/gecko\/\d{7}/i.test(navigator.userAgent),v=/MSIE \d/.test(navigator.userAgent),w=/Apple Computer/.test(navigator.vendor),x="\n";(function(){var a=document.createElement("textarea");a.value="foo\nbar",a.value.indexOf("\r")>-1&&(x="\r\n")})();var y=8,z=/Mac/.test(navigator.platform),A={};for(var B=35;B<=40;++B)A[B]=A["c"+B]=!0;var J=document.createElement("div");a.htmlEscape=K;var N,O,P;return"\n\nb".split(/\n/).length!=3?N=function(a){var b=0,c,d=[];while((c=a.indexOf("\n",b))>-1)d.push(a.slice(b,a.charAt(c-1)=="\r"?c-1:c)),b=c+1;return d.push(a.slice(b)),d}:N=function(a){return a.split(/\r?\n/)},a.splitLines=N,window.getSelection?(O=function(a){try{return{start:a.selectionStart,end:a.selectionEnd}}catch(b){return null}},w?P=function(a,b,c){b==c?a.setSelectionRange(b,c):(a.setSelectionRange(b,c-1),window.getSelection().modify("extend","forward","character"))}:P=function(a,b,c){try{a.setSelectionRange(b,c)}catch(d){}}):(O=function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){return null}if(!b||b.parentElement()!=a)return null;var d=a.value,e=d.length,f=a.createTextRange();f.moveToBookmark(b.getBookmark());var g=a.createTextRange();g.collapse(!1);if(f.compareEndPoints("StartToEnd",g)>-1)return{start:e,end:e};var h=-f.moveStart("character",-e);for(var i=d.indexOf("\r");i>-1&&i<h;i=d.indexOf("\r",i+1),h++);if(f.compareEndPoints("EndToEnd",g)>-1)return{start:h,end:e};var j=-f.moveEnd("character",-e);for(var i=d.indexOf("\r");i>-1&&i<j;i=d.indexOf("\r",i+1),j++);return{start:h,end:j}},P=function(a,b,c){var d=a.createTextRange();d.collapse(!0);var e=d.duplicate(),f=0,g=a.value;for(var h=g.indexOf("\n");h>-1&&h<b;h=g.indexOf("\n",h+1))++f;d.move("character",b-f);for(;h>-1&&h<c;h=g.indexOf("\n",h+1))++f;e.move("character",c-f),d.setEndPoint("EndToEnd",e),d.select()}),a.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),a.defineMIME("text/plain","null"),a}();CodeMirror.overlayParser=function(a,b,c){return{startState:function(){return{base:CodeMirror.startState(a),overlay:CodeMirror.startState(b),basePos:0,baseCur:null,overlayPos:0,overlayCur:null}},copyState:function(c){return{base:CodeMirror.copyState(a,c.base),overlay:CodeMirror.copyState(b,c.overlay),basePos:c.basePos,baseCur:null,overlayPos:c.overlayPos,overlayCur:null}},token:function(d,e){return d.start==e.basePos&&(e.baseCur=a.token(d,e.base),e.basePos=d.pos),d.start==e.overlayPos&&(d.pos=d.start,e.overlayCur=b.token(d,e.overlay),e.overlayPos=d.pos),d.pos=Math.min(e.basePos,e.overlayPos),d.eol()&&(e.basePos=e.overlayPos=0),e.overlayCur==null?e.baseCur:e.baseCur!=null&&c?e.baseCur+" "+e.overlayCur:e.overlayCur},indent:function(b,c){return a.indent(b.base,c)},electricChars:a.electricChars}},CodeMirror.runMode=function(a,b,c){var d=CodeMirror.getMode({indentUnit:2},b),e=c.nodeType==1;if(e){var f=c,g=[];c=function(a,b){a=="\n"?g.push("<br>"):b?g.push('<span class="cm-'+CodeMirror.htmlEscape(b)+'">'+CodeMirror.htmlEscape(a)+"</span>"):g.push(CodeMirror.htmlEscape(a))}}var h=CodeMirror.splitLines(a),i=CodeMirror.startState(d);for(var j=0,k=h.length;j<k;++j){j&&c("\n");var l=new CodeMirror.StringStream(h[j]);while(!l.eol()){var m=d.token(l,i);c(l.current(),m),l.start=l.pos}}e&&(f.innerHTML=g.join(""))}
@@ -0,0 +1,89 @@
1
+ .deck-container .slide {
2
+ font-weight: normal; }
3
+ .deck-container .slide .deck-codemirror-result {
4
+ border: 1px solid #ddd;
5
+ border-top: none;
6
+ padding: 10px;
7
+ font-family: monospace; }
8
+ .deck-container .slide .CodeMirror {
9
+ line-height: 1em;
10
+ font-family: monospace;
11
+ overflow: auto;
12
+ height: 100%;
13
+ border: 1px solid #ddd; }
14
+ .deck-container .slide .CodeMirror .button {
15
+ padding: 5px;
16
+ cursor: pointer;
17
+ background-color: #ddd;
18
+ position: relative;
19
+ float: right;
20
+ font-size: 11px;
21
+ line-height: 16px;
22
+ padding: 2px 6px;
23
+ margin-bottom: -20px;
24
+ margin-right: 10px;
25
+ border-radius: 4px;
26
+ -moz-border-radius: 4px;
27
+ -webkit-border-radius: 4px;
28
+ z-index: 1;
29
+ top: 8px; }
30
+ .deck-container .slide .CodeMirror .button:hover {
31
+ background-color: #eee; }
32
+ .deck-container .slide .CodeMirror-scroll {
33
+ /* overflow: auto; */
34
+ /* This is needed to prevent an IE[67] bug where the scrolled content
35
+ is visible outside of the scrolling box. */
36
+ position: relative;
37
+ height: auto;
38
+ overflow-y: hidden;
39
+ overflow-x: auto;
40
+ width: 100%; }
41
+ .deck-container .slide .CodeMirror-gutter {
42
+ position: absolute;
43
+ left: 0;
44
+ top: 0;
45
+ z-index: 10;
46
+ background-color: #f7f7f7;
47
+ border-right: 1px solid #eee;
48
+ min-width: 2em;
49
+ height: 100%; }
50
+ .deck-container .slide .CodeMirror-gutter-text {
51
+ color: #aaa;
52
+ text-align: right;
53
+ padding: .4em .2em .4em .4em; }
54
+ .deck-container .slide .CodeMirror-lines {
55
+ padding: .4em; }
56
+ .deck-container .slide .CodeMirror pre {
57
+ -moz-border-radius: 0;
58
+ -webkit-border-radius: 0;
59
+ -o-border-radius: 0;
60
+ border-radius: 0;
61
+ border-width: 0;
62
+ margin: 0;
63
+ padding: 0;
64
+ background: transparent;
65
+ font-family: inherit;
66
+ font-size: inherit;
67
+ padding: 0;
68
+ margin: 0;
69
+ white-space: pre;
70
+ word-wrap: normal; }
71
+ .deck-container .slide .CodeMirror textarea {
72
+ font-family: inherit !important;
73
+ font-size: inherit !important; }
74
+ .deck-container .slide .CodeMirror-cursor {
75
+ z-index: 10;
76
+ position: absolute;
77
+ visibility: hidden;
78
+ border-left: 1px solid black !important; }
79
+ .deck-container .slide .CodeMirror-focused .CodeMirror-cursor {
80
+ visibility: visible; }
81
+ .deck-container .slide span.CodeMirror-selected {
82
+ background: #ccc !important;
83
+ color: HighlightText !important; }
84
+ .deck-container .slide .CodeMirror-focused span.CodeMirror-selected {
85
+ background: Highlight !important; }
86
+ .deck-container .slide .CodeMirror-matchingbracket {
87
+ color: #0f0 !important; }
88
+ .deck-container .slide .CodeMirror-nonmatchingbracket {
89
+ color: #f22 !important; }
@@ -0,0 +1,213 @@
1
+ /*
2
+ This modules adds code mirror code rendering to items on the page that
3
+ contain code. To enable it on your elements add the classname:
4
+ .deck-codemirror to your container and the classname 'codemirror-item'
5
+ to any block that you wish to codemirrorify.
6
+ */
7
+ (function($, deck, undefined) {
8
+
9
+ var $d = $(document);
10
+
11
+ /*
12
+ Extends defaults/options.
13
+
14
+ options.classes.codemirror
15
+ This class is added to the deck container when there is code in the
16
+ slide that should be
17
+
18
+ options.selectors.codemirror-item
19
+ This class should be added to the element containing code that should
20
+ be highlighted.
21
+ */
22
+ $.extend(true, $[deck].defaults, {
23
+ classes: {
24
+ codemirror: 'deck-codemirror',
25
+ codemirrorresult: 'deck-codemirror-result'
26
+ },
27
+
28
+ selectors: {
29
+ codemirroritem: '.code',
30
+ },
31
+
32
+ data : {
33
+ codemirrorified: 'codemirrorified'
34
+ },
35
+ codemirror : {
36
+ lineNumbers : true,
37
+ theme : "default",
38
+ mode : "javascript",
39
+ theme : "default",
40
+ indentUnit : 1,
41
+ indentWithTabs : false,
42
+ runnable : false
43
+ }
44
+ });
45
+
46
+ // flag to indicate that we are currently in the editor. Required to stop keypress
47
+ // propagation to all other extensions.
48
+ var inEditor = false;
49
+
50
+ // a helper private function that can be used to "codemirror" a slide if that slide
51
+ // has any elements with the proper classname.
52
+ var codemirrorify = function(slide) {
53
+ var $container = $[deck]('getContainer'),
54
+ opts = $[deck]('getOptions'),
55
+ codeblocks = $(slide).find(opts.selectors.codemirroritem),
56
+ hiddenScripts = [];
57
+
58
+ // Seek out and cache all hidden scripts
59
+ $("script[type=codemirror]").each(function() {
60
+ hiddenScripts.push({
61
+ selector: $(this).data("selector"),
62
+ src: this.innerHTML
63
+ });
64
+ });
65
+
66
+ // go through all code blocks
67
+ $.each(codeblocks, function(i, codeblock) {
68
+
69
+ // if codeblock hasn't been codemirrorified yet
70
+ if (!$.data(codeblock, opts.data.codemirrorified)) {
71
+
72
+ // initialize defaults.
73
+ var codeblock = $(codeblock),
74
+ editor = null,
75
+ options = $.extend(opts.codemirror,
76
+ {
77
+ mode : !!codeblock.attr('mode') ? codeblock.attr('mode') : opts.codemirror.mode,
78
+ theme : !!codeblock.attr('theme') ? codeblock.attr('theme') : opts.codemirror.theme,
79
+ onFocus : function(e) {
80
+ inEditor = true;
81
+ },
82
+ onBlur : function(e) {
83
+ inEditor = false;
84
+ }
85
+ }
86
+ );
87
+
88
+ // if this is a textarea just use the codemirror shorthand.
89
+ if (codeblock.get(0).nodeName.toUpperCase() === "TEXTAREA") {
90
+ editor = CodeMirror.fromTextArea(codeblock[0], options);
91
+ } else {
92
+ // else codemirror the element's content and attach to element parent.
93
+ var parent = codeblock.parent();
94
+ codeblock.hide();
95
+ editor = CodeMirror(parent[0],
96
+ $.extend(options, {
97
+ value : codeblock.html()
98
+ })
99
+ );
100
+ }
101
+
102
+ // mark that this code block has been codemirrored.
103
+ $.data(codeblock[0], opts.data.codemirrorified, 'true');
104
+
105
+ // attach a listener to this event to make sure that all other keybindings
106
+ // don't trigger on keypress.
107
+ $(editor.getWrapperElement()).keydown(function(e) {
108
+ e.stopPropagation();
109
+ });
110
+
111
+ if (opts.codemirror.runnable || codeblock.attr("runnable")) {
112
+ // make the code runnable
113
+ var wrapper = editor.getWrapperElement(),
114
+ button = $('<div>', {
115
+ "class" : "button",
116
+ text : "Run"
117
+ }).prependTo(wrapper),
118
+ output = $('<div>', {
119
+ "class" : opts.classes.codemirrorresult
120
+ }).appendTo($(wrapper).parent());
121
+
122
+ button.click(function(editor, output){
123
+ return function(event) {
124
+
125
+ // save the default logging behavior.
126
+ var real_console_log = console.log;
127
+
128
+ // save the default logging behavior.
129
+ // Following Dean Edward's fantastic sandbox code:
130
+ // http://dean.edwards.name/weblog/2006/11/sandbox/+evaluating+js+in+an+iframe
131
+ // create an iframe sandbox for this element.
132
+ var iframe = $("<iframe>")
133
+ .css("display", "none")
134
+ .appendTo($d.find('body'));
135
+
136
+ // Overwrite the default log behavior to pipe to an output element.
137
+ console.log = function(msg) {
138
+ if (output.html() !== "") {
139
+ output.append("<br />" + msg);
140
+ } else {
141
+ output.html(msg);
142
+ }
143
+ };
144
+
145
+ var sandBoxMarkup = "<script>"+
146
+ "var MSIE/*@cc_on =1@*/;"+ // sniff
147
+ "console={ log: parent.console.log };" +
148
+ "parent.sandbox=MSIE?this:{eval:function(s){return eval(s)}}<\/script>";
149
+
150
+ var exposeGlobals;
151
+ if (exposeGlobals = $(codeblock).attr("globals")) {
152
+ exposeGlobals = exposeGlobals.split(",");
153
+
154
+ $.each(exposeGlobals, function(prop, val) {
155
+ val = $.trim(val);
156
+ iframe[0].contentWindow[val] = window[val];
157
+ });
158
+ }
159
+
160
+ // write a script into the <iframe> and create the sandbox
161
+ frames[frames.length - 1].document.write(sandBoxMarkup);
162
+
163
+ var combinedSource = "";
164
+
165
+ $.each(hiddenScripts, function() {
166
+ if ($(codeblock).is(this.selector)) {
167
+ combinedSource += this.src + "\n";
168
+ }
169
+ });
170
+
171
+ combinedSource += editor.getValue();
172
+
173
+ // eval in the sandbox.
174
+ sandbox.eval(combinedSource);
175
+
176
+ // get rid of the frame. New Frame for every context.
177
+ iframe.remove();
178
+
179
+ // set the old logging behavior back.
180
+ console.log = real_console_log;
181
+ }
182
+ }(editor, output));
183
+ }
184
+ }
185
+ });
186
+ };
187
+
188
+ $d.bind('deck.init', function() {
189
+
190
+ // codemirrorify current and next slide, since we're in the beginning.
191
+ codemirrorify($.deck('getSlide', 0));
192
+ codemirrorify($.deck('getSlide', 1));
193
+ });
194
+
195
+ $d.bind('deck.change', function(event, from, to) {
196
+ var $slides = $[deck]('getSlides');
197
+ // codemirrorify previous slide
198
+ if (to > 0) {
199
+ codemirrorify($.deck('getSlide', to - 1));
200
+ }
201
+
202
+ // codemirrorify current slide
203
+ codemirrorify($.deck('getSlide', to));
204
+
205
+ // codemirrorify next slide
206
+ if (to+1 < $slides.length) {
207
+ codemirrorify($.deck('getSlide', to + 1));
208
+ }
209
+ });
210
+ })(jQuery, 'deck', this);
211
+
212
+
213
+