statixite 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 (462) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +145 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/images/statixite/STATIXITE-logo.png +0 -0
  6. data/app/assets/images/statixite/favicon.ico +0 -0
  7. data/app/assets/images/statixite/jekyll.png +0 -0
  8. data/app/assets/images/statixite/md-editor.png +0 -0
  9. data/app/assets/images/statixite/ring-alt.gif +0 -0
  10. data/app/assets/javascripts/controllers/statixite/deployments_create.js +13 -0
  11. data/app/assets/javascripts/controllers/statixite/deployments_index.js +13 -0
  12. data/app/assets/javascripts/controllers/statixite/sites_create.js +27 -0
  13. data/app/assets/javascripts/controllers/statixite/sites_new.js +27 -0
  14. data/app/assets/javascripts/controllers/statixite/templates_edit.js +208 -0
  15. data/app/assets/javascripts/statixite/application.js +8 -0
  16. data/app/assets/javascripts/statixite/array-helpers.js +13 -0
  17. data/app/assets/javascripts/statixite/editor.js +244 -0
  18. data/app/assets/javascripts/statixite/loader.js +14 -0
  19. data/app/assets/javascripts/statixite/notify-defaults.js +5 -0
  20. data/app/assets/stylesheets/statixite/application.less +271 -0
  21. data/app/assets/stylesheets/statixite/bootstrap-glyphicons.less +305 -0
  22. data/app/assets/stylesheets/statixite/bootstrap.less +58 -0
  23. data/app/assets/stylesheets/statixite/bootstrap_and_overrides.less +2 -0
  24. data/app/assets/stylesheets/statixite/landing-page.less +156 -0
  25. data/app/controllers/statixite/application_controller.rb +22 -0
  26. data/app/controllers/statixite/deployments_controller.rb +61 -0
  27. data/app/controllers/statixite/media_controller.rb +61 -0
  28. data/app/controllers/statixite/posts_controller.rb +68 -0
  29. data/app/controllers/statixite/sites_controller.rb +141 -0
  30. data/app/controllers/statixite/templates_controller.rb +233 -0
  31. data/app/helpers/statixite/application_helper.rb +63 -0
  32. data/app/models/statixite/deployment.rb +5 -0
  33. data/app/models/statixite/media.rb +7 -0
  34. data/app/models/statixite/post.rb +76 -0
  35. data/app/models/statixite/site.rb +76 -0
  36. data/app/services/statixite/deployment_service.rb +73 -0
  37. data/app/services/statixite/git_service.rb +102 -0
  38. data/app/services/statixite/site_deactivation_service.rb +52 -0
  39. data/app/services/statixite/site_operation_service.rb +251 -0
  40. data/app/uploaders/statixite/file_uploader.rb +14 -0
  41. data/app/validators/statixite/jekyll_template_validator.rb +16 -0
  42. data/app/validators/statixite/liquid_validator.rb +11 -0
  43. data/app/views/layouts/statixite/_dash_nav.html.haml +20 -0
  44. data/app/views/layouts/statixite/_flash.html.haml +13 -0
  45. data/app/views/layouts/statixite/_head.html.haml +12 -0
  46. data/app/views/layouts/statixite/_header.html.haml +30 -0
  47. data/app/views/layouts/statixite/_site_sub_items.html.haml +38 -0
  48. data/app/views/layouts/statixite/dashboard.html.haml +27 -0
  49. data/app/views/statixite/deployments/_modal.html.haml +18 -0
  50. data/app/views/statixite/deployments/index.html.haml +39 -0
  51. data/app/views/statixite/kaminari/_first_page.html.haml +2 -0
  52. data/app/views/statixite/kaminari/_gap.html.haml +2 -0
  53. data/app/views/statixite/kaminari/_last_page.html.haml +2 -0
  54. data/app/views/statixite/kaminari/_next_page.html.haml +2 -0
  55. data/app/views/statixite/kaminari/_page.html.haml +6 -0
  56. data/app/views/statixite/kaminari/_paginator.html.haml +11 -0
  57. data/app/views/statixite/kaminari/_prev_page.html.haml +2 -0
  58. data/app/views/statixite/media/_index.html.haml +13 -0
  59. data/app/views/statixite/media/_paginate.html.haml +1 -0
  60. data/app/views/statixite/media/index.html.haml +39 -0
  61. data/app/views/statixite/media/index.js.haml +2 -0
  62. data/app/views/statixite/posts/_form.html.haml +65 -0
  63. data/app/views/statixite/posts/_image_modal.html.haml +21 -0
  64. data/app/views/statixite/posts/_modals.html.haml +111 -0
  65. data/app/views/statixite/posts/_posts.html.haml +15 -0
  66. data/app/views/statixite/posts/edit.html.haml +6 -0
  67. data/app/views/statixite/posts/index.html.haml +4 -0
  68. data/app/views/statixite/posts/index.js.haml +1 -0
  69. data/app/views/statixite/posts/new.html.haml +5 -0
  70. data/app/views/statixite/sites/_sites.html.haml +27 -0
  71. data/app/views/statixite/sites/_templates.html.haml +26 -0
  72. data/app/views/statixite/sites/build_and_preview.html.haml +24 -0
  73. data/app/views/statixite/sites/index.html.haml +4 -0
  74. data/app/views/statixite/sites/index.js.haml +1 -0
  75. data/app/views/statixite/sites/new.html.haml +45 -0
  76. data/app/views/statixite/sites/settings.html.haml +77 -0
  77. data/app/views/statixite/templates/edit.html.haml +93 -0
  78. data/app/views/statixite/templates/upload_files.js.haml +2 -0
  79. data/config/routes.rb +24 -0
  80. data/db/migrate/20150525171543_create_statixite_sites.rb +15 -0
  81. data/db/migrate/20150530041055_create_statixite_posts.rb +14 -0
  82. data/db/migrate/20150610024047_create_statixite_deployments.rb +11 -0
  83. data/db/migrate/20151013131224_create_statixite_media.rb +10 -0
  84. data/lib/assets/templates.yaml +734 -0
  85. data/lib/generators/statixite/statixite_generator.rb +49 -0
  86. data/lib/statixite.rb +14 -0
  87. data/lib/statixite/cloud_sync.rb +104 -0
  88. data/lib/statixite/engine.rb +49 -0
  89. data/lib/statixite/version.rb +3 -0
  90. data/lib/tasks/statixite_tasks.rake +4 -0
  91. data/vendor/assets/bower_components/bootstrap/CHANGELOG.md +5 -0
  92. data/vendor/assets/bower_components/bootstrap/Gruntfile.js +533 -0
  93. data/vendor/assets/bower_components/bootstrap/LICENSE +21 -0
  94. data/vendor/assets/bower_components/bootstrap/README.md +139 -0
  95. data/vendor/assets/bower_components/bootstrap/bower.json +34 -0
  96. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css +587 -0
  97. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css.map +1 -0
  98. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +6 -0
  99. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map +1 -0
  100. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css +6760 -0
  101. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css.map +1 -0
  102. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css +6 -0
  103. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css.map +1 -0
  104. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  105. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +288 -0
  106. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  107. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  108. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  109. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.js +2363 -0
  110. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js +7 -0
  111. data/vendor/assets/bower_components/bootstrap/dist/js/npm.js +13 -0
  112. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  113. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  114. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  115. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  116. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  117. data/vendor/assets/bower_components/bootstrap/grunt/bs-commonjs-generator.js +30 -0
  118. data/vendor/assets/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js +42 -0
  119. data/vendor/assets/bower_components/bootstrap/grunt/bs-lessdoc-parser.js +237 -0
  120. data/vendor/assets/bower_components/bootstrap/grunt/bs-raw-files-generator.js +44 -0
  121. data/vendor/assets/bower_components/bootstrap/grunt/configBridge.json +46 -0
  122. data/vendor/assets/bower_components/bootstrap/grunt/sauce_browsers.yml +82 -0
  123. data/vendor/assets/bower_components/bootstrap/js/affix.js +162 -0
  124. data/vendor/assets/bower_components/bootstrap/js/alert.js +94 -0
  125. data/vendor/assets/bower_components/bootstrap/js/button.js +120 -0
  126. data/vendor/assets/bower_components/bootstrap/js/carousel.js +237 -0
  127. data/vendor/assets/bower_components/bootstrap/js/collapse.js +211 -0
  128. data/vendor/assets/bower_components/bootstrap/js/dropdown.js +165 -0
  129. data/vendor/assets/bower_components/bootstrap/js/modal.js +337 -0
  130. data/vendor/assets/bower_components/bootstrap/js/popover.js +108 -0
  131. data/vendor/assets/bower_components/bootstrap/js/scrollspy.js +172 -0
  132. data/vendor/assets/bower_components/bootstrap/js/tab.js +155 -0
  133. data/vendor/assets/bower_components/bootstrap/js/tooltip.js +514 -0
  134. data/vendor/assets/bower_components/bootstrap/js/transition.js +59 -0
  135. data/vendor/assets/bower_components/bootstrap/less/alerts.less +73 -0
  136. data/vendor/assets/bower_components/bootstrap/less/badges.less +66 -0
  137. data/vendor/assets/bower_components/bootstrap/less/bootstrap.less +56 -0
  138. data/vendor/assets/bower_components/bootstrap/less/breadcrumbs.less +26 -0
  139. data/vendor/assets/bower_components/bootstrap/less/button-groups.less +244 -0
  140. data/vendor/assets/bower_components/bootstrap/less/buttons.less +166 -0
  141. data/vendor/assets/bower_components/bootstrap/less/carousel.less +270 -0
  142. data/vendor/assets/bower_components/bootstrap/less/close.less +34 -0
  143. data/vendor/assets/bower_components/bootstrap/less/code.less +69 -0
  144. data/vendor/assets/bower_components/bootstrap/less/component-animations.less +33 -0
  145. data/vendor/assets/bower_components/bootstrap/less/dropdowns.less +216 -0
  146. data/vendor/assets/bower_components/bootstrap/less/forms.less +613 -0
  147. data/vendor/assets/bower_components/bootstrap/less/glyphicons.less +305 -0
  148. data/vendor/assets/bower_components/bootstrap/less/grid.less +84 -0
  149. data/vendor/assets/bower_components/bootstrap/less/input-groups.less +171 -0
  150. data/vendor/assets/bower_components/bootstrap/less/jumbotron.less +54 -0
  151. data/vendor/assets/bower_components/bootstrap/less/labels.less +64 -0
  152. data/vendor/assets/bower_components/bootstrap/less/list-group.less +130 -0
  153. data/vendor/assets/bower_components/bootstrap/less/media.less +66 -0
  154. data/vendor/assets/bower_components/bootstrap/less/mixins.less +40 -0
  155. data/vendor/assets/bower_components/bootstrap/less/mixins/alerts.less +14 -0
  156. data/vendor/assets/bower_components/bootstrap/less/mixins/background-variant.less +9 -0
  157. data/vendor/assets/bower_components/bootstrap/less/mixins/border-radius.less +18 -0
  158. data/vendor/assets/bower_components/bootstrap/less/mixins/buttons.less +65 -0
  159. data/vendor/assets/bower_components/bootstrap/less/mixins/center-block.less +7 -0
  160. data/vendor/assets/bower_components/bootstrap/less/mixins/clearfix.less +22 -0
  161. data/vendor/assets/bower_components/bootstrap/less/mixins/forms.less +85 -0
  162. data/vendor/assets/bower_components/bootstrap/less/mixins/gradients.less +59 -0
  163. data/vendor/assets/bower_components/bootstrap/less/mixins/grid-framework.less +91 -0
  164. data/vendor/assets/bower_components/bootstrap/less/mixins/grid.less +122 -0
  165. data/vendor/assets/bower_components/bootstrap/less/mixins/hide-text.less +21 -0
  166. data/vendor/assets/bower_components/bootstrap/less/mixins/image.less +33 -0
  167. data/vendor/assets/bower_components/bootstrap/less/mixins/labels.less +12 -0
  168. data/vendor/assets/bower_components/bootstrap/less/mixins/list-group.less +30 -0
  169. data/vendor/assets/bower_components/bootstrap/less/mixins/nav-divider.less +10 -0
  170. data/vendor/assets/bower_components/bootstrap/less/mixins/nav-vertical-align.less +9 -0
  171. data/vendor/assets/bower_components/bootstrap/less/mixins/opacity.less +8 -0
  172. data/vendor/assets/bower_components/bootstrap/less/mixins/pagination.less +24 -0
  173. data/vendor/assets/bower_components/bootstrap/less/mixins/panels.less +24 -0
  174. data/vendor/assets/bower_components/bootstrap/less/mixins/progress-bar.less +10 -0
  175. data/vendor/assets/bower_components/bootstrap/less/mixins/reset-filter.less +8 -0
  176. data/vendor/assets/bower_components/bootstrap/less/mixins/reset-text.less +18 -0
  177. data/vendor/assets/bower_components/bootstrap/less/mixins/resize.less +6 -0
  178. data/vendor/assets/bower_components/bootstrap/less/mixins/responsive-visibility.less +15 -0
  179. data/vendor/assets/bower_components/bootstrap/less/mixins/size.less +10 -0
  180. data/vendor/assets/bower_components/bootstrap/less/mixins/tab-focus.less +9 -0
  181. data/vendor/assets/bower_components/bootstrap/less/mixins/table-row.less +28 -0
  182. data/vendor/assets/bower_components/bootstrap/less/mixins/text-emphasis.less +9 -0
  183. data/vendor/assets/bower_components/bootstrap/less/mixins/text-overflow.less +8 -0
  184. data/vendor/assets/bower_components/bootstrap/less/mixins/vendor-prefixes.less +227 -0
  185. data/vendor/assets/bower_components/bootstrap/less/modals.less +150 -0
  186. data/vendor/assets/bower_components/bootstrap/less/navbar.less +660 -0
  187. data/vendor/assets/bower_components/bootstrap/less/navs.less +242 -0
  188. data/vendor/assets/bower_components/bootstrap/less/normalize.less +424 -0
  189. data/vendor/assets/bower_components/bootstrap/less/pager.less +54 -0
  190. data/vendor/assets/bower_components/bootstrap/less/pagination.less +89 -0
  191. data/vendor/assets/bower_components/bootstrap/less/panels.less +271 -0
  192. data/vendor/assets/bower_components/bootstrap/less/popovers.less +131 -0
  193. data/vendor/assets/bower_components/bootstrap/less/print.less +101 -0
  194. data/vendor/assets/bower_components/bootstrap/less/progress-bars.less +87 -0
  195. data/vendor/assets/bower_components/bootstrap/less/responsive-embed.less +35 -0
  196. data/vendor/assets/bower_components/bootstrap/less/responsive-utilities.less +194 -0
  197. data/vendor/assets/bower_components/bootstrap/less/scaffolding.less +161 -0
  198. data/vendor/assets/bower_components/bootstrap/less/tables.less +234 -0
  199. data/vendor/assets/bower_components/bootstrap/less/theme.less +291 -0
  200. data/vendor/assets/bower_components/bootstrap/less/thumbnails.less +36 -0
  201. data/vendor/assets/bower_components/bootstrap/less/tooltip.less +101 -0
  202. data/vendor/assets/bower_components/bootstrap/less/type.less +302 -0
  203. data/vendor/assets/bower_components/bootstrap/less/utilities.less +55 -0
  204. data/vendor/assets/bower_components/bootstrap/less/variables.less +869 -0
  205. data/vendor/assets/bower_components/bootstrap/less/wells.less +29 -0
  206. data/vendor/assets/bower_components/bootstrap/nuget/MyGet.ps1 +8 -0
  207. data/vendor/assets/bower_components/bootstrap/nuget/bootstrap.less.nuspec +28 -0
  208. data/vendor/assets/bower_components/bootstrap/nuget/bootstrap.nuspec +28 -0
  209. data/vendor/assets/bower_components/bootstrap/package.js +32 -0
  210. data/vendor/assets/bower_components/bootstrap/package.json +87 -0
  211. data/vendor/assets/bower_components/jquery/AUTHORS.txt +275 -0
  212. data/vendor/assets/bower_components/jquery/LICENSE.txt +36 -0
  213. data/vendor/assets/bower_components/jquery/README.md +5 -0
  214. data/vendor/assets/bower_components/jquery/bower.json +14 -0
  215. data/vendor/assets/bower_components/jquery/dist/jquery.js +9831 -0
  216. data/vendor/assets/bower_components/jquery/dist/jquery.min.js +4 -0
  217. data/vendor/assets/bower_components/jquery/dist/jquery.min.map +1 -0
  218. data/vendor/assets/bower_components/jquery/src/ajax.js +845 -0
  219. data/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +100 -0
  220. data/vendor/assets/bower_components/jquery/src/ajax/load.js +83 -0
  221. data/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  222. data/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +27 -0
  223. data/vendor/assets/bower_components/jquery/src/ajax/script.js +68 -0
  224. data/vendor/assets/bower_components/jquery/src/ajax/var/location.js +3 -0
  225. data/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  226. data/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  227. data/vendor/assets/bower_components/jquery/src/ajax/xhr.js +167 -0
  228. data/vendor/assets/bower_components/jquery/src/attributes.js +11 -0
  229. data/vendor/assets/bower_components/jquery/src/attributes/attr.js +142 -0
  230. data/vendor/assets/bower_components/jquery/src/attributes/classes.js +177 -0
  231. data/vendor/assets/bower_components/jquery/src/attributes/prop.js +109 -0
  232. data/vendor/assets/bower_components/jquery/src/attributes/support.js +36 -0
  233. data/vendor/assets/bower_components/jquery/src/attributes/val.js +170 -0
  234. data/vendor/assets/bower_components/jquery/src/callbacks.js +232 -0
  235. data/vendor/assets/bower_components/jquery/src/core.js +489 -0
  236. data/vendor/assets/bower_components/jquery/src/core/access.js +65 -0
  237. data/vendor/assets/bower_components/jquery/src/core/init.js +134 -0
  238. data/vendor/assets/bower_components/jquery/src/core/parseHTML.js +49 -0
  239. data/vendor/assets/bower_components/jquery/src/core/ready.js +103 -0
  240. data/vendor/assets/bower_components/jquery/src/core/support.js +18 -0
  241. data/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +5 -0
  242. data/vendor/assets/bower_components/jquery/src/css.js +515 -0
  243. data/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +24 -0
  244. data/vendor/assets/bower_components/jquery/src/css/adjustCSS.js +65 -0
  245. data/vendor/assets/bower_components/jquery/src/css/curCSS.js +57 -0
  246. data/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +72 -0
  247. data/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +18 -0
  248. data/vendor/assets/bower_components/jquery/src/css/showHide.js +48 -0
  249. data/vendor/assets/bower_components/jquery/src/css/support.js +121 -0
  250. data/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  251. data/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +15 -0
  252. data/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +16 -0
  253. data/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +3 -0
  254. data/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  255. data/vendor/assets/bower_components/jquery/src/css/var/swap.js +24 -0
  256. data/vendor/assets/bower_components/jquery/src/data.js +187 -0
  257. data/vendor/assets/bower_components/jquery/src/data/Data.js +200 -0
  258. data/vendor/assets/bower_components/jquery/src/data/accepts.js +20 -0
  259. data/vendor/assets/bower_components/jquery/src/data/support.js +23 -0
  260. data/vendor/assets/bower_components/jquery/src/data/var/acceptData.js +18 -0
  261. data/vendor/assets/bower_components/jquery/src/data/var/dataPriv.js +5 -0
  262. data/vendor/assets/bower_components/jquery/src/data/var/dataUser.js +5 -0
  263. data/vendor/assets/bower_components/jquery/src/deferred.js +158 -0
  264. data/vendor/assets/bower_components/jquery/src/deprecated.js +32 -0
  265. data/vendor/assets/bower_components/jquery/src/dimensions.js +54 -0
  266. data/vendor/assets/bower_components/jquery/src/effects.js +629 -0
  267. data/vendor/assets/bower_components/jquery/src/effects/Tween.js +121 -0
  268. data/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  269. data/vendor/assets/bower_components/jquery/src/effects/support.js +58 -0
  270. data/vendor/assets/bower_components/jquery/src/event.js +710 -0
  271. data/vendor/assets/bower_components/jquery/src/event/ajax.js +20 -0
  272. data/vendor/assets/bower_components/jquery/src/event/alias.js +27 -0
  273. data/vendor/assets/bower_components/jquery/src/event/focusin.js +53 -0
  274. data/vendor/assets/bower_components/jquery/src/event/support.js +9 -0
  275. data/vendor/assets/bower_components/jquery/src/event/trigger.js +199 -0
  276. data/vendor/assets/bower_components/jquery/src/exports/amd.js +24 -0
  277. data/vendor/assets/bower_components/jquery/src/exports/global.js +26 -0
  278. data/vendor/assets/bower_components/jquery/src/intro.js +44 -0
  279. data/vendor/assets/bower_components/jquery/src/jquery.js +37 -0
  280. data/vendor/assets/bower_components/jquery/src/manipulation.js +481 -0
  281. data/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +20 -0
  282. data/vendor/assets/bower_components/jquery/src/manipulation/buildFragment.js +102 -0
  283. data/vendor/assets/bower_components/jquery/src/manipulation/createSafeFragment.js +20 -0
  284. data/vendor/assets/bower_components/jquery/src/manipulation/getAll.js +21 -0
  285. data/vendor/assets/bower_components/jquery/src/manipulation/setGlobalEval.js +20 -0
  286. data/vendor/assets/bower_components/jquery/src/manipulation/support.js +33 -0
  287. data/vendor/assets/bower_components/jquery/src/manipulation/var/nodeNames.js +5 -0
  288. data/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  289. data/vendor/assets/bower_components/jquery/src/manipulation/var/rleadingWhitespace.js +3 -0
  290. data/vendor/assets/bower_components/jquery/src/manipulation/var/rscriptType.js +3 -0
  291. data/vendor/assets/bower_components/jquery/src/manipulation/var/rtagName.js +3 -0
  292. data/vendor/assets/bower_components/jquery/src/manipulation/wrapMap.js +27 -0
  293. data/vendor/assets/bower_components/jquery/src/offset.js +221 -0
  294. data/vendor/assets/bower_components/jquery/src/outro.js +2 -0
  295. data/vendor/assets/bower_components/jquery/src/queue.js +143 -0
  296. data/vendor/assets/bower_components/jquery/src/queue/delay.js +22 -0
  297. data/vendor/assets/bower_components/jquery/src/selector-native.js +211 -0
  298. data/vendor/assets/bower_components/jquery/src/selector-sizzle.js +14 -0
  299. data/vendor/assets/bower_components/jquery/src/selector.js +1 -0
  300. data/vendor/assets/bower_components/jquery/src/serialize.js +125 -0
  301. data/vendor/assets/bower_components/jquery/src/support.js +63 -0
  302. data/vendor/assets/bower_components/jquery/src/traversing.js +175 -0
  303. data/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +100 -0
  304. data/vendor/assets/bower_components/jquery/src/traversing/var/dir.js +20 -0
  305. data/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  306. data/vendor/assets/bower_components/jquery/src/traversing/var/siblings.js +15 -0
  307. data/vendor/assets/bower_components/jquery/src/var/arr.js +3 -0
  308. data/vendor/assets/bower_components/jquery/src/var/class2type.js +5 -0
  309. data/vendor/assets/bower_components/jquery/src/var/concat.js +5 -0
  310. data/vendor/assets/bower_components/jquery/src/var/deletedIds.js +3 -0
  311. data/vendor/assets/bower_components/jquery/src/var/document.js +3 -0
  312. data/vendor/assets/bower_components/jquery/src/var/documentElement.js +5 -0
  313. data/vendor/assets/bower_components/jquery/src/var/hasOwn.js +5 -0
  314. data/vendor/assets/bower_components/jquery/src/var/indexOf.js +5 -0
  315. data/vendor/assets/bower_components/jquery/src/var/pnum.js +3 -0
  316. data/vendor/assets/bower_components/jquery/src/var/push.js +5 -0
  317. data/vendor/assets/bower_components/jquery/src/var/rcssNum.js +7 -0
  318. data/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +3 -0
  319. data/vendor/assets/bower_components/jquery/src/var/slice.js +5 -0
  320. data/vendor/assets/bower_components/jquery/src/var/support.js +5 -0
  321. data/vendor/assets/bower_components/jquery/src/var/toString.js +5 -0
  322. data/vendor/assets/bower_components/jquery/src/wrap.js +79 -0
  323. data/vendor/assets/bower_components/jsoneditor/CONTRIBUTING.md +15 -0
  324. data/vendor/assets/bower_components/jsoneditor/HISTORY.md +457 -0
  325. data/vendor/assets/bower_components/jsoneditor/LICENSE +176 -0
  326. data/vendor/assets/bower_components/jsoneditor/NOTICE +17 -0
  327. data/vendor/assets/bower_components/jsoneditor/README.md +155 -0
  328. data/vendor/assets/bower_components/jsoneditor/bower.json +32 -0
  329. data/vendor/assets/bower_components/jsoneditor/dist/img/jsoneditor-icons.svg +893 -0
  330. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor-minimalist.js +9418 -0
  331. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor-minimalist.map +1 -0
  332. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor-minimalist.min.js +35 -0
  333. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor.css.less +879 -0
  334. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor.js +35095 -0
  335. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor.map +1 -0
  336. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor.min.css +1 -0
  337. data/vendor/assets/bower_components/jsoneditor/dist/jsoneditor.min.js +48 -0
  338. data/vendor/assets/bower_components/jsoneditor/dist/which files do I need.md +41 -0
  339. data/vendor/assets/bower_components/jsoneditor/docs/api.md +286 -0
  340. data/vendor/assets/bower_components/jsoneditor/docs/shortcut_keys.md +38 -0
  341. data/vendor/assets/bower_components/jsoneditor/docs/usage.md +117 -0
  342. data/vendor/assets/bower_components/jsoneditor/examples/01_basic_usage.html +49 -0
  343. data/vendor/assets/bower_components/jsoneditor/examples/02_viewer.html +44 -0
  344. data/vendor/assets/bower_components/jsoneditor/examples/03_switch_mode.html +66 -0
  345. data/vendor/assets/bower_components/jsoneditor/examples/04_load_and_save.html +62 -0
  346. data/vendor/assets/bower_components/jsoneditor/examples/05_custom_fields_editable.html +63 -0
  347. data/vendor/assets/bower_components/jsoneditor/examples/06_custom_styling.html +51 -0
  348. data/vendor/assets/bower_components/jsoneditor/examples/07_json_schema_validation.html +71 -0
  349. data/vendor/assets/bower_components/jsoneditor/examples/css/darktheme.css +76 -0
  350. data/vendor/assets/bower_components/jsoneditor/examples/requirejs_demo/requirejs_demo.html +21 -0
  351. data/vendor/assets/bower_components/jsoneditor/examples/requirejs_demo/scripts/main.js +25 -0
  352. data/vendor/assets/bower_components/jsoneditor/examples/requirejs_demo/scripts/require.js +36 -0
  353. data/vendor/assets/bower_components/jsoneditor/index.js +1 -0
  354. data/vendor/assets/bower_components/jsoneditor/package.json +41 -0
  355. data/vendor/assets/bower_components/jsoneditor/src/css/contextmenu.css +233 -0
  356. data/vendor/assets/bower_components/jsoneditor/src/css/img/description.txt +14 -0
  357. data/vendor/assets/bower_components/jsoneditor/src/css/img/jsoneditor-icons.svg +893 -0
  358. data/vendor/assets/bower_components/jsoneditor/src/css/jsoneditor.css +433 -0
  359. data/vendor/assets/bower_components/jsoneditor/src/css/menu.css +110 -0
  360. data/vendor/assets/bower_components/jsoneditor/src/css/searchbox.css +75 -0
  361. data/vendor/assets/bower_components/jsoneditor/src/docs/which files do I need.md +41 -0
  362. data/vendor/assets/bower_components/jsoneditor/src/js/ContextMenu.js +455 -0
  363. data/vendor/assets/bower_components/jsoneditor/src/js/Highlighter.js +84 -0
  364. data/vendor/assets/bower_components/jsoneditor/src/js/History.js +252 -0
  365. data/vendor/assets/bower_components/jsoneditor/src/js/JSONEditor.js +371 -0
  366. data/vendor/assets/bower_components/jsoneditor/src/js/Node.js +3400 -0
  367. data/vendor/assets/bower_components/jsoneditor/src/js/SearchBox.js +295 -0
  368. data/vendor/assets/bower_components/jsoneditor/src/js/ace/index.js +9 -0
  369. data/vendor/assets/bower_components/jsoneditor/src/js/ace/theme-jsoneditor.js +144 -0
  370. data/vendor/assets/bower_components/jsoneditor/src/js/appendNodeFactory.js +226 -0
  371. data/vendor/assets/bower_components/jsoneditor/src/js/assets/jsonlint/README.md +15 -0
  372. data/vendor/assets/bower_components/jsoneditor/src/js/assets/jsonlint/jsonlint.js +418 -0
  373. data/vendor/assets/bower_components/jsoneditor/src/js/header.js +29 -0
  374. data/vendor/assets/bower_components/jsoneditor/src/js/modeswitcher.js +105 -0
  375. data/vendor/assets/bower_components/jsoneditor/src/js/textmode.js +474 -0
  376. data/vendor/assets/bower_components/jsoneditor/src/js/treemode.js +1150 -0
  377. data/vendor/assets/bower_components/jsoneditor/src/js/util.js +765 -0
  378. data/vendor/assets/bower_components/notifyjs/CHANGES.md +7 -0
  379. data/vendor/assets/bower_components/notifyjs/README.md +31 -0
  380. data/vendor/assets/bower_components/notifyjs/bower.json +14 -0
  381. data/vendor/assets/bower_components/notifyjs/dist/notify.js +586 -0
  382. data/vendor/assets/bower_components/notifyjs/dist/styles/metro/notify-metro.css +40 -0
  383. data/vendor/assets/bower_components/notifyjs/dist/styles/metro/notify-metro.js +39 -0
  384. data/vendor/assets/bower_components/notifyjs/examples/classes.html +49 -0
  385. data/vendor/assets/bower_components/notifyjs/examples/images/Mail.png +0 -0
  386. data/vendor/assets/bower_components/notifyjs/examples/inlines.html +111 -0
  387. data/vendor/assets/bower_components/notifyjs/examples/metro.html +37 -0
  388. data/vendor/assets/bower_components/notifyjs/examples/multi-text.html +55 -0
  389. data/vendor/assets/bower_components/notifyjs/examples/position.html +42 -0
  390. data/vendor/assets/bower_components/notifyjs/notify.jquery.json +28 -0
  391. data/vendor/assets/bower_components/notifyjs/package.json +18 -0
  392. data/vendor/assets/bower_components/vue/LICENSE +21 -0
  393. data/vendor/assets/bower_components/vue/bower.json +19 -0
  394. data/vendor/assets/bower_components/vue/dist/vue.js +10198 -0
  395. data/vendor/assets/bower_components/vue/dist/vue.min.js +8 -0
  396. data/vendor/assets/bower_components/vue/src/api/child.js +49 -0
  397. data/vendor/assets/bower_components/vue/src/api/data.js +159 -0
  398. data/vendor/assets/bower_components/vue/src/api/dom.js +226 -0
  399. data/vendor/assets/bower_components/vue/src/api/events.js +174 -0
  400. data/vendor/assets/bower_components/vue/src/api/global.js +129 -0
  401. data/vendor/assets/bower_components/vue/src/api/lifecycle.js +68 -0
  402. data/vendor/assets/bower_components/vue/src/batcher.js +98 -0
  403. data/vendor/assets/bower_components/vue/src/cache.js +112 -0
  404. data/vendor/assets/bower_components/vue/src/compiler/compile-props.js +183 -0
  405. data/vendor/assets/bower_components/vue/src/compiler/compile.js +630 -0
  406. data/vendor/assets/bower_components/vue/src/compiler/index.js +4 -0
  407. data/vendor/assets/bower_components/vue/src/compiler/transclude.js +144 -0
  408. data/vendor/assets/bower_components/vue/src/config.js +124 -0
  409. data/vendor/assets/bower_components/vue/src/directive.js +254 -0
  410. data/vendor/assets/bower_components/vue/src/directives/attr.js +59 -0
  411. data/vendor/assets/bower_components/vue/src/directives/class.js +70 -0
  412. data/vendor/assets/bower_components/vue/src/directives/cloak.js +10 -0
  413. data/vendor/assets/bower_components/vue/src/directives/component.js +344 -0
  414. data/vendor/assets/bower_components/vue/src/directives/el.js +12 -0
  415. data/vendor/assets/bower_components/vue/src/directives/html.js +40 -0
  416. data/vendor/assets/bower_components/vue/src/directives/if.js +125 -0
  417. data/vendor/assets/bower_components/vue/src/directives/index.js +24 -0
  418. data/vendor/assets/bower_components/vue/src/directives/model/checkbox.js +42 -0
  419. data/vendor/assets/bower_components/vue/src/directives/model/index.js +82 -0
  420. data/vendor/assets/bower_components/vue/src/directives/model/radio.js +33 -0
  421. data/vendor/assets/bower_components/vue/src/directives/model/select.js +236 -0
  422. data/vendor/assets/bower_components/vue/src/directives/model/text.js +132 -0
  423. data/vendor/assets/bower_components/vue/src/directives/on.js +59 -0
  424. data/vendor/assets/bower_components/vue/src/directives/prop.js +62 -0
  425. data/vendor/assets/bower_components/vue/src/directives/ref.js +22 -0
  426. data/vendor/assets/bower_components/vue/src/directives/repeat.js +770 -0
  427. data/vendor/assets/bower_components/vue/src/directives/show.js +8 -0
  428. data/vendor/assets/bower_components/vue/src/directives/style.js +110 -0
  429. data/vendor/assets/bower_components/vue/src/directives/text.js +14 -0
  430. data/vendor/assets/bower_components/vue/src/directives/transition.js +26 -0
  431. data/vendor/assets/bower_components/vue/src/element-directives/content.js +111 -0
  432. data/vendor/assets/bower_components/vue/src/element-directives/index.js +2 -0
  433. data/vendor/assets/bower_components/vue/src/element-directives/partial.js +73 -0
  434. data/vendor/assets/bower_components/vue/src/filters/array-filters.js +97 -0
  435. data/vendor/assets/bower_components/vue/src/filters/index.js +146 -0
  436. data/vendor/assets/bower_components/vue/src/instance/compile.js +200 -0
  437. data/vendor/assets/bower_components/vue/src/instance/events.js +139 -0
  438. data/vendor/assets/bower_components/vue/src/instance/init.js +89 -0
  439. data/vendor/assets/bower_components/vue/src/instance/misc.js +93 -0
  440. data/vendor/assets/bower_components/vue/src/instance/scope.js +282 -0
  441. data/vendor/assets/bower_components/vue/src/observer/array.js +98 -0
  442. data/vendor/assets/bower_components/vue/src/observer/dep.js +61 -0
  443. data/vendor/assets/bower_components/vue/src/observer/index.js +234 -0
  444. data/vendor/assets/bower_components/vue/src/observer/object.js +82 -0
  445. data/vendor/assets/bower_components/vue/src/parsers/directive.js +180 -0
  446. data/vendor/assets/bower_components/vue/src/parsers/expression.js +264 -0
  447. data/vendor/assets/bower_components/vue/src/parsers/path.js +348 -0
  448. data/vendor/assets/bower_components/vue/src/parsers/template.js +288 -0
  449. data/vendor/assets/bower_components/vue/src/parsers/text.js +178 -0
  450. data/vendor/assets/bower_components/vue/src/transition/index.js +128 -0
  451. data/vendor/assets/bower_components/vue/src/transition/queue.js +35 -0
  452. data/vendor/assets/bower_components/vue/src/transition/transition.js +357 -0
  453. data/vendor/assets/bower_components/vue/src/util/component.js +124 -0
  454. data/vendor/assets/bower_components/vue/src/util/debug.js +64 -0
  455. data/vendor/assets/bower_components/vue/src/util/dom.js +272 -0
  456. data/vendor/assets/bower_components/vue/src/util/env.js +85 -0
  457. data/vendor/assets/bower_components/vue/src/util/index.js +9 -0
  458. data/vendor/assets/bower_components/vue/src/util/lang.js +310 -0
  459. data/vendor/assets/bower_components/vue/src/util/options.js +357 -0
  460. data/vendor/assets/bower_components/vue/src/vue.js +89 -0
  461. data/vendor/assets/bower_components/vue/src/watcher.js +312 -0
  462. metadata +870 -0
