fluentd-ui 0.1.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.

Potentially problematic release.


This version of fluentd-ui might be problematic. Click here for more details.

Files changed (320) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +31 -0
  4. data/.rspec +1 -0
  5. data/ChangeLog +3 -0
  6. data/Gemfile +21 -0
  7. data/Gemfile.lock +247 -0
  8. data/Gemfile.production +3 -0
  9. data/README.md +53 -0
  10. data/Rakefile +8 -0
  11. data/app/assets/images/.keep +0 -0
  12. data/app/assets/javascripts/alert.js +51 -0
  13. data/app/assets/javascripts/application.js +22 -0
  14. data/app/assets/javascripts/nested_setting.js +41 -0
  15. data/app/assets/javascripts/setting_format.js +15 -0
  16. data/app/assets/javascripts/tutorial.js +58 -0
  17. data/app/assets/javascripts/vue/fluent_log.js +64 -0
  18. data/app/assets/javascripts/vue/in_tail_format.js +153 -0
  19. data/app/assets/javascripts/vue/treeview.js +97 -0
  20. data/app/assets/javascripts/vue_common.js +4 -0
  21. data/app/assets/stylesheets/application.css +18 -0
  22. data/app/assets/stylesheets/common.css.scss +152 -0
  23. data/app/controllers/api_controller.rb +37 -0
  24. data/app/controllers/application_controller.rb +110 -0
  25. data/app/controllers/concerns/.keep +0 -0
  26. data/app/controllers/fluentd/agents_controller.rb +35 -0
  27. data/app/controllers/fluentd/settings/in_syslog_controller.rb +34 -0
  28. data/app/controllers/fluentd/settings/in_tail_controller.rb +57 -0
  29. data/app/controllers/fluentd/settings/out_forward_controller.rb +42 -0
  30. data/app/controllers/fluentd/settings/out_mongo_controller.rb +36 -0
  31. data/app/controllers/fluentd/settings/out_s3_controller.rb +36 -0
  32. data/app/controllers/fluentd/settings/out_td_controller.rb +36 -0
  33. data/app/controllers/fluentd/settings_controller.rb +18 -0
  34. data/app/controllers/fluentd_controller.rb +62 -0
  35. data/app/controllers/misc_controller.rb +69 -0
  36. data/app/controllers/plugins_controller.rb +44 -0
  37. data/app/controllers/polling_controller.rb +20 -0
  38. data/app/controllers/sessions_controller.rb +45 -0
  39. data/app/controllers/tutorials_controller.rb +40 -0
  40. data/app/controllers/users_controller.rb +28 -0
  41. data/app/controllers/welcome_controller.rb +5 -0
  42. data/app/helpers/application_helper.rb +55 -0
  43. data/app/helpers/fluentd/settings_helper.rb +2 -0
  44. data/app/helpers/miscs_helper.rb +2 -0
  45. data/app/helpers/settings_helper.rb +43 -0
  46. data/app/mailers/.keep +0 -0
  47. data/app/models/.keep +0 -0
  48. data/app/models/concerns/.keep +0 -0
  49. data/app/models/fluentd.rb +178 -0
  50. data/app/models/fluentd/agent.rb +28 -0
  51. data/app/models/fluentd/agent/common.rb +76 -0
  52. data/app/models/fluentd/agent/configuration.rb +35 -0
  53. data/app/models/fluentd/agent/fluentd_gem.rb +104 -0
  54. data/app/models/fluentd/agent/local_common.rb +101 -0
  55. data/app/models/fluentd/agent/remote.rb +7 -0
  56. data/app/models/fluentd/agent/td_agent.rb +44 -0
  57. data/app/models/fluentd/api.rb +6 -0
  58. data/app/models/fluentd/api/http.rb +26 -0
  59. data/app/models/fluentd/setting.rb +4 -0
  60. data/app/models/fluentd/setting/common.rb +185 -0
  61. data/app/models/fluentd/setting/in_syslog.rb +16 -0
  62. data/app/models/fluentd/setting/in_tail.rb +107 -0
  63. data/app/models/fluentd/setting/out_forward.rb +70 -0
  64. data/app/models/fluentd/setting/out_mongo.rb +35 -0
  65. data/app/models/fluentd/setting/out_s3.rb +29 -0
  66. data/app/models/fluentd/setting/out_td.rb +26 -0
  67. data/app/models/plugin.rb +193 -0
  68. data/app/models/settings.rb +4 -0
  69. data/app/models/user.rb +52 -0
  70. data/app/views/fluentd/_form.html.haml +31 -0
  71. data/app/views/fluentd/edit.html.haml +3 -0
  72. data/app/views/fluentd/errors.html.haml +19 -0
  73. data/app/views/fluentd/log.html.haml +9 -0
  74. data/app/views/fluentd/new.html.haml +3 -0
  75. data/app/views/fluentd/settings/_form.html.haml +43 -0
  76. data/app/views/fluentd/settings/edit.html.haml +7 -0
  77. data/app/views/fluentd/settings/in_syslog/_form.html.haml +9 -0
  78. data/app/views/fluentd/settings/in_syslog/show.html.haml +6 -0
  79. data/app/views/fluentd/settings/in_tail/_form.html.haml +42 -0
  80. data/app/views/fluentd/settings/in_tail/after_file_choose.html.haml +19 -0
  81. data/app/views/fluentd/settings/in_tail/after_format.html.haml +10 -0
  82. data/app/views/fluentd/settings/in_tail/confirm.html.haml +13 -0
  83. data/app/views/fluentd/settings/in_tail/show.html.haml +5 -0
  84. data/app/views/fluentd/settings/out_forward/_form.html.haml +22 -0
  85. data/app/views/fluentd/settings/out_forward/show.html.haml +6 -0
  86. data/app/views/fluentd/settings/out_mongo/_form.html.haml +30 -0
  87. data/app/views/fluentd/settings/out_mongo/finish.html.haml +4 -0
  88. data/app/views/fluentd/settings/out_mongo/show.html.haml +6 -0
  89. data/app/views/fluentd/settings/out_s3/_form.html.haml +39 -0
  90. data/app/views/fluentd/settings/out_s3/show.html.haml +6 -0
  91. data/app/views/fluentd/settings/out_td/_form.html.haml +18 -0
  92. data/app/views/fluentd/settings/out_td/show.html.haml +6 -0
  93. data/app/views/fluentd/settings/show.html.haml +10 -0
  94. data/app/views/fluentd/settings/source_and_output.html.haml +45 -0
  95. data/app/views/fluentd/show.html.haml +60 -0
  96. data/app/views/layouts/application.html.erb +102 -0
  97. data/app/views/layouts/sign_in.html.erb +28 -0
  98. data/app/views/misc/information.html.haml +75 -0
  99. data/app/views/misc/update_fluentd_ui.html.haml +45 -0
  100. data/app/views/plugins/installed.html.haml +67 -0
  101. data/app/views/plugins/recommended.html.haml +59 -0
  102. data/app/views/plugins/updated.html.haml +29 -0
  103. data/app/views/sessions/new.html.haml +13 -0
  104. data/app/views/shared/_error.html.haml +3 -0
  105. data/app/views/shared/_flash.html.haml +10 -0
  106. data/app/views/shared/_fluentd_nav.html.haml +12 -0
  107. data/app/views/shared/_global_nav.html.erb +80 -0
  108. data/app/views/shared/_initial_setup.html.haml +13 -0
  109. data/app/views/shared/_modal.html.erb +25 -0
  110. data/app/views/shared/_setting_errors.html.haml +5 -0
  111. data/app/views/shared/vue/_fluent_log.html.erb +25 -0
  112. data/app/views/shared/vue/_in_tail_format.html.erb +53 -0
  113. data/app/views/shared/vue/_treeview.html.erb +30 -0
  114. data/app/views/tutorials/chapter1.html.erb +31 -0
  115. data/app/views/tutorials/chapter2.html.haml +12 -0
  116. data/app/views/tutorials/chapter3.html.haml +12 -0
  117. data/app/views/tutorials/chapter4.html.haml +12 -0
  118. data/app/views/tutorials/chapter5.html.haml +10 -0
  119. data/app/views/tutorials/index.html.haml +26 -0
  120. data/app/views/users/show.html.haml +22 -0
  121. data/app/workers/all_plugin_check_update.rb +14 -0
  122. data/app/workers/fluentd_ui_restart.rb +41 -0
  123. data/app/workers/fluentd_ui_update_check.rb +15 -0
  124. data/app/workers/gem_installer.rb +17 -0
  125. data/app/workers/gem_uninstaller.rb +15 -0
  126. data/app/workers/gem_update_check.rb +10 -0
  127. data/bin/bundle +3 -0
  128. data/bin/fluentd-ui +13 -0
  129. data/bin/fluentd-ui-restart +12 -0
  130. data/bin/rails +8 -0
  131. data/bin/rake +8 -0
  132. data/bin/spring +18 -0
  133. data/bower.json +10 -0
  134. data/circle.yml +8 -0
  135. data/config.ru +4 -0
  136. data/config/application.rb +48 -0
  137. data/config/application.yml +211 -0
  138. data/config/boot.rb +4 -0
  139. data/config/environment.rb +5 -0
  140. data/config/environments/development.rb +36 -0
  141. data/config/environments/production.rb +69 -0
  142. data/config/environments/test.rb +40 -0
  143. data/config/initializers/backtrace_silencers.rb +7 -0
  144. data/config/initializers/cookies_serializer.rb +3 -0
  145. data/config/initializers/filter_parameter_logging.rb +4 -0
  146. data/config/initializers/inflections.rb +16 -0
  147. data/config/initializers/mime_types.rb +4 -0
  148. data/config/initializers/prefetch_gem_updates.rb +1 -0
  149. data/config/initializers/session_store.rb +3 -0
  150. data/config/initializers/wrap_parameters.rb +14 -0
  151. data/config/locales/en.yml +204 -0
  152. data/config/locales/ja.yml +194 -0
  153. data/config/locales/translation_en.yml +255 -0
  154. data/config/locales/translation_ja.yml +255 -0
  155. data/config/locales/tutorial_en.yml +117 -0
  156. data/config/locales/tutorial_ja.yml +120 -0
  157. data/config/routes.rb +93 -0
  158. data/config/secrets.yml +22 -0
  159. data/db/schema.rb +0 -0
  160. data/db/seeds.rb +11 -0
  161. data/fluentd-ui-ss01.png +0 -0
  162. data/fluentd-ui-ss02.png +0 -0
  163. data/fluentd-ui-ss03.png +0 -0
  164. data/fluentd-ui-ss04.png +0 -0
  165. data/fluentd-ui-ss05.png +0 -0
  166. data/fluentd-ui.gemspec +46 -0
  167. data/lib/assets/.keep +0 -0
  168. data/lib/file_reverse_reader.rb +56 -0
  169. data/lib/fluentd-ui.rb +22 -0
  170. data/lib/fluentd-ui/command.rb +52 -0
  171. data/lib/fluentd-ui/version.rb +3 -0
  172. data/lib/grok_converter.rb +39 -0
  173. data/lib/regexp_preview.rb +48 -0
  174. data/lib/tasks/.keep +0 -0
  175. data/lib/treeview.rb +45 -0
  176. data/log/.keep +0 -0
  177. data/public/404.html +67 -0
  178. data/public/422.html +67 -0
  179. data/public/500.html +66 -0
  180. data/public/favicon.ico +0 -0
  181. data/public/fluentd-logo-right-text.png +0 -0
  182. data/public/fluentd-logo.png +0 -0
  183. data/public/fluentd.png +0 -0
  184. data/public/robots.txt +5 -0
  185. data/spec/controllers/plugins_controller_spec.rb +5 -0
  186. data/spec/controllers/polling_controller_spec.rb +5 -0
  187. data/spec/controllers/sessions_controller_spec.rb +5 -0
  188. data/spec/controllers/tutorials_controller_spec.rb +5 -0
  189. data/spec/factories/fluentd.rb +11 -0
  190. data/spec/factories/plugins.rb +8 -0
  191. data/spec/factories/user.rb +6 -0
  192. data/spec/features/fluentd/setting/out_forward_spec.rb +45 -0
  193. data/spec/features/fluentd/setting/out_td_spec.rb +35 -0
  194. data/spec/features/sessions_spec.rb +55 -0
  195. data/spec/features/shared_examples/login_required.rb +4 -0
  196. data/spec/features/users_spec.rb +9 -0
  197. data/spec/grok_converter_spec.rb +50 -0
  198. data/spec/lib/file_reverse_reader_spec.rb +73 -0
  199. data/spec/lib/fluentd-ui_spec.rb +35 -0
  200. data/spec/models/fluentd/agent_spec.rb +91 -0
  201. data/spec/models/fluentd/setting/common_spec.rb +178 -0
  202. data/spec/models/fluentd/setting/in_syslog_spec.rb +35 -0
  203. data/spec/models/fluentd/setting/out_mongo_spec.rb +40 -0
  204. data/spec/models/fluentd/setting/out_td_spec.rb +38 -0
  205. data/spec/models/fluentd_spec.rb +166 -0
  206. data/spec/models/plugin_spec.rb +191 -0
  207. data/spec/models/user_spec.rb +15 -0
  208. data/spec/spec_helper.rb +58 -0
  209. data/spec/support/fixtures/error0.log +12 -0
  210. data/spec/support/fixtures/error2.log +130 -0
  211. data/spec/support/fluentd_agent_common_behavior.rb +114 -0
  212. data/spec/support/fluentd_agent_restart_strategy.rb +94 -0
  213. data/tmp/.gitkeep +0 -0
  214. data/vendor/assets/javascripts/.keep +0 -0
  215. data/vendor/assets/javascripts/bower/es6-promise/.bower.json +15 -0
  216. data/vendor/assets/javascripts/bower/es6-promise/bower.json +5 -0
  217. data/vendor/assets/javascripts/bower/es6-promise/promise.js +684 -0
  218. data/vendor/assets/javascripts/bower/es6-promise/promise.min.js +1 -0
  219. data/vendor/assets/javascripts/bower/lodash/.bower.json +33 -0
  220. data/vendor/assets/javascripts/bower/lodash/LICENSE.txt +22 -0
  221. data/vendor/assets/javascripts/bower/lodash/bower.json +23 -0
  222. data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.js +7157 -0
  223. data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.min.js +61 -0
  224. data/vendor/assets/javascripts/bower/lodash/dist/lodash.js +6785 -0
  225. data/vendor/assets/javascripts/bower/lodash/dist/lodash.min.js +56 -0
  226. data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.js +4979 -0
  227. data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.min.js +39 -0
  228. data/vendor/assets/javascripts/bower/vue/.bower.json +29 -0
  229. data/vendor/assets/javascripts/bower/vue/LICENSE +21 -0
  230. data/vendor/assets/javascripts/bower/vue/dist/vue.js +4713 -0
  231. data/vendor/assets/javascripts/bower/vue/dist/vue.min.js +7 -0
  232. data/vendor/assets/javascripts/bower/vue/src/batcher.js +45 -0
  233. data/vendor/assets/javascripts/bower/vue/src/binding.js +103 -0
  234. data/vendor/assets/javascripts/bower/vue/src/compiler.js +1037 -0
  235. data/vendor/assets/javascripts/bower/vue/src/config.js +19 -0
  236. data/vendor/assets/javascripts/bower/vue/src/deps-parser.js +65 -0
  237. data/vendor/assets/javascripts/bower/vue/src/directive.js +258 -0
  238. data/vendor/assets/javascripts/bower/vue/src/directives/html.js +41 -0
  239. data/vendor/assets/javascripts/bower/vue/src/directives/if.js +56 -0
  240. data/vendor/assets/javascripts/bower/vue/src/directives/index.js +129 -0
  241. data/vendor/assets/javascripts/bower/vue/src/directives/model.js +174 -0
  242. data/vendor/assets/javascripts/bower/vue/src/directives/on.js +56 -0
  243. data/vendor/assets/javascripts/bower/vue/src/directives/partial.js +50 -0
  244. data/vendor/assets/javascripts/bower/vue/src/directives/repeat.js +246 -0
  245. data/vendor/assets/javascripts/bower/vue/src/directives/style.js +40 -0
  246. data/vendor/assets/javascripts/bower/vue/src/directives/view.js +56 -0
  247. data/vendor/assets/javascripts/bower/vue/src/directives/with.js +50 -0
  248. data/vendor/assets/javascripts/bower/vue/src/emitter.js +97 -0
  249. data/vendor/assets/javascripts/bower/vue/src/exp-parser.js +190 -0
  250. data/vendor/assets/javascripts/bower/vue/src/filters.js +190 -0
  251. data/vendor/assets/javascripts/bower/vue/src/fragment.js +84 -0
  252. data/vendor/assets/javascripts/bower/vue/src/main.js +186 -0
  253. data/vendor/assets/javascripts/bower/vue/src/observer.js +446 -0
  254. data/vendor/assets/javascripts/bower/vue/src/text-parser.js +96 -0
  255. data/vendor/assets/javascripts/bower/vue/src/transition.js +228 -0
  256. data/vendor/assets/javascripts/bower/vue/src/utils.js +321 -0
  257. data/vendor/assets/javascripts/bower/vue/src/viewmodel.js +180 -0
  258. data/vendor/assets/javascripts/sb-admin-v2/bootstrap.js +1951 -0
  259. data/vendor/assets/javascripts/sb-admin-v2/bootstrap.min.js +6 -0
  260. data/vendor/assets/javascripts/sb-admin-v2/demo/dashboard-demo.js +117 -0
  261. data/vendor/assets/javascripts/sb-admin-v2/demo/flot-demo.js +1242 -0
  262. data/vendor/assets/javascripts/sb-admin-v2/demo/morris-demo.js +155 -0
  263. data/vendor/assets/javascripts/sb-admin-v2/jquery-1.10.2.js +6 -0
  264. data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.js +245 -0
  265. data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/jquery.dataTables.js +14013 -0
  266. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/excanvas.min.js +1 -0
  267. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.js +2599 -0
  268. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.pie.js +750 -0
  269. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.resize.js +60 -0
  270. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.tooltip.min.js +12 -0
  271. data/vendor/assets/javascripts/sb-admin-v2/plugins/metisMenu/jquery.metisMenu.js +45 -0
  272. data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/morris.js +1888 -0
  273. data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/raphael-2.1.0.min.js +10 -0
  274. data/vendor/assets/javascripts/sb-admin-v2/sb-admin.js +18 -0
  275. data/vendor/assets/stylesheets/.keep +0 -0
  276. data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.css +5830 -0
  277. data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.min.css +7 -0
  278. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.css +1338 -0
  279. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.min.css +4 -0
  280. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/FontAwesome.otf +0 -0
  281. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  282. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.svg +414 -0
  283. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  284. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  285. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_bordered-pulled.scss +16 -0
  286. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_core.scss +12 -0
  287. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_fixed-width.scss +6 -0
  288. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_icons.scss +412 -0
  289. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_larger.scss +13 -0
  290. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_list.scss +19 -0
  291. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_mixins.scss +20 -0
  292. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_path.scss +14 -0
  293. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_rotated-flipped.scss +9 -0
  294. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_spinning.scss +30 -0
  295. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_stacked.scss +20 -0
  296. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_variables.scss +381 -0
  297. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/font-awesome.scss +17 -0
  298. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.eot +0 -0
  299. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.svg +229 -0
  300. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.ttf +0 -0
  301. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.woff +0 -0
  302. data/vendor/assets/stylesheets/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.css +233 -0
  303. data/vendor/assets/stylesheets/sb-admin-v2/plugins/morris/morris-0.4.3.min.css +2 -0
  304. data/vendor/assets/stylesheets/sb-admin-v2/plugins/social-buttons/social-buttons.css +68 -0
  305. data/vendor/assets/stylesheets/sb-admin-v2/plugins/timeline/timeline.css +144 -0
  306. data/vendor/assets/stylesheets/sb-admin-v2/sb-admin.css +329 -0
  307. data/vendor/patterns/firewalls +60 -0
  308. data/vendor/patterns/grok-patterns +94 -0
  309. data/vendor/patterns/haproxy +37 -0
  310. data/vendor/patterns/java +3 -0
  311. data/vendor/patterns/junos +9 -0
  312. data/vendor/patterns/linux-syslog +16 -0
  313. data/vendor/patterns/mcollective +1 -0
  314. data/vendor/patterns/mcollective-patterns +4 -0
  315. data/vendor/patterns/mongodb +4 -0
  316. data/vendor/patterns/nagios +108 -0
  317. data/vendor/patterns/postgresql +3 -0
  318. data/vendor/patterns/redis +3 -0
  319. data/vendor/patterns/ruby +2 -0
  320. metadata +659 -0
