kms 0.9.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (409) hide show
  1. checksums.yaml +4 -4
  2. data/{vendor/assets/bower_components/Responsive-Dashboard/src/img → app/assets/images}/avatar.jpg +0 -0
  3. data/app/assets/javascripts/kms/application.js +3 -0
  4. data/app/assets/javascripts/kms/application/controllers/assets_controller.coffee.erb +14 -7
  5. data/app/assets/javascripts/kms/application/controllers/pages_controller.coffee.erb +11 -3
  6. data/app/assets/javascripts/kms/application/controllers/snippets_controller.coffee.erb +3 -0
  7. data/app/assets/javascripts/kms/application/controllers/templates_controller.coffee.erb +3 -0
  8. data/app/assets/javascripts/kms/application/controllers/users_controller.coffee +4 -4
  9. data/app/assets/javascripts/kms/application/routes.coffee.erb +1 -1
  10. data/app/assets/javascripts/kms/application/services/transliteration_service.js +160 -0
  11. data/app/assets/javascripts/templates/assets/edit.html.slim +24 -2
  12. data/app/assets/javascripts/templates/assets/form.html.slim +23 -0
  13. data/app/assets/javascripts/templates/assets/index.html.slim +13 -12
  14. data/app/assets/javascripts/templates/assets/new.html.slim +1 -15
  15. data/app/assets/javascripts/templates/help.html.slim +1 -1
  16. data/app/assets/javascripts/templates/pages/index.html.slim +16 -5
  17. data/app/assets/javascripts/templates/snippets/index.html.slim +16 -5
  18. data/app/assets/javascripts/templates/templates/index.html.slim +16 -6
  19. data/app/assets/stylesheets/kms/application.css +2 -2
  20. data/app/assets/stylesheets/kms/custom.css.scss +38 -0
  21. data/app/controllers/kms/assets_controller.rb +8 -9
  22. data/app/controllers/kms/pages_controller.rb +10 -11
  23. data/app/controllers/kms/public/pages_controller.rb +5 -4
  24. data/app/controllers/kms/public/search_controller.rb +2 -0
  25. data/app/controllers/kms/settings_controller.rb +1 -1
  26. data/app/controllers/kms/snippets_controller.rb +2 -1
  27. data/app/controllers/kms/templates_controller.rb +6 -5
  28. data/app/controllers/kms/users_controller.rb +11 -8
  29. data/app/models/ability.rb +1 -0
  30. data/app/models/concerns/kms/permalinkable.rb +1 -1
  31. data/app/models/kms/page.rb +13 -4
  32. data/app/serializers/kms/asset_serializer.rb +6 -0
  33. data/app/serializers/kms/page_serializer.rb +5 -0
  34. data/app/serializers/kms/template_serializer.rb +5 -0
  35. data/app/serializers/kms/user_serializer.rb +5 -0
  36. data/app/services/kms/page_fetcher.rb +30 -0
  37. data/app/services/kms/search_service.rb +28 -3
  38. data/app/services/kms/template_processor.rb +19 -0
  39. data/app/views/devise/passwords/edit.html.erb +1 -1
  40. data/app/views/devise/passwords/new.html.erb +1 -1
  41. data/app/views/devise/registrations/new.html.erb +1 -1
  42. data/app/views/devise/sessions/new.html.erb +1 -1
  43. data/app/views/layouts/kms/devise.html.erb +1 -1
  44. data/app/views/layouts/kms/kms.html.erb +47 -18
  45. data/config/initializers/externals.rb +6 -32
  46. data/config/initializers/search.rb +1 -0
  47. data/config/locales/en.yml +17 -1
  48. data/config/locales/ru.yml +17 -1
  49. data/config/routes.rb +7 -6
  50. data/lib/kms/dependencies.rb +1 -4
  51. data/lib/kms/engine.rb +1 -2
  52. data/lib/kms/search_item.rb +18 -0
  53. data/lib/kms/version.rb +1 -1
  54. data/spec/controllers/kms/assets_controller_spec.rb +51 -0
  55. data/spec/controllers/kms/pages_controller_spec.rb +82 -0
  56. data/spec/controllers/kms/public/pages_controller_spec.rb +30 -0
  57. data/spec/controllers/kms/snippets_controller_spec.rb +61 -47
  58. data/spec/controllers/kms/templates_controller_spec.rb +51 -0
  59. data/spec/controllers/kms/users_controller_spec.rb +56 -0
  60. data/spec/factories/assets.rb +8 -0
  61. data/spec/factories/pages.rb +33 -0
  62. data/spec/factories/templates.rb +20 -0
  63. data/spec/factories/users.rb +9 -4
  64. data/spec/internal/config/routes.rb +12 -1
  65. data/spec/internal/log/test.log +81239 -0
  66. data/spec/internal/public/404.html +67 -0
  67. data/spec/internal/public/avatar.jpg +0 -0
  68. data/spec/internal/public/style.css +1 -0
  69. data/spec/internal/public/uploads/kms/asset/file/1/avatar.jpg +0 -0
  70. data/spec/internal/public/uploads/kms/asset/file/2/avatar.jpg +0 -0
  71. data/spec/internal/public/uploads/kms/asset/file/2/style.css +1 -0
  72. data/spec/internal/public/uploads/kms/asset/file/3/style.css +1 -0
  73. data/spec/internal/public/uploads/kms/asset/file/4/style.css +1 -0
  74. data/spec/internal/public/uploads/tmp/1500976987-41025-0002-0883/style.css +1 -0
  75. data/spec/internal/public/uploads/tmp/1500977082-41195-0002-6495/style.css +1 -0
  76. data/spec/internal/public/uploads/tmp/1500977109-41364-0002-4518/style.css +1 -0
  77. data/spec/internal/public/uploads/tmp/1500977152-41405-0002-2345/style.css +1 -0
  78. data/spec/internal/public/uploads/tmp/1500977327-41694-0002-5448/style.css +1 -0
  79. data/spec/internal/public/uploads/tmp/1500977376-41732-0002-7916/style.css +1 -0
  80. data/spec/internal/public/uploads/tmp/1500977392-41759-0002-7593/style.css +1 -0
  81. data/spec/internal/public/uploads/tmp/1500977410-42259-0002-7527/style.css +1 -0
  82. data/spec/internal/public/uploads/tmp/1500977429-42306-0002-5937/style.css +1 -0
  83. data/spec/internal/public/uploads/tmp/1500977437-42324-0002-5880/style.css +1 -0
  84. data/spec/internal/public/uploads/tmp/1500983228-53594-0002-4559/style.css +1 -0
  85. data/spec/internal/public/uploads/tmp/1500983284-53632-0002-6590/style.css +1 -0
  86. data/spec/internal/public/uploads/tmp/1500983360-53784-0002-7289/style.css +1 -0
  87. data/spec/internal/public/uploads/tmp/1500983469-54321-0002-0386/avatar.jpg +0 -0
  88. data/spec/internal/public/uploads/tmp/1500983469-54321-0004-5691/style.css +1 -0
  89. data/spec/internal/public/uploads/tmp/1500983511-54352-0002-5720/avatar.jpg +0 -0
  90. data/spec/internal/public/uploads/tmp/1500983511-54352-0004-1399/style.css +1 -0
  91. data/spec/internal/public/uploads/tmp/1500983610-54507-0002-4280/avatar.jpg +0 -0
  92. data/spec/internal/public/uploads/tmp/1500983610-54507-0004-9758/style.css +1 -0
  93. data/spec/internal/public/uploads/tmp/1500984466-57012-0002-4146/avatar.jpg +0 -0
  94. data/spec/internal/public/uploads/tmp/1500984466-57012-0004-5895/style.css +1 -0
  95. data/spec/internal/public/uploads/tmp/1500984509-57158-0002-9657/avatar.jpg +0 -0
  96. data/spec/internal/public/uploads/tmp/1500984509-57158-0004-5003/style.css +1 -0
  97. data/spec/internal/public/uploads/tmp/1500984616-57697-0002-7201/avatar.jpg +0 -0
  98. data/spec/internal/public/uploads/tmp/1500984616-57697-0004-6255/style.css +1 -0
  99. data/spec/internal/public/uploads/tmp/1500985257-58947-0002-3629/avatar.jpg +0 -0
  100. data/spec/internal/public/uploads/tmp/1500985257-58947-0004-5338/style.css +1 -0
  101. data/spec/internal/public/uploads/tmp/1500985407-58947-0006-5929/style.css +1 -0
  102. data/spec/internal/public/uploads/tmp/1500985473-59264-0002-0397/avatar.jpg +0 -0
  103. data/spec/internal/public/uploads/tmp/1500985473-59264-0004-6493/style.css +1 -0
  104. data/spec/internal/public/uploads/tmp/1500985475-59264-0007-8674/style.css +1 -0
  105. data/spec/internal/public/uploads/tmp/1500985538-59468-0002-9206/avatar.jpg +0 -0
  106. data/spec/internal/public/uploads/tmp/1500985538-59468-0004-2586/style.css +1 -0
  107. data/spec/internal/public/uploads/tmp/1500985538-59468-0007-6200/style.css +1 -0
  108. data/spec/internal/public/uploads/tmp/1500988358-65877-0002-4528/avatar.jpg +0 -0
  109. data/spec/internal/public/uploads/tmp/1500988358-65877-0004-5904/style.css +1 -0
  110. data/spec/internal/public/uploads/tmp/1500988358-65877-0007-7320/style.css +1 -0
  111. data/spec/internal/public/uploads/tmp/1500988407-65916-0002-3138/avatar.jpg +0 -0
  112. data/spec/internal/public/uploads/tmp/1500988407-65916-0004-5400/style.css +1 -0
  113. data/spec/internal/public/uploads/tmp/1500988407-65916-0007-1655/style.css +1 -0
  114. data/spec/internal/public/uploads/tmp/1500988421-65950-0002-9415/avatar.jpg +0 -0
  115. data/spec/internal/public/uploads/tmp/1500988421-65950-0004-7130/style.css +1 -0
  116. data/spec/internal/public/uploads/tmp/1500988421-65950-0007-9886/style.css +1 -0
  117. data/spec/internal/public/uploads/tmp/1500988435-65981-0002-3228/avatar.jpg +0 -0
  118. data/spec/internal/public/uploads/tmp/1500988435-65981-0004-3682/style.css +1 -0
  119. data/spec/internal/public/uploads/tmp/1500988435-65981-0007-1582/style.css +1 -0
  120. data/spec/internal/public/uploads/tmp/1500988475-66122-0002-9516/avatar.jpg +0 -0
  121. data/spec/internal/public/uploads/tmp/1500988475-66122-0004-5634/style.css +1 -0
  122. data/spec/internal/public/uploads/tmp/1500988530-66122-0007-2272/style.css +1 -0
  123. data/spec/internal/public/uploads/tmp/1500988554-66315-0002-6262/avatar.jpg +0 -0
  124. data/spec/internal/public/uploads/tmp/1500988554-66315-0004-6099/style.css +1 -0
  125. data/spec/internal/public/uploads/tmp/1500988554-66315-0007-1632/style.css +1 -0
  126. data/spec/internal/public/uploads/tmp/1500991751-73722-0002-9937/avatar.jpg +0 -0
  127. data/spec/internal/public/uploads/tmp/1500991751-73722-0004-8034/style.css +1 -0
  128. data/spec/internal/public/uploads/tmp/1500991751-73722-0007-7763/style.css +1 -0
  129. data/spec/internal/public/uploads/tmp/1501233238-34385-0002-3210/avatar.jpg +0 -0
  130. data/spec/internal/public/uploads/tmp/1501233238-34385-0004-5881/style.css +1 -0
  131. data/spec/internal/public/uploads/tmp/1501233238-34385-0007-6280/style.css +1 -0
  132. data/spec/models/kms/page_spec.rb +31 -0
  133. data/spec/models/kms/template_spec.rb +15 -0
  134. data/spec/services/kms/page_fetcher_spec.rb +36 -0
  135. data/spec/services/kms/search_service_spec.rb +53 -0
  136. data/spec/services/kms/template_processor_spec.rb +20 -0
  137. data/spec/support/controller_macros.rb +9 -1
  138. data/vendor/assets/bower.json +3 -2
  139. data/vendor/assets/bower_components/angular-ui-select/CHANGELOG.md +169 -0
  140. data/vendor/assets/bower_components/angular-ui-select/CONTRIBUTING.md +161 -0
  141. data/vendor/assets/bower_components/angular-ui-select/README.md +27 -13
  142. data/vendor/assets/bower_components/angular-ui-select/bower.json +6 -3
  143. data/vendor/assets/bower_components/angular-ui-select/composer.json +29 -0
  144. data/vendor/assets/bower_components/angular-ui-select/deploy-docs.sh +31 -0
  145. data/vendor/assets/bower_components/angular-ui-select/dist/select.css +48 -2
  146. data/vendor/assets/bower_components/angular-ui-select/dist/select.js +454 -111
  147. data/vendor/assets/bower_components/angular-ui-select/dist/select.min.css +2 -2
  148. data/vendor/assets/bower_components/angular-ui-select/dist/select.min.js +2 -2
  149. data/vendor/assets/bower_components/angular-ui-select/docs/assets/app.js +1 -0
  150. data/vendor/assets/bower_components/angular-ui-select/docs/assets/demo.js +461 -0
  151. data/vendor/assets/bower_components/angular-ui-select/docs/assets/docs.css +339 -0
  152. data/vendor/assets/bower_components/angular-ui-select/docs/assets/plunkr.js +110 -0
  153. data/vendor/assets/bower_components/angular-ui-select/docs/index.html +191 -0
  154. data/vendor/assets/bower_components/angular-ui-select/docs/partials/_footer.html +2 -0
  155. data/vendor/assets/bower_components/angular-ui-select/docs/partials/_header.html +64 -0
  156. data/vendor/assets/bower_components/angular-ui-select/index.js +2 -0
  157. data/vendor/assets/bower_components/angular-ui-select/package.json +36 -15
  158. data/vendor/assets/bower_components/bootstrap/CHANGELOG.md +5 -0
  159. data/vendor/assets/bower_components/bootstrap/Gemfile +6 -0
  160. data/vendor/assets/bower_components/bootstrap/Gemfile.lock +43 -0
  161. data/vendor/assets/bower_components/bootstrap/Gruntfile.js +176 -145
  162. data/vendor/assets/bower_components/bootstrap/ISSUE_TEMPLATE.md +22 -0
  163. data/vendor/assets/bower_components/bootstrap/LICENSE +1 -1
  164. data/vendor/assets/bower_components/bootstrap/README.md +55 -40
  165. data/vendor/assets/bower_components/bootstrap/bower.json +5 -9
  166. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css +204 -59
  167. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css.map +1 -1
  168. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +4 -3
  169. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map +1 -0
  170. data/vendor/assets/bower_components/bootstrap/dist/css/{bootstrap.less → bootstrap.css} +881 -327
  171. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css.map +1 -1
  172. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css +6 -0
  173. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css.map +1 -0
  174. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  175. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +272 -213
  176. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  177. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  178. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  179. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.js +549 -286
  180. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js +5 -4
  181. data/vendor/assets/bower_components/bootstrap/dist/js/npm.js +13 -0
  182. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  183. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg +272 -213
  184. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  185. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  186. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  187. data/vendor/assets/bower_components/bootstrap/grunt/bs-commonjs-generator.js +30 -0
  188. data/vendor/assets/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js +5 -4
  189. data/vendor/assets/bower_components/bootstrap/grunt/bs-lessdoc-parser.js +13 -12
  190. data/vendor/assets/bower_components/bootstrap/grunt/bs-raw-files-generator.js +6 -8
  191. data/vendor/assets/bower_components/bootstrap/grunt/change-version.js +109 -0
  192. data/vendor/assets/bower_components/bootstrap/grunt/configBridge.json +46 -0
  193. data/vendor/assets/bower_components/bootstrap/grunt/npm-shrinkwrap.json +2679 -0
  194. data/vendor/assets/bower_components/bootstrap/grunt/sauce_browsers.yml +5 -5
  195. data/vendor/assets/bower_components/bootstrap/js/affix.js +46 -26
  196. data/vendor/assets/bower_components/bootstrap/js/alert.js +8 -6
  197. data/vendor/assets/bower_components/bootstrap/js/button.js +34 -19
  198. data/vendor/assets/bower_components/bootstrap/js/carousel.js +35 -21
  199. data/vendor/assets/bower_components/bootstrap/js/collapse.js +69 -27
  200. data/vendor/assets/bower_components/bootstrap/js/dropdown.js +55 -41
  201. data/vendor/assets/bower_components/bootstrap/js/modal.js +91 -32
  202. data/vendor/assets/bower_components/bootstrap/js/popover.js +5 -10
  203. data/vendor/assets/bower_components/bootstrap/js/scrollspy.js +28 -26
  204. data/vendor/assets/bower_components/bootstrap/js/tab.js +45 -18
  205. data/vendor/assets/bower_components/bootstrap/js/tooltip.js +117 -54
  206. data/vendor/assets/bower_components/bootstrap/js/transition.js +2 -2
  207. data/vendor/assets/bower_components/bootstrap/less/alerts.less +5 -0
  208. data/vendor/assets/bower_components/bootstrap/less/badges.less +14 -3
  209. data/vendor/assets/bower_components/bootstrap/less/bootstrap.less +6 -0
  210. data/vendor/assets/bower_components/bootstrap/less/button-groups.less +22 -18
  211. data/vendor/assets/bower_components/bootstrap/less/buttons.less +19 -10
  212. data/vendor/assets/bower_components/bootstrap/less/carousel.less +34 -7
  213. data/vendor/assets/bower_components/bootstrap/less/close.less +1 -0
  214. data/vendor/assets/bower_components/bootstrap/less/code.less +1 -0
  215. data/vendor/assets/bower_components/bootstrap/less/component-animations.less +3 -1
  216. data/vendor/assets/bower_components/bootstrap/less/dropdowns.less +9 -8
  217. data/vendor/assets/bower_components/bootstrap/less/forms.less +123 -50
  218. data/vendor/assets/bower_components/bootstrap/less/glyphicons.less +75 -3
  219. data/vendor/assets/bower_components/bootstrap/less/input-groups.less +8 -3
  220. data/vendor/assets/bower_components/bootstrap/less/jumbotron.less +10 -4
  221. data/vendor/assets/bower_components/bootstrap/less/list-group.less +10 -11
  222. data/vendor/assets/bower_components/bootstrap/less/media.less +40 -30
  223. data/vendor/assets/bower_components/bootstrap/less/mixins.less +1 -0
  224. data/vendor/assets/bower_components/bootstrap/less/mixins/background-variant.less +2 -1
  225. data/vendor/assets/bower_components/bootstrap/less/mixins/buttons.less +19 -4
  226. data/vendor/assets/bower_components/bootstrap/less/mixins/forms.less +5 -1
  227. data/vendor/assets/bower_components/bootstrap/less/mixins/grid-framework.less +4 -4
  228. data/vendor/assets/bower_components/bootstrap/less/mixins/grid.less +4 -4
  229. data/vendor/assets/bower_components/bootstrap/less/mixins/hide-text.less +2 -2
  230. data/vendor/assets/bower_components/bootstrap/less/mixins/image.less +0 -1
  231. data/vendor/assets/bower_components/bootstrap/less/mixins/labels.less +1 -1
  232. data/vendor/assets/bower_components/bootstrap/less/mixins/list-group.less +2 -1
  233. data/vendor/assets/bower_components/bootstrap/less/mixins/pagination.less +2 -1
  234. data/vendor/assets/bower_components/bootstrap/less/mixins/reset-text.less +18 -0
  235. data/vendor/assets/bower_components/bootstrap/less/mixins/responsive-visibility.less +1 -1
  236. data/vendor/assets/bower_components/bootstrap/less/mixins/tab-focus.less +3 -3
  237. data/vendor/assets/bower_components/bootstrap/less/mixins/text-emphasis.less +2 -1
  238. data/vendor/assets/bower_components/bootstrap/less/mixins/vendor-prefixes.less +8 -5
  239. data/vendor/assets/bower_components/bootstrap/less/modals.less +3 -3
  240. data/vendor/assets/bower_components/bootstrap/less/navbar.less +30 -25
  241. data/vendor/assets/bower_components/bootstrap/less/navs.less +1 -1
  242. data/vendor/assets/bower_components/bootstrap/less/normalize.less +12 -13
  243. data/vendor/assets/bower_components/bootstrap/less/pager.less +1 -2
  244. data/vendor/assets/bower_components/bootstrap/less/pagination.less +5 -4
  245. data/vendor/assets/bower_components/bootstrap/less/panels.less +33 -5
  246. data/vendor/assets/bower_components/bootstrap/less/popovers.less +5 -7
  247. data/vendor/assets/bower_components/bootstrap/less/print.less +96 -96
  248. data/vendor/assets/bower_components/bootstrap/less/progress-bars.less +1 -19
  249. data/vendor/assets/bower_components/bootstrap/less/responsive-embed.less +10 -9
  250. data/vendor/assets/bower_components/bootstrap/less/scaffolding.less +13 -2
  251. data/vendor/assets/bower_components/bootstrap/less/tables.less +14 -13
  252. data/vendor/assets/bower_components/bootstrap/less/theme.less +49 -16
  253. data/vendor/assets/bower_components/bootstrap/less/thumbnails.less +1 -1
  254. data/vendor/assets/bower_components/bootstrap/less/tooltip.less +13 -7
  255. data/vendor/assets/bower_components/bootstrap/less/type.less +2 -13
  256. data/vendor/assets/bower_components/bootstrap/less/utilities.less +0 -2
  257. data/vendor/assets/bower_components/bootstrap/less/variables.less +45 -22
  258. data/vendor/assets/bower_components/bootstrap/nuget/MyGet.ps1 +8 -0
  259. data/vendor/assets/bower_components/bootstrap/nuget/bootstrap.less.nuspec +28 -0
  260. data/vendor/assets/bower_components/bootstrap/nuget/bootstrap.nuspec +28 -0
  261. data/vendor/assets/bower_components/bootstrap/package.js +32 -0
  262. data/vendor/assets/bower_components/bootstrap/package.json +49 -41
  263. data/vendor/assets/bower_components/flow.js/README.md +79 -64
  264. data/vendor/assets/bower_components/flow.js/bower.json +6 -2
  265. data/vendor/assets/bower_components/flow.js/dist/flow.js +1635 -1532
  266. data/vendor/assets/bower_components/flow.js/dist/flow.min.js +2 -2
  267. data/vendor/assets/bower_components/flow.js/package.js +24 -0
  268. data/vendor/assets/bower_components/flow.js/travis.sh +19 -0
  269. data/vendor/assets/bower_components/font-awesome/scss/_path.scss +5 -5
  270. data/vendor/assets/bower_components/font-awesome/scss/_variables.scss +1 -2
  271. data/vendor/assets/bower_components/ng-flow/bower.json +1 -1
  272. data/vendor/assets/bower_components/ng-flow/dist/ng-flow-standalone.js +1655 -1542
  273. data/vendor/assets/bower_components/ng-flow/dist/ng-flow-standalone.min.js +2 -2
  274. data/vendor/assets/bower_components/ng-flow/dist/ng-flow.js +19 -9
  275. data/vendor/assets/bower_components/ng-flow/dist/ng-flow.min.js +2 -2
  276. data/vendor/assets/bower_components/ng-flow/index.js +3 -0
  277. data/vendor/assets/bower_components/ng-flow/package.js +25 -0
  278. data/vendor/assets/bower_components/ng-flow/src/directives/drag-events.js +2 -1
  279. data/vendor/assets/bower_components/ng-flow/src/directives/events.js +2 -1
  280. data/vendor/assets/bower_components/ng-flow/src/directives/init.js +7 -1
  281. data/vendor/assets/bower_components/ng-flow/travis.sh +19 -0
  282. data/vendor/assets/bower_components/{Responsive-Dashboard → rdash-ui}/LICENSE +21 -21
  283. data/vendor/assets/bower_components/rdash-ui/README.md +55 -0
  284. data/vendor/assets/bower_components/rdash-ui/bower.json +33 -0
  285. data/vendor/assets/bower_components/rdash-ui/dist/css/rdash.min.css +1 -0
  286. data/vendor/assets/bower_components/rdash-ui/dist/css/rdash.scss +489 -0
  287. data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.eot +0 -0
  288. data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.svg +1316 -1316
  289. data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.ttf +0 -0
  290. data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.woff +0 -0
  291. metadata +227 -180
  292. data/config/initializers/bower_rails.rb +0 -16
  293. data/vendor/assets/bower_components/Responsive-Dashboard/CONTRIBUTING.md +0 -21
  294. data/vendor/assets/bower_components/Responsive-Dashboard/README.md +0 -119
  295. data/vendor/assets/bower_components/Responsive-Dashboard/bower.json +0 -32
  296. data/vendor/assets/bower_components/Responsive-Dashboard/gulpfile.js +0 -81
  297. data/vendor/assets/bower_components/Responsive-Dashboard/package.json +0 -21
  298. data/vendor/assets/bower_components/Responsive-Dashboard/src/index.html +0 -413
  299. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/controllers/alerts-ctrl.js +0 -19
  300. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/controllers/master-ctrl.js +0 -51
  301. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/loading.js +0 -13
  302. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget-body.js +0 -16
  303. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget-header.js +0 -17
  304. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget.js +0 -16
  305. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/module.js +0 -1
  306. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/routes.js +0 -22
  307. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/content.less +0 -19
  308. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/hamburg.less +0 -29
  309. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/header.less +0 -92
  310. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/loading.less +0 -40
  311. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/main.less +0 -73
  312. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/mixins.less +0 -5
  313. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/sidebar.less +0 -122
  314. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/variables.less +0 -10
  315. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/widgets.less +0 -95
  316. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css.erb +0 -5
  317. data/vendor/assets/bower_components/flow.js/CHANGELOG.md +0 -37
  318. data/vendor/assets/bower_components/flow.js/Gruntfile.js +0 -132
  319. data/vendor/assets/bower_components/flow.js/karma.conf.js +0 -114
  320. data/vendor/assets/bower_components/flow.js/package.json +0 -50
  321. data/vendor/assets/bower_components/flow.js/src/flow.js +0 -1532
  322. data/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +0 -21
  323. data/vendor/assets/bower_components/jquery/bower.json +0 -27
  324. data/vendor/assets/bower_components/jquery/dist/jquery.js +0 -9190
  325. data/vendor/assets/bower_components/jquery/dist/jquery.min.js +0 -5
  326. data/vendor/assets/bower_components/jquery/dist/jquery.min.map +0 -1
  327. data/vendor/assets/bower_components/jquery/src/ajax.js +0 -806
  328. data/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +0 -89
  329. data/vendor/assets/bower_components/jquery/src/ajax/load.js +0 -75
  330. data/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +0 -13
  331. data/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +0 -28
  332. data/vendor/assets/bower_components/jquery/src/ajax/script.js +0 -64
  333. data/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +0 -5
  334. data/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +0 -3
  335. data/vendor/assets/bower_components/jquery/src/ajax/xhr.js +0 -135
  336. data/vendor/assets/bower_components/jquery/src/attributes.js +0 -11
  337. data/vendor/assets/bower_components/jquery/src/attributes/attr.js +0 -143
  338. data/vendor/assets/bower_components/jquery/src/attributes/classes.js +0 -158
  339. data/vendor/assets/bower_components/jquery/src/attributes/prop.js +0 -96
  340. data/vendor/assets/bower_components/jquery/src/attributes/support.js +0 -35
  341. data/vendor/assets/bower_components/jquery/src/attributes/val.js +0 -163
  342. data/vendor/assets/bower_components/jquery/src/callbacks.js +0 -205
  343. data/vendor/assets/bower_components/jquery/src/core.js +0 -498
  344. data/vendor/assets/bower_components/jquery/src/core/access.js +0 -60
  345. data/vendor/assets/bower_components/jquery/src/core/init.js +0 -123
  346. data/vendor/assets/bower_components/jquery/src/core/parseHTML.js +0 -39
  347. data/vendor/assets/bower_components/jquery/src/core/ready.js +0 -97
  348. data/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +0 -4
  349. data/vendor/assets/bower_components/jquery/src/css.js +0 -451
  350. data/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +0 -24
  351. data/vendor/assets/bower_components/jquery/src/css/curCSS.js +0 -57
  352. data/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +0 -70
  353. data/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +0 -15
  354. data/vendor/assets/bower_components/jquery/src/css/support.js +0 -91
  355. data/vendor/assets/bower_components/jquery/src/css/swap.js +0 -28
  356. data/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +0 -3
  357. data/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +0 -5
  358. data/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +0 -13
  359. data/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +0 -3
  360. data/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +0 -5
  361. data/vendor/assets/bower_components/jquery/src/data.js +0 -179
  362. data/vendor/assets/bower_components/jquery/src/data/Data.js +0 -181
  363. data/vendor/assets/bower_components/jquery/src/data/accepts.js +0 -20
  364. data/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +0 -5
  365. data/vendor/assets/bower_components/jquery/src/data/var/data_user.js +0 -5
  366. data/vendor/assets/bower_components/jquery/src/deferred.js +0 -149
  367. data/vendor/assets/bower_components/jquery/src/deprecated.js +0 -13
  368. data/vendor/assets/bower_components/jquery/src/dimensions.js +0 -50
  369. data/vendor/assets/bower_components/jquery/src/effects.js +0 -649
  370. data/vendor/assets/bower_components/jquery/src/effects/Tween.js +0 -114
  371. data/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +0 -13
  372. data/vendor/assets/bower_components/jquery/src/event.js +0 -868
  373. data/vendor/assets/bower_components/jquery/src/event/alias.js +0 -39
  374. data/vendor/assets/bower_components/jquery/src/event/support.js +0 -9
  375. data/vendor/assets/bower_components/jquery/src/exports/amd.js +0 -24
  376. data/vendor/assets/bower_components/jquery/src/exports/global.js +0 -32
  377. data/vendor/assets/bower_components/jquery/src/intro.js +0 -44
  378. data/vendor/assets/bower_components/jquery/src/jquery.js +0 -36
  379. data/vendor/assets/bower_components/jquery/src/manipulation.js +0 -582
  380. data/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +0 -18
  381. data/vendor/assets/bower_components/jquery/src/manipulation/support.js +0 -31
  382. data/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +0 -3
  383. data/vendor/assets/bower_components/jquery/src/offset.js +0 -204
  384. data/vendor/assets/bower_components/jquery/src/outro.js +0 -1
  385. data/vendor/assets/bower_components/jquery/src/queue.js +0 -142
  386. data/vendor/assets/bower_components/jquery/src/queue/delay.js +0 -22
  387. data/vendor/assets/bower_components/jquery/src/selector-native.js +0 -172
  388. data/vendor/assets/bower_components/jquery/src/selector-sizzle.js +0 -14
  389. data/vendor/assets/bower_components/jquery/src/selector.js +0 -1
  390. data/vendor/assets/bower_components/jquery/src/serialize.js +0 -111
  391. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +0 -2044
  392. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +0 -3
  393. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +0 -1
  394. data/vendor/assets/bower_components/jquery/src/traversing.js +0 -200
  395. data/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +0 -100
  396. data/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +0 -6
  397. data/vendor/assets/bower_components/jquery/src/var/arr.js +0 -3
  398. data/vendor/assets/bower_components/jquery/src/var/class2type.js +0 -4
  399. data/vendor/assets/bower_components/jquery/src/var/concat.js +0 -5
  400. data/vendor/assets/bower_components/jquery/src/var/hasOwn.js +0 -5
  401. data/vendor/assets/bower_components/jquery/src/var/indexOf.js +0 -5
  402. data/vendor/assets/bower_components/jquery/src/var/pnum.js +0 -3
  403. data/vendor/assets/bower_components/jquery/src/var/push.js +0 -5
  404. data/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +0 -3
  405. data/vendor/assets/bower_components/jquery/src/var/slice.js +0 -5
  406. data/vendor/assets/bower_components/jquery/src/var/strundefined.js +0 -3
  407. data/vendor/assets/bower_components/jquery/src/var/support.js +0 -4
  408. data/vendor/assets/bower_components/jquery/src/var/toString.js +0 -5
  409. data/vendor/assets/bower_components/jquery/src/wrap.js +0 -78
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" ng-app="demo">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>AngularJS ui-select</title>
6
+
7
+ <!--
8
+ IE8 support, see AngularJS Internet Explorer Compatibility http://docs.angularjs.org/guide/ie
9
+ For Firefox 3.6, you will also need to include jQuery and ECMAScript 5 shim
10
+ -->
11
+ <!--[if lt IE 9]>
12
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.js"></script>
13
+ <script src="http://cdnjs.cloudflare.com/ajax/libs/es5-shim/2.2.0/es5-shim.js"></script>
14
+ <script>
15
+ document.createElement('ui-select');
16
+ document.createElement('ui-select-match');
17
+ document.createElement('ui-select-choices');
18
+ </script>
19
+ <![endif]-->
20
+
21
+ <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
22
+ <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-sanitize.js"></script>
23
+
24
+ <!-- ui-select files -->
25
+ <script src="./dist/select.js"></script>
26
+ <link rel="stylesheet" href="./dist/select.css">
27
+
28
+ <script src="./assets/demo.js"></script>
29
+
30
+ <!-- themes -->
31
+ <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.css">
32
+ <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.css">
33
+ <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.default.css">
34
+ <!-- <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.bootstrap2.css"> -->
35
+ <!--<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.bootstrap3.css">-->
36
+
37
+ <style>
38
+ body {
39
+ padding: 15px;
40
+ }
41
+
42
+ .select2 > .select2-choice.ui-select-match {
43
+ /* Because of the inclusion of Bootstrap */
44
+ height: 29px;
45
+ }
46
+
47
+ .selectize-control > .selectize-dropdown {
48
+ top: 36px;
49
+ }
50
+ /* Some additional styling to demonstrate that append-to-body helps achieve the proper z-index layering. */
51
+ .select-box {
52
+ background: #fff;
53
+ position: relative;
54
+ z-index: 1;
55
+ }
56
+ .alert-info.positioned {
57
+ margin-top: 1em;
58
+ position: relative;
59
+ z-index: 10000; /* The select2 dropdown has a z-index of 9999 */
60
+ }
61
+ </style>
62
+ </head>
63
+
64
+ <body class="ng-cloak" ng-controller="DemoCtrl as ctrl">
@@ -0,0 +1,2 @@
1
+ require('./dist/select.js');
2
+ module.exports = 'ui.select';
@@ -1,28 +1,42 @@
1
1
  {
2
2
  "name": "ui-select",
3
- "main": "dist/select.js",
3
+ "main": "./index.js",
4
4
  "author": "http://github.com/angular-ui/ui-select/graphs/contributors",
5
5
  "homepage": "http://github.com/angular-ui/ui-select",
6
6
  "repository": {
7
7
  "url": "git://github.com/angular-ui/ui-select.git"
8
8
  },
9
- "version": "0.11.2",
9
+ "style": "dist/select.css",
10
+ "version": "0.17.0",
10
11
  "devDependencies": {
11
- "bower": "~1.3",
12
+ "angular": "^1.2.18",
13
+ "angular-mocks": "^1.2.18",
14
+ "angular-sanitize": "^1.2.18",
15
+ "conventional-changelog": "^0.5.3",
16
+ "conventional-recommended-bump": "0.0.3",
12
17
  "del": "~0.1.1",
13
18
  "event-stream": "~3.1.0",
14
- "gulp": "~3.8.5",
15
- "gulp-angular-templatecache": "~1.2.1",
16
- "gulp-concat": "~2.1.7",
17
- "gulp-header": "~1.0.2",
18
- "gulp-footer": "~1.0.5",
19
- "gulp-jshint": "1.6.4",
20
- "gulp-minify-css": "~0.3.6",
21
- "gulp-minify-html": "~0.1.0",
19
+ "gulp": "^3.9.1",
20
+ "gulp-angular-templatecache": "^1.8.0",
21
+ "gulp-bump": "^1.0.0",
22
+ "gulp-conventional-changelog": "^0.7.0",
23
+ "gulp-concat": "^2.6.0",
24
+ "gulp-filenames": "^2.0.0",
25
+ "gulp-git": "^1.4.0",
26
+ "gulp-header": "^1.7.1",
27
+ "gulp-footer": "^1.0.5",
28
+ "gulp-jshint": "^2.0.0",
29
+ "gulp-load-plugins": "^1.1.0",
30
+ "gulp-minify-css": "^1.2.4",
31
+ "gulp-minify-html": "^1.0.6",
22
32
  "gulp-plumber": "^0.6.3",
23
- "gulp-rename": "~0.2.2",
24
- "gulp-uglify": "~0.3.1",
33
+ "gulp-replace": "^0.5.4",
34
+ "gulp-sourcemaps": "^1.6.0",
35
+ "gulp-tag-version": "^1.3.0",
36
+ "gulp-uglify": "^1.5.3",
25
37
  "gulp-util": "^2.2.19",
38
+ "jquery": "~1.11",
39
+ "jshint": "^2.9.1",
26
40
  "jshint-stylish": "~0.3.0",
27
41
  "karma": "^0.12.16",
28
42
  "karma-chrome-launcher": "^0.1.3",
@@ -30,11 +44,18 @@
30
44
  "karma-jasmine": "~0.2",
31
45
  "karma-ng-html2js-preprocessor": "^0.1.0",
32
46
  "karma-phantomjs-launcher": "~0.1.4",
33
- "karma-coverage": "~0.2"
47
+ "karma-coverage": "~0.2",
48
+ "run-sequence": "^1.1.5",
49
+ "title-case": "^1.1.2"
34
50
  },
35
51
  "scripts": {
36
- "postinstall": "bower install",
37
52
  "test": "gulp test"
38
53
  },
54
+ "spm": {
55
+ "main": "dist/select.js",
56
+ "output": [
57
+ "dist/select.css"
58
+ ]
59
+ },
39
60
  "license": "MIT"
40
61
  }
