kms 0.9.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -10,6 +10,7 @@ class Ability
10
10
  else
11
11
  can :manage, Kms::Page
12
12
  can :manage, Kms::Asset
13
+ can :index, Kms::Template
13
14
  Kms::AbilityService.abilities.each do |ability_block|
14
15
  instance_eval(&ability_block)
15
16
  end
@@ -6,7 +6,7 @@ module Kms
6
6
  def permalink
7
7
  templatable_page = Kms::Page.where(templatable_type: self.class.name).first
8
8
  if templatable_page
9
- Pathname.new(templatable_page.parent.fullpath).join(self.slug.to_s).to_s
9
+ Pathname.new(templatable_page.parent.fullpath).join(slug.to_s).to_s
10
10
  end
11
11
  end
12
12
  end
@@ -4,8 +4,9 @@ module Kms
4
4
  include CompileTemplates
5
5
  include Positioned
6
6
 
7
- INDEX_SLUG = "index".freeze
8
- INDEX_FULLPATH = ""
7
+ INDEX_SLUG = 'index'.freeze
8
+ INDEX_FULLPATH = ''
9
+ NOT_FOUND_SLUG = '404'.freeze
9
10
 
10
11
  scope :published, lambda { where(published: true) }
11
12
  scope :listed, lambda { where(hidden: false) }
@@ -19,10 +20,18 @@ module Kms
19
20
 
20
21
  has_ancestry
21
22
 
23
+ def self.not_found_page
24
+ where(slug: NOT_FOUND_SLUG).first
25
+ end
26
+
22
27
  def index?
23
28
  slug == INDEX_SLUG
24
29
  end
25
30
 
31
+ def not_found?
32
+ slug == NOT_FOUND_SLUG
33
+ end
34
+
26
35
  def build_fullpath
27
36
  if index?
28
37
  self.fullpath = INDEX_FULLPATH # self.slug
@@ -39,9 +48,9 @@ module Kms
39
48
  end
40
49
 
41
50
  # fetch item by slug
42
- def fetch_item!(slug)
51
+ def fetch_item(slug)
43
52
  return nil unless templatable?
44
- templatable_type.constantize.find_by_slug!(slug)
53
+ templatable_type.constantize.find_by_slug(slug)
45
54
  end
46
55
 
47
56
  end
@@ -0,0 +1,6 @@
1
+ module Kms
2
+ class AssetSerializer < ActiveModel::Serializer
3
+ attributes :id, :content_type, :filename, :url
4
+ attribute :text, if: -> { object.stylesheet_or_javascript? }
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Kms
2
+ class PageSerializer < ActiveModel::Serializer
3
+ attributes :id, :title, :slug, :template_id, :parent_id, :content, :published, :hidden, :templatable, :templatable_type
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Kms
2
+ class TemplateSerializer < ActiveModel::Serializer
3
+ attributes :id, :name, :content
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Kms
2
+ class UserSerializer < ActiveModel::Serializer
3
+ attributes :id, :email, :role, :localized_role
4
+ end
5
+ end
@@ -0,0 +1,30 @@
1
+ module Kms
2
+ class PageFetcher
3
+ def initialize(path)
4
+ @path = path
5
+ end
6
+
7
+ def fetch!
8
+ page = Page.published.find_by_fullpath(@path) || fetch_templatable_page! || fetch_404_page
9
+ page ? page.to_drop : raise(ActiveRecord::RecordNotFound)
10
+ end
11
+
12
+ private
13
+
14
+ # finds templatable page that works for path
15
+ def fetch_templatable_page!
16
+ parent_page_path = File.dirname(@path)
17
+ parent_page_path = Kms::Page::INDEX_FULLPATH if parent_page_path == "."
18
+ parent_page = Kms::Page.published.find_by_fullpath!(parent_page_path)
19
+ templatable_pages = parent_page.children.where(templatable: true)
20
+ templatable_pages.detect do |templatable_page|
21
+ templatable_page.fetch_item(File.basename(@path))
22
+ end
23
+ end
24
+
25
+ # find special page with '404' slug
26
+ def fetch_404_page
27
+ Kms::Page.not_found_page
28
+ end
29
+ end
30
+ end
@@ -1,11 +1,36 @@
1
1
  module Kms
2
2
  class SearchService
