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,84 @@
1
+ /**
2
+ * The highlighter can highlight/unhighlight a node, and
3
+ * animate the visibility of a context menu.
4
+ * @constructor Highlighter
5
+ */
6
+ function Highlighter () {
7
+ this.locked = false;
8
+ }
9
+
10
+ /**
11
+ * Hightlight given node and its childs
12
+ * @param {Node} node
13
+ */
14
+ Highlighter.prototype.highlight = function (node) {
15
+ if (this.locked) {
16
+ return;
17
+ }
18
+
19
+ if (this.node != node) {
20
+ // unhighlight current node
21
+ if (this.node) {
22
+ this.node.setHighlight(false);
23
+ }
24
+
25
+ // highlight new node
26
+ this.node = node;
27
+ this.node.setHighlight(true);
28
+ }
29
+
30
+ // cancel any current timeout
31
+ this._cancelUnhighlight();
32
+ };
33
+
34
+ /**
35
+ * Unhighlight currently highlighted node.
36
+ * Will be done after a delay
37
+ */
38
+ Highlighter.prototype.unhighlight = function () {
39
+ if (this.locked) {
40
+ return;
41
+ }
42
+
43
+ var me = this;
44
+ if (this.node) {
45
+ this._cancelUnhighlight();
46
+
47
+ // do the unhighlighting after a small delay, to prevent re-highlighting
48
+ // the same node when moving from the drag-icon to the contextmenu-icon
49
+ // or vice versa.
50
+ this.unhighlightTimer = setTimeout(function () {
51
+ me.node.setHighlight(false);
52
+ me.node = undefined;
53
+ me.unhighlightTimer = undefined;
54
+ }, 0);
55
+ }
56
+ };
57
+
58
+ /**
59
+ * Cancel an unhighlight action (if before the timeout of the unhighlight action)
60
+ * @private
61
+ */
62
+ Highlighter.prototype._cancelUnhighlight = function () {
63
+ if (this.unhighlightTimer) {
64
+ clearTimeout(this.unhighlightTimer);
65
+ this.unhighlightTimer = undefined;
66
+ }
67
+ };
68
+
69
+ /**
70
+ * Lock highlighting or unhighlighting nodes.
71
+ * methods highlight and unhighlight do not work while locked.
72
+ */
73
+ Highlighter.prototype.lock = function () {
74
+ this.locked = true;
75
+ };
76
+
77
+ /**
78
+ * Unlock highlighting or unhighlighting nodes
79
+ */
80
+ Highlighter.prototype.unlock = function () {
81
+ this.locked = false;
82
+ };
83
+
84
+ module.exports = Highlighter;
@@ -0,0 +1,252 @@
1
+ var util = require('./util');
2
+
3
+ /**
4
+ * @constructor History
5
+ * Store action history, enables undo and redo
6
+ * @param {JSONEditor} editor
7
+ */
8
+ function History (editor) {
9
+ this.editor = editor;
10
+ this.clear();
11
+
12
+ // map with all supported actions
13
+ this.actions = {
14
+ 'editField': {
15
+ 'undo': function (params) {
16
+ params.node.updateField(params.oldValue);
17
+ },
18
+ 'redo': function (params) {
19
+ params.node.updateField(params.newValue);
20
+ }
21
+ },
22
+ 'editValue': {
23
+ 'undo': function (params) {
24
+ params.node.updateValue(params.oldValue);
25
+ },
26
+ 'redo': function (params) {
27
+ params.node.updateValue(params.newValue);
28
+ }
29
+ },
30
+ 'changeType': {
31
+ 'undo': function (params) {
32
+ params.node.changeType(params.oldType);
33
+ },
34
+ 'redo': function (params) {
35
+ params.node.changeType(params.newType);
36
+ }
37
+ },
38
+
39
+ 'appendNodes': {
40
+ 'undo': function (params) {
41
+ params.nodes.forEach(function (node) {
42
+ params.parent.removeChild(node);
43
+ });
44
+ },
45
+ 'redo': function (params) {
46
+ params.nodes.forEach(function (node) {
47
+ params.parent.appendChild(node);
48
+ });
49
+ }
50
+ },
51
+ 'insertBeforeNodes': {
52
+ 'undo': function (params) {
53
+ params.nodes.forEach(function (node) {
54
+ params.parent.removeChild(node);
55
+ });
56
+ },
57
+ 'redo': function (params) {
58
+ params.nodes.forEach(function (node) {
59
+ params.parent.insertBefore(node, params.beforeNode);
60
+ });
61
+ }
62
+ },
63
+ 'insertAfterNodes': {
64
+ 'undo': function (params) {
65
+ params.nodes.forEach(function (node) {
66
+ params.parent.removeChild(node);
67
+ });
68
+ },
69
+ 'redo': function (params) {
70
+ var afterNode = params.afterNode;
71
+ params.nodes.forEach(function (node) {
72
+ params.parent.insertAfter(params.node, afterNode);
73
+ afterNode = node;
74
+ });
75
+ }
76
+ },
77
+ 'removeNodes': {
78
+ 'undo': function (params) {
79
+ var parent = params.parent;
80
+ var beforeNode = parent.childs[params.index] || parent.append;
81
+ params.nodes.forEach(function (node) {
82
+ parent.insertBefore(node, beforeNode);
83
+ });
84
+ },
85
+ 'redo': function (params) {
86
+ params.nodes.forEach(function (node) {
87
+ params.parent.removeChild(node);
88
+ });
89
+ }
90
+ },
91
+ 'duplicateNodes': {
92
+ 'undo': function (params) {
93
+ params.nodes.forEach(function (node) {
94
+ params.parent.removeChild(node);
95
+ });
96
+ },
97
+ 'redo': function (params) {
98
+ var afterNode = params.afterNode;
99
+ params.nodes.forEach(function (node) {
100
+ params.parent.insertAfter(node, afterNode);
101
+ afterNode = node;
102
+ });
103
+ }
104
+ },
105
+ 'moveNodes': {
106
+ 'undo': function (params) {
107
+ params.nodes.forEach(function (node) {
108
+ params.oldBeforeNode.parent.moveBefore(node, params.oldBeforeNode);
109
+ });
110
+ },
111
+ 'redo': function (params) {
112
+ params.nodes.forEach(function (node) {
113
+ params.newBeforeNode.parent.moveBefore(node, params.newBeforeNode);
114
+ });
115
+ }
116
+ },
117
+
118
+ 'sort': {
119
+ 'undo': function (params) {
120
+ var node = params.node;
121
+ node.hideChilds();
122
+ node.sort = params.oldSort;
123
+ node.childs = params.oldChilds;
124
+ node.showChilds();
125
+ },
126
+ 'redo': function (params) {
127
+ var node = params.node;
128
+ node.hideChilds();
129
+ node.sort = params.newSort;
130
+ node.childs = params.newChilds;
131
+ node.showChilds();
132
+ }
133
+ }
134
+
135
+ // TODO: restore the original caret position and selection with each undo
136
+ // TODO: implement history for actions "expand", "collapse", "scroll", "setDocument"
137
+ };
138
+ }
139
+
140
+ /**
141
+ * The method onChange is executed when the History is changed, and can
142
+ * be overloaded.
143
+ */
144
+ History.prototype.onChange = function () {};
145
+
146
+ /**
147
+ * Add a new action to the history
148
+ * @param {String} action The executed action. Available actions: "editField",
149
+ * "editValue", "changeType", "appendNode",
150
+ * "removeNode", "duplicateNode", "moveNode"
151
+ * @param {Object} params Object containing parameters describing the change.
152
+ * The parameters in params depend on the action (for
153
+ * example for "editValue" the Node, old value, and new
154
+ * value are provided). params contains all information
155
+ * needed to undo or redo the action.
156
+ */
157
+ History.prototype.add = function (action, params) {
158
+ this.index++;
159
+ this.history[this.index] = {
160
+ 'action': action,
161
+ 'params': params,
162
+ 'timestamp': new Date()
163
+ };
164
+
165
+ // remove redo actions which are invalid now
166
+ if (this.index < this.history.length - 1) {
167
+ this.history.splice(this.index + 1, this.history.length - this.index - 1);
168
+ }
169
+
170
+ // fire onchange event
171
+ this.onChange();
172
+ };
173
+
174
+ /**
175
+ * Clear history
176
+ */
177
+ History.prototype.clear = function () {
178
+ this.history = [];
179
+ this.index = -1;
180
+
181
+ // fire onchange event
182
+ this.onChange();
183
+ };
184
+
185
+ /**
186
+ * Check if there is an action available for undo
187
+ * @return {Boolean} canUndo
188
+ */
189
+ History.prototype.canUndo = function () {
190
+ return (this.index >= 0);
191
+ };
192
+
193
+ /**
194
+ * Check if there is an action available for redo
195
+ * @return {Boolean} canRedo
196
+ */
197
+ History.prototype.canRedo = function () {
198
+ return (this.index < this.history.length - 1);
199
+ };
200
+
201
+ /**
202
+ * Undo the last action
203
+ */
204
+ History.prototype.undo = function () {
205
+ if (this.canUndo()) {
206
+ var obj = this.history[this.index];
207
+ if (obj) {
208
+ var action = this.actions[obj.action];
209
+ if (action && action.undo) {
210
+ action.undo(obj.params);
211
+ if (obj.params.oldSelection) {
212
+ this.editor.setSelection(obj.params.oldSelection);
213
+ }
214
+ }
215
+ else {
216
+ console.error(new Error('unknown action "' + obj.action + '"'));
217
+ }
218
+ }
219
+ this.index--;
220
+
221
+ // fire onchange event
222
+ this.onChange();
223
+ }
224
+ };
225
+
226
+ /**
227
+ * Redo the last action
228
+ */
229
+ History.prototype.redo = function () {
230
+ if (this.canRedo()) {
231
+ this.index++;
232
+
233
+ var obj = this.history[this.index];
234
+ if (obj) {
235
+ var action = this.actions[obj.action];
236
+ if (action && action.redo) {
237
+ action.redo(obj.params);
238
+ if (obj.params.newSelection) {
239
+ this.editor.setSelection(obj.params.newSelection);
240
+ }
241
+ }
242
+ else {
243
+ console.error(new Error('unknown action "' + obj.action + '"'));
244
+ }
245
+ }
246
+
247
+ // fire onchange event
248
+ this.onChange();
249
+ }
250
+ };
251
+
252
+ module.exports = History;
@@ -0,0 +1,371 @@
1
+ var Ajv;
2
+ try {
3
+ Ajv = require('ajv');
4
+ }
5
+ catch (err) {
6
+ // no problem... when we need Ajv we will throw a neat exception
7
+ }
8
+
9
+ var treemode = require('./treemode');
10
+ var textmode = require('./textmode');
11
+ var util = require('./util');
12
+
13
+ /**
14
+ * @constructor JSONEditor
15
+ * @param {Element} container Container element
16
+ * @param {Object} [options] Object with options. available options:
17
+ * {String} mode Editor mode. Available values:
18
+ * 'tree' (default), 'view',
19
+ * 'form', 'text', and 'code'.
20
+ * {function} onChange Callback method, triggered
21
+ * on change of contents
22
+ * {function} onError Callback method, triggered
23
+ * when an error occurs
24
+ * {Boolean} search Enable search box.
25
+ * True by default
26
+ * Only applicable for modes
27
+ * 'tree', 'view', and 'form'
28
+ * {Boolean} history Enable history (undo/redo).
29
+ * True by default
30
+ * Only applicable for modes
31
+ * 'tree', 'view', and 'form'
32
+ * {String} name Field name for the root node.
33
+ * Only applicable for modes
34
+ * 'tree', 'view', and 'form'
35
+ * {Number} indentation Number of indentation
36
+ * spaces. 4 by default.
37
+ * Only applicable for
38
+ * modes 'text' and 'code'
39
+ * {boolean} escapeUnicode If true, unicode
40
+ * characters are escaped.
41
+ * false by default.
42
+ * @param {Object | undefined} json JSON object
43
+ */
44
+ function JSONEditor (container, options, json) {
45
+ if (!(this instanceof JSONEditor)) {
46
+ throw new Error('JSONEditor constructor called without "new".');
47
+ }
48
+
49
+ // check for unsupported browser (IE8 and older)
50
+ var ieVersion = util.getInternetExplorerVersion();
51
+ if (ieVersion != -1 && ieVersion < 9) {
52
+ throw new Error('Unsupported browser, IE9 or newer required. ' +
53
+ 'Please install the newest version of your browser.');
54
+ }
55
+
56
+ if (options) {
57
+ // check for deprecated options
58
+ if (options.error) {
59
+ console.warn('Option "error" has been renamed to "onError"');
60
+ options.onError = options.error;
61
+ delete options.error;
62
+ }
63
+ if (options.change) {
64
+ console.warn('Option "change" has been renamed to "onChange"');
65
+ options.onChange = options.change;
66
+ delete options.change;
67
+ }
68
+ if (options.editable) {
69
+ console.warn('Option "editable" has been renamed to "onEditable"');
70
+ options.onEditable = options.editable;
71
+ delete options.editable;
72
+ }
73
+
74
+ // validate options
75
+ if (options) {
76
+ var VALID_OPTIONS = [
77
+ 'ace', 'theme',
78
+ 'ajv', 'schema',
79
+ 'onChange', 'onEditable', 'onError', 'onModeChange',
80
+ 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation'
81
+ ];
82
+
83
+ Object.keys(options).forEach(function (option) {
84
+ if (VALID_OPTIONS.indexOf(option) === -1) {
85
+ console.warn('Unknown option "' + option + '". This option will be ignored');
86
+ }
87
+ });
88
+ }
89
+ }
90
+
91
+ if (arguments.length) {
92
+ this._create(container, options, json);
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Configuration for all registered modes. Example:
98
+ * {
99
+ * tree: {
100
+ * mixin: TreeEditor,
101
+ * data: 'json'
102
+ * },
103
+ * text: {
104
+ * mixin: TextEditor,
105
+ * data: 'text'
106
+ * }
107
+ * }
108
+ *
109
+ * @type { Object.<String, {mixin: Object, data: String} > }
110
+ */
111
+ JSONEditor.modes = {};
112
+
113
+ // debounce interval for JSON schema vaidation in milliseconds
114
+ JSONEditor.prototype.DEBOUNCE_INTERVAL = 150;
115
+
116
+ /**
117
+ * Create the JSONEditor
118
+ * @param {Element} container Container element
119
+ * @param {Object} [options] See description in constructor
120
+ * @param {Object | undefined} json JSON object
121
+ * @private
122
+ */
123
+ JSONEditor.prototype._create = function (container, options, json) {
124
+ this.container = container;
125
+ this.options = options || {};
126
+ this.json = json || {};
127
+
128
+ var mode = this.options.mode || 'tree';
129
+ this.setMode(mode);
130
+ };
131
+
132
+ /**
133
+ * Detach the editor from the DOM
134
+ * @private
135
+ */
136
+ JSONEditor.prototype._delete = function () {};
137
+
138
+ /**
139
+ * Set JSON object in editor
140
+ * @param {Object | undefined} json JSON data
141
+ */
142
+ JSONEditor.prototype.set = function (json) {
143
+ this.json = json;
144
+ };
145
+
146
+ /**
147
+ * Get JSON from the editor
148
+ * @returns {Object} json
149
+ */
150
+ JSONEditor.prototype.get = function () {
151
+ return this.json;
152
+ };
153
+
154
+ /**
155
+ * Set string containing JSON for the editor
156
+ * @param {String | undefined} jsonText
157
+ */
158
+ JSONEditor.prototype.setText = function (jsonText) {
159
+ this.json = util.parse(jsonText);
160
+ };
161
+
162
+ /**
163
+ * Get stringified JSON contents from the editor
164
+ * @returns {String} jsonText
165
+ */
166
+ JSONEditor.prototype.getText = function () {
167
+ return JSON.stringify(this.json);
168
+ };
169
+
170
+ /**
171
+ * Set a field name for the root node.
172
+ * @param {String | undefined} name
173
+ */
174
+ JSONEditor.prototype.setName = function (name) {
175
+ if (!this.options) {
176
+ this.options = {};
177
+ }
178
+ this.options.name = name;
179
+ };
180
+
181
+ /**
182
+ * Get the field name for the root node.
183
+ * @return {String | undefined} name
184
+ */
185
+ JSONEditor.prototype.getName = function () {
186
+ return this.options && this.options.name;
187
+ };
188
+
189
+ /**
190
+ * Change the mode of the editor.
191
+ * JSONEditor will be extended with all methods needed for the chosen mode.
192
+ * @param {String} mode Available modes: 'tree' (default), 'view', 'form',
193
+ * 'text', and 'code'.
194
+ */
195
+ JSONEditor.prototype.setMode = function (mode) {
196
+ var container = this.container;
197
+ var options = util.extend({}, this.options);
198
+ var oldMode = options.mode;
199
+ var data;
200
+ var name;
201
+
202
+ options.mode = mode;
203
+ var config = JSONEditor.modes[mode];
204
+ if (config) {
205
+ try {
206
+ var asText = (config.data == 'text');
207
+ name = this.getName();
208
+ data = this[asText ? 'getText' : 'get'](); // get text or json
209
+
210
+ this._delete();
211
+ util.clear(this);
212
+ util.extend(this, config.mixin);
213
+ this.create(container, options);
214
+
215
+ this.setName(name);
216
+ this[asText ? 'setText' : 'set'](data); // set text or json
217
+
218
+ if (typeof config.load === 'function') {
219
+ try {
220
+ config.load.call(this);
221
+ }
222
+ catch (err) {
223
+ console.error(err);
224
+ }
225
+ }
226
+
227
+ if (typeof options.onModeChange === 'function' && mode !== oldMode) {
228
+ try {
229
+ options.onModeChange(mode, oldMode);
230
+ }
231
+ catch (err) {
232
+ console.error(err);
233
+ }
234
+ }
235
+ }
236
+ catch (err) {
237
+ this._onError(err);
238
+ }
239
+ }
240
+ else {
241
+ throw new Error('Unknown mode "' + options.mode + '"');
242
+ }
243
+ };
244
+
245
+ /**
246
+ * Get the current mode
247
+ * @return {string}
248
+ */
249
+ JSONEditor.prototype.getMode = function () {
250
+ return this.options.mode;
251
+ };
252
+
253
+ /**
254
+ * Throw an error. If an error callback is configured in options.error, this
255
+ * callback will be invoked. Else, a regular error is thrown.
256
+ * @param {Error} err
257
+ * @private
258
+ */
259
+ JSONEditor.prototype._onError = function(err) {
260
+ if (this.options && typeof this.options.onError === 'function') {
261
+ this.options.onError(err);
262
+ }
263
+ else {
264
+ throw err;
265
+ }
266
+ };
267
+
268
+ /**
269
+ * Set a JSON schema for validation of the JSON object.
270
+ * To remove the schema, call JSONEditor.setSchema(null)
271
+ * @param {Object | null} schema
272
+ */
273
+ JSONEditor.prototype.setSchema = function (schema) {
274
+ // compile a JSON schema validator if a JSON schema is provided
275
+ if (schema) {
276
+ var ajv;
277
+ try {
278
+ // grab ajv from options if provided, else create a new instance
279
+ ajv = this.options.ajv || Ajv({ allErrors: true, verbose: true });
280
+
281
+ }
282
+ catch (err) {
283
+ console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');
284
+ }
285
+
286
+ if (ajv) {
287
+ this.validateSchema = ajv.compile(schema);
288
+
289
+ // add schema to the options, so that when switching to an other mode,
290
+ // the set schema is not lost
291
+ this.options.schema = schema;
292
+
293
+ // validate now
294
+ this.validate();
295
+ }
296
+ }
297
+ else {
298
+ // remove current schema
299
+ this.validateSchema = null;
300
+ this.options.schema = null;
301
+ this.validate(); // to clear current error messages
302
+ }
303
+ };
304
+
305
+ /**
306
+ * Validate current JSON object against the configured JSON schema
307
+ * Throws an exception when no JSON schema is configured
308
+ */
309
+ JSONEditor.prototype.validate = function () {
310
+ // must be implemented by treemode and textmode
311
+ };
312
+
313
+ /**
314
+ * Register a plugin with one ore multiple modes for the JSON Editor.
315
+ *
316
+ * A mode is described as an object with properties:
317
+ *
318
+ * - `mode: String` The name of the mode.
319
+ * - `mixin: Object` An object containing the mixin functions which
320
+ * will be added to the JSONEditor. Must contain functions
321
+ * create, get, getText, set, and setText. May have
322
+ * additional functions.
323
+ * When the JSONEditor switches to a mixin, all mixin
324
+ * functions are added to the JSONEditor, and then
325
+ * the function `create(container, options)` is executed.
326
+ * - `data: 'text' | 'json'` The type of data that will be used to load the mixin.
327
+ * - `[load: function]` An optional function called after the mixin
328
+ * has been loaded.
329
+ *
330
+ * @param {Object | Array} mode A mode object or an array with multiple mode objects.
331
+ */
332
+ JSONEditor.registerMode = function (mode) {
333
+ var i, prop;
334
+
335
+ if (util.isArray(mode)) {
336
+ // multiple modes
337
+ for (i = 0; i < mode.length; i++) {
338
+ JSONEditor.registerMode(mode[i]);
339
+ }
340
+ }
341
+ else {
342
+ // validate the new mode
343
+ if (!('mode' in mode)) throw new Error('Property "mode" missing');
344
+ if (!('mixin' in mode)) throw new Error('Property "mixin" missing');
345
+ if (!('data' in mode)) throw new Error('Property "data" missing');
346
+ var name = mode.mode;
347
+ if (name in JSONEditor.modes) {
348
+ throw new Error('Mode "' + name + '" already registered');
349
+ }
350
+
351
+ // validate the mixin
352
+ if (typeof mode.mixin.create !== 'function') {
353
+ throw new Error('Required function "create" missing on mixin');
354
+ }
355
+ var reserved = ['setMode', 'registerMode', 'modes'];
356
+ for (i = 0; i < reserved.length; i++) {
357
+ prop = reserved[i];
358
+ if (prop in mode.mixin) {
359
+ throw new Error('Reserved property "' + prop + '" not allowed in mixin');
360
+ }
361
+ }
362
+
363
+ JSONEditor.modes[name] = mode;
364
+ }
365
+ };
366
+
367
+ // register tree and text modes
368
+ JSONEditor.registerMode(treemode);
369
+ JSONEditor.registerMode(textmode);
370
+
371
+ module.exports = JSONEditor;