@@ -0,0 +1,5 @@
1
+ Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs.
2
+
3
+ See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
4
+
5
+ Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development, :test do
4
+ gem 'jekyll', '~> 3.1.2'
5
+ gem 'jekyll-sitemap', '~> 0.11.0'
6
+ end
@@ -0,0 +1,43 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ addressable (2.4.0)
5
+ colorator (0.1)
6
+ ffi (1.9.14-x64-mingw32)
7
+ jekyll (3.1.6)
8
+ colorator (~> 0.1)
9
+ jekyll-sass-converter (~> 1.0)
10
+ jekyll-watch (~> 1.1)
11
+ kramdown (~> 1.3)
12
+ liquid (~> 3.0)
13
+ mercenary (~> 0.3.3)
14
+ rouge (~> 1.7)
15
+ safe_yaml (~> 1.0)
16
+ jekyll-sass-converter (1.4.0)
17
+ sass (~> 3.4)
18
+ jekyll-sitemap (0.11.0)
19
+ addressable (~> 2.4.0)
20
+ jekyll-watch (1.4.0)
21
+ listen (~> 3.0, < 3.1)
22
+ kramdown (1.11.1)
23
+ liquid (3.0.6)
24
+ listen (3.0.8)
25
+ rb-fsevent (~> 0.9, >= 0.9.4)
26
+ rb-inotify (~> 0.9, >= 0.9.7)
27
+ mercenary (0.3.6)
28
+ rb-fsevent (0.9.7)
29
+ rb-inotify (0.9.7)
30
+ ffi (>= 0.5.0)
31
+ rouge (1.11.1)
32
+ safe_yaml (1.0.4)
33
+ sass (3.4.22)
34
+
35
+ PLATFORMS
36
+ x64-mingw32
37
+
38
+ DEPENDENCIES
39
+ jekyll (~> 3.1.2)
40
+ jekyll-sitemap (~> 0.11.0)
41
+
42
+ BUNDLED WITH
43
+ 1.12.5
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Bootstrap's Gruntfile
3
3
  * http://getbootstrap.com
