fluentd-ui 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

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
+ }