@@ -0,0 +1,40 @@
1
+ var prefixes = ['-webkit-', '-moz-', '-ms-']
2
+
3
+ /**
4
+ * Binding for CSS styles
5
+ */
6
+ module.exports = {
7
+
8
+ bind: function () {
9
+ var prop = this.arg
10
+ if (!prop) return
11
+ if (prop.charAt(0) === '$') {
12
+ // properties that start with $ will be auto-prefixed
13
+ prop = prop.slice(1)
14
+ this.prefixed = true
15
+ }
16
+ this.prop = prop
17
+ },
18
+
19
+ update: function (value) {
20
+ var prop = this.prop
21
+ if (prop) {
22
+ var isImportant = value.slice(-10) === '!important'
23
+ ? 'important'
24
+ : ''
25
+ if (isImportant) {
26
+ value = value.slice(0, -10).trim()
27
+ }
28
+ this.el.style.setProperty(prop, value, isImportant)
29
+ if (this.prefixed) {
30
+ var i = prefixes.length
31
+ while (i--) {
32
+ this.el.style.setProperty(prefixes[i] + prop, value, isImportant)
33
+ }
34
+ }
35
+ } else {
36
+ this.el.style.cssText = value
37
+ }
38
+ }
39
+
40
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Manages a conditional child VM using the
3
+ * binding's value as the component ID.
4
+ */
5
+ module.exports = {
6
+
7
+ bind: function () {
8
+
9
+ // track position in DOM with a ref node
10
+ var el = this.raw = this.el,
11
+ parent = el.parentNode,
12
+ ref = this.ref = document.createComment('v-view')
13
+ parent.insertBefore(ref, el)
14
+ parent.removeChild(el)
15
+
16
+ // cache original content
17
+ /* jshint boss: true */
18
+ var node,
19
+ frag = this.inner = document.createElement('div')
20
+ while (node = el.firstChild) {
21
+ frag.appendChild(node)
22
+ }
23
+
24
+ },
25
+
26
+ update: function(value) {
27
+
28
+ this.unbind()
29
+
30
+ var Ctor = this.compiler.getOption('components', value)
31
+ if (!Ctor) return
32
+
33
+ this.childVM = new Ctor({
34
+ el: this.raw.cloneNode(true),
35
+ parent: this.vm,
36
+ compilerOptions: {
37
+ rawContent: this.inner.cloneNode(true)
38
+ }
39
+ })
40
+
41
+ this.el = this.childVM.$el
42
+ if (this.compiler.init) {
43
+ this.ref.parentNode.insertBefore(this.el, this.ref)
44
+ } else {
45
+ this.childVM.$before(this.ref)
46
+ }
47
+
48
+ },
49
+
50
+ unbind: function() {
51
+ if (this.childVM) {
52
+ this.childVM.$destroy()
53
+ }
54
+ }
55
+
56
+ }
@@ -0,0 +1,50 @@
1
+ var utils = require('../utils')
2
+
3
+ /**
4
+ * Binding for inheriting data from parent VMs.
5
+ */
6
+ module.exports = {
7
+
8
+ bind: function () {
9
+
10
+ var self = this,
11
+ childKey = self.arg,
12
+ parentKey = self.key,
13
+ compiler = self.compiler,
14
+ owner = self.binding.compiler
15
+
16
+ if (compiler === owner) {
17
+ this.alone = true
18
+ return
19
+ }
20
+
21
+ if (childKey) {
22
+ if (!compiler.bindings[childKey]) {
23
+ compiler.createBinding(childKey)
24
+ }
25
+ // sync changes on child back to parent
26
+ compiler.observer.on('change:' + childKey, function (val) {
27
+ if (compiler.init) return
28
+ if (!self.lock) {
29
+ self.lock = true
30
+ utils.nextTick(function () {
31
+ self.lock = false
32
+ })
33
+ }
34
+ owner.vm.$set(parentKey, val)
35
+ })
36
+ }
37
+ },
38
+
39
+ update: function (value) {
40
+ // sync from parent
41
+ if (!this.alone && !this.lock) {
42
+ if (this.arg) {
43
+ this.vm.$set(this.arg, value)
44
+ } else if (this.vm.$data !== value) {
45
+ this.vm.$data = value
46
+ }
47
+ }
48
+ }
49
+
50
+ }
@@ -0,0 +1,97 @@
1
+ var slice = [].slice
2
+
3
+ function Emitter (ctx) {
4
+ this._ctx = ctx || this
5
+ }
6
+
7
+ var EmitterProto = Emitter.prototype
8
+
9
+ EmitterProto.on = function (event, fn) {
10
+ this._cbs = this._cbs || {}
11
+ ;(this._cbs[event] = this._cbs[event] || [])
12
+ .push(fn)
13
+ return this
14
+ }
15
+
16
+ EmitterProto.once = function (event, fn) {
17
+ var self = this
18
+ this._cbs = this._cbs || {}
19
+
20
+ function on () {
21
+ self.off(event, on)
22
+ fn.apply(this, arguments)
23
+ }
24
+
25
+ on.fn = fn
26
+ this.on(event, on)
27
+ return this
28
+ }
29
+
30
+ EmitterProto.off = function (event, fn) {
31
+ this._cbs = this._cbs || {}
32
+
33
+ // all
34
+ if (!arguments.length) {
35
+ this._cbs = {}
36
+ return this
37
+ }
38
+
39
+ // specific event
40
+ var callbacks = this._cbs[event]
41
+ if (!callbacks) return this
42
+
43
+ // remove all handlers
44
+ if (arguments.length === 1) {
45
+ delete this._cbs[event]
46
+ return this
47
+ }
48
+
49
+ // remove specific handler
50
+ var cb
51
+ for (var i = 0; i < callbacks.length; i++) {
52
+ cb = callbacks[i]
53
+ if (cb === fn || cb.fn === fn) {
54
+ callbacks.splice(i, 1)
55
+ break
56
+ }
57
+ }
58
+ return this
59
+ }
60
+
61
+ /**
62
+ * The internal, faster emit with fixed amount of arguments
63
+ * using Function.call
64
+ */
65
+ EmitterProto.emit = function (event, a, b, c) {
66
+ this._cbs = this._cbs || {}
67
+ var callbacks = this._cbs[event]
68
+
69
+ if (callbacks) {
70
+ callbacks = callbacks.slice(0)
71
+ for (var i = 0, len = callbacks.length; i < len; i++) {
72
+ callbacks[i].call(this._ctx, a, b, c)
73
+ }
74
+ }
75
+
76
+ return this
77
+ }
78
+
79
+ /**
80
+ * The external emit using Function.apply
81
+ */
82
+ EmitterProto.applyEmit = function (event) {
83
+ this._cbs = this._cbs || {}
84
+ var callbacks = this._cbs[event], args
85
+
86
+ if (callbacks) {
87
+ callbacks = callbacks.slice(0)
88
+ args = slice.call(arguments, 1)
89
+ for (var i = 0, len = callbacks.length; i < len; i++) {
90
+ callbacks[i].apply(this._ctx, args)
91
+ }
92
+ }
93
+
94
+ return this
95
+ }
96
+
97
+ module.exports = Emitter
@@ -0,0 +1,190 @@
1
+ var utils = require('./utils'),
2
+ STR_SAVE_RE = /"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/g,
3
+ STR_RESTORE_RE = /"(\d+)"/g,
4
+ NEWLINE_RE = /\n/g,
5
+ CTOR_RE = new RegExp('constructor'.split('').join('[\'"+, ]*')),
6
+ UNICODE_RE = /\\u\d\d\d\d/
7
+
8
+ // Variable extraction scooped from https://github.com/RubyLouvre/avalon
9
+
10
+ var KEYWORDS =
11
+ // keywords
12
+ 'break,case,catch,continue,debugger,default,delete,do,else,false' +
13
+ ',finally,for,function,if,in,instanceof,new,null,return,switch,this' +
14
+ ',throw,true,try,typeof,var,void,while,with,undefined' +
15
+ // reserved
16
+ ',abstract,boolean,byte,char,class,const,double,enum,export,extends' +
17
+ ',final,float,goto,implements,import,int,interface,long,native' +
18
+ ',package,private,protected,public,short,static,super,synchronized' +
19
+ ',throws,transient,volatile' +
20
+ // ECMA 5 - use strict
21
+ ',arguments,let,yield' +
22
+ // allow using Math in expressions
23
+ ',Math',
24
+
25
+ KEYWORDS_RE = new RegExp(["\\b" + KEYWORDS.replace(/,/g, '\\b|\\b') + "\\b"].join('|'), 'g'),
26
+ REMOVE_RE = /\/\*(?:.|\n)*?\*\/|\/\/[^\n]*\n|\/\/[^\n]*$|'[^']*'|"[^"]*"|[\s\t\n]*\.[\s\t\n]*[$\w\.]+|[\{,]\s*[\w\$_]+\s*:/g,
27
+ SPLIT_RE = /[^\w$]+/g,
28
+ NUMBER_RE = /\b\d[^,]*/g,
29
+ BOUNDARY_RE = /^,+|,+$/g
30
+
31
+ /**
32
+ * Strip top level variable names from a snippet of JS expression
33
+ */
34
+ function getVariables (code) {
35
+ code = code
36
+ .replace(REMOVE_RE, '')
37
+ .replace(SPLIT_RE, ',')
38
+ .replace(KEYWORDS_RE, '')
39
+ .replace(NUMBER_RE, '')
40
+ .replace(BOUNDARY_RE, '')
41
+ return code
42
+ ? code.split(/,+/)
43
+ : []
44
+ }
45
+
46
+ /**
47
+ * A given path could potentially exist not on the
48
+ * current compiler, but up in the parent chain somewhere.
49
+ * This function generates an access relationship string
50
+ * that can be used in the getter function by walking up
51
+ * the parent chain to check for key existence.
52
+ *
53
+ * It stops at top parent if no vm in the chain has the
54
+ * key. It then creates any missing bindings on the
55
+ * final resolved vm.
56
+ */
57
+ function traceScope (path, compiler, data) {
58
+ var rel = '',
59
+ dist = 0,
60
+ self = compiler
61
+
62
+ if (data && utils.get(data, path) !== undefined) {
63
+ // hack: temporarily attached data
64
+ return '$temp.'
65
+ }
66
+
67
+ while (compiler) {
68
+ if (compiler.hasKey(path)) {
69
+ break
70
+ } else {
71
+ compiler = compiler.parent
72
+ dist++
73
+ }
74
+ }
75
+ if (compiler) {
76
+ while (dist--) {
77
+ rel += '$parent.'
78
+ }
79
+ if (!compiler.bindings[path] && path.charAt(0) !== '$') {
80
+ compiler.createBinding(path)
81
+ }
82
+ } else {
83
+ self.createBinding(path)
84
+ }
85
+ return rel
86
+ }
87
+
88
+ /**
89
+ * Create a function from a string...
90
+ * this looks like evil magic but since all variables are limited
91
+ * to the VM's data it's actually properly sandboxed
92
+ */
93
+ function makeGetter (exp, raw) {
94
+ var fn
95
+ try {
96
+ fn = new Function(exp)
97
+ } catch (e) {
98
+ utils.warn('Error parsing expression: ' + raw)
99
+ }
100
+ return fn
101
+ }
102
+
103
+ /**
104
+ * Escape a leading dollar sign for regex construction
105
+ */
106
+ function escapeDollar (v) {
107
+ return v.charAt(0) === '$'
108
+ ? '\\' + v
109
+ : v
110
+ }
111
+
112
+ /**
113
+ * Parse and return an anonymous computed property getter function
114
+ * from an arbitrary expression, together with a list of paths to be
115
+ * created as bindings.
116
+ */
117
+ exports.parse = function (exp, compiler, data) {
118
+ // unicode and 'constructor' are not allowed for XSS security.
119
+ if (UNICODE_RE.test(exp) || CTOR_RE.test(exp)) {
120
+ utils.warn('Unsafe expression: ' + exp)
121
+ return
122
+ }
123
+ // extract variable names
124
+ var vars = getVariables(exp)
125
+ if (!vars.length) {
126
+ return makeGetter('return ' + exp, exp)
127
+ }
128
+ vars = utils.unique(vars)
129
+
130
+ var accessors = '',
131
+ has = utils.hash(),
132
+ strings = [],
133
+ // construct a regex to extract all valid variable paths
134
+ // ones that begin with "$" are particularly tricky
135
+ // because we can't use \b for them
136
+ pathRE = new RegExp(
137
+ "[^$\\w\\.](" +
138
+ vars.map(escapeDollar).join('|') +
139
+ ")[$\\w\\.]*\\b", 'g'
140
+ ),
141
+ body = (' ' + exp)
142
+ .replace(STR_SAVE_RE, saveStrings)
143
+ .replace(pathRE, replacePath)
144
+ .replace(STR_RESTORE_RE, restoreStrings)
145
+
146
+ body = accessors + 'return ' + body
147
+
148
+ function saveStrings (str) {
149
+ var i = strings.length
150
+ // escape newlines in strings so the expression
151
+ // can be correctly evaluated
152
+ strings[i] = str.replace(NEWLINE_RE, '\\n')
153
+ return '"' + i + '"'
154
+ }
155
+
156
+ function replacePath (path) {
157
+ // keep track of the first char
158
+ var c = path.charAt(0)
159
+ path = path.slice(1)
160
+ var val = 'this.' + traceScope(path, compiler, data) + path
161
+ if (!has[path]) {
162
+ accessors += val + ';'
163
+ has[path] = 1
164
+ }
165
+ // don't forget to put that first char back
166
+ return c + val
167
+ }
168
+
169
+ function restoreStrings (str, i) {
170
+ return strings[i]
171
+ }
172
+
173
+ return makeGetter(body, exp)
174
+ }
175
+
176
+ /**
177
+ * Evaluate an expression in the context of a compiler.
178
+ * Accepts additional data.
179
+ */
180
+ exports.eval = function (exp, compiler, data) {
181
+ var getter = exports.parse(exp, compiler, data), res
182
+ if (getter) {
183
+ // hack: temporarily attach the additional data so
184
+ // it can be accessed in the getter
185
+ compiler.vm.$temp = data
186
+ res = getter.call(compiler.vm)
187
+ delete compiler.vm.$temp
188
+ }
189
+ return res
190
+ }
@@ -0,0 +1,190 @@
1
+ var utils = require('./utils'),
2
+ get = utils.get,
3
+ slice = [].slice,
4
+ QUOTE_RE = /^'.*'$/,
5
+ filters = module.exports = utils.hash()
6
+
7
+ /**
8
+ * 'abc' => 'Abc'
9
+ */
10
+ filters.capitalize = function (value) {
11
+ if (!value && value !== 0) return ''
12
+ value = value.toString()
13
+ return value.charAt(0).toUpperCase() + value.slice(1)
14
+ }
15
+
16
+ /**
17
+ * 'abc' => 'ABC'
18
+ */
19
+ filters.uppercase = function (value) {
20
+ return (value || value === 0)
21
+ ? value.toString().toUpperCase()
22
+ : ''
23
+ }
24
+
25
+ /**
26
+ * 'AbC' => 'abc'
27
+ */
28
+ filters.lowercase = function (value) {
29
+ return (value || value === 0)
30
+ ? value.toString().toLowerCase()
31
+ : ''
32
+ }
33
+
34
+ /**
35
+ * 12345 => $12,345.00
36
+ */
37
+ filters.currency = function (value, sign) {
38
+ if (!value && value !== 0) return ''
39
+ sign = sign || '$'
40
+ var s = Math.floor(value).toString(),
41
+ i = s.length % 3,
42
+ h = i > 0 ? (s.slice(0, i) + (s.length > 3 ? ',' : '')) : '',
43
+ f = '.' + value.toFixed(2).slice(-2)
44
+ return sign + h + s.slice(i).replace(/(\d{3})(?=\d)/g, '$1,') + f
45
+ }
46
+
47
+ /**
48
+ * args: an array of strings corresponding to
49
+ * the single, double, triple ... forms of the word to
50
+ * be pluralized. When the number to be pluralized
51
+ * exceeds the length of the args, it will use the last
52
+ * entry in the array.
53
+ *
54
+ * e.g. ['single', 'double', 'triple', 'multiple']
55
+ */
56
+ filters.pluralize = function (value) {
57
+ var args = slice.call(arguments, 1)
58
+ return args.length > 1
59
+ ? (args[value - 1] || args[args.length - 1])
60
+ : (args[value - 1] || args[0] + 's')
61
+ }
62
+
63
+ /**
64
+ * A special filter that takes a handler function,
65
+ * wraps it so it only gets triggered on specific keypresses.
66
+ *
67
+ * v-on only
68
+ */
69
+
70
+ var keyCodes = {
71
+ enter : 13,
72
+ tab : 9,
73
+ 'delete' : 46,
74
+ up : 38,
75
+ left : 37,
76
+ right : 39,
77
+ down : 40,
78
+ esc : 27
79
+ }
80
+
81
+ filters.key = function (handler, key) {
82
+ if (!handler) return
83
+ var code = keyCodes[key]
84
+ if (!code) {
85
+ code = parseInt(key, 10)
86
+ }
87
+ return function (e) {
88
+ if (e.keyCode === code) {
89
+ return handler.call(this, e)
90
+ }
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Filter filter for v-repeat
96
+ */
97
+ filters.filterBy = function (arr, searchKey, delimiter, dataKey) {
98
+
99
+ // allow optional `in` delimiter
100
+ // because why not
101
+ if (delimiter && delimiter !== 'in') {
102
+ dataKey = delimiter
103
+ }
104
+
105
+ // get the search string
106
+ var search = stripQuotes(searchKey) || this.$get(searchKey)
107
+ if (!search) return arr
108
+ search = search.toLowerCase()
109
+
110
+ // get the optional dataKey
111
+ dataKey = dataKey && (stripQuotes(dataKey) || this.$get(dataKey))
112
+
113
+ // convert object to array
114
+ if (!Array.isArray(arr)) {
115
+ arr = utils.objectToArray(arr)
116
+ }
117
+
118
+ return arr.filter(function (item) {
119
+ return dataKey
120
+ ? contains(get(item, dataKey), search)
121
+ : contains(item, search)
122
+ })
123
+
124
+ }
125
+
126
+ filters.filterBy.computed = true
127
+
128
+ /**
129
+ * Sort fitler for v-repeat
130
+ */
131
+ filters.orderBy = function (arr, sortKey, reverseKey) {
132
+
133
+ var key = stripQuotes(sortKey) || this.$get(sortKey)
134
+ if (!key) return arr
135
+
136
+ // convert object to array
137
+ if (!Array.isArray(arr)) {
138
+ arr = utils.objectToArray(arr)
139
+ }
140
+
141
+ var order = 1
142
+ if (reverseKey) {
143
+ if (reverseKey === '-1') {
144
+ order = -1
145
+ } else if (reverseKey.charAt(0) === '!') {
146
+ reverseKey = reverseKey.slice(1)
147
+ order = this.$get(reverseKey) ? 1 : -1
148
+ } else {
149
+ order = this.$get(reverseKey) ? -1 : 1
150
+ }
151
+ }
152
+
153
+ // sort on a copy to avoid mutating original array
154
+ return arr.slice().sort(function (a, b) {
155
+ a = get(a, key)
156
+ b = get(b, key)
157
+ return a === b ? 0 : a > b ? order : -order
158
+ })
159
+
160
+ }
161
+
162
+ filters.orderBy.computed = true
163
+
164
+ // Array filter helpers -------------------------------------------------------
165
+
166
+ /**
167
+ * String contain helper
168
+ */
169
+ function contains (val, search) {
170
+ /* jshint eqeqeq: false */
171
+ if (utils.isObject(val)) {
172
+ for (var key in val) {
173
+ if (contains(val[key], search)) {
174
+ return true
175
+ }
176
+ }
177
+ } else if (val != null) {
178
+ return val.toString().toLowerCase().indexOf(search) > -1
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Test whether a string is in quotes,
184
+ * if yes return stripped string
185
+ */
186
+ function stripQuotes (str) {
187
+ if (QUOTE_RE.test(str)) {
188
+ return str.slice(1, -1)
189
+ }
190
+ }