3
3
  cattr_accessor :resources do
4
- []
4
+ {}
5
5
  end
6
6
 
7
- def self.register(resource)
8
- self.resources << resource
7
+ def initialize(query='')
8
+ @query = query
9
9
  end
10
+
11
+ # resource is a class
12
+ # attributes_map is a Hash
13
+ # where keys are SearchItem attributes like "title", "link" and "content"
14
+ # and values are corresponding resource attributes
15
+ def self.register(resource, attributes_map)
16
+ self.resources[resource] = attributes_map
17
+ end
18
+
19
+ def search
20
+ return [] if @query.blank?
21
+
22
+ search_results = Kms::SearchService.resources.map do |resource, attributes_map|
23
+ resource_items = resource.advanced_search(keywords.join('|'))
24
+ resource_items.map {|resource_item| Kms::SearchItem.item_for_searchable(resource_item, keywords, attributes_map) }
25
+ end
26
+ search_results.flatten
27
+ end
28
+
29
+ private
30
+
31
+ def keywords
32
+ @query.split(' ')
33
+ end
34
+
10
35
  end
11
36
  end
@@ -0,0 +1,19 @@
1
+ module Kms
2
+ class TemplateProcessor
3
+ def initialize(template)
4
+ @template = template
5
+ end
6
+
7
+ def process
8
+ template_document = Nokogiri::HTML @template.content
9
+ template_document.search('script, link[rel="stylesheet"]').each do |tag|
10
+ tag.replace "{{ '#{File.basename(tag['src'] || tag['href'])}' | asset_tag }}"
11
+ end
12
+ # can't use Nokogiri for images because of Nokogiri escaping
13
+ template_document.search('img').each do |tag|
14
+ tag.replace %Q(<img src="{{ '#{File.basename(tag['src'])}' | asset_path }}" alt="#{tag['alt']}">)
15
+ end
16
+ template_document.to_html.gsub(/(%7B|%7D|%20|%7C)/,'%7B' => '{', '%7D' => '}', '%20' => ' ', '%7C' => '|')
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,7 @@
1
1
  <div class="wrapper">
2
2
 
3
3
  <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: 'form-signin', method: :put }) do |f| %>
4
- <h2 class="form-signin-heading">KMS</h2>
4
+ <h2 class="form-signin-heading">APIQ</h2>
5
5
  <h4>Change your password</h4>
6
6
  <%= devise_error_messages! %>
7
7
  <%= f.hidden_field :reset_password_token %>
@@ -1,6 +1,6 @@
1
1
  <div class="wrapper">
2
2
  <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: 'form-signin', method: :post }) do |f| %>
3
- <h2 class="form-signin-heading">KMS</h2>
3
+ <h2 class="form-signin-heading">APIQ</h2>
4
4
  <%= devise_error_messages! %>
5
5
 
6
6
  <h4>Forgot your password?</h4>
@@ -1,7 +1,7 @@
1
1
  <div class="wrapper">
2
2
 
3
3
  <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: {class: "form-signin"}) do |f| %>
4
- <h2 class="form-signin-heading">KMS</h2>
4
+ <h2 class="form-signin-heading">APIQ</h2>
5
5
  <%= devise_error_messages! %>
6
6
 
7
7
  <%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: Kms::User.human_attribute_name(:email), required: '' %>
@@ -1,6 +1,6 @@
1
1
  <div class="wrapper">
2
2
  <%= form_for(resource, as: resource_name, url: session_path(resource_name), html: {class: "form-signin"}) do |f| %>
3
- <h2 class="form-signin-heading">KMS</h2>
3
+ <h2 class="form-signin-heading">APIQ</h2>
4
4
  <%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: Kms::User.human_attribute_name(:email), required: '' %>
5
5
  <%= f.password_field :password, autocomplete: "off", class: 'form-control', placeholder: Kms::User.human_attribute_name(:password), required: '' %>
6
6
  <% if devise_mapping.rememberable? -%>
@@ -8,7 +8,7 @@
8
8
  <meta name="author" content="">
9
9
  <link rel="icon" href="../../favicon.ico">
10
10
 
11
- <title>KMS</title>
11
+ <title>APIQ</title>
12
12
 
13
13
  <%= stylesheet_link_tag 'kms/application', media: 'all', 'data-turbolinks-track' => true %>
