sass-twitter-bootstrap 0.1.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. data/lib/{sass-twitter-bootstrap.rb → sass/twitter/bootstrap.rb} +1 -1
  2. data/lib/sass/twitter/bootstrap/rails.rb +1 -5
  3. data/lib/sass/twitter/bootstrap/rails/engine.rb +12 -0
  4. data/lib/sass/twitter/bootstrap/version.rb +1 -1
  5. data/vendor/assets/images/glyphicons-halflings-white.png +0 -0
  6. data/vendor/assets/images/glyphicons-halflings.png +0 -0
  7. data/vendor/assets/javascripts/twitter/bootstrap-alert.js +32 -28
  8. data/vendor/assets/javascripts/twitter/bootstrap-button.js +33 -29
  9. data/vendor/assets/javascripts/twitter/bootstrap-carousel.js +21 -33
  10. data/vendor/assets/javascripts/twitter/bootstrap-collapse.js +26 -47
  11. data/vendor/assets/javascripts/twitter/bootstrap-dropdown.js +10 -18
  12. data/vendor/assets/javascripts/twitter/bootstrap-modal.js +17 -25
  13. data/vendor/assets/javascripts/twitter/bootstrap-popover.js +10 -13
  14. data/vendor/assets/javascripts/twitter/bootstrap-scrollspy.js +18 -44
  15. data/vendor/assets/javascripts/twitter/bootstrap-tab.js +7 -12
  16. data/vendor/assets/javascripts/twitter/bootstrap-tooltip.js +35 -40
  17. data/vendor/assets/javascripts/twitter/bootstrap-transition.js +20 -30
  18. data/vendor/assets/javascripts/twitter/bootstrap-typeahead.js +15 -29
  19. data/vendor/assets/stylesheets/tests/buttons.html +139 -0
  20. data/vendor/assets/stylesheets/tests/css-tests.css +99 -1
  21. data/vendor/assets/stylesheets/tests/css-tests.html +519 -37
  22. data/vendor/assets/stylesheets/tests/forms-responsive.html +71 -0
  23. data/vendor/assets/stylesheets/tests/navbar-fixed-top.html +104 -0
  24. data/vendor/assets/stylesheets/tests/navbar-static-top.html +107 -0
  25. data/vendor/assets/stylesheets/tests/navbar.html +38 -39
  26. data/vendor/assets/stylesheets/twitter/_accordion.scss +0 -5
  27. data/vendor/assets/stylesheets/twitter/_alerts.scss +15 -3
  28. data/vendor/assets/stylesheets/twitter/_breadcrumbs.scss +0 -2
  29. data/vendor/assets/stylesheets/twitter/_button-groups.scss +32 -76
  30. data/vendor/assets/stylesheets/twitter/_buttons.scss +25 -33
  31. data/vendor/assets/stylesheets/twitter/_close.scss +1 -12
  32. data/vendor/assets/stylesheets/twitter/_code.scss +8 -8
  33. data/vendor/assets/stylesheets/twitter/_component-animations.scss +7 -9
  34. data/vendor/assets/stylesheets/twitter/_dropdowns.scss +45 -58
  35. data/vendor/assets/stylesheets/twitter/_forms.scss +146 -206
  36. data/vendor/assets/stylesheets/twitter/_grid.scss +5 -2
  37. data/vendor/assets/stylesheets/twitter/_hero-unit.scss +1 -3
  38. data/vendor/assets/stylesheets/twitter/_labels.scss +32 -0
  39. data/vendor/assets/stylesheets/twitter/_layouts.scss +2 -2
  40. data/vendor/assets/stylesheets/twitter/_mixins.scss +208 -273
  41. data/vendor/assets/stylesheets/twitter/_modals.scss +8 -14
  42. data/vendor/assets/stylesheets/twitter/_navbar.scss +73 -132
  43. data/vendor/assets/stylesheets/twitter/_navs.scss +43 -53
  44. data/vendor/assets/stylesheets/twitter/_pager.scss +0 -6
  45. data/vendor/assets/stylesheets/twitter/_pagination.scss +0 -1
  46. data/vendor/assets/stylesheets/twitter/_progress-bars.scss +6 -28
  47. data/vendor/assets/stylesheets/twitter/_reset.scss +4 -9
  48. data/vendor/assets/stylesheets/twitter/_scaffolding.scss +8 -4
  49. data/vendor/assets/stylesheets/twitter/_sprites.scss +7 -40
  50. data/vendor/assets/stylesheets/twitter/_tables.scss +33 -38
  51. data/vendor/assets/stylesheets/twitter/_thumbnails.scss +2 -14
  52. data/vendor/assets/stylesheets/twitter/_tooltip.scss +1 -1
  53. data/vendor/assets/stylesheets/twitter/_type.scss +14 -28
  54. data/vendor/assets/stylesheets/twitter/_variables.scss +19 -116
  55. data/vendor/assets/stylesheets/twitter/_wells.scss +0 -10
  56. data/vendor/assets/stylesheets/twitter/bootstrap.scss +7 -3
  57. data/vendor/assets/stylesheets/twitter/responsive.scss +301 -15
  58. metadata +25 -190
  59. data/.gitignore +0 -4
  60. data/Gemfile +0 -3
  61. data/Gemfile.lock +0 -14
  62. data/LICENSE +0 -176
  63. data/Makefile +0 -94
  64. data/README.md +0 -217
  65. data/Rakefile +0 -52
  66. data/bootstrap-2.0.4.css +0 -4661
  67. data/bootstrap-2.0.4.min.css +0 -9
  68. data/bootstrap-responsive-2.0.4.css +0 -932
  69. data/bootstrap-responsive-2.0.4.min.css +0 -9
  70. data/docs/assets/css/bootstrap-responsive.css +0 -932
  71. data/docs/assets/css/bootstrap.css +0 -4661
  72. data/docs/assets/css/docs.css +0 -846
  73. data/docs/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  74. data/docs/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  75. data/docs/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  76. data/docs/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  77. data/docs/assets/ico/favicon.ico +0 -0
  78. data/docs/assets/img/bird.png +0 -0
  79. data/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg +0 -0
  80. data/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg +0 -0
  81. data/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg +0 -0
  82. data/docs/assets/img/browsers.png +0 -0
  83. data/docs/assets/img/example-sites/fleetio.png +0 -0
  84. data/docs/assets/img/example-sites/jshint.png +0 -0
  85. data/docs/assets/img/example-sites/kippt.png +0 -0
  86. data/docs/assets/img/example-sites/soundready.png +0 -0
  87. data/docs/assets/img/examples/bootstrap-example-fluid.jpg +0 -0
  88. data/docs/assets/img/examples/bootstrap-example-hero.jpg +0 -0
  89. data/docs/assets/img/examples/bootstrap-example-starter.jpg +0 -0
  90. data/docs/assets/img/github-16px.png +0 -0
  91. data/docs/assets/img/glyphicons-halflings-white.png +0 -0
  92. data/docs/assets/img/glyphicons-halflings.png +0 -0
  93. data/docs/assets/img/glyphicons/glyphicons_009_magic.png +0 -0
  94. data/docs/assets/img/glyphicons/glyphicons_042_group.png +0 -0
  95. data/docs/assets/img/glyphicons/glyphicons_079_podium.png +0 -0
  96. data/docs/assets/img/glyphicons/glyphicons_082_roundabout.png +0 -0
  97. data/docs/assets/img/glyphicons/glyphicons_155_show_thumbnails.png +0 -0
  98. data/docs/assets/img/glyphicons/glyphicons_163_iphone.png +0 -0
  99. data/docs/assets/img/glyphicons/glyphicons_214_resize_small.png +0 -0
  100. data/docs/assets/img/glyphicons/glyphicons_266_book_open.png +0 -0
  101. data/docs/assets/img/grid-18px-masked.png +0 -0
  102. data/docs/assets/img/icon-css3.png +0 -0
  103. data/docs/assets/img/icon-github.png +0 -0
  104. data/docs/assets/img/icon-html5.png +0 -0
  105. data/docs/assets/img/icon-twitter.png +0 -0
  106. data/docs/assets/img/less-logo-large.png +0 -0
  107. data/docs/assets/img/less-small.png +0 -0
  108. data/docs/assets/img/responsive-illustrations.png +0 -0
  109. data/docs/assets/js/README.md +0 -106
  110. data/docs/assets/js/application.js +0 -184
  111. data/docs/assets/js/bootstrap-alert.js +0 -90
  112. data/docs/assets/js/bootstrap-button.js +0 -96
  113. data/docs/assets/js/bootstrap-carousel.js +0 -169
  114. data/docs/assets/js/bootstrap-collapse.js +0 -157
  115. data/docs/assets/js/bootstrap-dropdown.js +0 -100
  116. data/docs/assets/js/bootstrap-modal.js +0 -218
  117. data/docs/assets/js/bootstrap-popover.js +0 -98
  118. data/docs/assets/js/bootstrap-scrollspy.js +0 -151
  119. data/docs/assets/js/bootstrap-tab.js +0 -135
  120. data/docs/assets/js/bootstrap-tooltip.js +0 -275
  121. data/docs/assets/js/bootstrap-transition.js +0 -61
  122. data/docs/assets/js/bootstrap-typeahead.js +0 -285
  123. data/docs/assets/js/bootstrap.js +0 -1825
  124. data/docs/assets/js/bootstrap.min.js +0 -6
  125. data/docs/assets/js/google-code-prettify/prettify.css +0 -30
  126. data/docs/assets/js/google-code-prettify/prettify.js +0 -28
  127. data/docs/assets/js/jquery.js +0 -9252
  128. data/docs/base-css.html +0 -1710
  129. data/docs/build/index.js +0 -44
  130. data/docs/build/node_modules/.bin/hulk +0 -93
  131. data/docs/build/node_modules/hogan.js/.git_ignore +0 -1
  132. data/docs/build/node_modules/hogan.js/.gitmodules +0 -3
  133. data/docs/build/node_modules/hogan.js/LICENSE +0 -177
  134. data/docs/build/node_modules/hogan.js/Makefile +0 -62
  135. data/docs/build/node_modules/hogan.js/README.md +0 -93
  136. data/docs/build/node_modules/hogan.js/bin/hulk +0 -93
  137. data/docs/build/node_modules/hogan.js/lib/compiler.js +0 -348
  138. data/docs/build/node_modules/hogan.js/lib/hogan.js +0 -20
  139. data/docs/build/node_modules/hogan.js/lib/template.js +0 -233
  140. data/docs/build/node_modules/hogan.js/package.json +0 -20
  141. data/docs/build/node_modules/hogan.js/test/html/list.html +0 -8
  142. data/docs/build/node_modules/hogan.js/test/index.html +0 -13
  143. data/docs/build/node_modules/hogan.js/test/index.js +0 -848
  144. data/docs/build/node_modules/hogan.js/test/mustache.js +0 -90
  145. data/docs/build/node_modules/hogan.js/test/spec.js +0 -77
  146. data/docs/build/node_modules/hogan.js/test/spec/Changes +0 -31
  147. data/docs/build/node_modules/hogan.js/test/spec/README.md +0 -65
  148. data/docs/build/node_modules/hogan.js/test/spec/Rakefile +0 -27
  149. data/docs/build/node_modules/hogan.js/test/spec/TESTING.md +0 -46
  150. data/docs/build/node_modules/hogan.js/test/spec/specs/comments.json +0 -1
  151. data/docs/build/node_modules/hogan.js/test/spec/specs/comments.yml +0 -103
  152. data/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.json +0 -1
  153. data/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.yml +0 -158
  154. data/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.json +0 -1
  155. data/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.yml +0 -230
  156. data/docs/build/node_modules/hogan.js/test/spec/specs/inverted.json +0 -1
  157. data/docs/build/node_modules/hogan.js/test/spec/specs/inverted.yml +0 -193
  158. data/docs/build/node_modules/hogan.js/test/spec/specs/partials.json +0 -1
  159. data/docs/build/node_modules/hogan.js/test/spec/specs/partials.yml +0 -109
  160. data/docs/build/node_modules/hogan.js/test/spec/specs/sections.json +0 -1
  161. data/docs/build/node_modules/hogan.js/test/spec/specs/sections.yml +0 -256
  162. data/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.json +0 -1
  163. data/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.yml +0 -149
  164. data/docs/build/node_modules/hogan.js/test/templates/list.mustache +0 -8
  165. data/docs/build/node_modules/hogan.js/tools/release.js +0 -74
  166. data/docs/build/node_modules/hogan.js/tools/web_templates.js +0 -32
  167. data/docs/build/node_modules/hogan.js/web/1.0.0/hogan.js +0 -500
  168. data/docs/build/node_modules/hogan.js/web/1.0.0/hogan.min.js +0 -14
  169. data/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.js +0 -500
  170. data/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.min.js +0 -14
  171. data/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.js +0 -545
  172. data/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.min.js +0 -5
  173. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.amd.js +0 -576
  174. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.common.js +0 -576
  175. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.js +0 -572
  176. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.amd.js +0 -5
  177. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.common.js +0 -5
  178. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.js +0 -5
  179. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.mustache.js +0 -5
  180. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.mustache.js +0 -619
  181. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.js +0 -233
  182. data/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.min.js +0 -5
  183. data/docs/build/node_modules/hogan.js/web/favicon.ico +0 -0
  184. data/docs/build/node_modules/hogan.js/web/images/logo.png +0 -0
  185. data/docs/build/node_modules/hogan.js/web/images/noise.png +0 -0
  186. data/docs/build/node_modules/hogan.js/web/images/small-hogan-icon.png +0 -0
  187. data/docs/build/node_modules/hogan.js/web/images/stripes.png +0 -0
  188. data/docs/build/node_modules/hogan.js/web/index.html.mustache +0 -139
  189. data/docs/build/node_modules/hogan.js/web/stylesheets/layout.css +0 -206
  190. data/docs/build/node_modules/hogan.js/web/stylesheets/skeleton.css +0 -236
  191. data/docs/build/node_modules/hogan.js/wrappers/amd.js.mustache +0 -21
  192. data/docs/build/node_modules/hogan.js/wrappers/common.js.mustache +0 -21
  193. data/docs/build/node_modules/hogan.js/wrappers/js.mustache +0 -17
  194. data/docs/build/node_modules/hogan.js/wrappers/mustache.js.mustache +0 -64
  195. data/docs/build/package.json +0 -6
  196. data/docs/components.html +0 -1931
  197. data/docs/download.html +0 -454
  198. data/docs/examples.html +0 -147
  199. data/docs/examples/fluid.html +0 -162
  200. data/docs/examples/hero.html +0 -109
  201. data/docs/examples/starter-template.html +0 -79
  202. data/docs/index.html +0 -259
  203. data/docs/javascript.html +0 -1520
  204. data/docs/less.html +0 -1060
  205. data/docs/scaffolding.html +0 -671
  206. data/docs/templates/layout.mustache +0 -146
  207. data/docs/templates/pages/base-css.mustache +0 -1594
  208. data/docs/templates/pages/components.mustache +0 -1815
  209. data/docs/templates/pages/download.mustache +0 -338
  210. data/docs/templates/pages/examples.mustache +0 -31
  211. data/docs/templates/pages/index.mustache +0 -144
  212. data/docs/templates/pages/javascript.mustache +0 -1405
  213. data/docs/templates/pages/less.mustache +0 -944
  214. data/docs/templates/pages/scaffolding.mustache +0 -555
  215. data/docs/templates/pages/upgrading.mustache +0 -194
  216. data/docs/upgrading.html +0 -310
  217. data/js/tests/index.html +0 -54
  218. data/js/tests/phantom.js +0 -63
  219. data/js/tests/server.js +0 -14
  220. data/js/tests/unit/bootstrap-alert.js +0 -56
  221. data/js/tests/unit/bootstrap-button.js +0 -77
  222. data/js/tests/unit/bootstrap-carousel.js +0 -28
  223. data/js/tests/unit/bootstrap-collapse.js +0 -54
  224. data/js/tests/unit/bootstrap-dropdown.js +0 -87
  225. data/js/tests/unit/bootstrap-modal.js +0 -114
  226. data/js/tests/unit/bootstrap-phantom.js +0 -21
  227. data/js/tests/unit/bootstrap-popover.js +0 -93
  228. data/js/tests/unit/bootstrap-scrollspy.js +0 -31
  229. data/js/tests/unit/bootstrap-tab.js +0 -61
  230. data/js/tests/unit/bootstrap-tooltip.js +0 -155
  231. data/js/tests/unit/bootstrap-transition.js +0 -13
  232. data/js/tests/unit/bootstrap-typeahead.js +0 -148
  233. data/js/tests/vendor/jquery.js +0 -9252
  234. data/js/tests/vendor/qunit.css +0 -232
  235. data/js/tests/vendor/qunit.js +0 -1510
  236. data/package.json +0 -25
  237. data/sass-twitter-bootstrap.gemspec +0 -19
  238. data/vendor/assets/javascripts/README.md +0 -112
  239. data/vendor/assets/javascripts/twitter/bootstrap.js +0 -12
  240. data/vendor/assets/stylesheets/twitter/_labels-badges.scss +0 -52
  241. data/vendor/assets/stylesheets/twitter/_responsive-1200px-min.scss +0 -26
  242. data/vendor/assets/stylesheets/twitter/_responsive-767px-max.scss +0 -149
  243. data/vendor/assets/stylesheets/twitter/_responsive-768px-979px.scss +0 -17
  244. data/vendor/assets/stylesheets/twitter/_responsive-navbar.scss +0 -153
  245. data/vendor/assets/stylesheets/twitter/_responsive-utilities.scss +0 -41