@@ -0,0 +1,765 @@
1
+ var jsonlint = require('./assets/jsonlint/jsonlint');
2
+
3
+ /**
4
+ * Parse JSON using the parser built-in in the browser.
5
+ * On exception, the jsonString is validated and a detailed error is thrown.
6
+ * @param {String} jsonString
7
+ * @return {JSON} json
8
+ */
9
+ exports.parse = function parse(jsonString) {
10
+ try {
11
+ return JSON.parse(jsonString);
12
+ }
13
+ catch (err) {
14
+ // try to throw a more detailed error message using validate
15
+ exports.validate(jsonString);
16
+
17
+ // rethrow the original error
18
+ throw err;
19
+ }
20
+ };
21
+
22
+ /**
23
+ * Sanitize a JSON-like string containing. For example changes JavaScript
24
+ * notation into JSON notation.
25
+ * This function for example changes a string like "{a: 2, 'b': {c: 'd'}"
26
+ * into '{"a": 2, "b": {"c": "d"}'
27
+ * @param {string} jsString
28
+ * @returns {string} json
29
+ */
30
+ exports.sanitize = function (jsString) {
31
+ // escape all single and double quotes inside strings
32
+ var chars = [];
33
+ var i = 0;
34
+
35
+ //If JSON starts with a function (characters/digits/"_-"), remove this function.
36
+ //This is useful for "stripping" JSONP objects to become JSON
37
+ //For example: /* some comment */ function_12321321 ( [{"a":"b"}] ); => [{"a":"b"}]
38
+ var match = jsString.match(/^\s*(\/\*(.|[\r\n])*?\*\/)?\s*[\da-zA-Z_$]+\s*\(([\s\S]*)\)\s*;?\s*$/);
39
+ if (match) {
40
+ jsString = match[3];
41
+ }
42
+
43
+ // helper functions to get the current/prev/next character
44
+ function curr () { return jsString.charAt(i); }
45
+ function next() { return jsString.charAt(i + 1); }
46
+ function prev() { return jsString.charAt(i - 1); }
47
+
48
+ // get the last parsed non-whitespace character
49
+ function lastNonWhitespace () {
50
+ var p = chars.length - 1;
51
+
52
+ while (p >= 0) {
53
+ var pp = chars[p];
54
+ if (pp !== ' ' && pp !== '\n' && pp !== '\r' && pp !== '\t') { // non whitespace
55
+ return pp;
56
+ }
57
+ p--;
58
+ }
59
+
60
+ return '';
61
+ }
62
+
63
+ // skip a block comment '/* ... */'
64
+ function skipBlockComment () {
65
+ i += 2;
66
+ while (i < jsString.length && (curr() !== '*' || next() !== '/')) {
67
+ i++;
68
+ }
69
+ i += 2;
70
+ }
71
+
72
+ // skip a comment '// ...'
73
+ function skipComment () {
74
+ i += 2;
75
+ while (i < jsString.length && (curr() !== '\n')) {
76
+ i++;
77
+ }
78
+ }
79
+
80
+ // parse single or double quoted string
81
+ function parseString(quote) {
82
+ chars.push('"');
83
+ i++;
84
+ var c = curr();
85
+ while (i < jsString.length && c !== quote) {
86
+ if (c === '"' && prev() !== '\\') {
87
+ // unescaped double quote, escape it
88
+ chars.push('\\');
89
+ }
90
+
91
+ // handle escape character
92
+ if (c === '\\') {
93
+ i++;
94
+ c = curr();
95
+
96
+ // remove the escape character when followed by a single quote ', not needed
97
+ if (c !== '\'') {
98
+ chars.push('\\');
99
+ }
100
+ }
101
+ chars.push(c);
102
+
103
+ i++;
104
+ c = curr();
105
+ }
106
+ if (c === quote) {
107
+ chars.push('"');
108
+ i++;
109
+ }
110
+ }
111
+
112
+ // parse an unquoted key
113
+ function parseKey() {
114
+ var specialValues = ['null', 'true', 'false'];
115
+ var key = '';
116
+ var c = curr();
117
+
118
+ var regexp = /[a-zA-Z_$\d]/; // letter, number, underscore, dollar character
119
+ while (regexp.test(c)) {
120
+ key += c;
121
+ i++;
122
+ c = curr();
123
+ }
124
+
125
+ if (specialValues.indexOf(key) === -1) {
126
+ chars.push('"' + key + '"');
127
+ }
128
+ else {
129
+ chars.push(key);
130
+ }
131
+ }
132
+
133
+ while(i < jsString.length) {
134
+ var c = curr();
135
+
136
+ if (c === '/' && next() === '*') {
137
+ skipBlockComment();
138
+ }
139
+ else if (c === '/' && next() === '/') {
140
+ skipComment();
141
+ }
142
+ else if (c === '\'' || c === '"') {
143
+ parseString(c);
144
+ }
145
+ else if (/[a-zA-Z_$]/.test(c) && ['{', ','].indexOf(lastNonWhitespace()) !== -1) {
146
+ // an unquoted object key (like a in '{a:2}')
147
+ parseKey();
148
+ }
149
+ else {
150
+ chars.push(c);
151
+ i++;
152
+ }
153
+ }
154
+
155
+ return chars.join('');
156
+ };
157
+
158
+ /**
159
+ * Escape unicode characters.
160
+ * For example input '\u2661' (length 1) will output '\\u2661' (length 5).
161
+ * @param {string} text
162
+ * @return {string}
163
+ */
164
+ exports.escapeUnicodeChars = function (text) {
165
+ // see https://www.wikiwand.com/en/UTF-16
166
+ // note: we leave surrogate pairs as two individual chars,
167
+ // as JSON doesn't interpret them as a single unicode char.
168
+ return text.replace(/[\u007F-\uFFFF]/g, function(c) {
169
+ return '\\u'+('0000' + c.charCodeAt(0).toString(16)).slice(-4);
170
+ })
171
+ };
172
+
173
+ /**
174
+ * Validate a string containing a JSON object
175
+ * This method uses JSONLint to validate the String. If JSONLint is not
176
+ * available, the built-in JSON parser of the browser is used.
177
+ * @param {String} jsonString String with an (invalid) JSON object
178
+ * @throws Error
179
+ */
180
+ exports.validate = function validate(jsonString) {
181
+ if (typeof(jsonlint) != 'undefined') {
182
+ jsonlint.parse(jsonString);
183
+ }
184
+ else {
185
+ JSON.parse(jsonString);
186
+ }
187
+ };
188
+
189
+ /**
190
+ * Extend object a with the properties of object b
191
+ * @param {Object} a
192
+ * @param {Object} b
193
+ * @return {Object} a
194
+ */
195
+ exports.extend = function extend(a, b) {
196
+ for (var prop in b) {
197
+ if (b.hasOwnProperty(prop)) {
198
+ a[prop] = b[prop];
199
+ }
200
+ }
201
+ return a;
202
+ };
203
+
204
+ /**
205
+ * Remove all properties from object a
206
+ * @param {Object} a
207
+ * @return {Object} a
208
+ */
209
+ exports.clear = function clear (a) {
210
+ for (var prop in a) {
211
+ if (a.hasOwnProperty(prop)) {
212
+ delete a[prop];
213
+ }
214
+ }
215
+ return a;
216
+ };
217
+
218
+ /**
219
+ * Get the type of an object
220
+ * @param {*} object
221
+ * @return {String} type
222
+ */
223
+ exports.type = function type (object) {
224
+ if (object === null) {
225
+ return 'null';
226
+ }
227
+ if (object === undefined) {
228
+ return 'undefined';
229
+ }
230
+ if ((object instanceof Number) || (typeof object === 'number')) {
231
+ return 'number';
232
+ }
233
+ if ((object instanceof String) || (typeof object === 'string')) {
234
+ return 'string';
235
+ }
236
+ if ((object instanceof Boolean) || (typeof object === 'boolean')) {
237
+ return 'boolean';
238
+ }
239
+ if ((object instanceof RegExp) || (typeof object === 'regexp')) {
240
+ return 'regexp';
241
+ }
242
+ if (exports.isArray(object)) {
243
+ return 'array';
244
+ }
245
+
246
+ return 'object';
247
+ };
248
+
249
+ /**
250
+ * Test whether a text contains a url (matches when a string starts
251
+ * with 'http://*' or 'https://*' and has no whitespace characters)
252
+ * @param {String} text
253
+ */
254
+ var isUrlRegex = /^https?:\/\/\S+$/;
255
+ exports.isUrl = function isUrl (text) {
256
+ return (typeof text == 'string' || text instanceof String) &&
257
+ isUrlRegex.test(text);
258
+ };
259
+
260
+ /**
261
+ * Tes whether given object is an Array
262
+ * @param {*} obj
263
+ * @returns {boolean} returns true when obj is an array
264
+ */
265
+ exports.isArray = function (obj) {
266
+ return Object.prototype.toString.call(obj) === '[object Array]';
267
+ };
268
+
269
+ /**
270
+ * Retrieve the absolute left value of a DOM element
271
+ * @param {Element} elem A dom element, for example a div
272
+ * @return {Number} left The absolute left position of this element
273
+ * in the browser page.
274
+ */
275
+ exports.getAbsoluteLeft = function getAbsoluteLeft(elem) {
276
+ var rect = elem.getBoundingClientRect();
277
+ return rect.left + window.pageXOffset || document.scrollLeft || 0;
278
+ };
279
+
280
+ /**
281
+ * Retrieve the absolute top value of a DOM element
282
+ * @param {Element} elem A dom element, for example a div
283
+ * @return {Number} top The absolute top position of this element
284
+ * in the browser page.
285
+ */
286
+ exports.getAbsoluteTop = function getAbsoluteTop(elem) {
287
+ var rect = elem.getBoundingClientRect();
288
+ return rect.top + window.pageYOffset || document.scrollTop || 0;
289
+ };
290
+
291
+ /**
292
+ * add a className to the given elements style
293
+ * @param {Element} elem
294
+ * @param {String} className
295
+ */
296
+ exports.addClassName = function addClassName(elem, className) {
297
+ var classes = elem.className.split(' ');
298
+ if (classes.indexOf(className) == -1) {
299
+ classes.push(className); // add the class to the array
300
+ elem.className = classes.join(' ');
301
+ }
302
+ };
303
+
304
+ /**
305
+ * add a className to the given elements style
306
+ * @param {Element} elem
307
+ * @param {String} className
308
+ */
309
+ exports.removeClassName = function removeClassName(elem, className) {
310
+ var classes = elem.className.split(' ');
311
+ var index = classes.indexOf(className);
312
+ if (index != -1) {
313
+ classes.splice(index, 1); // remove the class from the array
314
+ elem.className = classes.join(' ');
315
+ }
316
+ };
317
+
318
+ /**
319
+ * Strip the formatting from the contents of a div
320
+ * the formatting from the div itself is not stripped, only from its childs.
321
+ * @param {Element} divElement
322
+ */
323
+ exports.stripFormatting = function stripFormatting(divElement) {
324
+ var childs = divElement.childNodes;
325
+ for (var i = 0, iMax = childs.length; i < iMax; i++) {
326
+ var child = childs[i];
327
+
328
+ // remove the style
329
+ if (child.style) {
330
+ // TODO: test if child.attributes does contain style
331
+ child.removeAttribute('style');
332
+ }
333
+
334
+ // remove all attributes
335
+ var attributes = child.attributes;
336
+ if (attributes) {
337
+ for (var j = attributes.length - 1; j >= 0; j--) {
338
+ var attribute = attributes[j];
339
+ if (attribute.specified === true) {
340
+ child.removeAttribute(attribute.name);
341
+ }
342
+ }
343
+ }
344
+
345
+ // recursively strip childs
346
+ exports.stripFormatting(child);
347
+ }
348
+ };
349
+
350
+ /**
351
+ * Set focus to the end of an editable div
352
+ * code from Nico Burns
353
+ * http://stackoverflow.com/users/140293/nico-burns
354
+ * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity
355
+ * @param {Element} contentEditableElement A content editable div
356
+ */
357
+ exports.setEndOfContentEditable = function setEndOfContentEditable(contentEditableElement) {
358
+ var range, selection;
359
+ if(document.createRange) {
360
+ range = document.createRange();//Create a range (a range is a like the selection but invisible)
361
+ range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range
362
+ range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
363
+ selection = window.getSelection();//get the selection object (allows you to change selection)
364
+ selection.removeAllRanges();//remove any selections already made
365
+ selection.addRange(range);//make the range you have just created the visible selection
366
+ }
367
+ };
368
+
369
+ /**
370
+ * Select all text of a content editable div.
371
+ * http://stackoverflow.com/a/3806004/1262753
372
+ * @param {Element} contentEditableElement A content editable div
373
+ */
374
+ exports.selectContentEditable = function selectContentEditable(contentEditableElement) {
375
+ if (!contentEditableElement || contentEditableElement.nodeName != 'DIV') {
376
+ return;
377
+ }
378
+
379
+ var sel, range;
380
+ if (window.getSelection && document.createRange) {
381
+ range = document.createRange();
382
+ range.selectNodeContents(contentEditableElement);
383
+ sel = window.getSelection();
384
+ sel.removeAllRanges();
385
+ sel.addRange(range);
386
+ }
387
+ };
388
+
389
+ /**
390
+ * Get text selection
391
+ * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore
392
+ * @return {Range | TextRange | null} range
393
+ */
394
+ exports.getSelection = function getSelection() {
395
+ if (window.getSelection) {
396
+ var sel = window.getSelection();
397
+ if (sel.getRangeAt && sel.rangeCount) {
398
+ return sel.getRangeAt(0);
399
+ }
400
+ }
401
+ return null;
402
+ };
403
+
404
+ /**
405
+ * Set text selection
406
+ * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore
407
+ * @param {Range | TextRange | null} range
408
+ */
409
+ exports.setSelection = function setSelection(range) {
410
+ if (range) {
411
+ if (window.getSelection) {
412
+ var sel = window.getSelection();
413
+ sel.removeAllRanges();
414
+ sel.addRange(range);
415
+ }
416
+ }
417
+ };
418
+
419
+ /**
420
+ * Get selected text range
421
+ * @return {Object} params object containing parameters:
422
+ * {Number} startOffset
423
+ * {Number} endOffset
424
+ * {Element} container HTML element holding the
425
+ * selected text element
426
+ * Returns null if no text selection is found
427
+ */
428
+ exports.getSelectionOffset = function getSelectionOffset() {
429
+ var range = exports.getSelection();
430
+
431
+ if (range && 'startOffset' in range && 'endOffset' in range &&
432
+ range.startContainer && (range.startContainer == range.endContainer)) {
433
+ return {
434
+ startOffset: range.startOffset,
435
+ endOffset: range.endOffset,
436
+ container: range.startContainer.parentNode
437
+ };
438
+ }
439
+
440
+ return null;
441
+ };
442
+
443
+ /**
444
+ * Set selected text range in given element
445
+ * @param {Object} params An object containing:
446
+ * {Element} container
447
+ * {Number} startOffset
448
+ * {Number} endOffset
449
+ */
450
+ exports.setSelectionOffset = function setSelectionOffset(params) {
451
+ if (document.createRange && window.getSelection) {
452
+ var selection = window.getSelection();
453
+ if(selection) {
454
+ var range = document.createRange();
455
+
456
+ if (!params.container.firstChild) {
457
+ params.container.appendChild(document.createTextNode(''));
458
+ }
459
+
460
+ // TODO: do not suppose that the first child of the container is a textnode,
461
+ // but recursively find the textnodes
462
+ range.setStart(params.container.firstChild, params.startOffset);
463
+ range.setEnd(params.container.firstChild, params.endOffset);
464
+
465
+ exports.setSelection(range);
466
+ }
467
+ }
468
+ };
469
+
470
+ /**
471
+ * Get the inner text of an HTML element (for example a div element)
472
+ * @param {Element} element
473
+ * @param {Object} [buffer]
474
+ * @return {String} innerText
475
+ */
476
+ exports.getInnerText = function getInnerText(element, buffer) {
477
+ var first = (buffer == undefined);
478
+ if (first) {
479
+ buffer = {
480
+ 'text': '',
481
+ 'flush': function () {
482
+ var text = this.text;
483
+ this.text = '';
484
+ return text;
485
+ },
486
+ 'set': function (text) {
487
+ this.text = text;
488
+ }
489
+ };
490
+ }
491
+
492
+ // text node
493
+ if (element.nodeValue) {
494
+ return buffer.flush() + element.nodeValue;
495
+ }
496
+
497
+ // divs or other HTML elements
498
+ if (element.hasChildNodes()) {
499
+ var childNodes = element.childNodes;
500
+ var innerText = '';
501
+
502
+ for (var i = 0, iMax = childNodes.length; i < iMax; i++) {
503
+ var child = childNodes[i];
504
+
505
+ if (child.nodeName == 'DIV' || child.nodeName == 'P') {
506
+ var prevChild = childNodes[i - 1];
507
+ var prevName = prevChild ? prevChild.nodeName : undefined;
508
+ if (prevName && prevName != 'DIV' && prevName != 'P' && prevName != 'BR') {
509
+ innerText += '\n';
510
+ buffer.flush();
511
+ }
512
+ innerText += exports.getInnerText(child, buffer);
513
+ buffer.set('\n');
514
+ }
515
+ else if (child.nodeName == 'BR') {
516
+ innerText += buffer.flush();
517
+ buffer.set('\n');
518
+ }
519
+ else {
520
+ innerText += exports.getInnerText(child, buffer);
521
+ }
522
+ }
523
+
524
+ return innerText;
525
+ }
526
+ else {
527
+ if (element.nodeName == 'P' && exports.getInternetExplorerVersion() != -1) {
528
+ // On Internet Explorer, a <p> with hasChildNodes()==false is
529
+ // rendered with a new line. Note that a <p> with
530
+ // hasChildNodes()==true is rendered without a new line
531
+ // Other browsers always ensure there is a <br> inside the <p>,
532
+ // and if not, the <p> does not render a new line
533
+ return buffer.flush();
534
+ }
535
+ }
536
+
537
+ // br or unknown
538
+ return '';
539
+ };
540
+
541
+ /**
542
+ * Returns the version of Internet Explorer or a -1
543
+ * (indicating the use of another browser).
544
+ * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx
545
+ * @return {Number} Internet Explorer version, or -1 in case of an other browser
546
+ */
547
+ exports.getInternetExplorerVersion = function getInternetExplorerVersion() {
548
+ if (_ieVersion == -1) {
549
+ var rv = -1; // Return value assumes failure.
550
+ if (navigator.appName == 'Microsoft Internet Explorer')
551
+ {
552
+ var ua = navigator.userAgent;
553
+ var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
554
+ if (re.exec(ua) != null) {
555
+ rv = parseFloat( RegExp.$1 );
556
+ }
557
+ }
558
+
559
+ _ieVersion = rv;
560
+ }
561
+
562
+ return _ieVersion;
563
+ };
564
+
565
+ /**
566
+ * Test whether the current browser is Firefox
567
+ * @returns {boolean} isFirefox
568
+ */
569
+ exports.isFirefox = function isFirefox () {
570
+ return (navigator.userAgent.indexOf("Firefox") != -1);
571
+ };
572
+
573
+ /**
574
+ * cached internet explorer version
575
+ * @type {Number}
576
+ * @private
577
+ */
578
+ var _ieVersion = -1;
579
+
580
+ /**
581
+ * Add and event listener. Works for all browsers
582
+ * @param {Element} element An html element
583
+ * @param {string} action The action, for example "click",
584
+ * without the prefix "on"
585
+ * @param {function} listener The callback function to be executed
586
+ * @param {boolean} [useCapture] false by default
587
+ * @return {function} the created event listener
588
+ */
589
+ exports.addEventListener = function addEventListener(element, action, listener, useCapture) {
590
+ if (element.addEventListener) {
591
+ if (useCapture === undefined)
592
+ useCapture = false;
593
+
594
+ if (action === "mousewheel" && exports.isFirefox()) {
595
+ action = "DOMMouseScroll"; // For Firefox
596
+ }
597
+
598
+ element.addEventListener(action, listener, useCapture);
599
+ return listener;
600
+ } else if (element.attachEvent) {
601
+ // Old IE browsers
602
+ var f = function () {
603
+ return listener.call(element, window.event);
604
+ };
605
+ element.attachEvent("on" + action, f);
606
+ return f;
607
+ }
608
+ };
609
+
610
+ /**
611
+ * Remove an event listener from an element
612
+ * @param {Element} element An html dom element
613
+ * @param {string} action The name of the event, for example "mousedown"
614
+ * @param {function} listener The listener function
615
+ * @param {boolean} [useCapture] false by default
616
+ */
617
+ exports.removeEventListener = function removeEventListener(element, action, listener, useCapture) {
618
+ if (element.removeEventListener) {
619
+ if (useCapture === undefined)
620
+ useCapture = false;
621
+
622
+ if (action === "mousewheel" && exports.isFirefox()) {
623
+ action = "DOMMouseScroll"; // For Firefox
624
+ }
625
+
626
+ element.removeEventListener(action, listener, useCapture);
627
+ } else if (element.detachEvent) {
628
+ // Old IE browsers
629
+ element.detachEvent("on" + action, listener);
630
+ }
631
+ };
632
+
633
+ /**
634
+ * Parse a JSON path like '.items[3].name' into an array
635
+ * @param {string} jsonPath
636
+ * @return {Array}
637
+ */
638
+ exports.parsePath = function parsePath(jsonPath) {
639
+ var prop, remainder;
640
+
641
+ if (jsonPath.length === 0) {
642
+ return [];
643
+ }
644
+
645
+ // find a match like '.prop'
646
+ var match = jsonPath.match(/^\.(\w+)/);
647
+ if (match) {
648
+ prop = match[1];
649
+ remainder = jsonPath.substr(prop.length + 1);
650
+ }
651
+ else if (jsonPath[0] === '[') {
652
+ // find a match like
653
+ var end = jsonPath.indexOf(']');
654
+ if (end === -1) {
655
+ throw new SyntaxError('Character ] expected in path');
656
+ }
657
+ if (end === 1) {
658
+ throw new SyntaxError('Index expected after [');
659
+ }
660
+
661
+ prop = JSON.parse(jsonPath.substring(1, end));
662
+ remainder = jsonPath.substr(end + 1);
663
+ }
664
+ else {
665
+ throw new SyntaxError('Failed to parse path');
666
+ }
667
+
668
+ return [prop].concat(parsePath(remainder))
669
+ };
670
+
671
+ /**
672
+ * Improve the error message of a JSON schema error
673
+ * @param {Object} error
674
+ * @return {Object} The error
675
+ */
676
+ exports.improveSchemaError = function (error) {
677
+ if (error.keyword === 'enum' && Array.isArray(error.schema)) {
678
+ var enums = error.schema;
679
+ if (enums) {
680
+ enums = enums.map(function (value) {
681
+ return JSON.stringify(value);
682
+ });
683
+
684
+ if (enums.length > 5) {
685
+ var more = ['(' + (enums.length - 5) + ' more...)'];
686
+ enums = enums.slice(0, 5);
687
+ enums.push(more);
688
+ }
689
+ error.message = 'should be equal to one of: ' + enums.join(', ');
690
+ }
691
+ }
692
+
693
+ return error;
694
+ };
695
+
696
+ /**
697
+ * Test whether the child rect fits completely inside the parent rect.
698
+ * @param {ClientRect} parent
699
+ * @param {ClientRect} child
700
+ * @param {number} margin
701
+ */
702
+ exports.insideRect = function (parent, child, margin) {
703
+ var _margin = margin !== undefined ? margin : 0;
704
+ return child.left - _margin >= parent.left
705
+ && child.right + _margin <= parent.right
706
+ && child.top - _margin >= parent.top
707
+ && child.bottom + _margin <= parent.bottom;
708
+ };
709
+
710
+ /**
711
+ * Returns a function, that, as long as it continues to be invoked, will not
712
+ * be triggered. The function will be called after it stops being called for
713
+ * N milliseconds.
714
+ *
715
+ * Source: https://davidwalsh.name/javascript-debounce-function
716
+ *
717
+ * @param {function} func
718
+ * @param {number} wait Number in milliseconds
719
+ * @param {boolean} [immediate=false] If `immediate` is passed, trigger the
720
+ * function on the leading edge, instead
721
+ * of the trailing.
722
+ * @return {function} Return the debounced function
723
+ */
724
+ exports.debounce = function debounce(func, wait, immediate) {
725
+ var timeout;
726
+ return function() {
727
+ var context = this, args = arguments;
728
+ var later = function() {
729
+ timeout = null;
730
+ if (!immediate) func.apply(context, args);
731
+ };
732
+ var callNow = immediate && !timeout;
733
+ clearTimeout(timeout);
734
+ timeout = setTimeout(later, wait);
735
+ if (callNow) func.apply(context, args);
736
+ };
737
+ };
738
+
739
+ /**
740
+ * Determines the difference between two texts.
741
+ * Can only detect one removed or inserted block of characters.
742
+ * @param {string} oldText
743
+ * @param {string} newText
744
+ * @return {{start: number, end: number}} Returns the start and end
745
+ * of the changed part in newText.
746
+ */
747
+ exports.textDiff = function textDiff(oldText, newText) {
748
+ var len = newText.length;
749
+ var start = 0;
750
+ var oldEnd = oldText.length;
751
+ var newEnd = newText.length;
752
+
753
+ while (newText.charAt(start) === oldText.charAt(start)
754
+ && start < len) {
755
+ start++;
756
+ }
757
+
758
+ while (newText.charAt(newEnd - 1) === oldText.charAt(oldEnd - 1)
759
+ && newEnd > start && oldEnd > 0) {
760
+ newEnd--;
761
+ oldEnd--;
762
+ }
763
+
764
+ return {start: start, end: newEnd};
765
+ };