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.
- checksums.yaml +7 -0
- data/.bowerrc +3 -0
- data/.gitignore +31 -0
- data/.rspec +1 -0
- data/ChangeLog +3 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +247 -0
- data/Gemfile.production +3 -0
- data/README.md +53 -0
- data/Rakefile +8 -0
- data/app/assets/images/.keep +0 -0
- data/app/assets/javascripts/alert.js +51 -0
- data/app/assets/javascripts/application.js +22 -0
- data/app/assets/javascripts/nested_setting.js +41 -0
- data/app/assets/javascripts/setting_format.js +15 -0
- data/app/assets/javascripts/tutorial.js +58 -0
- data/app/assets/javascripts/vue/fluent_log.js +64 -0
- data/app/assets/javascripts/vue/in_tail_format.js +153 -0
- data/app/assets/javascripts/vue/treeview.js +97 -0
- data/app/assets/javascripts/vue_common.js +4 -0
- data/app/assets/stylesheets/application.css +18 -0
- data/app/assets/stylesheets/common.css.scss +152 -0
- data/app/controllers/api_controller.rb +37 -0
- data/app/controllers/application_controller.rb +110 -0
- data/app/controllers/concerns/.keep +0 -0
- data/app/controllers/fluentd/agents_controller.rb +35 -0
- data/app/controllers/fluentd/settings/in_syslog_controller.rb +34 -0
- data/app/controllers/fluentd/settings/in_tail_controller.rb +57 -0
- data/app/controllers/fluentd/settings/out_forward_controller.rb +42 -0
- data/app/controllers/fluentd/settings/out_mongo_controller.rb +36 -0
- data/app/controllers/fluentd/settings/out_s3_controller.rb +36 -0
- data/app/controllers/fluentd/settings/out_td_controller.rb +36 -0
- data/app/controllers/fluentd/settings_controller.rb +18 -0
- data/app/controllers/fluentd_controller.rb +62 -0
- data/app/controllers/misc_controller.rb +69 -0
- data/app/controllers/plugins_controller.rb +44 -0
- data/app/controllers/polling_controller.rb +20 -0
- data/app/controllers/sessions_controller.rb +45 -0
- data/app/controllers/tutorials_controller.rb +40 -0
- data/app/controllers/users_controller.rb +28 -0
- data/app/controllers/welcome_controller.rb +5 -0
- data/app/helpers/application_helper.rb +55 -0
- data/app/helpers/fluentd/settings_helper.rb +2 -0
- data/app/helpers/miscs_helper.rb +2 -0
- data/app/helpers/settings_helper.rb +43 -0
- data/app/mailers/.keep +0 -0
- data/app/models/.keep +0 -0
- data/app/models/concerns/.keep +0 -0
- data/app/models/fluentd.rb +178 -0
- data/app/models/fluentd/agent.rb +28 -0
- data/app/models/fluentd/agent/common.rb +76 -0
- data/app/models/fluentd/agent/configuration.rb +35 -0
- data/app/models/fluentd/agent/fluentd_gem.rb +104 -0
- data/app/models/fluentd/agent/local_common.rb +101 -0
- data/app/models/fluentd/agent/remote.rb +7 -0
- data/app/models/fluentd/agent/td_agent.rb +44 -0
- data/app/models/fluentd/api.rb +6 -0
- data/app/models/fluentd/api/http.rb +26 -0
- data/app/models/fluentd/setting.rb +4 -0
- data/app/models/fluentd/setting/common.rb +185 -0
- data/app/models/fluentd/setting/in_syslog.rb +16 -0
- data/app/models/fluentd/setting/in_tail.rb +107 -0
- data/app/models/fluentd/setting/out_forward.rb +70 -0
- data/app/models/fluentd/setting/out_mongo.rb +35 -0
- data/app/models/fluentd/setting/out_s3.rb +29 -0
- data/app/models/fluentd/setting/out_td.rb +26 -0
- data/app/models/plugin.rb +193 -0
- data/app/models/settings.rb +4 -0
- data/app/models/user.rb +52 -0
- data/app/views/fluentd/_form.html.haml +31 -0
- data/app/views/fluentd/edit.html.haml +3 -0
- data/app/views/fluentd/errors.html.haml +19 -0
- data/app/views/fluentd/log.html.haml +9 -0
- data/app/views/fluentd/new.html.haml +3 -0
- data/app/views/fluentd/settings/_form.html.haml +43 -0
- data/app/views/fluentd/settings/edit.html.haml +7 -0
- data/app/views/fluentd/settings/in_syslog/_form.html.haml +9 -0
- data/app/views/fluentd/settings/in_syslog/show.html.haml +6 -0
- data/app/views/fluentd/settings/in_tail/_form.html.haml +42 -0
- data/app/views/fluentd/settings/in_tail/after_file_choose.html.haml +19 -0
- data/app/views/fluentd/settings/in_tail/after_format.html.haml +10 -0
- data/app/views/fluentd/settings/in_tail/confirm.html.haml +13 -0
- data/app/views/fluentd/settings/in_tail/show.html.haml +5 -0
- data/app/views/fluentd/settings/out_forward/_form.html.haml +22 -0
- data/app/views/fluentd/settings/out_forward/show.html.haml +6 -0
- data/app/views/fluentd/settings/out_mongo/_form.html.haml +30 -0
- data/app/views/fluentd/settings/out_mongo/finish.html.haml +4 -0
- data/app/views/fluentd/settings/out_mongo/show.html.haml +6 -0
- data/app/views/fluentd/settings/out_s3/_form.html.haml +39 -0
- data/app/views/fluentd/settings/out_s3/show.html.haml +6 -0
- data/app/views/fluentd/settings/out_td/_form.html.haml +18 -0
- data/app/views/fluentd/settings/out_td/show.html.haml +6 -0
- data/app/views/fluentd/settings/show.html.haml +10 -0
- data/app/views/fluentd/settings/source_and_output.html.haml +45 -0
- data/app/views/fluentd/show.html.haml +60 -0
- data/app/views/layouts/application.html.erb +102 -0
- data/app/views/layouts/sign_in.html.erb +28 -0
- data/app/views/misc/information.html.haml +75 -0
- data/app/views/misc/update_fluentd_ui.html.haml +45 -0
- data/app/views/plugins/installed.html.haml +67 -0
- data/app/views/plugins/recommended.html.haml +59 -0
- data/app/views/plugins/updated.html.haml +29 -0
- data/app/views/sessions/new.html.haml +13 -0
- data/app/views/shared/_error.html.haml +3 -0
- data/app/views/shared/_flash.html.haml +10 -0
- data/app/views/shared/_fluentd_nav.html.haml +12 -0
- data/app/views/shared/_global_nav.html.erb +80 -0
- data/app/views/shared/_initial_setup.html.haml +13 -0
- data/app/views/shared/_modal.html.erb +25 -0
- data/app/views/shared/_setting_errors.html.haml +5 -0
- data/app/views/shared/vue/_fluent_log.html.erb +25 -0
- data/app/views/shared/vue/_in_tail_format.html.erb +53 -0
- data/app/views/shared/vue/_treeview.html.erb +30 -0
- data/app/views/tutorials/chapter1.html.erb +31 -0
- data/app/views/tutorials/chapter2.html.haml +12 -0
- data/app/views/tutorials/chapter3.html.haml +12 -0
- data/app/views/tutorials/chapter4.html.haml +12 -0
- data/app/views/tutorials/chapter5.html.haml +10 -0
- data/app/views/tutorials/index.html.haml +26 -0
- data/app/views/users/show.html.haml +22 -0
- data/app/workers/all_plugin_check_update.rb +14 -0
- data/app/workers/fluentd_ui_restart.rb +41 -0
- data/app/workers/fluentd_ui_update_check.rb +15 -0
- data/app/workers/gem_installer.rb +17 -0
- data/app/workers/gem_uninstaller.rb +15 -0
- data/app/workers/gem_update_check.rb +10 -0
- data/bin/bundle +3 -0
- data/bin/fluentd-ui +13 -0
- data/bin/fluentd-ui-restart +12 -0
- data/bin/rails +8 -0
- data/bin/rake +8 -0
- data/bin/spring +18 -0
- data/bower.json +10 -0
- data/circle.yml +8 -0
- data/config.ru +4 -0
- data/config/application.rb +48 -0
- data/config/application.yml +211 -0
- data/config/boot.rb +4 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +36 -0
- data/config/environments/production.rb +69 -0
- data/config/environments/test.rb +40 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/cookies_serializer.rb +3 -0
- data/config/initializers/filter_parameter_logging.rb +4 -0
- data/config/initializers/inflections.rb +16 -0
- data/config/initializers/mime_types.rb +4 -0
- data/config/initializers/prefetch_gem_updates.rb +1 -0
- data/config/initializers/session_store.rb +3 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/en.yml +204 -0
- data/config/locales/ja.yml +194 -0
- data/config/locales/translation_en.yml +255 -0
- data/config/locales/translation_ja.yml +255 -0
- data/config/locales/tutorial_en.yml +117 -0
- data/config/locales/tutorial_ja.yml +120 -0
- data/config/routes.rb +93 -0
- data/config/secrets.yml +22 -0
- data/db/schema.rb +0 -0
- data/db/seeds.rb +11 -0
- data/fluentd-ui-ss01.png +0 -0
- data/fluentd-ui-ss02.png +0 -0
- data/fluentd-ui-ss03.png +0 -0
- data/fluentd-ui-ss04.png +0 -0
- data/fluentd-ui-ss05.png +0 -0
- data/fluentd-ui.gemspec +46 -0
- data/lib/assets/.keep +0 -0
- data/lib/file_reverse_reader.rb +56 -0
- data/lib/fluentd-ui.rb +22 -0
- data/lib/fluentd-ui/command.rb +52 -0
- data/lib/fluentd-ui/version.rb +3 -0
- data/lib/grok_converter.rb +39 -0
- data/lib/regexp_preview.rb +48 -0
- data/lib/tasks/.keep +0 -0
- data/lib/treeview.rb +45 -0
- data/log/.keep +0 -0
- data/public/404.html +67 -0
- data/public/422.html +67 -0
- data/public/500.html +66 -0
- data/public/favicon.ico +0 -0
- data/public/fluentd-logo-right-text.png +0 -0
- data/public/fluentd-logo.png +0 -0
- data/public/fluentd.png +0 -0
- data/public/robots.txt +5 -0
- data/spec/controllers/plugins_controller_spec.rb +5 -0
- data/spec/controllers/polling_controller_spec.rb +5 -0
- data/spec/controllers/sessions_controller_spec.rb +5 -0
- data/spec/controllers/tutorials_controller_spec.rb +5 -0
- data/spec/factories/fluentd.rb +11 -0
- data/spec/factories/plugins.rb +8 -0
- data/spec/factories/user.rb +6 -0
- data/spec/features/fluentd/setting/out_forward_spec.rb +45 -0
- data/spec/features/fluentd/setting/out_td_spec.rb +35 -0
- data/spec/features/sessions_spec.rb +55 -0
- data/spec/features/shared_examples/login_required.rb +4 -0
- data/spec/features/users_spec.rb +9 -0
- data/spec/grok_converter_spec.rb +50 -0
- data/spec/lib/file_reverse_reader_spec.rb +73 -0
- data/spec/lib/fluentd-ui_spec.rb +35 -0
- data/spec/models/fluentd/agent_spec.rb +91 -0
- data/spec/models/fluentd/setting/common_spec.rb +178 -0
- data/spec/models/fluentd/setting/in_syslog_spec.rb +35 -0
- data/spec/models/fluentd/setting/out_mongo_spec.rb +40 -0
- data/spec/models/fluentd/setting/out_td_spec.rb +38 -0
- data/spec/models/fluentd_spec.rb +166 -0
- data/spec/models/plugin_spec.rb +191 -0
- data/spec/models/user_spec.rb +15 -0
- data/spec/spec_helper.rb +58 -0
- data/spec/support/fixtures/error0.log +12 -0
- data/spec/support/fixtures/error2.log +130 -0
- data/spec/support/fluentd_agent_common_behavior.rb +114 -0
- data/spec/support/fluentd_agent_restart_strategy.rb +94 -0
- data/tmp/.gitkeep +0 -0
- data/vendor/assets/javascripts/.keep +0 -0
- data/vendor/assets/javascripts/bower/es6-promise/.bower.json +15 -0
- data/vendor/assets/javascripts/bower/es6-promise/bower.json +5 -0
- data/vendor/assets/javascripts/bower/es6-promise/promise.js +684 -0
- data/vendor/assets/javascripts/bower/es6-promise/promise.min.js +1 -0
- data/vendor/assets/javascripts/bower/lodash/.bower.json +33 -0
- data/vendor/assets/javascripts/bower/lodash/LICENSE.txt +22 -0
- data/vendor/assets/javascripts/bower/lodash/bower.json +23 -0
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.js +7157 -0
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.min.js +61 -0
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.js +6785 -0
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.min.js +56 -0
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.js +4979 -0
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.min.js +39 -0
- data/vendor/assets/javascripts/bower/vue/.bower.json +29 -0
- data/vendor/assets/javascripts/bower/vue/LICENSE +21 -0
- data/vendor/assets/javascripts/bower/vue/dist/vue.js +4713 -0
- data/vendor/assets/javascripts/bower/vue/dist/vue.min.js +7 -0
- data/vendor/assets/javascripts/bower/vue/src/batcher.js +45 -0
- data/vendor/assets/javascripts/bower/vue/src/binding.js +103 -0
- data/vendor/assets/javascripts/bower/vue/src/compiler.js +1037 -0
- data/vendor/assets/javascripts/bower/vue/src/config.js +19 -0
- data/vendor/assets/javascripts/bower/vue/src/deps-parser.js +65 -0
- data/vendor/assets/javascripts/bower/vue/src/directive.js +258 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/html.js +41 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/if.js +56 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/index.js +129 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/model.js +174 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/on.js +56 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/partial.js +50 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/repeat.js +246 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/style.js +40 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/view.js +56 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/with.js +50 -0
- data/vendor/assets/javascripts/bower/vue/src/emitter.js +97 -0
- data/vendor/assets/javascripts/bower/vue/src/exp-parser.js +190 -0
- data/vendor/assets/javascripts/bower/vue/src/filters.js +190 -0
- data/vendor/assets/javascripts/bower/vue/src/fragment.js +84 -0
- data/vendor/assets/javascripts/bower/vue/src/main.js +186 -0
- data/vendor/assets/javascripts/bower/vue/src/observer.js +446 -0
- data/vendor/assets/javascripts/bower/vue/src/text-parser.js +96 -0
- data/vendor/assets/javascripts/bower/vue/src/transition.js +228 -0
- data/vendor/assets/javascripts/bower/vue/src/utils.js +321 -0
- data/vendor/assets/javascripts/bower/vue/src/viewmodel.js +180 -0
- data/vendor/assets/javascripts/sb-admin-v2/bootstrap.js +1951 -0
- data/vendor/assets/javascripts/sb-admin-v2/bootstrap.min.js +6 -0
- data/vendor/assets/javascripts/sb-admin-v2/demo/dashboard-demo.js +117 -0
- data/vendor/assets/javascripts/sb-admin-v2/demo/flot-demo.js +1242 -0
- data/vendor/assets/javascripts/sb-admin-v2/demo/morris-demo.js +155 -0
- data/vendor/assets/javascripts/sb-admin-v2/jquery-1.10.2.js +6 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.js +245 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/jquery.dataTables.js +14013 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/excanvas.min.js +1 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.js +2599 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.pie.js +750 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.resize.js +60 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.tooltip.min.js +12 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/metisMenu/jquery.metisMenu.js +45 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/morris.js +1888 -0
- data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/raphael-2.1.0.min.js +10 -0
- data/vendor/assets/javascripts/sb-admin-v2/sb-admin.js +18 -0
- data/vendor/assets/stylesheets/.keep +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.css +5830 -0
- data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.min.css +7 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.css +1338 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.min.css +4 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/FontAwesome.otf +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.svg +414 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_bordered-pulled.scss +16 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_core.scss +12 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_fixed-width.scss +6 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_icons.scss +412 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_larger.scss +13 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_list.scss +19 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_mixins.scss +20 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_path.scss +14 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_rotated-flipped.scss +9 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_spinning.scss +30 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_stacked.scss +20 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_variables.scss +381 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/font-awesome.scss +17 -0
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.svg +229 -0
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.css +233 -0
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/morris/morris-0.4.3.min.css +2 -0
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/social-buttons/social-buttons.css +68 -0
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/timeline/timeline.css +144 -0
- data/vendor/assets/stylesheets/sb-admin-v2/sb-admin.css +329 -0
- data/vendor/patterns/firewalls +60 -0
- data/vendor/patterns/grok-patterns +94 -0
- data/vendor/patterns/haproxy +37 -0
- data/vendor/patterns/java +3 -0
- data/vendor/patterns/junos +9 -0
- data/vendor/patterns/linux-syslog +16 -0
- data/vendor/patterns/mcollective +1 -0
- data/vendor/patterns/mcollective-patterns +4 -0
- data/vendor/patterns/mongodb +4 -0
- data/vendor/patterns/nagios +108 -0
- data/vendor/patterns/postgresql +3 -0
- data/vendor/patterns/redis +3 -0
- data/vendor/patterns/ruby +2 -0
- 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
|
+
}
|