@@ -1,8 +0,0 @@
1
- <ul>
2
- <li></li>
3
- <li></li>
4
- <li></li>
5
- <li></li>
6
- <li></li>
7
- <li></li>
8
- </ul>
@@ -1,74 +0,0 @@
1
- /*
2
- * Copyright 2011 Twitter, Inc.
3
- * Licensed under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License.
5
- * You may obtain a copy of the License at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software
10
- * distributed under the License is distributed on an "AS IS" BASIS,
11
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- * See the License for the specific language governing permissions and
13
- * limitations under the License.
14
- */
15
-
16
- var fs = require('fs');
17
- var path = require('path');
18
- var Hogan = require(__dirname + '/../lib/hogan');
19
- var minlicense = '/**\n* @preserve Copyright 2012 Twitter, Inc.\n* @license http://www.apache.org/licenses/LICENSE-2.0.txt\n*/\n';
20
-
21
- function read(path) {
22
- return fs.readFileSync(path).toString()
23
- }
24
-
25
- // Good enough for little js files
26
- function copy(src, dst) {
27
- return fs.writeFileSync(dst, read(src));
28
- }
29
-
30
- function uglify(src, dst) {
31
- var jsp = require("uglify-js").parser;
32
- var pro = require("uglify-js").uglify;
33
- var orig_code = read(src);
34
- var ast = jsp.parse(orig_code); // parse code and get the initial AST
35
- ast = pro.ast_mangle(ast); // get a new AST with mangled names
36
- ast = pro.ast_squeeze(ast); // get an AST with compression optimizations
37
- fs.writeFileSync(dst, minlicense + pro.gen_code(ast));
38
- }
39
-
40
- var packageJSON = JSON.parse(read('package.json'));
41
- var version = packageJSON.version.substring(0, packageJSON.version.indexOf('-'));
42
-
43
- function removeFirstComment(text) {
44
- return text.substring(text.indexOf('*/') + 2);
45
- }
46
-
47
- var context = {
48
- template: removeFirstComment(read(__dirname + '/../lib/template.js')),
49
- compiler: removeFirstComment(read(__dirname + '/../lib/compiler.js'))
50
- };
51
-
52
- var wrapperPath = '/../wrappers/';
53
- var wrappers = fs.readdirSync(__dirname + wrapperPath).map(function(f) {
54
- return __dirname + wrapperPath + f;
55
- });
56
-
57
- var distPath = __dirname + '/../dist/';
58
- wrappers.forEach(function(wrapper) {
59
- var tail = path.basename(wrapper, '.mustache');
60
- var target = distPath + 'hogan-' + version + '.' + tail;
61
- var uglified = distPath + 'hogan-' + version + '.min.' + tail;
62
- fs.writeFileSync(target, Hogan.compile(read(wrapper)).render(context));
63
- uglify(target, uglified);
64
- });
65
-
66
- // Also release Hogan.Template on its own.
67
- var templateTarget = distPath + 'template-' + version + '.js';
68
- fs.writeFileSync(templateTarget, read(__dirname + '/../lib/template.js'));
69
- uglify(templateTarget, distPath + 'template-' + version + '.min.js');
70
-
71
- // Add packageJSON to node distribution
72
- packageJSON.version = version;
73
- fs.writeFileSync(__dirname + '/../dist/nodejs/package.json',
74
- JSON.stringify(packageJSON, null, " "));
@@ -1,32 +0,0 @@
1
- /*
2
- * Copyright 2011 Twitter, Inc.
3
- * Licensed under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License.
5
- * You may obtain a copy of the License at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software
10
- * distributed under the License is distributed on an "AS IS" BASIS,
11
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- * See the License for the specific language governing permissions and
13
- * limitations under the License.
14
- */
15
-
16
- var Hogan = require(__dirname + '/../lib/hogan.js');
17
- var fs = require('fs');
18
- var path = require('path');
19
-
20
- // Substitute variables in the homepage with values from package.json
21
- var homeTemplatePath = __dirname + '/../build/gh-pages/index.html.mustache';
22
- var contextPath = __dirname + '/../dist/nodejs/package.json';
23
-
24
- var homepage = fs.readFileSync(homeTemplatePath).toString();
25
- var context = JSON.parse(fs.readFileSync(contextPath).toString());
26
-
27
- var template = Hogan.compile(homepage);
28
-
29
- fs.writeFileSync(path.dirname(homeTemplatePath) + '/index.html',
30
- template.render(context));
31
-
32
- fs.unlinkSync(homeTemplatePath);
@@ -1,500 +0,0 @@
1
- /*
2
- * Copyright 2011 Twitter, Inc.
3
- * Licensed under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License.
5
- * You may obtain a copy of the License at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software
10
- * distributed under the License is distributed on an "AS IS" BASIS,
11
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- * See the License for the specific language governing permissions and
13
- * limitations under the License.
14
- */
15
-
16
- var HoganTemplate = (function () {
17
-
18
- function constructor(text) {
19
- this.text = text;
20
- };
21
-
22
- constructor.prototype = {
23
- // render: replaced by generated code.
24
- r: function (context, partials) { return ''; },
25
-
26
- // variable escaping
27
- v: hoganEscape,
28
-
29
- render: function render(context, partials) {
30
- return this.r(context, partials);
31
- },
32
-
33
- // tries to find a partial in the curent scope and render it
34
- rp: function(name, context, partials, indent) {
35
- var partial = partials[name];
36
-
37
- if (!partial) {
38
- return '';
39
- }
40
-
41
- return partial.render(context, partials);
42
- },
43
-
44
- // render a section
45
- rs: function(context, partials, section) {
46
- var buf = '';
47
- var tail = context[context.length - 1];
48
- if (!isArray(tail)) {
49
- buf = section(context, partials);
50
- return buf;
51
- }
52
-
53
- for (var i = 0; i < tail.length; i++) {
54
- context.push(tail[i]);
55
- buf += section(context, partials);
56
- context.pop();
57
- }
58
- return buf;
59
- },
60
-
61
- // maybe start a section
62
- s: function(val, ctx, partials, inverted, start, end) {
63
- if (isArray(val) && val.length === 0) {
64
- return false;
65
- }
66
-
67
- if (!inverted && typeof val == 'function') {
68
- val = this.ls(val, ctx, partials, start, end);
69
- }
70
-
71
- var pass = (val === '') || !!val;
72
-
73
- if (!inverted && pass && ctx) {
74
- ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);
75
- }
76
-
77
- return pass;
78
- },
79
-
80
- // find values with dotted names
81
- d: function(key, ctx, partials, returnFound) {
82
- if (key === '.' && isArray(ctx[ctx.length - 2])) {
83
- return ctx[ctx.length - 1];
84
- }
85
-
86
- var names = key.split('.');
87
- var val = this.f(names[0], ctx, partials, returnFound);
88
- var cx = null;
89
- for (var i = 1; i < names.length; i++) {
90
- if (val && typeof val == 'object' && names[i] in val) {
91
- cx = val;
92
- val = val[names[i]];
93
- } else {
94
- val = '';
95
- }
96
- }
97
-
98
- if (returnFound && !val) {
99
- return false;
100
- }
101
-
102
- if (!returnFound && typeof val == 'function') {
103
- ctx.push(cx);
104
- val = this.lv(val, ctx, partials);
105
- ctx.pop();
106
- }
107
-
108
- return val;
109
- },
110
-
111
- // find values with normal names
112
- f: function(key, ctx, partials, returnFound) {
113
- var val = false;
114
- var v = null;
115
- var found = false;
116
-
117
- for (var i = ctx.length - 1; i >= 0; i--) {
118
- v = ctx[i];
119
- if (v && typeof v == 'object' && key in v) {
120
- val = v[key];
121
- found = true;
122
- break;
123
- }
124
- }
125
-
126
- if (!found) {
127
- return (returnFound) ? false : "";
128
- }
129
-
130
- if (!returnFound && typeof val == 'function') {
131
- val = this.lv(val, ctx, partials);
132
- }
133
-
134
- return val;
135
- },
136
-
137
- // higher order templates
138
- ho: function(val, cx, partials, text) {
139
- var t = val.call(cx, text, function(t) {
140
- return Hogan.compile(t).render(cx);
141
- });
142
- var s = Hogan.compile(t.toString()).render(cx, partials);
143
- this.b = s;
144
- return false;
145
- },
146
-
147
- // higher order template result buffer
148
- b: '',
149
-
150
- // lambda replace section
151
- ls: function(val, ctx, partials, start, end) {
152
- var cx = ctx[ctx.length - 1];
153
- if (val.length > 0) {
154
- return this.ho(val, cx, partials, this.text.substring(start, end));
155
- }
156
- var t = val.call(cx);
157
- if (typeof t == 'function') {
158
- return this.ho(t, cx, partials, this.text.substring(start, end));
159
- }
160
- return t;
161
- },
162
-
163
- // lambda replace variable
164
- lv: function(val, ctx, partials) {
165
- var cx = ctx[ctx.length - 1];
166
- return Hogan.compile(val.call(cx).toString()).render(cx, partials);
167
- }
168
- };
169
-
170
- var rAmp = /&/g, rLt = /</g, rGt = />/g, rApos =/\'/g,
171
- rQuot = /\"/g, hChars =/[&<>\"\']/;
172
- function hoganEscape(str) {
173
- var s = String(str === null ? '' : str);
174
- return hChars.test(s) ? s.replace(rAmp,'&amp;')
175
- .replace(rLt,'&lt;').replace(rGt,'&gt;')
176
- .replace(rApos,'&#39;').replace(rQuot, '&quot;') : s;
177
- }
178
-
179
- var isArray = Array.isArray || function(a) {
180
- return Object.prototype.toString.call(a) === '[object Array]';
181
- }
182
-
183
- return constructor;
184
- })();
185
-
186
- var Hogan = (function () {
187
-
188
- function scan(text) {
189
- var len = text.length,
190
- IN_TEXT = 0,
191
- IN_TAG_TYPE = 1,
192
- IN_TAG = 2,
193
- state = IN_TEXT,
194
- tagType = null,
195
- buf = '',
196
- tokens = [],
197
- seenTag = false,
198
- i = 0,
199
- lineStart = 0,
200
- otag = '{{',
201
- ctag = '}}';
202
-
203
- function addBuf() {
204
- if (buf.length > 0) {
205
- tokens.push(new String(buf));
206
- buf = '';
207
- }
208
- }
209
-
210
- function lineIsWhitespace() {
211
- var isAllWhitespace = true;
212
- for (var j = lineStart; j < tokens.length; j++) {
213
- isAllWhitespace =
214
- (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) ||
215
- (!tokens[j].tag && tokens[j].match(rIsWhitespace) == null);
216
- if (!isAllWhitespace) {
217
- return false;
218
- }
219
- }
220
-
221
- return isAllWhitespace;
222
- }
223
-
224
- function filterLine(haveSeenTag, noNewLine) {
225
- addBuf();
226
- if (haveSeenTag && lineIsWhitespace()) {
227
- for (var j = lineStart; j < tokens.length; j++) {
228
- if (!tokens[j].tag) {
229
- tokens.splice(j, 1);
230
- }
231
- }
232
- } else if (!noNewLine) {
233
- tokens.push({tag:'\n'})
234
- }
235
-
236
- seenTag = false;
237
- lineStart = tokens.length;
238
- }
239
-
240
- function changeDelimiters(text, index) {
241
- var close = '=' + ctag;
242
- var closeIndex = text.indexOf(close, index);
243
- var delimiters = trim(text.substring(text.indexOf('=', index) + 1,
244
- closeIndex)).split(' ');
245
- otag = delimiters[0];
246
- ctag = delimiters[1];
247
- return closeIndex + close.length - 1;
248
- }
249
-
250
- for (i = 0; i < len; i++) {
251
- if (state == IN_TEXT) {
252
- if (tagChange(otag, text, i)) {
253
- --i;
254
- addBuf();
255
- state = IN_TAG_TYPE;
256
- } else {
257
- if (text[i] == '\n') {
258
- filterLine(seenTag);
259
- } else {
260
- buf += text[i];
261
- }
262
- }
263
- } else if (state == IN_TAG_TYPE) {
264
- i += otag.length - 1;
265
- var tag = tagTypes[text[i + 1]];
266
- tagType = tag ? text[i + 1] : '_v';
267
- seenTag = i;
268
- if (tagType == '=') {
269
- i = changeDelimiters(text, i);
270
- state = IN_TEXT;
271
- } else {
272
- if (tag) {
273
- i++;
274
- }
275
- state = IN_TAG;
276
- }
277
- } else {
278
- if (tagChange(ctag, text, i)) {
279
- i += ctag.length - 1;
280
- tokens.push({tag: tagType, n: trim(buf),
281
- i: (tagType == '/') ? seenTag - 1 : i + 1});
282
- buf = '';
283
- state = IN_TEXT;
284
- if (tagType == '{') {
285
- i++;
286
- }
287
- } else {
288
- buf += text[i];
289
- }
290
- }
291
- }
292
-
293
- filterLine(seenTag, true);
294
-
295
- return tokens;
296
- }
297
-
298
- function trim(s) {
299
- if (s.trim) {
300
- return s.trim();
301
- }
302
-
303
- return s.replace(/^\s*|\s*$/g, '');
304
- }
305
-
306
- // remove whitespace according to Mustache spec
307
- var rIsWhitespace = /\S/;
308
-
309
- var tagTypes = {
310
- '#': 1, '^': 2, '/': 3, '!': 4, '>': 5,
311
- '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10
312
- };
313
-
314
- function tagChange(tag, text, index) {
315
- if (text[index] != tag[0]) {
316
- return false;
317
- }
318
-
319
- for (var i = 1, l = tag.length; i < l; i++) {
320
- if (text[index + i] != tag[i]) {
321
- return false;
322
- }
323
- }
324
-
325
- return true;
326
- }
327
-
328
- function buildTree(tokens, kind, stack, customTags) {
329
- var instructions = [],
330
- opener = null,
331
- token = null;
332
-
333
- while (tokens.length > 0) {
334
- token = tokens.shift();
335
- if (token.tag == '#' || token.tag == '^' ||
336
- isOpener(token, customTags)) {
337
- stack.push(token);
338
- token.nodes = buildTree(tokens, token.tag, stack, customTags);
339
- instructions.push(token);
340
- } else if (token.tag == '/') {
341
- if (stack.length == 0) {
342
- throw new Error('Closing tag without opener: /' + token.n);
343
- }
344
- opener = stack.pop();
345
- if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {
346
- throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);
347
- }
348
- opener.end = token.i;
349
- return instructions;
350
- } else {
351
- instructions.push(token);
352
- }
353
- }
354
-
355
- if (stack.length > 0) {
356
- throw new Error('missing closing tag: ' + stack.pop().n);
357
- }
358
-
359
- return instructions;
360
- }
361
-
362
- function isOpener(token, tags) {
363
- for (var i = 0, l = tags.length; i < l; i++) {
364
- if (tags[i].o == token.n) {
365
- token.tag = '#';
366
- return true;
367
- }
368
- }
369
- }
370
-
371
- function isCloser(close, open, tags) {
372
- for (var i = 0, l = tags.length; i < l; i++) {
373
- if (tags[i].c == close && tags[i].o == open) {
374
- return true;
375
- }
376
- }
377
- }
378
-
379
- function generate(tree, text, options) {
380
- var code = 'var c = [cx];var b = "";var _ = this;' +
381
- walk(tree) + 'return b;';
382
- if (options.asString) {
383
- return 'function(cx,p){' + code + ';};';
384
- }
385
-
386
- var template = new HoganTemplate(text);
387
- template.r = new Function('cx', 'p', code);
388
- return template;
389
- }
390
-
391
- var rQuot = /\"/g, rNewline = /\n/g, rCr = /\r/g, rSlash = /\\/g;
392
- function esc(s) {
393
- return s.replace(rSlash, '\\\\')
394
- .replace(rQuot, '\\\"')
395
- .replace(rNewline, '\\n')
396
- .replace(rCr, '\\r')
397
- };
398
-
399
- function chooseMethod(s) {
400
- return (~s.indexOf('.')) ? 'd' : 'f';
401
- }
402
-
403
- function walk(tree) {
404
- var code = '';
405
- for (var i = 0, l = tree.length; i < l; i++) {
406
- var tag = tree[i].tag;
407
- if (tag == '#') {
408
- code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n),
409
- tree[i].i, tree[i].end);
410
- } else if (tag == '^') {
411
- code += invertedSection(tree[i].nodes, tree[i].n,
412
- chooseMethod(tree[i].n));
413
- } else if (tag == '<' || tag == '>') {
414
- code += partial(tree[i].n);
415
- } else if (tag == '{' || tag == '&') {
416
- code += tripleStache(tree[i].n, chooseMethod(tree[i].n));
417
- } else if (tag == '\n') {
418
- code += text('\n');
419
- } else if (tag == '_v') {
420
- code += variable(tree[i].n, chooseMethod(tree[i].n));
421
- } else if (tag === undefined) {
422
- code += text(tree[i]);
423
- }
424
- }
425
- return code;
426
- }
427
-
428
- function section(nodes, id, method, start, end) {
429
- var code = 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),';
430
- code += 'c,p,0,' + start + ',' + end + ')){';
431
- code += 'b += _.rs(c,p,';
432
- code += 'function(c,p){ var b = "";';
433
- code += walk(nodes);
434
- code += 'return b;});c.pop();}';
435
- code += 'else{b += _.b; _.b = ""};';
436
- return code;
437
- }
438
-
439
- function invertedSection(nodes, id, method) {
440
- var code = 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0)){';
441
- code += walk(nodes);
442
- code += '};';
443
- return code;
444
- }
445
-
446
- function partial(id) {
447
- return 'b += _.rp("' + esc(id) + '",c[c.length - 1],p);';
448
- }
449
-
450
- function tripleStache(id, method) {
451
- return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));';
452
- }
453
-
454
- function variable(id, method) {
455
- return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));';
456
- }
457
-
458
- function text(id) {
459
- return 'b += "' + esc(id) + '";';
460
- }
461
-
462
- return ({
463
- scan: scan,
464
-
465
- parse: function(tokens, options) {
466
- options = options || {};
467
- return buildTree(tokens, '', [], options.sectionTags || []);
468
- },
469
-
470
- cache: {},
471
-
472
- compile: function(text, options) {
473
- // options
474
- //
475
- // asString: false (default)
476
- //
477
- // sectionTags: [{o: '_foo', c: 'foo'}]
478
- // An array of object with o and c fields that indicate names for custom
479
- // section tags. The example above allows parsing of {{_foo}}{{/foo}}.
480
- //
481
- options = options || {};
482
-
483
- var t = this.cache[text];
484
- if (t) {
485
- return t;
486
- }
487
- t = generate(this.parse(scan(text), options), text, options);
488
- return this.cache[text] = t;
489
- }
490
- });
491
- })();
492
-
493
- // Export the hogan constructor for Node.js and CommonJS.
494
- if (typeof module !== 'undefined' && module.exports) {
495
- module.exports = Hogan;
496
- module.exports.Template = HoganTemplate;
497
- } else if (typeof exports !== 'undefined') {
498
- exports.Hogan = Hogan;
499
- exports.HoganTemplate = HoganTemplate;
500
- }