14
14
  <%= csrf_meta_tags %>
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
 
7
- <title>{{ 'KMS - ' + ($state.current.views['header'] || $state.current.views['header@']).template || 'KMS' }}</title>
7
+ <title>{{ 'APIQ - ' + ($state.current.views['header'] || $state.current.views['header@']).template || 'APIQ' }}</title>
8
8
  <%= stylesheet_link_tag 'kms/application', media: 'all', 'data-turbolinks-track' => true %>
9
9
  <script type="text/javascript">
10
10
  var CKEDITOR_BASEPATH = '/assets/ng-ckeditor/libs/ckeditor/';
@@ -18,7 +18,7 @@
18
18
 
19
19
  </head>
20
20
  <body>
21
- <div id="page-wrapper" ng-controller="SidebarController" ng-class="{'active': toggle}" >
21
+ <div id="page-wrapper" ng-controller="SidebarController" ng-class="{'open': toggle}" ng-cloak>
22
22
 
23
23
  <!-- Sidebar -->
24
24
 
@@ -26,7 +26,43 @@
26
26
  <ul class="sidebar">
27
27
  <li class="sidebar-main">
28
28
  <a href="#" ng-click="toggleSidebar()">
29
- Kms
29
+ <svg
30
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
31
+ xmlns:cc="http://creativecommons.org/ns#"
32
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
33
+ xmlns:svg="http://www.w3.org/2000/svg"
34
+ xmlns="http://www.w3.org/2000/svg"
35
+ viewBox="0 0 1250 1250"
36
+ height="70"
37
+ width="70"
38
+ xml:space="preserve"
39
+ version="1.1"
40
+ preserveAspectRation="none"
41
+ id="svg2" class="logo"><metadata
42
+ id="metadata8"><rdf:RDF><cc:Work
43
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
44
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
45
+ id="defs6"><clipPath
46
+ id="clipPath16"
47
+ clipPathUnits="userSpaceOnUse"><path
48
+ id="path18"
49
+ d="m 0,1000 1000,0 L 1000,0 0,0 0,1000 Z" /></clipPath></defs><g
50
+ transform="matrix(1.25,0,0,-1.25,0,1250)"
51
+ id="g10"><g
52
+ id="g12"><g
53
+ clip-path="url(#clipPath16)"
54
+ id="g14"><g
55
+ transform="translate(448.853,608.1104)"
56
+ id="g20"><path
57
+ id="path22"
58
+ style="fill:#ff5274;fill-opacity:1;fill-rule:nonzero;stroke:none"
59
+ d="m 0,0 48.851,25.155 c 1.443,0.743 3.157,0.743 4.601,-0.001 L 102.295,0 c 3.633,-1.87 3.632,-7.063 0,-8.933 L 53.447,-34.088 c -1.443,-0.743 -3.157,-0.743 -4.6,0 L 0,-8.934 C -3.632,-7.063 -3.632,-1.871 0,0" /></g><g
60
+ transform="translate(512.4707,338.8955)"
61
+ id="g24"><path
62
+ id="path26"
63
+ style="fill:#ff5274;fill-opacity:1;fill-rule:nonzero;stroke:none"
64
+ d="m 0,0 c -7.808,-4.021 -17.133,-4.021 -24.94,0 l -240.019,123.607 62.093,31.978 161.765,-83.31 c 8.965,-4.617 18.798,-6.925 28.633,-6.925 9.832,0 19.666,2.308 28.626,6.925 L 177.926,155.585 240.02,123.607 0,0 Z m -138.643,226.155 36.404,-18.748 61.138,-31.487 c 8.965,-4.617 18.798,-6.926 28.633,-6.926 9.832,0 19.666,2.309 28.626,6.926 l 61.144,31.487 36.405,18.746 62.091,-31.975 -36.405,-18.749 -139.394,-71.784 c -7.808,-4.033 -17.13,-4.021 -24.941,0 l -139.389,71.784 -36.405,18.749 62.093,31.977 z m 112.084,95.218 1.622,0.835 c 7.807,4.025 17.129,4.014 24.94,0 L 1.626,321.372 111.576,264.748 77.3,247.097 75.171,246 38.766,227.252 -0.001,207.289 c -7.808,-4.026 -17.13,-4.015 -24.941,0 l -38.763,19.963 -36.403,18.747 -2.132,1.098 -34.275,17.651 109.956,56.625 z m 297.835,-174.174 -56.722,29.213 c 4.34,4.79 6.883,11.046 6.883,17.766 0,9.975 -5.507,19.015 -14.382,23.592 l -56.722,29.211 c 4.342,4.792 6.886,11.049 6.886,17.767 0,9.976 -5.51,19.015 -14.386,23.592 l -126.67,65.236 c -17.929,9.235 -39.337,9.24 -57.26,0 l -126.674,-65.236 -0.007,0 c -8.869,-4.577 -14.38,-13.616 -14.38,-23.592 0,-6.718 2.545,-12.975 6.889,-17.767 l -56.722,-29.211 -0.006,0 c -8.87,-4.571 -14.382,-13.611 -14.382,-23.592 0,-6.72 2.543,-12.975 6.883,-17.765 l -56.726,-29.214 c -8.868,-4.577 -14.379,-13.616 -14.379,-23.592 0,-9.975 5.511,-19.015 14.387,-23.592 L -41.098,-31.369 c 8.965,-4.617 18.795,-6.926 28.629,-6.926 9.832,0 19.665,2.309 28.627,6.926 l 255.126,131.39 c 8.867,4.571 14.375,13.611 14.375,23.586 0,9.976 -5.508,19.015 -14.383,23.592" /></g></g></g></g></svg>
65
+ APIQ
30
66
  <span class="menu-icon glyphicon glyphicon-transfer"></span>
