aleph_analytics 0.0.0.alpha
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +70 -0
- data/Gemfile.lock +489 -0
- data/LICENSE +21 -0
- data/Procfile +2 -0
- data/README.md +1 -0
- data/ROADMAP.md +7 -0
- data/Rakefile +9 -0
- data/app/assets/fonts/octicons-local.ttf +0 -0
- data/app/assets/fonts/octicons.eot +0 -0
- data/app/assets/fonts/octicons.svg +183 -0
- data/app/assets/fonts/octicons.ttf +0 -0
- data/app/assets/fonts/octicons.woff +0 -0
- data/app/assets/javascripts/angular/aleph.js.es6 +90 -0
- data/app/assets/javascripts/angular/config/schema_completer_config.js.es6 +71 -0
- data/app/assets/javascripts/angular/controllers/alerts/alert_index_controller.js.es6 +16 -0
- data/app/assets/javascripts/angular/controllers/alerts/alert_show_controller.js.es6 +99 -0
- data/app/assets/javascripts/angular/controllers/controllers.js.es6 +65 -0
- data/app/assets/javascripts/angular/controllers/query/query_index_controller.js.es6 +80 -0
- data/app/assets/javascripts/angular/controllers/query/query_repl_controller.js.es6 +147 -0
- data/app/assets/javascripts/angular/controllers/query/query_show_controller.js.es6 +43 -0
- data/app/assets/javascripts/angular/controllers/schema/schema_index_controller.js.es6 +61 -0
- data/app/assets/javascripts/angular/controllers/snippet/snippet_index_controller.js.es6 +80 -0
- data/app/assets/javascripts/angular/directives/directives.js.es6 +30 -0
- data/app/assets/javascripts/angular/directives/query/query_details_directive.js.es6 +87 -0
- data/app/assets/javascripts/angular/directives/query/query_version_sidebar_directive.js.es6 +65 -0
- data/app/assets/javascripts/angular/directives/result/result_directive.js.es6 +59 -0
- data/app/assets/javascripts/angular/directives/result/results_directive.js.es6 +30 -0
- data/app/assets/javascripts/angular/directives/visualization_directive.js.es6 +101 -0
- data/app/assets/javascripts/angular/filters/filters.js.es6 +27 -0
- data/app/assets/javascripts/angular/services/alert/alert.js.es6 +51 -0
- data/app/assets/javascripts/angular/services/alert/alert_resource.js.es6 +10 -0
- data/app/assets/javascripts/angular/services/lib/ace_completers.js.es6 +29 -0
- data/app/assets/javascripts/angular/services/lib/ace_sql_parse.js.es6 +156 -0
- data/app/assets/javascripts/angular/services/lib/action_handler.js.es6 +73 -0
- data/app/assets/javascripts/angular/services/lib/alert_flash.js.es6 +30 -0
- data/app/assets/javascripts/angular/services/lib/default_ace_configurator_service.js.es6 +74 -0
- data/app/assets/javascripts/angular/services/lib/github_url_service.js.es6 +53 -0
- data/app/assets/javascripts/angular/services/lib/keyword_completer.js.es6 +36 -0
- data/app/assets/javascripts/angular/services/lib/local_resource.js.es6 +20 -0
- data/app/assets/javascripts/angular/services/lib/lock_service.js.es6 +48 -0
- data/app/assets/javascripts/angular/services/lib/locking_poll_service.js.es6 +42 -0
- data/app/assets/javascripts/angular/services/lib/matcher_runner.js.es6 +65 -0
- data/app/assets/javascripts/angular/services/lib/navigation_guard.js.es6 +45 -0
- data/app/assets/javascripts/angular/services/lib/open_repl_service.js.es6 +56 -0
- data/app/assets/javascripts/angular/services/lib/page_title_manager.js.es6 +38 -0
- data/app/assets/javascripts/angular/services/lib/pagination.js.es6 +114 -0
- data/app/assets/javascripts/angular/services/lib/pagination_components.js.es6 +91 -0
- data/app/assets/javascripts/angular/services/lib/parameter_methods.js.es6 +35 -0
- data/app/assets/javascripts/angular/services/lib/role_model.js.es6 +21 -0
- data/app/assets/javascripts/angular/services/lib/schema_completer.js.es6 +56 -0
- data/app/assets/javascripts/angular/services/lib/selection_tag_input.js.es6 +42 -0
- data/app/assets/javascripts/angular/services/lib/server_configurations.js.es6 +15 -0
- data/app/assets/javascripts/angular/services/lib/spinner_state.js.es6 +45 -0
- data/app/assets/javascripts/angular/services/lib/tag_resource.js.es6 +14 -0
- data/app/assets/javascripts/angular/services/model/collection_dirty_awareness.js.es6 +33 -0
- data/app/assets/javascripts/angular/services/model/collection_model_base.js.es6 +75 -0
- data/app/assets/javascripts/angular/services/model/dirty_aware_collection_model.js.es6 +31 -0
- data/app/assets/javascripts/angular/services/model/dirty_aware_model.js.es6 +50 -0
- data/app/assets/javascripts/angular/services/model/model_base.js.es6 +80 -0
- data/app/assets/javascripts/angular/services/model/model_state.js.es6 +51 -0
- data/app/assets/javascripts/angular/services/model/models.js.es6 +15 -0
- data/app/assets/javascripts/angular/services/model/unpersisted_model.js.es6 +20 -0
- data/app/assets/javascripts/angular/services/model_generation/model_factory.js.es6 +28 -0
- data/app/assets/javascripts/angular/services/model_generation/model_generation.js.es6 +13 -0
- data/app/assets/javascripts/angular/services/model_generation/model_manager.js.es6 +86 -0
- data/app/assets/javascripts/angular/services/model_generation/resource_factory.js.es6 +38 -0
- data/app/assets/javascripts/angular/services/model_generation/standard_collection_model.js.es6 +25 -0
- data/app/assets/javascripts/angular/services/model_generation/standard_model.js.es6 +38 -0
- data/app/assets/javascripts/angular/services/query/query.js.es6 +55 -0
- data/app/assets/javascripts/angular/services/query/query_handler.js.es6 +40 -0
- data/app/assets/javascripts/angular/services/query/query_loader.js.es6 +54 -0
- data/app/assets/javascripts/angular/services/query/query_request_transformers.js.es6 +26 -0
- data/app/assets/javascripts/angular/services/query/query_resource.js.es6 +21 -0
- data/app/assets/javascripts/angular/services/query/query_tab.js.es6 +63 -0
- data/app/assets/javascripts/angular/services/query/query_versions.js.es6 +21 -0
- data/app/assets/javascripts/angular/services/result/result.js.es6 +26 -0
- data/app/assets/javascripts/angular/services/result/result_poller.js.es6 +30 -0
- data/app/assets/javascripts/angular/services/result/result_runner.js.es6 +48 -0
- data/app/assets/javascripts/angular/services/result/results.js.es6 +10 -0
- data/app/assets/javascripts/angular/services/schema/schema_column.js.es6 +93 -0
- data/app/assets/javascripts/angular/services/schema/schema_column_resource.js.es6 +12 -0
- data/app/assets/javascripts/angular/services/schema/schema_columns.js.es6 +57 -0
- data/app/assets/javascripts/angular/services/schema/schema_comment_resource.js.es6 +12 -0
- data/app/assets/javascripts/angular/services/services.js.es6 +140 -0
- data/app/assets/javascripts/angular/services/snippet/ace_snippet_manager.js.es6 +44 -0
- data/app/assets/javascripts/angular/services/visualization/source_renderer.js.es6 +70 -0
- data/app/assets/javascripts/angular/services/visualization/visualization.js.es6 +47 -0
- data/app/assets/javascripts/angular/services/visualization/visualization_service.js.es6 +67 -0
- data/app/assets/javascripts/angular/services/visualization/visualizations.js.es6 +11 -0
- data/app/assets/javascripts/application.js +22 -0
- data/app/assets/javascripts/lib/key_binding.js +24 -0
- data/app/assets/javascripts/lib/serialized_storage.js +11 -0
- data/app/assets/javascripts/lib/underscore_contrib/array_builders.js +190 -0
- data/app/assets/javascripts/lib/underscore_contrib/function_predicates.js +95 -0
- data/app/assets/javascripts/lib/underscore_contrib/object_builders.js +111 -0
- data/app/assets/javascripts/lib/underscore_contrib/object_selectors.js +112 -0
- data/app/assets/javascripts/lib/underscore_contrib/util_existential.js +15 -0
- data/app/assets/javascripts/lib/utils.js +29 -0
- data/app/assets/stylesheets/alert_bar.css.sass +13 -0
- data/app/assets/stylesheets/alerts.css.sass +66 -0
- data/app/assets/stylesheets/application.css.sass +35 -0
- data/app/assets/stylesheets/comments.css.sass +7 -0
- data/app/assets/stylesheets/index_components.css.sass +105 -0
- data/app/assets/stylesheets/queries.css.sass +110 -0
- data/app/assets/stylesheets/repl.css.sass +59 -0
- data/app/assets/stylesheets/results.css.sass +25 -0
- data/app/assets/stylesheets/schemas.css.sass +56 -0
- data/app/assets/stylesheets/sessions.css.sass +9 -0
- data/app/assets/stylesheets/shared.css.sass +157 -0
- data/app/assets/stylesheets/sidebar.css.sass +85 -0
- data/app/assets/stylesheets/snippets.css.sass +15 -0
- data/app/assets/stylesheets/sort_bar.css.sass +10 -0
- data/app/assets/stylesheets/spinners.css.sass +67 -0
- data/app/assets/stylesheets/summary.css.sass +16 -0
- data/app/assets/stylesheets/variables.css.sass +110 -0
- data/app/assets/stylesheets/visualizations.css.sass +15 -0
- data/app/controllers/alerts_controller.rb +72 -0
- data/app/controllers/application_controller.rb +38 -0
- data/app/controllers/columns_controller.rb +21 -0
- data/app/controllers/queries_controller.rb +85 -0
- data/app/controllers/query_versions_controller.rb +38 -0
- data/app/controllers/result_csvs_controller.rb +29 -0
- data/app/controllers/results_controller.rb +53 -0
- data/app/controllers/roles_controller.rb +9 -0
- data/app/controllers/schema_comments_controller.rb +47 -0
- data/app/controllers/snippets_controller.rb +67 -0
- data/app/controllers/tags_controller.rb +19 -0
- data/app/controllers/visualizations_controller.rb +61 -0
- data/app/mailers/alert_mailer.rb +8 -0
- data/app/models/ability.rb +31 -0
- data/app/models/alert.rb +139 -0
- data/app/models/alert_execution.rb +25 -0
- data/app/models/query.rb +85 -0
- data/app/models/query_execution.rb +39 -0
- data/app/models/query_role.rb +3 -0
- data/app/models/query_version.rb +61 -0
- data/app/models/result.rb +67 -0
- data/app/models/schema_comment.rb +3 -0
- data/app/models/snippet.rb +3 -0
- data/app/models/user.rb +19 -0
- data/app/models/visualization.rb +7 -0
- data/app/serializers/alert_serializer.rb +10 -0
- data/app/serializers/query_index_serializer.rb +7 -0
- data/app/serializers/query_serializer.rb +8 -0
- data/app/serializers/query_version_serializer.rb +3 -0
- data/app/serializers/result_serializer.rb +3 -0
- data/app/views/alert_mailer/alert_failing_email.html.haml +17 -0
- data/app/views/alerts/_index.html.haml +10 -0
- data/app/views/alerts/_index_item.html.haml +25 -0
- data/app/views/alerts/_index_sidebar.html.haml +20 -0
- data/app/views/alerts/_index_sort_bar.html.haml +22 -0
- data/app/views/alerts/_show.html.haml +90 -0
- data/app/views/application/_rollbar.html.erb +9 -0
- data/app/views/application/index.html.haml +1 -0
- data/app/views/application/unauthorized.html.haml +5 -0
- data/app/views/application/unauthorized.json +3 -0
- data/app/views/devise/sessions/new.html.haml +22 -0
- data/app/views/layouts/application.html.haml +78 -0
- data/app/views/queries/_alert.html.haml +6 -0
- data/app/views/queries/_comments.html.haml +5 -0
- data/app/views/queries/_index.html.haml +15 -0
- data/app/views/queries/_index_item.html.haml +37 -0
- data/app/views/queries/_index_sidebar.html.haml +58 -0
- data/app/views/queries/_index_sort_bar.html.haml +29 -0
- data/app/views/queries/_query_details.html.haml +81 -0
- data/app/views/queries/_query_version_sidebar.html.haml +46 -0
- data/app/views/queries/_repl.html.haml +79 -0
- data/app/views/queries/_results.html.haml +29 -0
- data/app/views/queries/_role_template.html.haml +3 -0
- data/app/views/queries/_show.html.haml +28 -0
- data/app/views/queries/_tag_template.html.haml +3 -0
- data/app/views/results/_show.html.haml +45 -0
- data/app/views/schemas/_index.html.haml +47 -0
- data/app/views/snippets/_index.html.haml +30 -0
- data/app/views/snippets/_index_item.html.haml +20 -0
- data/app/views/visualizations/_show.html.haml +83 -0
- data/bin/aleph +71 -0
- data/bin/bundle +3 -0
- data/bin/executables/bundle_runner.rb +12 -0
- data/bin/executables/clock.rb +7 -0
- data/bin/executables/deps.rb +10 -0
- data/bin/executables/import_env_variables.rb +17 -0
- data/bin/executables/init_db.rb +7 -0
- data/bin/executables/lib/config_generator.rb +51 -0
- data/bin/executables/lib/env_writer.rb +25 -0
- data/bin/executables/lib/import_env_file.rb +19 -0
- data/bin/executables/lib/seeder.rb +14 -0
- data/bin/executables/lib/utils.rb +30 -0
- data/bin/executables/playground.rb +130 -0
- data/bin/executables/seed_playground_db.rb +9 -0
- data/bin/executables/update_db.rb +7 -0
- data/bin/executables/web_server.rb +12 -0
- data/bin/executables/worker.rb +7 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/config/application.rb +59 -0
- data/config/attribute-map.yml +4 -0
- data/config/boot.rb +4 -0
- data/config/database.yml +40 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +37 -0
- data/config/environments/playground.rb +55 -0
- data/config/environments/production.rb +68 -0
- data/config/environments/staging.rb +75 -0
- data/config/environments/test.rb +46 -0
- data/config/initializers/01_internalize_configurations.rb +70 -0
- data/config/initializers/action_controller_renderers.rb +15 -0
- data/config/initializers/active_model_serializer.rb +7 -0
- data/config/initializers/assets.rb +8 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/cookies_serializer.rb +3 -0
- data/config/initializers/default_enviorment_variables.rb +8 -0
- data/config/initializers/devise.rb +297 -0
- data/config/initializers/filter_parameter_logging.rb +4 -0
- data/config/initializers/haml.rb +1 -0
- data/config/initializers/inflections.rb +16 -0
- data/config/initializers/mime_types.rb +4 -0
- data/config/initializers/net_http.rb +1 -0
- data/config/initializers/pester.rb +15 -0
- data/config/initializers/rails_admin.rb +27 -0
- data/config/initializers/redis.rb +14 -0
- data/config/initializers/rollbar.rb +45 -0
- data/config/initializers/session_store.rb +3 -0
- data/config/initializers/sql_logging_patch.rb +7 -0
- data/config/initializers/to_bool.rb +29 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/devise.en.yml +62 -0
- data/config/locales/en.yml +23 -0
- data/config/puma.rb +10 -0
- data/config/resque-pool.yml +15 -0
- data/config/resque.yml +10 -0
- data/config/routes.rb +33 -0
- data/config/secrets.yml +26 -0
- data/config.ru +4 -0
- data/db/migrate/20140710204753_database_begin.rb +150 -0
- data/lib/aleph_log_formatter.rb +5 -0
- data/lib/authentication.rb +17 -0
- data/lib/aws_s3.rb +7 -0
- data/lib/clock.rb +7 -0
- data/lib/compilable_parameter.rb +50 -0
- data/lib/count_publisher.rb +26 -0
- data/lib/csv_helper/aws.rb +30 -0
- data/lib/csv_helper/base.rb +20 -0
- data/lib/csv_helper/local.rb +18 -0
- data/lib/csv_serializer.rb +23 -0
- data/lib/csv_service.rb +12 -0
- data/lib/github/blob.rb +23 -0
- data/lib/github/commit.rb +37 -0
- data/lib/github/pusher.rb +94 -0
- data/lib/github/refs.rb +39 -0
- data/lib/github/tree.rb +29 -0
- data/lib/github.rb +64 -0
- data/lib/interaction/query_creation.rb +27 -0
- data/lib/interaction/query_interaction.rb +35 -0
- data/lib/interaction/query_update.rb +62 -0
- data/lib/interaction/result_creation.rb +48 -0
- data/lib/pagination_search/attribute_set.rb +61 -0
- data/lib/pagination_search/base_relation.rb +80 -0
- data/lib/pagination_search/hash_paginate.rb +74 -0
- data/lib/pagination_search/paginated_records.rb +16 -0
- data/lib/pagination_search/pagination.rb +12 -0
- data/lib/pagination_search/search_conditions.rb +59 -0
- data/lib/query_version_support.rb +14 -0
- data/lib/redis_result_row_count.rb +26 -0
- data/lib/redshift_connection_pool.rb +8 -0
- data/lib/redshift_pg/connection.rb +44 -0
- data/lib/redshift_pg/redshift_pg.rb +15 -0
- data/lib/result_csv_generator.rb +40 -0
- data/lib/role.rb +40 -0
- data/lib/sample_skimmer.rb +30 -0
- data/lib/schema_comment_matcher.rb +27 -0
- data/lib/schemas/descriptor.rb +85 -0
- data/lib/schemas/descriptors.rb +10 -0
- data/lib/schemas/paginate.rb +21 -0
- data/lib/schemas/redis_store.rb +22 -0
- data/lib/simple_cache.rb +13 -0
- data/lib/sql_compiler.rb +33 -0
- data/lib/summarizer.rb +18 -0
- data/lib/tasks/karma.rake +32 -0
- data/lib/tasks/resque_setup.rake +18 -0
- data/playground_data/1.csv +13 -0
- data/playground_data/aleph.playground.sqlite3 +0 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +25 -0
- data/public/aleph.png +0 -0
- data/public/assets/.sprockets-manifest-24b5998edb20c5b4d6edf39d44cd3ff7.json +1 -0
- data/public/assets/FontAwesome-9ccfa32dd4cd1b8e83f68899d85bd5e6.otf +0 -0
- data/public/assets/ZeroClipboard-8b5c117b88fe37e32fd34a70fdf60026.swf +0 -0
- data/public/assets/angular/aleph.js-19b4df67407de5dab249abfc391c0eaf.es6 +90 -0
- data/public/assets/angular/config/schema_completer_config.js-1b696920b5e04f75620630d75117b201.es6 +71 -0
- data/public/assets/angular/controllers/alerts/alert_index_controller.js-4344581b1e9b456c3f991f96bb4d403d.es6 +16 -0
- data/public/assets/angular/controllers/alerts/alert_show_controller.js-a984dc82fbcac380cdc8682bf8986933.es6 +99 -0
- data/public/assets/angular/controllers/controllers.js-7431ae468ea2f0d392661448a61cfdf3.es6 +65 -0
- data/public/assets/angular/controllers/query/query_index_controller.js-828eadeee6a971b11b5c07f65f0c6def.es6 +80 -0
- data/public/assets/angular/controllers/query/query_repl_controller.js-3c4bac22e41766e2e83e720d53acade3.es6 +147 -0
- data/public/assets/angular/controllers/query/query_show_controller.js-020c83fd94ece7d55bd94b9981a40083.es6 +43 -0
- data/public/assets/angular/controllers/schema/schema_index_controller.js-d0d790d168b49caefa4b8f7993c928f1.es6 +61 -0
- data/public/assets/angular/controllers/snippet/snippet_index_controller.js-9191ee2e37d16d5807b8a7f45530a6c2.es6 +80 -0
- data/public/assets/angular/directives/directives.js-44fda752585bddc5d026feaab8b14108.es6 +30 -0
- data/public/assets/angular/directives/query/query_details_directive.js-2dd979e2463826558f166d9dc9e2c8a9.es6 +87 -0
- data/public/assets/angular/directives/query/query_version_sidebar_directive.js-b19ba8a9bf4e66c5740e9b9f9495cee1.es6 +65 -0
- data/public/assets/angular/directives/result/result_directive.js-76c151e9277e35578f92b076c2fa5b06.es6 +59 -0
- data/public/assets/angular/directives/result/results_directive.js-fcbf9750790823a11ca313e630bd2b0f.es6 +30 -0
- data/public/assets/angular/directives/visualization_directive.js-82cb45a52eba62deb283a3699add1b33.es6 +101 -0
- data/public/assets/angular/filters/filters.js-48cdb16fc89337e861c9f18ad57fd9bf.es6 +27 -0
- data/public/assets/angular/services/alert/alert.js-a76ea96e948de324fcc00f3ef3ecae4e.es6 +51 -0
- data/public/assets/angular/services/alert/alert_resource.js-ac68ea99936eb213c0fb37d4fbb1511a.es6 +10 -0
- data/public/assets/angular/services/lib/ace_completers.js-5353182bc538210dad12865ad6a060fd.es6 +29 -0
- data/public/assets/angular/services/lib/ace_sql_parse.js-4114a8ad4fe4dbf4f72c0ab7fca22e83.es6 +156 -0
- data/public/assets/angular/services/lib/action_handler.js-85a8f75f507efcf2fe950fa7717b6976.es6 +73 -0
- data/public/assets/angular/services/lib/alert_flash.js-7a4fe7ef5510a224677a12ecf2fe973b.es6 +30 -0
- data/public/assets/angular/services/lib/default_ace_configurator_service.js-9b83d6b53495dafe10bfed5074c3ec01.es6 +74 -0
- data/public/assets/angular/services/lib/github_url_service.js-719084a625f60d20c24097f00813b481.es6 +53 -0
- data/public/assets/angular/services/lib/keyword_completer.js-560b51694457619401c72431dd7b647e.es6 +36 -0
- data/public/assets/angular/services/lib/local_resource.js-9b57357ed203c783708e48154721242a.es6 +20 -0
- data/public/assets/angular/services/lib/lock_service.js-32eb33fda9c27fb5643b25c63099b52c.es6 +48 -0
- data/public/assets/angular/services/lib/locking_poll_service.js-d0271cc07d20ec73291e7175e1714d42.es6 +42 -0
- data/public/assets/angular/services/lib/matcher_runner.js-bd63f4c6ad965716c5b793d3c4602563.es6 +65 -0
- data/public/assets/angular/services/lib/navigation_guard.js-5c7497900f99319f3ef76b83662c20cd.es6 +45 -0
- data/public/assets/angular/services/lib/open_repl_service.js-2332490470ea58f3e5ce7f6fe5dd2659.es6 +56 -0
- data/public/assets/angular/services/lib/page_title_manager.js-227f9ddb49d23bfa934bf216ef96ccbd.es6 +38 -0
- data/public/assets/angular/services/lib/pagination.js-baa9a496d01b87f90c588c51864d1533.es6 +114 -0
- data/public/assets/angular/services/lib/pagination_components.js-4fcc03120d1299713347b487f1e8fd44.es6 +91 -0
- data/public/assets/angular/services/lib/parameter_methods.js-16ecb25ffb24d5870dfc17f9f408fa5b.es6 +35 -0
- data/public/assets/angular/services/lib/role_model.js-3d5072f279676294e7d17cbb4bb3adb5.es6 +21 -0
- data/public/assets/angular/services/lib/schema_completer.js-d04d49642967fd9f8e2c95e0df81f2ae.es6 +56 -0
- data/public/assets/angular/services/lib/selection_tag_input.js-86cc6d564c108d722951b6fcd2b51221.es6 +42 -0
- data/public/assets/angular/services/lib/server_configurations.js-fd8c16a3d02926e7597240566808c141.es6 +15 -0
- data/public/assets/angular/services/lib/spinner_state.js-315bb62df18f9370a89f8b865eb1766a.es6 +45 -0
- data/public/assets/angular/services/lib/tag_resource.js-8849bbdd579bd38b36a362bed926c2f2.es6 +14 -0
- data/public/assets/angular/services/model/collection_dirty_awareness.js-8a78450bd8b565fb03633ab735893508.es6 +33 -0
- data/public/assets/angular/services/model/collection_model_base.js-8092335acde425d28718c1a9fc677d39.es6 +75 -0
- data/public/assets/angular/services/model/dirty_aware_collection_model.js-6f4d2b409a033f5ffc6bd5a747df2046.es6 +31 -0
- data/public/assets/angular/services/model/dirty_aware_model.js-ec1a086f3ec459827dbd5381bd970975.es6 +50 -0
- data/public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6 +80 -0
- data/public/assets/angular/services/model/model_state.js-3e96e381ea7a9eff857081ffbf3a8bab.es6 +51 -0
- data/public/assets/angular/services/model/models.js-6798762a6e263be75c7c4e9f8a19da66.es6 +15 -0
- data/public/assets/angular/services/model/unpersisted_model.js-49597959c989e68c713fd826743bb7b5.es6 +20 -0
- data/public/assets/angular/services/model_generation/model_factory.js-0bccc6a2e9b4738c67230fc68d9780ae.es6 +28 -0
- data/public/assets/angular/services/model_generation/model_generation.js-f08c6eff199b5ad02b2e2bdf866d69ff.es6 +13 -0
- data/public/assets/angular/services/model_generation/model_manager.js-b05d8f00bc4499c50098ae31013de88c.es6 +86 -0
- data/public/assets/angular/services/model_generation/resource_factory.js-e8ce2f4be9383d885dbb965c8e425bab.es6 +38 -0
- data/public/assets/angular/services/model_generation/standard_collection_model.js-19c44dc3a937a85d825c5a2f020a6769.es6 +25 -0
- data/public/assets/angular/services/model_generation/standard_model.js-74439b041eebfc7e0fad454cf6e32192.es6 +38 -0
- data/public/assets/angular/services/query/query.js-7b6228d0a5c1a6ea76242f4aa49aafd0.es6 +55 -0
- data/public/assets/angular/services/query/query_handler.js-d8cb3c66bcf6d16cd13bb5bcd0921496.es6 +40 -0
- data/public/assets/angular/services/query/query_loader.js-1fbc8b859778d46b73b9adc300984851.es6 +54 -0
- data/public/assets/angular/services/query/query_request_transformers.js-522901477c7848324cd5c014005a85c8.es6 +26 -0
- data/public/assets/angular/services/query/query_resource.js-b809fbfd1c379619fa07ef8e52509810.es6 +21 -0
- data/public/assets/angular/services/query/query_tab.js-fe34f5e6d0c813d2d92838be14cd6783.es6 +63 -0
- data/public/assets/angular/services/query/query_versions.js-aa3aec9021354a7394797101ea500887.es6 +21 -0
- data/public/assets/angular/services/result/result.js-be8178c80c767a651a97537b2b0149d5.es6 +26 -0
- data/public/assets/angular/services/result/result_poller.js-b15617d53f164cbe5636bb5573a70504.es6 +30 -0
- data/public/assets/angular/services/result/result_runner.js-ce2c5b3121c8e67903c302e600749c14.es6 +48 -0
- data/public/assets/angular/services/result/results.js-53088d6088f6b4783b274a64322d361c.es6 +10 -0
- data/public/assets/angular/services/schema/schema_column.js-3908faecc9874fa08484d7490701a7d4.es6 +93 -0
- data/public/assets/angular/services/schema/schema_column_resource.js-a6982ce9698b104192c4e455300df455.es6 +12 -0
- data/public/assets/angular/services/schema/schema_columns.js-c63a16e2e0778a885bd27c7cf2ed7d88.es6 +57 -0
- data/public/assets/angular/services/schema/schema_comment_resource.js-20254ea1a4e7b4850c9f21f9619130ce.es6 +12 -0
- data/public/assets/angular/services/services.js-6225c5ea24a9082506d1932d7884b53b.es6 +140 -0
- data/public/assets/angular/services/snippet/ace_snippet_manager.js-dbbba5d8ad5040042b469b294c4d7228.es6 +44 -0
- data/public/assets/angular/services/visualization/source_renderer.js-d7274c88b067a35f2e91bf7f39be7d47.es6 +70 -0
- data/public/assets/angular/services/visualization/visualization.js-23e36c87721aa263dd3f99769027cabb.es6 +47 -0
- data/public/assets/angular/services/visualization/visualization_service.js-25de86b5ceef60cf2b1dfde5fb0e9216.es6 +67 -0
- data/public/assets/angular/services/visualization/visualizations.js-1227bc3dcd67e85c8050d82360a26d53.es6 +11 -0
- data/public/assets/application-9153e0bf570016651e5eb8c67e037d3a.css +10 -0
- data/public/assets/application-ef5c2ae95804ac9785f190a9aea7ad8b.js +149 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-448c34a56d699c29117adc64c43affeb.woff2 +0 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-89889688147bd7575d6327160d64e760.svg +288 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-f4769f9bdb7466be65088239c12046d1.eot +0 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
- data/public/assets/fontawesome-webfont-4f0022f25672c7f501c339cbf98d9117.ttf +0 -0
- data/public/assets/fontawesome-webfont-776d58f453c8fe5d6a89e9c31ee223ff.svg +504 -0
- data/public/assets/fontawesome-webfont-90186830c9c50a0fed932494581761d9.eot +0 -0
- data/public/assets/fontawesome-webfont-926c93d201fe51c8f351e858468980c3.woff2 +0 -0
- data/public/assets/fontawesome-webfont-fdf491ce5ff5b2da02708cd0e9864719.woff +0 -0
- data/public/assets/glyphicons-halflings-regular-0a5c48c69a25a93e37ed62db813387fa.svg +229 -0
- data/public/assets/glyphicons-halflings-regular-47da44498fc073d9fff9ab0cdb0bef8e.ttf +0 -0
- data/public/assets/glyphicons-halflings-regular-5eae1f7217b606d3580dd70ac840fea1.woff +0 -0
- data/public/assets/glyphicons-halflings-regular-aa16cd35628e6dddf56e766c9aa4ae63.eot +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-2a44fbdb7360c60122bcf6dcef0387d8.png +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_75_ffffff_40x100-8692e6efddf882acbff144c38ea7dfdf.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_55_fbf9ee_1x400-f8f4558e0b92ff2cd6136781533902ec.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_65_ffffff_1x400-e5a8f32e28fd5c27bf0fed33c8a8b9b5.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_75_dadada_1x400-c12c6510dad3ebfa64c8a30e959a2469.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_75_e6e6e6_1x400-f4254356c2a8c9a383205ef2c4de22c4.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-5a3be2d8fff8324d59aec3df7b0a0c83.png +0 -0
- data/public/assets/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-72c593d16e998952cd8d798fee33c6f3.png +0 -0
- data/public/assets/jquery-ui/ui-icons_222222_256x240-9129e086dc488d8bcaf808510bc646ba.png +0 -0
- data/public/assets/jquery-ui/ui-icons_2e83ff_256x240-25162bf857a8eb83ea932a58436e1049.png +0 -0
- data/public/assets/jquery-ui/ui-icons_454545_256x240-771099482bdc1571ece41073b1752596.png +0 -0
- data/public/assets/jquery-ui/ui-icons_888888_256x240-faf6f5dc44e713178784c1fb053990aa.png +0 -0
- data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240-5d8808d43cefca6f6781a5316d176632.png +0 -0
- data/public/assets/octicons-0a82c1edade24862533bbe96ebeaea47.eot +0 -0
- data/public/assets/octicons-103abd6cc0199e2519ef6f1aac4bb0e0.ttf +0 -0
- data/public/assets/octicons-adc17600a2b7a648eba306c2e1426b85.svg +183 -0
- data/public/assets/octicons-be82065223a03ba577de159d97a5d63d.woff +0 -0
- data/public/assets/octicons-local-72e4167c13648cb89e9e96cdd212cb82.ttf +0 -0
- data/public/assets/rails_admin/aristo/images/bg_fallback-a7547e71656b1e538b93ddb49dfc98d3.png +0 -0
- data/public/assets/rails_admin/aristo/images/icon_sprite-415c1eec8a2d31d217d4d1d5a1d44345.png +0 -0
- data/public/assets/rails_admin/aristo/images/progress_bar-449b2fab5cf4122c17a416f6e26569fe.gif +0 -0
- data/public/assets/rails_admin/aristo/images/slider_handles-ba57b6efb64ca6263f77ce2624ad71ee.png +0 -0
- data/public/assets/rails_admin/aristo/images/ui-icons_222222_256x240-a2c05c5e967f9cf4dae51c1243b3b93c.png +0 -0
- data/public/assets/rails_admin/aristo/images/ui-icons_454545_256x240-a7a7eff72c4f562524dc472824aab656.png +0 -0
- data/public/assets/rails_admin/base/README-f7dd742c2237cb1959438b94c7503a41.txt +2 -0
- data/public/assets/rails_admin/bootstrap/glyphicons-halflings-d4fef5262f29f592560fb59918a1c052.png +0 -0
- data/public/assets/rails_admin/bootstrap/glyphicons-halflings-white-9bbc6e9602998a385c2ea13df56470fd.png +0 -0
- data/public/assets/rails_admin/bullet_black-06d345566cf9e0f97a23bb07ab3d50d9.png +0 -0
- data/public/assets/rails_admin/bullet_white-469b537fa21b7143f719578f7426825d.png +0 -0
- data/public/assets/rails_admin/calendar-697f5a44753da70028cfd04b98ac45d2.png +0 -0
- data/public/assets/rails_admin/clock-0cc82b549af3df4f730a02335f54b0df.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_background-7aaa2a726200c0ac3ba43c01f073a93d.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hex-cbc06f4015cbb276a3dd966e1be37c25.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hsb_b-2315aba3c2fbbcfcc22869b21836c31d.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hsb_h-3120023551e3601467cf52e1c8aaae9e.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hsb_s-77a77892bdef0906fdfc3426d06108fd.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_indic-f485d07540a89502e36dc1a55cec05d0.gif +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_overlay-4b2dd6f78c4aac5cc932e845698b2db5.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_rgb_b-2315aba3c2fbbcfcc22869b21836c31d.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_rgb_g-475afe3f4f69e59ff30a445384a8d961.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_rgb_r-02de28945293fe2fd026c9be3b89955a.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_select-cdf55197d05f18c552dc35bdb858fa2a.gif +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_submit-9912e5cf348e0be359ff9b1078fbb7da.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_background-a0ab8ff3e2b85b1f8ed5a4d86967471b.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hex-065e780d7b89f7dda63a472caa7c2bdd.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hsb_b-66f5963cf1a0a2680acbcac2bb77f40d.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hsb_h-cd1f2e27122aeca17af416f328b758cd.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hsb_s-ca6f3e4f0c1fc2cb110c788018369e07.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_indic-04660eb352eb259581a36a0fe8da2d4d.gif +0 -0
- data/public/assets/rails_admin/colorpicker/custom_rgb_b-64bc0c5110f84efe32e82c58d50660f6.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_rgb_g-33fe011475956750a457b1f93f1b9075.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_rgb_r-18f2ee37089d850c52b212d8a31aac92.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_submit-9d0a14eebb9ae04edfb8099827a42968.png +0 -0
- data/public/assets/rails_admin/colorpicker/select-76bd5c10f34de24b73ff4454735d3e18.png +0 -0
- data/public/assets/rails_admin/colorpicker/select2-d3fea9a451ac2c29bcd4a82b6e4f326a.png +0 -0
- data/public/assets/rails_admin/colorpicker/slider-db040ce7280fc74269e330a862e738e6.png +0 -0
- data/public/assets/rails_admin/jquery.colorpicker-7c36c2fac54a031f6e0dfe6ad137cfb1.js +1 -0
- data/public/assets/rails_admin/jquery.colorpicker-e402a30af31a4ba5957fec816dc9239c.css +1 -0
- data/public/assets/rails_admin/logo-9b479a57b493ee824767163101a5409f.png +0 -0
- data/public/assets/rails_admin/magnifier-4fcdfd820ff2e951458af3d1309ab20c.png +0 -0
- data/public/assets/rails_admin/multiselect/icon_sprite-415c1eec8a2d31d217d4d1d5a1d44345.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-n-dark-32c1cfdd900379bf62658e475fb2ba38.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-n-light-73160d919a189ba13bd4387e3623b7e9.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-s-dark-c15e6bff59c80c5473236cf77870f31d.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-s-light-fbf43811420f67d49d4dc64c7817f72c.png +0 -0
- data/public/assets/rails_admin/rails_admin-d25a684b9f690652469ceb212fbe7b95.js +328 -0
- data/public/assets/rails_admin/rails_admin-d85fb3c8bbff377491ed5af5239cf185.css +8 -0
- data/public/assets/resque_web/application-b29b34115c3ad5c539f26114fc91e584.css +4 -0
- data/public/assets/resque_web/application-d2bc6e68cf7c6215e804fe9e3f46f1d0.js +111 -0
- data/public/assets/resque_web/idle-53474088772d9917bd463b19efa32fc3.png +0 -0
- data/public/assets/resque_web/lifebuoy-0281230b31ba4078685f4df3e8169534.png +0 -0
- data/public/assets/resque_web/poll-af53f85832c41a9cde68b08cb09711f1.png +0 -0
- data/public/assets/resque_web/rails-9c0a079bdd7701d7e729bd956823d153.png +0 -0
- data/public/assets/resque_web/working-26a36c5119cbdcc64ebade2c5f8c389d.png +0 -0
- data/public/assets/twitter/bootstrap/glyphicons-halflings-2516339970d710819585f90773aebe0a.png +0 -0
- data/public/assets/twitter/bootstrap/glyphicons-halflings-white-9bbc6e9602998a385c2ea13df56470fd.png +0 -0
- data/public/bg_big.svg +2 -0
- data/public/bg_new.svg +2 -0
- data/public/favicon.ico +0 -0
- data/public/resources/keyword_config.json +51 -0
- data/public/resources/visualization/area.html +17 -0
- data/public/resources/visualization/area_step.html +17 -0
- data/public/resources/visualization/bar.html +17 -0
- data/public/resources/visualization/custom.html +6 -0
- data/public/resources/visualization/line.html +16 -0
- data/public/resources/visualization/presets.json +13 -0
- data/public/resources/visualization/scatter.html +17 -0
- data/public/resources/visualization/spline.html +17 -0
- data/public/resources/visualization/spline_area.html +17 -0
- data/public/resources/visualization/stacked_area.html +18 -0
- data/public/resources/visualization/stacked_bar.html +18 -0
- data/public/resources/visualization/stacked_spline_area.html +18 -0
- data/public/resources/visualization/template.json +12 -0
- data/public/robots.txt +2 -0
- data/vendor/assets/javascripts/ace/ace.js +18655 -0
- data/vendor/assets/javascripts/ace/ext-language_tools.js +1937 -0
- data/vendor/assets/javascripts/ace/mode-html.js +2794 -0
- data/vendor/assets/javascripts/ace/mode-pgsql.js +1503 -0
- data/vendor/assets/javascripts/ace/snippets/coffee.js +102 -0
- data/vendor/assets/javascripts/ace/snippets/css.js +974 -0
- data/vendor/assets/javascripts/ace/snippets/haml.js +27 -0
- data/vendor/assets/javascripts/ace/snippets/html.js +835 -0
- data/vendor/assets/javascripts/ace/snippets/html_elixir.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/html_ruby.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/javascript.js +202 -0
- data/vendor/assets/javascripts/ace/snippets/json.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/jsp.js +106 -0
- data/vendor/assets/javascripts/ace/snippets/jsx.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/less.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/mysql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/pgsql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/plain_text.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/rhtml.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/sass.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/scss.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/snippets.js +16 -0
- data/vendor/assets/javascripts/ace/snippets/sql.js +33 -0
- data/vendor/assets/javascripts/ace/snippets/sqlserver.js +76 -0
- data/vendor/assets/javascripts/ace/snippets/svg.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/text.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/textile.js +37 -0
- data/vendor/assets/javascripts/ace/theme-monokai.js +105 -0
- data/vendor/assets/javascripts/angular-filter/angular-filter.js +2271 -0
- data/vendor/assets/javascripts/angular-hotkeys/hotkeys.js +1523 -0
- data/vendor/assets/javascripts/angular-selection-model/selection-model.js +563 -0
- data/vendor/assets/javascripts/angular-spinner/treasure-overlay-spinner.js +53 -0
- data/vendor/assets/javascripts/angular-ui-ace/ui-ace.js +298 -0
- data/vendor/assets/javascripts/angular-ui-bootstrap/ui-bootstrap-tpls-0.14.3.js +8503 -0
- data/vendor/assets/javascripts/d3/c3.min.js +5 -0
- data/vendor/assets/javascripts/d3/d3.v3.min.js +5 -0
- data/vendor/assets/javascripts/infinite-scroll/infinite-scroll.js +186 -0
- data/vendor/assets/javascripts/ng-clip/ngClip.js +84 -0
- data/vendor/assets/javascripts/ng-tags-input/ng-tags-input.min.js +1 -0
- data/vendor/assets/javascripts/pluralize/pluralize.js +453 -0
- data/vendor/assets/javascripts/underscore-js/underscore.js +1548 -0
- data/vendor/assets/stylesheets/angular-hotkeys/hotkeys.css +110 -0
- data/vendor/assets/stylesheets/angular-spinner/treasure-overlay-spinner.css +136 -0
- data/vendor/assets/stylesheets/c3/c3.min.css +1 -0
- data/vendor/assets/stylesheets/ng-tags-input/ng-tags-input.bootstrap.min.css +1 -0
- data/vendor/assets/stylesheets/ng-tags-input/ng-tags-input.min.css +1 -0
- data/vendor/assets/stylesheets/octicons/README.md +1 -0
- data/vendor/assets/stylesheets/octicons/sprockets-octicons.scss +217 -0
- metadata +600 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*jslint node: true */
|
|
2
|
+
/*global ZeroClipboard */
|
|
3
|
+
|
|
4
|
+
(function(window, angular, undefined) {
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
angular.module('ngClipboard', []).
|
|
8
|
+
provider('ngClip', function() {
|
|
9
|
+
var self = this;
|
|
10
|
+
this.path = '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/2.1.6/ZeroClipboard.swf';
|
|
11
|
+
return {
|
|
12
|
+
setPath: function(newPath) {
|
|
13
|
+
self.path = newPath;
|
|
14
|
+
},
|
|
15
|
+
setConfig: function(config) {
|
|
16
|
+
self.config = config;
|
|
17
|
+
},
|
|
18
|
+
$get: function() {
|
|
19
|
+
return {
|
|
20
|
+
path: self.path,
|
|
21
|
+
config: self.config
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}).
|
|
26
|
+
run(['ngClip', function(ngClip) {
|
|
27
|
+
var config = {
|
|
28
|
+
swfPath: ngClip.path,
|
|
29
|
+
trustedDomains: ["*"],
|
|
30
|
+
allowScriptAccess: "always",
|
|
31
|
+
forceHandCursor: true,
|
|
32
|
+
};
|
|
33
|
+
ZeroClipboard.config(angular.extend(config,ngClip.config || {}));
|
|
34
|
+
}]).
|
|
35
|
+
directive('clipCopy', ['ngClip', function (ngClip) {
|
|
36
|
+
return {
|
|
37
|
+
scope: {
|
|
38
|
+
clipCopy: '&',
|
|
39
|
+
clipClick: '&',
|
|
40
|
+
clipClickFallback: '&'
|
|
41
|
+
},
|
|
42
|
+
restrict: 'A',
|
|
43
|
+
link: function (scope, element, attrs) {
|
|
44
|
+
// Bind a fallback function if flash is unavailable
|
|
45
|
+
if (ZeroClipboard.isFlashUnusable()) {
|
|
46
|
+
element.bind('click', function($event) {
|
|
47
|
+
// Execute the expression with local variables `$event` and `copy`
|
|
48
|
+
scope.$apply(scope.clipClickFallback({
|
|
49
|
+
$event: $event,
|
|
50
|
+
copy: scope.$eval(scope.clipCopy)
|
|
51
|
+
}));
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Create the client object
|
|
58
|
+
var client = new ZeroClipboard(element);
|
|
59
|
+
if (attrs.clipCopy === "") {
|
|
60
|
+
scope.clipCopy = function(scope) {
|
|
61
|
+
return element[0].previousElementSibling.innerText;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
client.on( 'ready', function(readyEvent) {
|
|
65
|
+
|
|
66
|
+
client.on('copy', function (event) {
|
|
67
|
+
var clipboard = event.clipboardData;
|
|
68
|
+
clipboard.setData(attrs.clipCopyMimeType || 'text/plain', scope.$eval(scope.clipCopy));
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
client.on( 'aftercopy', function(event) {
|
|
72
|
+
if (angular.isDefined(attrs.clipClick)) {
|
|
73
|
+
scope.$apply(scope.clipClick);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
scope.$on('$destroy', function() {
|
|
78
|
+
client.destroy();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}]);
|
|
84
|
+
})(window, window.angular);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! ngTagsInput v2.3.0 License: MIT */!function(){"use strict";var a={backspace:8,tab:9,enter:13,escape:27,space:32,up:38,down:40,left:37,right:39,"delete":46,comma:188},b=9007199254740991,c=["text","email","url"],d=angular.module("ngTagsInput",[]);d.directive("tagsInput",["$timeout","$document","$window","tagsInputConfig","tiUtil",function(d,e,f,g,h){function i(a,b,c,d){var e,f,g,i={};return e=function(b){return h.safeToString(b[a.displayProperty])},f=function(b,c){b[a.displayProperty]=c},g=function(b){var d=e(b);return d&&d.length>=a.minLength&&d.length<=a.maxLength&&a.allowedTagsPattern.test(d)&&!h.findInObjectArray(i.items,b,a.keyProperty||a.displayProperty)&&c({$tag:b})},i.items=[],i.addText=function(a){var b={};return f(b,a),i.add(b)},i.add=function(c){var d=e(c);return a.replaceSpacesWithDashes&&(d=h.replaceSpacesWithDashes(d)),f(c,d),g(c)?(i.items.push(c),b.trigger("tag-added",{$tag:c})):d&&b.trigger("invalid-tag",{$tag:c}),c},i.remove=function(a){var c=i.items[a];return d({$tag:c})?(i.items.splice(a,1),i.clearSelection(),b.trigger("tag-removed",{$tag:c}),c):void 0},i.select=function(a){0>a?a=i.items.length-1:a>=i.items.length&&(a=0),i.index=a,i.selected=i.items[a]},i.selectPrior=function(){i.select(--i.index)},i.selectNext=function(){i.select(++i.index)},i.removeSelected=function(){return i.remove(i.index)},i.clearSelection=function(){i.selected=null,i.index=-1},i.clearSelection(),i}function j(a){return-1!==c.indexOf(a)}return{restrict:"E",require:"ngModel",scope:{tags:"=ngModel",onTagAdding:"&",onTagAdded:"&",onInvalidTag:"&",onTagRemoving:"&",onTagRemoved:"&"},replace:!1,transclude:!0,templateUrl:"ngTagsInput/tags-input.html",controller:["$scope","$attrs","$element",function(a,c,d){a.events=h.simplePubSub(),g.load("tagsInput",a,c,{template:[String,"ngTagsInput/tag-item.html"],type:[String,"text",j],placeholder:[String,"Add a tag"],tabindex:[Number,null],removeTagSymbol:[String,String.fromCharCode(215)],replaceSpacesWithDashes:[Boolean,!0],minLength:[Number,3],maxLength:[Number,b],addOnEnter:[Boolean,!0],addOnSpace:[Boolean,!1],addOnComma:[Boolean,!0],addOnBlur:[Boolean,!0],addOnPaste:[Boolean,!1],pasteSplitPattern:[RegExp,/,/],allowedTagsPattern:[RegExp,/.+/],enableEditingLastTag:[Boolean,!1],minTags:[Number,0],maxTags:[Number,b],displayProperty:[String,"text"],keyProperty:[String,""],allowLeftoverText:[Boolean,!1],addFromAutocompleteOnly:[Boolean,!1],spellcheck:[Boolean,!0]}),a.tagList=new i(a.options,a.events,h.handleUndefinedResult(a.onTagAdding,!0),h.handleUndefinedResult(a.onTagRemoving,!0)),this.registerAutocomplete=function(){var b=d.find("input");return{addTag:function(b){return a.tagList.add(b)},focusInput:function(){b[0].focus()},getTags:function(){return a.tags},getCurrentTagText:function(){return a.newTag.text},getOptions:function(){return a.options},on:function(b,c){return a.events.on(b,c),this}}},this.registerTagItem=function(){return{getOptions:function(){return a.options},removeTag:function(b){a.disabled||a.tagList.remove(b)}}}}],link:function(b,c,g,i){var j,k=[a.enter,a.comma,a.space,a.backspace,a["delete"],a.left,a.right],l=b.tagList,m=b.events,n=b.options,o=c.find("input"),p=["minTags","maxTags","allowLeftoverText"];j=function(){i.$setValidity("maxTags",b.tags.length<=n.maxTags),i.$setValidity("minTags",b.tags.length>=n.minTags),i.$setValidity("leftoverText",b.hasFocus||n.allowLeftoverText?!0:!b.newTag.text)},i.$isEmpty=function(a){return!a||!a.length},b.newTag={text:"",invalid:null,setText:function(a){this.text=a,m.trigger("input-change",a)}},b.track=function(a){return a[n.keyProperty||n.displayProperty]},b.$watch("tags",function(a){b.tags=h.makeObjectArray(a,n.displayProperty),l.items=b.tags}),b.$watch("tags.length",function(){j()}),g.$observe("disabled",function(a){b.disabled=a}),b.eventHandlers={input:{change:function(a){m.trigger("input-change",a)},keydown:function(a){m.trigger("input-keydown",a)},focus:function(){b.hasFocus||(b.hasFocus=!0,m.trigger("input-focus"))},blur:function(){d(function(){var a=e.prop("activeElement"),d=a===o[0],f=c[0].contains(a);(d||!f)&&(b.hasFocus=!1,m.trigger("input-blur"))})},paste:function(a){a.getTextData=function(){var b=a.clipboardData||a.originalEvent&&a.originalEvent.clipboardData;return b?b.getData("text/plain"):f.clipboardData.getData("Text")},m.trigger("input-paste",a)}},host:{click:function(){b.disabled||o[0].focus()}}},m.on("tag-added",b.onTagAdded).on("invalid-tag",b.onInvalidTag).on("tag-removed",b.onTagRemoved).on("tag-added",function(){b.newTag.setText("")}).on("tag-added tag-removed",function(){i.$setViewValue(b.tags)}).on("invalid-tag",function(){b.newTag.invalid=!0}).on("option-change",function(a){-1!==p.indexOf(a.name)&&j()}).on("input-change",function(){l.clearSelection(),b.newTag.invalid=null}).on("input-focus",function(){c.triggerHandler("focus"),i.$setValidity("leftoverText",!0)}).on("input-blur",function(){n.addOnBlur&&!n.addFromAutocompleteOnly&&l.addText(b.newTag.text),c.triggerHandler("blur"),j()}).on("input-keydown",function(c){var d,e,f,g,h=c.keyCode,i=c.shiftKey||c.altKey||c.ctrlKey||c.metaKey,j={};if(!i&&-1!==k.indexOf(h)){if(j[a.enter]=n.addOnEnter,j[a.comma]=n.addOnComma,j[a.space]=n.addOnSpace,d=!n.addFromAutocompleteOnly&&j[h],e=(h===a.backspace||h===a["delete"])&&l.selected,g=h===a.backspace&&0===b.newTag.text.length&&n.enableEditingLastTag,f=(h===a.backspace||h===a.left||h===a.right)&&0===b.newTag.text.length&&!n.enableEditingLastTag,d)l.addText(b.newTag.text);else if(g){var m;l.selectPrior(),m=l.removeSelected(),m&&b.newTag.setText(m[n.displayProperty])}else e?l.removeSelected():f&&(h===a.left||h===a.backspace?l.selectPrior():h===a.right&&l.selectNext());(d||f||e||g)&&c.preventDefault()}}).on("input-paste",function(a){if(n.addOnPaste){var b=a.getTextData(),c=b.split(n.pasteSplitPattern);c.length>1&&(c.forEach(function(a){l.addText(a)}),a.preventDefault())}})}}}]),d.directive("tiTagItem",["tiUtil",function(a){return{restrict:"E",require:"^tagsInput",template:'<ng-include src="$$template"></ng-include>',scope:{data:"="},link:function(b,c,d,e){var f=e.registerTagItem(),g=f.getOptions();b.$$template=g.template,b.$$removeTagSymbol=g.removeTagSymbol,b.$getDisplayText=function(){return a.safeToString(b.data[g.displayProperty])},b.$removeTag=function(){f.removeTag(b.$index)},b.$watch("$parent.$index",function(a){b.$index=a})}}}]),d.directive("autoComplete",["$document","$timeout","$sce","$q","tagsInputConfig","tiUtil",function(b,c,d,e,f,g){function h(a,b,c){var d,f,h,i={};return h=function(){return b.tagsInput.keyProperty||b.tagsInput.displayProperty},d=function(a,c){return a.filter(function(a){return!g.findInObjectArray(c,a,h(),function(a,c){return b.tagsInput.replaceSpacesWithDashes&&(a=g.replaceSpacesWithDashes(a),c=g.replaceSpacesWithDashes(c)),g.defaultComparer(a,c)})})},i.reset=function(){f=null,i.items=[],i.visible=!1,i.index=-1,i.selected=null,i.query=null},i.show=function(){b.selectFirstMatch?i.select(0):i.selected=null,i.visible=!0},i.load=g.debounce(function(c,j){i.query=c;var k=e.when(a({$query:c}));f=k,k.then(function(a){k===f&&(a=g.makeObjectArray(a.data||a,h()),a=d(a,j),i.items=a.slice(0,b.maxResultsToShow),i.items.length>0?i.show():i.reset())})},b.debounceDelay),i.selectNext=function(){i.select(++i.index)},i.selectPrior=function(){i.select(--i.index)},i.select=function(a){0>a?a=i.items.length-1:a>=i.items.length&&(a=0),i.index=a,i.selected=i.items[a],c.trigger("suggestion-selected",a)},i.reset(),i}function i(a,b){var c=a.find("li").eq(b),d=c.parent(),e=c.prop("offsetTop"),f=c.prop("offsetHeight"),g=d.prop("clientHeight"),h=d.prop("scrollTop");h>e?d.prop("scrollTop",e):e+f>g+h&&d.prop("scrollTop",e+f-g)}return{restrict:"E",require:"^tagsInput",scope:{source:"&"},templateUrl:"ngTagsInput/auto-complete.html",controller:["$scope","$element","$attrs",function(a,b,c){a.events=g.simplePubSub(),f.load("autoComplete",a,c,{template:[String,"ngTagsInput/auto-complete-match.html"],debounceDelay:[Number,100],minLength:[Number,3],highlightMatchedText:[Boolean,!0],maxResultsToShow:[Number,10],loadOnDownArrow:[Boolean,!1],loadOnEmpty:[Boolean,!1],loadOnFocus:[Boolean,!1],selectFirstMatch:[Boolean,!0],displayProperty:[String,""]}),a.suggestionList=new h(a.source,a.options,a.events),this.registerAutocompleteMatch=function(){return{getOptions:function(){return a.options},getQuery:function(){return a.suggestionList.query}}}}],link:function(b,c,d,e){var f,g=[a.enter,a.tab,a.escape,a.up,a.down],h=b.suggestionList,j=e.registerAutocomplete(),k=b.options,l=b.events;k.tagsInput=j.getOptions(),f=function(a){return a&&a.length>=k.minLength||!a&&k.loadOnEmpty},b.addSuggestionByIndex=function(a){h.select(a),b.addSuggestion()},b.addSuggestion=function(){var a=!1;return h.selected&&(j.addTag(angular.copy(h.selected)),h.reset(),j.focusInput(),a=!0),a},b.track=function(a){return a[k.tagsInput.keyProperty||k.tagsInput.displayProperty]},j.on("tag-added invalid-tag input-blur",function(){h.reset()}).on("input-change",function(a){f(a)?h.load(a,j.getTags()):h.reset()}).on("input-focus",function(){var a=j.getCurrentTagText();k.loadOnFocus&&f(a)&&h.load(a,j.getTags())}).on("input-keydown",function(c){var d=c.keyCode,e=!1;if(-1!==g.indexOf(d))return h.visible?d===a.down?(h.selectNext(),e=!0):d===a.up?(h.selectPrior(),e=!0):d===a.escape?(h.reset(),e=!0):(d===a.enter||d===a.tab)&&(e=b.addSuggestion()):d===a.down&&b.options.loadOnDownArrow&&(h.load(j.getCurrentTagText(),j.getTags()),e=!0),e?(c.preventDefault(),c.stopImmediatePropagation(),!1):void 0}),l.on("suggestion-selected",function(a){i(c,a)})}}}]),d.directive("tiAutocompleteMatch",["$sce","tiUtil",function(a,b){return{restrict:"E",require:"^autoComplete",template:'<ng-include src="$$template"></ng-include>',scope:{data:"="},link:function(c,d,e,f){var g=f.registerAutocompleteMatch(),h=g.getOptions();c.$$template=h.template,c.$index=c.$parent.$index,c.$highlight=function(c){return h.highlightMatchedText&&(c=b.safeHighlight(c,g.getQuery())),a.trustAsHtml(c)},c.$getDisplayText=function(){return b.safeToString(c.data[h.displayProperty||h.tagsInput.displayProperty])}}}}]),d.directive("tiTranscludeAppend",function(){return function(a,b,c,d,e){e(function(a){b.append(a)})}}),d.directive("tiAutosize",["tagsInputConfig",function(a){return{restrict:"A",require:"ngModel",link:function(b,c,d,e){var f,g,h=a.getTextAutosizeThreshold();f=angular.element('<span class="input"></span>'),f.css("display","none").css("visibility","hidden").css("width","auto").css("white-space","pre"),c.parent().append(f),g=function(a){var b,e=a;return angular.isString(e)&&0===e.length&&(e=d.placeholder),e&&(f.text(e),f.css("display",""),b=f.prop("offsetWidth"),f.css("display","none")),c.css("width",b?b+h+"px":""),a},e.$parsers.unshift(g),e.$formatters.unshift(g),d.$observe("placeholder",function(a){e.$modelValue||g(a)})}}}]),d.directive("tiBindAttrs",function(){return function(a,b,c){a.$watch(c.tiBindAttrs,function(a){angular.forEach(a,function(a,b){c.$set(b,a)})},!0)}}),d.provider("tagsInputConfig",function(){var a={},b={},c=3;this.setDefaults=function(b,c){return a[b]=c,this},this.setActiveInterpolation=function(a,c){return b[a]=c,this},this.setTextAutosizeThreshold=function(a){return c=a,this},this.$get=["$interpolate",function(d){var e={};return e[String]=function(a){return a},e[Number]=function(a){return parseInt(a,10)},e[Boolean]=function(a){return"true"===a.toLowerCase()},e[RegExp]=function(a){return new RegExp(a)},{load:function(c,f,g,h){var i=function(){return!0};f.options={},angular.forEach(h,function(h,j){var k,l,m,n,o,p;k=h[0],l=h[1],m=h[2]||i,n=e[k],o=function(){var b=a[c]&&a[c][j];return angular.isDefined(b)?b:l},p=function(a){f.options[j]=a&&m(a)?n(a):o()},b[c]&&b[c][j]?g.$observe(j,function(a){p(a),f.events.trigger("option-change",{name:j,newValue:a})}):p(g[j]&&d(g[j])(f.$parent))})},getTextAutosizeThreshold:function(){return c}}}]}),d.factory("tiUtil",["$timeout",function(a){var b={};return b.debounce=function(b,c){var d;return function(){var e=arguments;a.cancel(d),d=a(function(){b.apply(null,e)},c)}},b.makeObjectArray=function(a,b){return a=a||[],a.length>0&&!angular.isObject(a[0])&&a.forEach(function(c,d){a[d]={},a[d][b]=c}),a},b.findInObjectArray=function(a,c,d,e){var f=null;return e=e||b.defaultComparer,a.some(function(a){return e(a[d],c[d])?(f=a,!0):void 0}),f},b.defaultComparer=function(a,c){return b.safeToString(a).toLowerCase()===b.safeToString(c).toLowerCase()},b.safeHighlight=function(a,c){function d(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}if(!c)return a;a=b.encodeHTML(a),c=b.encodeHTML(c);var e=new RegExp("&[^;]+;|"+d(c),"gi");return a.replace(e,function(a){return a.toLowerCase()===c.toLowerCase()?"<em>"+a+"</em>":a})},b.safeToString=function(a){return angular.isUndefined(a)||null==a?"":a.toString().trim()},b.encodeHTML=function(a){return b.safeToString(a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},b.handleUndefinedResult=function(a,b){return function(){var c=a.apply(null,arguments);return angular.isUndefined(c)?b:c}},b.replaceSpacesWithDashes=function(a){return b.safeToString(a).replace(/\s/g,"-")},b.simplePubSub=function(){var a={};return{on:function(b,c){return b.split(" ").forEach(function(b){a[b]||(a[b]=[]),a[b].push(c)}),this},trigger:function(c,d){var e=a[c]||[];return e.every(function(a){return b.handleUndefinedResult(a,!0)(d)}),this}}},b}]),d.run(["$templateCache",function(a){a.put("ngTagsInput/tags-input.html",'<div class="host" tabindex="-1" ng-click="eventHandlers.host.click()" ti-transclude-append=""><div class="tags" ng-class="{focused: hasFocus}"><ul class="tag-list"><li class="tag-item" ng-repeat="tag in tagList.items track by track(tag)" ng-class="{ selected: tag == tagList.selected }"><ti-tag-item data="tag"></ti-tag-item></li></ul><input class="input" autocomplete="off" ng-model="newTag.text" ng-change="eventHandlers.input.change(newTag.text)" ng-keydown="eventHandlers.input.keydown($event)" ng-focus="eventHandlers.input.focus($event)" ng-blur="eventHandlers.input.blur($event)" ng-paste="eventHandlers.input.paste($event)" ng-trim="false" ng-class="{\'invalid-tag\': newTag.invalid}" ng-disabled="disabled" ti-bind-attrs="{type: options.type, placeholder: options.placeholder, tabindex: options.tabindex, spellcheck: options.spellcheck}" ti-autosize=""></div></div>'),a.put("ngTagsInput/tag-item.html",'<span ng-bind="$getDisplayText()"></span> <a class="remove-button" ng-click="$removeTag()" ng-bind="$$removeTagSymbol"></a>'),a.put("ngTagsInput/auto-complete.html",'<div class="autocomplete" ng-if="suggestionList.visible"><ul class="suggestion-list"><li class="suggestion-item" ng-repeat="item in suggestionList.items track by track(item)" ng-class="{selected: item == suggestionList.selected}" ng-click="addSuggestionByIndex($index)" ng-mouseenter="suggestionList.select($index)"><ti-autocomplete-match data="item"></ti-autocomplete-match></li></ul></div>'),a.put("ngTagsInput/auto-complete-match.html",'<span ng-bind-html="$highlight($getDisplayText())"></span>')}])}();
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
/* global define */
|
|
2
|
+
|
|
3
|
+
(function (root, pluralize) {
|
|
4
|
+
/* istanbul ignore else */
|
|
5
|
+
if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {
|
|
6
|
+
// Node.
|
|
7
|
+
module.exports = pluralize();
|
|
8
|
+
} else if (typeof define === 'function' && define.amd) {
|
|
9
|
+
// AMD, registers as an anonymous module.
|
|
10
|
+
define(function () {
|
|
11
|
+
return pluralize();
|
|
12
|
+
});
|
|
13
|
+
} else {
|
|
14
|
+
// Browser global.
|
|
15
|
+
root.pluralize = pluralize();
|
|
16
|
+
}
|
|
17
|
+
})(this, function () {
|
|
18
|
+
// Rule storage - pluralize and singularize need to be run sequentially,
|
|
19
|
+
// while other rules can be optimized using an object for instant lookups.
|
|
20
|
+
var pluralRules = [];
|
|
21
|
+
var singularRules = [];
|
|
22
|
+
var uncountables = {};
|
|
23
|
+
var irregularPlurals = {};
|
|
24
|
+
var irregularSingles = {};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Title case a string.
|
|
28
|
+
*
|
|
29
|
+
* @param {string} str
|
|
30
|
+
* @return {string}
|
|
31
|
+
*/
|
|
32
|
+
function toTitleCase (str) {
|
|
33
|
+
return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Sanitize a pluralization rule to a usable regular expression.
|
|
38
|
+
*
|
|
39
|
+
* @param {(RegExp|string)} rule
|
|
40
|
+
* @return {RegExp}
|
|
41
|
+
*/
|
|
42
|
+
function sanitizeRule (rule) {
|
|
43
|
+
if (typeof rule === 'string') {
|
|
44
|
+
return new RegExp('^' + rule + '$', 'i');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return rule;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Pass in a word token to produce a function that can replicate the case on
|
|
52
|
+
* another word.
|
|
53
|
+
*
|
|
54
|
+
* @param {string} word
|
|
55
|
+
* @param {string} token
|
|
56
|
+
* @return {Function}
|
|
57
|
+
*/
|
|
58
|
+
function restoreCase (word, token) {
|
|
59
|
+
// Upper cased words. E.g. "HELLO".
|
|
60
|
+
if (word === word.toUpperCase()) {
|
|
61
|
+
return token.toUpperCase();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Title cased words. E.g. "Title".
|
|
65
|
+
if (word[0] === word[0].toUpperCase()) {
|
|
66
|
+
return toTitleCase(token);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Lower cased words. E.g. "test".
|
|
70
|
+
return token.toLowerCase();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Interpolate a regexp string.
|
|
75
|
+
*
|
|
76
|
+
* @param {string} str
|
|
77
|
+
* @param {Array} args
|
|
78
|
+
* @return {string}
|
|
79
|
+
*/
|
|
80
|
+
function interpolate (str, args) {
|
|
81
|
+
return str.replace(/\$(\d{1,2})/g, function (match, index) {
|
|
82
|
+
return args[index] || '';
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Sanitize a word by passing in the word and sanitization rules.
|
|
88
|
+
*
|
|
89
|
+
* @param {String} token
|
|
90
|
+
* @param {String} word
|
|
91
|
+
* @param {Array} collection
|
|
92
|
+
* @return {String}
|
|
93
|
+
*/
|
|
94
|
+
function sanitizeWord (token, word, collection) {
|
|
95
|
+
// Empty string or doesn't need fixing.
|
|
96
|
+
if (!token.length || uncountables.hasOwnProperty(token)) {
|
|
97
|
+
return word;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
var len = collection.length;
|
|
101
|
+
|
|
102
|
+
// Iterate over the sanitization rules and use the first one to match.
|
|
103
|
+
while (len--) {
|
|
104
|
+
var rule = collection[len];
|
|
105
|
+
|
|
106
|
+
// If the rule passes, return the replacement.
|
|
107
|
+
if (rule[0].test(word)) {
|
|
108
|
+
return word.replace(rule[0], function (match, index, word) {
|
|
109
|
+
var result = interpolate(rule[1], arguments);
|
|
110
|
+
|
|
111
|
+
if (match === '') {
|
|
112
|
+
return restoreCase(word[index - 1], result);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return restoreCase(match, result);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return word;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Replace a word with the updated word.
|
|
125
|
+
*
|
|
126
|
+
* @param {Object} replaceMap
|
|
127
|
+
* @param {Object} keepMap
|
|
128
|
+
* @param {Array} rules
|
|
129
|
+
* @return {Function}
|
|
130
|
+
*/
|
|
131
|
+
function replaceWord (replaceMap, keepMap, rules) {
|
|
132
|
+
return function (word) {
|
|
133
|
+
// Get the correct token and case restoration functions.
|
|
134
|
+
var token = word.toLowerCase();
|
|
135
|
+
|
|
136
|
+
// Check against the keep object map.
|
|
137
|
+
if (keepMap.hasOwnProperty(token)) {
|
|
138
|
+
return restoreCase(word, token);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Check against the replacement map for a direct word replacement.
|
|
142
|
+
if (replaceMap.hasOwnProperty(token)) {
|
|
143
|
+
return restoreCase(word, replaceMap[token]);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Run all the rules against the word.
|
|
147
|
+
return sanitizeWord(token, word, rules);
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Pluralize or singularize a word based on the passed in count.
|
|
153
|
+
*
|
|
154
|
+
* @param {String} word
|
|
155
|
+
* @param {Number} count
|
|
156
|
+
* @param {Boolean} inclusive
|
|
157
|
+
* @return {String}
|
|
158
|
+
*/
|
|
159
|
+
function pluralize (word, count, inclusive) {
|
|
160
|
+
var pluralized = count === 1
|
|
161
|
+
? pluralize.singular(word) : pluralize.plural(word);
|
|
162
|
+
|
|
163
|
+
return (inclusive ? count + ' ' : '') + pluralized;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Pluralize a word.
|
|
168
|
+
*
|
|
169
|
+
* @type {Function}
|
|
170
|
+
*/
|
|
171
|
+
pluralize.plural = replaceWord(
|
|
172
|
+
irregularSingles, irregularPlurals, pluralRules
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Singularize a word.
|
|
177
|
+
*
|
|
178
|
+
* @type {Function}
|
|
179
|
+
*/
|
|
180
|
+
pluralize.singular = replaceWord(
|
|
181
|
+
irregularPlurals, irregularSingles, singularRules
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Add a pluralization rule to the collection.
|
|
186
|
+
*
|
|
187
|
+
* @param {(string|RegExp)} rule
|
|
188
|
+
* @param {string} replacement
|
|
189
|
+
*/
|
|
190
|
+
pluralize.addPluralRule = function (rule, replacement) {
|
|
191
|
+
pluralRules.push([sanitizeRule(rule), replacement]);
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Add a singularization rule to the collection.
|
|
196
|
+
*
|
|
197
|
+
* @param {(string|RegExp)} rule
|
|
198
|
+
* @param {string} replacement
|
|
199
|
+
*/
|
|
200
|
+
pluralize.addSingularRule = function (rule, replacement) {
|
|
201
|
+
singularRules.push([sanitizeRule(rule), replacement]);
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Add an uncountable word rule.
|
|
206
|
+
*
|
|
207
|
+
* @param {(string|RegExp)} word
|
|
208
|
+
*/
|
|
209
|
+
pluralize.addUncountableRule = function (word) {
|
|
210
|
+
if (typeof word === 'string') {
|
|
211
|
+
uncountables[word.toLowerCase()] = true;
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Set singular and plural references for the word.
|
|
216
|
+
pluralize.addPluralRule(word, '$0');
|
|
217
|
+
pluralize.addSingularRule(word, '$0');
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Add an irregular word definition.
|
|
222
|
+
*
|
|
223
|
+
* @param {String} single
|
|
224
|
+
* @param {String} plural
|
|
225
|
+
*/
|
|
226
|
+
pluralize.addIrregularRule = function (single, plural) {
|
|
227
|
+
plural = plural.toLowerCase();
|
|
228
|
+
single = single.toLowerCase();
|
|
229
|
+
|
|
230
|
+
irregularSingles[single] = plural;
|
|
231
|
+
irregularPlurals[plural] = single;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Irregular rules.
|
|
236
|
+
*/
|
|
237
|
+
[
|
|
238
|
+
// Pronouns.
|
|
239
|
+
['I', 'we'],
|
|
240
|
+
['me', 'us'],
|
|
241
|
+
['he', 'they'],
|
|
242
|
+
['she', 'they'],
|
|
243
|
+
['them', 'them'],
|
|
244
|
+
['myself', 'ourselves'],
|
|
245
|
+
['yourself', 'yourselves'],
|
|
246
|
+
['itself', 'themselves'],
|
|
247
|
+
['herself', 'themselves'],
|
|
248
|
+
['himself', 'themselves'],
|
|
249
|
+
['themself', 'themselves'],
|
|
250
|
+
['is', 'are'],
|
|
251
|
+
['this', 'these'],
|
|
252
|
+
['that', 'those'],
|
|
253
|
+
// Words ending in with a consonant and `o`.
|
|
254
|
+
['echo', 'echoes'],
|
|
255
|
+
['dingo', 'dingoes'],
|
|
256
|
+
['volcano', 'volcanoes'],
|
|
257
|
+
['tornado', 'tornadoes'],
|
|
258
|
+
['torpedo', 'torpedoes'],
|
|
259
|
+
// Ends with `us`.
|
|
260
|
+
['genus', 'genera'],
|
|
261
|
+
['viscus', 'viscera'],
|
|
262
|
+
// Ends with `ma`.
|
|
263
|
+
['stigma', 'stigmata'],
|
|
264
|
+
['stoma', 'stomata'],
|
|
265
|
+
['dogma', 'dogmata'],
|
|
266
|
+
['lemma', 'lemmata'],
|
|
267
|
+
['schema', 'schemata'],
|
|
268
|
+
['anathema', 'anathemata'],
|
|
269
|
+
// Other irregular rules.
|
|
270
|
+
['ox', 'oxen'],
|
|
271
|
+
['axe', 'axes'],
|
|
272
|
+
['die', 'dice'],
|
|
273
|
+
['yes', 'yeses'],
|
|
274
|
+
['foot', 'feet'],
|
|
275
|
+
['eave', 'eaves'],
|
|
276
|
+
['goose', 'geese'],
|
|
277
|
+
['tooth', 'teeth'],
|
|
278
|
+
['quiz', 'quizzes'],
|
|
279
|
+
['human', 'humans'],
|
|
280
|
+
['proof', 'proofs'],
|
|
281
|
+
['carve', 'carves'],
|
|
282
|
+
['valve', 'valves'],
|
|
283
|
+
['thief', 'thieves'],
|
|
284
|
+
['genie', 'genies'],
|
|
285
|
+
['groove', 'grooves'],
|
|
286
|
+
['pickaxe', 'pickaxes'],
|
|
287
|
+
['whiskey', 'whiskies']
|
|
288
|
+
].forEach(function (rule) {
|
|
289
|
+
return pluralize.addIrregularRule(rule[0], rule[1]);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Pluralization rules.
|
|
294
|
+
*/
|
|
295
|
+
[
|
|
296
|
+
[/s?$/i, 's'],
|
|
297
|
+
[/([^aeiou]ese)$/i, '$1'],
|
|
298
|
+
[/(ax|test)is$/i, '$1es'],
|
|
299
|
+
[/(alias|[^aou]us|tlas|gas|ris)$/i, '$1es'],
|
|
300
|
+
[/(e[mn]u)s?$/i, '$1s'],
|
|
301
|
+
[/([^l]ias|[aeiou]las|[emjzr]as|[iu]am)$/i, '$1'],
|
|
302
|
+
[/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],
|
|
303
|
+
[/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],
|
|
304
|
+
[/(seraph|cherub)(?:im)?$/i, '$1im'],
|
|
305
|
+
[/(her|at|gr)o$/i, '$1oes'],
|
|
306
|
+
[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],
|
|
307
|
+
[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],
|
|
308
|
+
[/sis$/i, 'ses'],
|
|
309
|
+
[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],
|
|
310
|
+
[/([^aeiouy]|qu)y$/i, '$1ies'],
|
|
311
|
+
[/([^ch][ieo][ln])ey$/i, '$1ies'],
|
|
312
|
+
[/(x|ch|ss|sh|zz)$/i, '$1es'],
|
|
313
|
+
[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],
|
|
314
|
+
[/(m|l)(?:ice|ouse)$/i, '$1ice'],
|
|
315
|
+
[/(pe)(?:rson|ople)$/i, '$1ople'],
|
|
316
|
+
[/(child)(?:ren)?$/i, '$1ren'],
|
|
317
|
+
[/eaux$/i, '$0'],
|
|
318
|
+
[/m[ae]n$/i, 'men'],
|
|
319
|
+
['thou', 'you']
|
|
320
|
+
].forEach(function (rule) {
|
|
321
|
+
return pluralize.addPluralRule(rule[0], rule[1]);
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Singularization rules.
|
|
326
|
+
*/
|
|
327
|
+
[
|
|
328
|
+
[/s$/i, ''],
|
|
329
|
+
[/(ss)$/i, '$1'],
|
|
330
|
+
[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(?:sis|ses)$/i, '$1sis'],
|
|
331
|
+
[/(^analy)(?:sis|ses)$/i, '$1sis'],
|
|
332
|
+
[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'],
|
|
333
|
+
[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],
|
|
334
|
+
[/([^aeiouy]|qu)ies$/i, '$1y'],
|
|
335
|
+
[/(^[pl]|zomb|^(?:neck)?t|[aeo][lt]|cut)ies$/i, '$1ie'],
|
|
336
|
+
[/(\b(?:mon|smil))ies$/i, '$1ey'],
|
|
337
|
+
[/(m|l)ice$/i, '$1ouse'],
|
|
338
|
+
[/(seraph|cherub)im$/i, '$1'],
|
|
339
|
+
[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|tlas|gas|(?:her|at|gr)o|ris)(?:es)?$/i, '$1'],
|
|
340
|
+
[/(e[mn]u)s?$/i, '$1'],
|
|
341
|
+
[/(movie|twelve)s$/i, '$1'],
|
|
342
|
+
[/(cris|test|diagnos)(?:is|es)$/i, '$1is'],
|
|
343
|
+
[/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],
|
|
344
|
+
[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],
|
|
345
|
+
[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],
|
|
346
|
+
[/(alumn|alg|vertebr)ae$/i, '$1a'],
|
|
347
|
+
[/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],
|
|
348
|
+
[/(matr|append)ices$/i, '$1ix'],
|
|
349
|
+
[/(pe)(rson|ople)$/i, '$1rson'],
|
|
350
|
+
[/(child)ren$/i, '$1'],
|
|
351
|
+
[/(eau)x?$/i, '$1'],
|
|
352
|
+
[/men$/i, 'man']
|
|
353
|
+
].forEach(function (rule) {
|
|
354
|
+
return pluralize.addSingularRule(rule[0], rule[1]);
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Uncountable rules.
|
|
359
|
+
*/
|
|
360
|
+
[
|
|
361
|
+
// Singular words with no plurals.
|
|
362
|
+
'advice',
|
|
363
|
+
'adulthood',
|
|
364
|
+
'agenda',
|
|
365
|
+
'aid',
|
|
366
|
+
'alcohol',
|
|
367
|
+
'ammo',
|
|
368
|
+
'athletics',
|
|
369
|
+
'bison',
|
|
370
|
+
'blood',
|
|
371
|
+
'bream',
|
|
372
|
+
'buffalo',
|
|
373
|
+
'butter',
|
|
374
|
+
'carp',
|
|
375
|
+
'cash',
|
|
376
|
+
'chassis',
|
|
377
|
+
'chess',
|
|
378
|
+
'clothing',
|
|
379
|
+
'commerce',
|
|
380
|
+
'cod',
|
|
381
|
+
'cooperation',
|
|
382
|
+
'corps',
|
|
383
|
+
'digestion',
|
|
384
|
+
'debris',
|
|
385
|
+
'diabetes',
|
|
386
|
+
'energy',
|
|
387
|
+
'equipment',
|
|
388
|
+
'elk',
|
|
389
|
+
'excretion',
|
|
390
|
+
'expertise',
|
|
391
|
+
'flounder',
|
|
392
|
+
'fun',
|
|
393
|
+
'gallows',
|
|
394
|
+
'garbage',
|
|
395
|
+
'graffiti',
|
|
396
|
+
'headquarters',
|
|
397
|
+
'health',
|
|
398
|
+
'herpes',
|
|
399
|
+
'highjinks',
|
|
400
|
+
'homework',
|
|
401
|
+
'housework',
|
|
402
|
+
'information',
|
|
403
|
+
'jeans',
|
|
404
|
+
'justice',
|
|
405
|
+
'kudos',
|
|
406
|
+
'labour',
|
|
407
|
+
'literature',
|
|
408
|
+
'machinery',
|
|
409
|
+
'mackerel',
|
|
410
|
+
'media',
|
|
411
|
+
'mews',
|
|
412
|
+
'moose',
|
|
413
|
+
'music',
|
|
414
|
+
'news',
|
|
415
|
+
'pike',
|
|
416
|
+
'plankton',
|
|
417
|
+
'pliers',
|
|
418
|
+
'pollution',
|
|
419
|
+
'premises',
|
|
420
|
+
'rain',
|
|
421
|
+
'research',
|
|
422
|
+
'rice',
|
|
423
|
+
'salmon',
|
|
424
|
+
'scissors',
|
|
425
|
+
'series',
|
|
426
|
+
'sewage',
|
|
427
|
+
'shambles',
|
|
428
|
+
'shrimp',
|
|
429
|
+
'species',
|
|
430
|
+
'staff',
|
|
431
|
+
'swine',
|
|
432
|
+
'trout',
|
|
433
|
+
'traffic',
|
|
434
|
+
'transporation',
|
|
435
|
+
'tuna',
|
|
436
|
+
'wealth',
|
|
437
|
+
'welfare',
|
|
438
|
+
'whiting',
|
|
439
|
+
'wildebeest',
|
|
440
|
+
'wildlife',
|
|
441
|
+
'you',
|
|
442
|
+
// Regexes.
|
|
443
|
+
/pox$/i, // "chickpox", "smallpox"
|
|
444
|
+
/ois$/i,
|
|
445
|
+
/deer$/i, // "deer", "reindeer"
|
|
446
|
+
/fish$/i, // "fish", "blowfish", "angelfish"
|
|
447
|
+
/sheep$/i,
|
|
448
|
+
/measles$/i,
|
|
449
|
+
/[^aeiou]ese$/i // "chinese", "japanese"
|
|
450
|
+
].forEach(pluralize.addUncountableRule);
|
|
451
|
+
|
|
452
|
+
return pluralize;
|
|
453
|
+
});
|