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,180 @@
1
+ var _ = require('../util')
2
+ var Cache = require('../cache')
3
+ var cache = new Cache(1000)
4
+ var argRE = /^[^\{\?]+$|^'[^']*'$|^"[^"]*"$/
5
+ var filterTokenRE = /[^\s'"]+|'[^']*'|"[^"]*"/g
6
+ var reservedArgRE = /^in$|^-?\d+/
7
+
8
+ /**
9
+ * Parser state
10
+ */
11
+
12
+ var str
13
+ var c, i, l
14
+ var inSingle
15
+ var inDouble
16
+ var curly
17
+ var square
18
+ var paren
19
+ var begin
20
+ var argIndex
21
+ var dirs
22
+ var dir
23
+ var lastFilterIndex
24
+ var arg
25
+
26
+ /**
27
+ * Push a directive object into the result Array
28
+ */
29
+
30
+ function pushDir () {
31
+ dir.raw = str.slice(begin, i).trim()
32
+ if (dir.expression === undefined) {
33
+ dir.expression = str.slice(argIndex, i).trim()
34
+ } else if (lastFilterIndex !== begin) {
35
+ pushFilter()
36
+ }
37
+ if (i === 0 || dir.expression) {
38
+ dirs.push(dir)
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Push a filter to the current directive object
44
+ */
45
+
46
+ function pushFilter () {
47
+ var exp = str.slice(lastFilterIndex, i).trim()
48
+ var filter
49
+ if (exp) {
50
+ filter = {}
51
+ var tokens = exp.match(filterTokenRE)
52
+ filter.name = tokens[0]
53
+ if (tokens.length > 1) {
54
+ filter.args = tokens.slice(1).map(processFilterArg)
55
+ }
56
+ }
57
+ if (filter) {
58
+ (dir.filters = dir.filters || []).push(filter)
59
+ }
60
+ lastFilterIndex = i + 1
61
+ }
62
+
63
+ /**
64
+ * Check if an argument is dynamic and strip quotes.
65
+ *
66
+ * @param {String} arg
67
+ * @return {Object}
68
+ */
69
+
70
+ function processFilterArg (arg) {
71
+ var stripped = reservedArgRE.test(arg)
72
+ ? arg
73
+ : _.stripQuotes(arg)
74
+ var dynamic = stripped === false
75
+ return {
76
+ value: dynamic ? arg : stripped,
77
+ dynamic: dynamic
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Parse a directive string into an Array of AST-like
83
+ * objects representing directives.
84
+ *
85
+ * Example:
86
+ *
87
+ * "click: a = a + 1 | uppercase" will yield:
88
+ * {
89
+ * arg: 'click',
90
+ * expression: 'a = a + 1',
91
+ * filters: [
92
+ * { name: 'uppercase', args: null }
93
+ * ]
94
+ * }
95
+ *
96
+ * @param {String} str
97
+ * @return {Array<Object>}
98
+ */
99
+
100
+ exports.parse = function (s) {
101
+
102
+ var hit = cache.get(s)
103
+ if (hit) {
104
+ return hit
105
+ }
106
+
107
+ // reset parser state
108
+ str = s
109
+ inSingle = inDouble = false
110
+ curly = square = paren = begin = argIndex = 0
111
+ lastFilterIndex = 0
112
+ dirs = []
113
+ dir = {}
114
+ arg = null
115
+
116
+ for (i = 0, l = str.length; i < l; i++) {
117
+ c = str.charCodeAt(i)
118
+ if (inSingle) {
119
+ // check single quote
120
+ if (c === 0x27) inSingle = !inSingle
121
+ } else if (inDouble) {
122
+ // check double quote
123
+ if (c === 0x22) inDouble = !inDouble
124
+ } else if (
125
+ c === 0x2C && // comma
126
+ !paren && !curly && !square
127
+ ) {
128
+ // reached the end of a directive
129
+ pushDir()
130
+ // reset & skip the comma
131
+ dir = {}
132
+ begin = argIndex = lastFilterIndex = i + 1
133
+ } else if (
134
+ c === 0x3A && // colon
135
+ !dir.expression &&
136
+ !dir.arg
137
+ ) {
138
+ // argument
139
+ arg = str.slice(begin, i).trim()
140
+ // test for valid argument here
141
+ // since we may have caught stuff like first half of
142
+ // an object literal or a ternary expression.
143
+ if (argRE.test(arg)) {
144
+ argIndex = i + 1
145
+ dir.arg = _.stripQuotes(arg) || arg
146
+ }
147
+ } else if (
148
+ c === 0x7C && // pipe
149
+ str.charCodeAt(i + 1) !== 0x7C &&
150
+ str.charCodeAt(i - 1) !== 0x7C
151
+ ) {
152
+ if (dir.expression === undefined) {
153
+ // first filter, end of expression
154
+ lastFilterIndex = i + 1
155
+ dir.expression = str.slice(argIndex, i).trim()
156
+ } else {
157
+ // already has filter
158
+ pushFilter()
159
+ }
160
+ } else {
161
+ switch (c) {
162
+ case 0x22: inDouble = true; break // "
163
+ case 0x27: inSingle = true; break // '
164
+ case 0x28: paren++; break // (
165
+ case 0x29: paren--; break // )
166
+ case 0x5B: square++; break // [
167
+ case 0x5D: square--; break // ]
168
+ case 0x7B: curly++; break // {
169
+ case 0x7D: curly--; break // }
170
+ }
171
+ }
172
+ }
173
+
174
+ if (i === 0 || begin !== i) {
175
+ pushDir()
176
+ }
177
+
178
+ cache.put(s, dirs)
179
+ return dirs
180
+ }
@@ -0,0 +1,264 @@
1
+ var _ = require('../util')
2
+ var Path = require('./path')
3
+ var Cache = require('../cache')
4
+ var expressionCache = new Cache(1000)
5
+
6
+ var allowedKeywords =
7
+ 'Math,Date,this,true,false,null,undefined,Infinity,NaN,' +
8
+ 'isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,' +
9
+ 'encodeURIComponent,parseInt,parseFloat'
10
+ var allowedKeywordsRE =
11
+ new RegExp('^(' + allowedKeywords.replace(/,/g, '\\b|') + '\\b)')
12
+
13
+ // keywords that don't make sense inside expressions
14
+ var improperKeywords =
15
+ 'break,case,class,catch,const,continue,debugger,default,' +
16
+ 'delete,do,else,export,extends,finally,for,function,if,' +
17
+ 'import,in,instanceof,let,return,super,switch,throw,try,' +
18
+ 'var,while,with,yield,enum,await,implements,package,' +
19
+ 'proctected,static,interface,private,public'
20
+ var improperKeywordsRE =
21
+ new RegExp('^(' + improperKeywords.replace(/,/g, '\\b|') + '\\b)')
22
+
23
+ var wsRE = /\s/g
24
+ var newlineRE = /\n/g
25
+ var saveRE = /[\{,]\s*[\w\$_]+\s*:|('[^']*'|"[^"]*")|new |typeof |void /g
26
+ var restoreRE = /"(\d+)"/g
27
+ var pathTestRE = /^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/
28
+ var pathReplaceRE = /[^\w$\.]([A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\])*)/g
29
+ var booleanLiteralRE = /^(true|false)$/
30
+
31
+ /**
32
+ * Save / Rewrite / Restore
33
+ *
34
+ * When rewriting paths found in an expression, it is
35
+ * possible for the same letter sequences to be found in
36
+ * strings and Object literal property keys. Therefore we
37
+ * remove and store these parts in a temporary array, and
38
+ * restore them after the path rewrite.
39
+ */
40
+
41
+ var saved = []
42
+
43
+ /**
44
+ * Save replacer
45
+ *
46
+ * The save regex can match two possible cases:
47
+ * 1. An opening object literal
48
+ * 2. A string
49
+ * If matched as a plain string, we need to escape its
50
+ * newlines, since the string needs to be preserved when
51
+ * generating the function body.
52
+ *
53
+ * @param {String} str
54
+ * @param {String} isString - str if matched as a string
55
+ * @return {String} - placeholder with index
56
+ */
57
+
58
+ function save (str, isString) {
59
+ var i = saved.length
60
+ saved[i] = isString
61
+ ? str.replace(newlineRE, '\\n')
62
+ : str
63
+ return '"' + i + '"'
64
+ }
65
+
66
+ /**
67
+ * Path rewrite replacer
68
+ *
69
+ * @param {String} raw
70
+ * @return {String}
71
+ */
72
+
73
+ function rewrite (raw) {
74
+ var c = raw.charAt(0)
75
+ var path = raw.slice(1)
76
+ if (allowedKeywordsRE.test(path)) {
77
+ return raw
78
+ } else {
79
+ path = path.indexOf('"') > -1
80
+ ? path.replace(restoreRE, restore)
81
+ : path
82
+ return c + 'scope.' + path
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Restore replacer
88
+ *
89
+ * @param {String} str
90
+ * @param {String} i - matched save index
91
+ * @return {String}
92
+ */
93
+
94
+ function restore (str, i) {
95
+ return saved[i]
96
+ }
97
+
98
+ /**
99
+ * Rewrite an expression, prefixing all path accessors with
100
+ * `scope.` and generate getter/setter functions.
101
+ *
102
+ * @param {String} exp
103
+ * @param {Boolean} needSet
104
+ * @return {Function}
105
+ */
106
+
107
+ function compileExpFns (exp, needSet) {
108
+ if (improperKeywordsRE.test(exp)) {
109
+ process.env.NODE_ENV !== 'production' && _.warn(
110
+ 'Avoid using reserved keywords in expression: ' + exp
111
+ )
112
+ }
113
+ // reset state
114
+ saved.length = 0
115
+ // save strings and object literal keys
116
+ var body = exp
117
+ .replace(saveRE, save)
118
+ .replace(wsRE, '')
119
+ // rewrite all paths
120
+ // pad 1 space here becaue the regex matches 1 extra char
121
+ body = (' ' + body)
122
+ .replace(pathReplaceRE, rewrite)
123
+ .replace(restoreRE, restore)
124
+ var getter = makeGetter(body)
125
+ if (getter) {
126
+ return {
127
+ get: getter,
128
+ body: body,
129
+ set: needSet
130
+ ? makeSetter(body)
131
+ : null
132
+ }
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Compile getter setters for a simple path.
138
+ *
139
+ * @param {String} exp
140
+ * @return {Function}
141
+ */
142
+
143
+ function compilePathFns (exp) {
144
+ var getter, path
145
+ if (exp.indexOf('[') < 0) {
146
+ // really simple path
147
+ path = exp.split('.')
148
+ path.raw = exp
149
+ getter = Path.compileGetter(path)
150
+ } else {
151
+ // do the real parsing
152
+ path = Path.parse(exp)
153
+ getter = path.get
154
+ }
155
+ return {
156
+ get: getter,
157
+ // always generate setter for simple paths
158
+ set: function (obj, val) {
159
+ Path.set(obj, path, val)
160
+ }
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Build a getter function. Requires eval.
166
+ *
167
+ * We isolate the try/catch so it doesn't affect the
168
+ * optimization of the parse function when it is not called.
169
+ *
170
+ * @param {String} body
171
+ * @return {Function|undefined}
172
+ */
173
+
174
+ function makeGetter (body) {
175
+ try {
176
+ return new Function('scope', 'return ' + body + ';')
177
+ } catch (e) {
178
+ process.env.NODE_ENV !== 'production' && _.warn(
179
+ 'Invalid expression. ' +
180
+ 'Generated function body: ' + body
181
+ )
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Build a setter function.
187
+ *
188
+ * This is only needed in rare situations like "a[b]" where
189
+ * a settable path requires dynamic evaluation.
190
+ *
191
+ * This setter function may throw error when called if the
192
+ * expression body is not a valid left-hand expression in
193
+ * assignment.
194
+ *
195
+ * @param {String} body
196
+ * @return {Function|undefined}
197
+ */
198
+
199
+ function makeSetter (body) {
200
+ try {
201
+ return new Function('scope', 'value', body + '=value;')
202
+ } catch (e) {
203
+ process.env.NODE_ENV !== 'production' && _.warn(
204
+ 'Invalid setter function body: ' + body
205
+ )
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Check for setter existence on a cache hit.
211
+ *
212
+ * @param {Function} hit
213
+ */
214
+
215
+ function checkSetter (hit) {
216
+ if (!hit.set) {
217
+ hit.set = makeSetter(hit.body)
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Parse an expression into re-written getter/setters.
223
+ *
224
+ * @param {String} exp
225
+ * @param {Boolean} needSet
226
+ * @return {Function}
227
+ */
228
+
229
+ exports.parse = function (exp, needSet) {
230
+ exp = exp.trim()
231
+ // try cache
232
+ var hit = expressionCache.get(exp)
233
+ if (hit) {
234
+ if (needSet) {
235
+ checkSetter(hit)
236
+ }
237
+ return hit
238
+ }
239
+ // we do a simple path check to optimize for them.
240
+ // the check fails valid paths with unusal whitespaces,
241
+ // but that's too rare and we don't care.
242
+ // also skip boolean literals and paths that start with
243
+ // global "Math"
244
+ var res = exports.isSimplePath(exp)
245
+ ? compilePathFns(exp)
246
+ : compileExpFns(exp, needSet)
247
+ expressionCache.put(exp, res)
248
+ return res
249
+ }
250
+
251
+ /**
252
+ * Check if an expression is a simple path.
253
+ *
254
+ * @param {String} exp
255
+ * @return {Boolean}
256
+ */
257
+
258
+ exports.isSimplePath = function (exp) {
259
+ return pathTestRE.test(exp) &&
260
+ // don't treat true/false as paths
261
+ !booleanLiteralRE.test(exp) &&
262
+ // Math constants e.g. Math.PI, Math.E etc.
263
+ exp.slice(0, 5) !== 'Math.'
264
+ }
@@ -0,0 +1,348 @@
1
+ var _ = require('../util')
2
+ var Cache = require('../cache')
3
+ var pathCache = new Cache(1000)
4
+ var identRE = exports.identRE = /^[$_a-zA-Z]+[\w$]*$/
5
+
6
+ // actions
7
+ var APPEND = 0
8
+ var PUSH = 1
9
+
10
+ // states
11
+ var BEFORE_PATH = 0
12
+ var IN_PATH = 1
13
+ var BEFORE_IDENT = 2
14
+ var IN_IDENT = 3
15
+ var BEFORE_ELEMENT = 4
16
+ var AFTER_ZERO = 5
17
+ var IN_INDEX = 6
18
+ var IN_SINGLE_QUOTE = 7
19
+ var IN_DOUBLE_QUOTE = 8
20
+ var IN_SUB_PATH = 9
21
+ var AFTER_ELEMENT = 10
22
+ var AFTER_PATH = 11
23
+ var ERROR = 12
24
+
25
+ var pathStateMachine = []
26
+
27
+ pathStateMachine[BEFORE_PATH] = {
28
+ 'ws': [BEFORE_PATH],
29
+ 'ident': [IN_IDENT, APPEND],
30
+ '[': [BEFORE_ELEMENT],
31
+ 'eof': [AFTER_PATH]
32
+ }
33
+
34
+ pathStateMachine[IN_PATH] = {
35
+ 'ws': [IN_PATH],
36
+ '.': [BEFORE_IDENT],
37
+ '[': [BEFORE_ELEMENT],
38
+ 'eof': [AFTER_PATH]
39
+ }
40
+
41
+ pathStateMachine[BEFORE_IDENT] = {
42
+ 'ws': [BEFORE_IDENT],
43
+ 'ident': [IN_IDENT, APPEND]
44
+ }
45
+
46
+ pathStateMachine[IN_IDENT] = {
47
+ 'ident': [IN_IDENT, APPEND],
48
+ '0': [IN_IDENT, APPEND],
49
+ 'number': [IN_IDENT, APPEND],
50
+ 'ws': [IN_PATH, PUSH],
51
+ '.': [BEFORE_IDENT, PUSH],
52
+ '[': [BEFORE_ELEMENT, PUSH],
53
+ 'eof': [AFTER_PATH, PUSH]
54
+ }
55
+
56
+ pathStateMachine[BEFORE_ELEMENT] = {
57
+ 'ws': [BEFORE_ELEMENT],
58
+ '0': [AFTER_ZERO, APPEND],
59
+ 'number': [IN_INDEX, APPEND],
60
+ "'": [IN_SINGLE_QUOTE, APPEND, ''],
61
+ '"': [IN_DOUBLE_QUOTE, APPEND, ''],
62
+ 'ident': [IN_SUB_PATH, APPEND, '*']
63
+ }
64
+
65
+ pathStateMachine[AFTER_ZERO] = {
66
+ 'ws': [AFTER_ELEMENT, PUSH],
67
+ ']': [IN_PATH, PUSH]
68
+ }
69
+
70
+ pathStateMachine[IN_INDEX] = {
71
+ '0': [IN_INDEX, APPEND],
72
+ 'number': [IN_INDEX, APPEND],
73
+ 'ws': [AFTER_ELEMENT],
74
+ ']': [IN_PATH, PUSH]
75
+ }
76
+
77
+ pathStateMachine[IN_SINGLE_QUOTE] = {
78
+ "'": [AFTER_ELEMENT],
79
+ 'eof': ERROR,
80
+ 'else': [IN_SINGLE_QUOTE, APPEND]
81
+ }
82
+
83
+ pathStateMachine[IN_DOUBLE_QUOTE] = {
84
+ '"': [AFTER_ELEMENT],
85
+ 'eof': ERROR,
86
+ 'else': [IN_DOUBLE_QUOTE, APPEND]
87
+ }
88
+
89
+ pathStateMachine[IN_SUB_PATH] = {
90
+ 'ident': [IN_SUB_PATH, APPEND],
91
+ '0': [IN_SUB_PATH, APPEND],
92
+ 'number': [IN_SUB_PATH, APPEND],
93
+ 'ws': [AFTER_ELEMENT],
94
+ ']': [IN_PATH, PUSH]
95
+ }
96
+
97
+ pathStateMachine[AFTER_ELEMENT] = {
98
+ 'ws': [AFTER_ELEMENT],
99
+ ']': [IN_PATH, PUSH]
100
+ }
101
+
102
+ /**
103
+ * Determine the type of a character in a keypath.
104
+ *
105
+ * @param {Char} ch
106
+ * @return {String} type
107
+ */
108
+
109
+ function getPathCharType (ch) {
110
+ if (ch === undefined) {
111
+ return 'eof'
112
+ }
113
+
114
+ var code = ch.charCodeAt(0)
115
+
116
+ switch (code) {
117
+ case 0x5B: // [
118
+ case 0x5D: // ]
119
+ case 0x2E: // .
120
+ case 0x22: // "
121
+ case 0x27: // '
122
+ case 0x30: // 0
123
+ return ch
124
+
125
+ case 0x5F: // _
126
+ case 0x24: // $
127
+ return 'ident'
128
+
129
+ case 0x20: // Space
130
+ case 0x09: // Tab
131
+ case 0x0A: // Newline
132
+ case 0x0D: // Return
133
+ case 0xA0: // No-break space
134
+ case 0xFEFF: // Byte Order Mark
135
+ case 0x2028: // Line Separator
136
+ case 0x2029: // Paragraph Separator
137
+ return 'ws'
138
+ }
139
+
140
+ // a-z, A-Z
141
+ if (
142
+ (code >= 0x61 && code <= 0x7A) ||
143
+ (code >= 0x41 && code <= 0x5A)
144
+ ) {
145
+ return 'ident'
146
+ }
147
+
148
+ // 1-9
149
+ if (code >= 0x31 && code <= 0x39) {
150
+ return 'number'
151
+ }
152
+
153
+ return 'else'
154
+ }
155
+
156
+ /**
157
+ * Parse a string path into an array of segments
158
+ * Todo implement cache
159
+ *
160
+ * @param {String} path
161
+ * @return {Array|undefined}
162
+ */
163
+
164
+ function parsePath (path) {
165
+ var keys = []
166
+ var index = -1
167
+ var mode = BEFORE_PATH
168
+ var c, newChar, key, type, transition, action, typeMap
169
+
170
+ var actions = []
171
+ actions[PUSH] = function () {
172
+ if (key === undefined) {
173
+ return
174
+ }
175
+ keys.push(key)
176
+ key = undefined
177
+ }
178
+ actions[APPEND] = function () {
179
+ if (key === undefined) {
180
+ key = newChar
181
+ } else {
182
+ key += newChar
183
+ }
184
+ }
185
+
186
+ function maybeUnescapeQuote () {
187
+ var nextChar = path[index + 1]
188
+ if ((mode === IN_SINGLE_QUOTE && nextChar === "'") ||
189
+ (mode === IN_DOUBLE_QUOTE && nextChar === '"')) {
190
+ index++
191
+ newChar = nextChar
192
+ actions[APPEND]()
193
+ return true
194
+ }
195
+ }
196
+
197
+ while (mode != null) {
198
+ index++
199
+ c = path[index]
200
+
201
+ if (c === '\\' && maybeUnescapeQuote()) {
202
+ continue
203
+ }
204
+
205
+ type = getPathCharType(c)
206
+ typeMap = pathStateMachine[mode]
207
+ transition = typeMap[type] || typeMap['else'] || ERROR
208
+
209
+ if (transition === ERROR) {
210
+ return // parse error
211
+ }
212
+
213
+ mode = transition[0]
214
+ action = actions[transition[1]]
215
+ if (action) {
216
+ newChar = transition[2]
217
+ newChar = newChar === undefined
218
+ ? c
219
+ : newChar === '*'
220
+ ? newChar + c
221
+ : newChar
222
+ action()
223
+ }
224
+
225
+ if (mode === AFTER_PATH) {
226
+ keys.raw = path
227
+ return keys
228
+ }
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Format a accessor segment based on its type.
234
+ *
235
+ * @param {String} key
236
+ * @return {Boolean}
237
+ */
238
+
239
+ function formatAccessor (key) {
240
+ if (identRE.test(key)) { // identifier
241
+ return '.' + key
242
+ } else if (+key === key >>> 0) { // bracket index
243
+ return '[' + key + ']'
244
+ } else if (key.charAt(0) === '*') {
245
+ return '[o' + formatAccessor(key.slice(1)) + ']'
246
+ } else { // bracket string
247
+ return '["' + key.replace(/"/g, '\\"') + '"]'
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Compiles a getter function with a fixed path.
253
+ * The fixed path getter supresses errors.
254
+ *
255
+ * @param {Array} path
256
+ * @return {Function}
257
+ */
258
+
259
+ exports.compileGetter = function (path) {
260
+ var body = 'return o' + path.map(formatAccessor).join('')
261
+ return new Function('o', body)
262
+ }
263
+
264
+ /**
265
+ * External parse that check for a cache hit first
266
+ *
267
+ * @param {String} path
268
+ * @return {Array|undefined}
269
+ */
270
+
271
+ exports.parse = function (path) {
272
+ var hit = pathCache.get(path)
273
+ if (!hit) {
274
+ hit = parsePath(path)
275
+ if (hit) {
276
+ hit.get = exports.compileGetter(hit)
277
+ pathCache.put(path, hit)
278
+ }
279
+ }
280
+ return hit
281
+ }
282
+
283
+ /**
284
+ * Get from an object from a path string
285
+ *
286
+ * @param {Object} obj
287
+ * @param {String} path
288
+ */
289
+
290
+ exports.get = function (obj, path) {
291
+ path = exports.parse(path)
292
+ if (path) {
293
+ return path.get(obj)
294
+ }
295
+ }
296
+
297
+ /**
298
+ * Set on an object from a path
299
+ *
300
+ * @param {Object} obj
301
+ * @param {String | Array} path
302
+ * @param {*} val
303
+ */
304
+
305
+ exports.set = function (obj, path, val) {
306
+ var original = obj
307
+ if (typeof path === 'string') {
308
+ path = exports.parse(path)
309
+ }
310
+ if (!path || !_.isObject(obj)) {
311
+ return false
312
+ }
313
+ var last, key
314
+ for (var i = 0, l = path.length; i < l; i++) {
315
+ last = obj
316
+ key = path[i]
317
+ if (key.charAt(0) === '*') {
318
+ key = original[key.slice(1)]
319
+ }
320
+ if (i < l - 1) {
321
+ obj = obj[key]
322
+ if (!_.isObject(obj)) {
323
+ warnNonExistent(path)
324
+ obj = {}
325
+ last.$add(key, obj)
326
+ }
327
+ } else {
328
+ if (_.isArray(obj)) {
329
+ obj.$set(key, val)
330
+ } else if (key in obj) {
331
+ obj[key] = val
332
+ } else {
333
+ warnNonExistent(path)
334
+ obj.$add(key, val)
335
+ }
336
+ }
337
+ }
338
+ return true
339
+ }
340
+
341
+ function warnNonExistent (path) {
342
+ process.env.NODE_ENV !== 'production' && _.warn(
343
+ 'You are setting a non-existent path "' + path.raw + '" ' +
344
+ 'on a vm instance. Consider pre-initializing the property ' +
345
+ 'with the "data" option for more reliable reactivity ' +
346
+ 'and better performance.'
347
+ )
348
+ }