31
67
  </a>
32
68
  </li>
@@ -37,8 +73,8 @@
37
73
  <% resources.each do |resource_class, tab_icon_class| %>
38
74
  <% if can? :index, resource_class %>
39
75
  <li class="sidebar-list">
40
- <a ui-sref="<%= defined?(Kms::Model) && resource_class.is_a?(Kms::Model) ? "models.entries({modelId: #{resource_class.name}})" : resource_class.name.demodulize.tableize %>">
41
- <%= resource_class.model_name.human(count: 1.1) %>
76
+ <a ui-sref="<%= defined?(Kms::Model) && resource_class.is_a?(Kms::Model) ? "models.entries({modelId: #{resource_class.name}})" : resource_class.name.demodulize.tableize %>" title="<%= resource_class.model_name.human(count: 1.1) %>">
77
+ <%= truncate(resource_class.model_name.human(count: 1.1), length: 22) %>
42
78
  <span class="menu-icon fa <%= tab_icon_class %>"></span>
43
79
  </a>
44
80
  </li>
@@ -47,23 +83,16 @@
47
83
  <% end %>
48
84
  </ul>
49
85
  <div class="sidebar-footer">
50
- <div class="col-xs-4">
51
- <a href="http://webgradus.ru" target="_blank">
52
- &copy;Градус
86
+ <div class="col-xs-6">
87
+ <a href="mailto:hello@apiq.io">
88
+ <%= t(:need_help) %>
53
89
  </a>
54
90
  </div>
55
- <div class="col-xs-4">
91
+ <div class="col-xs-6">
56
92
  <a ui-sref="help">
57
- <%= t(:help) %>
93
+ <%= t(:documentation) %>
58
94
  </a>
59
95
  </div>
60
- <!--
61
- <div class="col-xs-4">
62
- <a href="#">
63
- Support
64
- </a>
65
- </div>
66
- -->
67
96
  </div>
68
97
  </div>
69
98
 
@@ -79,7 +108,7 @@
79
108
  <div class="user pull-right">
80
109
  <div class="item dropdown">
81
110
  <a href="#" class="dropdown-toggle">
82
- <img src="<%= asset_path "Responsive-Dashboard/src/img/avatar.jpg" %>">
111
+ <%= image_tag "avatar.jpg" %>
83
112
  </a>
84
113
  <ul class="dropdown-menu dropdown-menu-right">
85
114
  <li class="dropdown-header">
@@ -1,42 +1,16 @@
1
- include ActionView::Helpers::TextHelper
2
1
  Kms::ExternalsRegistry.register(:request) {|request, controller| Liquor::Rails::Request.new(request, controller) }
3
2
  Kms::ExternalsRegistry.register(:index) {|_,_| Kms::Page.find_by_slug!("index").to_drop }
4
3
  Kms::ExternalsRegistry.register(:page) do |request,_|
5
- page = Kms::Page.published.find_by_fullpath(request.params[:path] || Kms::Page::INDEX_FULLPATH)
6
- unless page # in case of templatable page
7
- page_path = request.params[:path] || ''
8
- parent_page_path = File.dirname(page_path)
9
- parent_page_path = Kms::Page::INDEX_FULLPATH if parent_page_path == "."
10
- parent_page = Kms::Page.published.find_by_fullpath!(parent_page_path)
11
- templatable_pages = parent_page.children.where(templatable: true)
12
- page = templatable_pages.detect do |templatable_page|
13
- templatable_page.fetch_item!(File.basename(page_path))
14
- end
15
- end
16
- page ? page.to_drop : raise(ActiveRecord::RecordNotFound)
4
+ page_fetcher = Kms::PageFetcher.new(request.params[:path] || Kms::Page::INDEX_FULLPATH)
5
+ page_fetcher.fetch!
17
6
  end
18
7
  Kms::ExternalsRegistry.register(:item) do |request,controller|
19
8
  page = Kms::ExternalsRegistry.externals[:page].call(request, controller)
20
9
  if page && page.source.templatable?
21
- page.source.fetch_item!(File.basename(request.params[:path])).try(:to_drop)
10
+ page.source.fetch_item(File.basename(request.params[:path])).try(:to_drop)
22
11
  end
23
12
  end
24
- Kms::ExternalsRegistry.register(:search) do |request,controller|
25
- results = []
26
- if request.params[:query].present?
27
- key_words = request.params[:query].split(' ')
28
- results_ids = Kms::Page.published.advanced_search(key_words.join('|')).map(&:id)
29
- results = Kms::Page.published.where('id IN (?)', results_ids).map {|page| Kms::SearchItem.new(title: highlight(page.title, key_words, highlighter: '<span class="highlight">\1</span>'), link: page.fullpath, content: highlight(page.content, key_words, highlighter: '<span class="highlight">\1</span>'))}
30
-
31
- Kms::SearchService.resources.each do |resource|
32
- resource_ids = resource.advanced_search(request.params[:query].split(' ').join('|')).map(&:id)
33
- resource_items = resource.where('id IN (?)', resource_ids)
34
- parent_page = Kms::Page.published.find_by_templatable_type(resource)
35
- resource_items.each do |item|
36
- results << Kms::SearchItem.new(title: highlight(item.title, key_words, highlighter: '<span class="highlight">\1</span>'), link: parent_page.parent.fullpath + '/' + item.slug, content: highlight(item.content, key_words, highlighter: '<span class="highlight">\1</span>'))
37
- end if parent_page && parent_page.templatable
38
- end
39
- end
40
-
41
- results
13
+ Kms::ExternalsRegistry.register(:search) do |request,_|
14
+ search_service = Kms::SearchService.new(request.params[:query])
15
+ search_service.search
42
16
  end
@@ -0,0 +1 @@
1
+ Kms::SearchService.register(Kms::Page, {title: :title, link: :fullpath, content: :content})
@@ -6,10 +6,12 @@ en:
6
6
  remember_me: "Remember me"
7
7
  content_management: "Content management"
8
8
  add_template: "Add template"
9
+ create_first_template: "Create first template"
9
10
  new_template: "New Template"
10
11
  edit_template: "Edit Template"
11
12
  update_template: "Update template"
12
13
  add_page: "Add page"
14
+ create_first_page: "Create first page"
13
15
  new_page: "New Page"
14
16
  edit_page: "Edit Page"
15
17
  update_page: "Update page"
@@ -26,10 +28,12 @@ en:
26
28
  new_user: "New User"
27
29
  toggle_fullscreen_mode_instruction: "Press F11 when cursor is in the editor to toggle full screen editing. ESC can also be used to exit full screen editing."
28
30
  add_snippet: "Add snippet"
31
+ create_first_snippet: "Create first snippet"
29
32
  new_snippet: "New Snippet"
30
33
  edit_snippet: "Edit Snippet"
31
34
  update_snippet: "Update snippet"
32
- help: "Help"
35
+ documentation: "Documentation"
36
+ need_help: "Need help?"
33
37
  settings: "Settings"
34
38
  update_settings: "Update settings"
35
39
  no_settings: "No settings specified"
@@ -42,6 +46,12 @@ en:
42
46
  javascripts: "Javascript"
43
47
  fonts: "Fonts"
44
48
  other_assets: "Other"
49
+ templates_description: "Templates are where your common HTML code should be placed"
50
+ pages_description: "Pages represent your website hierarchy and their content embeds in Templates"
51
+ no_templates_yet: "Looks like you don't have templates yet"
52
+ snippets_description: "Snippets are pieces of HTML that you could include in templates or pages"
53
+ assets_description: "Upload stylesheets, javascripts, images and other files here (you can even pick multiple)"
54
+ assets_drop_description: "or just drag and drop them"
45
55
  roles:
46
56
  admin: "Admin"
47
57
  content_manager: "Content manager"
@@ -150,6 +160,12 @@ en:
150
160
  currency:
151
161
  main_description: 'Formats currency values. Possible options: precision, delimiter, separator, format, unit:'
152
162
  activerecord:
163
+ errors:
164
+ models:
165
+ kms/page:
166
+ attributes:
167
+ template:
168
+ required: "can't be blank"
153
169
  models:
154
170
  kms/template:
155
171
  one: "Template"
@@ -6,10 +6,12 @@ ru:
6
6
  remember_me: "Запомнить меня"
7
7
  content_management: "Управление контентом"
8
8
  add_template: "Добавить шаблон"
9
+ create_first_template: "Создать первый шаблон"
9
10
  new_template: "Новый Шаблон"
10
11
  edit_template: "Редактирование Шаблона"
11
12
  update_template: "Обновить шаблон"
12
13
  add_page: "Добавить страницу"
14
+ create_first_page: "Создать первую страницу"
13
15
  new_page: "Новая Страница"
14
16
  edit_page: "Редактирование Страницы"
15
17
  update_page: "Обновить страницу"
@@ -26,10 +28,12 @@ ru:
26
28
  new_user: "Новый Пользователь"
27
29
  toggle_fullscreen_mode_instruction: "Используйте F11 для включения/выключения полноэкранного редактирования, когда курсор находится внутри поля. Также можно использовать ESC для выхода из этого режима."
28
30
  add_snippet: "Добавить сниппет"
31
+ create_first_snippet: "Создать первый сниппет"
29
32
  new_snippet: "Новый Сниппет"
30
33
  edit_snippet: "Редактирование Сниппета"
31
34
  update_snippet: "Обновить сниппет"
32
- help: "Справка"
35
+ documentation: "Документация"
36
+ need_help: "Нужна помощь?"
33
37
  settings: "Настройки"
34
38
  update_settings: "Обновить настройки"
35
39
  no_settings: "Нет настроек для отображения"
@@ -42,6 +46,12 @@ ru:
42
46
  javascripts: "Javascript"
43
47
  fonts: "Шрифты"
44
48
  other_assets: "Другое"
49
+ templates_description: "В Шаблонах размещается общий для всего сайта HTML код"
50
+ pages_description: "Страницы представляют структуру сайта и их содержимое встраивается в Шаблоны"
51
+ no_templates_yet: "Кажется у вас ещё нет ни одного шаблона"
52
+ snippets_description: "Сниппеты это части HTML кода (например, 'Меню' или 'Галерея'), которые могут включаться в Страницы или Шаблоны"
53
+ assets_description: "Здесь можно загрузить файлы CSS, Javascript, изображений и другие файлы (возможна загрузка сразу нескольких)"
54
+ assets_drop_description: "или просто перетащить их мышкой"
45
55
  roles:
46
56
  admin: "Администратор"
47
57
  content_manager: "Контент-менеджер"
@@ -150,6 +160,12 @@ ru:
150
160
  currency:
151
161
  main_description: 'Форматирование полей, хранящих денежные значения. Возможные опции - precision, delimiter, separator, format, unit:'
152
162
  activerecord:
163
+ errors:
164
+ models:
165
+ kms/page:
166
+ attributes:
167
+ template:
168
+ required: 'не может быть пустым'
153
169
  models:
154
170
  kms/template:
155
171
  one: "Шаблон"