4
- * Copyright 2013-2014 Twitter, Inc.
4
+ * Copyright 2013-2016 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
6
  */
7
7
 
@@ -17,10 +17,23 @@ module.exports = function (grunt) {
17
17
 
18
18
  var fs = require('fs');
19
19
  var path = require('path');
20
- var npmShrinkwrap = require('npm-shrinkwrap');
21
20
  var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
22
21
  var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
22
+ var getLessVarsData = function () {
23
+ var filePath = path.join(__dirname, 'less/variables.less');
24
+ var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
25
+ var parser = new BsLessdocParser(fileContent);
26
+ return { sections: parser.parseFile() };
27
+ };
23
28
  var generateRawFiles = require('./grunt/bs-raw-files-generator.js');
29
+ var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js');
30
+ var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' });
31
+
32
+ Object.keys(configBridge.paths).forEach(function (key) {
33
+ configBridge.paths[key].forEach(function (val, i, arr) {
34
+ arr[i] = path.join('./docs/assets', val);
35
+ });
36
+ });
24
37
 
25
38
  // Project configuration.
26
39
  grunt.initConfig({
@@ -30,14 +43,15 @@ module.exports = function (grunt) {
30
43
  banner: '/*!\n' +
31
44
  ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
32
45
  ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
33
- ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' +
46
+ ' * Licensed under the <%= pkg.license %> license\n' +
34
47
  ' */\n',
35
- // NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too.
36
- jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n',
48
+ jqueryCheck: configBridge.config.jqueryCheck.join('\n'),
49
+ jqueryVersionCheck: configBridge.config.jqueryVersionCheck.join('\n'),
37
50
 
38
51
  // Task configuration.
39
52
  clean: {
40
- dist: ['dist', 'docs/dist']
53
+ dist: 'dist',
54
+ docs: 'docs/dist'
41
55
  },
42
56
 
43
57
  jshint: {
@@ -48,9 +62,9 @@ module.exports = function (grunt) {
48
62
  options: {
49
63
  jshintrc: 'grunt/.jshintrc'
50
64
  },
51
- src: ['Gruntfile.js', 'grunt/*.js']
65
+ src: ['Gruntfile.js', 'package.js', 'grunt/*.js']
52
66
  },
53
- src: {
67
+ core: {
54
68
  src: 'js/*.js'
55
69
  },
56
70
  test: {
@@ -60,7 +74,7 @@ module.exports = function (grunt) {
60
74
  src: 'js/tests/unit/*.js'
61
75
  },
62
76
  assets: {
63
- src: ['docs/assets/js/_src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
77
+ src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
64
78
  }
65
79
  },
66
80
 
@@ -71,8 +85,8 @@ module.exports = function (grunt) {
71
85
  grunt: {
72
86
  src: '<%= jshint.grunt.src %>'
73
87
  },
74
- src: {
75
- src: '<%= jshint.src.src %>'
88
+ core: {
89
+ src: '<%= jshint.core.src %>'
76
90
  },
77
91
  test: {
78
92
  src: '<%= jshint.test.src %>'
@@ -87,7 +101,7 @@ module.exports = function (grunt) {
87
101
 
88
102
  concat: {
89
103
  options: {
90
- banner: '<%= banner %>\n<%= jqueryCheck %>',
104
+ banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
91
105
  stripBanners: false
92
106
  },
93
107
  bootstrap: {
@@ -111,30 +125,22 @@ module.exports = function (grunt) {
111
125
 
112
126
  uglify: {
113
127
  options: {
114
- preserveComments: 'some'
128
+ compress: {
129
+ warnings: false
130
+ },
131
+ mangle: true,
132
+ preserveComments: /^!|@preserve|@license|@cc_on/i
115
133
  },
116
- bootstrap: {
134
+ core: {
117
135
  src: '<%= concat.bootstrap.dest %>',
118
136
  dest: 'dist/js/<%= pkg.name %>.min.js'
119
137
  },
120
138
  customize: {
121
- src: [
122
- 'docs/assets/js/_vendor/less.min.js',
123
- 'docs/assets/js/_vendor/jszip.min.js',
124
- 'docs/assets/js/_vendor/uglify.min.js',
125
- 'docs/assets/js/_vendor/blob.js',
126
- 'docs/assets/js/_vendor/filesaver.js',
127
- 'docs/assets/js/raw-files.min.js',
128
- 'docs/assets/js/_src/customizer.js'
129
- ],
139
+ src: configBridge.paths.customizerJs,
130
140
  dest: 'docs/assets/js/customize.min.js'
131
141
  },
132
142
  docsJs: {
133
- src: [
134
- 'docs/assets/js/_vendor/holder.js',
135
- 'docs/assets/js/_vendor/ZeroClipboard.min.js',
136
- 'docs/assets/js/_src/application.js'
137
- ],
143
+ src: configBridge.paths.docsJs,
138
144
  dest: 'docs/assets/js/docs.min.js'
139
145
  }
140
146
  },
@@ -155,9 +161,8 @@ module.exports = function (grunt) {
155
161
  sourceMapURL: '<%= pkg.name %>.css.map',
156
162
  sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
157
163
  },
158
- files: {
159
- 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less'
160
- }
164
+ src: 'less/bootstrap.less',
165
+ dest: 'dist/css/<%= pkg.name %>.css'
161
166
  },
162
167
  compileTheme: {
163
168
  options: {
@@ -167,24 +172,14 @@ module.exports = function (grunt) {
167
172
  sourceMapURL: '<%= pkg.name %>-theme.css.map',
168
173
  sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
169
174
  },
170
- files: {
171
- 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less'
172
- }
175
+ src: 'less/theme.less',
176
+ dest: 'dist/css/<%= pkg.name %>-theme.css'
173
177
  }
174
178
  },
175
179
 
176
180
  autoprefixer: {
177
181
  options: {
178
- browsers: [
179
- 'Android 2.3',
180
- 'Android >= 4',
181
- 'Chrome >= 20',
182
- 'Firefox >= 24', // Firefox 24 is the latest ESR
183
- 'Explorer >= 8',
184
- 'iOS >= 6',
185
- 'Opera >= 12',
186
- 'Safari >= 6'
187
- ]
182
+ browsers: configBridge.config.autoprefixerBrowsers
188
183
  },
189
184
  core: {
190
185
  options: {
@@ -199,7 +194,7 @@ module.exports = function (grunt) {
199
194
  src: 'dist/css/<%= pkg.name %>-theme.css'
200
195
  },
201
196
  docs: {
202
- src: 'docs/assets/css/_src/docs.css'
197
+ src: ['docs/assets/css/src/docs.css']
203
198
  },
204
199
  examples: {
205
200
  expand: true,
@@ -213,7 +208,7 @@ module.exports = function (grunt) {
213
208
  options: {
214
209
  csslintrc: 'less/.csslintrc'
215
210
  },
216
- src: [
211
+ dist: [
217
212
  'dist/css/bootstrap.css',
218
213
  'dist/css/bootstrap-theme.css'
219
214
  ],
@@ -225,41 +220,38 @@ module.exports = function (grunt) {
225
220
  ids: false,
226
221
  'overqualified-elements': false
227
222
  },
228
- src: 'docs/assets/css/_src/docs.css'
223
+ src: 'docs/assets/css/src/docs.css'
229
224
  }
230
225
  },
231
226
 
232
227
  cssmin: {
233
228
  options: {
229
+ // TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
230
+ // and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
234
231
  compatibility: 'ie8',
235
232
  keepSpecialComments: '*',
236
- noAdvanced: true
233
+ sourceMap: true,
234
+ sourceMapInlineSources: true,
235
+ advanced: false
237
236
  },
238
- core: {
239
- files: {
240
- 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',
241
- 'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css'
242
- }
237
+ minifyCore: {
238
+ src: 'dist/css/<%= pkg.name %>.css',
239
+ dest: 'dist/css/<%= pkg.name %>.min.css'
240
+ },
241
+ minifyTheme: {
242
+ src: 'dist/css/<%= pkg.name %>-theme.css',
243
+ dest: 'dist/css/<%= pkg.name %>-theme.min.css'
243
244
  },
244
245
  docs: {
245
246
  src: [
246
- 'docs/assets/css/_src/docs.css',
247
- 'docs/assets/css/_src/pygments-manni.css'
247
+ 'docs/assets/css/ie10-viewport-bug-workaround.css',
248
+ 'docs/assets/css/src/pygments-manni.css',
249
+ 'docs/assets/css/src/docs.css'
248
250
  ],
249
251
  dest: 'docs/assets/css/docs.min.css'
250
252
  }
251
253
  },
252
254
 
253
- usebanner: {
254
- options: {
255
- position: 'top',
256
- banner: '<%= banner %>'
257
- },
258
- files: {
259
- src: 'dist/css/*.css'
260
- }
261
- },
262
-
263
255
  csscomb: {
264
256
  options: {
265
257
  config: 'less/.csscomb.json'
@@ -277,27 +269,24 @@ module.exports = function (grunt) {
277
269
  dest: 'docs/examples/'
278
270
  },
279
271
  docs: {
280
- files: {
281
- 'docs/assets/css/_src/docs.css': 'docs/assets/css/_src/docs.css'
282
- }
272
+ src: 'docs/assets/css/src/docs.css',
273
+ dest: 'docs/assets/css/src/docs.css'
283
274
  }
284
275
  },
285
276
 
286
277
  copy: {
287
278
  fonts: {
288
279
  expand: true,
289
- src: 'fonts/*',
280
+ src: 'fonts/**',
290
281
  dest: 'dist/'
291
282
  },
292
283
  docs: {
293
284
  expand: true,
294
- cwd: './dist',
285
+ cwd: 'dist/',
295
286
  src: [
296
- '{css,js}/*.min.*',
297
- 'css/*.map',
298
- 'fonts/*'
287
+ '**/*'
299
288
  ],
300
- dest: 'docs/dist'
289
+ dest: 'docs/dist/'
301
290
  }
302
291
  },
303
292
 
@@ -311,76 +300,103 @@ module.exports = function (grunt) {
311
300
  },
312
301
 
313
302
  jekyll: {
314
- docs: {}
303
+ options: {
304
+ bundleExec: true,
305
+ config: '_config.yml',
306
+ incremental: false
307
+ },
308
+ docs: {},
309
+ github: {
310
+ options: {
311
+ raw: 'github: true'
312
+ }
313
+ }
315
314
  },
316
315
 
317
- jade: {
318
- compile: {
316
+ htmlmin: {
317
+ dist: {
319
318
  options: {
320
- pretty: true,
321
- data: function () {
322
- var filePath = path.join(__dirname, 'less/variables.less');
323
- var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
324
- var parser = new BsLessdocParser(fileContent);
325
- return { sections: parser.parseFile() };
326
- }
319
+ collapseBooleanAttributes: true,
320
+ collapseWhitespace: true,
321
+ conservativeCollapse: true,
322
+ decodeEntities: false,
323
+ minifyCSS: {
324
+ compatibility: 'ie8',
325
+ keepSpecialComments: 0
326
+ },
327
+ minifyJS: true,
328
+ minifyURLs: false,
329
+ processConditionalComments: true,
330
+ removeAttributeQuotes: true,
331
+ removeComments: true,
332
+ removeOptionalAttributes: true,
333
+ removeOptionalTags: true,
334
+ removeRedundantAttributes: true,
335
+ removeScriptTypeAttributes: true,
336
+ removeStyleLinkTypeAttributes: true,
337
+ removeTagWhitespace: false,
338
+ sortAttributes: true,
339
+ sortClassName: true
327
340
  },
328
- files: {
329
- 'docs/_includes/customizer-variables.html': 'docs/_jade/customizer-variables.jade',
330
- 'docs/_includes/nav/customize.html': 'docs/_jade/customizer-nav.jade'
331
- }
341
+ expand: true,
342
+ cwd: '_gh_pages',
343
+ dest: '_gh_pages',
344
+ src: [
345
+ '**/*.html',
346
+ '!examples/**/*.html'
347
+ ]
332
348
  }
333
349
  },
334
350
 
335
- validation: {
351
+ pug: {
336
352
  options: {
337
- charset: 'utf-8',
338
- doctype: 'HTML5',
339
- failHard: true,
340
- reset: true,
341
- relaxerror: [
342
- 'Bad value X-UA-Compatible for attribute http-equiv on element meta.',
343
- 'Element img is missing required attribute src.'
344
- ]
353
+ pretty: true,
354
+ data: getLessVarsData
345
355
  },
346
- files: {
347
- src: '_gh_pages/**/*.html'
356
+ customizerVars: {
357
+ src: 'docs/_pug/customizer-variables.pug',
358
+ dest: 'docs/_includes/customizer-variables.html'
359
+ },
360
+ customizerNav: {
361
+ src: 'docs/_pug/customizer-nav.pug',
362
+ dest: 'docs/_includes/nav/customize.html'
348
363
  }
349
364
  },
350
365
 
366
+ htmllint: {
367
+ options: {
368
+ ignore: [
369
+ 'Attribute "autocomplete" not allowed on element "button" at this point.',
370
+ 'Attribute "autocomplete" is only allowed when the input type is "color", "date", "datetime", "datetime-local", "email", "hidden", "month", "number", "password", "range", "search", "tel", "text", "time", "url", or "week".',
371
+ 'Element "img" is missing required attribute "src".'
372
+ ]
373
+ },
374
+ src: '_gh_pages/**/*.html'
375
+ },
376
+
351
377
  watch: {
352
378
  src: {
353
- files: '<%= jshint.src.src %>',
354
- tasks: ['jshint:src', 'qunit']
379
+ files: '<%= jshint.core.src %>',
380
+ tasks: ['jshint:core', 'qunit', 'concat']
355
381
  },
356
382
  test: {
357
383
  files: '<%= jshint.test.src %>',
358
384
  tasks: ['jshint:test', 'qunit']
359
385
  },
360
386
  less: {
361
- files: 'less/*.less',
387
+ files: 'less/**/*.less',
362
388
  tasks: 'less'
363
389
  }
364
390
  },
365
391
 
366
- sed: {
367
- versionNumber: {
368
- pattern: (function () {
369
- var old = grunt.option('oldver');
370
- return old ? RegExp.quote(old) : old;
371
- })(),
372
- replacement: grunt.option('newver'),
373
- recursive: true
374
- }
375
- },
376
-
377
392
  'saucelabs-qunit': {
378
393
  all: {
379
394
  options: {
380
395
  build: process.env.TRAVIS_JOB_ID,
381
- concurrency: 10,
396
+ throttled: 10,
382
397
  maxRetries: 3,
383
- urls: ['http://127.0.0.1:3000/js/tests/index.html'],
398
+ maxPollRetries: 4,
399
+ urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
384
400
  browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
385
401
  }
386
402
  }
@@ -390,7 +406,27 @@ module.exports = function (grunt) {
390
406
  npmUpdate: {
391
407
  command: 'npm update'
392
408
  }
409
+ },
410
+
411
+ compress: {
412
+ main: {
413
+ options: {
414
+ archive: 'bootstrap-<%= pkg.version %>-dist.zip',
415
+ mode: 'zip',
416
+ level: 9,
417
+ pretty: true
418
+ },
419
+ files: [
420
+ {
421
+ expand: true,
422
+ cwd: 'dist/',
423
+ src: ['**'],
424
+ dest: 'bootstrap-<%= pkg.version %>-dist'
425
+ }
426
+ ]
427
+ }
393
428
  }
429
+
394
430
  });
395
431
 
396
432
 
@@ -399,7 +435,7 @@ module.exports = function (grunt) {
399
435
  require('time-grunt')(grunt);
400
436
 
401
437
  // Docs HTML validation task
402
- grunt.registerTask('validate-html', ['jekyll', 'validation']);
438
+ grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']);
403
439
 
404
440
  var runSubset = function (subset) {
405
441
  return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
@@ -411,8 +447,10 @@ module.exports = function (grunt) {
411
447
  // Test task.
412
448
  var testSubtasks = [];
413
449
  // Skip core tests if running a different subset of the test suite
414
- if (runSubset('core')) {
415
- testSubtasks = testSubtasks.concat(['dist-css', 'csslint', 'jshint', 'jscs', 'qunit', 'build-customizer-html']);
450
+ if (runSubset('core') &&
451
+ // Skip core tests if this is a Savage build
452
+ process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
453
+ testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
416
454
  }
417
455
  // Skip HTML validation if running a different subset of the test suite
418
456
  if (runSubset('validate-html') &&
@@ -430,51 +468,44 @@ module.exports = function (grunt) {
430
468
  testSubtasks.push('saucelabs-qunit');
431
469
  }
432
470
  grunt.registerTask('test', testSubtasks);
471
+ grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
433
472
 
434
473
  // JS distribution task.
435
- grunt.registerTask('dist-js', ['concat', 'uglify']);
474
+ grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
436
475
 
437
476
  // CSS distribution task.
438
477
  grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']);
439
- grunt.registerTask('dist-css', ['less-compile', 'autoprefixer', 'usebanner', 'csscomb', 'cssmin']);
440
-
441
- // Docs distribution task.
442
- grunt.registerTask('dist-docs', 'copy:docs');
478
+ grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
443
479
 
444
480
  // Full distribution task.
445
- grunt.registerTask('dist', ['clean', 'dist-css', 'copy:fonts', 'dist-js', 'dist-docs']);
481
+ grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
446
482
 
447
483
  // Default task.
448
- grunt.registerTask('default', ['test', 'dist', 'build-glyphicons-data', 'build-customizer']);
449
-
450
- // Version numbering task.
451
- // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
452
- // This can be overzealous, so its changes should always be manually reviewed!
453
- grunt.registerTask('change-version-number', 'sed');
484
+ grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
454
485
 
455
486
  grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });
456
487
 
457
488
  // task for building customizer
458
489
  grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
459
- grunt.registerTask('build-customizer-html', 'jade');
490
+ grunt.registerTask('build-customizer-html', 'pug');
460
491
  grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
461
492
  var banner = grunt.template.process('<%= banner %>');
462
493
  generateRawFiles(grunt, banner);
463
494
  });
464
495
 
465
- // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
466
- // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
467
- grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
468
- grunt.registerTask('_update-shrinkwrap', function () {
469
- var done = this.async();
470
- npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
471
- if (err) {
472
- grunt.fail.warn(err)
473
- }
474
- var dest = 'test-infra/npm-shrinkwrap.json';
475
- fs.renameSync('npm-shrinkwrap.json', dest);
476
- grunt.log.writeln('File ' + dest.cyan + ' updated.');
477
- done();
478
- });
496
+ grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
497
+ var srcFiles = grunt.config.get('concat.bootstrap.src');
498
+ var destFilepath = 'dist/js/npm.js';
499
+ generateCommonJSModule(grunt, srcFiles, destFilepath);
479
500
  });
501
+
502
+ // Docs task.
503
+ grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
504
+ grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
505
+ grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
506
+ grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
507
+ grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
508
+ grunt.registerTask('docs-github', ['jekyll:github', 'htmlmin']);
509
+
510
+ grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress']);
480
511
  };