From d9f3de1d26d3e9d94527298d39e153fd31b3dd07 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 2 Jan 2016 06:34:07 -0700 Subject: [PATCH 001/214] auto-commit from ember-cli-migrator --- .../{web-app/app/assets/javascripts/admin => admin/app}/app.js | 0 .../admin => admin/app}/components/api-settings-fields.js | 0 .../app/components/error-messages-component.js} | 0 .../assets/javascripts/admin => admin/app}/controllers/.gitkeep | 0 .../app/controllers/admin-groups/form-controller.js} | 0 .../app/controllers/admins/form-controller.js} | 0 .../app/controllers/admins/index-controller.js} | 0 .../app/controllers/api-scopes/form-controller.js} | 0 .../app/controllers/api-users/form-controller.js} | 0 .../app/controllers/apis-form-controller.js} | 0 .../app/controllers/apis-index-controller.js} | 0 .../app/controllers/apis-server-controller.js} | 0 .../app/controllers/apis/nested-form-controller.js} | 0 .../app/controllers/apis/rewrite-form-controller.js} | 0 .../app/controllers/apis/rewrites-controller.js} | 0 .../app/controllers/apis/server-form-controller.js} | 0 .../controllers/apis/settings-rate-limit-fields-controller.js} | 0 .../app/controllers/apis/sortable-controller.js} | 0 .../app/controllers/apis/sub-settings-controller.js} | 0 .../app/controllers/apis/sub-settings-form-controller.js} | 0 .../app/controllers/apis/url-match-form-controller.js} | 0 .../app/controllers/apis/url-matches-controller.js} | 0 .../javascripts/admin => admin/app}/controllers/application.js | 0 .../app/controllers/config/publish-controller.js} | 0 .../app/controllers/modal-controller.js} | 0 .../app/controllers/stats/base-controller.js} | 0 .../app/controllers/stats/drilldown-controller.js} | 0 .../app/controllers/stats/logs-controller.js} | 0 .../app/controllers/stats/map-controller.js} | 0 .../app/controllers/stats/users-controller.js} | 0 .../app/controllers/website-backends/form-controller.js} | 0 .../javascripts/admin/helpers => admin/app/models}/.gitkeep | 0 .../models/admin_group.js => admin/app/models/admin-group.js} | 0 .../admin_permission.js => admin/app/models/admin-permission.js} | 0 .../app/assets/javascripts/admin => admin/app}/models/admin.js | 0 .../admin/models/api_scope.js => admin/app/models/api-scope.js} | 0 .../models/api_user_role.js => admin/app/models/api-user-role.js} | 0 .../admin/models/api_user.js => admin/app/models/api-user.js} | 0 .../app/assets/javascripts/admin => admin/app}/models/api.js | 0 .../api/rate_limit.js => admin/app/models/api/rate-limit.js} | 0 .../assets/javascripts/admin => admin/app}/models/api/rewrite.js | 0 .../assets/javascripts/admin => admin/app}/models/api/server.js | 0 .../assets/javascripts/admin => admin/app}/models/api/settings.js | 0 .../api/sub_settings.js => admin/app/models/api/sub-settings.js} | 0 .../models/api/url_match.js => admin/app/models/api/url-match.js} | 0 .../javascripts/admin => admin/app}/models/stats/drilldown.js | 0 .../assets/javascripts/admin => admin/app}/models/stats/logs.js | 0 .../assets/javascripts/admin => admin/app}/models/stats/map.js | 0 .../website_backend.js => admin/app/models/website-backend.js} | 0 .../{web-app/app/assets/javascripts/admin => admin/app}/router.js | 0 .../assets/javascripts/admin/models => admin/app/routes}/.gitkeep | 0 .../base_route.js => admin/app/routes/admin-groups/base-route.js} | 0 .../edit_route.js => admin/app/routes/admin-groups/edit-route.js} | 0 .../app/routes/admin-groups/index-route.js} | 0 .../new_route.js => admin/app/routes/admin-groups/new-route.js} | 0 .../base_route.js => admin/app/routes/admins/base-route.js} | 0 .../edit_route.js => admin/app/routes/admins/edit-route.js} | 0 .../index_route.js => admin/app/routes/admins/index-route.js} | 0 .../admins/new_route.js => admin/app/routes/admins/new-route.js} | 0 .../base_route.js => admin/app/routes/api-scopes/base-route.js} | 0 .../edit_route.js => admin/app/routes/api-scopes/edit-route.js} | 0 .../index_route.js => admin/app/routes/api-scopes/index-route.js} | 0 .../new_route.js => admin/app/routes/api-scopes/new-route.js} | 0 .../base_route.js => admin/app/routes/api-users/base-route.js} | 0 .../edit_route.js => admin/app/routes/api-users/edit-route.js} | 0 .../index_route.js => admin/app/routes/api-users/index-route.js} | 0 .../new_route.js => admin/app/routes/api-users/new-route.js} | 0 .../apis/base_route.js => admin/app/routes/apis/base-route.js} | 0 .../apis/edit_route.js => admin/app/routes/apis/edit-route.js} | 0 .../apis/index_route.js => admin/app/routes/apis/index-route.js} | 0 .../apis/new_route.js => admin/app/routes/apis/new-route.js} | 0 .../app/routes/application-route.js} | 0 .../publish_route.js => admin/app/routes/config/publish-route.js} | 0 .../routes/loading_route.js => admin/app/routes/loading-route.js} | 0 .../stats/base_route.js => admin/app/routes/stats/base-route.js} | 0 .../app/routes/stats/drilldown-route.js} | 0 .../stats/logs_route.js => admin/app/routes/stats/logs-route.js} | 0 .../stats/map_route.js => admin/app/routes/stats/map-route.js} | 0 .../users_route.js => admin/app/routes/stats/users-route.js} | 0 .../app/routes/website-backends/base-route.js} | 0 .../app/routes/website-backends/edit-route.js} | 0 .../app/routes/website-backends/index-route.js} | 0 .../app/routes/website-backends/new-route.js} | 0 .../javascripts/admin/routes => admin/app/templates}/.gitkeep | 0 .../_form.hbs => admin/app/templates/admin-groups/-form.hbs} | 0 .../admin_groups => admin/app/templates/admin-groups}/edit.hbs | 0 .../admin_groups => admin/app/templates/admin-groups}/index.hbs | 0 .../admin_groups => admin/app/templates/admin-groups}/new.hbs | 0 .../admins/_form.hbs => admin/app/templates/admins/-form.hbs} | 0 .../javascripts/admin => admin/app}/templates/admins/edit.hbs | 0 .../javascripts/admin => admin/app}/templates/admins/index.hbs | 0 .../javascripts/admin => admin/app}/templates/admins/new.hbs | 0 .../_form.hbs => admin/app/templates/api-scopes/-form.hbs} | 0 .../api_scopes => admin/app/templates/api-scopes}/edit.hbs | 0 .../api_scopes => admin/app/templates/api-scopes}/index.hbs | 0 .../api_scopes => admin/app/templates/api-scopes}/new.hbs | 0 .../_form.hbs => admin/app/templates/api-users/-form.hbs} | 0 .../api_users => admin/app/templates/api-users}/edit.hbs | 0 .../api_users => admin/app/templates/api-users}/index.hbs | 0 .../templates/api_users => admin/app/templates/api-users}/new.hbs | 0 .../app/assets/javascripts/admin => admin/app}/templates/apis.hbs | 0 .../apis/_form.hbs => admin/app/templates/apis/-form.hbs} | 0 .../javascripts/admin => admin/app}/templates/apis/edit.hbs | 0 .../javascripts/admin => admin/app}/templates/apis/index.hbs | 0 .../assets/javascripts/admin => admin/app}/templates/apis/new.hbs | 0 .../app/templates/apis/rewrite-form.hbs} | 0 .../javascripts/admin => admin/app}/templates/apis/rewrites.hbs | 0 .../server_form.hbs => admin/app/templates/apis/server-form.hbs} | 0 .../app/templates/apis/settings-allowed-ips-fields.hbs} | 0 .../app/templates/apis/settings-allowed-referers-fields.hbs} | 0 .../app/templates/apis/settings-rate-limit-fields.hbs} | 0 .../app/templates/apis/sub-settings-form.hbs} | 0 .../app/templates/apis/sub-settings.hbs} | 0 .../app/templates/apis/url-match-form.hbs} | 0 .../url_matches.hbs => admin/app/templates/apis/url-matches.hbs} | 0 .../javascripts/admin => admin/app}/templates/application.hbs | 0 .../app}/templates/components/api-settings-fields.hbs | 0 .../admin => admin/app}/templates/components/error-messages.hbs | 0 .../app/templates/config/publish-record.hbs} | 0 .../javascripts/admin => admin/app}/templates/config/publish.hbs | 0 .../assets/javascripts/admin => admin/app}/templates/loading.hbs | 0 .../assets/javascripts/admin => admin/app}/templates/modal.hbs | 0 .../app/templates/stats/-facet-table.hbs} | 0 .../_query_form.hbs => admin/app/templates/stats/-query-form.hbs} | 0 .../javascripts/admin => admin/app}/templates/stats/drilldown.hbs | 0 .../javascripts/admin => admin/app}/templates/stats/logs.hbs | 0 .../javascripts/admin => admin/app}/templates/stats/map.hbs | 0 .../javascripts/admin => admin/app}/templates/stats/users.hbs | 0 .../_form.hbs => admin/app/templates/website-backends/-form.hbs} | 0 .../app/templates/website-backends}/edit.hbs | 0 .../app/templates/website-backends}/index.hbs | 0 .../app/templates/website-backends}/new.hbs | 0 .../javascripts/admin/templates => admin/app/views}/.gitkeep | 0 .../table_view.js => admin/app/views/admin-groups/table-view.js} | 0 .../admins/table_view.js => admin/app/views/admins/table-view.js} | 0 .../table_view.js => admin/app/views/api-scopes/table-view.js} | 0 .../edit_view.js => admin/app/views/api-users/edit-view.js} | 0 .../table_view.js => admin/app/views/api-users/table-view.js} | 0 .../apis/index_view.js => admin/app/views/apis/index-view.js} | 0 .../app/views/apis/server-form-view.js} | 0 .../apis/table_view.js => admin/app/views/apis/table-view.js} | 0 .../app/views/boolean-radio-button-view.js} | 0 .../app/views/checkbox-list-view.js} | 0 .../app/views/config/publish-record-view.js} | 0 .../publish_view.js => admin/app/views/config/publish-view.js} | 0 .../hide_modal_view.js => admin/app/views/hide-modal-view.js} | 0 .../app/views/loading-overlay-view.js} | 0 .../app/views/stats/drilldown-chart-view.js} | 0 .../app/views/stats/drilldown-table-view.js} | 0 .../app/views/stats/facet-table-view.js} | 0 .../app/views/stats/interval-chart-view.js} | 0 .../app/views/stats/logs-table-view.js} | 0 .../stats/logs_view.js => admin/app/views/stats/logs-view.js} | 0 .../map_geo_view.js => admin/app/views/stats/map-geo-view.js} | 0 .../map_table_view.js => admin/app/views/stats/map-table-view.js} | 0 .../app/views/stats/query-form-view.js} | 0 .../app/views/stats/users-table-view.js} | 0 .../app/views/website-backends/table-view.js} | 0 .../web-app/app/assets/javascripts/admin/views/.gitkeep | 0 159 files changed, 0 insertions(+), 0 deletions(-) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/app.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/components/api-settings-fields.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/components/error_messages_component.js => admin/app/components/error-messages-component.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/controllers/.gitkeep (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/admin_groups/form_controller.js => admin/app/controllers/admin-groups/form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/admins/form_controller.js => admin/app/controllers/admins/form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/admins/index_controller.js => admin/app/controllers/admins/index-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/api_scopes/form_controller.js => admin/app/controllers/api-scopes/form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/api_users/form_controller.js => admin/app/controllers/api-users/form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis_form_controller.js => admin/app/controllers/apis-form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis_index_controller.js => admin/app/controllers/apis-index-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis_server_controller.js => admin/app/controllers/apis-server-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/nested_form_controller.js => admin/app/controllers/apis/nested-form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/rewrite_form_controller.js => admin/app/controllers/apis/rewrite-form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/rewrites_controller.js => admin/app/controllers/apis/rewrites-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/server_form_controller.js => admin/app/controllers/apis/server-form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/settings_rate_limit_fields_controller.js => admin/app/controllers/apis/settings-rate-limit-fields-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/sortable_controller.js => admin/app/controllers/apis/sortable-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/sub_settings_controller.js => admin/app/controllers/apis/sub-settings-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/sub_settings_form_controller.js => admin/app/controllers/apis/sub-settings-form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/url_match_form_controller.js => admin/app/controllers/apis/url-match-form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/apis/url_matches_controller.js => admin/app/controllers/apis/url-matches-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/controllers/application.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/config/publish_controller.js => admin/app/controllers/config/publish-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/modal_controller.js => admin/app/controllers/modal-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/stats/base_controller.js => admin/app/controllers/stats/base-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/stats/drilldown_controller.js => admin/app/controllers/stats/drilldown-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/stats/logs_controller.js => admin/app/controllers/stats/logs-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/stats/map_controller.js => admin/app/controllers/stats/map-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/stats/users_controller.js => admin/app/controllers/stats/users-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/controllers/website_backends/form_controller.js => admin/app/controllers/website-backends/form-controller.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/helpers => admin/app/models}/.gitkeep (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/admin_group.js => admin/app/models/admin-group.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/admin_permission.js => admin/app/models/admin-permission.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/admin.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/api_scope.js => admin/app/models/api-scope.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/api_user_role.js => admin/app/models/api-user-role.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/api_user.js => admin/app/models/api-user.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/api.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/api/rate_limit.js => admin/app/models/api/rate-limit.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/api/rewrite.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/api/server.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/api/settings.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/api/sub_settings.js => admin/app/models/api/sub-settings.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/api/url_match.js => admin/app/models/api/url-match.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/stats/drilldown.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/stats/logs.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/models/stats/map.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models/website_backend.js => admin/app/models/website-backend.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/router.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/models => admin/app/routes}/.gitkeep (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admin_groups/base_route.js => admin/app/routes/admin-groups/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admin_groups/edit_route.js => admin/app/routes/admin-groups/edit-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admin_groups/index_route.js => admin/app/routes/admin-groups/index-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admin_groups/new_route.js => admin/app/routes/admin-groups/new-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admins/base_route.js => admin/app/routes/admins/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admins/edit_route.js => admin/app/routes/admins/edit-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admins/index_route.js => admin/app/routes/admins/index-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/admins/new_route.js => admin/app/routes/admins/new-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_scopes/base_route.js => admin/app/routes/api-scopes/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_scopes/edit_route.js => admin/app/routes/api-scopes/edit-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_scopes/index_route.js => admin/app/routes/api-scopes/index-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_scopes/new_route.js => admin/app/routes/api-scopes/new-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_users/base_route.js => admin/app/routes/api-users/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_users/edit_route.js => admin/app/routes/api-users/edit-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_users/index_route.js => admin/app/routes/api-users/index-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/api_users/new_route.js => admin/app/routes/api-users/new-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/apis/base_route.js => admin/app/routes/apis/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/apis/edit_route.js => admin/app/routes/apis/edit-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/apis/index_route.js => admin/app/routes/apis/index-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/apis/new_route.js => admin/app/routes/apis/new-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/application_route.js => admin/app/routes/application-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/config/publish_route.js => admin/app/routes/config/publish-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/loading_route.js => admin/app/routes/loading-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/stats/base_route.js => admin/app/routes/stats/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/stats/drilldown_route.js => admin/app/routes/stats/drilldown-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/stats/logs_route.js => admin/app/routes/stats/logs-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/stats/map_route.js => admin/app/routes/stats/map-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/stats/users_route.js => admin/app/routes/stats/users-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/website_backends/base_route.js => admin/app/routes/website-backends/base-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/website_backends/edit_route.js => admin/app/routes/website-backends/edit-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/website_backends/index_route.js => admin/app/routes/website-backends/index-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes/website_backends/new_route.js => admin/app/routes/website-backends/new-route.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/routes => admin/app/templates}/.gitkeep (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/admin_groups/_form.hbs => admin/app/templates/admin-groups/-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/admin_groups => admin/app/templates/admin-groups}/edit.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/admin_groups => admin/app/templates/admin-groups}/index.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/admin_groups => admin/app/templates/admin-groups}/new.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/admins/_form.hbs => admin/app/templates/admins/-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/admins/edit.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/admins/index.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/admins/new.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_scopes/_form.hbs => admin/app/templates/api-scopes/-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_scopes => admin/app/templates/api-scopes}/edit.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_scopes => admin/app/templates/api-scopes}/index.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_scopes => admin/app/templates/api-scopes}/new.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_users/_form.hbs => admin/app/templates/api-users/-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_users => admin/app/templates/api-users}/edit.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_users => admin/app/templates/api-users}/index.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/api_users => admin/app/templates/api-users}/new.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/apis.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/_form.hbs => admin/app/templates/apis/-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/apis/edit.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/apis/index.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/apis/new.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/rewrite_form.hbs => admin/app/templates/apis/rewrite-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/apis/rewrites.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/server_form.hbs => admin/app/templates/apis/server-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/settings_allowed_ips_fields.hbs => admin/app/templates/apis/settings-allowed-ips-fields.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/settings_allowed_referers_fields.hbs => admin/app/templates/apis/settings-allowed-referers-fields.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/settings_rate_limit_fields.hbs => admin/app/templates/apis/settings-rate-limit-fields.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/sub_settings_form.hbs => admin/app/templates/apis/sub-settings-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/sub_settings.hbs => admin/app/templates/apis/sub-settings.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/url_match_form.hbs => admin/app/templates/apis/url-match-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/apis/url_matches.hbs => admin/app/templates/apis/url-matches.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/application.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/components/api-settings-fields.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/components/error-messages.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/config/publish_record.hbs => admin/app/templates/config/publish-record.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/config/publish.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/loading.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/modal.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/stats/_facet_table.hbs => admin/app/templates/stats/-facet-table.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/stats/_query_form.hbs => admin/app/templates/stats/-query-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/stats/drilldown.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/stats/logs.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/stats/map.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin => admin/app}/templates/stats/users.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/website_backends/_form.hbs => admin/app/templates/website-backends/-form.hbs} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/website_backends => admin/app/templates/website-backends}/edit.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/website_backends => admin/app/templates/website-backends}/index.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates/website_backends => admin/app/templates/website-backends}/new.hbs (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/templates => admin/app/views}/.gitkeep (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/admin_groups/table_view.js => admin/app/views/admin-groups/table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/admins/table_view.js => admin/app/views/admins/table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/api_scopes/table_view.js => admin/app/views/api-scopes/table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/api_users/edit_view.js => admin/app/views/api-users/edit-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/api_users/table_view.js => admin/app/views/api-users/table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/apis/index_view.js => admin/app/views/apis/index-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/apis/server_form_view.js => admin/app/views/apis/server-form-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/apis/table_view.js => admin/app/views/apis/table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/boolean_radio_button_view.js => admin/app/views/boolean-radio-button-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/checkbox_list_view.js => admin/app/views/checkbox-list-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/config/publish_record_view.js => admin/app/views/config/publish-record-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/config/publish_view.js => admin/app/views/config/publish-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/hide_modal_view.js => admin/app/views/hide-modal-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/loading_overlay_view.js => admin/app/views/loading-overlay-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/drilldown_chart_view.js => admin/app/views/stats/drilldown-chart-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/drilldown_table_view.js => admin/app/views/stats/drilldown-table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/facet_table_view.js => admin/app/views/stats/facet-table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/interval_chart_view.js => admin/app/views/stats/interval-chart-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/logs_table_view.js => admin/app/views/stats/logs-table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/logs_view.js => admin/app/views/stats/logs-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/map_geo_view.js => admin/app/views/stats/map-geo-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/map_table_view.js => admin/app/views/stats/map-table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/query_form_view.js => admin/app/views/stats/query-form-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/stats/users_table_view.js => admin/app/views/stats/users-table-view.js} (100%) rename src/api-umbrella/{web-app/app/assets/javascripts/admin/views/website_backends/table_view.js => admin/app/views/website-backends/table-view.js} (100%) delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/views/.gitkeep diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/app.js b/src/api-umbrella/admin/app/app.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/app.js rename to src/api-umbrella/admin/app/app.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/components/api-settings-fields.js b/src/api-umbrella/admin/app/components/api-settings-fields.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/components/api-settings-fields.js rename to src/api-umbrella/admin/app/components/api-settings-fields.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/components/error_messages_component.js b/src/api-umbrella/admin/app/components/error-messages-component.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/components/error_messages_component.js rename to src/api-umbrella/admin/app/components/error-messages-component.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/.gitkeep b/src/api-umbrella/admin/app/controllers/.gitkeep similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/.gitkeep rename to src/api-umbrella/admin/app/controllers/.gitkeep diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/admin_groups/form_controller.js b/src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/admin_groups/form_controller.js rename to src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/admins/form_controller.js b/src/api-umbrella/admin/app/controllers/admins/form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/admins/form_controller.js rename to src/api-umbrella/admin/app/controllers/admins/form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/admins/index_controller.js b/src/api-umbrella/admin/app/controllers/admins/index-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/admins/index_controller.js rename to src/api-umbrella/admin/app/controllers/admins/index-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/api_scopes/form_controller.js b/src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/api_scopes/form_controller.js rename to src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/api_users/form_controller.js b/src/api-umbrella/admin/app/controllers/api-users/form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/api_users/form_controller.js rename to src/api-umbrella/admin/app/controllers/api-users/form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis_form_controller.js b/src/api-umbrella/admin/app/controllers/apis-form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis_form_controller.js rename to src/api-umbrella/admin/app/controllers/apis-form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis_index_controller.js b/src/api-umbrella/admin/app/controllers/apis-index-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis_index_controller.js rename to src/api-umbrella/admin/app/controllers/apis-index-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis_server_controller.js b/src/api-umbrella/admin/app/controllers/apis-server-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis_server_controller.js rename to src/api-umbrella/admin/app/controllers/apis-server-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/nested_form_controller.js b/src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/nested_form_controller.js rename to src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/rewrite_form_controller.js b/src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/rewrite_form_controller.js rename to src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/rewrites_controller.js b/src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/rewrites_controller.js rename to src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/server_form_controller.js b/src/api-umbrella/admin/app/controllers/apis/server-form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/server_form_controller.js rename to src/api-umbrella/admin/app/controllers/apis/server-form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/settings_rate_limit_fields_controller.js b/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/settings_rate_limit_fields_controller.js rename to src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/sortable_controller.js b/src/api-umbrella/admin/app/controllers/apis/sortable-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/sortable_controller.js rename to src/api-umbrella/admin/app/controllers/apis/sortable-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/sub_settings_controller.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/sub_settings_controller.js rename to src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/sub_settings_form_controller.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/sub_settings_form_controller.js rename to src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/url_match_form_controller.js b/src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/url_match_form_controller.js rename to src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/url_matches_controller.js b/src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/apis/url_matches_controller.js rename to src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/application.js b/src/api-umbrella/admin/app/controllers/application.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/application.js rename to src/api-umbrella/admin/app/controllers/application.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/config/publish_controller.js b/src/api-umbrella/admin/app/controllers/config/publish-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/config/publish_controller.js rename to src/api-umbrella/admin/app/controllers/config/publish-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/modal_controller.js b/src/api-umbrella/admin/app/controllers/modal-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/modal_controller.js rename to src/api-umbrella/admin/app/controllers/modal-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/base_controller.js b/src/api-umbrella/admin/app/controllers/stats/base-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/base_controller.js rename to src/api-umbrella/admin/app/controllers/stats/base-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/drilldown_controller.js b/src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/drilldown_controller.js rename to src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/logs_controller.js b/src/api-umbrella/admin/app/controllers/stats/logs-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/logs_controller.js rename to src/api-umbrella/admin/app/controllers/stats/logs-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/map_controller.js b/src/api-umbrella/admin/app/controllers/stats/map-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/map_controller.js rename to src/api-umbrella/admin/app/controllers/stats/map-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/users_controller.js b/src/api-umbrella/admin/app/controllers/stats/users-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/stats/users_controller.js rename to src/api-umbrella/admin/app/controllers/stats/users-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/website_backends/form_controller.js b/src/api-umbrella/admin/app/controllers/website-backends/form-controller.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/controllers/website_backends/form_controller.js rename to src/api-umbrella/admin/app/controllers/website-backends/form-controller.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/helpers/.gitkeep b/src/api-umbrella/admin/app/models/.gitkeep similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/helpers/.gitkeep rename to src/api-umbrella/admin/app/models/.gitkeep diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/admin_group.js b/src/api-umbrella/admin/app/models/admin-group.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/admin_group.js rename to src/api-umbrella/admin/app/models/admin-group.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/admin_permission.js b/src/api-umbrella/admin/app/models/admin-permission.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/admin_permission.js rename to src/api-umbrella/admin/app/models/admin-permission.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/admin.js b/src/api-umbrella/admin/app/models/admin.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/admin.js rename to src/api-umbrella/admin/app/models/admin.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api_scope.js b/src/api-umbrella/admin/app/models/api-scope.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api_scope.js rename to src/api-umbrella/admin/app/models/api-scope.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api_user_role.js b/src/api-umbrella/admin/app/models/api-user-role.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api_user_role.js rename to src/api-umbrella/admin/app/models/api-user-role.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api_user.js b/src/api-umbrella/admin/app/models/api-user.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api_user.js rename to src/api-umbrella/admin/app/models/api-user.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api.js b/src/api-umbrella/admin/app/models/api.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api.js rename to src/api-umbrella/admin/app/models/api.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/rate_limit.js b/src/api-umbrella/admin/app/models/api/rate-limit.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/rate_limit.js rename to src/api-umbrella/admin/app/models/api/rate-limit.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/rewrite.js b/src/api-umbrella/admin/app/models/api/rewrite.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/rewrite.js rename to src/api-umbrella/admin/app/models/api/rewrite.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/server.js b/src/api-umbrella/admin/app/models/api/server.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/server.js rename to src/api-umbrella/admin/app/models/api/server.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/settings.js b/src/api-umbrella/admin/app/models/api/settings.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/settings.js rename to src/api-umbrella/admin/app/models/api/settings.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/sub_settings.js b/src/api-umbrella/admin/app/models/api/sub-settings.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/sub_settings.js rename to src/api-umbrella/admin/app/models/api/sub-settings.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/url_match.js b/src/api-umbrella/admin/app/models/api/url-match.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/url_match.js rename to src/api-umbrella/admin/app/models/api/url-match.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/stats/drilldown.js b/src/api-umbrella/admin/app/models/stats/drilldown.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/stats/drilldown.js rename to src/api-umbrella/admin/app/models/stats/drilldown.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/stats/logs.js b/src/api-umbrella/admin/app/models/stats/logs.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/stats/logs.js rename to src/api-umbrella/admin/app/models/stats/logs.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/stats/map.js b/src/api-umbrella/admin/app/models/stats/map.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/stats/map.js rename to src/api-umbrella/admin/app/models/stats/map.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/website_backend.js b/src/api-umbrella/admin/app/models/website-backend.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/website_backend.js rename to src/api-umbrella/admin/app/models/website-backend.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/router.js b/src/api-umbrella/admin/app/router.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/router.js rename to src/api-umbrella/admin/app/router.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/models/.gitkeep b/src/api-umbrella/admin/app/routes/.gitkeep similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/models/.gitkeep rename to src/api-umbrella/admin/app/routes/.gitkeep diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/base_route.js b/src/api-umbrella/admin/app/routes/admin-groups/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/base_route.js rename to src/api-umbrella/admin/app/routes/admin-groups/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/edit_route.js b/src/api-umbrella/admin/app/routes/admin-groups/edit-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/edit_route.js rename to src/api-umbrella/admin/app/routes/admin-groups/edit-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/index_route.js b/src/api-umbrella/admin/app/routes/admin-groups/index-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/index_route.js rename to src/api-umbrella/admin/app/routes/admin-groups/index-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/new_route.js b/src/api-umbrella/admin/app/routes/admin-groups/new-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admin_groups/new_route.js rename to src/api-umbrella/admin/app/routes/admin-groups/new-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/base_route.js b/src/api-umbrella/admin/app/routes/admins/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/base_route.js rename to src/api-umbrella/admin/app/routes/admins/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/edit_route.js b/src/api-umbrella/admin/app/routes/admins/edit-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/edit_route.js rename to src/api-umbrella/admin/app/routes/admins/edit-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/index_route.js b/src/api-umbrella/admin/app/routes/admins/index-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/index_route.js rename to src/api-umbrella/admin/app/routes/admins/index-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/new_route.js b/src/api-umbrella/admin/app/routes/admins/new-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/admins/new_route.js rename to src/api-umbrella/admin/app/routes/admins/new-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/base_route.js b/src/api-umbrella/admin/app/routes/api-scopes/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/base_route.js rename to src/api-umbrella/admin/app/routes/api-scopes/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/edit_route.js b/src/api-umbrella/admin/app/routes/api-scopes/edit-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/edit_route.js rename to src/api-umbrella/admin/app/routes/api-scopes/edit-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/index_route.js b/src/api-umbrella/admin/app/routes/api-scopes/index-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/index_route.js rename to src/api-umbrella/admin/app/routes/api-scopes/index-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/new_route.js b/src/api-umbrella/admin/app/routes/api-scopes/new-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_scopes/new_route.js rename to src/api-umbrella/admin/app/routes/api-scopes/new-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/base_route.js b/src/api-umbrella/admin/app/routes/api-users/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/base_route.js rename to src/api-umbrella/admin/app/routes/api-users/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/edit_route.js b/src/api-umbrella/admin/app/routes/api-users/edit-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/edit_route.js rename to src/api-umbrella/admin/app/routes/api-users/edit-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/index_route.js b/src/api-umbrella/admin/app/routes/api-users/index-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/index_route.js rename to src/api-umbrella/admin/app/routes/api-users/index-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/new_route.js b/src/api-umbrella/admin/app/routes/api-users/new-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/api_users/new_route.js rename to src/api-umbrella/admin/app/routes/api-users/new-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/base_route.js b/src/api-umbrella/admin/app/routes/apis/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/base_route.js rename to src/api-umbrella/admin/app/routes/apis/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/edit_route.js b/src/api-umbrella/admin/app/routes/apis/edit-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/edit_route.js rename to src/api-umbrella/admin/app/routes/apis/edit-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/index_route.js b/src/api-umbrella/admin/app/routes/apis/index-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/index_route.js rename to src/api-umbrella/admin/app/routes/apis/index-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/new_route.js b/src/api-umbrella/admin/app/routes/apis/new-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/apis/new_route.js rename to src/api-umbrella/admin/app/routes/apis/new-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/application_route.js b/src/api-umbrella/admin/app/routes/application-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/application_route.js rename to src/api-umbrella/admin/app/routes/application-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/config/publish_route.js b/src/api-umbrella/admin/app/routes/config/publish-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/config/publish_route.js rename to src/api-umbrella/admin/app/routes/config/publish-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/loading_route.js b/src/api-umbrella/admin/app/routes/loading-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/loading_route.js rename to src/api-umbrella/admin/app/routes/loading-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/base_route.js b/src/api-umbrella/admin/app/routes/stats/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/base_route.js rename to src/api-umbrella/admin/app/routes/stats/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/drilldown_route.js b/src/api-umbrella/admin/app/routes/stats/drilldown-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/drilldown_route.js rename to src/api-umbrella/admin/app/routes/stats/drilldown-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/logs_route.js b/src/api-umbrella/admin/app/routes/stats/logs-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/logs_route.js rename to src/api-umbrella/admin/app/routes/stats/logs-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/map_route.js b/src/api-umbrella/admin/app/routes/stats/map-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/map_route.js rename to src/api-umbrella/admin/app/routes/stats/map-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/users_route.js b/src/api-umbrella/admin/app/routes/stats/users-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/stats/users_route.js rename to src/api-umbrella/admin/app/routes/stats/users-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/base_route.js b/src/api-umbrella/admin/app/routes/website-backends/base-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/base_route.js rename to src/api-umbrella/admin/app/routes/website-backends/base-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/edit_route.js b/src/api-umbrella/admin/app/routes/website-backends/edit-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/edit_route.js rename to src/api-umbrella/admin/app/routes/website-backends/edit-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/index_route.js b/src/api-umbrella/admin/app/routes/website-backends/index-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/index_route.js rename to src/api-umbrella/admin/app/routes/website-backends/index-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/new_route.js b/src/api-umbrella/admin/app/routes/website-backends/new-route.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/website_backends/new_route.js rename to src/api-umbrella/admin/app/routes/website-backends/new-route.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/routes/.gitkeep b/src/api-umbrella/admin/app/templates/.gitkeep similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/routes/.gitkeep rename to src/api-umbrella/admin/app/templates/.gitkeep diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/_form.hbs b/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/_form.hbs rename to src/api-umbrella/admin/app/templates/admin-groups/-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/edit.hbs b/src/api-umbrella/admin/app/templates/admin-groups/edit.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/edit.hbs rename to src/api-umbrella/admin/app/templates/admin-groups/edit.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/index.hbs b/src/api-umbrella/admin/app/templates/admin-groups/index.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/index.hbs rename to src/api-umbrella/admin/app/templates/admin-groups/index.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/new.hbs b/src/api-umbrella/admin/app/templates/admin-groups/new.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admin_groups/new.hbs rename to src/api-umbrella/admin/app/templates/admin-groups/new.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/_form.hbs b/src/api-umbrella/admin/app/templates/admins/-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/_form.hbs rename to src/api-umbrella/admin/app/templates/admins/-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/edit.hbs b/src/api-umbrella/admin/app/templates/admins/edit.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/edit.hbs rename to src/api-umbrella/admin/app/templates/admins/edit.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/index.hbs b/src/api-umbrella/admin/app/templates/admins/index.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/index.hbs rename to src/api-umbrella/admin/app/templates/admins/index.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/new.hbs b/src/api-umbrella/admin/app/templates/admins/new.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/admins/new.hbs rename to src/api-umbrella/admin/app/templates/admins/new.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/_form.hbs b/src/api-umbrella/admin/app/templates/api-scopes/-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/_form.hbs rename to src/api-umbrella/admin/app/templates/api-scopes/-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/edit.hbs b/src/api-umbrella/admin/app/templates/api-scopes/edit.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/edit.hbs rename to src/api-umbrella/admin/app/templates/api-scopes/edit.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/index.hbs b/src/api-umbrella/admin/app/templates/api-scopes/index.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/index.hbs rename to src/api-umbrella/admin/app/templates/api-scopes/index.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/new.hbs b/src/api-umbrella/admin/app/templates/api-scopes/new.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_scopes/new.hbs rename to src/api-umbrella/admin/app/templates/api-scopes/new.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/_form.hbs b/src/api-umbrella/admin/app/templates/api-users/-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/_form.hbs rename to src/api-umbrella/admin/app/templates/api-users/-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/edit.hbs b/src/api-umbrella/admin/app/templates/api-users/edit.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/edit.hbs rename to src/api-umbrella/admin/app/templates/api-users/edit.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/index.hbs b/src/api-umbrella/admin/app/templates/api-users/index.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/index.hbs rename to src/api-umbrella/admin/app/templates/api-users/index.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/new.hbs b/src/api-umbrella/admin/app/templates/api-users/new.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/api_users/new.hbs rename to src/api-umbrella/admin/app/templates/api-users/new.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis.hbs b/src/api-umbrella/admin/app/templates/apis.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis.hbs rename to src/api-umbrella/admin/app/templates/apis.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/_form.hbs b/src/api-umbrella/admin/app/templates/apis/-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/_form.hbs rename to src/api-umbrella/admin/app/templates/apis/-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/edit.hbs b/src/api-umbrella/admin/app/templates/apis/edit.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/edit.hbs rename to src/api-umbrella/admin/app/templates/apis/edit.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/index.hbs b/src/api-umbrella/admin/app/templates/apis/index.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/index.hbs rename to src/api-umbrella/admin/app/templates/apis/index.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/new.hbs b/src/api-umbrella/admin/app/templates/apis/new.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/new.hbs rename to src/api-umbrella/admin/app/templates/apis/new.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/rewrite_form.hbs b/src/api-umbrella/admin/app/templates/apis/rewrite-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/rewrite_form.hbs rename to src/api-umbrella/admin/app/templates/apis/rewrite-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/rewrites.hbs b/src/api-umbrella/admin/app/templates/apis/rewrites.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/rewrites.hbs rename to src/api-umbrella/admin/app/templates/apis/rewrites.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/server_form.hbs b/src/api-umbrella/admin/app/templates/apis/server-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/server_form.hbs rename to src/api-umbrella/admin/app/templates/apis/server-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/settings_allowed_ips_fields.hbs b/src/api-umbrella/admin/app/templates/apis/settings-allowed-ips-fields.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/settings_allowed_ips_fields.hbs rename to src/api-umbrella/admin/app/templates/apis/settings-allowed-ips-fields.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/settings_allowed_referers_fields.hbs b/src/api-umbrella/admin/app/templates/apis/settings-allowed-referers-fields.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/settings_allowed_referers_fields.hbs rename to src/api-umbrella/admin/app/templates/apis/settings-allowed-referers-fields.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/settings_rate_limit_fields.hbs b/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/settings_rate_limit_fields.hbs rename to src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/sub_settings_form.hbs b/src/api-umbrella/admin/app/templates/apis/sub-settings-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/sub_settings_form.hbs rename to src/api-umbrella/admin/app/templates/apis/sub-settings-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/sub_settings.hbs b/src/api-umbrella/admin/app/templates/apis/sub-settings.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/sub_settings.hbs rename to src/api-umbrella/admin/app/templates/apis/sub-settings.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/url_match_form.hbs b/src/api-umbrella/admin/app/templates/apis/url-match-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/url_match_form.hbs rename to src/api-umbrella/admin/app/templates/apis/url-match-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/url_matches.hbs b/src/api-umbrella/admin/app/templates/apis/url-matches.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/apis/url_matches.hbs rename to src/api-umbrella/admin/app/templates/apis/url-matches.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/application.hbs b/src/api-umbrella/admin/app/templates/application.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/application.hbs rename to src/api-umbrella/admin/app/templates/application.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/components/api-settings-fields.hbs b/src/api-umbrella/admin/app/templates/components/api-settings-fields.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/components/api-settings-fields.hbs rename to src/api-umbrella/admin/app/templates/components/api-settings-fields.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/components/error-messages.hbs b/src/api-umbrella/admin/app/templates/components/error-messages.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/components/error-messages.hbs rename to src/api-umbrella/admin/app/templates/components/error-messages.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/config/publish_record.hbs b/src/api-umbrella/admin/app/templates/config/publish-record.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/config/publish_record.hbs rename to src/api-umbrella/admin/app/templates/config/publish-record.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/config/publish.hbs b/src/api-umbrella/admin/app/templates/config/publish.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/config/publish.hbs rename to src/api-umbrella/admin/app/templates/config/publish.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/loading.hbs b/src/api-umbrella/admin/app/templates/loading.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/loading.hbs rename to src/api-umbrella/admin/app/templates/loading.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/modal.hbs b/src/api-umbrella/admin/app/templates/modal.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/modal.hbs rename to src/api-umbrella/admin/app/templates/modal.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/_facet_table.hbs b/src/api-umbrella/admin/app/templates/stats/-facet-table.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/_facet_table.hbs rename to src/api-umbrella/admin/app/templates/stats/-facet-table.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/_query_form.hbs b/src/api-umbrella/admin/app/templates/stats/-query-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/_query_form.hbs rename to src/api-umbrella/admin/app/templates/stats/-query-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/drilldown.hbs b/src/api-umbrella/admin/app/templates/stats/drilldown.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/drilldown.hbs rename to src/api-umbrella/admin/app/templates/stats/drilldown.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/logs.hbs b/src/api-umbrella/admin/app/templates/stats/logs.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/logs.hbs rename to src/api-umbrella/admin/app/templates/stats/logs.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/map.hbs b/src/api-umbrella/admin/app/templates/stats/map.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/map.hbs rename to src/api-umbrella/admin/app/templates/stats/map.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/users.hbs b/src/api-umbrella/admin/app/templates/stats/users.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/stats/users.hbs rename to src/api-umbrella/admin/app/templates/stats/users.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/_form.hbs b/src/api-umbrella/admin/app/templates/website-backends/-form.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/_form.hbs rename to src/api-umbrella/admin/app/templates/website-backends/-form.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/edit.hbs b/src/api-umbrella/admin/app/templates/website-backends/edit.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/edit.hbs rename to src/api-umbrella/admin/app/templates/website-backends/edit.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/index.hbs b/src/api-umbrella/admin/app/templates/website-backends/index.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/index.hbs rename to src/api-umbrella/admin/app/templates/website-backends/index.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/new.hbs b/src/api-umbrella/admin/app/templates/website-backends/new.hbs similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/website_backends/new.hbs rename to src/api-umbrella/admin/app/templates/website-backends/new.hbs diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/templates/.gitkeep b/src/api-umbrella/admin/app/views/.gitkeep similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/templates/.gitkeep rename to src/api-umbrella/admin/app/views/.gitkeep diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/admin_groups/table_view.js b/src/api-umbrella/admin/app/views/admin-groups/table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/admin_groups/table_view.js rename to src/api-umbrella/admin/app/views/admin-groups/table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/admins/table_view.js b/src/api-umbrella/admin/app/views/admins/table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/admins/table_view.js rename to src/api-umbrella/admin/app/views/admins/table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/api_scopes/table_view.js b/src/api-umbrella/admin/app/views/api-scopes/table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/api_scopes/table_view.js rename to src/api-umbrella/admin/app/views/api-scopes/table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/api_users/edit_view.js b/src/api-umbrella/admin/app/views/api-users/edit-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/api_users/edit_view.js rename to src/api-umbrella/admin/app/views/api-users/edit-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/api_users/table_view.js b/src/api-umbrella/admin/app/views/api-users/table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/api_users/table_view.js rename to src/api-umbrella/admin/app/views/api-users/table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/apis/index_view.js b/src/api-umbrella/admin/app/views/apis/index-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/apis/index_view.js rename to src/api-umbrella/admin/app/views/apis/index-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/apis/server_form_view.js b/src/api-umbrella/admin/app/views/apis/server-form-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/apis/server_form_view.js rename to src/api-umbrella/admin/app/views/apis/server-form-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/apis/table_view.js b/src/api-umbrella/admin/app/views/apis/table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/apis/table_view.js rename to src/api-umbrella/admin/app/views/apis/table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/boolean_radio_button_view.js b/src/api-umbrella/admin/app/views/boolean-radio-button-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/boolean_radio_button_view.js rename to src/api-umbrella/admin/app/views/boolean-radio-button-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/checkbox_list_view.js b/src/api-umbrella/admin/app/views/checkbox-list-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/checkbox_list_view.js rename to src/api-umbrella/admin/app/views/checkbox-list-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/config/publish_record_view.js b/src/api-umbrella/admin/app/views/config/publish-record-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/config/publish_record_view.js rename to src/api-umbrella/admin/app/views/config/publish-record-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/config/publish_view.js b/src/api-umbrella/admin/app/views/config/publish-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/config/publish_view.js rename to src/api-umbrella/admin/app/views/config/publish-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/hide_modal_view.js b/src/api-umbrella/admin/app/views/hide-modal-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/hide_modal_view.js rename to src/api-umbrella/admin/app/views/hide-modal-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/loading_overlay_view.js b/src/api-umbrella/admin/app/views/loading-overlay-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/loading_overlay_view.js rename to src/api-umbrella/admin/app/views/loading-overlay-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/drilldown_chart_view.js b/src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/drilldown_chart_view.js rename to src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/drilldown_table_view.js b/src/api-umbrella/admin/app/views/stats/drilldown-table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/drilldown_table_view.js rename to src/api-umbrella/admin/app/views/stats/drilldown-table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/facet_table_view.js b/src/api-umbrella/admin/app/views/stats/facet-table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/facet_table_view.js rename to src/api-umbrella/admin/app/views/stats/facet-table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/interval_chart_view.js b/src/api-umbrella/admin/app/views/stats/interval-chart-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/interval_chart_view.js rename to src/api-umbrella/admin/app/views/stats/interval-chart-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/logs_table_view.js b/src/api-umbrella/admin/app/views/stats/logs-table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/logs_table_view.js rename to src/api-umbrella/admin/app/views/stats/logs-table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/logs_view.js b/src/api-umbrella/admin/app/views/stats/logs-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/logs_view.js rename to src/api-umbrella/admin/app/views/stats/logs-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/map_geo_view.js b/src/api-umbrella/admin/app/views/stats/map-geo-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/map_geo_view.js rename to src/api-umbrella/admin/app/views/stats/map-geo-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/map_table_view.js b/src/api-umbrella/admin/app/views/stats/map-table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/map_table_view.js rename to src/api-umbrella/admin/app/views/stats/map-table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/query_form_view.js b/src/api-umbrella/admin/app/views/stats/query-form-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/query_form_view.js rename to src/api-umbrella/admin/app/views/stats/query-form-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/users_table_view.js b/src/api-umbrella/admin/app/views/stats/users-table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/stats/users_table_view.js rename to src/api-umbrella/admin/app/views/stats/users-table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/website_backends/table_view.js b/src/api-umbrella/admin/app/views/website-backends/table-view.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/admin/views/website_backends/table_view.js rename to src/api-umbrella/admin/app/views/website-backends/table-view.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/admin/views/.gitkeep b/src/api-umbrella/web-app/app/assets/javascripts/admin/views/.gitkeep deleted file mode 100644 index e69de29bb..000000000 From e0863855a2c9c58835a0a124f6f1861fd8ba8b85 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 2 Jan 2016 06:35:44 -0700 Subject: [PATCH 002/214] Commit from ember-cli-migrator's results. --- src/api-umbrella/admin/app/app.js | 40 +++++-------------- .../app/components/api-settings-fields.js | 4 ++ .../components/error-messages-component.js | 4 ++ .../admin-groups/form-controller.js | 5 ++- .../app/controllers/admins/form-controller.js | 5 ++- .../controllers/admins/index-controller.js | 4 ++ .../controllers/api-scopes/form-controller.js | 5 ++- .../controllers/api-users/form-controller.js | 5 ++- .../app/controllers/apis-form-controller.js | 5 ++- .../app/controllers/apis-index-controller.js | 4 ++ .../app/controllers/apis-server-controller.js | 4 ++ .../apis/nested-form-controller.js | 4 ++ .../apis/rewrite-form-controller.js | 2 + .../controllers/apis/rewrites-controller.js | 2 + .../apis/server-form-controller.js | 2 + .../settings-rate-limit-fields-controller.js | 4 ++ .../controllers/apis/sortable-controller.js | 4 ++ .../apis/sub-settings-controller.js | 2 + .../apis/sub-settings-form-controller.js | 2 + .../apis/url-match-form-controller.js | 2 + .../apis/url-matches-controller.js | 2 + .../admin/app/controllers/application.js | 4 ++ .../controllers/config/publish-controller.js | 4 ++ .../admin/app/controllers/modal-controller.js | 4 ++ .../app/controllers/stats/base-controller.js | 4 ++ .../controllers/stats/drilldown-controller.js | 3 +- .../app/controllers/stats/logs-controller.js | 3 +- .../app/controllers/stats/map-controller.js | 3 +- .../app/controllers/stats/users-controller.js | 3 +- .../website-backends/form-controller.js | 5 ++- .../admin/app/models/admin-group.js | 5 ++- .../admin/app/models/admin-permission.js | 5 ++- src/api-umbrella/admin/app/models/admin.js | 5 ++- .../admin/app/models/api-scope.js | 5 ++- .../admin/app/models/api-user-role.js | 5 ++- src/api-umbrella/admin/app/models/api-user.js | 5 ++- src/api-umbrella/admin/app/models/api.js | 5 ++- .../admin/app/models/api/rate-limit.js | 5 ++- .../admin/app/models/api/rewrite.js | 5 ++- .../admin/app/models/api/server.js | 5 ++- .../admin/app/models/api/settings.js | 5 ++- .../admin/app/models/api/sub-settings.js | 5 ++- .../admin/app/models/api/url-match.js | 5 ++- .../admin/app/models/stats/drilldown.js | 5 ++- .../admin/app/models/stats/logs.js | 5 ++- .../admin/app/models/stats/map.js | 5 ++- .../admin/app/models/website-backend.js | 5 ++- .../admin/app/nonjs/common-validations.js.erb | 5 +++ .../admin/app/nonjs/locales/de.js.erb | 3 ++ .../admin/app/nonjs/locales/en.js.erb | 3 ++ .../admin/app/nonjs/locales/es-419.js.erb | 3 ++ .../admin/app/nonjs/locales/fi.js.erb | 3 ++ .../admin/app/nonjs/locales/fr.js.erb | 3 ++ .../admin/app/nonjs/locales/it.js.erb | 3 ++ .../admin/app/nonjs/locales/ru.js.erb | 3 ++ src/api-umbrella/admin/app/router.js | 2 + .../app/routes/admin-groups/base-route.js | 4 ++ .../app/routes/admin-groups/edit-route.js | 2 + .../app/routes/admin-groups/index-route.js | 2 + .../app/routes/admin-groups/new-route.js | 1 + .../admin/app/routes/admins/base-route.js | 4 ++ .../admin/app/routes/admins/edit-route.js | 2 + .../admin/app/routes/admins/index-route.js | 2 + .../admin/app/routes/admins/new-route.js | 1 + .../admin/app/routes/api-scopes/base-route.js | 4 ++ .../admin/app/routes/api-scopes/edit-route.js | 2 + .../app/routes/api-scopes/index-route.js | 2 + .../admin/app/routes/api-scopes/new-route.js | 1 + .../admin/app/routes/api-users/base-route.js | 4 ++ .../admin/app/routes/api-users/edit-route.js | 2 + .../admin/app/routes/api-users/index-route.js | 2 + .../admin/app/routes/api-users/new-route.js | 1 + .../admin/app/routes/apis/base-route.js | 4 ++ .../admin/app/routes/apis/edit-route.js | 1 + .../admin/app/routes/apis/index-route.js | 2 + .../admin/app/routes/apis/new-route.js | 1 + .../admin/app/routes/application-route.js | 4 ++ .../admin/app/routes/config/publish-route.js | 4 ++ .../admin/app/routes/loading-route.js | 4 ++ .../admin/app/routes/stats/base-route.js | 4 ++ .../admin/app/routes/stats/drilldown-route.js | 3 +- .../admin/app/routes/stats/logs-route.js | 3 +- .../admin/app/routes/stats/map-route.js | 3 +- .../admin/app/routes/stats/users-route.js | 3 +- .../app/routes/website-backends/base-route.js | 4 ++ .../app/routes/website-backends/edit-route.js | 1 + .../routes/website-backends/index-route.js | 2 + .../app/routes/website-backends/new-route.js | 1 + .../app/views/admin-groups/table-view.js | 4 ++ .../admin/app/views/admins/table-view.js | 4 ++ .../admin/app/views/api-scopes/table-view.js | 4 ++ .../admin/app/views/api-users/edit-view.js | 4 ++ .../admin/app/views/api-users/table-view.js | 4 ++ .../admin/app/views/apis/index-view.js | 4 ++ .../admin/app/views/apis/server-form-view.js | 4 ++ .../admin/app/views/apis/table-view.js | 4 ++ .../app/views/boolean-radio-button-view.js | 4 ++ .../admin/app/views/checkbox-list-view.js | 5 ++- .../app/views/config/publish-record-view.js | 4 ++ .../admin/app/views/config/publish-view.js | 4 ++ .../admin/app/views/hide-modal-view.js | 4 ++ .../admin/app/views/loading-overlay-view.js | 4 ++ .../app/views/stats/drilldown-chart-view.js | 4 ++ .../app/views/stats/drilldown-table-view.js | 4 ++ .../admin/app/views/stats/facet-table-view.js | 4 ++ .../app/views/stats/interval-chart-view.js | 4 ++ .../admin/app/views/stats/logs-table-view.js | 4 ++ .../admin/app/views/stats/logs-view.js | 4 ++ .../admin/app/views/stats/map-geo-view.js | 4 ++ .../admin/app/views/stats/map-table-view.js | 4 ++ .../admin/app/views/stats/query-form-view.js | 4 ++ .../admin/app/views/stats/users-table-view.js | 4 ++ .../app/views/website-backends/table-view.js | 4 ++ 113 files changed, 376 insertions(+), 62 deletions(-) create mode 100644 src/api-umbrella/admin/app/nonjs/common-validations.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/de.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/en.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/fi.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/fr.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/it.js.erb create mode 100644 src/api-umbrella/admin/app/nonjs/locales/ru.js.erb diff --git a/src/api-umbrella/admin/app/app.js b/src/api-umbrella/admin/app/app.js index f4add6d46..44084c5bf 100644 --- a/src/api-umbrella/admin/app/app.js +++ b/src/api-umbrella/admin/app/app.js @@ -1,3 +1,11 @@ +import Ember from 'ember'; + +var Admin = Ember.Application.create({ + LOG_TRANSITIONS: true, + LOG_TRANSITIONS_INTERNAL: true, + + rootElement: '#content' +}); //= require_self //= require ./common_validations //= require_tree ./models @@ -15,7 +23,6 @@ // Set Bootbox defaults. bootbox.animate(false); - // PNotify Defaults. _.merge(PNotify.prototype.options, { styling: 'bootstrap2', @@ -29,7 +36,6 @@ _.merge(PNotify.prototype.options, { sticker: false } }); - (function() { var versionParts = Ember.VERSION.split('.'); var major = parseInt(versionParts[0], 10); @@ -79,14 +85,6 @@ _.merge(PNotify.prototype.options, { }, }); })(); - -window.Admin = Ember.Application.create({ - LOG_TRANSITIONS: true, - LOG_TRANSITIONS_INTERNAL: true, - - rootElement: '#content' -}); - function eachTranslatedAttribute(object, fn) { var isTranslatedAttribute = /(.+)Translation$/, isTranslatedAttributeMatch; @@ -99,7 +97,6 @@ function eachTranslatedAttribute(object, fn) { } } } - // Override existing Ember.EasyForm.processOptions to use our polyglot // translations instead of Ember.i18n for the special *Translation fields. // @@ -122,14 +119,12 @@ Ember.EasyForm.processOptions = function(property, options) { return options; }; - Ember.EasyForm.Tooltip = Ember.EasyForm.BaseView.extend({ tagName: 'a', attributeBindings: ['title', 'rel', 'data-tooltip-class'], template: Ember.Handlebars.compile(''), rel: 'tooltip', }); - Ember.Handlebars.registerBoundHelper('formatDate', function(date, format) { if(!format || !_.isString(format)) { format = 'YYYY-MM-DD HH:mm Z'; @@ -141,30 +136,24 @@ Ember.Handlebars.registerBoundHelper('formatDate', function(date, format) { return ''; } }); - Ember.Handlebars.helper('formatNumber', function(number) { return numeral(number).format('0,0'); }); - Ember.Handlebars.helper('inflect', function(word, number) { return inflection.inflect(word, number); }); - // i18n helper via polyglot library Ember.Handlebars.registerHelper('t', function(property, options) { return polyglot.t(property, options.hash); }); - Ember.Handlebars.registerHelper('tooltip-field', function(property, options) { options = Ember.EasyForm.processOptions(property, options); options.hash.viewName = 'tooltip-field-'+options.data.view.elementId; return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Tooltip, options); }); - // Use a custom template for Easy Form. This adds a tooltip and wraps that in // the control-label div with the label. Ember.TEMPLATES['easyForm/wrapped_input'] = Ember.Handlebars.compile('
{{label-field propertyBinding="view.property" textBinding="view.label" viewBinding="view"}}{{#if view.tooltip}}{{tooltip-field titleBinding="view.tooltip" data-tooltip-classBinding="view.tooltipClass"}}{{/if}}
{{partial "easyForm/inputControls"}}
'); - Ember.EasyForm.Config.registerInputType('selectize', Ember.EasyForm.TextField.extend({ defaultOptions: [], @@ -259,7 +248,6 @@ Ember.EasyForm.Config.registerInputType('selectize', Ember.EasyForm.TextField.ex } }, })); - Ember.EasyForm.Config.registerInputType('ace', Ember.EasyForm.TextArea.extend({ attributeBindings: ['data-ace-mode'], @@ -307,7 +295,6 @@ Ember.EasyForm.Config.registerInputType('ace', Ember.EasyForm.TextArea.extend({ }); }, })); - Ember.EasyForm.Config.registerWrapper('default', { formClass: '', fieldErrorClass: 'error', @@ -317,7 +304,6 @@ Ember.EasyForm.Config.registerWrapper('default', { wrapControls: true, controlsWrapperClass: 'controls' }); - Admin.APIUmbrellaRESTAdapter = Ember.RESTAdapter.extend({ ajaxSettings: function(url, method) { return { @@ -330,12 +316,10 @@ Admin.APIUmbrellaRESTAdapter = Ember.RESTAdapter.extend({ }; } }); - $.ajaxPrefilter(function(options) { options.headers = options.headers || {}; options.headers['X-Api-Key'] = webAdminAjaxApiKey; }); - // DataTables plugin to programmatically show the processing indidicator. // https://datatables.net/plug-ins/api#fnProcessingIndicator jQuery.fn.dataTableExt.oApi.fnProcessingIndicator = function ( oSettings, onoff ) @@ -346,8 +330,6 @@ jQuery.fn.dataTableExt.oApi.fnProcessingIndicator = function ( oSettings, onoff } this.oApi._fnProcessingDisplay( oSettings, onoff ); }; - - // Defaults for DataTables. _.merge($.fn.DataTable.defaults, { // Don't show the DataTables processing message. We'll handle the processing @@ -390,7 +372,6 @@ _.merge($.fn.DataTable.defaults, { } }, }); - Ember.EasyForm.Input.reopen({ didInsertElement: function() { var forId = this.get('input-field-' + this.elementId + '.overrideForElementId') || this.get('input-field-' + this.elementId + '.elementId'); @@ -413,7 +394,6 @@ Ember.EasyForm.Input.reopen({ } }.observes('context.showAllValidationErrors'), }); - Ember.EasyForm.Form.reopen({ submit: function(event) { if (event) { @@ -443,7 +423,6 @@ Ember.EasyForm.Form.reopen({ } }, }); - // A mixin that provides the default ajax save behavior for our forms. Admin.Save = Ember.Mixin.create({ save: function(options) { @@ -480,7 +459,6 @@ Admin.Save = Ember.Mixin.create({ }, this)); }, }); - Admin.DataTablesHelpers = { renderEscaped: function(value, type) { if(type === 'display' && value) { @@ -510,3 +488,5 @@ Admin.DataTablesHelpers = { return value; }, }; + +export default Admin; diff --git a/src/api-umbrella/admin/app/components/api-settings-fields.js b/src/api-umbrella/admin/app/components/api-settings-fields.js index be1bcf9c2..352eebe48 100644 --- a/src/api-umbrella/admin/app/components/api-settings-fields.js +++ b/src/api-umbrella/admin/app/components/api-settings-fields.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiSettingsFieldsComponent = Ember.Component.extend({ requireHttpsOptions: [ { id: null, name: polyglot.t('admin.api.settings.require_https_options.inherit') }, @@ -27,3 +29,5 @@ Admin.ApiSettingsFieldsComponent = Ember.Component.extend({ // model to refresh the options. }.property().cacheable(false), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/components/error-messages-component.js b/src/api-umbrella/admin/app/components/error-messages-component.js index 4a3d58dfb..f995077c2 100644 --- a/src/api-umbrella/admin/app/components/error-messages-component.js +++ b/src/api-umbrella/admin/app/components/error-messages-component.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ErrorMessagesComponent = Ember.Component.extend({ messages: function() { var messages = []; @@ -46,3 +48,5 @@ Admin.ErrorMessagesComponent = Ember.Component.extend({ return messages; }.property('model.clientErrors', 'model.serverErrors'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js b/src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js index 93f7d6fdb..108f9b507 100644 --- a/src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js +++ b/src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminGroupsFormController = Ember.ObjectController.extend(Admin.Save, { apiScopeOptions: function() { return Admin.ApiScope.find(); @@ -25,6 +27,7 @@ Admin.AdminGroupsFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); - Admin.AdminGroupsEditController = Admin.AdminGroupsFormController.extend(); Admin.AdminGroupsNewController = Admin.AdminGroupsFormController.extend(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admins/form-controller.js b/src/api-umbrella/admin/app/controllers/admins/form-controller.js index a5560656a..bff757c0e 100644 --- a/src/api-umbrella/admin/app/controllers/admins/form-controller.js +++ b/src/api-umbrella/admin/app/controllers/admins/form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminsFormController = Ember.ObjectController.extend(Admin.Save, { groupOptions: function() { return Admin.AdminGroup.find(); @@ -25,6 +27,7 @@ Admin.AdminsFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); - Admin.AdminsEditController = Admin.AdminsFormController.extend(); Admin.AdminsNewController = Admin.AdminsFormController.extend(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admins/index-controller.js b/src/api-umbrella/admin/app/controllers/admins/index-controller.js index 6912cfeed..20cfa3e3d 100644 --- a/src/api-umbrella/admin/app/controllers/admins/index-controller.js +++ b/src/api-umbrella/admin/app/controllers/admins/index-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminsIndexController = Ember.ObjectController.extend({ queryParams: null, @@ -14,3 +16,5 @@ Admin.AdminsIndexController = Ember.ObjectController.extend({ } } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js b/src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js index 0a424aba3..fbacc2392 100644 --- a/src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js +++ b/src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiScopesFormController = Ember.ObjectController.extend(Admin.Save, { actions: { submit: function() { @@ -17,6 +19,7 @@ Admin.ApiScopesFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); - Admin.ApiScopesEditController = Admin.ApiScopesFormController.extend(); Admin.ApiScopesNewController = Admin.ApiScopesFormController.extend(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/api-users/form-controller.js b/src/api-umbrella/admin/app/controllers/api-users/form-controller.js index a87ef3e8e..4d5958a46 100644 --- a/src/api-umbrella/admin/app/controllers/api-users/form-controller.js +++ b/src/api-umbrella/admin/app/controllers/api-users/form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiUsersFormController = Ember.ObjectController.extend(Admin.Save, { throttleByIpOptions: [ { id: false, name: 'Rate limit by API key' }, @@ -31,6 +33,7 @@ Admin.ApiUsersFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); - Admin.ApiUsersEditController = Admin.ApiUsersFormController.extend(); Admin.ApiUsersNewController = Admin.ApiUsersFormController.extend(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis-form-controller.js b/src/api-umbrella/admin/app/controllers/apis-form-controller.js index ae646dd99..65d0ef7f5 100644 --- a/src/api-umbrella/admin/app/controllers/apis-form-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis-form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisFormController = Ember.ObjectController.extend(Admin.Save, { needs: [ 'apis_server_form', @@ -119,6 +121,7 @@ Admin.ApisFormController = Ember.ObjectController.extend(Admin.Save, { }); }, }); - Admin.ApisEditController = Admin.ApisFormController.extend(); Admin.ApisNewController = Admin.ApisFormController.extend(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis-index-controller.js b/src/api-umbrella/admin/app/controllers/apis-index-controller.js index 7eb9ba14c..54df3c4cc 100644 --- a/src/api-umbrella/admin/app/controllers/apis-index-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis-index-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisIndexController = Ember.ArrayController.extend({ reorderActive: false, @@ -7,3 +9,5 @@ Admin.ApisIndexController = Ember.ArrayController.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis-server-controller.js b/src/api-umbrella/admin/app/controllers/apis-server-controller.js index c14cb3273..4728d7cd8 100644 --- a/src/api-umbrella/admin/app/controllers/apis-server-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis-server-controller.js @@ -1,3 +1,7 @@ +import Ember from 'ember'; + Admin.ApisServerController = Ember.Controller.extend({ title: 'HELLO' }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js index 44d952ad1..dac006361 100644 --- a/src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.NestedFormController = Ember.ObjectController.extend(Ember.Evented, { needs: ['modal'], @@ -64,3 +66,5 @@ Admin.NestedFormController = Ember.ObjectController.extend(Ember.Evented, { }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js index 1c68b9ac3..726829e1a 100644 --- a/src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js @@ -19,3 +19,5 @@ Admin.ApisRewriteFormController = Admin.NestedFormController.extend({ { id: 'PATCH', name: 'PATCH' }, ], }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js b/src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js index 8a6604668..530bee832 100644 --- a/src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js @@ -5,3 +5,5 @@ Admin.ApisRewritesController = Admin.ApisSortableController.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/server-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/server-form-controller.js index 99fc80623..a992d8939 100644 --- a/src/api-umbrella/admin/app/controllers/apis/server-form-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/server-form-controller.js @@ -1,3 +1,5 @@ Admin.ApisServerFormController = Admin.NestedFormController.extend({ titleBase: 'Server', }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js b/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js index c77a013b4..77ff36c6e 100644 --- a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisSettingsRateLimitFieldsController = Ember.ObjectController.extend({ rateLimitModeOptions: [ { id: null, name: 'Default rate limits' }, @@ -46,3 +48,5 @@ Admin.ApisSettingsRateLimitFieldsController = Ember.ObjectController.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/sortable-controller.js b/src/api-umbrella/admin/app/controllers/apis/sortable-controller.js index 5f2ee1593..a98d25d12 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sortable-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/sortable-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisSortableController = Ember.ArrayController.extend({ reorderable: function() { var length = this.get('length'); @@ -45,3 +47,5 @@ Admin.ApisSortableController = Ember.ArrayController.extend({ }); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js index 1e65653ec..9706aa2f3 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js @@ -5,3 +5,5 @@ Admin.ApisSubSettingsController = Admin.ApisSortableController.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js index d1aa13986..8f0e51762 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js @@ -14,3 +14,5 @@ Admin.ApisSubSettingsFormController = Admin.NestedFormController.extend({ { id: 'PATCH', name: 'PATCH' }, ], }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js index 0de0262f5..ad9ef60e1 100644 --- a/src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js @@ -14,3 +14,5 @@ Admin.ApisUrlMatchFormController = Admin.NestedFormController.extend({ return root + prefix + this.get('exampleSuffix'); }.property('backendPrefix', 'frontendPrefix'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js b/src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js index acc3bfa49..034f3718f 100644 --- a/src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js +++ b/src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js @@ -5,3 +5,5 @@ Admin.ApisUrlMatchesController = Admin.ApisSortableController.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/application.js b/src/api-umbrella/admin/app/controllers/application.js index 0bf4b56fc..576265a01 100644 --- a/src/api-umbrella/admin/app/controllers/application.js +++ b/src/api-umbrella/admin/app/controllers/application.js @@ -1,3 +1,7 @@ +import Ember from 'ember'; + Admin.ApplicationController = Ember.ObjectController.extend({ isLoading: null, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/config/publish-controller.js b/src/api-umbrella/admin/app/controllers/config/publish-controller.js index 58dcacc16..57863cf5a 100644 --- a/src/api-umbrella/admin/app/controllers/config/publish-controller.js +++ b/src/api-umbrella/admin/app/controllers/config/publish-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ConfigPublishController = Ember.Controller.extend({ hasChanges: function() { var newApis = this.get('model.config.apis.new'); @@ -14,3 +16,5 @@ Admin.ConfigPublishController = Ember.Controller.extend({ } }.property('model.config.apis.new.@each', 'model.config.apis.modified.@each', 'model.config.apis.deleted.@each', 'model.config.website_backends.new.@each', 'model.config.website_backends.modified.@each', 'model.config.website_backends.deleted.@each'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/modal-controller.js b/src/api-umbrella/admin/app/controllers/modal-controller.js index b90fb80c3..8efcd23ae 100644 --- a/src/api-umbrella/admin/app/controllers/modal-controller.js +++ b/src/api-umbrella/admin/app/controllers/modal-controller.js @@ -1,3 +1,7 @@ +import Ember from 'ember'; + Admin.ModalController = Ember.Controller.extend({ title: 'Example Modal Title' }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/base-controller.js b/src/api-umbrella/admin/app/controllers/stats/base-controller.js index d41068d14..abc4f43cb 100644 --- a/src/api-umbrella/admin/app/controllers/stats/base-controller.js +++ b/src/api-umbrella/admin/app/controllers/stats/base-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsBaseController = Ember.ObjectController.extend({ needs: ['application'], @@ -20,3 +22,5 @@ Admin.StatsBaseController = Ember.ObjectController.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js b/src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js index dfc37f1aa..3e746dc4e 100644 --- a/src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js +++ b/src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js @@ -26,9 +26,10 @@ Admin.StatsDrilldownController = Admin.StatsBaseController.extend({ return '/api-umbrella/v1/analytics/drilldown.csv?' + $.param(this.get('query.params')) + '&api_key=' + webAdminAjaxApiKey; }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.prefix'), }); - Admin.StatsDrilldownDefaultController = Admin.StatsDrilldownController.extend({ renderTemplate: function() { this.render('stats/drilldown'); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/logs-controller.js b/src/api-umbrella/admin/app/controllers/stats/logs-controller.js index 4ab3662e9..13a8454f5 100644 --- a/src/api-umbrella/admin/app/controllers/stats/logs-controller.js +++ b/src/api-umbrella/admin/app/controllers/stats/logs-controller.js @@ -3,6 +3,7 @@ Admin.StatsLogsController = Admin.StatsBaseController.extend({ return '/admin/stats/logs.csv?' + $.param(this.get('query.params')); }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at'), }); - Admin.StatsLogsDefaultController = Admin.StatsLogsController.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/map-controller.js b/src/api-umbrella/admin/app/controllers/stats/map-controller.js index 2ee431c93..a1fad1815 100644 --- a/src/api-umbrella/admin/app/controllers/stats/map-controller.js +++ b/src/api-umbrella/admin/app/controllers/stats/map-controller.js @@ -22,9 +22,10 @@ Admin.StatsMapController = Admin.StatsBaseController.extend({ return '/admin/stats/map.csv?' + $.param(this.get('query.params')); }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at'), }); - Admin.StatsMapDefaultController = Admin.StatsMapController.extend({ renderTemplate: function() { this.render('stats/users'); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/users-controller.js b/src/api-umbrella/admin/app/controllers/stats/users-controller.js index f73db4fca..d1213db93 100644 --- a/src/api-umbrella/admin/app/controllers/stats/users-controller.js +++ b/src/api-umbrella/admin/app/controllers/stats/users-controller.js @@ -3,9 +3,10 @@ Admin.StatsUsersController = Admin.StatsBaseController.extend({ return '/admin/stats/users.csv?' + $.param(this.get('query.params')); }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at'), }); - Admin.StatsUsersDefaultController = Admin.StatsUsersController.extend({ renderTemplate: function() { this.render('stats/users'); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/website-backends/form-controller.js b/src/api-umbrella/admin/app/controllers/website-backends/form-controller.js index bf758a445..733cf792c 100644 --- a/src/api-umbrella/admin/app/controllers/website-backends/form-controller.js +++ b/src/api-umbrella/admin/app/controllers/website-backends/form-controller.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.WebsiteBackendsFormController = Ember.ObjectController.extend(Admin.Save, { backendProtocolOptions: [ { id: 'http', name: 'http' }, @@ -36,6 +38,7 @@ Admin.WebsiteBackendsFormController = Ember.ObjectController.extend(Admin.Save, }, }, }); - Admin.WebsiteBackendsEditController = Admin.WebsiteBackendsFormController.extend(); Admin.WebsiteBackendsNewController = Admin.WebsiteBackendsFormController.extend(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/admin-group.js b/src/api-umbrella/admin/app/models/admin-group.js index 2631be56e..768cb2893 100644 --- a/src/api-umbrella/admin/app/models/admin-group.js +++ b/src/api-umbrella/admin/app/models/admin-group.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminGroup = Ember.Model.extend(Ember.Validations.Mixin, { id: Ember.attr(), name: Ember.attr(), @@ -14,10 +16,11 @@ Admin.AdminGroup = Ember.Model.extend(Ember.Validations.Mixin, { }, }, }); - Admin.AdminGroup.url = '/api-umbrella/v1/admin_groups'; Admin.AdminGroup.rootKey = 'admin_group'; Admin.AdminGroup.collectionKey = 'data'; Admin.AdminGroup.primaryKey = 'id'; Admin.AdminGroup.camelizeKeys = true; Admin.AdminGroup.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/admin-permission.js b/src/api-umbrella/admin/app/models/admin-permission.js index 1e07e567a..8c271d6c4 100644 --- a/src/api-umbrella/admin/app/models/admin-permission.js +++ b/src/api-umbrella/admin/app/models/admin-permission.js @@ -1,11 +1,14 @@ +import Ember from 'ember'; + Admin.AdminPermission = Ember.Model.extend({ id: Ember.attr(), name: Ember.attr() }); - Admin.AdminPermission.url = '/api-umbrella/v1/admin_permissions'; Admin.AdminPermission.rootKey = 'admin_permission'; Admin.AdminPermission.collectionKey = 'admin_permissions'; Admin.AdminPermission.primaryKey = 'id'; Admin.AdminPermission.camelizeKeys = true; Admin.AdminPermission.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/admin.js b/src/api-umbrella/admin/app/models/admin.js index 2b509d964..048825024 100644 --- a/src/api-umbrella/admin/app/models/admin.js +++ b/src/api-umbrella/admin/app/models/admin.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.Admin = Ember.Model.extend({ id: Ember.attr(), username: Ember.attr(), @@ -15,10 +17,11 @@ Admin.Admin = Ember.Model.extend({ creator: Ember.attr(), updater: Ember.attr(), }); - Admin.Admin.url = '/api-umbrella/v1/admins'; Admin.Admin.rootKey = 'admin'; Admin.Admin.collectionKey = 'data'; Admin.Admin.primaryKey = 'id'; Admin.Admin.camelizeKeys = true; Admin.Admin.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api-scope.js b/src/api-umbrella/admin/app/models/api-scope.js index e1895cb8b..0865a8352 100644 --- a/src/api-umbrella/admin/app/models/api-scope.js +++ b/src/api-umbrella/admin/app/models/api-scope.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiScope = Ember.Model.extend(Ember.Validations.Mixin, { id: Ember.attr(), name: Ember.attr(), @@ -32,10 +34,11 @@ Admin.ApiScope = Ember.Model.extend(Ember.Validations.Mixin, { return this.get('name') + ' - ' + this.get('host') + this.get('pathPrefix'); }.property('name', 'host', 'pathPrefix') }); - Admin.ApiScope.url = '/api-umbrella/v1/api_scopes'; Admin.ApiScope.rootKey = 'api_scope'; Admin.ApiScope.collectionKey = 'data'; Admin.ApiScope.primaryKey = 'id'; Admin.ApiScope.camelizeKeys = true; Admin.ApiScope.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api-user-role.js b/src/api-umbrella/admin/app/models/api-user-role.js index 72efe7707..0b9f30aed 100644 --- a/src/api-umbrella/admin/app/models/api-user-role.js +++ b/src/api-umbrella/admin/app/models/api-user-role.js @@ -1,10 +1,13 @@ +import Ember from 'ember'; + Admin.ApiUserRole = Ember.Model.extend({ id: Ember.attr(), }); - Admin.ApiUserRole.url = '/api-umbrella/v1/user_roles'; Admin.ApiUserRole.rootKey = 'user_roles'; Admin.ApiUserRole.collectionKey = 'user_roles'; Admin.ApiUserRole.primaryKey = 'id'; Admin.ApiUserRole.camelizeKeys = true; Admin.ApiUserRole.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api-user.js b/src/api-umbrella/admin/app/models/api-user.js index 2372895d8..9738f3cac 100644 --- a/src/api-umbrella/admin/app/models/api-user.js +++ b/src/api-umbrella/admin/app/models/api-user.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiUser = Ember.Model.extend(Ember.Validations.Mixin, { id: Ember.attr(), apiKey: Ember.attr(), @@ -88,10 +90,11 @@ Admin.ApiUser = Ember.Model.extend(Ember.Validations.Mixin, { Admin.ApiUserRole.clearCache(); }, }); - Admin.ApiUser.url = '/api-umbrella/v1/users'; Admin.ApiUser.rootKey = 'user'; Admin.ApiUser.collectionKey = 'data'; Admin.ApiUser.primaryKey = 'id'; Admin.ApiUser.camelizeKeys = true; Admin.ApiUser.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api.js b/src/api-umbrella/admin/app/models/api.js index 2257d294b..13d924aeb 100644 --- a/src/api-umbrella/admin/app/models/api.js +++ b/src/api-umbrella/admin/app/models/api.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.Api = Ember.Model.extend(Ember.Validations.Mixin, { name: Ember.attr(), sortOrder: Ember.attr(Number), @@ -73,10 +75,11 @@ Admin.Api = Ember.Model.extend(Ember.Validations.Mixin, { Admin.ApiUserRole.clearCache(); }, }); - Admin.Api.url = '/api-umbrella/v1/apis'; Admin.Api.rootKey = 'api'; Admin.Api.collectionKey = 'data'; Admin.Api.primaryKey = 'id'; Admin.Api.camelizeKeys = true; Admin.Api.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/rate-limit.js b/src/api-umbrella/admin/app/models/api/rate-limit.js index 31761f698..539a32e95 100644 --- a/src/api-umbrella/admin/app/models/api/rate-limit.js +++ b/src/api-umbrella/admin/app/models/api/rate-limit.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiRateLimit = Ember.Model.extend({ id: Ember.attr(), duration: Ember.attr(Number), @@ -62,6 +64,7 @@ Admin.ApiRateLimit = Ember.Model.extend({ return json; }, }); - Admin.ApiRateLimit.primaryKey = 'id'; Admin.ApiRateLimit.camelizeKeys = true; + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/rewrite.js b/src/api-umbrella/admin/app/models/api/rewrite.js index 1d2095ce5..8498a6bcb 100644 --- a/src/api-umbrella/admin/app/models/api/rewrite.js +++ b/src/api-umbrella/admin/app/models/api/rewrite.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiRewrite = Ember.Model.extend({ id: Ember.attr(), sortOrder: Ember.attr(Number), @@ -6,6 +8,7 @@ Admin.ApiRewrite = Ember.Model.extend({ frontendMatcher: Ember.attr(), backendReplacement: Ember.attr(), }); - Admin.ApiRewrite.primaryKey = 'id'; Admin.ApiRewrite.camelizeKeys = true; + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/server.js b/src/api-umbrella/admin/app/models/api/server.js index 7a35dd3c4..7e1fe31fa 100644 --- a/src/api-umbrella/admin/app/models/api/server.js +++ b/src/api-umbrella/admin/app/models/api/server.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiServer = Ember.Model.extend(Ember.Validations.Mixin, { id: Ember.attr(), host: Ember.attr(), @@ -21,6 +23,7 @@ Admin.ApiServer = Ember.Model.extend(Ember.Validations.Mixin, { return _.compact([this.get('host'), this.get('port')]).join(':'); }.property('host', 'port'), }); - Admin.ApiServer.primaryKey = 'id'; Admin.ApiServer.camelizeKeys = true; + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/settings.js b/src/api-umbrella/admin/app/models/api/settings.js index eb019fedd..0c730dcea 100644 --- a/src/api-umbrella/admin/app/models/api/settings.js +++ b/src/api-umbrella/admin/app/models/api/settings.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiSettings = Ember.Model.extend({ id: Ember.attr(), appendQueryString: Ember.attr(), @@ -103,6 +105,7 @@ Admin.ApiSettings = Ember.Model.extend({ return (this.get('rateLimitMode') === 'custom'); }.property('rateLimitMode'), }); - Admin.ApiSettings.primaryKey = 'id'; Admin.ApiSettings.camelizeKeys = true; + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/sub-settings.js b/src/api-umbrella/admin/app/models/api/sub-settings.js index 90bb037de..2ad042c3e 100644 --- a/src/api-umbrella/admin/app/models/api/sub-settings.js +++ b/src/api-umbrella/admin/app/models/api/sub-settings.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiSubSettings = Ember.Model.extend({ id: Ember.attr(), sortOrder: Ember.attr(Number), @@ -22,6 +24,7 @@ Admin.ApiSubSettings = Ember.Model.extend({ } }, }); - Admin.ApiSubSettings.primaryKey = 'id'; Admin.ApiSubSettings.camelizeKeys = true; + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/url-match.js b/src/api-umbrella/admin/app/models/api/url-match.js index e5b86d088..609a4b4e0 100644 --- a/src/api-umbrella/admin/app/models/api/url-match.js +++ b/src/api-umbrella/admin/app/models/api/url-match.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiUrlMatch = Ember.Model.extend(Ember.Validations.Mixin,{ id: Ember.attr(), sortOrder: Ember.attr(Number), @@ -25,6 +27,7 @@ Admin.ApiUrlMatch = Ember.Model.extend(Ember.Validations.Mixin,{ return this.get('backendPrefix') || this.get('frontendPrefix'); }.property('backendPrefix', 'frontendPrefix'), }); - Admin.ApiUrlMatch.primaryKey = 'id'; Admin.ApiUrlMatch.camelizeKeys = true; + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/stats/drilldown.js b/src/api-umbrella/admin/app/models/stats/drilldown.js index 53f283e6c..e940c1831 100644 --- a/src/api-umbrella/admin/app/models/stats/drilldown.js +++ b/src/api-umbrella/admin/app/models/stats/drilldown.js @@ -1,7 +1,8 @@ +import Ember from 'ember'; + Admin.StatsDrilldown = Ember.Object.extend(Ember.Evented, { results: null, }); - Admin.StatsDrilldown.reopenClass({ find: function(params) { var promise = Ember.Deferred.create(); @@ -19,3 +20,5 @@ Admin.StatsDrilldown.reopenClass({ return promise; }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/stats/logs.js b/src/api-umbrella/admin/app/models/stats/logs.js index 0663d1474..7a247c970 100644 --- a/src/api-umbrella/admin/app/models/stats/logs.js +++ b/src/api-umbrella/admin/app/models/stats/logs.js @@ -1,10 +1,11 @@ +import Ember from 'ember'; + Admin.StatsLogs = Ember.Object.extend(Ember.Evented, { hits_over_time: null, stats: null, facets: null, logs: null, }); - Admin.StatsLogs.reopenClass({ find: function(params) { var promise = Ember.Deferred.create(); @@ -22,3 +23,5 @@ Admin.StatsLogs.reopenClass({ return promise; }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/stats/map.js b/src/api-umbrella/admin/app/models/stats/map.js index cbfae9485..87b5ef965 100644 --- a/src/api-umbrella/admin/app/models/stats/map.js +++ b/src/api-umbrella/admin/app/models/stats/map.js @@ -1,8 +1,9 @@ +import Ember from 'ember'; + Admin.StatsMap = Ember.Object.extend(Ember.Evented, { regions: null, map_regions: null, }); - Admin.StatsMap.reopenClass({ find: function(params) { var promise = Ember.Deferred.create(); @@ -20,3 +21,5 @@ Admin.StatsMap.reopenClass({ return promise; }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/models/website-backend.js b/src/api-umbrella/admin/app/models/website-backend.js index 5f792d711..d856ae141 100644 --- a/src/api-umbrella/admin/app/models/website-backend.js +++ b/src/api-umbrella/admin/app/models/website-backend.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.WebsiteBackend = Ember.Model.extend(Ember.Validations.Mixin, { id: Ember.attr(), frontendHost: Ember.attr(), @@ -29,10 +31,11 @@ Admin.WebsiteBackend = Ember.Model.extend(Ember.Validations.Mixin, { }, }, }); - Admin.WebsiteBackend.url = '/api-umbrella/v1/website_backends'; Admin.WebsiteBackend.rootKey = 'website_backend'; Admin.WebsiteBackend.collectionKey = 'data'; Admin.WebsiteBackend.primaryKey = 'id'; Admin.WebsiteBackend.camelizeKeys = true; Admin.WebsiteBackend.adapter = Admin.APIUmbrellaRESTAdapter.create(); + +export default undefined; diff --git a/src/api-umbrella/admin/app/nonjs/common-validations.js.erb b/src/api-umbrella/admin/app/nonjs/common-validations.js.erb new file mode 100644 index 000000000..16bea1379 --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/common-validations.js.erb @@ -0,0 +1,5 @@ +var CommonValidations = { + host_format: new RegExp(<%= CommonValidations::HOST_FORMAT.source.to_json %>), + host_format_with_wildcard: new RegExp(<%= CommonValidations::HOST_FORMAT_WITH_WILDCARD.source.to_json %>), + url_prefix_format: new RegExp(<%= CommonValidations::URL_PREFIX_FORMAT.source.to_json %>) +}; diff --git a/src/api-umbrella/admin/app/nonjs/locales/de.js.erb b/src/api-umbrella/admin/app/nonjs/locales/de.js.erb new file mode 100644 index 000000000..b77c25540 --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/de.js.erb @@ -0,0 +1,3 @@ +//= depend_on "de.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:de) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/en.js.erb b/src/api-umbrella/admin/app/nonjs/locales/en.js.erb new file mode 100644 index 000000000..5968984c3 --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/en.js.erb @@ -0,0 +1,3 @@ +//= depend_on "en.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:en) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb b/src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb new file mode 100644 index 000000000..c47343eff --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb @@ -0,0 +1,3 @@ +//= depend_on "es-419.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:"es-419") %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/fi.js.erb b/src/api-umbrella/admin/app/nonjs/locales/fi.js.erb new file mode 100644 index 000000000..5c5423b0f --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/fi.js.erb @@ -0,0 +1,3 @@ +//= depend_on "fi.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:fi) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/fr.js.erb b/src/api-umbrella/admin/app/nonjs/locales/fr.js.erb new file mode 100644 index 000000000..0254c0fd9 --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/fr.js.erb @@ -0,0 +1,3 @@ +//= depend_on "fr.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:fr) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/it.js.erb b/src/api-umbrella/admin/app/nonjs/locales/it.js.erb new file mode 100644 index 000000000..c4cb74684 --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/it.js.erb @@ -0,0 +1,3 @@ +//= depend_on "it.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:it) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/ru.js.erb b/src/api-umbrella/admin/app/nonjs/locales/ru.js.erb new file mode 100644 index 000000000..142719c62 --- /dev/null +++ b/src/api-umbrella/admin/app/nonjs/locales/ru.js.erb @@ -0,0 +1,3 @@ +//= depend_on "ru.yml" +//= require polyglot +<%= JsLocaleHelper.output_locale(:ru) %> diff --git a/src/api-umbrella/admin/app/router.js b/src/api-umbrella/admin/app/router.js index 4c81d5ffc..18735b5f0 100644 --- a/src/api-umbrella/admin/app/router.js +++ b/src/api-umbrella/admin/app/router.js @@ -47,3 +47,5 @@ Admin.Router.map(function() { this.route('edit', { path: '/:websiteBackendId/edit' }); }); }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/base-route.js b/src/api-umbrella/admin/app/routes/admin-groups/base-route.js index 4fd32f526..85e1269dd 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/base-route.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminGroupsBaseRoute = Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -6,3 +8,5 @@ Admin.AdminGroupsBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/edit-route.js b/src/api-umbrella/admin/app/routes/admin-groups/edit-route.js index 30e77806b..3b9afade3 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/edit-route.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/edit-route.js @@ -7,3 +7,5 @@ Admin.AdminGroupsEditRoute = Admin.AdminGroupsBaseRoute.extend({ return Admin.AdminGroup.find(params.adminGroupId); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/index-route.js b/src/api-umbrella/admin/app/routes/admin-groups/index-route.js index db28c3a36..75dce3724 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/index-route.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/index-route.js @@ -1,2 +1,4 @@ Admin.AdminGroupsIndexRoute = Admin.AdminGroupsBaseRoute.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/new-route.js b/src/api-umbrella/admin/app/routes/admin-groups/new-route.js index 622adf7a8..369813489 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/new-route.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/new-route.js @@ -4,3 +4,4 @@ Admin.AdminGroupsNewRoute = Admin.AdminGroupsBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/base-route.js b/src/api-umbrella/admin/app/routes/admins/base-route.js index e41accc57..c3982ef02 100644 --- a/src/api-umbrella/admin/app/routes/admins/base-route.js +++ b/src/api-umbrella/admin/app/routes/admins/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminsBaseRoute = Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -6,3 +8,5 @@ Admin.AdminsBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/edit-route.js b/src/api-umbrella/admin/app/routes/admins/edit-route.js index c2e8d0b60..dd8f0cc1f 100644 --- a/src/api-umbrella/admin/app/routes/admins/edit-route.js +++ b/src/api-umbrella/admin/app/routes/admins/edit-route.js @@ -7,3 +7,5 @@ Admin.AdminsEditRoute = Admin.AdminsBaseRoute.extend({ return Admin.Admin.find(params.adminId); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/index-route.js b/src/api-umbrella/admin/app/routes/admins/index-route.js index 5b46d86ed..10eab70c7 100644 --- a/src/api-umbrella/admin/app/routes/admins/index-route.js +++ b/src/api-umbrella/admin/app/routes/admins/index-route.js @@ -1,2 +1,4 @@ Admin.AdminsIndexRoute = Admin.AdminsBaseRoute.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/new-route.js b/src/api-umbrella/admin/app/routes/admins/new-route.js index b506a4219..129cfd6a7 100644 --- a/src/api-umbrella/admin/app/routes/admins/new-route.js +++ b/src/api-umbrella/admin/app/routes/admins/new-route.js @@ -4,3 +4,4 @@ Admin.AdminsNewRoute = Admin.AdminsBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/base-route.js b/src/api-umbrella/admin/app/routes/api-scopes/base-route.js index 5185b09cd..27aa8081b 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/base-route.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiScopesBaseRoute = Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -6,3 +8,5 @@ Admin.ApiScopesBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/edit-route.js b/src/api-umbrella/admin/app/routes/api-scopes/edit-route.js index c2ac168e5..119f7178d 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/edit-route.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/edit-route.js @@ -7,3 +7,5 @@ Admin.ApiScopesEditRoute = Admin.ApiScopesBaseRoute.extend({ return Admin.ApiScope.find(params.apiScopeId); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/index-route.js b/src/api-umbrella/admin/app/routes/api-scopes/index-route.js index 5bcb4a732..219a172d8 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/index-route.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/index-route.js @@ -1,2 +1,4 @@ Admin.ApiScopesIndexRoute = Admin.ApiScopesBaseRoute.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/new-route.js b/src/api-umbrella/admin/app/routes/api-scopes/new-route.js index 4bca8b857..8044e3245 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/new-route.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/new-route.js @@ -4,3 +4,4 @@ Admin.ApiScopesNewRoute = Admin.ApiScopesBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/base-route.js b/src/api-umbrella/admin/app/routes/api-users/base-route.js index e88ba48ea..4f11305a4 100644 --- a/src/api-umbrella/admin/app/routes/api-users/base-route.js +++ b/src/api-umbrella/admin/app/routes/api-users/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiUsersBaseRoute = Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -6,3 +8,5 @@ Admin.ApiUsersBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/edit-route.js b/src/api-umbrella/admin/app/routes/api-users/edit-route.js index 2ac81be8b..fca6f6557 100644 --- a/src/api-umbrella/admin/app/routes/api-users/edit-route.js +++ b/src/api-umbrella/admin/app/routes/api-users/edit-route.js @@ -7,3 +7,5 @@ Admin.ApiUsersEditRoute = Admin.ApiUsersBaseRoute.extend({ return Admin.ApiUser.find(params.apiUserId); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/index-route.js b/src/api-umbrella/admin/app/routes/api-users/index-route.js index 32c93bad3..81b89d477 100644 --- a/src/api-umbrella/admin/app/routes/api-users/index-route.js +++ b/src/api-umbrella/admin/app/routes/api-users/index-route.js @@ -1,2 +1,4 @@ Admin.ApiUsersIndexRoute = Admin.ApiUsersBaseRoute.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/new-route.js b/src/api-umbrella/admin/app/routes/api-users/new-route.js index d6d37b429..d672d22b5 100644 --- a/src/api-umbrella/admin/app/routes/api-users/new-route.js +++ b/src/api-umbrella/admin/app/routes/api-users/new-route.js @@ -4,3 +4,4 @@ Admin.ApiUsersNewRoute = Admin.ApiUsersBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/base-route.js b/src/api-umbrella/admin/app/routes/apis/base-route.js index 3c0fb3fad..0708084cb 100644 --- a/src/api-umbrella/admin/app/routes/apis/base-route.js +++ b/src/api-umbrella/admin/app/routes/apis/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisBaseRoute = Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -6,3 +8,5 @@ Admin.ApisBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-config').addClass('active'); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/edit-route.js b/src/api-umbrella/admin/app/routes/apis/edit-route.js index aaf72486c..a434ab525 100644 --- a/src/api-umbrella/admin/app/routes/apis/edit-route.js +++ b/src/api-umbrella/admin/app/routes/apis/edit-route.js @@ -8,3 +8,4 @@ Admin.ApisEditRoute = Admin.ApisBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/index-route.js b/src/api-umbrella/admin/app/routes/apis/index-route.js index 1bd5bab00..1262c8400 100644 --- a/src/api-umbrella/admin/app/routes/apis/index-route.js +++ b/src/api-umbrella/admin/app/routes/apis/index-route.js @@ -1,2 +1,4 @@ Admin.ApisIndexRoute = Admin.ApisBaseRoute.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/new-route.js b/src/api-umbrella/admin/app/routes/apis/new-route.js index c6c3678b4..58600af35 100644 --- a/src/api-umbrella/admin/app/routes/apis/new-route.js +++ b/src/api-umbrella/admin/app/routes/apis/new-route.js @@ -6,3 +6,4 @@ Admin.ApisNewRoute = Admin.ApisBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/application-route.js b/src/api-umbrella/admin/app/routes/application-route.js index d42b128ee..e3fe32b13 100644 --- a/src/api-umbrella/admin/app/routes/application-route.js +++ b/src/api-umbrella/admin/app/routes/application-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApplicationRoute = Ember.Route.extend({ actions: { openModal: function(template) { @@ -19,3 +21,5 @@ Admin.ApplicationRoute = Ember.Route.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/config/publish-route.js b/src/api-umbrella/admin/app/routes/config/publish-route.js index d10929e32..fe002b0bc 100644 --- a/src/api-umbrella/admin/app/routes/config/publish-route.js +++ b/src/api-umbrella/admin/app/routes/config/publish-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ConfigPublishRoute = Ember.Route.extend({ model: function() { return ic.ajax.request('/api-umbrella/v1/config/pending_changes'); @@ -47,3 +49,5 @@ Admin.ConfigPublishRoute = Ember.Route.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/loading-route.js b/src/api-umbrella/admin/app/routes/loading-route.js index 2ea2f3b5a..86457e67f 100644 --- a/src/api-umbrella/admin/app/routes/loading-route.js +++ b/src/api-umbrella/admin/app/routes/loading-route.js @@ -1 +1,5 @@ +import Ember from 'ember'; + Admin.LoadingRoute = Ember.Route.extend({}); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/base-route.js b/src/api-umbrella/admin/app/routes/stats/base-route.js index a61287cfd..d9168d3ca 100644 --- a/src/api-umbrella/admin/app/routes/stats/base-route.js +++ b/src/api-umbrella/admin/app/routes/stats/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsBaseRoute = Ember.Route.extend({ defaultQueryParams: { tz: jstz.determine().name(), @@ -88,3 +90,5 @@ Admin.StatsBaseRoute = Ember.Route.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/drilldown-route.js b/src/api-umbrella/admin/app/routes/stats/drilldown-route.js index cd7e6f926..a9e9ea5e1 100644 --- a/src/api-umbrella/admin/app/routes/stats/drilldown-route.js +++ b/src/api-umbrella/admin/app/routes/stats/drilldown-route.js @@ -55,9 +55,10 @@ Admin.StatsDrilldownRoute = Admin.StatsBaseRoute.extend({ return valid; }, }); - Admin.StatsDrilldownDefaultRoute = Admin.StatsDrilldownRoute.extend({ renderTemplate: function() { this.render('stats/drilldown', { controller: 'statsDrilldownDefault' }); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/logs-route.js b/src/api-umbrella/admin/app/routes/stats/logs-route.js index bcb9b77c8..a2dd6251b 100644 --- a/src/api-umbrella/admin/app/routes/stats/logs-route.js +++ b/src/api-umbrella/admin/app/routes/stats/logs-route.js @@ -54,9 +54,10 @@ Admin.StatsLogsRoute = Admin.StatsBaseRoute.extend({ return valid; }, }); - Admin.StatsLogsDefaultRoute = Admin.StatsLogsRoute.extend({ renderTemplate: function() { this.render('stats/logs', { controller: 'statsLogsDefault' }); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/map-route.js b/src/api-umbrella/admin/app/routes/stats/map-route.js index 0996f4ceb..f46cc1735 100644 --- a/src/api-umbrella/admin/app/routes/stats/map-route.js +++ b/src/api-umbrella/admin/app/routes/stats/map-route.js @@ -20,9 +20,10 @@ Admin.StatsMapRoute = Admin.StatsBaseRoute.extend({ } }.observes('query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.region'), }); - Admin.StatsMapDefaultRoute = Admin.StatsMapRoute.extend({ renderTemplate: function() { this.render('stats/map', { controller: 'statsMapDefault' }); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/users-route.js b/src/api-umbrella/admin/app/routes/stats/users-route.js index ee371f282..7824a5ef2 100644 --- a/src/api-umbrella/admin/app/routes/stats/users-route.js +++ b/src/api-umbrella/admin/app/routes/stats/users-route.js @@ -14,9 +14,10 @@ Admin.StatsUsersRoute = Admin.StatsBaseRoute.extend({ } }.observes('query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at'), }); - Admin.StatsUsersDefaultRoute = Admin.StatsUsersRoute.extend({ renderTemplate: function() { this.render('stats/users', { controller: 'statsUsersDefault' }); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/base-route.js b/src/api-umbrella/admin/app/routes/website-backends/base-route.js index 22172a1e7..25ee923d8 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/base-route.js +++ b/src/api-umbrella/admin/app/routes/website-backends/base-route.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.WebsiteBackendsBaseRoute = Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -6,3 +8,5 @@ Admin.WebsiteBackendsBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-config').addClass('active'); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/edit-route.js b/src/api-umbrella/admin/app/routes/website-backends/edit-route.js index c3031de36..18a9b3c98 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/edit-route.js +++ b/src/api-umbrella/admin/app/routes/website-backends/edit-route.js @@ -8,3 +8,4 @@ Admin.WebsiteBackendsEditRoute = Admin.WebsiteBackendsBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/index-route.js b/src/api-umbrella/admin/app/routes/website-backends/index-route.js index fff47781f..8815b9602 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/index-route.js +++ b/src/api-umbrella/admin/app/routes/website-backends/index-route.js @@ -1,2 +1,4 @@ Admin.WebsiteBackendsIndexRoute = Admin.WebsiteBackendsBaseRoute.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/new-route.js b/src/api-umbrella/admin/app/routes/website-backends/new-route.js index a05eb596d..fb58b833b 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/new-route.js +++ b/src/api-umbrella/admin/app/routes/website-backends/new-route.js @@ -6,3 +6,4 @@ Admin.WebsiteBackendsNewRoute = Admin.WebsiteBackendsBaseRoute.extend({ }, }); +export default undefined; diff --git a/src/api-umbrella/admin/app/views/admin-groups/table-view.js b/src/api-umbrella/admin/app/views/admin-groups/table-view.js index a992d41c7..634e81a28 100644 --- a/src/api-umbrella/admin/app/views/admin-groups/table-view.js +++ b/src/api-umbrella/admin/app/views/admin-groups/table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminGroupsTableView = Ember.View.extend({ tagName: 'table', @@ -38,3 +40,5 @@ Admin.AdminGroupsTableView = Ember.View.extend({ }); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/admins/table-view.js b/src/api-umbrella/admin/app/views/admins/table-view.js index 4ba232c0f..1fba9d408 100644 --- a/src/api-umbrella/admin/app/views/admins/table-view.js +++ b/src/api-umbrella/admin/app/views/admins/table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.AdminsTableView = Ember.View.extend({ tagName: 'table', @@ -67,3 +69,5 @@ Admin.AdminsTableView = Ember.View.extend({ }.bind(this)); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/api-scopes/table-view.js b/src/api-umbrella/admin/app/views/api-scopes/table-view.js index 9fbccf29d..704d0cb8f 100644 --- a/src/api-umbrella/admin/app/views/api-scopes/table-view.js +++ b/src/api-umbrella/admin/app/views/api-scopes/table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiScopesTableView = Ember.View.extend({ tagName: 'table', @@ -39,3 +41,5 @@ Admin.ApiScopesTableView = Ember.View.extend({ }); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/api-users/edit-view.js b/src/api-umbrella/admin/app/views/api-users/edit-view.js index ba791e795..f1b0d99ce 100644 --- a/src/api-umbrella/admin/app/views/api-users/edit-view.js +++ b/src/api-umbrella/admin/app/views/api-users/edit-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiUsersEditView = Ember.View.extend({ willDestroyElement: function() { if(this.apiKeyHideTimeout) { @@ -22,3 +24,5 @@ Admin.ApiUsersEditView = Ember.View.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/api-users/table-view.js b/src/api-umbrella/admin/app/views/api-users/table-view.js index d2d1cf24a..dd2f28cfa 100644 --- a/src/api-umbrella/admin/app/views/api-users/table-view.js +++ b/src/api-umbrella/admin/app/views/api-users/table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApiUsersTableView = Ember.View.extend({ tagName: 'table', @@ -65,3 +67,5 @@ Admin.ApiUsersTableView = Ember.View.extend({ }); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/apis/index-view.js b/src/api-umbrella/admin/app/views/apis/index-view.js index 1dea8491e..161235f21 100644 --- a/src/api-umbrella/admin/app/views/apis/index-view.js +++ b/src/api-umbrella/admin/app/views/apis/index-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisIndexView = Ember.View.extend({ handleReorderChange: function() { var $container = this.$(); @@ -12,3 +14,5 @@ Admin.ApisIndexView = Ember.View.extend({ } }.observes('controller.reorderActive'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/apis/server-form-view.js b/src/api-umbrella/admin/app/views/apis/server-form-view.js index 9959be8f7..3b963eb3f 100644 --- a/src/api-umbrella/admin/app/views/apis/server-form-view.js +++ b/src/api-umbrella/admin/app/views/apis/server-form-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisServerFormView = Ember.View.extend({ templateName: 'apis/server_form', @@ -8,3 +10,5 @@ Admin.ApisServerFormView = Ember.View.extend({ } } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/apis/table-view.js b/src/api-umbrella/admin/app/views/apis/table-view.js index dadaa4b7d..7b745f6e5 100644 --- a/src/api-umbrella/admin/app/views/apis/table-view.js +++ b/src/api-umbrella/admin/app/views/apis/table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ApisTableView = Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -134,3 +136,5 @@ Admin.ApisTableView = Ember.View.extend({ }, this)); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/boolean-radio-button-view.js b/src/api-umbrella/admin/app/views/boolean-radio-button-view.js index 80224b321..877d94c5e 100644 --- a/src/api-umbrella/admin/app/views/boolean-radio-button-view.js +++ b/src/api-umbrella/admin/app/views/boolean-radio-button-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.BooleanRadioButtonView = Ember.View.extend({ tagName: 'input', type: 'radio', @@ -23,3 +25,5 @@ Admin.BooleanRadioButtonView = Ember.View.extend({ return !!this.get('selection'); }.property() }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/checkbox-list-view.js b/src/api-umbrella/admin/app/views/checkbox-list-view.js index 545c00b03..4a3a31db9 100644 --- a/src/api-umbrella/admin/app/views/checkbox-list-view.js +++ b/src/api-umbrella/admin/app/views/checkbox-list-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.CheckboxListItemView = Ember.Checkbox.extend({ checked: function() { var checkedValues = this.get('checkedValues') || []; @@ -19,7 +21,6 @@ Admin.CheckboxListItemView = Ember.Checkbox.extend({ this.set('checkedValues', checkedValues); } }); - Admin.CheckboxListView = Ember.CollectionView.extend({ itemViewClass: Ember.View.extend({ checkedValuesBinding: 'parentView.checkedValues', @@ -27,3 +28,5 @@ Admin.CheckboxListView = Ember.CollectionView.extend({ template: Ember.Handlebars.compile('') }), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/config/publish-record-view.js b/src/api-umbrella/admin/app/views/config/publish-record-view.js index 31f41b1a2..78c242548 100644 --- a/src/api-umbrella/admin/app/views/config/publish-record-view.js +++ b/src/api-umbrella/admin/app/views/config/publish-record-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ConfigPublishRecordView = Ember.View.extend({ actions: { toggleConfigDiff: function(id) { @@ -5,3 +7,5 @@ Admin.ConfigPublishRecordView = Ember.View.extend({ } } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/config/publish-view.js b/src/api-umbrella/admin/app/views/config/publish-view.js index 1f0672d60..322134cd0 100644 --- a/src/api-umbrella/admin/app/views/config/publish-view.js +++ b/src/api-umbrella/admin/app/views/config/publish-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.ConfigPublishView = Ember.View.extend({ didInsertElement: function() { this.$toggleCheckboxesLink = $('#toggle_checkboxes'); @@ -66,3 +68,5 @@ Admin.ConfigPublishView = Ember.View.extend({ } } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/hide-modal-view.js b/src/api-umbrella/admin/app/views/hide-modal-view.js index 4234bac7c..8e9c9ba35 100644 --- a/src/api-umbrella/admin/app/views/hide-modal-view.js +++ b/src/api-umbrella/admin/app/views/hide-modal-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.HideModalView = Ember.View.extend({ render: function() { }, @@ -6,3 +8,5 @@ Admin.HideModalView = Ember.View.extend({ $('.modal').modal('hide'); } }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/loading-overlay-view.js b/src/api-umbrella/admin/app/views/loading-overlay-view.js index 00986cc3f..34c26c8b5 100644 --- a/src/api-umbrella/admin/app/views/loading-overlay-view.js +++ b/src/api-umbrella/admin/app/views/loading-overlay-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.LoadingOverlayView = Ember.View.extend({ classNames: ['loading-overlay'], attributeBindings: ['style'], @@ -53,3 +55,5 @@ Admin.LoadingOverlayView = Ember.View.extend({ } }.observes('isLoading'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js b/src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js index e377ec565..511f55fce 100644 --- a/src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js +++ b/src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsDrilldownChartView = Ember.View.extend({ data: [], @@ -89,3 +91,5 @@ Admin.StatsDrilldownChartView = Ember.View.extend({ this.chart.draw(this.dataTable, this.chartOptions); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/drilldown-table-view.js b/src/api-umbrella/admin/app/views/stats/drilldown-table-view.js index 80b888312..2fe74cf75 100644 --- a/src/api-umbrella/admin/app/views/stats/drilldown-table-view.js +++ b/src/api-umbrella/admin/app/views/stats/drilldown-table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsDrilldownTableView = Ember.View.extend({ tagName: 'table', @@ -52,3 +54,5 @@ Admin.StatsDrilldownTableView = Ember.View.extend({ table.rows.add(this.get('model.results')).draw(); }.observes('model.results'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/facet-table-view.js b/src/api-umbrella/admin/app/views/stats/facet-table-view.js index c1681e142..5f907bc3c 100644 --- a/src/api-umbrella/admin/app/views/stats/facet-table-view.js +++ b/src/api-umbrella/admin/app/views/stats/facet-table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsFacetTableView = Ember.View.extend({ templateName: 'stats/_facet_table', @@ -15,3 +17,5 @@ Admin.StatsFacetTableView = Ember.View.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/interval-chart-view.js b/src/api-umbrella/admin/app/views/stats/interval-chart-view.js index fe25ebf86..a560e2d09 100644 --- a/src/api-umbrella/admin/app/views/stats/interval-chart-view.js +++ b/src/api-umbrella/admin/app/views/stats/interval-chart-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsIntervalChartView = Ember.View.extend({ data: [], @@ -95,3 +97,5 @@ Admin.StatsIntervalChartView = Ember.View.extend({ this.chart.draw(this.dataTable, this.chartOptions); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/logs-table-view.js b/src/api-umbrella/admin/app/views/stats/logs-table-view.js index b5c662958..d4ac6a8f1 100644 --- a/src/api-umbrella/admin/app/views/stats/logs-table-view.js +++ b/src/api-umbrella/admin/app/views/stats/logs-table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.LogsTableView = Ember.View.extend({ tagName: 'table', @@ -186,3 +188,5 @@ Admin.LogsTableView = Ember.View.extend({ Ember.run.once(this, 'redrawTable'); }.observes('controller.query.params.query', 'controller.query.params.search', 'controller.query.params.start_at', 'controller.query.params.end_at'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/logs-view.js b/src/api-umbrella/admin/app/views/stats/logs-view.js index 5920ee5a6..1deac58dd 100644 --- a/src/api-umbrella/admin/app/views/stats/logs-view.js +++ b/src/api-umbrella/admin/app/views/stats/logs-view.js @@ -1,2 +1,6 @@ +import Ember from 'ember'; + Admin.StatsLogsView = Ember.View.extend({ }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/map-geo-view.js b/src/api-umbrella/admin/app/views/stats/map-geo-view.js index ba412196f..39b734e70 100644 --- a/src/api-umbrella/admin/app/views/stats/map-geo-view.js +++ b/src/api-umbrella/admin/app/views/stats/map-geo-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsMapGeoView = Ember.View.extend({ data: [], @@ -79,3 +81,5 @@ Admin.StatsMapGeoView = Ember.View.extend({ this.chart.draw(this.dataTable, this.chartOptions); }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/map-table-view.js b/src/api-umbrella/admin/app/views/stats/map-table-view.js index 11007e487..5e2cc3149 100644 --- a/src/api-umbrella/admin/app/views/stats/map-table-view.js +++ b/src/api-umbrella/admin/app/views/stats/map-table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsMapTableView = Ember.View.extend({ tagName: 'table', @@ -54,3 +56,5 @@ Admin.StatsMapTableView = Ember.View.extend({ table.rows.add(this.get('model.regions')).draw(); }.observes('model.regions'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/query-form-view.js b/src/api-umbrella/admin/app/views/stats/query-form-view.js index 03af750cb..be8267e1e 100644 --- a/src/api-umbrella/admin/app/views/stats/query-form-view.js +++ b/src/api-umbrella/admin/app/views/stats/query-form-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsQueryFormView = Ember.View.extend({ templateName: 'stats/_query_form', @@ -335,3 +337,5 @@ Admin.StatsQueryFormView = Ember.View.extend({ }, }, }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/users-table-view.js b/src/api-umbrella/admin/app/views/stats/users-table-view.js index 871faabcf..faae4d56c 100644 --- a/src/api-umbrella/admin/app/views/stats/users-table-view.js +++ b/src/api-umbrella/admin/app/views/stats/users-table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.StatsUsersTableView = Ember.View.extend({ tagName: 'table', @@ -84,3 +86,5 @@ Admin.StatsUsersTableView = Ember.View.extend({ this.$().DataTable().draw(); }.observes('controller.query.params.query', 'controller.query.params.search', 'controller.query.params.start_at', 'controller.query.params.end_at'), }); + +export default undefined; diff --git a/src/api-umbrella/admin/app/views/website-backends/table-view.js b/src/api-umbrella/admin/app/views/website-backends/table-view.js index d4717d9eb..647f0289b 100644 --- a/src/api-umbrella/admin/app/views/website-backends/table-view.js +++ b/src/api-umbrella/admin/app/views/website-backends/table-view.js @@ -1,3 +1,5 @@ +import Ember from 'ember'; + Admin.WebsiteBackendsTableView = Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -29,3 +31,5 @@ Admin.WebsiteBackendsTableView = Ember.View.extend({ })); }, }); + +export default undefined; From ab7a328fa763f75e2ef48e33ee77bb388e30f9aa Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 2 Jan 2016 06:58:39 -0700 Subject: [PATCH 003/214] Initial ember-cli files from ember-cli v1.13.13 --- src/api-umbrella/admin/.bowerrc | 4 ++ src/api-umbrella/admin/.editorconfig | 34 ++++++++++++ src/api-umbrella/admin/.ember-cli | 9 ++++ src/api-umbrella/admin/.gitignore | 17 ++++++ src/api-umbrella/admin/.jshintrc | 32 +++++++++++ src/api-umbrella/admin/.travis.yml | 23 ++++++++ src/api-umbrella/admin/.watchmanconfig | 3 ++ src/api-umbrella/admin/README.md | 53 +++++++++++++++++++ src/api-umbrella/admin/app/app.js | 19 +++++-- .../admin/app/components/.gitkeep | 0 src/api-umbrella/admin/app/helpers/.gitkeep | 0 src/api-umbrella/admin/app/index.html | 25 +++++++++ src/api-umbrella/admin/app/router.js | 11 +++- src/api-umbrella/admin/app/styles/app.css | 0 .../admin/app/templates/components/.gitkeep | 0 src/api-umbrella/admin/bower.json | 16 ++++++ src/api-umbrella/admin/config/environment.js | 47 ++++++++++++++++ src/api-umbrella/admin/ember-cli-build.js | 24 +++++++++ src/api-umbrella/admin/package.json | 40 ++++++++++++++ src/api-umbrella/admin/public/crossdomain.xml | 15 ++++++ src/api-umbrella/admin/public/robots.txt | 3 ++ src/api-umbrella/admin/testem.json | 12 +++++ src/api-umbrella/admin/tests/.jshintrc | 52 ++++++++++++++++++ .../admin/tests/helpers/destroy-app.js | 5 ++ .../tests/helpers/module-for-acceptance.js | 23 ++++++++ .../admin/tests/helpers/resolver.js | 11 ++++ .../admin/tests/helpers/start-app.js | 18 +++++++ src/api-umbrella/admin/tests/index.html | 34 ++++++++++++ .../admin/tests/integration/.gitkeep | 0 src/api-umbrella/admin/tests/test-helper.js | 6 +++ src/api-umbrella/admin/tests/unit/.gitkeep | 0 src/api-umbrella/admin/vendor/.gitkeep | 0 32 files changed, 529 insertions(+), 7 deletions(-) create mode 100644 src/api-umbrella/admin/.bowerrc create mode 100644 src/api-umbrella/admin/.editorconfig create mode 100644 src/api-umbrella/admin/.ember-cli create mode 100644 src/api-umbrella/admin/.gitignore create mode 100644 src/api-umbrella/admin/.jshintrc create mode 100644 src/api-umbrella/admin/.travis.yml create mode 100644 src/api-umbrella/admin/.watchmanconfig create mode 100644 src/api-umbrella/admin/README.md create mode 100644 src/api-umbrella/admin/app/components/.gitkeep create mode 100644 src/api-umbrella/admin/app/helpers/.gitkeep create mode 100644 src/api-umbrella/admin/app/index.html create mode 100644 src/api-umbrella/admin/app/styles/app.css create mode 100644 src/api-umbrella/admin/app/templates/components/.gitkeep create mode 100644 src/api-umbrella/admin/bower.json create mode 100644 src/api-umbrella/admin/config/environment.js create mode 100644 src/api-umbrella/admin/ember-cli-build.js create mode 100644 src/api-umbrella/admin/package.json create mode 100644 src/api-umbrella/admin/public/crossdomain.xml create mode 100644 src/api-umbrella/admin/public/robots.txt create mode 100644 src/api-umbrella/admin/testem.json create mode 100644 src/api-umbrella/admin/tests/.jshintrc create mode 100644 src/api-umbrella/admin/tests/helpers/destroy-app.js create mode 100644 src/api-umbrella/admin/tests/helpers/module-for-acceptance.js create mode 100644 src/api-umbrella/admin/tests/helpers/resolver.js create mode 100644 src/api-umbrella/admin/tests/helpers/start-app.js create mode 100644 src/api-umbrella/admin/tests/index.html create mode 100644 src/api-umbrella/admin/tests/integration/.gitkeep create mode 100644 src/api-umbrella/admin/tests/test-helper.js create mode 100644 src/api-umbrella/admin/tests/unit/.gitkeep create mode 100644 src/api-umbrella/admin/vendor/.gitkeep diff --git a/src/api-umbrella/admin/.bowerrc b/src/api-umbrella/admin/.bowerrc new file mode 100644 index 000000000..959e1696e --- /dev/null +++ b/src/api-umbrella/admin/.bowerrc @@ -0,0 +1,4 @@ +{ + "directory": "bower_components", + "analytics": false +} diff --git a/src/api-umbrella/admin/.editorconfig b/src/api-umbrella/admin/.editorconfig new file mode 100644 index 000000000..47c543840 --- /dev/null +++ b/src/api-umbrella/admin/.editorconfig @@ -0,0 +1,34 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.hbs] +insert_final_newline = false +indent_style = space +indent_size = 2 + +[*.css] +indent_style = space +indent_size = 2 + +[*.html] +indent_style = space +indent_size = 2 + +[*.{diff,md}] +trim_trailing_whitespace = false diff --git a/src/api-umbrella/admin/.ember-cli b/src/api-umbrella/admin/.ember-cli new file mode 100644 index 000000000..ee64cfed2 --- /dev/null +++ b/src/api-umbrella/admin/.ember-cli @@ -0,0 +1,9 @@ +{ + /** + Ember CLI sends analytics information by default. The data is completely + anonymous, but there are times when you might want to disable this behavior. + + Setting `disableAnalytics` to true will prevent any data from being sent. + */ + "disableAnalytics": false +} diff --git a/src/api-umbrella/admin/.gitignore b/src/api-umbrella/admin/.gitignore new file mode 100644 index 000000000..86fceae7a --- /dev/null +++ b/src/api-umbrella/admin/.gitignore @@ -0,0 +1,17 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp + +# dependencies +/node_modules +/bower_components + +# misc +/.sass-cache +/connect.lock +/coverage/* +/libpeerconnection.log +npm-debug.log +testem.log diff --git a/src/api-umbrella/admin/.jshintrc b/src/api-umbrella/admin/.jshintrc new file mode 100644 index 000000000..08096effa --- /dev/null +++ b/src/api-umbrella/admin/.jshintrc @@ -0,0 +1,32 @@ +{ + "predef": [ + "document", + "window", + "-Promise" + ], + "browser": true, + "boss": true, + "curly": true, + "debug": false, + "devel": true, + "eqeqeq": true, + "evil": true, + "forin": false, + "immed": false, + "laxbreak": false, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "onevar": false, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "strict": false, + "white": false, + "eqnull": true, + "esnext": true, + "unused": true +} diff --git a/src/api-umbrella/admin/.travis.yml b/src/api-umbrella/admin/.travis.yml new file mode 100644 index 000000000..66dd10769 --- /dev/null +++ b/src/api-umbrella/admin/.travis.yml @@ -0,0 +1,23 @@ +--- +language: node_js +node_js: + - "0.12" + +sudo: false + +cache: + directories: + - node_modules + +before_install: + - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH + - "npm config set spin false" + - "npm install -g npm@^2" + +install: + - npm install -g bower + - npm install + - bower install + +script: + - npm test diff --git a/src/api-umbrella/admin/.watchmanconfig b/src/api-umbrella/admin/.watchmanconfig new file mode 100644 index 000000000..e7834e3e4 --- /dev/null +++ b/src/api-umbrella/admin/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["tmp", "dist"] +} diff --git a/src/api-umbrella/admin/README.md b/src/api-umbrella/admin/README.md new file mode 100644 index 000000000..65a9a34fe --- /dev/null +++ b/src/api-umbrella/admin/README.md @@ -0,0 +1,53 @@ +# Api-umbrella-admin + +This README outlines the details of collaborating on this Ember application. +A short introduction of this app could easily go here. + +## Prerequisites + +You will need the following things properly installed on your computer. + +* [Git](http://git-scm.com/) +* [Node.js](http://nodejs.org/) (with NPM) +* [Bower](http://bower.io/) +* [Ember CLI](http://www.ember-cli.com/) +* [PhantomJS](http://phantomjs.org/) + +## Installation + +* `git clone ` this repository +* change into the new directory +* `npm install` +* `bower install` + +## Running / Development + +* `ember server` +* Visit your app at [http://localhost:4200](http://localhost:4200). + +### Code Generators + +Make use of the many generators for code, try `ember help generate` for more details + +### Running Tests + +* `ember test` +* `ember test --server` + +### Building + +* `ember build` (development) +* `ember build --environment production` (production) + +### Deploying + +Specify what it takes to deploy your app. + +## Further Reading / Useful Links + +* [ember.js](http://emberjs.com/) +* [ember-cli](http://www.ember-cli.com/) +* Development Browser Extensions + * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) + * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) + diff --git a/src/api-umbrella/admin/app/app.js b/src/api-umbrella/admin/app/app.js index 44084c5bf..5b113e035 100644 --- a/src/api-umbrella/admin/app/app.js +++ b/src/api-umbrella/admin/app/app.js @@ -1,11 +1,20 @@ import Ember from 'ember'; +import Resolver from 'ember/resolver'; +import loadInitializers from 'ember/load-initializers'; +import config from './config/environment'; -var Admin = Ember.Application.create({ - LOG_TRANSITIONS: true, - LOG_TRANSITIONS_INTERNAL: true, +let App; - rootElement: '#content' +Ember.MODEL_FACTORY_INJECTIONS = true; + +App = Ember.Application.extend({ + modulePrefix: config.modulePrefix, + podModulePrefix: config.podModulePrefix, + Resolver }); + +loadInitializers(App, config.modulePrefix); + //= require_self //= require ./common_validations //= require_tree ./models @@ -489,4 +498,4 @@ Admin.DataTablesHelpers = { }, }; -export default Admin; +export default App; diff --git a/src/api-umbrella/admin/app/components/.gitkeep b/src/api-umbrella/admin/app/components/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/api-umbrella/admin/app/helpers/.gitkeep b/src/api-umbrella/admin/app/helpers/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/api-umbrella/admin/app/index.html b/src/api-umbrella/admin/app/index.html new file mode 100644 index 000000000..58436e433 --- /dev/null +++ b/src/api-umbrella/admin/app/index.html @@ -0,0 +1,25 @@ + + + + + + ApiUmbrellaAdmin + + + + {{content-for 'head'}} + + + + + {{content-for 'head-footer'}} + + + {{content-for 'body'}} + + + + + {{content-for 'body-footer'}} + + diff --git a/src/api-umbrella/admin/app/router.js b/src/api-umbrella/admin/app/router.js index 18735b5f0..573b9b347 100644 --- a/src/api-umbrella/admin/app/router.js +++ b/src/api-umbrella/admin/app/router.js @@ -1,4 +1,11 @@ -Admin.Router.map(function() { +import Ember from 'ember'; +import config from './config/environment'; + +const Router = Ember.Router.extend({ + location: config.locationType +}); + +Router.map(function() { this.resource('apis', { path: '/apis' }, function() { this.route('new'); this.route('edit', { path: '/:apiId/edit' }); @@ -48,4 +55,4 @@ Admin.Router.map(function() { }); }); -export default undefined; +export default Router; diff --git a/src/api-umbrella/admin/app/styles/app.css b/src/api-umbrella/admin/app/styles/app.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/api-umbrella/admin/app/templates/components/.gitkeep b/src/api-umbrella/admin/app/templates/components/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/api-umbrella/admin/bower.json b/src/api-umbrella/admin/bower.json new file mode 100644 index 000000000..efc11683b --- /dev/null +++ b/src/api-umbrella/admin/bower.json @@ -0,0 +1,16 @@ +{ + "name": "api-umbrella-admin", + "dependencies": { + "ember": "1.13.11", + "ember-cli-shims": "0.0.6", + "ember-cli-test-loader": "0.2.1", + "ember-data": "1.13.15", + "ember-load-initializers": "0.1.7", + "ember-qunit": "0.4.16", + "ember-qunit-notifications": "0.1.0", + "ember-resolver": "~0.1.20", + "jquery": "^1.11.3", + "loader.js": "ember-cli/loader.js#3.4.0", + "qunit": "~1.20.0" + } +} diff --git a/src/api-umbrella/admin/config/environment.js b/src/api-umbrella/admin/config/environment.js new file mode 100644 index 000000000..d8945bdfe --- /dev/null +++ b/src/api-umbrella/admin/config/environment.js @@ -0,0 +1,47 @@ +/* jshint node: true */ + +module.exports = function(environment) { + var ENV = { + modulePrefix: 'api-umbrella-admin', + environment: environment, + baseURL: '/', + locationType: 'auto', + EmberENV: { + FEATURES: { + // Here you can enable experimental features on an ember canary build + // e.g. 'with-controller': true + } + }, + + APP: { + // Here you can pass flags/options to your application instance + // when it is created + } + }; + + if (environment === 'development') { + // ENV.APP.LOG_RESOLVER = true; + // ENV.APP.LOG_ACTIVE_GENERATION = true; + // ENV.APP.LOG_TRANSITIONS = true; + // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; + // ENV.APP.LOG_VIEW_LOOKUPS = true; + } + + if (environment === 'test') { + // Testem prefers this... + ENV.baseURL = '/'; + ENV.locationType = 'none'; + + // keep test console output quieter + ENV.APP.LOG_ACTIVE_GENERATION = false; + ENV.APP.LOG_VIEW_LOOKUPS = false; + + ENV.APP.rootElement = '#ember-testing'; + } + + if (environment === 'production') { + + } + + return ENV; +}; diff --git a/src/api-umbrella/admin/ember-cli-build.js b/src/api-umbrella/admin/ember-cli-build.js new file mode 100644 index 000000000..2537ce2ca --- /dev/null +++ b/src/api-umbrella/admin/ember-cli-build.js @@ -0,0 +1,24 @@ +/*jshint node:true*/ +/* global require, module */ +var EmberApp = require('ember-cli/lib/broccoli/ember-app'); + +module.exports = function(defaults) { + var app = new EmberApp(defaults, { + // Add options here + }); + + // Use `app.import` to add additional libraries to the generated + // output files. + // + // If you need to use different assets in different + // environments, specify an object as the first parameter. That + // object's keys should be the environment name and the values + // should be the asset to use in that environment. + // + // If the library that you are including contains AMD or ES6 + // modules that you would like to import into your application + // please specify an object with the list of modules as keys + // along with the exports of each module as its value. + + return app.toTree(); +}; diff --git a/src/api-umbrella/admin/package.json b/src/api-umbrella/admin/package.json new file mode 100644 index 000000000..afa440084 --- /dev/null +++ b/src/api-umbrella/admin/package.json @@ -0,0 +1,40 @@ +{ + "name": "api-umbrella-admin", + "version": "0.0.0", + "description": "Small description for api-umbrella-admin goes here", + "private": true, + "directories": { + "doc": "doc", + "test": "tests" + }, + "scripts": { + "build": "ember build", + "start": "ember server", + "test": "ember test" + }, + "repository": "", + "engines": { + "node": ">= 0.10.0" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "broccoli-asset-rev": "^2.2.0", + "ember-cli": "1.13.13", + "ember-cli-app-version": "^1.0.0", + "ember-cli-babel": "^5.1.5", + "ember-cli-content-security-policy": "0.4.0", + "ember-cli-dependency-checker": "^1.1.0", + "ember-cli-htmlbars": "^1.0.1", + "ember-cli-htmlbars-inline-precompile": "^0.3.1", + "ember-cli-ic-ajax": "0.2.4", + "ember-cli-inject-live-reload": "^1.3.1", + "ember-cli-qunit": "^1.0.4", + "ember-cli-release": "0.2.8", + "ember-cli-sri": "^1.2.0", + "ember-cli-uglify": "^1.2.0", + "ember-data": "1.13.15", + "ember-disable-proxy-controllers": "^1.0.1", + "ember-export-application-global": "^1.0.4" + } +} diff --git a/src/api-umbrella/admin/public/crossdomain.xml b/src/api-umbrella/admin/public/crossdomain.xml new file mode 100644 index 000000000..0c16a7a07 --- /dev/null +++ b/src/api-umbrella/admin/public/crossdomain.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/src/api-umbrella/admin/public/robots.txt b/src/api-umbrella/admin/public/robots.txt new file mode 100644 index 000000000..f5916452e --- /dev/null +++ b/src/api-umbrella/admin/public/robots.txt @@ -0,0 +1,3 @@ +# http://www.robotstxt.org +User-agent: * +Disallow: diff --git a/src/api-umbrella/admin/testem.json b/src/api-umbrella/admin/testem.json new file mode 100644 index 000000000..0f35392cf --- /dev/null +++ b/src/api-umbrella/admin/testem.json @@ -0,0 +1,12 @@ +{ + "framework": "qunit", + "test_page": "tests/index.html?hidepassed", + "disable_watching": true, + "launch_in_ci": [ + "PhantomJS" + ], + "launch_in_dev": [ + "PhantomJS", + "Chrome" + ] +} diff --git a/src/api-umbrella/admin/tests/.jshintrc b/src/api-umbrella/admin/tests/.jshintrc new file mode 100644 index 000000000..6ec0b7c15 --- /dev/null +++ b/src/api-umbrella/admin/tests/.jshintrc @@ -0,0 +1,52 @@ +{ + "predef": [ + "document", + "window", + "location", + "setTimeout", + "$", + "-Promise", + "define", + "console", + "visit", + "exists", + "fillIn", + "click", + "keyEvent", + "triggerEvent", + "find", + "findWithAssert", + "wait", + "DS", + "andThen", + "currentURL", + "currentPath", + "currentRouteName" + ], + "node": false, + "browser": false, + "boss": true, + "curly": true, + "debug": false, + "devel": false, + "eqeqeq": true, + "evil": true, + "forin": false, + "immed": false, + "laxbreak": false, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "onevar": false, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "strict": false, + "white": false, + "eqnull": true, + "esnext": true, + "unused": true +} diff --git a/src/api-umbrella/admin/tests/helpers/destroy-app.js b/src/api-umbrella/admin/tests/helpers/destroy-app.js new file mode 100644 index 000000000..c3d4d1abb --- /dev/null +++ b/src/api-umbrella/admin/tests/helpers/destroy-app.js @@ -0,0 +1,5 @@ +import Ember from 'ember'; + +export default function destroyApp(application) { + Ember.run(application, 'destroy'); +} diff --git a/src/api-umbrella/admin/tests/helpers/module-for-acceptance.js b/src/api-umbrella/admin/tests/helpers/module-for-acceptance.js new file mode 100644 index 000000000..ed23003db --- /dev/null +++ b/src/api-umbrella/admin/tests/helpers/module-for-acceptance.js @@ -0,0 +1,23 @@ +import { module } from 'qunit'; +import startApp from '../helpers/start-app'; +import destroyApp from '../helpers/destroy-app'; + +export default function(name, options = {}) { + module(name, { + beforeEach() { + this.application = startApp(); + + if (options.beforeEach) { + options.beforeEach.apply(this, arguments); + } + }, + + afterEach() { + destroyApp(this.application); + + if (options.afterEach) { + options.afterEach.apply(this, arguments); + } + } + }); +} diff --git a/src/api-umbrella/admin/tests/helpers/resolver.js b/src/api-umbrella/admin/tests/helpers/resolver.js new file mode 100644 index 000000000..ebfb4e4d4 --- /dev/null +++ b/src/api-umbrella/admin/tests/helpers/resolver.js @@ -0,0 +1,11 @@ +import Resolver from 'ember/resolver'; +import config from '../../config/environment'; + +const resolver = Resolver.create(); + +resolver.namespace = { + modulePrefix: config.modulePrefix, + podModulePrefix: config.podModulePrefix +}; + +export default resolver; diff --git a/src/api-umbrella/admin/tests/helpers/start-app.js b/src/api-umbrella/admin/tests/helpers/start-app.js new file mode 100644 index 000000000..e098f1d5b --- /dev/null +++ b/src/api-umbrella/admin/tests/helpers/start-app.js @@ -0,0 +1,18 @@ +import Ember from 'ember'; +import Application from '../../app'; +import config from '../../config/environment'; + +export default function startApp(attrs) { + let application; + + let attributes = Ember.merge({}, config.APP); + attributes = Ember.merge(attributes, attrs); // use defaults, but you can override; + + Ember.run(() => { + application = Application.create(attributes); + application.setupForTesting(); + application.injectTestHelpers(); + }); + + return application; +} diff --git a/src/api-umbrella/admin/tests/index.html b/src/api-umbrella/admin/tests/index.html new file mode 100644 index 000000000..a938d4363 --- /dev/null +++ b/src/api-umbrella/admin/tests/index.html @@ -0,0 +1,34 @@ + + + + + + ApiUmbrellaAdmin Tests + + + + {{content-for 'head'}} + {{content-for 'test-head'}} + + + + + + {{content-for 'head-footer'}} + {{content-for 'test-head-footer'}} + + + {{content-for 'body'}} + {{content-for 'test-body'}} + + + + + + + + + {{content-for 'body-footer'}} + {{content-for 'test-body-footer'}} + + diff --git a/src/api-umbrella/admin/tests/integration/.gitkeep b/src/api-umbrella/admin/tests/integration/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/api-umbrella/admin/tests/test-helper.js b/src/api-umbrella/admin/tests/test-helper.js new file mode 100644 index 000000000..e6cfb70fe --- /dev/null +++ b/src/api-umbrella/admin/tests/test-helper.js @@ -0,0 +1,6 @@ +import resolver from './helpers/resolver'; +import { + setResolver +} from 'ember-qunit'; + +setResolver(resolver); diff --git a/src/api-umbrella/admin/tests/unit/.gitkeep b/src/api-umbrella/admin/tests/unit/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/api-umbrella/admin/vendor/.gitkeep b/src/api-umbrella/admin/vendor/.gitkeep new file mode 100644 index 000000000..e69de29bb From 1e0798e0ecac394e3db332e57dba0fc40ae7f1d8 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 2 Jan 2016 07:50:01 -0700 Subject: [PATCH 004/214] Rename files to match ember-cli conventions. --- .../components/{error-messages-component.js => error-messages.js} | 0 .../app/controllers/admin-groups/{form-controller.js => form.js} | 0 .../admin/app/controllers/admins/{form-controller.js => form.js} | 0 .../app/controllers/admins/{index-controller.js => index.js} | 0 .../app/controllers/api-scopes/{form-controller.js => form.js} | 0 .../app/controllers/api-users/{form-controller.js => form.js} | 0 .../app/controllers/{apis-form-controller.js => apis-form.js} | 0 .../app/controllers/{apis-index-controller.js => apis-index.js} | 0 .../app/controllers/{apis-server-controller.js => apis-server.js} | 0 .../apis/{nested-form-controller.js => nested-form.js} | 0 .../apis/{rewrite-form-controller.js => rewrite-form.js} | 0 .../app/controllers/apis/{rewrites-controller.js => rewrites.js} | 0 .../apis/{server-form-controller.js => server-form.js} | 0 ...e-limit-fields-controller.js => settings-rate-limit-fields.js} | 0 .../app/controllers/apis/{sortable-controller.js => sortable.js} | 0 .../{sub-settings-form-controller.js => sub-settings-form.js} | 0 .../apis/{sub-settings-controller.js => sub-settings.js} | 0 .../apis/{url-match-form-controller.js => url-match-form.js} | 0 .../apis/{url-matches-controller.js => url-matches.js} | 0 .../app/controllers/config/{publish-controller.js => publish.js} | 0 .../admin/app/controllers/{modal-controller.js => modal.js} | 0 .../admin/app/controllers/stats/{base-controller.js => base.js} | 0 .../controllers/stats/{drilldown-controller.js => drilldown.js} | 0 .../admin/app/controllers/stats/{logs-controller.js => logs.js} | 0 .../admin/app/controllers/stats/{map-controller.js => map.js} | 0 .../admin/app/controllers/stats/{users-controller.js => users.js} | 0 .../controllers/website-backends/{form-controller.js => form.js} | 0 .../admin/app/routes/admin-groups/{base-route.js => base.js} | 0 .../admin/app/routes/admin-groups/{edit-route.js => edit.js} | 0 .../admin/app/routes/admin-groups/{index-route.js => index.js} | 0 .../admin/app/routes/admin-groups/{new-route.js => new.js} | 0 .../admin/app/routes/admins/{base-route.js => base.js} | 0 .../admin/app/routes/admins/{edit-route.js => edit.js} | 0 .../admin/app/routes/admins/{index-route.js => index.js} | 0 src/api-umbrella/admin/app/routes/admins/{new-route.js => new.js} | 0 .../admin/app/routes/api-scopes/{base-route.js => base.js} | 0 .../admin/app/routes/api-scopes/{edit-route.js => edit.js} | 0 .../admin/app/routes/api-scopes/{index-route.js => index.js} | 0 .../admin/app/routes/api-scopes/{new-route.js => new.js} | 0 .../admin/app/routes/api-users/{base-route.js => base.js} | 0 .../admin/app/routes/api-users/{edit-route.js => edit.js} | 0 .../admin/app/routes/api-users/{index-route.js => index.js} | 0 .../admin/app/routes/api-users/{new-route.js => new.js} | 0 src/api-umbrella/admin/app/routes/apis/{base-route.js => base.js} | 0 src/api-umbrella/admin/app/routes/apis/{edit-route.js => edit.js} | 0 .../admin/app/routes/apis/{index-route.js => index.js} | 0 src/api-umbrella/admin/app/routes/apis/{new-route.js => new.js} | 0 .../admin/app/routes/{application-route.js => application.js} | 0 .../admin/app/routes/config/{publish-route.js => publish.js} | 0 .../admin/app/routes/{loading-route.js => loading.js} | 0 .../admin/app/routes/stats/{base-route.js => base.js} | 0 .../admin/app/routes/stats/{drilldown-route.js => drilldown.js} | 0 .../admin/app/routes/stats/{logs-route.js => logs.js} | 0 src/api-umbrella/admin/app/routes/stats/{map-route.js => map.js} | 0 .../admin/app/routes/stats/{users-route.js => users.js} | 0 .../admin/app/routes/website-backends/{base-route.js => base.js} | 0 .../admin/app/routes/website-backends/{edit-route.js => edit.js} | 0 .../app/routes/website-backends/{index-route.js => index.js} | 0 .../admin/app/routes/website-backends/{new-route.js => new.js} | 0 .../admin/app/views/admin-groups/{table-view.js => table.js} | 0 .../admin/app/views/admins/{table-view.js => table.js} | 0 .../admin/app/views/api-scopes/{table-view.js => table.js} | 0 .../admin/app/views/api-users/{edit-view.js => edit.js} | 0 .../admin/app/views/api-users/{table-view.js => table.js} | 0 src/api-umbrella/admin/app/views/apis/{index-view.js => index.js} | 0 .../admin/app/views/apis/{server-form-view.js => server-form.js} | 0 src/api-umbrella/admin/app/views/apis/{table-view.js => table.js} | 0 .../{boolean-radio-button-view.js => boolean-radio-button.js} | 0 .../admin/app/views/{checkbox-list-view.js => checkbox-list.js} | 0 .../views/config/{publish-record-view.js => publish-record.js} | 0 .../admin/app/views/config/{publish-view.js => publish.js} | 0 .../admin/app/views/{hide-modal-view.js => hide-modal.js} | 0 .../app/views/{loading-overlay-view.js => loading-overlay.js} | 0 .../views/stats/{drilldown-chart-view.js => drilldown-chart.js} | 0 .../views/stats/{drilldown-table-view.js => drilldown-table.js} | 0 .../admin/app/views/stats/{facet-table-view.js => facet-table.js} | 0 .../app/views/stats/{interval-chart-view.js => interval-chart.js} | 0 .../admin/app/views/stats/{logs-table-view.js => logs-table.js} | 0 src/api-umbrella/admin/app/views/stats/{logs-view.js => logs.js} | 0 .../admin/app/views/stats/{map-geo-view.js => map-geo.js} | 0 .../admin/app/views/stats/{map-table-view.js => map-table.js} | 0 .../admin/app/views/stats/{query-form-view.js => query-form.js} | 0 .../admin/app/views/stats/{users-table-view.js => users-table.js} | 0 .../admin/app/views/website-backends/{table-view.js => table.js} | 0 84 files changed, 0 insertions(+), 0 deletions(-) rename src/api-umbrella/admin/app/components/{error-messages-component.js => error-messages.js} (100%) rename src/api-umbrella/admin/app/controllers/admin-groups/{form-controller.js => form.js} (100%) rename src/api-umbrella/admin/app/controllers/admins/{form-controller.js => form.js} (100%) rename src/api-umbrella/admin/app/controllers/admins/{index-controller.js => index.js} (100%) rename src/api-umbrella/admin/app/controllers/api-scopes/{form-controller.js => form.js} (100%) rename src/api-umbrella/admin/app/controllers/api-users/{form-controller.js => form.js} (100%) rename src/api-umbrella/admin/app/controllers/{apis-form-controller.js => apis-form.js} (100%) rename src/api-umbrella/admin/app/controllers/{apis-index-controller.js => apis-index.js} (100%) rename src/api-umbrella/admin/app/controllers/{apis-server-controller.js => apis-server.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{nested-form-controller.js => nested-form.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{rewrite-form-controller.js => rewrite-form.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{rewrites-controller.js => rewrites.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{server-form-controller.js => server-form.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{settings-rate-limit-fields-controller.js => settings-rate-limit-fields.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{sortable-controller.js => sortable.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{sub-settings-form-controller.js => sub-settings-form.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{sub-settings-controller.js => sub-settings.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{url-match-form-controller.js => url-match-form.js} (100%) rename src/api-umbrella/admin/app/controllers/apis/{url-matches-controller.js => url-matches.js} (100%) rename src/api-umbrella/admin/app/controllers/config/{publish-controller.js => publish.js} (100%) rename src/api-umbrella/admin/app/controllers/{modal-controller.js => modal.js} (100%) rename src/api-umbrella/admin/app/controllers/stats/{base-controller.js => base.js} (100%) rename src/api-umbrella/admin/app/controllers/stats/{drilldown-controller.js => drilldown.js} (100%) rename src/api-umbrella/admin/app/controllers/stats/{logs-controller.js => logs.js} (100%) rename src/api-umbrella/admin/app/controllers/stats/{map-controller.js => map.js} (100%) rename src/api-umbrella/admin/app/controllers/stats/{users-controller.js => users.js} (100%) rename src/api-umbrella/admin/app/controllers/website-backends/{form-controller.js => form.js} (100%) rename src/api-umbrella/admin/app/routes/admin-groups/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/admin-groups/{edit-route.js => edit.js} (100%) rename src/api-umbrella/admin/app/routes/admin-groups/{index-route.js => index.js} (100%) rename src/api-umbrella/admin/app/routes/admin-groups/{new-route.js => new.js} (100%) rename src/api-umbrella/admin/app/routes/admins/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/admins/{edit-route.js => edit.js} (100%) rename src/api-umbrella/admin/app/routes/admins/{index-route.js => index.js} (100%) rename src/api-umbrella/admin/app/routes/admins/{new-route.js => new.js} (100%) rename src/api-umbrella/admin/app/routes/api-scopes/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/api-scopes/{edit-route.js => edit.js} (100%) rename src/api-umbrella/admin/app/routes/api-scopes/{index-route.js => index.js} (100%) rename src/api-umbrella/admin/app/routes/api-scopes/{new-route.js => new.js} (100%) rename src/api-umbrella/admin/app/routes/api-users/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/api-users/{edit-route.js => edit.js} (100%) rename src/api-umbrella/admin/app/routes/api-users/{index-route.js => index.js} (100%) rename src/api-umbrella/admin/app/routes/api-users/{new-route.js => new.js} (100%) rename src/api-umbrella/admin/app/routes/apis/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/apis/{edit-route.js => edit.js} (100%) rename src/api-umbrella/admin/app/routes/apis/{index-route.js => index.js} (100%) rename src/api-umbrella/admin/app/routes/apis/{new-route.js => new.js} (100%) rename src/api-umbrella/admin/app/routes/{application-route.js => application.js} (100%) rename src/api-umbrella/admin/app/routes/config/{publish-route.js => publish.js} (100%) rename src/api-umbrella/admin/app/routes/{loading-route.js => loading.js} (100%) rename src/api-umbrella/admin/app/routes/stats/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/stats/{drilldown-route.js => drilldown.js} (100%) rename src/api-umbrella/admin/app/routes/stats/{logs-route.js => logs.js} (100%) rename src/api-umbrella/admin/app/routes/stats/{map-route.js => map.js} (100%) rename src/api-umbrella/admin/app/routes/stats/{users-route.js => users.js} (100%) rename src/api-umbrella/admin/app/routes/website-backends/{base-route.js => base.js} (100%) rename src/api-umbrella/admin/app/routes/website-backends/{edit-route.js => edit.js} (100%) rename src/api-umbrella/admin/app/routes/website-backends/{index-route.js => index.js} (100%) rename src/api-umbrella/admin/app/routes/website-backends/{new-route.js => new.js} (100%) rename src/api-umbrella/admin/app/views/admin-groups/{table-view.js => table.js} (100%) rename src/api-umbrella/admin/app/views/admins/{table-view.js => table.js} (100%) rename src/api-umbrella/admin/app/views/api-scopes/{table-view.js => table.js} (100%) rename src/api-umbrella/admin/app/views/api-users/{edit-view.js => edit.js} (100%) rename src/api-umbrella/admin/app/views/api-users/{table-view.js => table.js} (100%) rename src/api-umbrella/admin/app/views/apis/{index-view.js => index.js} (100%) rename src/api-umbrella/admin/app/views/apis/{server-form-view.js => server-form.js} (100%) rename src/api-umbrella/admin/app/views/apis/{table-view.js => table.js} (100%) rename src/api-umbrella/admin/app/views/{boolean-radio-button-view.js => boolean-radio-button.js} (100%) rename src/api-umbrella/admin/app/views/{checkbox-list-view.js => checkbox-list.js} (100%) rename src/api-umbrella/admin/app/views/config/{publish-record-view.js => publish-record.js} (100%) rename src/api-umbrella/admin/app/views/config/{publish-view.js => publish.js} (100%) rename src/api-umbrella/admin/app/views/{hide-modal-view.js => hide-modal.js} (100%) rename src/api-umbrella/admin/app/views/{loading-overlay-view.js => loading-overlay.js} (100%) rename src/api-umbrella/admin/app/views/stats/{drilldown-chart-view.js => drilldown-chart.js} (100%) rename src/api-umbrella/admin/app/views/stats/{drilldown-table-view.js => drilldown-table.js} (100%) rename src/api-umbrella/admin/app/views/stats/{facet-table-view.js => facet-table.js} (100%) rename src/api-umbrella/admin/app/views/stats/{interval-chart-view.js => interval-chart.js} (100%) rename src/api-umbrella/admin/app/views/stats/{logs-table-view.js => logs-table.js} (100%) rename src/api-umbrella/admin/app/views/stats/{logs-view.js => logs.js} (100%) rename src/api-umbrella/admin/app/views/stats/{map-geo-view.js => map-geo.js} (100%) rename src/api-umbrella/admin/app/views/stats/{map-table-view.js => map-table.js} (100%) rename src/api-umbrella/admin/app/views/stats/{query-form-view.js => query-form.js} (100%) rename src/api-umbrella/admin/app/views/stats/{users-table-view.js => users-table.js} (100%) rename src/api-umbrella/admin/app/views/website-backends/{table-view.js => table.js} (100%) diff --git a/src/api-umbrella/admin/app/components/error-messages-component.js b/src/api-umbrella/admin/app/components/error-messages.js similarity index 100% rename from src/api-umbrella/admin/app/components/error-messages-component.js rename to src/api-umbrella/admin/app/components/error-messages.js diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js b/src/api-umbrella/admin/app/controllers/admin-groups/form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/admin-groups/form-controller.js rename to src/api-umbrella/admin/app/controllers/admin-groups/form.js diff --git a/src/api-umbrella/admin/app/controllers/admins/form-controller.js b/src/api-umbrella/admin/app/controllers/admins/form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/admins/form-controller.js rename to src/api-umbrella/admin/app/controllers/admins/form.js diff --git a/src/api-umbrella/admin/app/controllers/admins/index-controller.js b/src/api-umbrella/admin/app/controllers/admins/index.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/admins/index-controller.js rename to src/api-umbrella/admin/app/controllers/admins/index.js diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js b/src/api-umbrella/admin/app/controllers/api-scopes/form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/api-scopes/form-controller.js rename to src/api-umbrella/admin/app/controllers/api-scopes/form.js diff --git a/src/api-umbrella/admin/app/controllers/api-users/form-controller.js b/src/api-umbrella/admin/app/controllers/api-users/form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/api-users/form-controller.js rename to src/api-umbrella/admin/app/controllers/api-users/form.js diff --git a/src/api-umbrella/admin/app/controllers/apis-form-controller.js b/src/api-umbrella/admin/app/controllers/apis-form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis-form-controller.js rename to src/api-umbrella/admin/app/controllers/apis-form.js diff --git a/src/api-umbrella/admin/app/controllers/apis-index-controller.js b/src/api-umbrella/admin/app/controllers/apis-index.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis-index-controller.js rename to src/api-umbrella/admin/app/controllers/apis-index.js diff --git a/src/api-umbrella/admin/app/controllers/apis-server-controller.js b/src/api-umbrella/admin/app/controllers/apis-server.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis-server-controller.js rename to src/api-umbrella/admin/app/controllers/apis-server.js diff --git a/src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/nested-form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/nested-form-controller.js rename to src/api-umbrella/admin/app/controllers/apis/nested-form.js diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/rewrite-form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/rewrite-form-controller.js rename to src/api-umbrella/admin/app/controllers/apis/rewrite-form.js diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js b/src/api-umbrella/admin/app/controllers/apis/rewrites.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/rewrites-controller.js rename to src/api-umbrella/admin/app/controllers/apis/rewrites.js diff --git a/src/api-umbrella/admin/app/controllers/apis/server-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/server-form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/server-form-controller.js rename to src/api-umbrella/admin/app/controllers/apis/server-form.js diff --git a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js b/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields-controller.js rename to src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js diff --git a/src/api-umbrella/admin/app/controllers/apis/sortable-controller.js b/src/api-umbrella/admin/app/controllers/apis/sortable.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/sortable-controller.js rename to src/api-umbrella/admin/app/controllers/apis/sortable.js diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings-form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/sub-settings-form-controller.js rename to src/api-umbrella/admin/app/controllers/apis/sub-settings-form.js diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/sub-settings-controller.js rename to src/api-umbrella/admin/app/controllers/apis/sub-settings.js diff --git a/src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js b/src/api-umbrella/admin/app/controllers/apis/url-match-form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/url-match-form-controller.js rename to src/api-umbrella/admin/app/controllers/apis/url-match-form.js diff --git a/src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js b/src/api-umbrella/admin/app/controllers/apis/url-matches.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/apis/url-matches-controller.js rename to src/api-umbrella/admin/app/controllers/apis/url-matches.js diff --git a/src/api-umbrella/admin/app/controllers/config/publish-controller.js b/src/api-umbrella/admin/app/controllers/config/publish.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/config/publish-controller.js rename to src/api-umbrella/admin/app/controllers/config/publish.js diff --git a/src/api-umbrella/admin/app/controllers/modal-controller.js b/src/api-umbrella/admin/app/controllers/modal.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/modal-controller.js rename to src/api-umbrella/admin/app/controllers/modal.js diff --git a/src/api-umbrella/admin/app/controllers/stats/base-controller.js b/src/api-umbrella/admin/app/controllers/stats/base.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/stats/base-controller.js rename to src/api-umbrella/admin/app/controllers/stats/base.js diff --git a/src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js b/src/api-umbrella/admin/app/controllers/stats/drilldown.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/stats/drilldown-controller.js rename to src/api-umbrella/admin/app/controllers/stats/drilldown.js diff --git a/src/api-umbrella/admin/app/controllers/stats/logs-controller.js b/src/api-umbrella/admin/app/controllers/stats/logs.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/stats/logs-controller.js rename to src/api-umbrella/admin/app/controllers/stats/logs.js diff --git a/src/api-umbrella/admin/app/controllers/stats/map-controller.js b/src/api-umbrella/admin/app/controllers/stats/map.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/stats/map-controller.js rename to src/api-umbrella/admin/app/controllers/stats/map.js diff --git a/src/api-umbrella/admin/app/controllers/stats/users-controller.js b/src/api-umbrella/admin/app/controllers/stats/users.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/stats/users-controller.js rename to src/api-umbrella/admin/app/controllers/stats/users.js diff --git a/src/api-umbrella/admin/app/controllers/website-backends/form-controller.js b/src/api-umbrella/admin/app/controllers/website-backends/form.js similarity index 100% rename from src/api-umbrella/admin/app/controllers/website-backends/form-controller.js rename to src/api-umbrella/admin/app/controllers/website-backends/form.js diff --git a/src/api-umbrella/admin/app/routes/admin-groups/base-route.js b/src/api-umbrella/admin/app/routes/admin-groups/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admin-groups/base-route.js rename to src/api-umbrella/admin/app/routes/admin-groups/base.js diff --git a/src/api-umbrella/admin/app/routes/admin-groups/edit-route.js b/src/api-umbrella/admin/app/routes/admin-groups/edit.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admin-groups/edit-route.js rename to src/api-umbrella/admin/app/routes/admin-groups/edit.js diff --git a/src/api-umbrella/admin/app/routes/admin-groups/index-route.js b/src/api-umbrella/admin/app/routes/admin-groups/index.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admin-groups/index-route.js rename to src/api-umbrella/admin/app/routes/admin-groups/index.js diff --git a/src/api-umbrella/admin/app/routes/admin-groups/new-route.js b/src/api-umbrella/admin/app/routes/admin-groups/new.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admin-groups/new-route.js rename to src/api-umbrella/admin/app/routes/admin-groups/new.js diff --git a/src/api-umbrella/admin/app/routes/admins/base-route.js b/src/api-umbrella/admin/app/routes/admins/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admins/base-route.js rename to src/api-umbrella/admin/app/routes/admins/base.js diff --git a/src/api-umbrella/admin/app/routes/admins/edit-route.js b/src/api-umbrella/admin/app/routes/admins/edit.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admins/edit-route.js rename to src/api-umbrella/admin/app/routes/admins/edit.js diff --git a/src/api-umbrella/admin/app/routes/admins/index-route.js b/src/api-umbrella/admin/app/routes/admins/index.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admins/index-route.js rename to src/api-umbrella/admin/app/routes/admins/index.js diff --git a/src/api-umbrella/admin/app/routes/admins/new-route.js b/src/api-umbrella/admin/app/routes/admins/new.js similarity index 100% rename from src/api-umbrella/admin/app/routes/admins/new-route.js rename to src/api-umbrella/admin/app/routes/admins/new.js diff --git a/src/api-umbrella/admin/app/routes/api-scopes/base-route.js b/src/api-umbrella/admin/app/routes/api-scopes/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-scopes/base-route.js rename to src/api-umbrella/admin/app/routes/api-scopes/base.js diff --git a/src/api-umbrella/admin/app/routes/api-scopes/edit-route.js b/src/api-umbrella/admin/app/routes/api-scopes/edit.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-scopes/edit-route.js rename to src/api-umbrella/admin/app/routes/api-scopes/edit.js diff --git a/src/api-umbrella/admin/app/routes/api-scopes/index-route.js b/src/api-umbrella/admin/app/routes/api-scopes/index.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-scopes/index-route.js rename to src/api-umbrella/admin/app/routes/api-scopes/index.js diff --git a/src/api-umbrella/admin/app/routes/api-scopes/new-route.js b/src/api-umbrella/admin/app/routes/api-scopes/new.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-scopes/new-route.js rename to src/api-umbrella/admin/app/routes/api-scopes/new.js diff --git a/src/api-umbrella/admin/app/routes/api-users/base-route.js b/src/api-umbrella/admin/app/routes/api-users/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-users/base-route.js rename to src/api-umbrella/admin/app/routes/api-users/base.js diff --git a/src/api-umbrella/admin/app/routes/api-users/edit-route.js b/src/api-umbrella/admin/app/routes/api-users/edit.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-users/edit-route.js rename to src/api-umbrella/admin/app/routes/api-users/edit.js diff --git a/src/api-umbrella/admin/app/routes/api-users/index-route.js b/src/api-umbrella/admin/app/routes/api-users/index.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-users/index-route.js rename to src/api-umbrella/admin/app/routes/api-users/index.js diff --git a/src/api-umbrella/admin/app/routes/api-users/new-route.js b/src/api-umbrella/admin/app/routes/api-users/new.js similarity index 100% rename from src/api-umbrella/admin/app/routes/api-users/new-route.js rename to src/api-umbrella/admin/app/routes/api-users/new.js diff --git a/src/api-umbrella/admin/app/routes/apis/base-route.js b/src/api-umbrella/admin/app/routes/apis/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/apis/base-route.js rename to src/api-umbrella/admin/app/routes/apis/base.js diff --git a/src/api-umbrella/admin/app/routes/apis/edit-route.js b/src/api-umbrella/admin/app/routes/apis/edit.js similarity index 100% rename from src/api-umbrella/admin/app/routes/apis/edit-route.js rename to src/api-umbrella/admin/app/routes/apis/edit.js diff --git a/src/api-umbrella/admin/app/routes/apis/index-route.js b/src/api-umbrella/admin/app/routes/apis/index.js similarity index 100% rename from src/api-umbrella/admin/app/routes/apis/index-route.js rename to src/api-umbrella/admin/app/routes/apis/index.js diff --git a/src/api-umbrella/admin/app/routes/apis/new-route.js b/src/api-umbrella/admin/app/routes/apis/new.js similarity index 100% rename from src/api-umbrella/admin/app/routes/apis/new-route.js rename to src/api-umbrella/admin/app/routes/apis/new.js diff --git a/src/api-umbrella/admin/app/routes/application-route.js b/src/api-umbrella/admin/app/routes/application.js similarity index 100% rename from src/api-umbrella/admin/app/routes/application-route.js rename to src/api-umbrella/admin/app/routes/application.js diff --git a/src/api-umbrella/admin/app/routes/config/publish-route.js b/src/api-umbrella/admin/app/routes/config/publish.js similarity index 100% rename from src/api-umbrella/admin/app/routes/config/publish-route.js rename to src/api-umbrella/admin/app/routes/config/publish.js diff --git a/src/api-umbrella/admin/app/routes/loading-route.js b/src/api-umbrella/admin/app/routes/loading.js similarity index 100% rename from src/api-umbrella/admin/app/routes/loading-route.js rename to src/api-umbrella/admin/app/routes/loading.js diff --git a/src/api-umbrella/admin/app/routes/stats/base-route.js b/src/api-umbrella/admin/app/routes/stats/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/stats/base-route.js rename to src/api-umbrella/admin/app/routes/stats/base.js diff --git a/src/api-umbrella/admin/app/routes/stats/drilldown-route.js b/src/api-umbrella/admin/app/routes/stats/drilldown.js similarity index 100% rename from src/api-umbrella/admin/app/routes/stats/drilldown-route.js rename to src/api-umbrella/admin/app/routes/stats/drilldown.js diff --git a/src/api-umbrella/admin/app/routes/stats/logs-route.js b/src/api-umbrella/admin/app/routes/stats/logs.js similarity index 100% rename from src/api-umbrella/admin/app/routes/stats/logs-route.js rename to src/api-umbrella/admin/app/routes/stats/logs.js diff --git a/src/api-umbrella/admin/app/routes/stats/map-route.js b/src/api-umbrella/admin/app/routes/stats/map.js similarity index 100% rename from src/api-umbrella/admin/app/routes/stats/map-route.js rename to src/api-umbrella/admin/app/routes/stats/map.js diff --git a/src/api-umbrella/admin/app/routes/stats/users-route.js b/src/api-umbrella/admin/app/routes/stats/users.js similarity index 100% rename from src/api-umbrella/admin/app/routes/stats/users-route.js rename to src/api-umbrella/admin/app/routes/stats/users.js diff --git a/src/api-umbrella/admin/app/routes/website-backends/base-route.js b/src/api-umbrella/admin/app/routes/website-backends/base.js similarity index 100% rename from src/api-umbrella/admin/app/routes/website-backends/base-route.js rename to src/api-umbrella/admin/app/routes/website-backends/base.js diff --git a/src/api-umbrella/admin/app/routes/website-backends/edit-route.js b/src/api-umbrella/admin/app/routes/website-backends/edit.js similarity index 100% rename from src/api-umbrella/admin/app/routes/website-backends/edit-route.js rename to src/api-umbrella/admin/app/routes/website-backends/edit.js diff --git a/src/api-umbrella/admin/app/routes/website-backends/index-route.js b/src/api-umbrella/admin/app/routes/website-backends/index.js similarity index 100% rename from src/api-umbrella/admin/app/routes/website-backends/index-route.js rename to src/api-umbrella/admin/app/routes/website-backends/index.js diff --git a/src/api-umbrella/admin/app/routes/website-backends/new-route.js b/src/api-umbrella/admin/app/routes/website-backends/new.js similarity index 100% rename from src/api-umbrella/admin/app/routes/website-backends/new-route.js rename to src/api-umbrella/admin/app/routes/website-backends/new.js diff --git a/src/api-umbrella/admin/app/views/admin-groups/table-view.js b/src/api-umbrella/admin/app/views/admin-groups/table.js similarity index 100% rename from src/api-umbrella/admin/app/views/admin-groups/table-view.js rename to src/api-umbrella/admin/app/views/admin-groups/table.js diff --git a/src/api-umbrella/admin/app/views/admins/table-view.js b/src/api-umbrella/admin/app/views/admins/table.js similarity index 100% rename from src/api-umbrella/admin/app/views/admins/table-view.js rename to src/api-umbrella/admin/app/views/admins/table.js diff --git a/src/api-umbrella/admin/app/views/api-scopes/table-view.js b/src/api-umbrella/admin/app/views/api-scopes/table.js similarity index 100% rename from src/api-umbrella/admin/app/views/api-scopes/table-view.js rename to src/api-umbrella/admin/app/views/api-scopes/table.js diff --git a/src/api-umbrella/admin/app/views/api-users/edit-view.js b/src/api-umbrella/admin/app/views/api-users/edit.js similarity index 100% rename from src/api-umbrella/admin/app/views/api-users/edit-view.js rename to src/api-umbrella/admin/app/views/api-users/edit.js diff --git a/src/api-umbrella/admin/app/views/api-users/table-view.js b/src/api-umbrella/admin/app/views/api-users/table.js similarity index 100% rename from src/api-umbrella/admin/app/views/api-users/table-view.js rename to src/api-umbrella/admin/app/views/api-users/table.js diff --git a/src/api-umbrella/admin/app/views/apis/index-view.js b/src/api-umbrella/admin/app/views/apis/index.js similarity index 100% rename from src/api-umbrella/admin/app/views/apis/index-view.js rename to src/api-umbrella/admin/app/views/apis/index.js diff --git a/src/api-umbrella/admin/app/views/apis/server-form-view.js b/src/api-umbrella/admin/app/views/apis/server-form.js similarity index 100% rename from src/api-umbrella/admin/app/views/apis/server-form-view.js rename to src/api-umbrella/admin/app/views/apis/server-form.js diff --git a/src/api-umbrella/admin/app/views/apis/table-view.js b/src/api-umbrella/admin/app/views/apis/table.js similarity index 100% rename from src/api-umbrella/admin/app/views/apis/table-view.js rename to src/api-umbrella/admin/app/views/apis/table.js diff --git a/src/api-umbrella/admin/app/views/boolean-radio-button-view.js b/src/api-umbrella/admin/app/views/boolean-radio-button.js similarity index 100% rename from src/api-umbrella/admin/app/views/boolean-radio-button-view.js rename to src/api-umbrella/admin/app/views/boolean-radio-button.js diff --git a/src/api-umbrella/admin/app/views/checkbox-list-view.js b/src/api-umbrella/admin/app/views/checkbox-list.js similarity index 100% rename from src/api-umbrella/admin/app/views/checkbox-list-view.js rename to src/api-umbrella/admin/app/views/checkbox-list.js diff --git a/src/api-umbrella/admin/app/views/config/publish-record-view.js b/src/api-umbrella/admin/app/views/config/publish-record.js similarity index 100% rename from src/api-umbrella/admin/app/views/config/publish-record-view.js rename to src/api-umbrella/admin/app/views/config/publish-record.js diff --git a/src/api-umbrella/admin/app/views/config/publish-view.js b/src/api-umbrella/admin/app/views/config/publish.js similarity index 100% rename from src/api-umbrella/admin/app/views/config/publish-view.js rename to src/api-umbrella/admin/app/views/config/publish.js diff --git a/src/api-umbrella/admin/app/views/hide-modal-view.js b/src/api-umbrella/admin/app/views/hide-modal.js similarity index 100% rename from src/api-umbrella/admin/app/views/hide-modal-view.js rename to src/api-umbrella/admin/app/views/hide-modal.js diff --git a/src/api-umbrella/admin/app/views/loading-overlay-view.js b/src/api-umbrella/admin/app/views/loading-overlay.js similarity index 100% rename from src/api-umbrella/admin/app/views/loading-overlay-view.js rename to src/api-umbrella/admin/app/views/loading-overlay.js diff --git a/src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js b/src/api-umbrella/admin/app/views/stats/drilldown-chart.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/drilldown-chart-view.js rename to src/api-umbrella/admin/app/views/stats/drilldown-chart.js diff --git a/src/api-umbrella/admin/app/views/stats/drilldown-table-view.js b/src/api-umbrella/admin/app/views/stats/drilldown-table.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/drilldown-table-view.js rename to src/api-umbrella/admin/app/views/stats/drilldown-table.js diff --git a/src/api-umbrella/admin/app/views/stats/facet-table-view.js b/src/api-umbrella/admin/app/views/stats/facet-table.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/facet-table-view.js rename to src/api-umbrella/admin/app/views/stats/facet-table.js diff --git a/src/api-umbrella/admin/app/views/stats/interval-chart-view.js b/src/api-umbrella/admin/app/views/stats/interval-chart.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/interval-chart-view.js rename to src/api-umbrella/admin/app/views/stats/interval-chart.js diff --git a/src/api-umbrella/admin/app/views/stats/logs-table-view.js b/src/api-umbrella/admin/app/views/stats/logs-table.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/logs-table-view.js rename to src/api-umbrella/admin/app/views/stats/logs-table.js diff --git a/src/api-umbrella/admin/app/views/stats/logs-view.js b/src/api-umbrella/admin/app/views/stats/logs.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/logs-view.js rename to src/api-umbrella/admin/app/views/stats/logs.js diff --git a/src/api-umbrella/admin/app/views/stats/map-geo-view.js b/src/api-umbrella/admin/app/views/stats/map-geo.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/map-geo-view.js rename to src/api-umbrella/admin/app/views/stats/map-geo.js diff --git a/src/api-umbrella/admin/app/views/stats/map-table-view.js b/src/api-umbrella/admin/app/views/stats/map-table.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/map-table-view.js rename to src/api-umbrella/admin/app/views/stats/map-table.js diff --git a/src/api-umbrella/admin/app/views/stats/query-form-view.js b/src/api-umbrella/admin/app/views/stats/query-form.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/query-form-view.js rename to src/api-umbrella/admin/app/views/stats/query-form.js diff --git a/src/api-umbrella/admin/app/views/stats/users-table-view.js b/src/api-umbrella/admin/app/views/stats/users-table.js similarity index 100% rename from src/api-umbrella/admin/app/views/stats/users-table-view.js rename to src/api-umbrella/admin/app/views/stats/users-table.js diff --git a/src/api-umbrella/admin/app/views/website-backends/table-view.js b/src/api-umbrella/admin/app/views/website-backends/table.js similarity index 100% rename from src/api-umbrella/admin/app/views/website-backends/table-view.js rename to src/api-umbrella/admin/app/views/website-backends/table.js From dbc3622e51a2406c3620473de4ee4173f22def0d Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 2 Jan 2016 11:56:35 -0700 Subject: [PATCH 005/214] Convert more of the files to ES6 and ember-cli standards. --- src/api-umbrella/admin/.jshintrc | 20 +- src/api-umbrella/admin/app/app.js | 343 +----------------- .../app/components/api-settings-fields.js | 4 +- .../admin/app/components/error-messages.js | 4 +- .../app/controllers/admin-groups/edit.js | 4 + .../app/controllers/admin-groups/form.js | 7 +- .../admin/app/controllers/admin-groups/new.js | 4 + .../admin/app/controllers/admins/edit.js | 4 + .../admin/app/controllers/admins/form.js | 7 +- .../admin/app/controllers/admins/index.js | 4 +- .../admin/app/controllers/admins/new.js | 4 + .../admin/app/controllers/api-scopes/edit.js | 4 + .../admin/app/controllers/api-scopes/form.js | 7 +- .../admin/app/controllers/api-scopes/new.js | 4 + .../admin/app/controllers/api-users/edit.js | 4 + .../admin/app/controllers/api-users/form.js | 7 +- .../admin/app/controllers/api-users/new.js | 4 + .../admin/app/controllers/apis-server.js | 7 - .../admin/app/controllers/apis/edit.js | 4 + .../{apis-form.js => apis/form.js} | 7 +- .../{apis-index.js => apis/index.js} | 4 +- .../admin/app/controllers/apis/nested-form.js | 4 +- .../admin/app/controllers/apis/new.js | 4 + .../app/controllers/apis/rewrite-form.js | 6 +- .../admin/app/controllers/apis/rewrites.js | 6 +- .../admin/app/controllers/apis/server-form.js | 6 +- .../admin/app/controllers/apis/server.js | 5 + .../apis/settings-rate-limit-fields.js | 4 +- .../admin/app/controllers/apis/sortable.js | 4 +- .../app/controllers/apis/sub-settings-form.js | 6 +- .../app/controllers/apis/sub-settings.js | 6 +- .../app/controllers/apis/url-match-form.js | 6 +- .../admin/app/controllers/apis/url-matches.js | 6 +- .../admin/app/controllers/application.js | 4 +- .../admin/app/controllers/config/publish.js | 4 +- .../admin/app/controllers/modal.js | 4 +- .../admin/app/controllers/stats/base.js | 4 +- .../controllers/stats/drilldown-default.js | 7 + .../admin/app/controllers/stats/drilldown.js | 11 +- .../app/controllers/stats/logs-default.js | 4 + .../admin/app/controllers/stats/logs.js | 8 +- .../app/controllers/stats/map-default.js | 7 + .../admin/app/controllers/stats/map.js | 11 +- .../app/controllers/stats/users-default.js | 7 + .../admin/app/controllers/stats/users.js | 11 +- .../app/controllers/website-backends/edit.js | 4 + .../app/controllers/website-backends/form.js | 7 +- .../app/controllers/website-backends/new.js | 4 + .../admin/app/initializers/bootbox.js | 8 + .../admin/app/initializers/datatables.js | 60 +++ .../admin/app/initializers/easy-form.js | 290 +++++++++++++++ .../admin/app/initializers/pnotify.js | 19 + .../admin/app/models/admin-group.js | 34 +- .../admin/app/models/admin-permission.js | 23 +- src/api-umbrella/admin/app/models/admin.js | 49 ++- .../admin/app/models/api-scope.js | 34 +- .../admin/app/models/api-user-role.js | 21 +- src/api-umbrella/admin/app/models/api-user.js | 68 ++-- src/api-umbrella/admin/app/models/api.js | 48 +-- .../admin/app/models/api/rate-limit.js | 24 +- .../admin/app/models/api/rewrite.js | 23 +- .../admin/app/models/api/server.js | 16 +- .../admin/app/models/api/settings.js | 57 ++- .../admin/app/models/api/sub-settings.js | 21 +- .../admin/app/models/api/url-match.js | 18 +- .../admin/app/models/stats/drilldown.js | 7 +- .../admin/app/models/stats/logs.js | 7 +- .../admin/app/models/stats/map.js | 7 +- .../admin/app/models/website-backend.js | 28 +- .../admin/app/routes/admin-groups/base.js | 4 +- .../admin/app/routes/admin-groups/edit.js | 6 +- .../admin/app/routes/admin-groups/index.js | 6 +- .../admin/app/routes/admin-groups/new.js | 6 +- .../admin/app/routes/admins/base.js | 4 +- .../admin/app/routes/admins/edit.js | 6 +- .../admin/app/routes/admins/index.js | 6 +- .../admin/app/routes/admins/new.js | 6 +- .../admin/app/routes/api-scopes/base.js | 4 +- .../admin/app/routes/api-scopes/edit.js | 6 +- .../admin/app/routes/api-scopes/index.js | 6 +- .../admin/app/routes/api-scopes/new.js | 6 +- .../admin/app/routes/api-users/base.js | 4 +- .../admin/app/routes/api-users/edit.js | 6 +- .../admin/app/routes/api-users/index.js | 6 +- .../admin/app/routes/api-users/new.js | 6 +- .../admin/app/routes/apis/base.js | 4 +- .../admin/app/routes/apis/edit.js | 6 +- .../admin/app/routes/apis/index.js | 6 +- src/api-umbrella/admin/app/routes/apis/new.js | 6 +- .../admin/app/routes/application.js | 4 +- .../admin/app/routes/config/publish.js | 4 +- src/api-umbrella/admin/app/routes/loading.js | 4 +- .../admin/app/routes/stats/base.js | 4 +- .../app/routes/stats/drilldown-default.js | 7 + .../admin/app/routes/stats/drilldown.js | 11 +- .../admin/app/routes/stats/logs-default.js | 7 + .../admin/app/routes/stats/logs.js | 11 +- .../admin/app/routes/stats/map-default.js | 7 + .../admin/app/routes/stats/map.js | 10 +- .../admin/app/routes/stats/users-default.js | 7 + .../admin/app/routes/stats/users.js | 11 +- .../admin/app/routes/website-backends/base.js | 4 +- .../admin/app/routes/website-backends/edit.js | 6 +- .../app/routes/website-backends/index.js | 6 +- .../admin/app/routes/website-backends/new.js | 6 +- .../app/styles/admin/base.scss} | 0 .../app/styles/admin/stats.scss} | 0 .../app/styles/admin/variables.scss} | 0 src/api-umbrella/admin/app/styles/app.css | 0 src/api-umbrella/admin/app/styles/app.scss | 12 + .../app/templates/admin-groups/-form.hbs | 4 +- .../app/templates/admin-groups/index.hbs | 2 +- .../admin/app/templates/admins/-form.hbs | 2 +- .../admin/app/templates/admins/index.hbs | 2 +- .../admin/app/templates/api-scopes/index.hbs | 2 +- .../admin/app/templates/api-users/index.hbs | 2 +- .../admin/app/templates/apis/index.hbs | 2 +- .../apis/settings-rate-limit-fields.hbs | 2 +- .../admin/app/templates/application.hbs | 58 ++- .../admin/app/templates/loading.hbs | 2 +- .../admin/app/templates/stats/drilldown.hbs | 8 +- .../admin/app/templates/stats/logs.hbs | 12 +- .../admin/app/templates/stats/map.hbs | 8 +- .../admin/app/templates/stats/users.hbs | 6 +- .../app/templates/website-backends/index.hbs | 2 +- .../admin/app/views/admin-groups/table.js | 9 +- .../admin/app/views/admins/table.js | 4 +- .../admin/app/views/api-scopes/table.js | 4 +- .../admin/app/views/api-users/edit.js | 4 +- .../admin/app/views/api-users/table.js | 4 +- .../admin/app/views/apis/index.js | 4 +- .../admin/app/views/apis/server-form.js | 4 +- .../admin/app/views/apis/table.js | 4 +- .../admin/app/views/boolean-radio-button.js | 4 +- .../admin/app/views/checkbox-list-item.js | 23 ++ .../admin/app/views/checkbox-list.js | 25 +- .../admin/app/views/config/publish-record.js | 4 +- .../admin/app/views/config/publish.js | 4 +- .../admin/app/views/hide-modal.js | 4 +- .../admin/app/views/loading-overlay.js | 4 +- .../admin/app/views/stats/drilldown-chart.js | 4 +- .../admin/app/views/stats/drilldown-table.js | 4 +- .../admin/app/views/stats/facet-table.js | 4 +- .../admin/app/views/stats/interval-chart.js | 4 +- .../admin/app/views/stats/logs-table.js | 4 +- .../admin/app/views/stats/logs.js | 4 +- .../admin/app/views/stats/map-geo.js | 4 +- .../admin/app/views/stats/map-table.js | 4 +- .../admin/app/views/stats/query-form.js | 4 +- .../admin/app/views/stats/users-table.js | 4 +- .../admin/app/views/website-backends/table.js | 4 +- src/api-umbrella/admin/bower.json | 31 +- src/api-umbrella/admin/config/environment.js | 2 +- src/api-umbrella/admin/ember-cli-build.js | 58 ++- src/api-umbrella/admin/package.json | 2 +- .../dataTables.bootstrap.css | 0 .../dataTables.bootstrap.js | 0 .../vendor/dirtyforms/LICENSE | 0 .../vendor/dirtyforms/helpers/ckeditor.js | 0 .../vendor/dirtyforms/jquery.dirtyforms.js | 0 .../vendor/ember-easyForm.js | 0 .../vendor/ember-model/ember-model.js | 0 .../vendor/ember-model/ember-model.prod.js | 0 .../vendor/ember-validations.js | 0 .../vendor/jQuery-QueryBuilder/i18n/da.js | 0 .../vendor/jQuery-QueryBuilder/i18n/de.js | 0 .../vendor/jQuery-QueryBuilder/i18n/en.js | 0 .../vendor/jQuery-QueryBuilder/i18n/es.js | 0 .../vendor/jQuery-QueryBuilder/i18n/fr.js | 0 .../vendor/jQuery-QueryBuilder/i18n/it.js | 0 .../vendor/jQuery-QueryBuilder/i18n/nl.js | 0 .../vendor/jQuery-QueryBuilder/i18n/pl.js | 0 .../vendor/jQuery-QueryBuilder/i18n/pt-BR.js | 0 .../vendor/jQuery-QueryBuilder/i18n/ro.js | 0 .../jQuery-QueryBuilder/query-builder.css | 0 .../jQuery-QueryBuilder/query-builder.js | 0 .../jQuery-QueryBuilder/query-builder.min.css | 0 .../jQuery-QueryBuilder/query-builder.min.js | 0 .../query-builder.standalone.js | 0 .../query-builder.standalone.min.js | 0 .../vendor/jquery-ui-1.10.3.custom.js | 0 .../vendor/jquery.blockUI.js | 0 .../vendor/jquery.slugify.js | 0 .../vendor/jquery.truncate.js | 0 184 files changed, 1110 insertions(+), 956 deletions(-) create mode 100644 src/api-umbrella/admin/app/controllers/admin-groups/edit.js create mode 100644 src/api-umbrella/admin/app/controllers/admin-groups/new.js create mode 100644 src/api-umbrella/admin/app/controllers/admins/edit.js create mode 100644 src/api-umbrella/admin/app/controllers/admins/new.js create mode 100644 src/api-umbrella/admin/app/controllers/api-scopes/edit.js create mode 100644 src/api-umbrella/admin/app/controllers/api-scopes/new.js create mode 100644 src/api-umbrella/admin/app/controllers/api-users/edit.js create mode 100644 src/api-umbrella/admin/app/controllers/api-users/new.js delete mode 100644 src/api-umbrella/admin/app/controllers/apis-server.js create mode 100644 src/api-umbrella/admin/app/controllers/apis/edit.js rename src/api-umbrella/admin/app/controllers/{apis-form.js => apis/form.js} (95%) rename src/api-umbrella/admin/app/controllers/{apis-index.js => apis/index.js} (67%) create mode 100644 src/api-umbrella/admin/app/controllers/apis/new.js create mode 100644 src/api-umbrella/admin/app/controllers/apis/server.js create mode 100644 src/api-umbrella/admin/app/controllers/stats/drilldown-default.js create mode 100644 src/api-umbrella/admin/app/controllers/stats/logs-default.js create mode 100644 src/api-umbrella/admin/app/controllers/stats/map-default.js create mode 100644 src/api-umbrella/admin/app/controllers/stats/users-default.js create mode 100644 src/api-umbrella/admin/app/controllers/website-backends/edit.js create mode 100644 src/api-umbrella/admin/app/controllers/website-backends/new.js create mode 100644 src/api-umbrella/admin/app/initializers/bootbox.js create mode 100644 src/api-umbrella/admin/app/initializers/datatables.js create mode 100644 src/api-umbrella/admin/app/initializers/easy-form.js create mode 100644 src/api-umbrella/admin/app/initializers/pnotify.js create mode 100644 src/api-umbrella/admin/app/routes/stats/drilldown-default.js create mode 100644 src/api-umbrella/admin/app/routes/stats/logs-default.js create mode 100644 src/api-umbrella/admin/app/routes/stats/map-default.js create mode 100644 src/api-umbrella/admin/app/routes/stats/users-default.js rename src/api-umbrella/{web-app/app/assets/stylesheets/admin/base.css.scss => admin/app/styles/admin/base.scss} (100%) rename src/api-umbrella/{web-app/app/assets/stylesheets/admin/stats.css.scss => admin/app/styles/admin/stats.scss} (100%) rename src/api-umbrella/{web-app/app/assets/stylesheets/admin/variables.css.scss => admin/app/styles/admin/variables.scss} (100%) delete mode 100644 src/api-umbrella/admin/app/styles/app.css create mode 100644 src/api-umbrella/admin/app/styles/app.scss create mode 100644 src/api-umbrella/admin/app/views/checkbox-list-item.js rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/datatables-plugins/dataTables.bootstrap.css (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/datatables-plugins/dataTables.bootstrap.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/dirtyforms/LICENSE (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/dirtyforms/helpers/ckeditor.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/dirtyforms/jquery.dirtyforms.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/ember-easyForm.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/ember-model/ember-model.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/ember-model/ember-model.prod.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/ember-validations.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/da.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/de.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/en.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/es.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/fr.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/it.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/nl.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/pl.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/pt-BR.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/i18n/ro.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/query-builder.css (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/query-builder.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/query-builder.min.css (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/query-builder.min.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/query-builder.standalone.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jQuery-QueryBuilder/query-builder.standalone.min.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jquery-ui-1.10.3.custom.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jquery.blockUI.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jquery.slugify.js (100%) rename src/api-umbrella/{web-app/app/assets/javascripts => admin}/vendor/jquery.truncate.js (100%) diff --git a/src/api-umbrella/admin/.jshintrc b/src/api-umbrella/admin/.jshintrc index 08096effa..e404fc23b 100644 --- a/src/api-umbrella/admin/.jshintrc +++ b/src/api-umbrella/admin/.jshintrc @@ -2,7 +2,25 @@ "predef": [ "document", "window", - "-Promise" + "-Promise", + "_", + "$", + "ace", + "bootbox", + "CommonValidations", + "Ember", + "google", + "ic", + "inflection", + "JsDiff", + "jstz", + "jQuery", + "marked", + "moment", + "numeral", + "PNotify", + "polyglot", + "Spinner" ], "browser": true, "boss": true, diff --git a/src/api-umbrella/admin/app/app.js b/src/api-umbrella/admin/app/app.js index 5b113e035..d50524c52 100644 --- a/src/api-umbrella/admin/app/app.js +++ b/src/api-umbrella/admin/app/app.js @@ -30,21 +30,6 @@ loadInitializers(App, config.modulePrefix); //Ember.LOG_BINDINGS = true -// Set Bootbox defaults. -bootbox.animate(false); -// PNotify Defaults. -_.merge(PNotify.prototype.options, { - styling: 'bootstrap2', - width: '400px', - icon: false, - animate_speed: 'fast', - history: { - history: false - }, - buttons: { - sticker: false - } -}); (function() { var versionParts = Ember.VERSION.split('.'); var major = parseInt(versionParts[0], 10); @@ -94,226 +79,8 @@ _.merge(PNotify.prototype.options, { }, }); })(); -function eachTranslatedAttribute(object, fn) { - var isTranslatedAttribute = /(.+)Translation$/, - isTranslatedAttributeMatch; - - for (var key in object) { - isTranslatedAttributeMatch = key.match(isTranslatedAttribute); - if (isTranslatedAttributeMatch) { - var translation = (!object[key]) ? null : polyglot.t(object[key]); - fn.call(object, isTranslatedAttributeMatch[1], translation); - } - } -} -// Override existing Ember.EasyForm.processOptions to use our polyglot -// translations instead of Ember.i18n for the special *Translation fields. -// -// We could also potentially use subexpressions to call polyglot directly in -// the templates, but at least as of Ember 1.7, there are bugs with multiple -// subexpressions: https://github.com/wycats/handlebars.js/issues/748 -// Perhaps revisit when we upgrade Ember. -Ember.EasyForm.processOptions = function(property, options) { - if(options) { - if(polyglot) { - eachTranslatedAttribute(options.hash, function(attribute, translation) { - options.hash[attribute] = translation; - delete options.hash[attribute + 'Translation']; - }); - } - options.hash.property = property; - } else { - options = property; - } - - return options; -}; -Ember.EasyForm.Tooltip = Ember.EasyForm.BaseView.extend({ - tagName: 'a', - attributeBindings: ['title', 'rel', 'data-tooltip-class'], - template: Ember.Handlebars.compile(''), - rel: 'tooltip', -}); -Ember.Handlebars.registerBoundHelper('formatDate', function(date, format) { - if(!format || !_.isString(format)) { - format = 'YYYY-MM-DD HH:mm Z'; - } - - if(date) { - return moment(date).format(format); - } else { - return ''; - } -}); -Ember.Handlebars.helper('formatNumber', function(number) { - return numeral(number).format('0,0'); -}); -Ember.Handlebars.helper('inflect', function(word, number) { - return inflection.inflect(word, number); -}); -// i18n helper via polyglot library -Ember.Handlebars.registerHelper('t', function(property, options) { - return polyglot.t(property, options.hash); -}); -Ember.Handlebars.registerHelper('tooltip-field', function(property, options) { - options = Ember.EasyForm.processOptions(property, options); - options.hash.viewName = 'tooltip-field-'+options.data.view.elementId; - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Tooltip, options); -}); -// Use a custom template for Easy Form. This adds a tooltip and wraps that in -// the control-label div with the label. -Ember.TEMPLATES['easyForm/wrapped_input'] = Ember.Handlebars.compile('
{{label-field propertyBinding="view.property" textBinding="view.label" viewBinding="view"}}{{#if view.tooltip}}{{tooltip-field titleBinding="view.tooltip" data-tooltip-classBinding="view.tooltipClass"}}{{/if}}
{{partial "easyForm/inputControls"}}
'); -Ember.EasyForm.Config.registerInputType('selectize', Ember.EasyForm.TextField.extend({ - defaultOptions: [], - init: function() { - this._super(); - this.set('selectizeTextInputId', this.elementId + '_selectize_text_input'); - this.set('overrideForElementId', this.get('selectizeTextInputId')); - }, - - didInsertElement: function() { - this._super(); - - this.$input = this.$().selectize({ - plugins: ['restore_on_backspace', 'remove_button'], - delimiter: ',', - options: this.get('defaultOptions'), - valueField: 'id', - labelField: 'label', - searchField: 'label', - sortField: 'label', - onChange: _.bind(this.handleSelectizeChange, this), - create: true, - - // Add to body so it doesn't get clipped by parent div containers. - dropdownParent: 'body', - }); - - this.selectize = this.$input[0].selectize; - this.selectize.$control_input.attr('id', this.get('selectizeTextInputId')); - this.selectize.$control_input.attr('data-raw-input-id', this.elementId); - - var controlId = this.elementId + '_selectize_control'; - this.selectize.$control.attr('id', controlId); - this.selectize.$control_input.attr('data-selectize-control-id', controlId); - }, - - defaultOptionsDidChange: function() { - this.set('defaultOptions', this.get('collection').map(_.bind(function(item) { - return { - id: item.get(this.get('optionValuePath')), - label: item.get(this.get('optionLabelPath')), - }; - }, this))); - - if(this.selectize) { - this.get('defaultOptions').forEach(_.bind(function(option) { - this.selectize.addOption(option); - }, this)); - - this.selectize.refreshOptions(false); - } - }.observes('collection.@each').on('init'), - - // Sync the selectize input with the value binding if the value changes - // externally. - valueDidChange: function() { - if(this.selectize) { - var valueString = this.get('value'); - if(valueString !== this.selectize.getValue()) { - var values = valueString; - if(values) { - values = _.uniq(values.split(',')); - - // Ensure the selected value is available as an option in the menu. - // This takes into account the fact that the default options may not - // be loaded yet, or they may not contain this specific option. - for(var i = 0; i < values.length; i++) { - var option = { - id: values[i], - label: values[i], - }; - - this.selectize.addOption(option); - } - - this.selectize.refreshOptions(false); - } - - this.selectize.setValue(values); - } - } - }.observes('value').on('init'), - - // Update the value binding when the selectize input changes. - handleSelectizeChange: function(value) { - this.set('value', value); - }, - - willDestroyElement: function() { - if(this.selectize) { - this.selectize.destroy(); - } - }, -})); -Ember.EasyForm.Config.registerInputType('ace', Ember.EasyForm.TextArea.extend({ - attributeBindings: ['data-ace-mode'], - - init: function() { - this._super(); - this.set('aceId', this.elementId + '_ace'); - this.set('aceTextInputId', this.elementId + '_ace_text_input'); - this.set('overrideForElementId', this.get('aceTextInputId')); - }, - - didInsertElement: function() { - this._super(); - - var aceId = this.get('aceId'); - this.$().hide(); - this.$().before('
'); - - this.editor = ace.edit(aceId); - - var editor = this.editor; - var session = this.editor.getSession(); - var element = this.$(); - - editor.setTheme('ace/theme/textmate'); - editor.setShowPrintMargin(false); - editor.setHighlightActiveLine(false); - session.setUseWorker(false); - session.setTabSize(2); - session.setMode('ace/mode/' + this.$().data('ace-mode')); - session.setValue(this.$().val()); - - var $textElement = $(editor.textInput.getElement()); - $textElement.attr('id', this.get('aceTextInputId')); - $textElement.attr('data-raw-input-id', this.elementId); - - var contentId = this.elementId + '_ace_content'; - var $content = $(editor.container).find('.ace_content'); - $content.attr('id', contentId); - $textElement.attr('data-ace-content-id', contentId); - - - session.on('change', function() { - element.val(session.getValue()); - element.trigger('change'); - }); - }, -})); -Ember.EasyForm.Config.registerWrapper('default', { - formClass: '', - fieldErrorClass: 'error', - errorClass: 'help-block', - hintClass: 'help-block', - inputClass: 'control-group', - wrapControls: true, - controlsWrapperClass: 'controls' -}); -Admin.APIUmbrellaRESTAdapter = Ember.RESTAdapter.extend({ +App.APIUmbrellaRESTAdapter = Ember.RESTAdapter.extend({ ajaxSettings: function(url, method) { return { url: url, @@ -325,115 +92,14 @@ Admin.APIUmbrellaRESTAdapter = Ember.RESTAdapter.extend({ }; } }); + $.ajaxPrefilter(function(options) { options.headers = options.headers || {}; options.headers['X-Api-Key'] = webAdminAjaxApiKey; }); -// DataTables plugin to programmatically show the processing indidicator. -// https://datatables.net/plug-ins/api#fnProcessingIndicator -jQuery.fn.dataTableExt.oApi.fnProcessingIndicator = function ( oSettings, onoff ) -{ - if( typeof(onoff) === 'undefined' ) - { - onoff=true; - } - this.oApi._fnProcessingDisplay( oSettings, onoff ); -}; -// Defaults for DataTables. -_.merge($.fn.DataTable.defaults, { - // Don't show the DataTables processing message. We'll handle the processing - // message logic in initComplete with blockui. - processing: false, - - // Enable global searching. - searching: true, - // Re-arrange how the table and surrounding fields (pagination, search, etc) - // are laid out. - dom: 'rft<"row-fluid"<"span3 table-info"i><"span6 table-pagination"p><"span3 table-length"l>>', - - language: { - // Don't have an explicit label for the search field. Use a placeholder - // instead. - search: '', - searchPlaceholder: 'Search...', - }, - - preDrawCallback: function() { - if(!this.customProcessingCallbackSet) { - // Use blockui to provide a more obvious processing message the overlays - // the entire table (this helps for long tables, where a simple processing - // message might appear out of your current view). - // - // Set this early on during pre-draw so that the processing message shows - // up for the first load. - $(this).DataTable().on('processing', _.bind(function(event, settings, processing) { - if(processing) { - this.block({ - message: '', - }); - } else { - this.unblock(); - } - }, this)); - - this.customProcessingCallbackSet = true; - } - }, -}); -Ember.EasyForm.Input.reopen({ - didInsertElement: function() { - var forId = this.get('input-field-' + this.elementId + '.overrideForElementId') || this.get('input-field-' + this.elementId + '.elementId'); - this.set('label-field-' + this.elementId + '.for', forId); - }, - - // Observe the "showAllValidationErrors" property and show all the inline - // input validations when this gets set to true. This allows us to show all - // the invalid fields on the page without actually visiting each input field - // (useful on form submits). This is a bit of a workaround since - // ember-easyForm doesn't currently support this: - // https://github.com/dockyard/ember-easyForm/issues/146 - // https://github.com/dockyard/ember-easyForm/pull/143 - showAllValidationErrorsOnModelChange: function() { - if(this.get('context.showAllValidationErrors') === true) { - this.set('hasFocusedOut', true); - this.set('canShowValidationError', true); - } else { - this.showValidationError(); - } - }.observes('context.showAllValidationErrors'), -}); -Ember.EasyForm.Form.reopen({ - submit: function(event) { - if (event) { - event.preventDefault(); - } - - if(!this.get('context.model.validate')) { - this.get('controller').send(this.get('action')); - } else { - // Reset the error objects used for error-messages display before each - // submit, so the messages reflect the new validations. - this.set('context.model.clientErrors', {}); - this.set('context.model.serverErrors', {}); - - this.get('context.model').validate().then(_.bind(function() { - this.get('controller').send(this.get('action')); - }, this)).catch(_.bind(function() { - // On validation failure, set the errors for error-messages display and - // scroll to the error messages display. - this.set('context.model.clientErrors', this.get('context.model.errors')); - $.scrollTo('#error_messages', { offset: -50, duration: 200 }); - - // Display all the inline errors for at least the top-level model - // (note, this doesn't currently propagate to embedded models/forms). - this.set('context.model.showAllValidationErrors', true); - }, this)); - } - }, -}); // A mixin that provides the default ajax save behavior for our forms. -Admin.Save = Ember.Mixin.create({ +App.Save = Ember.Mixin.create({ save: function(options) { var button = $('#save_button'); button.button('loading'); @@ -468,7 +134,8 @@ Admin.Save = Ember.Mixin.create({ }, this)); }, }); -Admin.DataTablesHelpers = { + +App.DataTablesHelpers = { renderEscaped: function(value, type) { if(type === 'display' && value) { return _.escape(value); diff --git a/src/api-umbrella/admin/app/components/api-settings-fields.js b/src/api-umbrella/admin/app/components/api-settings-fields.js index 352eebe48..e5092da31 100644 --- a/src/api-umbrella/admin/app/components/api-settings-fields.js +++ b/src/api-umbrella/admin/app/components/api-settings-fields.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApiSettingsFieldsComponent = Ember.Component.extend({ +export default Ember.Component.extend({ requireHttpsOptions: [ { id: null, name: polyglot.t('admin.api.settings.require_https_options.inherit') }, { id: 'required_return_error', name: polyglot.t('admin.api.settings.require_https_options.required_return_error') }, @@ -29,5 +29,3 @@ Admin.ApiSettingsFieldsComponent = Ember.Component.extend({ // model to refresh the options. }.property().cacheable(false), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/components/error-messages.js b/src/api-umbrella/admin/app/components/error-messages.js index f995077c2..746e828da 100644 --- a/src/api-umbrella/admin/app/components/error-messages.js +++ b/src/api-umbrella/admin/app/components/error-messages.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ErrorMessagesComponent = Ember.Component.extend({ +export default Ember.Component.extend({ messages: function() { var messages = []; @@ -48,5 +48,3 @@ Admin.ErrorMessagesComponent = Ember.Component.extend({ return messages; }.property('model.clientErrors', 'model.serverErrors'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/edit.js b/src/api-umbrella/admin/app/controllers/admin-groups/edit.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/admin-groups/edit.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/form.js b/src/api-umbrella/admin/app/controllers/admin-groups/form.js index 108f9b507..831c9ebd6 100644 --- a/src/api-umbrella/admin/app/controllers/admin-groups/form.js +++ b/src/api-umbrella/admin/app/controllers/admin-groups/form.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.AdminGroupsFormController = Ember.ObjectController.extend(Admin.Save, { +export default Ember.ObjectController.extend(App.Save, { apiScopeOptions: function() { return Admin.ApiScope.find(); }.property(), @@ -27,7 +28,3 @@ Admin.AdminGroupsFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); -Admin.AdminGroupsEditController = Admin.AdminGroupsFormController.extend(); -Admin.AdminGroupsNewController = Admin.AdminGroupsFormController.extend(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/new.js b/src/api-umbrella/admin/app/controllers/admin-groups/new.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/admin-groups/new.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/admins/edit.js b/src/api-umbrella/admin/app/controllers/admins/edit.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/admins/edit.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/admins/form.js b/src/api-umbrella/admin/app/controllers/admins/form.js index bff757c0e..b6f172b87 100644 --- a/src/api-umbrella/admin/app/controllers/admins/form.js +++ b/src/api-umbrella/admin/app/controllers/admins/form.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.AdminsFormController = Ember.ObjectController.extend(Admin.Save, { +export default Ember.ObjectController.extend(App.Save, { groupOptions: function() { return Admin.AdminGroup.find(); }.property(), @@ -27,7 +28,3 @@ Admin.AdminsFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); -Admin.AdminsEditController = Admin.AdminsFormController.extend(); -Admin.AdminsNewController = Admin.AdminsFormController.extend(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admins/index.js b/src/api-umbrella/admin/app/controllers/admins/index.js index 20cfa3e3d..23641a355 100644 --- a/src/api-umbrella/admin/app/controllers/admins/index.js +++ b/src/api-umbrella/admin/app/controllers/admins/index.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.AdminsIndexController = Ember.ObjectController.extend({ +export default Ember.ObjectController.extend({ queryParams: null, downloadUrl: function() { @@ -16,5 +16,3 @@ Admin.AdminsIndexController = Ember.ObjectController.extend({ } } }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/admins/new.js b/src/api-umbrella/admin/app/controllers/admins/new.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/admins/new.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/edit.js b/src/api-umbrella/admin/app/controllers/api-scopes/edit.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/api-scopes/edit.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/form.js b/src/api-umbrella/admin/app/controllers/api-scopes/form.js index fbacc2392..0486c65b0 100644 --- a/src/api-umbrella/admin/app/controllers/api-scopes/form.js +++ b/src/api-umbrella/admin/app/controllers/api-scopes/form.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.ApiScopesFormController = Ember.ObjectController.extend(Admin.Save, { +export default Ember.ObjectController.extend(App.Save, { actions: { submit: function() { this.save({ @@ -19,7 +20,3 @@ Admin.ApiScopesFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); -Admin.ApiScopesEditController = Admin.ApiScopesFormController.extend(); -Admin.ApiScopesNewController = Admin.ApiScopesFormController.extend(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/new.js b/src/api-umbrella/admin/app/controllers/api-scopes/new.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/api-scopes/new.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/api-users/edit.js b/src/api-umbrella/admin/app/controllers/api-users/edit.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/api-users/edit.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/api-users/form.js b/src/api-umbrella/admin/app/controllers/api-users/form.js index 4d5958a46..ec659af66 100644 --- a/src/api-umbrella/admin/app/controllers/api-users/form.js +++ b/src/api-umbrella/admin/app/controllers/api-users/form.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.ApiUsersFormController = Ember.ObjectController.extend(Admin.Save, { +export default Ember.ObjectController.extend(App.Save, { throttleByIpOptions: [ { id: false, name: 'Rate limit by API key' }, { id: true, name: 'Rate limit by IP address' }, @@ -33,7 +34,3 @@ Admin.ApiUsersFormController = Ember.ObjectController.extend(Admin.Save, { }, }, }); -Admin.ApiUsersEditController = Admin.ApiUsersFormController.extend(); -Admin.ApiUsersNewController = Admin.ApiUsersFormController.extend(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/api-users/new.js b/src/api-umbrella/admin/app/controllers/api-users/new.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/api-users/new.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/apis-server.js b/src/api-umbrella/admin/app/controllers/apis-server.js deleted file mode 100644 index 4728d7cd8..000000000 --- a/src/api-umbrella/admin/app/controllers/apis-server.js +++ /dev/null @@ -1,7 +0,0 @@ -import Ember from 'ember'; - -Admin.ApisServerController = Ember.Controller.extend({ - title: 'HELLO' -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/edit.js b/src/api-umbrella/admin/app/controllers/apis/edit.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/apis/edit.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/apis-form.js b/src/api-umbrella/admin/app/controllers/apis/form.js similarity index 95% rename from src/api-umbrella/admin/app/controllers/apis-form.js rename to src/api-umbrella/admin/app/controllers/apis/form.js index 65d0ef7f5..df5443749 100644 --- a/src/api-umbrella/admin/app/controllers/apis-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/form.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.ApisFormController = Ember.ObjectController.extend(Admin.Save, { +export default Ember.ObjectController.extend(App.Save, { needs: [ 'apis_server_form', 'apis_url_match_form', @@ -121,7 +122,3 @@ Admin.ApisFormController = Ember.ObjectController.extend(Admin.Save, { }); }, }); -Admin.ApisEditController = Admin.ApisFormController.extend(); -Admin.ApisNewController = Admin.ApisFormController.extend(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis-index.js b/src/api-umbrella/admin/app/controllers/apis/index.js similarity index 67% rename from src/api-umbrella/admin/app/controllers/apis-index.js rename to src/api-umbrella/admin/app/controllers/apis/index.js index 54df3c4cc..511d5dfde 100644 --- a/src/api-umbrella/admin/app/controllers/apis-index.js +++ b/src/api-umbrella/admin/app/controllers/apis/index.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisIndexController = Ember.ArrayController.extend({ +export default Ember.ArrayController.extend({ reorderActive: false, actions: { @@ -9,5 +9,3 @@ Admin.ApisIndexController = Ember.ArrayController.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/nested-form.js b/src/api-umbrella/admin/app/controllers/apis/nested-form.js index dac006361..aac3d2289 100644 --- a/src/api-umbrella/admin/app/controllers/apis/nested-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/nested-form.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.NestedFormController = Ember.ObjectController.extend(Ember.Evented, { +export default Ember.ObjectController.extend(Ember.Evented, { needs: ['modal'], titleBase: null, @@ -66,5 +66,3 @@ Admin.NestedFormController = Ember.ObjectController.extend(Ember.Evented, { }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/new.js b/src/api-umbrella/admin/app/controllers/apis/new.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/apis/new.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrite-form.js b/src/api-umbrella/admin/app/controllers/apis/rewrite-form.js index 726829e1a..8b1b775e1 100644 --- a/src/api-umbrella/admin/app/controllers/apis/rewrite-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/rewrite-form.js @@ -1,4 +1,6 @@ -Admin.ApisRewriteFormController = Admin.NestedFormController.extend({ +import NestedForm from './nested-form'; + +export default NestedForm.extend({ titleBase: 'Rewrite', matcherTypeOptions: [ @@ -19,5 +21,3 @@ Admin.ApisRewriteFormController = Admin.NestedFormController.extend({ { id: 'PATCH', name: 'PATCH' }, ], }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrites.js b/src/api-umbrella/admin/app/controllers/apis/rewrites.js index 530bee832..b24e929f3 100644 --- a/src/api-umbrella/admin/app/controllers/apis/rewrites.js +++ b/src/api-umbrella/admin/app/controllers/apis/rewrites.js @@ -1,9 +1,9 @@ -Admin.ApisRewritesController = Admin.ApisSortableController.extend({ +import Sortable from './sortable'; + +export default Sortable.extend({ actions: { reorderRewrites: function() { this.reorderCollection('rewrites'); }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/server-form.js b/src/api-umbrella/admin/app/controllers/apis/server-form.js index a992d8939..7472b607c 100644 --- a/src/api-umbrella/admin/app/controllers/apis/server-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/server-form.js @@ -1,5 +1,5 @@ -Admin.ApisServerFormController = Admin.NestedFormController.extend({ +import NestedForm from './nested-form'; + +export default NestedForm.extend({ titleBase: 'Server', }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/server.js b/src/api-umbrella/admin/app/controllers/apis/server.js new file mode 100644 index 000000000..f4c31ad13 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/apis/server.js @@ -0,0 +1,5 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + title: 'HELLO' +}); diff --git a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js b/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js index 77ff36c6e..bd419e8f8 100644 --- a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js +++ b/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisSettingsRateLimitFieldsController = Ember.ObjectController.extend({ +export default Ember.ObjectController.extend({ rateLimitModeOptions: [ { id: null, name: 'Default rate limits' }, { id: 'custom', name: 'Custom rate limits' }, @@ -48,5 +48,3 @@ Admin.ApisSettingsRateLimitFieldsController = Ember.ObjectController.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/sortable.js b/src/api-umbrella/admin/app/controllers/apis/sortable.js index a98d25d12..8585fccc7 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sortable.js +++ b/src/api-umbrella/admin/app/controllers/apis/sortable.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisSortableController = Ember.ArrayController.extend({ +export default Ember.ArrayController.extend({ reorderable: function() { var length = this.get('length'); return (length && length > 1); @@ -47,5 +47,3 @@ Admin.ApisSortableController = Ember.ArrayController.extend({ }); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings-form.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings-form.js index 8f0e51762..2ea823b08 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sub-settings-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/sub-settings-form.js @@ -1,4 +1,6 @@ -Admin.ApisSubSettingsFormController = Admin.NestedFormController.extend({ +import NestedForm from './nested-form'; + +export default NestedForm.extend({ titleBase: 'Sub-URL Request Settings', httpMethodOptions: [ @@ -14,5 +16,3 @@ Admin.ApisSubSettingsFormController = Admin.NestedFormController.extend({ { id: 'PATCH', name: 'PATCH' }, ], }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings.js index 9706aa2f3..bbfa1dc2b 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sub-settings.js +++ b/src/api-umbrella/admin/app/controllers/apis/sub-settings.js @@ -1,9 +1,9 @@ -Admin.ApisSubSettingsController = Admin.ApisSortableController.extend({ +import Sortable from './sortable'; + +export default Sortable.extend({ actions: { reorderSubSettings: function() { this.reorderCollection('sub_settings'); }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/url-match-form.js b/src/api-umbrella/admin/app/controllers/apis/url-match-form.js index ad9ef60e1..9eee0c6b3 100644 --- a/src/api-umbrella/admin/app/controllers/apis/url-match-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/url-match-form.js @@ -1,4 +1,6 @@ -Admin.ApisUrlMatchFormController = Admin.NestedFormController.extend({ +import NestedForm from './nested-form'; + +export default NestedForm.extend({ titleBase: 'Matching URL Prefix', exampleSuffix: 'example.json?param=value', @@ -14,5 +16,3 @@ Admin.ApisUrlMatchFormController = Admin.NestedFormController.extend({ return root + prefix + this.get('exampleSuffix'); }.property('backendPrefix', 'frontendPrefix'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/apis/url-matches.js b/src/api-umbrella/admin/app/controllers/apis/url-matches.js index 034f3718f..7454a2d11 100644 --- a/src/api-umbrella/admin/app/controllers/apis/url-matches.js +++ b/src/api-umbrella/admin/app/controllers/apis/url-matches.js @@ -1,9 +1,9 @@ -Admin.ApisUrlMatchesController = Admin.ApisSortableController.extend({ +import Sortable from './sortable'; + +export default Sortable.extend({ actions: { reorderUrlMatches: function() { this.reorderCollection('url_matches'); }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/application.js b/src/api-umbrella/admin/app/controllers/application.js index 576265a01..e8cae6f3c 100644 --- a/src/api-umbrella/admin/app/controllers/application.js +++ b/src/api-umbrella/admin/app/controllers/application.js @@ -1,7 +1,5 @@ import Ember from 'ember'; -Admin.ApplicationController = Ember.ObjectController.extend({ +export default Ember.ObjectController.extend({ isLoading: null, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/config/publish.js b/src/api-umbrella/admin/app/controllers/config/publish.js index 57863cf5a..210a42e1f 100644 --- a/src/api-umbrella/admin/app/controllers/config/publish.js +++ b/src/api-umbrella/admin/app/controllers/config/publish.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ConfigPublishController = Ember.Controller.extend({ +export default Ember.Controller.extend({ hasChanges: function() { var newApis = this.get('model.config.apis.new'); var modifiedApis = this.get('model.config.apis.modified'); @@ -16,5 +16,3 @@ Admin.ConfigPublishController = Ember.Controller.extend({ } }.property('model.config.apis.new.@each', 'model.config.apis.modified.@each', 'model.config.apis.deleted.@each', 'model.config.website_backends.new.@each', 'model.config.website_backends.modified.@each', 'model.config.website_backends.deleted.@each'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/modal.js b/src/api-umbrella/admin/app/controllers/modal.js index 8efcd23ae..7c7370213 100644 --- a/src/api-umbrella/admin/app/controllers/modal.js +++ b/src/api-umbrella/admin/app/controllers/modal.js @@ -1,7 +1,5 @@ import Ember from 'ember'; -Admin.ModalController = Ember.Controller.extend({ +export default Ember.Controller.extend({ title: 'Example Modal Title' }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/base.js b/src/api-umbrella/admin/app/controllers/stats/base.js index abc4f43cb..7113d2073 100644 --- a/src/api-umbrella/admin/app/controllers/stats/base.js +++ b/src/api-umbrella/admin/app/controllers/stats/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsBaseController = Ember.ObjectController.extend({ +export default Ember.ObjectController.extend({ needs: ['application'], query: null, @@ -22,5 +22,3 @@ Admin.StatsBaseController = Ember.ObjectController.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js b/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js new file mode 100644 index 000000000..b55237d7e --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js @@ -0,0 +1,7 @@ +import Drilldown from './drilldown'; + +export default Drilldown.extend({ + renderTemplate: function() { + this.render('stats/drilldown'); + } +}); diff --git a/src/api-umbrella/admin/app/controllers/stats/drilldown.js b/src/api-umbrella/admin/app/controllers/stats/drilldown.js index 3e746dc4e..cc9afe95d 100644 --- a/src/api-umbrella/admin/app/controllers/stats/drilldown.js +++ b/src/api-umbrella/admin/app/controllers/stats/drilldown.js @@ -1,4 +1,6 @@ -Admin.StatsDrilldownController = Admin.StatsBaseController.extend({ +import Base from './base'; + +export default Base.extend({ breadcrumbs: function() { var crumbs = []; @@ -26,10 +28,3 @@ Admin.StatsDrilldownController = Admin.StatsBaseController.extend({ return '/api-umbrella/v1/analytics/drilldown.csv?' + $.param(this.get('query.params')) + '&api_key=' + webAdminAjaxApiKey; }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.prefix'), }); -Admin.StatsDrilldownDefaultController = Admin.StatsDrilldownController.extend({ - renderTemplate: function() { - this.render('stats/drilldown'); - } -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/logs-default.js b/src/api-umbrella/admin/app/controllers/stats/logs-default.js new file mode 100644 index 000000000..d6d111e36 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/stats/logs-default.js @@ -0,0 +1,4 @@ +import Logs from './logs'; + +export default Logs.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/stats/logs.js b/src/api-umbrella/admin/app/controllers/stats/logs.js index 13a8454f5..d0409c700 100644 --- a/src/api-umbrella/admin/app/controllers/stats/logs.js +++ b/src/api-umbrella/admin/app/controllers/stats/logs.js @@ -1,9 +1,7 @@ -Admin.StatsLogsController = Admin.StatsBaseController.extend({ +import Base from './base'; + +export default Base.extend({ downloadUrl: function() { return '/admin/stats/logs.csv?' + $.param(this.get('query.params')); }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at'), }); -Admin.StatsLogsDefaultController = Admin.StatsLogsController.extend({ -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/map-default.js b/src/api-umbrella/admin/app/controllers/stats/map-default.js new file mode 100644 index 000000000..f4b746a3a --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/stats/map-default.js @@ -0,0 +1,7 @@ +import Map from './map'; + +export default Map.extend({ + renderTemplate: function() { + this.render('stats/users'); + } +}); diff --git a/src/api-umbrella/admin/app/controllers/stats/map.js b/src/api-umbrella/admin/app/controllers/stats/map.js index a1fad1815..e984eb699 100644 --- a/src/api-umbrella/admin/app/controllers/stats/map.js +++ b/src/api-umbrella/admin/app/controllers/stats/map.js @@ -1,4 +1,6 @@ -Admin.StatsMapController = Admin.StatsBaseController.extend({ +import Base from './base'; + +export default Base.extend({ breadcrumbs: function() { var crumbs = []; @@ -22,10 +24,3 @@ Admin.StatsMapController = Admin.StatsBaseController.extend({ return '/admin/stats/map.csv?' + $.param(this.get('query.params')); }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at'), }); -Admin.StatsMapDefaultController = Admin.StatsMapController.extend({ - renderTemplate: function() { - this.render('stats/users'); - } -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/stats/users-default.js b/src/api-umbrella/admin/app/controllers/stats/users-default.js new file mode 100644 index 000000000..b5771e7c0 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/stats/users-default.js @@ -0,0 +1,7 @@ +import Users from './users'; + +export default Users.extend({ + renderTemplate: function() { + this.render('stats/users'); + } +}); diff --git a/src/api-umbrella/admin/app/controllers/stats/users.js b/src/api-umbrella/admin/app/controllers/stats/users.js index d1213db93..25f257fc1 100644 --- a/src/api-umbrella/admin/app/controllers/stats/users.js +++ b/src/api-umbrella/admin/app/controllers/stats/users.js @@ -1,12 +1,7 @@ -Admin.StatsUsersController = Admin.StatsBaseController.extend({ +import Base from './base'; + +export default Base.extend({ downloadUrl: function() { return '/admin/stats/users.csv?' + $.param(this.get('query.params')); }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at'), }); -Admin.StatsUsersDefaultController = Admin.StatsUsersController.extend({ - renderTemplate: function() { - this.render('stats/users'); - } -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/website-backends/edit.js b/src/api-umbrella/admin/app/controllers/website-backends/edit.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/website-backends/edit.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/website-backends/form.js b/src/api-umbrella/admin/app/controllers/website-backends/form.js index 733cf792c..5d47536c1 100644 --- a/src/api-umbrella/admin/app/controllers/website-backends/form.js +++ b/src/api-umbrella/admin/app/controllers/website-backends/form.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.WebsiteBackendsFormController = Ember.ObjectController.extend(Admin.Save, { +export default Ember.ObjectController.extend(App.Save, { backendProtocolOptions: [ { id: 'http', name: 'http' }, { id: 'https', name: 'https' }, @@ -38,7 +39,3 @@ Admin.WebsiteBackendsFormController = Ember.ObjectController.extend(Admin.Save, }, }, }); -Admin.WebsiteBackendsEditController = Admin.WebsiteBackendsFormController.extend(); -Admin.WebsiteBackendsNewController = Admin.WebsiteBackendsFormController.extend(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/controllers/website-backends/new.js b/src/api-umbrella/admin/app/controllers/website-backends/new.js new file mode 100644 index 000000000..c726cbb86 --- /dev/null +++ b/src/api-umbrella/admin/app/controllers/website-backends/new.js @@ -0,0 +1,4 @@ +import Form from './form'; + +export default Form.extend({ +}); diff --git a/src/api-umbrella/admin/app/initializers/bootbox.js b/src/api-umbrella/admin/app/initializers/bootbox.js new file mode 100644 index 000000000..8ab7a1a5d --- /dev/null +++ b/src/api-umbrella/admin/app/initializers/bootbox.js @@ -0,0 +1,8 @@ +export function initialize() { + bootbox.animate(false); +} + +export default { + name: 'bootbox', + initialize +}; diff --git a/src/api-umbrella/admin/app/initializers/datatables.js b/src/api-umbrella/admin/app/initializers/datatables.js new file mode 100644 index 000000000..1dad79f3b --- /dev/null +++ b/src/api-umbrella/admin/app/initializers/datatables.js @@ -0,0 +1,60 @@ +// DataTables plugin to programmatically show the processing indidicator. +// https://datatables.net/plug-ins/api#fnProcessingIndicator +jQuery.fn.dataTableExt.oApi.fnProcessingIndicator = function ( oSettings, onoff ) +{ + if( typeof(onoff) === 'undefined' ) + { + onoff=true; + } + this.oApi._fnProcessingDisplay( oSettings, onoff ); +}; + +export function initialize() { + // Defaults for DataTables. + _.merge($.fn.DataTable.defaults, { + // Don't show the DataTables processing message. We'll handle the processing + // message logic in initComplete with blockui. + processing: false, + + // Enable global searching. + searching: true, + + // Re-arrange how the table and surrounding fields (pagination, search, etc) + // are laid out. + dom: 'rft<"row-fluid"<"span3 table-info"i><"span6 table-pagination"p><"span3 table-length"l>>', + + language: { + // Don't have an explicit label for the search field. Use a placeholder + // instead. + search: '', + searchPlaceholder: 'Search...', + }, + + preDrawCallback: function() { + if(!this.customProcessingCallbackSet) { + // Use blockui to provide a more obvious processing message the overlays + // the entire table (this helps for long tables, where a simple processing + // message might appear out of your current view). + // + // Set this early on during pre-draw so that the processing message shows + // up for the first load. + $(this).DataTable().on('processing', _.bind(function(event, settings, processing) { + if(processing) { + this.block({ + message: '', + }); + } else { + this.unblock(); + } + }, this)); + + this.customProcessingCallbackSet = true; + } + }, + }); +} + +export default { + name: 'datatables', + initialize +}; diff --git a/src/api-umbrella/admin/app/initializers/easy-form.js b/src/api-umbrella/admin/app/initializers/easy-form.js new file mode 100644 index 000000000..12d9d8420 --- /dev/null +++ b/src/api-umbrella/admin/app/initializers/easy-form.js @@ -0,0 +1,290 @@ +function eachTranslatedAttribute(object, fn) { + var isTranslatedAttribute = /(.+)Translation$/, + isTranslatedAttributeMatch; + + for (var key in object) { + isTranslatedAttributeMatch = key.match(isTranslatedAttribute); + if (isTranslatedAttributeMatch) { + var translation = (!object[key]) ? null : polyglot.t(object[key]); + fn.call(object, isTranslatedAttributeMatch[1], translation); + } + } +} + +export function initialize() { + // Override existing Ember.EasyForm.processOptions to use our polyglot + // translations instead of Ember.i18n for the special *Translation fields. + // + // We could also potentially use subexpressions to call polyglot directly in + // the templates, but at least as of Ember 1.7, there are bugs with multiple + // subexpressions: https://github.com/wycats/handlebars.js/issues/748 + // Perhaps revisit when we upgrade Ember. + Ember.EasyForm.processOptions = function(property, options) { + if(options) { + if(polyglot) { + eachTranslatedAttribute(options.hash, function(attribute, translation) { + options.hash[attribute] = translation; + delete options.hash[attribute + 'Translation']; + }); + } + options.hash.property = property; + } else { + options = property; + } + + return options; + }; + + Ember.EasyForm.Tooltip = Ember.EasyForm.BaseView.extend({ + tagName: 'a', + attributeBindings: ['title', 'rel', 'data-tooltip-class'], + template: Ember.Handlebars.compile(''), + rel: 'tooltip', + }); + + Ember.Handlebars.registerBoundHelper('formatDate', function(date, format) { + if(!format || !_.isString(format)) { + format = 'YYYY-MM-DD HH:mm Z'; + } + + if(date) { + return moment(date).format(format); + } else { + return ''; + } + }); + + Ember.Handlebars.helper('formatNumber', function(number) { + return numeral(number).format('0,0'); + }); + + Ember.Handlebars.helper('inflect', function(word, number) { + return inflection.inflect(word, number); + }); + + // i18n helper via polyglot library + Ember.Handlebars.registerHelper('t', function(property, options) { + return polyglot.t(property, options.hash); + }); + + Ember.Handlebars.registerHelper('tooltip-field', function(property, options) { + options = Ember.EasyForm.processOptions(property, options); + options.hash.viewName = 'tooltip-field-'+options.data.view.elementId; + return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Tooltip, options); + }); + + // Use a custom template for Easy Form. This adds a tooltip and wraps that in + // the control-label div with the label. + Ember.TEMPLATES['easyForm/wrapped_input'] = Ember.Handlebars.compile('
{{label-field propertyBinding="view.property" textBinding="view.label" viewBinding="view"}}{{#if view.tooltip}}{{tooltip-field titleBinding="view.tooltip" data-tooltip-classBinding="view.tooltipClass"}}{{/if}}
{{partial "easyForm/inputControls"}}
'); + + Ember.EasyForm.Config.registerInputType('selectize', Ember.EasyForm.TextField.extend({ + defaultOptions: [], + + init: function() { + this._super(); + this.set('selectizeTextInputId', this.elementId + '_selectize_text_input'); + this.set('overrideForElementId', this.get('selectizeTextInputId')); + }, + + didInsertElement: function() { + this._super(); + + this.$input = this.$().selectize({ + plugins: ['restore_on_backspace', 'remove_button'], + delimiter: ',', + options: this.get('defaultOptions'), + valueField: 'id', + labelField: 'label', + searchField: 'label', + sortField: 'label', + onChange: _.bind(this.handleSelectizeChange, this), + create: true, + + // Add to body so it doesn't get clipped by parent div containers. + dropdownParent: 'body', + }); + + this.selectize = this.$input[0].selectize; + this.selectize.$control_input.attr('id', this.get('selectizeTextInputId')); + this.selectize.$control_input.attr('data-raw-input-id', this.elementId); + + var controlId = this.elementId + '_selectize_control'; + this.selectize.$control.attr('id', controlId); + this.selectize.$control_input.attr('data-selectize-control-id', controlId); + }, + + defaultOptionsDidChange: function() { + this.set('defaultOptions', this.get('collection').map(_.bind(function(item) { + return { + id: item.get(this.get('optionValuePath')), + label: item.get(this.get('optionLabelPath')), + }; + }, this))); + + if(this.selectize) { + this.get('defaultOptions').forEach(_.bind(function(option) { + this.selectize.addOption(option); + }, this)); + + this.selectize.refreshOptions(false); + } + }.observes('collection.@each').on('init'), + + // Sync the selectize input with the value binding if the value changes + // externally. + valueDidChange: function() { + if(this.selectize) { + var valueString = this.get('value'); + if(valueString !== this.selectize.getValue()) { + var values = valueString; + if(values) { + values = _.uniq(values.split(',')); + + // Ensure the selected value is available as an option in the menu. + // This takes into account the fact that the default options may not + // be loaded yet, or they may not contain this specific option. + for(var i = 0; i < values.length; i++) { + var option = { + id: values[i], + label: values[i], + }; + + this.selectize.addOption(option); + } + + this.selectize.refreshOptions(false); + } + + this.selectize.setValue(values); + } + } + }.observes('value').on('init'), + + // Update the value binding when the selectize input changes. + handleSelectizeChange: function(value) { + this.set('value', value); + }, + + willDestroyElement: function() { + if(this.selectize) { + this.selectize.destroy(); + } + }, + })); + + Ember.EasyForm.Config.registerInputType('ace', Ember.EasyForm.TextArea.extend({ + attributeBindings: ['data-ace-mode'], + + init: function() { + this._super(); + this.set('aceId', this.elementId + '_ace'); + this.set('aceTextInputId', this.elementId + '_ace_text_input'); + this.set('overrideForElementId', this.get('aceTextInputId')); + }, + + didInsertElement: function() { + this._super(); + + var aceId = this.get('aceId'); + this.$().hide(); + this.$().before('
'); + + this.editor = ace.edit(aceId); + + var editor = this.editor; + var session = this.editor.getSession(); + var element = this.$(); + + editor.setTheme('ace/theme/textmate'); + editor.setShowPrintMargin(false); + editor.setHighlightActiveLine(false); + session.setUseWorker(false); + session.setTabSize(2); + session.setMode('ace/mode/' + this.$().data('ace-mode')); + session.setValue(this.$().val()); + + var $textElement = $(editor.textInput.getElement()); + $textElement.attr('id', this.get('aceTextInputId')); + $textElement.attr('data-raw-input-id', this.elementId); + + var contentId = this.elementId + '_ace_content'; + var $content = $(editor.container).find('.ace_content'); + $content.attr('id', contentId); + $textElement.attr('data-ace-content-id', contentId); + + + session.on('change', function() { + element.val(session.getValue()); + element.trigger('change'); + }); + }, + })); + + Ember.EasyForm.Config.registerWrapper('default', { + formClass: '', + fieldErrorClass: 'error', + errorClass: 'help-block', + hintClass: 'help-block', + inputClass: 'control-group', + wrapControls: true, + controlsWrapperClass: 'controls' + }); + + Ember.EasyForm.Input.reopen({ + didInsertElement: function() { + var forId = this.get('input-field-' + this.elementId + '.overrideForElementId') || this.get('input-field-' + this.elementId + '.elementId'); + this.set('label-field-' + this.elementId + '.for', forId); + }, + + // Observe the "showAllValidationErrors" property and show all the inline + // input validations when this gets set to true. This allows us to show all + // the invalid fields on the page without actually visiting each input field + // (useful on form submits). This is a bit of a workaround since + // ember-easyForm doesn't currently support this: + // https://github.com/dockyard/ember-easyForm/issues/146 + // https://github.com/dockyard/ember-easyForm/pull/143 + showAllValidationErrorsOnModelChange: function() { + if(this.get('context.showAllValidationErrors') === true) { + this.set('hasFocusedOut', true); + this.set('canShowValidationError', true); + } else { + this.showValidationError(); + } + }.observes('context.showAllValidationErrors'), + }); + + Ember.EasyForm.Form.reopen({ + submit: function(event) { + if (event) { + event.preventDefault(); + } + + if(!this.get('context.model.validate')) { + this.get('controller').send(this.get('action')); + } else { + // Reset the error objects used for error-messages display before each + // submit, so the messages reflect the new validations. + this.set('context.model.clientErrors', {}); + this.set('context.model.serverErrors', {}); + + this.get('context.model').validate().then(_.bind(function() { + this.get('controller').send(this.get('action')); + }, this)).catch(_.bind(function() { + // On validation failure, set the errors for error-messages display and + // scroll to the error messages display. + this.set('context.model.clientErrors', this.get('context.model.errors')); + $.scrollTo('#error_messages', { offset: -50, duration: 200 }); + + // Display all the inline errors for at least the top-level model + // (note, this doesn't currently propagate to embedded models/forms). + this.set('context.model.showAllValidationErrors', true); + }, this)); + } + }, + }); +} + +export default { + name: 'easy-form', + initialize +}; diff --git a/src/api-umbrella/admin/app/initializers/pnotify.js b/src/api-umbrella/admin/app/initializers/pnotify.js new file mode 100644 index 000000000..574fd5545 --- /dev/null +++ b/src/api-umbrella/admin/app/initializers/pnotify.js @@ -0,0 +1,19 @@ +export function initialize() { + _.merge(PNotify.prototype.options, { + styling: 'bootstrap2', + width: '400px', + icon: false, + animate_speed: 'fast', + history: { + history: false + }, + buttons: { + sticker: false + } + }); +} + +export default { + name: 'pnotify', + initialize +}; diff --git a/src/api-umbrella/admin/app/models/admin-group.js b/src/api-umbrella/admin/app/models/admin-group.js index 768cb2893..eaadb1afb 100644 --- a/src/api-umbrella/admin/app/models/admin-group.js +++ b/src/api-umbrella/admin/app/models/admin-group.js @@ -1,26 +1,26 @@ import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.AdminGroup = Ember.Model.extend(Ember.Validations.Mixin, { - id: Ember.attr(), - name: Ember.attr(), - apiScopeIds: Ember.attr(), - permissionIds: Ember.attr(), - createdAt: Ember.attr(), - updatedAt: Ember.attr(), - creator: Ember.attr(), - updater: Ember.attr(), +export default Model.extend(Ember.Validations.Mixin, { + id: attr(), + name: attr(), + apiScopeIds: attr(), + permissionIds: attr(), + createdAt: attr(), + updatedAt: attr(), + creator: attr(), + updater: attr(), validations: { name: { presence: true, }, }, +}).reopenClass({ + url: '/api-umbrella/v1/admin_groups', + rootKey: 'admin_group', + collectionKey: 'data', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.AdminGroup.url = '/api-umbrella/v1/admin_groups'; -Admin.AdminGroup.rootKey = 'admin_group'; -Admin.AdminGroup.collectionKey = 'data'; -Admin.AdminGroup.primaryKey = 'id'; -Admin.AdminGroup.camelizeKeys = true; -Admin.AdminGroup.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/admin-permission.js b/src/api-umbrella/admin/app/models/admin-permission.js index 8c271d6c4..e09b8fee6 100644 --- a/src/api-umbrella/admin/app/models/admin-permission.js +++ b/src/api-umbrella/admin/app/models/admin-permission.js @@ -1,14 +1,13 @@ -import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.AdminPermission = Ember.Model.extend({ - id: Ember.attr(), - name: Ember.attr() +export default Model.extend({ + id: attr(), + name: attr() +}).reopenClass({ + url: '/api-umbrella/v1/admin_permissions', + rootKey: 'admin_permission', + collectionKey: 'admin_permissions', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.AdminPermission.url = '/api-umbrella/v1/admin_permissions'; -Admin.AdminPermission.rootKey = 'admin_permission'; -Admin.AdminPermission.collectionKey = 'admin_permissions'; -Admin.AdminPermission.primaryKey = 'id'; -Admin.AdminPermission.camelizeKeys = true; -Admin.AdminPermission.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/admin.js b/src/api-umbrella/admin/app/models/admin.js index 048825024..6c08d8c3b 100644 --- a/src/api-umbrella/admin/app/models/admin.js +++ b/src/api-umbrella/admin/app/models/admin.js @@ -1,27 +1,26 @@ -import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.Admin = Ember.Model.extend({ - id: Ember.attr(), - username: Ember.attr(), - email: Ember.attr(), - name: Ember.attr(), - superuser: Ember.attr(), - groupIds: Ember.attr(), - signInCount: Ember.attr(), - lastSignInAt: Ember.attr(), - lastSignInIp: Ember.attr(), - lastSignInProvider: Ember.attr(), - authenticationToken: Ember.attr(), - createdAt: Ember.attr(), - updatedAt: Ember.attr(), - creator: Ember.attr(), - updater: Ember.attr(), +export default Model.extend({ + id: attr(), + username: attr(), + email: attr(), + name: attr(), + superuser: attr(), + groupIds: attr(), + signInCount: attr(), + lastSignInAt: attr(), + lastSignInIp: attr(), + lastSignInProvider: attr(), + authenticationToken: attr(), + createdAt: attr(), + updatedAt: attr(), + creator: attr(), + updater: attr(), +}).reopenClass({ + url: '/api-umbrella/v1/admins', + rootKey: 'admin', + collectionKey: 'data', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.Admin.url = '/api-umbrella/v1/admins'; -Admin.Admin.rootKey = 'admin'; -Admin.Admin.collectionKey = 'data'; -Admin.Admin.primaryKey = 'id'; -Admin.Admin.camelizeKeys = true; -Admin.Admin.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api-scope.js b/src/api-umbrella/admin/app/models/api-scope.js index 0865a8352..88e1971de 100644 --- a/src/api-umbrella/admin/app/models/api-scope.js +++ b/src/api-umbrella/admin/app/models/api-scope.js @@ -1,14 +1,15 @@ import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.ApiScope = Ember.Model.extend(Ember.Validations.Mixin, { - id: Ember.attr(), - name: Ember.attr(), - host: Ember.attr(), - pathPrefix: Ember.attr(), - createdAt: Ember.attr(), - updatedAt: Ember.attr(), - creator: Ember.attr(), - updater: Ember.attr(), +export default Model.extend(Ember.Validations.Mixin, { + id: attr(), + name: attr(), + host: attr(), + pathPrefix: attr(), + createdAt: attr(), + updatedAt: attr(), + creator: attr(), + updater: attr(), validations: { name: { @@ -33,12 +34,11 @@ Admin.ApiScope = Ember.Model.extend(Ember.Validations.Mixin, { displayName: function() { return this.get('name') + ' - ' + this.get('host') + this.get('pathPrefix'); }.property('name', 'host', 'pathPrefix') +}).reopenClass({ + url: '/api-umbrella/v1/api_scopes', + rootKey: 'api_scope', + collectionKey: 'data', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.ApiScope.url = '/api-umbrella/v1/api_scopes'; -Admin.ApiScope.rootKey = 'api_scope'; -Admin.ApiScope.collectionKey = 'data'; -Admin.ApiScope.primaryKey = 'id'; -Admin.ApiScope.camelizeKeys = true; -Admin.ApiScope.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api-user-role.js b/src/api-umbrella/admin/app/models/api-user-role.js index 0b9f30aed..6eb776a15 100644 --- a/src/api-umbrella/admin/app/models/api-user-role.js +++ b/src/api-umbrella/admin/app/models/api-user-role.js @@ -1,13 +1,12 @@ -import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.ApiUserRole = Ember.Model.extend({ - id: Ember.attr(), +export default Model.extend({ + id: attr(), +}).reopenClass({ + url: '/api-umbrella/v1/user_roles', + rootKey: 'user_roles', + collectionKey: 'user_roles', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.ApiUserRole.url = '/api-umbrella/v1/user_roles'; -Admin.ApiUserRole.rootKey = 'user_roles'; -Admin.ApiUserRole.collectionKey = 'user_roles'; -Admin.ApiUserRole.primaryKey = 'id'; -Admin.ApiUserRole.camelizeKeys = true; -Admin.ApiUserRole.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api-user.js b/src/api-umbrella/admin/app/models/api-user.js index 9738f3cac..50c874c59 100644 --- a/src/api-umbrella/admin/app/models/api-user.js +++ b/src/api-umbrella/admin/app/models/api-user.js @@ -1,32 +1,33 @@ import Ember from 'ember'; +import { Model, attr, belongsTo } from 'ember-model'; -Admin.ApiUser = Ember.Model.extend(Ember.Validations.Mixin, { - id: Ember.attr(), - apiKey: Ember.attr(), - apiKeyHidesAt: Ember.attr(), - apiKeyPreview: Ember.attr(), - firstName: Ember.attr(), - lastName: Ember.attr(), - email: Ember.attr(), - emailVerified: Ember.attr(), - website: Ember.attr(), - useDescription: Ember.attr(), - registrationSource: Ember.attr(), - termsAndConditions: Ember.attr(), - sendWelcomeEmail: Ember.attr(), - throttleByIp: Ember.attr(), - roles: Ember.attr(), - enabled: Ember.attr(), - createdAt: Ember.attr(), - updatedAt: Ember.attr(), - creator: Ember.attr(), - updater: Ember.attr(), - registrationIp: Ember.attr(), - registrationUserAgent: Ember.attr(), - registrationReferer: Ember.attr(), - registrationOrigin: Ember.attr(), +export default Model.extend(Ember.Validations.Mixin, { + id: attr(), + apiKey: attr(), + apiKeyHidesAt: attr(), + apiKeyPreview: attr(), + firstName: attr(), + lastName: attr(), + email: attr(), + emailVerified: attr(), + website: attr(), + useDescription: attr(), + registrationSource: attr(), + termsAndConditions: attr(), + sendWelcomeEmail: attr(), + throttleByIp: attr(), + roles: attr(), + enabled: attr(), + createdAt: attr(), + updatedAt: attr(), + creator: attr(), + updater: attr(), + registrationIp: attr(), + registrationUserAgent: attr(), + registrationReferer: attr(), + registrationOrigin: attr(), - settings: Ember.belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), + settings: belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), validations: { firstName: { @@ -89,12 +90,11 @@ Admin.ApiUser = Ember.Model.extend(Ember.Validations.Mixin, { // correct for subsequent form renderings in this current session. Admin.ApiUserRole.clearCache(); }, +}).reopenClass({ + url: '/api-umbrella/v1/users', + rootKey: 'user', + collectionKey: 'data', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.ApiUser.url = '/api-umbrella/v1/users'; -Admin.ApiUser.rootKey = 'user'; -Admin.ApiUser.collectionKey = 'data'; -Admin.ApiUser.primaryKey = 'id'; -Admin.ApiUser.camelizeKeys = true; -Admin.ApiUser.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api.js b/src/api-umbrella/admin/app/models/api.js index 13d924aeb..62fb26e05 100644 --- a/src/api-umbrella/admin/app/models/api.js +++ b/src/api-umbrella/admin/app/models/api.js @@ -1,22 +1,23 @@ import Ember from 'ember'; +import { Model, attr, belongsTo, hasMany } from 'ember-model'; -Admin.Api = Ember.Model.extend(Ember.Validations.Mixin, { - name: Ember.attr(), - sortOrder: Ember.attr(Number), - backendProtocol: Ember.attr(), - frontendHost: Ember.attr(), - backendHost: Ember.attr(), - balanceAlgorithm: Ember.attr(), - createdAt: Ember.attr(), - updatedAt: Ember.attr(), - creator: Ember.attr(), - updater: Ember.attr(), +export default Model.extend(Ember.Validations.Mixin, { + name: attr(), + sortOrder: attr(Number), + backendProtocol: attr(), + frontendHost: attr(), + backendHost: attr(), + balanceAlgorithm: attr(), + createdAt: attr(), + updatedAt: attr(), + creator: attr(), + updater: attr(), - servers: Ember.hasMany('Admin.ApiServer', { key: 'servers', embedded: true }), - urlMatches: Ember.hasMany('Admin.ApiUrlMatch', { key: 'url_matches', embedded: true }), - settings: Ember.belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), - subSettings: Ember.hasMany('Admin.ApiSubSettings', { key: 'sub_settings', embedded: true }), - rewrites: Ember.hasMany('Admin.ApiRewrite', { key: 'rewrites', embedded: true }), + servers: hasMany('Admin.ApiServer', { key: 'servers', embedded: true }), + urlMatches: hasMany('Admin.ApiUrlMatch', { key: 'url_matches', embedded: true }), + settings: belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), + subSettings: hasMany('Admin.ApiSubSettings', { key: 'sub_settings', embedded: true }), + rewrites: hasMany('Admin.ApiRewrite', { key: 'rewrites', embedded: true }), validations: { name: { @@ -74,12 +75,11 @@ Admin.Api = Ember.Model.extend(Ember.Validations.Mixin, { // correct for subsequent form renderings in this current session. Admin.ApiUserRole.clearCache(); }, +}).reopenClass({ + url: '/api-umbrella/v1/apis', + rootKey: 'api', + collectionKey: 'data', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.Api.url = '/api-umbrella/v1/apis'; -Admin.Api.rootKey = 'api'; -Admin.Api.collectionKey = 'data'; -Admin.Api.primaryKey = 'id'; -Admin.Api.camelizeKeys = true; -Admin.Api.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/rate-limit.js b/src/api-umbrella/admin/app/models/api/rate-limit.js index 539a32e95..9dd7256b8 100644 --- a/src/api-umbrella/admin/app/models/api/rate-limit.js +++ b/src/api-umbrella/admin/app/models/api/rate-limit.js @@ -1,14 +1,15 @@ import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.ApiRateLimit = Ember.Model.extend({ - id: Ember.attr(), - duration: Ember.attr(Number), - limitBy: Ember.attr(), - limit: Ember.attr(), - responseHeaders: Ember.attr(), +export default Model.extend({ + id: attr(), + duration: attr(Number), + limitBy: attr(), + limit: attr(), + responseHeaders: attr(), - //durationUnits: Ember.attr(), - //durationInUnits: Ember.attr(Number), + //durationUnits: attr(), + //durationInUnits: attr(Number), init: function() { this._super(); @@ -63,8 +64,7 @@ Admin.ApiRateLimit = Ember.Model.extend({ json.duration = this.get('durationFromUnits'); return json; }, +}).reopenClass({ + primaryKey: 'id', + camelizeKeys: true, }); -Admin.ApiRateLimit.primaryKey = 'id'; -Admin.ApiRateLimit.camelizeKeys = true; - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/rewrite.js b/src/api-umbrella/admin/app/models/api/rewrite.js index 8498a6bcb..25abace95 100644 --- a/src/api-umbrella/admin/app/models/api/rewrite.js +++ b/src/api-umbrella/admin/app/models/api/rewrite.js @@ -1,14 +1,13 @@ -import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.ApiRewrite = Ember.Model.extend({ - id: Ember.attr(), - sortOrder: Ember.attr(Number), - matcherType: Ember.attr(), - httpMethod: Ember.attr(), - frontendMatcher: Ember.attr(), - backendReplacement: Ember.attr(), +export default Model.extend({ + id: attr(), + sortOrder: attr(Number), + matcherType: attr(), + httpMethod: attr(), + frontendMatcher: attr(), + backendReplacement: attr(), +}).reopenClass({ + primaryKey: 'id', + camelizeKeys: true, }); -Admin.ApiRewrite.primaryKey = 'id'; -Admin.ApiRewrite.camelizeKeys = true; - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/server.js b/src/api-umbrella/admin/app/models/api/server.js index 7e1fe31fa..676ebabe3 100644 --- a/src/api-umbrella/admin/app/models/api/server.js +++ b/src/api-umbrella/admin/app/models/api/server.js @@ -1,9 +1,10 @@ import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.ApiServer = Ember.Model.extend(Ember.Validations.Mixin, { - id: Ember.attr(), - host: Ember.attr(), - port: Ember.attr(Number), +export default Model.extend(Ember.Validations.Mixin, { + id: attr(), + host: attr(), + port: attr(Number), validations: { host: { @@ -22,8 +23,7 @@ Admin.ApiServer = Ember.Model.extend(Ember.Validations.Mixin, { hostWithPort: function() { return _.compact([this.get('host'), this.get('port')]).join(':'); }.property('host', 'port'), +}).reopenClass({ + primaryKey: 'id', + camelizeKeys: true, }); -Admin.ApiServer.primaryKey = 'id'; -Admin.ApiServer.camelizeKeys = true; - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/settings.js b/src/api-umbrella/admin/app/models/api/settings.js index 0c730dcea..efb8fa50c 100644 --- a/src/api-umbrella/admin/app/models/api/settings.js +++ b/src/api-umbrella/admin/app/models/api/settings.js @@ -1,28 +1,28 @@ -import Ember from 'ember'; - -Admin.ApiSettings = Ember.Model.extend({ - id: Ember.attr(), - appendQueryString: Ember.attr(), - headersString: Ember.attr(), - httpBasicAuth: Ember.attr(), - requireHttps: Ember.attr(), - disableApiKey: Ember.attr(), - apiKeyVerificationLevel: Ember.attr(), - requiredRoles: Ember.attr(), - requiredRolesOverride: Ember.attr(), - allowedIps: Ember.attr(), - allowedReferers: Ember.attr(), - rateLimitMode: Ember.attr(), - anonymousRateLimitBehavior: Ember.attr(), - authenticatedRateLimitBehavior: Ember.attr(), - passApiKeyHeader: Ember.attr(), - passApiKeyQueryParam: Ember.attr(), - defaultResponseHeadersString: Ember.attr(), - overrideResponseHeadersString: Ember.attr(), - errorTemplates: Ember.attr(), - errorDataYamlStrings: Ember.attr(), - - rateLimits: Ember.hasMany('Admin.ApiRateLimit', { key: 'rate_limits', embedded: true }), +import { Model, attr, hasMany } from 'ember-model'; + +export default Model.extend({ + id: attr(), + appendQueryString: attr(), + headersString: attr(), + httpBasicAuth: attr(), + requireHttps: attr(), + disableApiKey: attr(), + apiKeyVerificationLevel: attr(), + requiredRoles: attr(), + requiredRolesOverride: attr(), + allowedIps: attr(), + allowedReferers: attr(), + rateLimitMode: attr(), + anonymousRateLimitBehavior: attr(), + authenticatedRateLimitBehavior: attr(), + passApiKeyHeader: attr(), + passApiKeyQueryParam: attr(), + defaultResponseHeadersString: attr(), + overrideResponseHeadersString: attr(), + errorTemplates: attr(), + errorDataYamlStrings: attr(), + + rateLimits: hasMany('Admin.ApiRateLimit', { key: 'rate_limits', embedded: true }), init: function() { this._super(); @@ -104,8 +104,7 @@ Admin.ApiSettings = Ember.Model.extend({ isRateLimitModeCustom: function() { return (this.get('rateLimitMode') === 'custom'); }.property('rateLimitMode'), +}).reopenClass({ + primaryKey: 'id', + camelizeKeys: true, }); -Admin.ApiSettings.primaryKey = 'id'; -Admin.ApiSettings.camelizeKeys = true; - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/sub-settings.js b/src/api-umbrella/admin/app/models/api/sub-settings.js index 2ad042c3e..c6ac293d2 100644 --- a/src/api-umbrella/admin/app/models/api/sub-settings.js +++ b/src/api-umbrella/admin/app/models/api/sub-settings.js @@ -1,12 +1,12 @@ -import Ember from 'ember'; +import { Model, attr, belongsTo } from 'ember-model'; -Admin.ApiSubSettings = Ember.Model.extend({ - id: Ember.attr(), - sortOrder: Ember.attr(Number), - httpMethod: Ember.attr(), - regex: Ember.attr(), +export default Model.extend({ + id: attr(), + sortOrder: attr(Number), + httpMethod: attr(), + regex: attr(), - settings: Ember.belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), + settings: belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), init: function() { this._super(); @@ -23,8 +23,7 @@ Admin.ApiSubSettings = Ember.Model.extend({ this.set('settings', Admin.ApiSettings.create()); } }, +}).reopenClass({ + primaryKey: 'id', + camelizeKeys: true, }); -Admin.ApiSubSettings.primaryKey = 'id'; -Admin.ApiSubSettings.camelizeKeys = true; - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/api/url-match.js b/src/api-umbrella/admin/app/models/api/url-match.js index 609a4b4e0..054a02f8a 100644 --- a/src/api-umbrella/admin/app/models/api/url-match.js +++ b/src/api-umbrella/admin/app/models/api/url-match.js @@ -1,10 +1,11 @@ import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.ApiUrlMatch = Ember.Model.extend(Ember.Validations.Mixin,{ - id: Ember.attr(), - sortOrder: Ember.attr(Number), - frontendPrefix: Ember.attr(), - backendPrefix: Ember.attr(), +export default Model.extend(Ember.Validations.Mixin, { + id: attr(), + sortOrder: attr(Number), + frontendPrefix: attr(), + backendPrefix: attr(), validations: { frontendPrefix: { @@ -26,8 +27,7 @@ Admin.ApiUrlMatch = Ember.Model.extend(Ember.Validations.Mixin,{ backendPrefixWithDefault: function() { return this.get('backendPrefix') || this.get('frontendPrefix'); }.property('backendPrefix', 'frontendPrefix'), +}).reopenClass({ + primaryKey: 'id', + camelizeKeys: true, }); -Admin.ApiUrlMatch.primaryKey = 'id'; -Admin.ApiUrlMatch.camelizeKeys = true; - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/stats/drilldown.js b/src/api-umbrella/admin/app/models/stats/drilldown.js index e940c1831..f7c7ee1b9 100644 --- a/src/api-umbrella/admin/app/models/stats/drilldown.js +++ b/src/api-umbrella/admin/app/models/stats/drilldown.js @@ -1,9 +1,8 @@ import Ember from 'ember'; -Admin.StatsDrilldown = Ember.Object.extend(Ember.Evented, { +export default Ember.Object.extend(Ember.Evented, { results: null, -}); -Admin.StatsDrilldown.reopenClass({ +}).reopenClass({ find: function(params) { var promise = Ember.Deferred.create(); @@ -20,5 +19,3 @@ Admin.StatsDrilldown.reopenClass({ return promise; }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/stats/logs.js b/src/api-umbrella/admin/app/models/stats/logs.js index 7a247c970..2bbd9e745 100644 --- a/src/api-umbrella/admin/app/models/stats/logs.js +++ b/src/api-umbrella/admin/app/models/stats/logs.js @@ -1,12 +1,11 @@ import Ember from 'ember'; -Admin.StatsLogs = Ember.Object.extend(Ember.Evented, { +export default Ember.Object.extend(Ember.Evented, { hits_over_time: null, stats: null, facets: null, logs: null, -}); -Admin.StatsLogs.reopenClass({ +}).reopenClass({ find: function(params) { var promise = Ember.Deferred.create(); @@ -23,5 +22,3 @@ Admin.StatsLogs.reopenClass({ return promise; }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/stats/map.js b/src/api-umbrella/admin/app/models/stats/map.js index 87b5ef965..a7041d65f 100644 --- a/src/api-umbrella/admin/app/models/stats/map.js +++ b/src/api-umbrella/admin/app/models/stats/map.js @@ -1,10 +1,9 @@ import Ember from 'ember'; -Admin.StatsMap = Ember.Object.extend(Ember.Evented, { +export default Ember.Object.extend(Ember.Evented, { regions: null, map_regions: null, -}); -Admin.StatsMap.reopenClass({ +}).reopenClass({ find: function(params) { var promise = Ember.Deferred.create(); @@ -21,5 +20,3 @@ Admin.StatsMap.reopenClass({ return promise; }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/models/website-backend.js b/src/api-umbrella/admin/app/models/website-backend.js index d856ae141..8153fe8ab 100644 --- a/src/api-umbrella/admin/app/models/website-backend.js +++ b/src/api-umbrella/admin/app/models/website-backend.js @@ -1,11 +1,12 @@ import Ember from 'ember'; +import { Model, attr } from 'ember-model'; -Admin.WebsiteBackend = Ember.Model.extend(Ember.Validations.Mixin, { - id: Ember.attr(), - frontendHost: Ember.attr(), - backendProtocol: Ember.attr(), - serverHost: Ember.attr(), - serverPort: Ember.attr(Number), +export default Model.extend(Ember.Validations.Mixin, { + id: attr(), + frontendHost: attr(), + backendProtocol: attr(), + serverHost: attr(), + serverPort: attr(Number), validations: { frontendHost: { @@ -30,12 +31,11 @@ Admin.WebsiteBackend = Ember.Model.extend(Ember.Validations.Mixin, { numericality: true, }, }, +}).reopenClass({ + url: '/api-umbrella/v1/website_backends', + rootKey: 'website_backend', + collectionKey: 'data', + primaryKey: 'id', + camelizeKeys: true, + adapter: Admin.APIUmbrellaRESTAdapter.create(), }); -Admin.WebsiteBackend.url = '/api-umbrella/v1/website_backends'; -Admin.WebsiteBackend.rootKey = 'website_backend'; -Admin.WebsiteBackend.collectionKey = 'data'; -Admin.WebsiteBackend.primaryKey = 'id'; -Admin.WebsiteBackend.camelizeKeys = true; -Admin.WebsiteBackend.adapter = Admin.APIUmbrellaRESTAdapter.create(); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/base.js b/src/api-umbrella/admin/app/routes/admin-groups/base.js index 85e1269dd..ed75a4d8f 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/base.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.AdminGroupsBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -8,5 +8,3 @@ Admin.AdminGroupsBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/edit.js b/src/api-umbrella/admin/app/routes/admin-groups/edit.js index 3b9afade3..1de9cece0 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/edit.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/edit.js @@ -1,4 +1,6 @@ -Admin.AdminGroupsEditRoute = Admin.AdminGroupsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). @@ -7,5 +9,3 @@ Admin.AdminGroupsEditRoute = Admin.AdminGroupsBaseRoute.extend({ return Admin.AdminGroup.find(params.adminGroupId); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/index.js b/src/api-umbrella/admin/app/routes/admin-groups/index.js index 75dce3724..a57fe0956 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/index.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/index.js @@ -1,4 +1,4 @@ -Admin.AdminGroupsIndexRoute = Admin.AdminGroupsBaseRoute.extend({ -}); +import Base from './base'; -export default undefined; +export default Base.extend({ +}); diff --git a/src/api-umbrella/admin/app/routes/admin-groups/new.js b/src/api-umbrella/admin/app/routes/admin-groups/new.js index 369813489..3443d6c39 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/new.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/new.js @@ -1,7 +1,7 @@ -Admin.AdminGroupsNewRoute = Admin.AdminGroupsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function() { return Admin.AdminGroup.create(); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/base.js b/src/api-umbrella/admin/app/routes/admins/base.js index c3982ef02..ed75a4d8f 100644 --- a/src/api-umbrella/admin/app/routes/admins/base.js +++ b/src/api-umbrella/admin/app/routes/admins/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.AdminsBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -8,5 +8,3 @@ Admin.AdminsBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/edit.js b/src/api-umbrella/admin/app/routes/admins/edit.js index dd8f0cc1f..5036aa123 100644 --- a/src/api-umbrella/admin/app/routes/admins/edit.js +++ b/src/api-umbrella/admin/app/routes/admins/edit.js @@ -1,4 +1,6 @@ -Admin.AdminsEditRoute = Admin.AdminsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). @@ -7,5 +9,3 @@ Admin.AdminsEditRoute = Admin.AdminsBaseRoute.extend({ return Admin.Admin.find(params.adminId); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/admins/index.js b/src/api-umbrella/admin/app/routes/admins/index.js index 10eab70c7..a57fe0956 100644 --- a/src/api-umbrella/admin/app/routes/admins/index.js +++ b/src/api-umbrella/admin/app/routes/admins/index.js @@ -1,4 +1,4 @@ -Admin.AdminsIndexRoute = Admin.AdminsBaseRoute.extend({ -}); +import Base from './base'; -export default undefined; +export default Base.extend({ +}); diff --git a/src/api-umbrella/admin/app/routes/admins/new.js b/src/api-umbrella/admin/app/routes/admins/new.js index 129cfd6a7..80c528502 100644 --- a/src/api-umbrella/admin/app/routes/admins/new.js +++ b/src/api-umbrella/admin/app/routes/admins/new.js @@ -1,7 +1,7 @@ -Admin.AdminsNewRoute = Admin.AdminsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function() { return Admin.Admin.create(); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/base.js b/src/api-umbrella/admin/app/routes/api-scopes/base.js index 27aa8081b..ed75a4d8f 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/base.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApiScopesBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -8,5 +8,3 @@ Admin.ApiScopesBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/edit.js b/src/api-umbrella/admin/app/routes/api-scopes/edit.js index 119f7178d..77dab3bce 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/edit.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/edit.js @@ -1,4 +1,6 @@ -Admin.ApiScopesEditRoute = Admin.ApiScopesBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). @@ -7,5 +9,3 @@ Admin.ApiScopesEditRoute = Admin.ApiScopesBaseRoute.extend({ return Admin.ApiScope.find(params.apiScopeId); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-scopes/index.js b/src/api-umbrella/admin/app/routes/api-scopes/index.js index 219a172d8..a57fe0956 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/index.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/index.js @@ -1,4 +1,4 @@ -Admin.ApiScopesIndexRoute = Admin.ApiScopesBaseRoute.extend({ -}); +import Base from './base'; -export default undefined; +export default Base.extend({ +}); diff --git a/src/api-umbrella/admin/app/routes/api-scopes/new.js b/src/api-umbrella/admin/app/routes/api-scopes/new.js index 8044e3245..df4d93aa6 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/new.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/new.js @@ -1,7 +1,7 @@ -Admin.ApiScopesNewRoute = Admin.ApiScopesBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function() { return Admin.ApiScope.create(); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/base.js b/src/api-umbrella/admin/app/routes/api-users/base.js index 4f11305a4..ed75a4d8f 100644 --- a/src/api-umbrella/admin/app/routes/api-users/base.js +++ b/src/api-umbrella/admin/app/routes/api-users/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApiUsersBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -8,5 +8,3 @@ Admin.ApiUsersBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-users').addClass('active'); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/edit.js b/src/api-umbrella/admin/app/routes/api-users/edit.js index fca6f6557..2baa7bbc6 100644 --- a/src/api-umbrella/admin/app/routes/api-users/edit.js +++ b/src/api-umbrella/admin/app/routes/api-users/edit.js @@ -1,4 +1,6 @@ -Admin.ApiUsersEditRoute = Admin.ApiUsersBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). @@ -7,5 +9,3 @@ Admin.ApiUsersEditRoute = Admin.ApiUsersBaseRoute.extend({ return Admin.ApiUser.find(params.apiUserId); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/api-users/index.js b/src/api-umbrella/admin/app/routes/api-users/index.js index 81b89d477..a57fe0956 100644 --- a/src/api-umbrella/admin/app/routes/api-users/index.js +++ b/src/api-umbrella/admin/app/routes/api-users/index.js @@ -1,4 +1,4 @@ -Admin.ApiUsersIndexRoute = Admin.ApiUsersBaseRoute.extend({ -}); +import Base from './base'; -export default undefined; +export default Base.extend({ +}); diff --git a/src/api-umbrella/admin/app/routes/api-users/new.js b/src/api-umbrella/admin/app/routes/api-users/new.js index d672d22b5..af2104835 100644 --- a/src/api-umbrella/admin/app/routes/api-users/new.js +++ b/src/api-umbrella/admin/app/routes/api-users/new.js @@ -1,7 +1,7 @@ -Admin.ApiUsersNewRoute = Admin.ApiUsersBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function() { return Admin.ApiUser.create(); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/base.js b/src/api-umbrella/admin/app/routes/apis/base.js index 0708084cb..e3a6b6ece 100644 --- a/src/api-umbrella/admin/app/routes/apis/base.js +++ b/src/api-umbrella/admin/app/routes/apis/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -8,5 +8,3 @@ Admin.ApisBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-config').addClass('active'); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/edit.js b/src/api-umbrella/admin/app/routes/apis/edit.js index a434ab525..a98d0ff12 100644 --- a/src/api-umbrella/admin/app/routes/apis/edit.js +++ b/src/api-umbrella/admin/app/routes/apis/edit.js @@ -1,4 +1,6 @@ -Admin.ApisEditRoute = Admin.ApisBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). @@ -7,5 +9,3 @@ Admin.ApisEditRoute = Admin.ApisBaseRoute.extend({ return Admin.Api.find(params.apiId); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/apis/index.js b/src/api-umbrella/admin/app/routes/apis/index.js index 1262c8400..a57fe0956 100644 --- a/src/api-umbrella/admin/app/routes/apis/index.js +++ b/src/api-umbrella/admin/app/routes/apis/index.js @@ -1,4 +1,4 @@ -Admin.ApisIndexRoute = Admin.ApisBaseRoute.extend({ -}); +import Base from './base'; -export default undefined; +export default Base.extend({ +}); diff --git a/src/api-umbrella/admin/app/routes/apis/new.js b/src/api-umbrella/admin/app/routes/apis/new.js index 58600af35..485187024 100644 --- a/src/api-umbrella/admin/app/routes/apis/new.js +++ b/src/api-umbrella/admin/app/routes/apis/new.js @@ -1,9 +1,9 @@ -Admin.ApisNewRoute = Admin.ApisBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function() { return Admin.Api.create({ frontendHost: location.hostname, }); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/application.js b/src/api-umbrella/admin/app/routes/application.js index e3fe32b13..550ae261d 100644 --- a/src/api-umbrella/admin/app/routes/application.js +++ b/src/api-umbrella/admin/app/routes/application.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApplicationRoute = Ember.Route.extend({ +export default Ember.Route.extend({ actions: { openModal: function(template) { this.render(template, { into: 'modal', outlet: 'modalBody' }); @@ -21,5 +21,3 @@ Admin.ApplicationRoute = Ember.Route.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/config/publish.js b/src/api-umbrella/admin/app/routes/config/publish.js index fe002b0bc..781bf73f7 100644 --- a/src/api-umbrella/admin/app/routes/config/publish.js +++ b/src/api-umbrella/admin/app/routes/config/publish.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ConfigPublishRoute = Ember.Route.extend({ +export default Ember.Route.extend({ model: function() { return ic.ajax.request('/api-umbrella/v1/config/pending_changes'); }, @@ -49,5 +49,3 @@ Admin.ConfigPublishRoute = Ember.Route.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/loading.js b/src/api-umbrella/admin/app/routes/loading.js index 86457e67f..096e3c59c 100644 --- a/src/api-umbrella/admin/app/routes/loading.js +++ b/src/api-umbrella/admin/app/routes/loading.js @@ -1,5 +1,3 @@ import Ember from 'ember'; -Admin.LoadingRoute = Ember.Route.extend({}); - -export default undefined; +export default Ember.Route.extend({}); diff --git a/src/api-umbrella/admin/app/routes/stats/base.js b/src/api-umbrella/admin/app/routes/stats/base.js index d9168d3ca..0089661cf 100644 --- a/src/api-umbrella/admin/app/routes/stats/base.js +++ b/src/api-umbrella/admin/app/routes/stats/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ defaultQueryParams: { tz: jstz.determine().name(), search: '', @@ -90,5 +90,3 @@ Admin.StatsBaseRoute = Ember.Route.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/drilldown-default.js b/src/api-umbrella/admin/app/routes/stats/drilldown-default.js new file mode 100644 index 000000000..619ed9772 --- /dev/null +++ b/src/api-umbrella/admin/app/routes/stats/drilldown-default.js @@ -0,0 +1,7 @@ +import Drilldown from './drilldown'; + +export default Drilldown.extend({ + renderTemplate: function() { + this.render('stats/drilldown', { controller: 'statsDrilldownDefault' }); + } +}); diff --git a/src/api-umbrella/admin/app/routes/stats/drilldown.js b/src/api-umbrella/admin/app/routes/stats/drilldown.js index a9e9ea5e1..23262fd13 100644 --- a/src/api-umbrella/admin/app/routes/stats/drilldown.js +++ b/src/api-umbrella/admin/app/routes/stats/drilldown.js @@ -1,4 +1,6 @@ -Admin.StatsDrilldownRoute = Admin.StatsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ init: function() { _.defaults(this.defaultQueryParams, { interval: 'day', @@ -55,10 +57,3 @@ Admin.StatsDrilldownRoute = Admin.StatsBaseRoute.extend({ return valid; }, }); -Admin.StatsDrilldownDefaultRoute = Admin.StatsDrilldownRoute.extend({ - renderTemplate: function() { - this.render('stats/drilldown', { controller: 'statsDrilldownDefault' }); - } -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/logs-default.js b/src/api-umbrella/admin/app/routes/stats/logs-default.js new file mode 100644 index 000000000..652b2e3db --- /dev/null +++ b/src/api-umbrella/admin/app/routes/stats/logs-default.js @@ -0,0 +1,7 @@ +import Logs from './logs'; + +export default Logs.extend({ + renderTemplate: function() { + this.render('stats/logs', { controller: 'statsLogsDefault' }); + } +}); diff --git a/src/api-umbrella/admin/app/routes/stats/logs.js b/src/api-umbrella/admin/app/routes/stats/logs.js index a2dd6251b..fb03b4378 100644 --- a/src/api-umbrella/admin/app/routes/stats/logs.js +++ b/src/api-umbrella/admin/app/routes/stats/logs.js @@ -1,4 +1,6 @@ -Admin.StatsLogsRoute = Admin.StatsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ init: function() { _.defaults(this.defaultQueryParams, { interval: 'day', @@ -54,10 +56,3 @@ Admin.StatsLogsRoute = Admin.StatsBaseRoute.extend({ return valid; }, }); -Admin.StatsLogsDefaultRoute = Admin.StatsLogsRoute.extend({ - renderTemplate: function() { - this.render('stats/logs', { controller: 'statsLogsDefault' }); - } -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/map-default.js b/src/api-umbrella/admin/app/routes/stats/map-default.js new file mode 100644 index 000000000..5d4954c9a --- /dev/null +++ b/src/api-umbrella/admin/app/routes/stats/map-default.js @@ -0,0 +1,7 @@ +import Map from './map'; + +export default Map.extend({ + renderTemplate: function() { + this.render('stats/map', { controller: 'statsMapDefault' }); + } +}); diff --git a/src/api-umbrella/admin/app/routes/stats/map.js b/src/api-umbrella/admin/app/routes/stats/map.js index f46cc1735..25e045a6f 100644 --- a/src/api-umbrella/admin/app/routes/stats/map.js +++ b/src/api-umbrella/admin/app/routes/stats/map.js @@ -1,4 +1,6 @@ -Admin.StatsMapRoute = Admin.StatsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ init: function() { _.defaults(this.defaultQueryParams, { region: 'world', @@ -20,10 +22,4 @@ Admin.StatsMapRoute = Admin.StatsBaseRoute.extend({ } }.observes('query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.region'), }); -Admin.StatsMapDefaultRoute = Admin.StatsMapRoute.extend({ - renderTemplate: function() { - this.render('stats/map', { controller: 'statsMapDefault' }); - } -}); -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/stats/users-default.js b/src/api-umbrella/admin/app/routes/stats/users-default.js new file mode 100644 index 000000000..19f00c458 --- /dev/null +++ b/src/api-umbrella/admin/app/routes/stats/users-default.js @@ -0,0 +1,7 @@ +import Users from './users'; + +export default Users.extend({ + renderTemplate: function() { + this.render('stats/users', { controller: 'statsUsersDefault' }); + } +}); diff --git a/src/api-umbrella/admin/app/routes/stats/users.js b/src/api-umbrella/admin/app/routes/stats/users.js index 7824a5ef2..72c4a7e9f 100644 --- a/src/api-umbrella/admin/app/routes/stats/users.js +++ b/src/api-umbrella/admin/app/routes/stats/users.js @@ -1,4 +1,6 @@ -Admin.StatsUsersRoute = Admin.StatsBaseRoute.extend({ +import Base from './base'; + +export default Base.extend({ model: function(params) { this._super(params); return {}; @@ -14,10 +16,3 @@ Admin.StatsUsersRoute = Admin.StatsBaseRoute.extend({ } }.observes('query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at'), }); -Admin.StatsUsersDefaultRoute = Admin.StatsUsersRoute.extend({ - renderTemplate: function() { - this.render('stats/users', { controller: 'statsUsersDefault' }); - } -}); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/base.js b/src/api-umbrella/admin/app/routes/website-backends/base.js index 25ee923d8..e3a6b6ece 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/base.js +++ b/src/api-umbrella/admin/app/routes/website-backends/base.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.WebsiteBackendsBaseRoute = Ember.Route.extend({ +export default Ember.Route.extend({ setupController: function(controller, model) { controller.set('model', model); @@ -8,5 +8,3 @@ Admin.WebsiteBackendsBaseRoute = Ember.Route.extend({ $('ul.nav li.nav-config').addClass('active'); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/edit.js b/src/api-umbrella/admin/app/routes/website-backends/edit.js index 18a9b3c98..e8b326dd7 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/edit.js +++ b/src/api-umbrella/admin/app/routes/website-backends/edit.js @@ -1,4 +1,6 @@ -Admin.WebsiteBackendsEditRoute = Admin.WebsiteBackendsBaseRoute.extend({ +import Base from 'base'; + +export default Base.extend({ model: function(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). @@ -7,5 +9,3 @@ Admin.WebsiteBackendsEditRoute = Admin.WebsiteBackendsBaseRoute.extend({ return Admin.WebsiteBackend.find(params.websiteBackendId); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/routes/website-backends/index.js b/src/api-umbrella/admin/app/routes/website-backends/index.js index 8815b9602..a57fe0956 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/index.js +++ b/src/api-umbrella/admin/app/routes/website-backends/index.js @@ -1,4 +1,4 @@ -Admin.WebsiteBackendsIndexRoute = Admin.WebsiteBackendsBaseRoute.extend({ -}); +import Base from './base'; -export default undefined; +export default Base.extend({ +}); diff --git a/src/api-umbrella/admin/app/routes/website-backends/new.js b/src/api-umbrella/admin/app/routes/website-backends/new.js index fb58b833b..5dd451f63 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/new.js +++ b/src/api-umbrella/admin/app/routes/website-backends/new.js @@ -1,9 +1,9 @@ -Admin.WebsiteBackendsNewRoute = Admin.WebsiteBackendsBaseRoute.extend({ +import Base from 'base'; + +export default Base.extend({ model: function() { return Admin.WebsiteBackend.create({ serverPort: 80, }); }, }); - -export default undefined; diff --git a/src/api-umbrella/web-app/app/assets/stylesheets/admin/base.css.scss b/src/api-umbrella/admin/app/styles/admin/base.scss similarity index 100% rename from src/api-umbrella/web-app/app/assets/stylesheets/admin/base.css.scss rename to src/api-umbrella/admin/app/styles/admin/base.scss diff --git a/src/api-umbrella/web-app/app/assets/stylesheets/admin/stats.css.scss b/src/api-umbrella/admin/app/styles/admin/stats.scss similarity index 100% rename from src/api-umbrella/web-app/app/assets/stylesheets/admin/stats.css.scss rename to src/api-umbrella/admin/app/styles/admin/stats.scss diff --git a/src/api-umbrella/web-app/app/assets/stylesheets/admin/variables.css.scss b/src/api-umbrella/admin/app/styles/admin/variables.scss similarity index 100% rename from src/api-umbrella/web-app/app/assets/stylesheets/admin/variables.css.scss rename to src/api-umbrella/admin/app/styles/admin/variables.scss diff --git a/src/api-umbrella/admin/app/styles/app.css b/src/api-umbrella/admin/app/styles/app.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/api-umbrella/admin/app/styles/app.scss b/src/api-umbrella/admin/app/styles/app.scss new file mode 100644 index 000000000..32016291c --- /dev/null +++ b/src/api-umbrella/admin/app/styles/app.scss @@ -0,0 +1,12 @@ +@import "admin/variables"; +@import "bower_components/bootstrap-sass/vendor/assets/stylesheets/bootstrap.scss"; +@import "bower_components/bootstrap-sass/vendor/assets/stylesheets/bootstrap-responsive.scss"; +@import "bower_components/fontawesome/scss/font-awesome.scss"; + +@import "vendor/jQuery-QueryBuilder/query-builder.css"; +@import "bower_components/qtip2/jquery.qtip.css"; +@import "bower_components/bootstrap-daterangepicker/daterangepicker-bs2.css"; +@import "bower_components/selectize/dist/css/selectize.default.css"; +@import "bower_components/pnotify/pnotify.core.css"; +@import "admin/base"; +@import "admin/stats"; diff --git a/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs b/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs index 66787f30f..b65b01c0a 100644 --- a/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs +++ b/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs @@ -11,7 +11,7 @@
- {{view Admin.CheckboxListView checkedValuesBinding='apiScopeIds' contentBinding='apiScopeOptions'}} + {{view 'checkbox-list' checkedValuesBinding='apiScopeIds' contentBinding='apiScopeOptions'}}
@@ -20,7 +20,7 @@
- {{view Admin.CheckboxListView checkedValuesBinding='permissionIds' contentBinding='permissionOptions'}} + {{view 'checkbox-list' checkedValuesBinding='permissionIds' contentBinding='permissionOptions'}}
diff --git a/src/api-umbrella/admin/app/templates/admin-groups/index.hbs b/src/api-umbrella/admin/app/templates/admin-groups/index.hbs index cf6ed930f..4e8fda713 100644 --- a/src/api-umbrella/admin/app/templates/admin-groups/index.hbs +++ b/src/api-umbrella/admin/app/templates/admin-groups/index.hbs @@ -5,5 +5,5 @@
- {{view Admin.AdminGroupsTableView dataBinding='model.logs' queryBinding='query'}} + {{view 'admin-groups/table' dataBinding='model.logs' queryBinding='query'}}
diff --git a/src/api-umbrella/admin/app/templates/admins/-form.hbs b/src/api-umbrella/admin/app/templates/admins/-form.hbs index 8c9134be2..3d2d40a16 100644 --- a/src/api-umbrella/admin/app/templates/admins/-form.hbs +++ b/src/api-umbrella/admin/app/templates/admins/-form.hbs @@ -45,7 +45,7 @@
- {{view Admin.CheckboxListView checkedValuesBinding='groupIds' contentBinding='groupOptions'}} + {{view 'checkbox-list' checkedValuesBinding='groupIds' contentBinding='groupOptions'}}
diff --git a/src/api-umbrella/admin/app/templates/admins/index.hbs b/src/api-umbrella/admin/app/templates/admins/index.hbs index 9449f1440..90fdec5c4 100644 --- a/src/api-umbrella/admin/app/templates/admins/index.hbs +++ b/src/api-umbrella/admin/app/templates/admins/index.hbs @@ -5,7 +5,7 @@
- {{view Admin.AdminsTableView dataBinding='model.logs' queryBinding='query'}} + {{view 'admins/table' dataBinding='model.logs' queryBinding='query'}}
diff --git a/src/api-umbrella/admin/app/templates/api-scopes/index.hbs b/src/api-umbrella/admin/app/templates/api-scopes/index.hbs index 7f019222b..a64037eb1 100644 --- a/src/api-umbrella/admin/app/templates/api-scopes/index.hbs +++ b/src/api-umbrella/admin/app/templates/api-scopes/index.hbs @@ -5,5 +5,5 @@
- {{view Admin.ApiScopesTableView dataBinding='model.logs' queryBinding='query'}} + {{view 'api-scopes/table' dataBinding='model.logs' queryBinding='query'}}
diff --git a/src/api-umbrella/admin/app/templates/api-users/index.hbs b/src/api-umbrella/admin/app/templates/api-users/index.hbs index c835dc84f..5e9ea4323 100644 --- a/src/api-umbrella/admin/app/templates/api-users/index.hbs +++ b/src/api-umbrella/admin/app/templates/api-users/index.hbs @@ -5,5 +5,5 @@
- {{view Admin.ApiUsersTableView dataBinding='model.logs' queryBinding='query'}} + {{view 'api-users/table' dataBinding='model.logs' queryBinding='query'}}
diff --git a/src/api-umbrella/admin/app/templates/apis/index.hbs b/src/api-umbrella/admin/app/templates/apis/index.hbs index d2b47f858..6f868fe61 100644 --- a/src/api-umbrella/admin/app/templates/apis/index.hbs +++ b/src/api-umbrella/admin/app/templates/apis/index.hbs @@ -5,7 +5,7 @@
- {{view Admin.ApisTableView}} + {{view 'apis/table'}}
diff --git a/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs b/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs index 1f5a32867..6b1d61b16 100644 --- a/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs +++ b/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs @@ -57,7 +57,7 @@ X-RateLimit-Remaining: 840
- {{view Admin.BooleanRadioButtonView + {{view 'boolean-radio-button' nameBinding='controller.uniqueSettingsId' selectionBinding='responseHeaders' value='true' diff --git a/src/api-umbrella/admin/app/templates/application.hbs b/src/api-umbrella/admin/app/templates/application.hbs index 4141d5c1e..540836e15 100644 --- a/src/api-umbrella/admin/app/templates/application.hbs +++ b/src/api-umbrella/admin/app/templates/application.hbs @@ -1,2 +1,56 @@ -{{outlet}} -{{render 'modal'}} + + +
+ {{outlet}} + {{! render 'modal'}} +
+ + + + diff --git a/src/api-umbrella/admin/app/templates/loading.hbs b/src/api-umbrella/admin/app/templates/loading.hbs index c0a4f84ce..7cb5fbcf1 100644 --- a/src/api-umbrella/admin/app/templates/loading.hbs +++ b/src/api-umbrella/admin/app/templates/loading.hbs @@ -1 +1 @@ -{{view Admin.LoadingOverlayView isLoading=true}} +{{view 'loading-overlay' isLoading=true}} diff --git a/src/api-umbrella/admin/app/templates/stats/drilldown.hbs b/src/api-umbrella/admin/app/templates/stats/drilldown.hbs index 4230c5dad..d61bc1f33 100644 --- a/src/api-umbrella/admin/app/templates/stats/drilldown.hbs +++ b/src/api-umbrella/admin/app/templates/stats/drilldown.hbs @@ -1,6 +1,6 @@ -{{view Admin.StatsQueryFormView enableInterval=true}} +{{view 'stats/query-form' enableInterval=true}} -{{view Admin.StatsDrilldownChartView dataBinding='hits_over_time'}} +{{view 'stats/drilldown-chart' dataBinding='hits_over_time'}} {{#each breadcrumbs}} {{#if linkQuery}} @@ -11,10 +11,10 @@ {{/each}}
- {{view Admin.StatsDrilldownTableView modelBinding='model'}} + {{view 'stats/drilldown-table' modelBinding='model'}}
-{{view Admin.LoadingOverlayView isLoadingBinding='controllers.application.isLoading'}} +{{view 'loading-overlay' isLoadingBinding='controllers.application.isLoading'}} diff --git a/src/api-umbrella/admin/app/templates/stats/logs.hbs b/src/api-umbrella/admin/app/templates/stats/logs.hbs index 3cfd2ecd8..a49704574 100644 --- a/src/api-umbrella/admin/app/templates/stats/logs.hbs +++ b/src/api-umbrella/admin/app/templates/stats/logs.hbs @@ -1,6 +1,6 @@ -{{view Admin.StatsQueryFormView enableInterval=true}} +{{view 'stats/query-form' enableInterval=true}} -{{view Admin.StatsIntervalChartView dataBinding='model.hits_over_time'}} +{{view 'stats/interval-chart' dataBinding='model.hits_over_time'}}
@@ -11,7 +11,7 @@ {{formatNumber model.stats.total_users}} unique {{inflect "user" model.stats.total_users}} - {{view Admin.StatsFacetTableView + {{view 'stats/facet-table' dataBinding='model.aggregations.users' facetTerm='user_email' toggleLabel='view top users'}} @@ -20,7 +20,7 @@ {{formatNumber model.stats.total_ips}} unique ip {{inflect "address" model.stats.total_ips}} - {{view Admin.StatsFacetTableView + {{view 'stats/facet-table' dataBinding='model.aggregations.ips' facetTerm='request_ip' toggleLabel='view top ips'}} @@ -32,10 +32,10 @@
- {{view Admin.LogsTableView dataBinding='model.logs' queryBinding='query'}} + {{view 'stats/logs-table' dataBinding='model.logs' queryBinding='query'}}
-{{view Admin.LoadingOverlayView isLoadingBinding='controllers.application.isLoading'}} +{{view 'loading-overlay' isLoadingBinding='controllers.application.isLoading'}} diff --git a/src/api-umbrella/admin/app/templates/stats/map.hbs b/src/api-umbrella/admin/app/templates/stats/map.hbs index aca874e63..319622230 100644 --- a/src/api-umbrella/admin/app/templates/stats/map.hbs +++ b/src/api-umbrella/admin/app/templates/stats/map.hbs @@ -1,4 +1,4 @@ -{{view Admin.StatsQueryFormView}} +{{view 'stats/query-form'}}
{{#each breadcrumbs}} @@ -9,14 +9,14 @@ {{/if}} {{/each}} - {{view Admin.StatsMapGeoView modelBinding='model'}} + {{view 'stats/map-geo' modelBinding='model'}}
- {{view Admin.StatsMapTableView modelBinding='model'}} + {{view 'stats/map-table' modelBinding='model'}}
-{{view Admin.LoadingOverlayView isLoadingBinding='controllers.application.isLoading'}} +{{view 'loading-overlay' isLoadingBinding='controllers.application.isLoading'}} diff --git a/src/api-umbrella/admin/app/templates/stats/users.hbs b/src/api-umbrella/admin/app/templates/stats/users.hbs index f8cca5253..b4a099404 100644 --- a/src/api-umbrella/admin/app/templates/stats/users.hbs +++ b/src/api-umbrella/admin/app/templates/stats/users.hbs @@ -1,10 +1,10 @@ -{{view Admin.StatsQueryFormView}} +{{view 'stats/query-form'}}
- {{view Admin.StatsUsersTableView}} + {{view 'stats/users-table'}}
-{{view Admin.LoadingOverlayView isLoadingBinding='controllers.application.isLoading'}} +{{view 'loading-overlay' isLoadingBinding='controllers.application.isLoading'}} diff --git a/src/api-umbrella/admin/app/templates/website-backends/index.hbs b/src/api-umbrella/admin/app/templates/website-backends/index.hbs index 2c9561f76..74a9b7475 100644 --- a/src/api-umbrella/admin/app/templates/website-backends/index.hbs +++ b/src/api-umbrella/admin/app/templates/website-backends/index.hbs @@ -5,5 +5,5 @@
- {{view Admin.WebsiteBackendsTableView}} + {{view 'website-backends/table'}}
diff --git a/src/api-umbrella/admin/app/views/admin-groups/table.js b/src/api-umbrella/admin/app/views/admin-groups/table.js index 634e81a28..f9fb5e920 100644 --- a/src/api-umbrella/admin/app/views/admin-groups/table.js +++ b/src/api-umbrella/admin/app/views/admin-groups/table.js @@ -1,6 +1,7 @@ +import App from '../../app'; import Ember from 'ember'; -Admin.AdminGroupsTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -28,17 +29,15 @@ Admin.AdminGroupsTableView = Ember.View.extend({ { data: 'api_scope_display_names', title: 'API Scopes', - render: Admin.DataTablesHelpers.renderListEscaped, + render: App.DataTablesHelpers.renderListEscaped, }, { data: 'permission_display_names', title: 'Access', defaultContent: '-', - render: Admin.DataTablesHelpers.renderListEscaped, + render: App.DataTablesHelpers.renderListEscaped, } ] }); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/admins/table.js b/src/api-umbrella/admin/app/views/admins/table.js index 1fba9d408..405f667ee 100644 --- a/src/api-umbrella/admin/app/views/admins/table.js +++ b/src/api-umbrella/admin/app/views/admins/table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.AdminsTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -69,5 +69,3 @@ Admin.AdminsTableView = Ember.View.extend({ }.bind(this)); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/api-scopes/table.js b/src/api-umbrella/admin/app/views/api-scopes/table.js index 704d0cb8f..f21347623 100644 --- a/src/api-umbrella/admin/app/views/api-scopes/table.js +++ b/src/api-umbrella/admin/app/views/api-scopes/table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApiScopesTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -41,5 +41,3 @@ Admin.ApiScopesTableView = Ember.View.extend({ }); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/api-users/edit.js b/src/api-umbrella/admin/app/views/api-users/edit.js index f1b0d99ce..bc66202a1 100644 --- a/src/api-umbrella/admin/app/views/api-users/edit.js +++ b/src/api-umbrella/admin/app/views/api-users/edit.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApiUsersEditView = Ember.View.extend({ +export default Ember.View.extend({ willDestroyElement: function() { if(this.apiKeyHideTimeout) { clearTimeout(this.apiKeyHideTimeout); @@ -24,5 +24,3 @@ Admin.ApiUsersEditView = Ember.View.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/api-users/table.js b/src/api-umbrella/admin/app/views/api-users/table.js index dd2f28cfa..abdbd4433 100644 --- a/src/api-umbrella/admin/app/views/api-users/table.js +++ b/src/api-umbrella/admin/app/views/api-users/table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApiUsersTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -67,5 +67,3 @@ Admin.ApiUsersTableView = Ember.View.extend({ }); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/apis/index.js b/src/api-umbrella/admin/app/views/apis/index.js index 161235f21..1a94b4079 100644 --- a/src/api-umbrella/admin/app/views/apis/index.js +++ b/src/api-umbrella/admin/app/views/apis/index.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisIndexView = Ember.View.extend({ +export default Ember.View.extend({ handleReorderChange: function() { var $container = this.$(); if($container) { @@ -14,5 +14,3 @@ Admin.ApisIndexView = Ember.View.extend({ } }.observes('controller.reorderActive'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/apis/server-form.js b/src/api-umbrella/admin/app/views/apis/server-form.js index 3b963eb3f..46212bd09 100644 --- a/src/api-umbrella/admin/app/views/apis/server-form.js +++ b/src/api-umbrella/admin/app/views/apis/server-form.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisServerFormView = Ember.View.extend({ +export default Ember.View.extend({ templateName: 'apis/server_form', didInsertElement: function() { @@ -10,5 +10,3 @@ Admin.ApisServerFormView = Ember.View.extend({ } } }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/apis/table.js b/src/api-umbrella/admin/app/views/apis/table.js index 7b745f6e5..5a5c0c805 100644 --- a/src/api-umbrella/admin/app/views/apis/table.js +++ b/src/api-umbrella/admin/app/views/apis/table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ApisTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -136,5 +136,3 @@ Admin.ApisTableView = Ember.View.extend({ }, this)); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/boolean-radio-button.js b/src/api-umbrella/admin/app/views/boolean-radio-button.js index 877d94c5e..52e39b8ca 100644 --- a/src/api-umbrella/admin/app/views/boolean-radio-button.js +++ b/src/api-umbrella/admin/app/views/boolean-radio-button.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.BooleanRadioButtonView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'input', type: 'radio', attributeBindings: ['name', 'type', 'checked:checked:'], @@ -25,5 +25,3 @@ Admin.BooleanRadioButtonView = Ember.View.extend({ return !!this.get('selection'); }.property() }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/checkbox-list-item.js b/src/api-umbrella/admin/app/views/checkbox-list-item.js new file mode 100644 index 000000000..956e470b0 --- /dev/null +++ b/src/api-umbrella/admin/app/views/checkbox-list-item.js @@ -0,0 +1,23 @@ +import Ember from 'ember'; + +export default Ember.Checkbox.extend({ + checked: function() { + var checkedValues = this.get('checkedValues') || []; + var value = this.get('content.id'); + return _.contains(checkedValues, value); + }.property('content', 'checkedValues.@each'), + + change: function() { + var checkedValues = this.get('checkedValues') || []; + var value = this.get('content.id'); + + if(this.get('checked')) { + checkedValues.push(value); + } else { + checkedValues = _.without(checkedValues, value); + } + + checkedValues = _.uniq(checkedValues).sort(); + this.set('checkedValues', checkedValues); + } +}); diff --git a/src/api-umbrella/admin/app/views/checkbox-list.js b/src/api-umbrella/admin/app/views/checkbox-list.js index 4a3a31db9..d697d0dea 100644 --- a/src/api-umbrella/admin/app/views/checkbox-list.js +++ b/src/api-umbrella/admin/app/views/checkbox-list.js @@ -1,32 +1,9 @@ import Ember from 'ember'; -Admin.CheckboxListItemView = Ember.Checkbox.extend({ - checked: function() { - var checkedValues = this.get('checkedValues') || []; - var value = this.get('content.id'); - return _.contains(checkedValues, value); - }.property('content', 'checkedValues.@each'), - - change: function() { - var checkedValues = this.get('checkedValues') || []; - var value = this.get('content.id'); - - if(this.get('checked')) { - checkedValues.push(value); - } else { - checkedValues = _.without(checkedValues, value); - } - - checkedValues = _.uniq(checkedValues).sort(); - this.set('checkedValues', checkedValues); - } -}); -Admin.CheckboxListView = Ember.CollectionView.extend({ +export default Ember.CollectionView.extend({ itemViewClass: Ember.View.extend({ checkedValuesBinding: 'parentView.checkedValues', template: Ember.Handlebars.compile('') }), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/config/publish-record.js b/src/api-umbrella/admin/app/views/config/publish-record.js index 78c242548..4e2ec301f 100644 --- a/src/api-umbrella/admin/app/views/config/publish-record.js +++ b/src/api-umbrella/admin/app/views/config/publish-record.js @@ -1,11 +1,9 @@ import Ember from 'ember'; -Admin.ConfigPublishRecordView = Ember.View.extend({ +export default Ember.View.extend({ actions: { toggleConfigDiff: function(id) { $('[data-diff-id=' + id + ']').toggle(); } } }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/config/publish.js b/src/api-umbrella/admin/app/views/config/publish.js index 322134cd0..b28e07d30 100644 --- a/src/api-umbrella/admin/app/views/config/publish.js +++ b/src/api-umbrella/admin/app/views/config/publish.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.ConfigPublishView = Ember.View.extend({ +export default Ember.View.extend({ didInsertElement: function() { this.$toggleCheckboxesLink = $('#toggle_checkboxes'); $('#publish_form').on('change', ':checkbox', _.bind(this.onCheckboxChange, this)); @@ -68,5 +68,3 @@ Admin.ConfigPublishView = Ember.View.extend({ } } }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/hide-modal.js b/src/api-umbrella/admin/app/views/hide-modal.js index 8e9c9ba35..3544432e5 100644 --- a/src/api-umbrella/admin/app/views/hide-modal.js +++ b/src/api-umbrella/admin/app/views/hide-modal.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.HideModalView = Ember.View.extend({ +export default Ember.View.extend({ render: function() { }, @@ -8,5 +8,3 @@ Admin.HideModalView = Ember.View.extend({ $('.modal').modal('hide'); } }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/loading-overlay.js b/src/api-umbrella/admin/app/views/loading-overlay.js index 34c26c8b5..b10dcb1da 100644 --- a/src/api-umbrella/admin/app/views/loading-overlay.js +++ b/src/api-umbrella/admin/app/views/loading-overlay.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.LoadingOverlayView = Ember.View.extend({ +export default Ember.View.extend({ classNames: ['loading-overlay'], attributeBindings: ['style'], style: 'display: none;', @@ -55,5 +55,3 @@ Admin.LoadingOverlayView = Ember.View.extend({ } }.observes('isLoading'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/drilldown-chart.js b/src/api-umbrella/admin/app/views/stats/drilldown-chart.js index 511f55fce..ca37a7805 100644 --- a/src/api-umbrella/admin/app/views/stats/drilldown-chart.js +++ b/src/api-umbrella/admin/app/views/stats/drilldown-chart.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsDrilldownChartView = Ember.View.extend({ +export default Ember.View.extend({ data: [], chartOptions: { @@ -91,5 +91,3 @@ Admin.StatsDrilldownChartView = Ember.View.extend({ this.chart.draw(this.dataTable, this.chartOptions); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/drilldown-table.js b/src/api-umbrella/admin/app/views/stats/drilldown-table.js index 2fe74cf75..d474d13d3 100644 --- a/src/api-umbrella/admin/app/views/stats/drilldown-table.js +++ b/src/api-umbrella/admin/app/views/stats/drilldown-table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsDrilldownTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -54,5 +54,3 @@ Admin.StatsDrilldownTableView = Ember.View.extend({ table.rows.add(this.get('model.results')).draw(); }.observes('model.results'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/facet-table.js b/src/api-umbrella/admin/app/views/stats/facet-table.js index 5f907bc3c..d810ef106 100644 --- a/src/api-umbrella/admin/app/views/stats/facet-table.js +++ b/src/api-umbrella/admin/app/views/stats/facet-table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsFacetTableView = Ember.View.extend({ +export default Ember.View.extend({ templateName: 'stats/_facet_table', setLinks: function() { @@ -17,5 +17,3 @@ Admin.StatsFacetTableView = Ember.View.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/interval-chart.js b/src/api-umbrella/admin/app/views/stats/interval-chart.js index a560e2d09..4f4c493fe 100644 --- a/src/api-umbrella/admin/app/views/stats/interval-chart.js +++ b/src/api-umbrella/admin/app/views/stats/interval-chart.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsIntervalChartView = Ember.View.extend({ +export default Ember.View.extend({ data: [], chartOptions: { @@ -97,5 +97,3 @@ Admin.StatsIntervalChartView = Ember.View.extend({ this.chart.draw(this.dataTable, this.chartOptions); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/logs-table.js b/src/api-umbrella/admin/app/views/stats/logs-table.js index d4ac6a8f1..c63a4fd12 100644 --- a/src/api-umbrella/admin/app/views/stats/logs-table.js +++ b/src/api-umbrella/admin/app/views/stats/logs-table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.LogsTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -188,5 +188,3 @@ Admin.LogsTableView = Ember.View.extend({ Ember.run.once(this, 'redrawTable'); }.observes('controller.query.params.query', 'controller.query.params.search', 'controller.query.params.start_at', 'controller.query.params.end_at'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/logs.js b/src/api-umbrella/admin/app/views/stats/logs.js index 1deac58dd..3885ee049 100644 --- a/src/api-umbrella/admin/app/views/stats/logs.js +++ b/src/api-umbrella/admin/app/views/stats/logs.js @@ -1,6 +1,4 @@ import Ember from 'ember'; -Admin.StatsLogsView = Ember.View.extend({ +export default Ember.View.extend({ }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/map-geo.js b/src/api-umbrella/admin/app/views/stats/map-geo.js index 39b734e70..d5f497df9 100644 --- a/src/api-umbrella/admin/app/views/stats/map-geo.js +++ b/src/api-umbrella/admin/app/views/stats/map-geo.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsMapGeoView = Ember.View.extend({ +export default Ember.View.extend({ data: [], chartOptions: { @@ -81,5 +81,3 @@ Admin.StatsMapGeoView = Ember.View.extend({ this.chart.draw(this.dataTable, this.chartOptions); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/map-table.js b/src/api-umbrella/admin/app/views/stats/map-table.js index 5e2cc3149..8ef053319 100644 --- a/src/api-umbrella/admin/app/views/stats/map-table.js +++ b/src/api-umbrella/admin/app/views/stats/map-table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsMapTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -56,5 +56,3 @@ Admin.StatsMapTableView = Ember.View.extend({ table.rows.add(this.get('model.regions')).draw(); }.observes('model.regions'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/query-form.js b/src/api-umbrella/admin/app/views/stats/query-form.js index be8267e1e..4a6dccccf 100644 --- a/src/api-umbrella/admin/app/views/stats/query-form.js +++ b/src/api-umbrella/admin/app/views/stats/query-form.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsQueryFormView = Ember.View.extend({ +export default Ember.View.extend({ templateName: 'stats/_query_form', enableInterval: false, @@ -337,5 +337,3 @@ Admin.StatsQueryFormView = Ember.View.extend({ }, }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/stats/users-table.js b/src/api-umbrella/admin/app/views/stats/users-table.js index faae4d56c..0064f96d2 100644 --- a/src/api-umbrella/admin/app/views/stats/users-table.js +++ b/src/api-umbrella/admin/app/views/stats/users-table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.StatsUsersTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -86,5 +86,3 @@ Admin.StatsUsersTableView = Ember.View.extend({ this.$().DataTable().draw(); }.observes('controller.query.params.query', 'controller.query.params.search', 'controller.query.params.start_at', 'controller.query.params.end_at'), }); - -export default undefined; diff --git a/src/api-umbrella/admin/app/views/website-backends/table.js b/src/api-umbrella/admin/app/views/website-backends/table.js index 647f0289b..cd92f2bae 100644 --- a/src/api-umbrella/admin/app/views/website-backends/table.js +++ b/src/api-umbrella/admin/app/views/website-backends/table.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -Admin.WebsiteBackendsTableView = Ember.View.extend({ +export default Ember.View.extend({ tagName: 'table', classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], @@ -31,5 +31,3 @@ Admin.WebsiteBackendsTableView = Ember.View.extend({ })); }, }); - -export default undefined; diff --git a/src/api-umbrella/admin/bower.json b/src/api-umbrella/admin/bower.json index efc11683b..54ebc44c6 100644 --- a/src/api-umbrella/admin/bower.json +++ b/src/api-umbrella/admin/bower.json @@ -1,10 +1,39 @@ { "name": "api-umbrella-admin", "dependencies": { + "bootstrap-sass": "v2.3.2.2", + "ace-builds": "1.1.9", + "bootbox": "3.3.0", + "bootstrap-daterangepicker": "1.3.17", + "datatables": "1.10.6", + "ember": "1.7.1", + "eventEmitter": "4.2.11", + "eventie": "1.0.6", + "fontawesome": "4.2.0", + "handlebars": "1.3.0", + "html5shiv": "3.7.2", + "ic-ajax": "2.0.2", + "imagesloaded": "3.1.8", + "inflection": "1.4.2", + "jquery-bbq-deparam": "1.2.1", + "jquery-simulate-ext": "1.3.0", + "jquery.scrollTo": "1.4.14", + "jsdiff": "1.0.8", + "jstz-detect": "1.0.5", + "lodash": "2.4.1", + "marked": "0.3.3", + "microplugin": "0.0.3", + "moment": "2.8.4", + "numeral": "1.5.3", + "pnotify": "2.0.1", + "polyglot": "0.4.2", + "qtip2": "2.2.1", + "selectize": "0.11.2", + "sifter": "0.3.4", + "spinjs": "2.0.2", "ember": "1.13.11", "ember-cli-shims": "0.0.6", "ember-cli-test-loader": "0.2.1", - "ember-data": "1.13.15", "ember-load-initializers": "0.1.7", "ember-qunit": "0.4.16", "ember-qunit-notifications": "0.1.0", diff --git a/src/api-umbrella/admin/config/environment.js b/src/api-umbrella/admin/config/environment.js index d8945bdfe..0d0f9c663 100644 --- a/src/api-umbrella/admin/config/environment.js +++ b/src/api-umbrella/admin/config/environment.js @@ -5,7 +5,7 @@ module.exports = function(environment) { modulePrefix: 'api-umbrella-admin', environment: environment, baseURL: '/', - locationType: 'auto', + locationType: 'hash', EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build diff --git a/src/api-umbrella/admin/ember-cli-build.js b/src/api-umbrella/admin/ember-cli-build.js index 2537ce2ca..e67d87fa9 100644 --- a/src/api-umbrella/admin/ember-cli-build.js +++ b/src/api-umbrella/admin/ember-cli-build.js @@ -4,7 +4,11 @@ var EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = function(defaults) { var app = new EmberApp(defaults, { - // Add options here + sassOptions: { + includePaths: [ + 'bower_components/bootstrap-sass/vendor/assets/stylesheets', + ], + }, }); // Use `app.import` to add additional libraries to the generated @@ -20,5 +24,57 @@ module.exports = function(defaults) { // please specify an object with the list of modules as keys // along with the exports of each module as its value. + app.import('vendor/datatables-plugins/dataTables.bootstrap.css'); + + app.import('bower_components/ember/ember-template-compiler.js'); + //app.import('bower_components/jquery/jquery.js'); + //app.import('bower_components/jquery_ujs.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-transition.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-affix.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-alert.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-button.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-carousel.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-collapse.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-dropdown.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-modal.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-scrollspy.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-tab.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-tooltip.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-popover.js'); + app.import('bower_components/bootstrap-sass/vendor/assets/javascripts/bootstrap-typeahead.js'); + app.import('bower_components/ace-builds/src/ace.js'); + app.import('bower_components/ace-builds/src/mode-json.js'); + app.import('bower_components/ace-builds/src/mode-xml.js'); + app.import('bower_components/ace-builds/src/mode-yaml.js'); + //app.import('bower_components/handlebars.js'); + //app.import('bower_components/ember.js'); + app.import('bower_components/qtip2/jquery.qtip.js'); + app.import('bower_components/lodash/dist/lodash.compat.js'); + app.import('bower_components/datatables/media/js/jquery.dataTables.js'); + app.import('vendor/datatables-plugins/dataTables.bootstrap.js'); + app.import('bower_components/jsdiff/diff.js'); + app.import('bower_components/ic-ajax/dist/globals/main.js'); + app.import('vendor/ember-model/ember-model.js'); + app.import('vendor/ember-easyForm.js'); + app.import('vendor/ember-validations.js'); + app.import('bower_components/marked/lib/marked.js'); + app.import('bower_components/pnotify/pnotify.core.js'); + app.import('bower_components/bootbox/bootbox.js'); + app.import('bower_components/jquery.scrollTo/jquery.scrollTo.js'); + app.import('vendor/jquery-ui-1.10.3.custom.js'); + app.import('bower_components/jquery-bbq-deparam/jquery-deparam.js'); + app.import('bower_components/selectize/dist/js/standalone/selectize.js'); + app.import('bower_components/inflection/lib/inflection.js'); + app.import('bower_components/jstz-detect/jstz.js'); + app.import('vendor/jquery.slugify.js'); + app.import('bower_components/moment/moment.js'); + app.import('bower_components/bootstrap-daterangepicker/daterangepicker.js'); + app.import('bower_components/numeral/numeral.js'); + app.import('vendor/jquery.blockUI.js'); + app.import('vendor/jQuery-QueryBuilder/query-builder.standalone.js'); + app.import('bower_components/spinjs/spin.js'); + app.import('vendor/dirtyforms/jquery.dirtyforms.js'); + app.import('vendor/jquery.truncate.js'); + return app.toTree(); }; diff --git a/src/api-umbrella/admin/package.json b/src/api-umbrella/admin/package.json index afa440084..70c9e7c01 100644 --- a/src/api-umbrella/admin/package.json +++ b/src/api-umbrella/admin/package.json @@ -31,9 +31,9 @@ "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-qunit": "^1.0.4", "ember-cli-release": "0.2.8", + "ember-cli-sass": "^5.2.1", "ember-cli-sri": "^1.2.0", "ember-cli-uglify": "^1.2.0", - "ember-data": "1.13.15", "ember-disable-proxy-controllers": "^1.0.1", "ember-export-application-global": "^1.0.4" } diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/datatables-plugins/dataTables.bootstrap.css b/src/api-umbrella/admin/vendor/datatables-plugins/dataTables.bootstrap.css similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/datatables-plugins/dataTables.bootstrap.css rename to src/api-umbrella/admin/vendor/datatables-plugins/dataTables.bootstrap.css diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/datatables-plugins/dataTables.bootstrap.js b/src/api-umbrella/admin/vendor/datatables-plugins/dataTables.bootstrap.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/datatables-plugins/dataTables.bootstrap.js rename to src/api-umbrella/admin/vendor/datatables-plugins/dataTables.bootstrap.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/dirtyforms/LICENSE b/src/api-umbrella/admin/vendor/dirtyforms/LICENSE similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/dirtyforms/LICENSE rename to src/api-umbrella/admin/vendor/dirtyforms/LICENSE diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/dirtyforms/helpers/ckeditor.js b/src/api-umbrella/admin/vendor/dirtyforms/helpers/ckeditor.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/dirtyforms/helpers/ckeditor.js rename to src/api-umbrella/admin/vendor/dirtyforms/helpers/ckeditor.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/dirtyforms/jquery.dirtyforms.js b/src/api-umbrella/admin/vendor/dirtyforms/jquery.dirtyforms.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/dirtyforms/jquery.dirtyforms.js rename to src/api-umbrella/admin/vendor/dirtyforms/jquery.dirtyforms.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-easyForm.js b/src/api-umbrella/admin/vendor/ember-easyForm.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-easyForm.js rename to src/api-umbrella/admin/vendor/ember-easyForm.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-model/ember-model.js b/src/api-umbrella/admin/vendor/ember-model/ember-model.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-model/ember-model.js rename to src/api-umbrella/admin/vendor/ember-model/ember-model.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-model/ember-model.prod.js b/src/api-umbrella/admin/vendor/ember-model/ember-model.prod.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-model/ember-model.prod.js rename to src/api-umbrella/admin/vendor/ember-model/ember-model.prod.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-validations.js b/src/api-umbrella/admin/vendor/ember-validations.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/ember-validations.js rename to src/api-umbrella/admin/vendor/ember-validations.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/da.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/da.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/da.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/da.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/de.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/de.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/de.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/de.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/en.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/en.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/en.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/en.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/es.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/es.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/es.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/es.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/fr.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/fr.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/fr.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/fr.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/it.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/it.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/it.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/it.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/nl.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/nl.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/nl.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/nl.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/pl.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/pl.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/pl.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/pl.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/pt-BR.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/pt-BR.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/pt-BR.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/pt-BR.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/ro.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/ro.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/i18n/ro.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/ro.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.css b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.css similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.css rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.css diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.min.css b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.min.css similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.min.css rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.min.css diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.min.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.min.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.min.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.min.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.standalone.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.standalone.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.standalone.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.standalone.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.standalone.min.js b/src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.standalone.min.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jQuery-QueryBuilder/query-builder.standalone.min.js rename to src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.standalone.min.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery-ui-1.10.3.custom.js b/src/api-umbrella/admin/vendor/jquery-ui-1.10.3.custom.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery-ui-1.10.3.custom.js rename to src/api-umbrella/admin/vendor/jquery-ui-1.10.3.custom.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery.blockUI.js b/src/api-umbrella/admin/vendor/jquery.blockUI.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery.blockUI.js rename to src/api-umbrella/admin/vendor/jquery.blockUI.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery.slugify.js b/src/api-umbrella/admin/vendor/jquery.slugify.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery.slugify.js rename to src/api-umbrella/admin/vendor/jquery.slugify.js diff --git a/src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery.truncate.js b/src/api-umbrella/admin/vendor/jquery.truncate.js similarity index 100% rename from src/api-umbrella/web-app/app/assets/javascripts/vendor/jquery.truncate.js rename to src/api-umbrella/admin/vendor/jquery.truncate.js From c29fde89994914a5959254b0078084db3c5a3b67 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Tue, 8 Mar 2016 14:34:56 -0700 Subject: [PATCH 006/214] Some in progress authentication stuff for admin updates. I'm not exactly sure where this stands, but I'm pretty sure it was tied to this admin-upgrades branch, so rather than letting this sit in my local development environment, let's commit it. --- .../app/controllers/admin/sessions_controller.rb | 15 +++++++++++++++ src/api-umbrella/web-app/config/routes.rb | 1 + 2 files changed, 16 insertions(+) diff --git a/src/api-umbrella/web-app/app/controllers/admin/sessions_controller.rb b/src/api-umbrella/web-app/app/controllers/admin/sessions_controller.rb index 26d6d5093..64400306d 100644 --- a/src/api-umbrella/web-app/app/controllers/admin/sessions_controller.rb +++ b/src/api-umbrella/web-app/app/controllers/admin/sessions_controller.rb @@ -8,6 +8,21 @@ def after_sign_out_path_for(resource_or_scope) admin_path end + def auth + response = { + "authenticated" => !!current_admin + } + + if current_admin + response["admin"] = current_admin.as_json + response["api_key"] = ApiUser.where(:email => "web.admin.ajax@internal.apiumbrella").order_by(:created_at.asc).first.api_key + end + + respond_to do|format| + format.json { render(:json => response) } + end + end + private def set_locale diff --git a/src/api-umbrella/web-app/config/routes.rb b/src/api-umbrella/web-app/config/routes.rb index 36ee12eaa..2eced886d 100644 --- a/src/api-umbrella/web-app/config/routes.rb +++ b/src/api-umbrella/web-app/config/routes.rb @@ -60,6 +60,7 @@ devise_scope :admin do get "/admin/login" => "admin/sessions#new", :as => :new_admin_session get "/admin/logout" => "admin/sessions#destroy", :as => :destroy_admin_session + get "/admin/auth" => "admin/sessions#auth" end match "/admin" => "admin/base#empty" From 693b16b0863b5ed4e8de8cecc53e0da49b8c3717 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Mon, 4 Jul 2016 18:30:17 -0600 Subject: [PATCH 007/214] Revisit these admin and Ember upgrades... Lot's of changes... The initial plan to upgrade things in more granular pieces didn't really pan out, so this is unfortunately a "change everything" type of commit (basically, there were too many hurdles in trying to upgrade only Ember without touching other libraries like Bootstrap, since a variety of those other libraries have better compatibility/ember addons available with newer versions). So... - Upgrade to Ember 2.6 (up from our earlier 1.13 attempts in this branch). - Upgrade to Bootstrap 3.3. - Upgrade most other library dependencies, remove some unused ones, and replace most local vendor dependencies with bower dependencies. - Get the basics of client-side authentication working with ember-simple-auth with a bit of a hybrid solution so we can reuse the existing server-side login page. - Get basics of i18n integration working with the server side app. - Come up with our own form-builder for generating the forms in a bootstrap-friendly way. EasyForm isn't compatible with Ember 2, and most of the current form builders out there are in flux or aren't super-customizable to match our existing interface. But It turns out with Ember 2 components, it actually isn't too hard to do this, particularly since we can hard-code our assumptions rather than being super-generic. - Switch to Ember Data for models. ember-model doesn't work in Ember 2, so we need to use something else. I also looked at ember-restless which is more ember-model like, but figured I'd take the plunge with ember-data in the hopes we'll have easier upgrade paths (since the Ember folks maintain it). It's still not an awesome fit with some of our custom-ish APIs and embedded records, but now that embedded records are supported, we can make it work. - Switch other ember libraries to versions that are compatible with Ember 2 (like ember-cp-validations). - Get the basics (index table and add/edit form) working again in the following sections: - API Users - Admin Accounts - API Scopes - Admin Groups - Website Backends - For the areas we've updated to get working, we've basically componitized everythin in the Ember 2 way (no more views or controllers). - Standardize on more ES6 styling of the code. The primary remaining pieces to update are the API Backends section and the Analytics pages. Those are also the biggest sections, but hopefully this at least establishes the basic upgrade path for the other areas. --- src/api-umbrella/admin/.eslintrc.js | 19 + src/api-umbrella/admin/.jshintrc | 20 +- src/api-umbrella/admin/.travis.yml | 9 +- src/api-umbrella/admin/README.md | 4 +- .../admin/app/adapters/application.js | 16 + src/api-umbrella/admin/app/app.js | 156 +- .../app/authenticators/devise-server-side.js | 31 + .../app/authorizers/devise-server-side.js | 7 + .../admin-groups/index-table.js} | 24 +- .../admin-groups/record-form.js} | 22 +- .../admins/index-table.js} | 42 +- .../admins/record-form.js} | 23 +- .../api-scopes/index-table.js} | 21 +- .../api-scopes/record-form.js} | 8 +- .../app/components/api-settings-fields.js | 32 +- .../api-settings/allowed-ips-fields.js | 4 + .../api-settings/allowed-referers-fields.js | 4 + .../api-settings/rate-limit-fields.js} | 28 +- .../api-users/index-table.js} | 27 +- .../app/components/api-users/record-form.js | 51 + .../apis/index-table.js} | 78 +- .../admin/app/components/apis/record-form.js | 4 + .../admin/app/components/error-messages.js | 44 +- .../admin/app/components/fields-for.js | 4 + .../app/components/form-fields/base-field.js | 9 + .../components/form-fields/checkbox-field.js | 4 + .../form-fields/checkboxes-field.js | 4 + .../components/form-fields/field-wrapper.js | 22 + .../components/form-fields/select-field.js | 4 + .../components/form-fields/selectize-field.js | 99 + .../components/form-fields/static-field.js | 4 + .../app/components/form-fields/text-field.js | 4 + .../components/form-fields/textarea-field.js | 4 + .../website-backends/index-table.js | 30 + .../website-backends/record-form.js} | 12 +- .../app/controllers/admin-groups/edit.js | 4 - .../admin/app/controllers/admin-groups/new.js | 4 - .../admin/app/controllers/admins/edit.js | 4 - .../admin/app/controllers/admins/index.js | 18 - .../admin/app/controllers/admins/new.js | 4 - .../admin/app/controllers/api-scopes/edit.js | 4 - .../admin/app/controllers/api-scopes/new.js | 4 - .../admin/app/controllers/api-users/edit.js | 4 - .../admin/app/controllers/api-users/form.js | 36 - .../admin/app/controllers/api-users/new.js | 4 - .../admin/app/controllers/apis/form.js | 36 +- .../admin/app/controllers/apis/index.js | 11 - .../admin/app/controllers/apis/nested-form.js | 16 +- .../admin/app/controllers/apis/rewrites.js | 2 +- .../admin/app/controllers/apis/server.js | 2 +- .../admin/app/controllers/apis/sortable.js | 22 +- .../app/controllers/apis/sub-settings.js | 2 +- .../app/controllers/apis/url-match-form.js | 8 +- .../admin/app/controllers/apis/url-matches.js | 2 +- .../admin/app/controllers/application.js | 4 +- .../admin/app/controllers/config/publish.js | 12 +- .../admin/app/controllers/modal.js | 2 +- .../admin/app/controllers/stats/base.js | 6 +- .../controllers/stats/drilldown-default.js | 4 +- .../admin/app/controllers/stats/drilldown.js | 10 +- .../app/controllers/stats/map-default.js | 4 +- .../admin/app/controllers/stats/map.js | 10 +- .../app/controllers/stats/users-default.js | 4 +- .../app/controllers/website-backends/edit.js | 4 - .../app/controllers/website-backends/new.js | 4 - .../admin/app/helpers/format-date.js | 18 + .../admin/app/helpers/html-safe.js | 8 + src/api-umbrella/admin/app/helpers/t.js | 8 + src/api-umbrella/admin/app/index.html | 9 +- .../admin/app/initializers/bootbox.js | 6 +- .../admin/app/initializers/datatables.js | 17 +- .../admin/app/initializers/easy-form.js | 290 -- .../admin/app/initializers/pnotify.js | 10 +- .../admin/app/initializers/qtip.js | 33 + .../app/instance-initializers/jquery-ajax.js | 15 + src/api-umbrella/admin/app/mixins/save.js | 43 + .../admin/app/models/admin-group.js | 27 +- .../admin/app/models/admin-permission.js | 15 +- src/api-umbrella/admin/app/models/admin.js | 15 +- .../admin/app/models/api-scope.js | 59 +- .../admin/app/models/api-user-role.js | 11 +- src/api-umbrella/admin/app/models/api-user.js | 89 +- src/api-umbrella/admin/app/models/api.js | 32 +- .../admin/app/models/api/rate-limit.js | 46 +- .../admin/app/models/api/server.js | 2 +- .../admin/app/models/api/settings.js | 33 +- .../admin/app/models/api/sub-settings.js | 4 +- .../admin/app/models/api/url-match.js | 4 +- .../admin/app/models/stats/drilldown.js | 6 +- .../admin/app/models/stats/logs.js | 6 +- .../admin/app/models/stats/map.js | 6 +- .../admin/app/models/website-backend.js | 65 +- .../admin/app/nonjs/common-validations.js.erb | 5 - .../admin/app/nonjs/locales/de.js.erb | 3 - .../admin/app/nonjs/locales/en.js.erb | 3 - .../admin/app/nonjs/locales/es-419.js.erb | 3 - .../admin/app/nonjs/locales/fi.js.erb | 3 - .../admin/app/nonjs/locales/fr.js.erb | 3 - .../admin/app/nonjs/locales/it.js.erb | 3 - .../admin/app/nonjs/locales/ru.js.erb | 3 - src/api-umbrella/admin/app/resolver.js | 3 + src/api-umbrella/admin/app/router.js | 19 +- .../admin/app/routes/admin-groups/base.js | 5 +- .../admin/app/routes/admin-groups/edit.js | 8 +- .../admin/app/routes/admin-groups/new.js | 4 +- .../admin/app/routes/admins/base.js | 5 +- .../admin/app/routes/admins/edit.js | 6 +- .../admin/app/routes/admins/new.js | 4 +- .../admin/app/routes/api-scopes/base.js | 5 +- .../admin/app/routes/api-scopes/edit.js | 8 +- .../admin/app/routes/api-scopes/new.js | 4 +- .../admin/app/routes/api-users/base.js | 5 +- .../admin/app/routes/api-users/edit.js | 6 +- .../admin/app/routes/api-users/new.js | 4 +- .../admin/app/routes/apis/base.js | 5 +- .../admin/app/routes/apis/edit.js | 2 +- src/api-umbrella/admin/app/routes/apis/new.js | 2 +- .../admin/app/routes/application.js | 13 +- .../admin/app/routes/config/publish.js | 19 +- src/api-umbrella/admin/app/routes/login.js | 14 + .../admin/app/routes/stats/base.js | 33 +- .../app/routes/stats/drilldown-default.js | 4 +- .../admin/app/routes/stats/drilldown.js | 20 +- .../admin/app/routes/stats/logs-default.js | 4 +- .../admin/app/routes/stats/logs.js | 20 +- .../admin/app/routes/stats/map-default.js | 4 +- .../admin/app/routes/stats/map.js | 8 +- .../admin/app/routes/stats/users-default.js | 4 +- .../admin/app/routes/stats/users.js | 6 +- .../admin/app/routes/website-backends/base.js | 5 +- .../admin/app/routes/website-backends/edit.js | 10 +- .../admin/app/routes/website-backends/new.js | 6 +- .../admin/app/serializers/api-user.js | 8 + .../admin/app/serializers/api/settings.js | 8 + .../admin/app/serializers/application.js | 36 + .../admin/app/styles/admin/base.scss | 69 +- src/api-umbrella/admin/app/styles/app.scss | 14 +- .../app/templates/admin-groups/-form.hbs | 63 - .../admin/app/templates/admin-groups/edit.hbs | 2 +- .../app/templates/admin-groups/index.hbs | 4 +- .../admin/app/templates/admin-groups/new.hbs | 2 +- .../admin/app/templates/admins/-form.hbs | 83 - .../admin/app/templates/admins/edit.hbs | 2 +- .../admin/app/templates/admins/index.hbs | 8 +- .../admin/app/templates/admins/new.hbs | 2 +- .../admin/app/templates/api-scopes/-form.hbs | 34 - .../admin/app/templates/api-scopes/edit.hbs | 2 +- .../admin/app/templates/api-scopes/index.hbs | 4 +- .../admin/app/templates/api-scopes/new.hbs | 2 +- .../admin/app/templates/api-users/-form.hbs | 120 - .../admin/app/templates/api-users/edit.hbs | 2 +- .../admin/app/templates/api-users/index.hbs | 4 +- .../admin/app/templates/api-users/new.hbs | 2 +- .../admin/app/templates/apis/-form.hbs | 8 +- .../admin/app/templates/apis/index.hbs | 7 +- .../admin/app/templates/apis/rewrites.hbs | 4 +- .../apis/settings-rate-limit-fields.hbs | 95 - .../admin/app/templates/apis/sub-settings.hbs | 4 +- .../admin/app/templates/apis/url-matches.hbs | 4 +- .../admin/app/templates/application.hbs | 83 +- .../components/admin-groups/index-table.hbs | 3 + .../components/admin-groups/record-form.hbs | 42 + .../components/admins/index-table.hbs | 7 + .../components/admins/record-form.hbs | 56 + .../components/api-scopes/index-table.hbs | 3 + .../components/api-scopes/record-form.hbs | 28 + .../components/api-settings-fields.hbs | 8 +- .../api-settings/allowed-ips-fields.hbs | 3 + .../api-settings/allowed-referers-fields.hbs | 3 + .../api-settings/rate-limit-fields.hbs | 93 + .../components/api-users/index-table.hbs | 3 + .../components/api-users/record-form.hbs | 70 + .../templates/components/apis/index-table.hbs | 6 + .../templates/components/apis/record-form.hbs | 1 + .../templates/components/error-messages.hbs | 8 +- .../app/templates/components/fields-for.hbs | 9 + .../components/form-fields/base-field.hbs | 1 + .../components/form-fields/checkbox-field.hbs | 5 + .../form-fields/checkboxes-field.hbs | 7 + .../components/form-fields/field-wrapper.hbs | 18 + .../components/form-fields/select-field.hbs | 7 + .../form-fields/selectize-field.hbs | 3 + .../components/form-fields/static-field.hbs | 9 + .../components/form-fields/text-field.hbs | 3 + .../components/form-fields/textarea-field.hbs | 3 + .../website-backends/index-table.hbs | 3 + .../website-backends/record-form.hbs | 29 + .../admin/app/templates/loading.hbs | 1 - .../admin/app/templates/login.hbs | 1 + .../app/templates/stats/-facet-table.hbs | 6 +- .../admin/app/templates/stats/-query-form.hbs | 16 +- .../admin/app/templates/stats/drilldown.hbs | 8 +- .../admin/app/templates/stats/logs.hbs | 16 +- .../admin/app/templates/stats/map.hbs | 8 +- .../admin/app/templates/stats/users.hbs | 6 +- .../app/templates/website-backends/-form.hbs | 43 - .../app/templates/website-backends/edit.hbs | 2 +- .../app/templates/website-backends/index.hbs | 4 +- .../app/templates/website-backends/new.hbs | 2 +- .../admin/app/utils/data-tables-helpers.js | 29 + .../admin/app/views/api-users/edit.js | 26 - .../admin/app/views/apis/index.js | 16 - .../admin/app/views/boolean-radio-button.js | 27 - .../admin/app/views/checkbox-list-item.js | 23 - .../admin/app/views/checkbox-list.js | 9 - .../admin/app/views/loading-overlay.js | 57 - src/api-umbrella/admin/bower.json | 59 +- src/api-umbrella/admin/ember-cli-build.js | 71 +- .../admin/{app/views => old-views}/.gitkeep | 0 .../views => old-views}/apis/server-form.js | 0 .../config/publish-record.js | 0 .../views => old-views}/config/publish.js | 0 .../{app/views => old-views}/hide-modal.js | 0 .../stats/drilldown-chart.js | 0 .../stats/drilldown-table.js | 0 .../views => old-views}/stats/facet-table.js | 0 .../stats/interval-chart.js | 0 .../views => old-views}/stats/logs-table.js | 0 .../{app/views => old-views}/stats/logs.js | 0 .../{app/views => old-views}/stats/map-geo.js | 0 .../views => old-views}/stats/map-table.js | 0 .../views => old-views}/stats/query-form.js | 0 .../views => old-views}/stats/users-table.js | 0 .../website-backends/table.js | 0 src/api-umbrella/admin/package.json | 40 +- src/api-umbrella/admin/testem.js | 13 + src/api-umbrella/admin/tests/.eslintrc.js | 7 + src/api-umbrella/admin/tests/.jshintrc | 52 - .../tests/helpers/module-for-acceptance.js | 12 +- .../admin/tests/helpers/resolver.js | 2 +- src/api-umbrella/admin/tests/index.html | 18 +- .../admin-groups/index-table-test.js | 24 + .../admin-groups/record-form-test.js | 24 + .../components/admins/index-table-test.js | 24 + .../components/admins/record-form-test.js | 24 + .../components/api-scopes/index-table-test.js | 24 + .../components/api-scopes/record-form-test.js | 24 + .../api-settings/allowed-ips-fields-test.js | 24 + .../allowed-referers-fields-test.js | 24 + .../api-settings/rate-limit-fields-test.js | 24 + .../components/api-users/index-table-test.js | 24 + .../components/api-users/record-form-test.js | 24 + .../integration/components/apis-table-test.js | 24 + .../components/apis/index-table-test.js | 24 + .../components/apis/record-form-test.js | 24 + .../integration/components/fields-for-test.js | 24 + .../components/form-fields/base-field-test.js | 24 + .../form-fields/checkbox-field-test.js | 24 + .../form-fields/checkboxes-field-test.js | 24 + .../form-fields/field-wrapper-test.js | 24 + .../form-fields/select-field-test.js | 24 + .../form-fields/selectize-field-test.js | 24 + .../form-fields/static-field-test.js | 24 + .../components/form-fields/text-field-test.js | 24 + .../form-fields/textarea-field-test.js | 24 + .../website-backends/index-table-test.js | 24 + .../website-backends/record-form-test.js | 24 + src/api-umbrella/admin/tests/test-helper.js | 2 + .../tests/unit/adapters/application-test.js | 12 + .../tests/unit/helpers/format-date-test.js | 10 + .../tests/unit/helpers/html-safe-test.js | 10 + .../admin/tests/unit/helpers/t-test.js | 10 + .../instance-initializers/jquery-ajax-test.js | 25 + .../admin/tests/unit/mixins/save-test.js | 12 + .../admin/tests/unit/routes/login-test.js | 11 + .../unit/serializers/application-test.js | 15 + .../unit/utils/data-tables-helpers-test.js | 10 + .../dataTables.bootstrap.css | 205 -- .../dataTables.bootstrap.js | 148 - .../admin/vendor/ember-easyForm.js | 687 ----- .../admin/vendor/ember-model/ember-model.js | 2037 ------------- .../vendor/ember-model/ember-model.prod.js | 2044 ------------- .../admin/vendor/ember-validations.js | 779 ----- .../vendor/jQuery-QueryBuilder/i18n/da.js | 37 - .../vendor/jQuery-QueryBuilder/i18n/de.js | 37 - .../vendor/jQuery-QueryBuilder/i18n/en.js | 59 - .../vendor/jQuery-QueryBuilder/i18n/es.js | 59 - .../vendor/jQuery-QueryBuilder/i18n/fr.js | 59 - .../vendor/jQuery-QueryBuilder/i18n/it.js | 37 - .../vendor/jQuery-QueryBuilder/i18n/nl.js | 59 - .../vendor/jQuery-QueryBuilder/i18n/pl.js | 59 - .../vendor/jQuery-QueryBuilder/i18n/pt-BR.js | 59 - .../vendor/jQuery-QueryBuilder/i18n/ro.js | 37 - .../jQuery-QueryBuilder/query-builder.css | 131 - .../jQuery-QueryBuilder/query-builder.js | 2289 -------------- .../jQuery-QueryBuilder/query-builder.min.css | 6 - .../jQuery-QueryBuilder/query-builder.min.js | 7 - .../query-builder.standalone.js | 2623 ----------------- .../query-builder.standalone.min.js | 7 - .../admin/vendor/jquery.blockUI.js | 620 ---- .../admin/vendor/jquery.slugify.js | 55 - src/api-umbrella/web-app/Gemfile | 2 + src/api-umbrella/web-app/Gemfile.lock | 3 + .../web-app/app/assets/javascripts/admin.js | 118 - .../javascripts/admin/locales/de.js.erb | 3 - .../javascripts/admin/locales/en.js.erb | 3 - .../javascripts/admin/locales/es-419.js.erb | 3 - .../javascripts/admin/locales/fi.js.erb | 3 - .../javascripts/admin/locales/fr.js.erb | 3 - .../javascripts/admin/locales/it.js.erb | 3 - .../javascripts/admin/locales/ru.js.erb | 3 - .../javascripts/admin/routes/index_route.js | 0 .../javascripts/admin/server_side_loader.js | 3 + .../app/assets/javascripts/admin_test.js | 15 - .../app/assets/stylesheets/admin.css.scss | 14 - .../assets/stylesheets/admin_test.css.scss | 14 - .../controllers/admin/sessions_controller.rb | 3 +- templates/etc/nginx/router.conf.mustache | 11 + 308 files changed, 2609 insertions(+), 14450 deletions(-) create mode 100644 src/api-umbrella/admin/.eslintrc.js create mode 100644 src/api-umbrella/admin/app/adapters/application.js create mode 100644 src/api-umbrella/admin/app/authenticators/devise-server-side.js create mode 100644 src/api-umbrella/admin/app/authorizers/devise-server-side.js rename src/api-umbrella/admin/app/{views/admin-groups/table.js => components/admin-groups/index-table.js} (66%) rename src/api-umbrella/admin/app/{controllers/admin-groups/form.js => components/admin-groups/record-form.js} (55%) rename src/api-umbrella/admin/app/{views/admins/table.js => components/admins/index-table.js} (57%) rename src/api-umbrella/admin/app/{controllers/admins/form.js => components/admins/record-form.js} (53%) rename src/api-umbrella/admin/app/{views/api-scopes/table.js => components/api-scopes/index-table.js} (65%) rename src/api-umbrella/admin/app/{controllers/api-scopes/form.js => components/api-scopes/record-form.js} (77%) create mode 100644 src/api-umbrella/admin/app/components/api-settings/allowed-ips-fields.js create mode 100644 src/api-umbrella/admin/app/components/api-settings/allowed-referers-fields.js rename src/api-umbrella/admin/app/{controllers/apis/settings-rate-limit-fields.js => components/api-settings/rate-limit-fields.js} (64%) rename src/api-umbrella/admin/app/{views/api-users/table.js => components/api-users/index-table.js} (68%) create mode 100644 src/api-umbrella/admin/app/components/api-users/record-form.js rename src/api-umbrella/admin/app/{views/apis/table.js => components/apis/index-table.js} (65%) create mode 100644 src/api-umbrella/admin/app/components/apis/record-form.js create mode 100644 src/api-umbrella/admin/app/components/fields-for.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/base-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/checkbox-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/checkboxes-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/field-wrapper.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/select-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/selectize-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/static-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/text-field.js create mode 100644 src/api-umbrella/admin/app/components/form-fields/textarea-field.js create mode 100644 src/api-umbrella/admin/app/components/website-backends/index-table.js rename src/api-umbrella/admin/app/{controllers/website-backends/form.js => components/website-backends/record-form.js} (80%) delete mode 100644 src/api-umbrella/admin/app/controllers/admin-groups/edit.js delete mode 100644 src/api-umbrella/admin/app/controllers/admin-groups/new.js delete mode 100644 src/api-umbrella/admin/app/controllers/admins/edit.js delete mode 100644 src/api-umbrella/admin/app/controllers/admins/index.js delete mode 100644 src/api-umbrella/admin/app/controllers/admins/new.js delete mode 100644 src/api-umbrella/admin/app/controllers/api-scopes/edit.js delete mode 100644 src/api-umbrella/admin/app/controllers/api-scopes/new.js delete mode 100644 src/api-umbrella/admin/app/controllers/api-users/edit.js delete mode 100644 src/api-umbrella/admin/app/controllers/api-users/form.js delete mode 100644 src/api-umbrella/admin/app/controllers/api-users/new.js delete mode 100644 src/api-umbrella/admin/app/controllers/apis/index.js delete mode 100644 src/api-umbrella/admin/app/controllers/website-backends/edit.js delete mode 100644 src/api-umbrella/admin/app/controllers/website-backends/new.js create mode 100644 src/api-umbrella/admin/app/helpers/format-date.js create mode 100644 src/api-umbrella/admin/app/helpers/html-safe.js create mode 100644 src/api-umbrella/admin/app/helpers/t.js delete mode 100644 src/api-umbrella/admin/app/initializers/easy-form.js create mode 100644 src/api-umbrella/admin/app/initializers/qtip.js create mode 100644 src/api-umbrella/admin/app/instance-initializers/jquery-ajax.js create mode 100644 src/api-umbrella/admin/app/mixins/save.js delete mode 100644 src/api-umbrella/admin/app/nonjs/common-validations.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/de.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/en.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/fi.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/fr.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/it.js.erb delete mode 100644 src/api-umbrella/admin/app/nonjs/locales/ru.js.erb create mode 100644 src/api-umbrella/admin/app/resolver.js create mode 100644 src/api-umbrella/admin/app/routes/login.js create mode 100644 src/api-umbrella/admin/app/serializers/api-user.js create mode 100644 src/api-umbrella/admin/app/serializers/api/settings.js create mode 100644 src/api-umbrella/admin/app/serializers/application.js delete mode 100644 src/api-umbrella/admin/app/templates/admin-groups/-form.hbs delete mode 100644 src/api-umbrella/admin/app/templates/admins/-form.hbs delete mode 100644 src/api-umbrella/admin/app/templates/api-scopes/-form.hbs delete mode 100644 src/api-umbrella/admin/app/templates/api-users/-form.hbs delete mode 100644 src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/admin-groups/index-table.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/admin-groups/record-form.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/admins/index-table.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/admins/record-form.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-scopes/index-table.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-scopes/record-form.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-settings/allowed-ips-fields.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-settings/allowed-referers-fields.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-settings/rate-limit-fields.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-users/index-table.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/api-users/record-form.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/apis/index-table.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/apis/record-form.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/fields-for.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/base-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/checkbox-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/checkboxes-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/field-wrapper.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/select-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/selectize-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/static-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/text-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/form-fields/textarea-field.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/website-backends/index-table.hbs create mode 100644 src/api-umbrella/admin/app/templates/components/website-backends/record-form.hbs delete mode 100644 src/api-umbrella/admin/app/templates/loading.hbs create mode 100644 src/api-umbrella/admin/app/templates/login.hbs delete mode 100644 src/api-umbrella/admin/app/templates/website-backends/-form.hbs create mode 100644 src/api-umbrella/admin/app/utils/data-tables-helpers.js delete mode 100644 src/api-umbrella/admin/app/views/api-users/edit.js delete mode 100644 src/api-umbrella/admin/app/views/apis/index.js delete mode 100644 src/api-umbrella/admin/app/views/boolean-radio-button.js delete mode 100644 src/api-umbrella/admin/app/views/checkbox-list-item.js delete mode 100644 src/api-umbrella/admin/app/views/checkbox-list.js delete mode 100644 src/api-umbrella/admin/app/views/loading-overlay.js rename src/api-umbrella/admin/{app/views => old-views}/.gitkeep (100%) rename src/api-umbrella/admin/{app/views => old-views}/apis/server-form.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/config/publish-record.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/config/publish.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/hide-modal.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/drilldown-chart.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/drilldown-table.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/facet-table.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/interval-chart.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/logs-table.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/logs.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/map-geo.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/map-table.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/query-form.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/stats/users-table.js (100%) rename src/api-umbrella/admin/{app/views => old-views}/website-backends/table.js (100%) create mode 100644 src/api-umbrella/admin/testem.js create mode 100644 src/api-umbrella/admin/tests/.eslintrc.js delete mode 100644 src/api-umbrella/admin/tests/.jshintrc create mode 100644 src/api-umbrella/admin/tests/integration/components/admin-groups/index-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/admin-groups/record-form-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/admins/index-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/admins/record-form-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-scopes/index-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-scopes/record-form-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-settings/allowed-ips-fields-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-settings/allowed-referers-fields-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-settings/rate-limit-fields-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-users/index-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/api-users/record-form-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/apis-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/apis/index-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/apis/record-form-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/fields-for-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/base-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/checkbox-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/checkboxes-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/field-wrapper-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/select-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/selectize-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/static-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/text-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/form-fields/textarea-field-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/website-backends/index-table-test.js create mode 100644 src/api-umbrella/admin/tests/integration/components/website-backends/record-form-test.js create mode 100644 src/api-umbrella/admin/tests/unit/adapters/application-test.js create mode 100644 src/api-umbrella/admin/tests/unit/helpers/format-date-test.js create mode 100644 src/api-umbrella/admin/tests/unit/helpers/html-safe-test.js create mode 100644 src/api-umbrella/admin/tests/unit/helpers/t-test.js create mode 100644 src/api-umbrella/admin/tests/unit/instance-initializers/jquery-ajax-test.js create mode 100644 src/api-umbrella/admin/tests/unit/mixins/save-test.js create mode 100644 src/api-umbrella/admin/tests/unit/routes/login-test.js create mode 100644 src/api-umbrella/admin/tests/unit/serializers/application-test.js create mode 100644 src/api-umbrella/admin/tests/unit/utils/data-tables-helpers-test.js delete mode 100644 src/api-umbrella/admin/vendor/datatables-plugins/dataTables.bootstrap.css delete mode 100644 src/api-umbrella/admin/vendor/datatables-plugins/dataTables.bootstrap.js delete mode 100644 src/api-umbrella/admin/vendor/ember-easyForm.js delete mode 100644 src/api-umbrella/admin/vendor/ember-model/ember-model.js delete mode 100644 src/api-umbrella/admin/vendor/ember-model/ember-model.prod.js delete mode 100644 src/api-umbrella/admin/vendor/ember-validations.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/da.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/de.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/en.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/es.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/fr.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/it.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/nl.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/pl.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/pt-BR.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/i18n/ro.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.css delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.min.css delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.min.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.standalone.js delete mode 100644 src/api-umbrella/admin/vendor/jQuery-QueryBuilder/query-builder.standalone.min.js delete mode 100644 src/api-umbrella/admin/vendor/jquery.blockUI.js delete mode 100644 src/api-umbrella/admin/vendor/jquery.slugify.js delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin.js delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/de.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/en.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/es-419.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/fi.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/fr.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/it.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/locales/ru.js.erb delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/routes/index_route.js create mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin/server_side_loader.js delete mode 100644 src/api-umbrella/web-app/app/assets/javascripts/admin_test.js delete mode 100644 src/api-umbrella/web-app/app/assets/stylesheets/admin.css.scss delete mode 100644 src/api-umbrella/web-app/app/assets/stylesheets/admin_test.css.scss diff --git a/src/api-umbrella/admin/.eslintrc.js b/src/api-umbrella/admin/.eslintrc.js new file mode 100644 index 000000000..aa80e3cb4 --- /dev/null +++ b/src/api-umbrella/admin/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + extends: './node_modules/ember-cli-eslint/coding-standard/ember-application.js', + rules: { + 'comma-dangle': ['error', 'always-multiline'], + 'no-var': 'error', + 'object-shorthand': ['error', 'methods'], + 'no-duplicate-imports': 'error', + }, + globals: { + '$': true, + 'CommonValidations': true, + 'I18n': true, + 'PNotify': true, + '_': true, + 'bootbox': true, + 'inflection': true, + 'moment': true, + }, +}; diff --git a/src/api-umbrella/admin/.jshintrc b/src/api-umbrella/admin/.jshintrc index e404fc23b..08096effa 100644 --- a/src/api-umbrella/admin/.jshintrc +++ b/src/api-umbrella/admin/.jshintrc @@ -2,25 +2,7 @@ "predef": [ "document", "window", - "-Promise", - "_", - "$", - "ace", - "bootbox", - "CommonValidations", - "Ember", - "google", - "ic", - "inflection", - "JsDiff", - "jstz", - "jQuery", - "marked", - "moment", - "numeral", - "PNotify", - "polyglot", - "Spinner" + "-Promise" ], "browser": true, "boss": true, diff --git a/src/api-umbrella/admin/.travis.yml b/src/api-umbrella/admin/.travis.yml index 66dd10769..64533bea8 100644 --- a/src/api-umbrella/admin/.travis.yml +++ b/src/api-umbrella/admin/.travis.yml @@ -1,7 +1,7 @@ --- language: node_js node_js: - - "0.12" + - "4" sudo: false @@ -10,12 +10,11 @@ cache: - node_modules before_install: - - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH - - "npm config set spin false" - - "npm install -g npm@^2" + - npm config set spin false + - npm install -g bower + - npm install phantomjs-prebuilt install: - - npm install -g bower - npm install - bower install diff --git a/src/api-umbrella/admin/README.md b/src/api-umbrella/admin/README.md index 65a9a34fe..9ddfe3a57 100644 --- a/src/api-umbrella/admin/README.md +++ b/src/api-umbrella/admin/README.md @@ -10,7 +10,7 @@ You will need the following things properly installed on your computer. * [Git](http://git-scm.com/) * [Node.js](http://nodejs.org/) (with NPM) * [Bower](http://bower.io/) -* [Ember CLI](http://www.ember-cli.com/) +* [Ember CLI](http://ember-cli.com/) * [PhantomJS](http://phantomjs.org/) ## Installation @@ -46,7 +46,7 @@ Specify what it takes to deploy your app. ## Further Reading / Useful Links * [ember.js](http://emberjs.com/) -* [ember-cli](http://www.ember-cli.com/) +* [ember-cli](http://ember-cli.com/) * Development Browser Extensions * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) diff --git a/src/api-umbrella/admin/app/adapters/application.js b/src/api-umbrella/admin/app/adapters/application.js new file mode 100644 index 000000000..89cb0d05c --- /dev/null +++ b/src/api-umbrella/admin/app/adapters/application.js @@ -0,0 +1,16 @@ +import RESTAdapter from 'ember-data/adapters/rest'; + +export default RESTAdapter.extend({ + buildURL(modelName, id, snapshot, requestType, query) { + if(snapshot && snapshot.type && snapshot.type.urlRoot) { + let url = snapshot.type.urlRoot; + if(id) { + url += '/' + encodeURIComponent(id); + } + + return url; + } else { + return this._super(...arguments); + } + }, +}); diff --git a/src/api-umbrella/admin/app/app.js b/src/api-umbrella/admin/app/app.js index d50524c52..ad66c9314 100644 --- a/src/api-umbrella/admin/app/app.js +++ b/src/api-umbrella/admin/app/app.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -import Resolver from 'ember/resolver'; -import loadInitializers from 'ember/load-initializers'; +import Resolver from './resolver'; +import loadInitializers from 'ember-load-initializers'; import config from './config/environment'; let App; @@ -10,159 +10,9 @@ Ember.MODEL_FACTORY_INJECTIONS = true; App = Ember.Application.extend({ modulePrefix: config.modulePrefix, podModulePrefix: config.podModulePrefix, - Resolver + Resolver, }); loadInitializers(App, config.modulePrefix); -//= require_self -//= require ./common_validations -//= require_tree ./models -//= require ./controllers/apis/nested_form_controller -//= require ./controllers/apis/sortable_controller -//= require_tree ./components -//= require_tree ./controllers -//= require_tree ./views -//= require_tree ./helpers -//= require_tree ./templates -//= require ./router -//= require_tree ./routes - -//Ember.LOG_BINDINGS = true - -(function() { - var versionParts = Ember.VERSION.split('.'); - var major = parseInt(versionParts[0], 10); - var minor = parseInt(versionParts[1], 10); - var patch = parseInt(versionParts[2], 10); - if(major > 1 || (major === 1 && (minor > 1 || patch > 2))) { - Ember.Logger.warn('WARNING: New Ember version detected. URL hash monkey patch possibly no longer needed or broken. Check for compatibility.'); - } - - var get = Ember.get, set = Ember.set; - - // Fix URL hash parsing across browsers. Because we're putting query - // parameters in the URL, we expect special characters which escape - // differently across browsers with location.hash. So this is a monkey patch - // to use location.href instead. - // https://github.com/emberjs/ember.js/issues/3000 - // https://github.com/emberjs/ember.js/issues/3263 - // - // All of this should be revisited once query-params lands, since this will - // probably clean this up: https://github.com/emberjs/ember.js/pull/3182 - Ember.HashLocation.reopen({ - getURL: function() { - var href = get(this, 'location').href; - - var hashIndex = href.indexOf('#'); - if (hashIndex === -1) { - return ''; - } else { - return href.substr(hashIndex + 1); - } - }, - - onUpdateURL: function(callback) { - var self = this; - var guid = Ember.guidFor(this); - - Ember.$(window).on('hashchange.ember-location-'+guid, function() { - Ember.run(function() { - var path = self.getURL(); - if (get(self, 'lastSetURL') === path) { return; } - - set(self, 'lastSetURL', null); - - callback(path); - }); - }); - }, - }); -})(); - -App.APIUmbrellaRESTAdapter = Ember.RESTAdapter.extend({ - ajaxSettings: function(url, method) { - return { - url: url, - type: method, - dataType: 'json', - headers: { - 'X-Api-Key': webAdminAjaxApiKey - } - }; - } -}); - -$.ajaxPrefilter(function(options) { - options.headers = options.headers || {}; - options.headers['X-Api-Key'] = webAdminAjaxApiKey; -}); - -// A mixin that provides the default ajax save behavior for our forms. -App.Save = Ember.Mixin.create({ - save: function(options) { - var button = $('#save_button'); - button.button('loading'); - - // Force dirty to force save (ember-model's dirty tracking fails to - // account for changes in nested, non-association objects: - // http://git.io/sbS1mg This is mainly for ApiSettings's errorTemplates - // and errorDataYamlStrings, but we've seen enough funkiness elsewhere, - // it seems worth disabling for now). - this.set('model.isDirty', true); - - this.get('model').save().then(_.bind(function() { - button.button('reset'); - new PNotify({ - type: 'success', - title: 'Saved', - text: (_.isFunction(options.message)) ? options.message(this.get('model')) : options.message, - }); - - this.transitionToRoute(options.transitionToRoute); - }, this), _.bind(function(response) { - // Set the errors from the server response on a "serverErrors" property - // for the error-messages component display. - try { - this.set('model.serverErrors', response.responseJSON.errors); - } catch(e) { - this.set('model.serverErrors', response.responseText); - } - - button.button('reset'); - $.scrollTo('#error_messages', { offset: -50, duration: 200 }); - }, this)); - }, -}); - -App.DataTablesHelpers = { - renderEscaped: function(value, type) { - if(type === 'display' && value) { - return _.escape(value); - } - - return value; - }, - - renderListEscaped: function(value, type) { - if(type === 'display' && value) { - if(_.isArray(value)) { - return _.map(value, function(v) { return _.escape(v); }).join('
'); - } else { - return _.escape(value); - } - } - - return value; - }, - - renderTime: function(value, type) { - if(type === 'display' && value && value !== '-') { - return moment(value).format('YYYY-MM-DD HH:mm:ss'); - } - - return value; - }, -}; - export default App; diff --git a/src/api-umbrella/admin/app/authenticators/devise-server-side.js b/src/api-umbrella/admin/app/authenticators/devise-server-side.js new file mode 100644 index 000000000..5ceb538af --- /dev/null +++ b/src/api-umbrella/admin/app/authenticators/devise-server-side.js @@ -0,0 +1,31 @@ +import Ember from 'ember'; +import Base from 'ember-simple-auth/authenticators/base'; + +export default Base.extend({ + ajax: Ember.inject.service(), + + restore(data) { + return this._validate(data) ? Ember.RSVP.Promise.resolve(data) : Ember.RSVP.Promise.reject(); + }, + + authenticate() { + return new Ember.RSVP.Promise(function(resolve, reject) { + return this.get('ajax').request('/admin/auth').then(function(data) { + if(this._validate(data)) { + Ember.run(null, resolve, data); + } else { + Ember.run(null, reject); + } + }.bind(this), function(xhr) { + Ember.run(null, reject); + }); + }.bind(this)); + }, + + invalidate(data) { + }, + + _validate(data) { + return (data && data.authenticated === true); + }, +}); diff --git a/src/api-umbrella/admin/app/authorizers/devise-server-side.js b/src/api-umbrella/admin/app/authorizers/devise-server-side.js new file mode 100644 index 000000000..8ba5fa2e0 --- /dev/null +++ b/src/api-umbrella/admin/app/authorizers/devise-server-side.js @@ -0,0 +1,7 @@ +import Base from 'ember-simple-auth/authorizers/base'; + +export default Base.extend({ + authorize(data, callback) { + callback(data.api_key, data.csrf_token); + }, +}); diff --git a/src/api-umbrella/admin/app/views/admin-groups/table.js b/src/api-umbrella/admin/app/components/admin-groups/index-table.js similarity index 66% rename from src/api-umbrella/admin/app/views/admin-groups/table.js rename to src/api-umbrella/admin/app/components/admin-groups/index-table.js index 4a2d960b6..9417540ac 100644 --- a/src/api-umbrella/admin/app/views/admin-groups/table.js +++ b/src/api-umbrella/admin/app/components/admin-groups/index-table.js @@ -1,13 +1,9 @@ -import App from '../../app'; import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', - - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - this.$().DataTable({ +export default Ember.Component.extend({ + didInsertElement() { + this.$().find('table').DataTable({ serverSide: true, ajax: '/api-umbrella/v1/admin_groups.json', pageLength: 50, @@ -19,7 +15,7 @@ export default Ember.View.extend({ defaultContent: '-', render: _.bind(function(name, type, data) { if(type === 'display' && name && name !== '-') { - var link = '#/admin_groups/' + data.id + '/edit'; + let link = '#/admin_groups/' + data.id + '/edit'; return '' + _.escape(name) + ''; } @@ -30,23 +26,23 @@ export default Ember.View.extend({ data: 'api_scope_display_names', title: 'API Scopes', orderable: false, - render: App.DataTablesHelpers.renderListEscaped, + render: DataTablesHelpers.renderListEscaped, }, { data: 'permission_display_names', title: 'Access', defaultContent: '-', orderable: false, - render: App.DataTablesHelpers.renderListEscaped, + render: DataTablesHelpers.renderListEscaped, }, { data: 'admin_usernames', title: 'Admins', defaultContent: '-', orderable: false, - render: App.DataTablesHelpers.renderListEscaped, - } - ] + render: DataTablesHelpers.renderListEscaped, + }, + ], }); }, }); diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/form.js b/src/api-umbrella/admin/app/components/admin-groups/record-form.js similarity index 55% rename from src/api-umbrella/admin/app/controllers/admin-groups/form.js rename to src/api-umbrella/admin/app/components/admin-groups/record-form.js index 831c9ebd6..728c05a14 100644 --- a/src/api-umbrella/admin/app/controllers/admin-groups/form.js +++ b/src/api-umbrella/admin/app/components/admin-groups/record-form.js @@ -1,24 +1,26 @@ -import App from '../../app'; import Ember from 'ember'; +import Save from 'api-umbrella-admin/mixins/save'; -export default Ember.ObjectController.extend(App.Save, { - apiScopeOptions: function() { - return Admin.ApiScope.find(); - }.property(), +export default Ember.Component.extend(Save, { + store: Ember.inject.service(), - permissionOptions: function() { - return Admin.AdminPermission.find(); - }.property(), + apiScopeOptions: Ember.computed(function() { + return this.get('store').findAll('api-scope'); + }), + + permissionOptions: Ember.computed(function() { + return this.get('store').findAll('admin-permission'); + }), actions: { - submit: function() { + submit() { this.save({ transitionToRoute: 'admin_groups', message: 'Successfully saved the admin group "' + _.escape(this.get('model.name')) + '"', }); }, - delete: function() { + delete() { bootbox.confirm('Are you sure you want to delete this admin group?', _.bind(function(result) { if(result) { this.get('model').deleteRecord(); diff --git a/src/api-umbrella/admin/app/views/admins/table.js b/src/api-umbrella/admin/app/components/admins/index-table.js similarity index 57% rename from src/api-umbrella/admin/app/views/admins/table.js rename to src/api-umbrella/admin/app/components/admins/index-table.js index cca5c71e4..4554a3e83 100644 --- a/src/api-umbrella/admin/app/views/admins/table.js +++ b/src/api-umbrella/admin/app/components/admins/index-table.js @@ -1,12 +1,11 @@ import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', +export default Ember.Component.extend({ + session: Ember.inject.service('session'), - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - var dataTable = this.$().DataTable({ + didInsertElement() { + let dataTable = this.$().find('table').DataTable({ serverSide: true, ajax: '/api-umbrella/v1/admins.json', pageLength: 50, @@ -19,7 +18,7 @@ export default Ember.View.extend({ defaultContent: '-', render: _.bind(function(email, type, data) { if(type === 'display' && email && email !== '-') { - var link = '#/admins/' + data.id + '/edit'; + let link = '#/admins/' + data.id + '/edit'; return '' + _.escape(email) + ''; } @@ -31,21 +30,21 @@ export default Ember.View.extend({ name: 'E-mail', title: 'E-mail', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'name', name: 'Name', title: 'Name', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'group_names', name: 'Groups', title: 'Groups', orderable: false, - render: Admin.DataTablesHelpers.renderListEscaped, + render: DataTablesHelpers.renderListEscaped, }, { data: 'last_sign_in_at', @@ -53,7 +52,7 @@ export default Ember.View.extend({ name: 'Last Signed In', title: 'Last Signed In', defaultContent: '-', - render: Admin.DataTablesHelpers.renderTime, + render: DataTablesHelpers.renderTime, }, { data: 'created_at', @@ -61,12 +60,25 @@ export default Ember.View.extend({ name: 'Created', title: 'Created', defaultContent: '-', - render: Admin.DataTablesHelpers.renderTime, - } - ] + render: DataTablesHelpers.renderTime, + }, + ], }); + dataTable.on('draw.dt', function() { - this.get('controller').send('paramsChange', dataTable.ajax.params()); + let params = dataTable.ajax.params(); + delete params.start; + delete params.length; + this.set('queryParams', params); }.bind(this)); }, + + downloadUrl: Ember.computed('queryParams', function() { + let params = this.get('queryParams'); + if(params) { + params = $.param(params); + } + + return '/api-umbrella/v1/admins.csv?api_key=' + this.get('session.data.authenticated.api_key') + '&' + params; + }), }); diff --git a/src/api-umbrella/admin/app/controllers/admins/form.js b/src/api-umbrella/admin/app/components/admins/record-form.js similarity index 53% rename from src/api-umbrella/admin/app/controllers/admins/form.js rename to src/api-umbrella/admin/app/components/admins/record-form.js index b6f172b87..20c967546 100644 --- a/src/api-umbrella/admin/app/controllers/admins/form.js +++ b/src/api-umbrella/admin/app/components/admins/record-form.js @@ -1,24 +1,27 @@ -import App from '../../app'; import Ember from 'ember'; +import Save from 'api-umbrella-admin/mixins/save'; -export default Ember.ObjectController.extend(App.Save, { - groupOptions: function() { - return Admin.AdminGroup.find(); - }.property(), +export default Ember.Component.extend(Save, { + session: Ember.inject.service(), + store: Ember.inject.service(), - currentAdmin: function() { - return currentAdmin; - }.property(), + groupOptions: Ember.computed(function() { + return this.get('store').findAll('admin-group'); + }), + + currentAdmin: Ember.computed(function() { + return this.get('session.data.authenticated.admin'); + }), actions: { - submit: function() { + submit() { this.save({ transitionToRoute: 'admins', message: 'Successfully saved the admin "' + _.escape(this.get('model.username')) + '"', }); }, - delete: function() { + delete() { bootbox.confirm('Are you sure you want to delete this admin?', _.bind(function(result) { if(result) { this.get('model').deleteRecord(); diff --git a/src/api-umbrella/admin/app/views/api-scopes/table.js b/src/api-umbrella/admin/app/components/api-scopes/index-table.js similarity index 65% rename from src/api-umbrella/admin/app/views/api-scopes/table.js rename to src/api-umbrella/admin/app/components/api-scopes/index-table.js index f21347623..278b9ed08 100644 --- a/src/api-umbrella/admin/app/views/api-scopes/table.js +++ b/src/api-umbrella/admin/app/components/api-scopes/index-table.js @@ -1,12 +1,9 @@ import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', - - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - this.$().DataTable({ +export default Ember.Component.extend({ + didInsertElement() { + this.$().find('table').DataTable({ serverSide: true, ajax: '/api-umbrella/v1/api_scopes.json', pageLength: 50, @@ -18,7 +15,7 @@ export default Ember.View.extend({ defaultContent: '-', render: _.bind(function(name, type, data) { if(type === 'display' && name && name !== '-') { - var link = '#/api_scopes/' + data.id + '/edit'; + let link = '#/api_scopes/' + data.id + '/edit'; return '' + _.escape(name) + ''; } @@ -29,15 +26,15 @@ export default Ember.View.extend({ data: 'host', title: 'Host', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'path_prefix', title: 'Path Prefix', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, - } - ] + render: DataTablesHelpers.renderEscaped, + }, + ], }); }, }); diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/form.js b/src/api-umbrella/admin/app/components/api-scopes/record-form.js similarity index 77% rename from src/api-umbrella/admin/app/controllers/api-scopes/form.js rename to src/api-umbrella/admin/app/components/api-scopes/record-form.js index 0486c65b0..076c3637b 100644 --- a/src/api-umbrella/admin/app/controllers/api-scopes/form.js +++ b/src/api-umbrella/admin/app/components/api-scopes/record-form.js @@ -1,16 +1,16 @@ -import App from '../../app'; import Ember from 'ember'; +import Save from 'api-umbrella-admin/mixins/save'; -export default Ember.ObjectController.extend(App.Save, { +export default Ember.Component.extend(Save, { actions: { - submit: function() { + submit() { this.save({ transitionToRoute: 'api_scopes', message: 'Successfully saved the API scope "' + _.escape(this.get('model.name')) + '"', }); }, - delete: function() { + delete() { bootbox.confirm('Are you sure you want to delete this API scope?', _.bind(function(result) { if(result) { this.get('model').deleteRecord(); diff --git a/src/api-umbrella/admin/app/components/api-settings-fields.js b/src/api-umbrella/admin/app/components/api-settings-fields.js index e5092da31..6c8eeea74 100644 --- a/src/api-umbrella/admin/app/components/api-settings-fields.js +++ b/src/api-umbrella/admin/app/components/api-settings-fields.js @@ -2,30 +2,30 @@ import Ember from 'ember'; export default Ember.Component.extend({ requireHttpsOptions: [ - { id: null, name: polyglot.t('admin.api.settings.require_https_options.inherit') }, - { id: 'required_return_error', name: polyglot.t('admin.api.settings.require_https_options.required_return_error') }, - { id: 'required_return_redirect', name: polyglot.t('admin.api.settings.require_https_options.required_return_redirect') }, - { id: 'transition_return_error', name: polyglot.t('admin.api.settings.require_https_options.transition_return_error') }, - { id: 'transition_return_redirect', name: polyglot.t('admin.api.settings.require_https_options.transition_return_redirect') }, - { id: 'optional', name: polyglot.t('admin.api.settings.require_https_options.optional') }, + { id: null, name: I18n.t('admin.api.settings.require_https_options.inherit') }, + { id: 'required_return_error', name: I18n.t('admin.api.settings.require_https_options.required_return_error') }, + { id: 'required_return_redirect', name: I18n.t('admin.api.settings.require_https_options.required_return_redirect') }, + { id: 'transition_return_error', name: I18n.t('admin.api.settings.require_https_options.transition_return_error') }, + { id: 'transition_return_redirect', name: I18n.t('admin.api.settings.require_https_options.transition_return_redirect') }, + { id: 'optional', name: I18n.t('admin.api.settings.require_https_options.optional') }, ], disableApiKeyOptions: [ - { id: null, name: polyglot.t('admin.api.settings.disable_api_key_options.inherit') }, - { id: false, name: polyglot.t('admin.api.settings.disable_api_key_options.required') }, - { id: true, name: polyglot.t('admin.api.settings.disable_api_key_options.disabled') }, + { id: null, name: I18n.t('admin.api.settings.disable_api_key_options.inherit') }, + { id: false, name: I18n.t('admin.api.settings.disable_api_key_options.required') }, + { id: true, name: I18n.t('admin.api.settings.disable_api_key_options.disabled') }, ], apiKeyVerificationLevelOptions: [ - { id: null, name: polyglot.t('admin.api.settings.api_key_verification_level_options.inherit') }, - { id: 'none', name: polyglot.t('admin.api.settings.api_key_verification_level_options.none') }, - { id: 'transition_email', name: polyglot.t('admin.api.settings.api_key_verification_level_options.transition_email') }, - { id: 'required_email', name: polyglot.t('admin.api.settings.api_key_verification_level_options.required_email') }, + { id: null, name: I18n.t('admin.api.settings.api_key_verification_level_options.inherit') }, + { id: 'none', name: I18n.t('admin.api.settings.api_key_verification_level_options.none') }, + { id: 'transition_email', name: I18n.t('admin.api.settings.api_key_verification_level_options.transition_email') }, + { id: 'required_email', name: I18n.t('admin.api.settings.api_key_verification_level_options.required_email') }, ], - roleOptions: function() { - return Admin.ApiUserRole.find(); + roleOptions: Ember.computed(function() { + return this.get('store').findAll('api-user-role'); // Don't cache this property, so we can rely on refreshing the underlying // model to refresh the options. - }.property().cacheable(false), + }), }); diff --git a/src/api-umbrella/admin/app/components/api-settings/allowed-ips-fields.js b/src/api-umbrella/admin/app/components/api-settings/allowed-ips-fields.js new file mode 100644 index 000000000..926b61300 --- /dev/null +++ b/src/api-umbrella/admin/app/components/api-settings/allowed-ips-fields.js @@ -0,0 +1,4 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/api-settings/allowed-referers-fields.js b/src/api-umbrella/admin/app/components/api-settings/allowed-referers-fields.js new file mode 100644 index 000000000..926b61300 --- /dev/null +++ b/src/api-umbrella/admin/app/components/api-settings/allowed-referers-fields.js @@ -0,0 +1,4 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ +}); diff --git a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js b/src/api-umbrella/admin/app/components/api-settings/rate-limit-fields.js similarity index 64% rename from src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js rename to src/api-umbrella/admin/app/components/api-settings/rate-limit-fields.js index bd419e8f8..9fd8e7f73 100644 --- a/src/api-umbrella/admin/app/controllers/apis/settings-rate-limit-fields.js +++ b/src/api-umbrella/admin/app/components/api-settings/rate-limit-fields.js @@ -1,6 +1,8 @@ import Ember from 'ember'; -export default Ember.ObjectController.extend({ +export default Ember.Component.extend({ + store: Ember.inject.service(), + rateLimitModeOptions: [ { id: null, name: 'Default rate limits' }, { id: 'custom', name: 'Custom rate limits' }, @@ -29,17 +31,29 @@ export default Ember.ObjectController.extend({ { id: 'api_key_only', name: 'API Key Only - IP based rate limits are ignored (only API key limits are applied)' }, ], - uniqueSettingsId: function() { + uniqueSettingsId: Ember.computed(function() { return _.uniqueId('api_settings_'); - }.property(), + }), actions: { - addRateLimit: function() { - this.get('model.rateLimits').create(); + primaryRateLimitChange(selectedRateLimit) { + let rateLimits = this.get('model.rateLimits'); + rateLimits.forEach(function(rateLimit) { + if(rateLimit === selectedRateLimit) { + rateLimit.set('responseHeaders', true); + } else { + rateLimit.set('responseHeaders', false); + } + }); + }, + + addRateLimit() { + let collection = this.get('model.rateLimits'); + collection.pushObject(this.get('store').createRecord('api/rate-limit')); }, - deleteRateLimit: function(rateLimit) { - var collection = this.get('model.rateLimits'); + deleteRateLimit(rateLimit) { + let collection = this.get('model.rateLimits'); bootbox.confirm('Are you sure you want to remove this rate limit?', function(result) { if(result) { collection.removeObject(rateLimit); diff --git a/src/api-umbrella/admin/app/views/api-users/table.js b/src/api-umbrella/admin/app/components/api-users/index-table.js similarity index 68% rename from src/api-umbrella/admin/app/views/api-users/table.js rename to src/api-umbrella/admin/app/components/api-users/index-table.js index abdbd4433..8e7791d61 100644 --- a/src/api-umbrella/admin/app/views/api-users/table.js +++ b/src/api-umbrella/admin/app/components/api-users/index-table.js @@ -1,12 +1,9 @@ import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', - - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - this.$().DataTable({ +export default Ember.Component.extend({ + didInsertElement() { + this.$().find('table').DataTable({ serverSide: true, ajax: '/api-umbrella/v1/users.json', pageLength: 50, @@ -18,7 +15,7 @@ export default Ember.View.extend({ defaultContent: '-', render: _.bind(function(email, type, data) { if(type === 'display' && email && email !== '-') { - var link = '#/api_users/' + data.id + '/edit'; + let link = '#/api_users/' + data.id + '/edit'; return '' + _.escape(email) + ''; } @@ -29,41 +26,41 @@ export default Ember.View.extend({ data: 'first_name', title: 'First Name', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'last_name', title: 'Last Name', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'use_description', title: 'Purpose', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'created_at', type: 'date', title: 'Created', defaultContent: '-', - render: Admin.DataTablesHelpers.renderTime, + render: DataTablesHelpers.renderTime, }, { data: 'registration_source', title: 'Registration Source', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'api_key_preview', title: 'API Key', defaultContent: '-', orderable: false, - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, - ] + ], }); }, }); diff --git a/src/api-umbrella/admin/app/components/api-users/record-form.js b/src/api-umbrella/admin/app/components/api-users/record-form.js new file mode 100644 index 000000000..0d9764063 --- /dev/null +++ b/src/api-umbrella/admin/app/components/api-users/record-form.js @@ -0,0 +1,51 @@ +import Ember from 'ember'; +import Save from 'api-umbrella-admin/mixins/save'; + +export default Ember.Component.extend(Save, { + store: Ember.inject.service(), + + throttleByIpOptions: [ + { id: false, name: 'Rate limit by API key' }, + { id: true, name: 'Rate limit by IP address' }, + ], + + enabledOptions: [ + { id: true, name: 'Enabled' }, + { id: false, name: 'Disabled' }, + ], + + roleOptions: Ember.computed(function() { + return this.get('store').findAll('api-user-role'); + }), + + actions: { + apiKeyRevealToggle() { + let $key = this.$().find('.api-key'); + let $toggle = this.$().find('.api-key-reveal-toggle'); + + if($key.data('revealed') === 'true') { + $key.text($key.data('api-key-preview')); + $key.data('revealed', 'false'); + $toggle.text(I18n.t('admin.reveal_action')); + } else { + $key.text($key.data('api-key')); + $key.data('revealed', 'true'); + $toggle.text(I18n.t('admin.hide_action')); + } + }, + + submit() { + this.save({ + transitionToRoute: 'api_users', + message(model) { + let message = 'Successfully saved the user "' + _.escape(model.get('email')) + '"'; + if(model.get('apiKey')) { + message += '
API Key: ' + _.escape(model.get('apiKey')) + ''; + } + + return message; + }, + }); + }, + }, +}); diff --git a/src/api-umbrella/admin/app/views/apis/table.js b/src/api-umbrella/admin/app/components/apis/index-table.js similarity index 65% rename from src/api-umbrella/admin/app/views/apis/table.js rename to src/api-umbrella/admin/app/components/apis/index-table.js index 5a5c0c805..30c6464c2 100644 --- a/src/api-umbrella/admin/app/views/apis/table.js +++ b/src/api-umbrella/admin/app/components/apis/index-table.js @@ -1,24 +1,15 @@ import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], +export default Ember.Component.extend({ + reorderActive: false, - init: function() { - this._super(); - - // We're observing the controller, which is a computed property on views. - // Force fetching it so the observers fire: - // http://emberjs.com/guides/object-model/observers/#toc_unconsumed-computed-properties-do-not-trigger-observers - this.get('controller'); - }, - - didInsertElement: function() { - this.set('table', this.$().DataTable({ + didInsertElement() { + this.set('table', this.$().find('table').DataTable({ serverSide: true, ajax: '/api-umbrella/v1/apis.json', pageLength: 50, - rowCallback: function(row, data) { + rowCallback(row, data) { $(row).data('id', data.id); }, order: [[0, 'asc']], @@ -29,7 +20,7 @@ export default Ember.View.extend({ defaultContent: '-', render: _.bind(function(name, type, data) { if(type === 'display' && name && name !== '-') { - var link = '#/apis/' + data.id + '/edit'; + let link = '#/apis/' + data.id + '/edit'; return '' + _.escape(name) + ''; } @@ -40,30 +31,30 @@ export default Ember.View.extend({ data: 'frontend_host', title: 'Host', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'frontend_prefixes', title: 'Prefixes', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'sort_order', title: 'Matching Order', defaultContent: '-', width: 130, - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: null, className: 'reorder-handle', orderable: false, - render: function() { + render() { return ''; }, }, - ] + ], })); this.get('table') @@ -71,9 +62,9 @@ export default Ember.View.extend({ // Disable reordering if the user tries to filter the table by anything // (otherwise, our reordering logic won't work, since it relies on the // neighboring rows). - if(this.get('controller.reorderActive')) { + if(this.get('reorderActive')) { if(settings.oPreviousSearch && settings.oPreviousSearch.sSearch) { - this.set('controller.reorderActive', false); + this.set('reorderActive', false); } } }, this)) @@ -81,9 +72,9 @@ export default Ember.View.extend({ // Disable reordering if the user tries to sort the table by anything // other than the sort order (otherwise, our reordering logic won't // work, since it relies on the neighboring rows). - if(this.get('controller.reorderActive')) { + if(this.get('reorderActive')) { if(settings.aaSorting && !_.isEqual(settings.aaSorting, [[3, 'asc']])) { - this.set('controller.reorderActive', false); + this.set('reorderActive', false); } } }, this)); @@ -91,16 +82,16 @@ export default Ember.View.extend({ this.$().find('tbody').sortable({ handle: '.reorder-handle', placeholder: 'reorder-placeholder', - helper: function(event, ui) { + helper(event, ui) { ui.children().each(function() { $(this).width($(this).width()); }); return ui; }, stop: _.bind(function(event, ui) { - var row = $(ui.item); - var previousRow = row.prev('tbody tr'); - var moveAfterId = null; + let row = $(ui.item); + let previousRow = row.prev('tbody tr'); + let moveAfterId = null; if(previousRow.length > 0) { moveAfterId = $(previousRow[0]).data('id'); } @@ -111,19 +102,30 @@ export default Ember.View.extend({ }, handleReorderChange: function() { - if(this.get('controller.reorderActive')) { - this.$().addClass('reorder-active'); + if(this.get('reorderActive')) { + this.$().find('table').addClass('reorder-active'); this.get('table') .order([[3, 'asc']]) .search('') .draw(); } else { - this.$().removeClass('reorder-active'); + this.$().find('table').removeClass('reorder-active'); } - }.observes('controller.reorderActive'), - saveReorder: function(id, moveAfterId) { - this.$().dataTable().fnProcessingIndicator(true); + let $container = this.$(); + if($container) { + let $buttonText = this.$().find('.reorder-button-text'); + if(this.get('reorderActive')) { + $buttonText.data('originalText', $buttonText.text()); + $buttonText.text('Done'); + } else { + $buttonText.text($buttonText.data('originalText')); + } + } + }.observes('reorderActive'), + + saveReorder(id, moveAfterId) { + this.get('table').fnProcessingIndicator(true); $.ajax({ url: '/api-umbrella/v1/apis/' + id + '/move_after.json', type: 'PUT', @@ -135,4 +137,10 @@ export default Ember.View.extend({ this.get('table').draw(); }, this)); }, + + actions: { + toggleReorderApis() { + this.set('reorderActive', !this.get('reorderActive')); + }, + }, }); diff --git a/src/api-umbrella/admin/app/components/apis/record-form.js b/src/api-umbrella/admin/app/components/apis/record-form.js new file mode 100644 index 000000000..926b61300 --- /dev/null +++ b/src/api-umbrella/admin/app/components/apis/record-form.js @@ -0,0 +1,4 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/error-messages.js b/src/api-umbrella/admin/app/components/error-messages.js index 746e828da..c70739fa0 100644 --- a/src/api-umbrella/admin/app/components/error-messages.js +++ b/src/api-umbrella/admin/app/components/error-messages.js @@ -1,19 +1,43 @@ import Ember from 'ember'; export default Ember.Component.extend({ - messages: function() { - var messages = []; + messages: Ember.computed('model.clientErrors', 'model.serverErrors', function() { + let messages = []; - var errors = _.extend({}, this.get('model.clientErrors')); + let errors = {}; + let clientErrors = this.get('model.clientErrors'); + if(clientErrors) { + if(_.isArray(clientErrors)) { + _.each(clientErrors, function(clientError) { + let field = 'base'; + let message = clientError; + if(_.isObject(clientError)) { + if(clientError.get('attribute')) { + field = clientError.get('attribute'); + } + + message = clientError.get('message'); + } + + if(!errors[field]) { + errors[field] = []; + } - var serverErrors = this.get('model.serverErrors'); + errors[field].push(message); + }); + } else { + errors = _.merge(errors, clientErrors); + } + } + + let serverErrors = this.get('model.serverErrors'); if(serverErrors) { if(_.isString(serverErrors)) { messages.push(serverErrors); } else if(_.isArray(serverErrors)) { _.each(serverErrors, function(serverError) { - var field = 'base'; - var message = serverError; + let field = 'base'; + let message = serverError; if(_.isObject(serverError)) { if(serverError.field) { field = serverError.field; @@ -35,7 +59,7 @@ export default Ember.Component.extend({ _.forOwn(errors, function(attrErrors, attr) { _.each(attrErrors, function(attrError) { - var message = ''; + let message = ''; if(attr !== 'base') { message += inflection.titleize(inflection.underscore(attr)) + ': '; } @@ -46,5 +70,9 @@ export default Ember.Component.extend({ }); return messages; - }.property('model.clientErrors', 'model.serverErrors'), + }), + + hasErrors: Ember.computed('messages', function() { + return (this.get('messages').length > 0); + }), }); diff --git a/src/api-umbrella/admin/app/components/fields-for.js b/src/api-umbrella/admin/app/components/fields-for.js new file mode 100644 index 000000000..926b61300 --- /dev/null +++ b/src/api-umbrella/admin/app/components/fields-for.js @@ -0,0 +1,4 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/base-field.js b/src/api-umbrella/admin/app/components/form-fields/base-field.js new file mode 100644 index 000000000..36f57f43c --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/base-field.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + inputId: Ember.computed('elementId', 'fieldName', function() { + return this.get('elementId') + '-' + this.get('fieldName'); + }), +}).reopenClass({ + positionalParams: ['fieldName'], +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/checkbox-field.js b/src/api-umbrella/admin/app/components/form-fields/checkbox-field.js new file mode 100644 index 000000000..16a921a76 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/checkbox-field.js @@ -0,0 +1,4 @@ +import BaseField from './base-field'; + +export default BaseField.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/checkboxes-field.js b/src/api-umbrella/admin/app/components/form-fields/checkboxes-field.js new file mode 100644 index 000000000..16a921a76 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/checkboxes-field.js @@ -0,0 +1,4 @@ +import BaseField from './base-field'; + +export default BaseField.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/field-wrapper.js b/src/api-umbrella/admin/app/components/form-fields/field-wrapper.js new file mode 100644 index 000000000..2dc507a49 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/field-wrapper.js @@ -0,0 +1,22 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + fieldNameDidChange: Ember.on('init', Ember.observer('fieldName', function() { + let fieldName = this.get('fieldName'); + let fieldValidations = 'model.validations.attrs.' + fieldName; + Ember.mixin(this, { + fieldErrorMessages: Ember.computed.reads(fieldValidations + '.messages'), + fieldHasErrors: Ember.computed(fieldValidations + '.isValid', function() { + return (this.get(fieldValidations + '.isValid') === false); + }), + }); + })), + + wrapperErrorClass: Ember.computed('fieldHasErrors', function() { + if(this.get('fieldHasErrors')) { + return 'has-error has-feedback'; + } else { + return ''; + } + }), +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/select-field.js b/src/api-umbrella/admin/app/components/form-fields/select-field.js new file mode 100644 index 000000000..16a921a76 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/select-field.js @@ -0,0 +1,4 @@ +import BaseField from './base-field'; + +export default BaseField.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/selectize-field.js b/src/api-umbrella/admin/app/components/form-fields/selectize-field.js new file mode 100644 index 000000000..7c1b4d461 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/selectize-field.js @@ -0,0 +1,99 @@ +import BaseField from './base-field'; +import Ember from 'ember'; + +export default BaseField.extend({ + optionValuePath: 'id', + optionLabelPath: 'id', + defaultOptions: [], + + init() { + this._super(); + this.set('selectizeTextInputId', this.get('elementId') + '_selectize_text_input'); + this.set('overrideForElementId', this.get('selectizeTextInputId')); + }, + + didInsertElement() { + this._super(); + + this.$input = this.$().find('#' + this.get('inputId')).selectize({ + plugins: ['restore_on_backspace', 'remove_button'], + delimiter: ',', + options: this.get('defaultOptions'), + valueField: 'id', + labelField: 'label', + searchField: 'label', + sortField: 'label', + onChange: _.bind(this.handleSelectizeChange, this), + create: true, + + // Add to body so it doesn't get clipped by parent div containers. + dropdownParent: 'body', + }); + + this.selectize = this.$input[0].selectize; + this.selectize.$control_input.attr('id', this.get('selectizeTextInputId')); + this.selectize.$control_input.attr('data-raw-input-id', this.get('elementId')); + + let controlId = this.get('elementId') + '_selectize_control'; + this.selectize.$control.attr('id', controlId); + this.selectize.$control_input.attr('data-selectize-control-id', controlId); + }, + + defaultOptionsDidChange: Ember.on('init', Ember.observer('options.@each', function() { + this.set('defaultOptions', this.get('options').map(_.bind(function(item) { + return { + id: item.get(this.get('optionValuePath')), + label: item.get(this.get('optionLabelPath')), + }; + }, this))); + + if(this.selectize) { + this.get('defaultOptions').forEach(_.bind(function(option) { + this.selectize.addOption(option); + }, this)); + + this.selectize.refreshOptions(false); + } + })), + + // Sync the selectize input with the value binding if the value changes + // externally. + valueDidChange: Ember.on('init', Ember.observer('value', function() { + if(this.selectize) { + let valueString = this.get('value'); + if(valueString !== this.selectize.getValue()) { + let values = valueString; + if(values) { + values = _.uniq(values.split(',')); + + // Ensure the selected value is available as an option in the menu. + // This takes into account the fact that the default options may not + // be loaded yet, or they may not contain this specific option. + for(let i = 0; i < values.length; i++) { + let option = { + id: values[i], + label: values[i], + }; + + this.selectize.addOption(option); + } + + this.selectize.refreshOptions(false); + } + + this.selectize.setValue(values); + } + } + })), + + // Update the value binding when the selectize input changes. + handleSelectizeChange(value) { + this.set('value', value); + }, + + willDestroyElement() { + if(this.selectize) { + this.selectize.destroy(); + } + }, +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/static-field.js b/src/api-umbrella/admin/app/components/form-fields/static-field.js new file mode 100644 index 000000000..16a921a76 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/static-field.js @@ -0,0 +1,4 @@ +import BaseField from './base-field'; + +export default BaseField.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/text-field.js b/src/api-umbrella/admin/app/components/form-fields/text-field.js new file mode 100644 index 000000000..16a921a76 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/text-field.js @@ -0,0 +1,4 @@ +import BaseField from './base-field'; + +export default BaseField.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/form-fields/textarea-field.js b/src/api-umbrella/admin/app/components/form-fields/textarea-field.js new file mode 100644 index 000000000..16a921a76 --- /dev/null +++ b/src/api-umbrella/admin/app/components/form-fields/textarea-field.js @@ -0,0 +1,4 @@ +import BaseField from './base-field'; + +export default BaseField.extend({ +}); diff --git a/src/api-umbrella/admin/app/components/website-backends/index-table.js b/src/api-umbrella/admin/app/components/website-backends/index-table.js new file mode 100644 index 000000000..88fced467 --- /dev/null +++ b/src/api-umbrella/admin/app/components/website-backends/index-table.js @@ -0,0 +1,30 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + didInsertElement() { + this.set('table', this.$().find('table').DataTable({ + serverSide: true, + ajax: '/api-umbrella/v1/website_backends.json', + pageLength: 50, + rowCallback(row, data) { + $(row).data('id', data.id); + }, + order: [[0, 'asc']], + columns: [ + { + data: 'frontend_host', + title: 'Host', + defaultContent: '-', + render: _.bind(function(name, type, data) { + if(type === 'display' && name && name !== '-') { + let link = '#/website_backends/' + data.id + '/edit'; + return '' + _.escape(name) + ''; + } + + return name; + }, this), + }, + ], + })); + }, +}); diff --git a/src/api-umbrella/admin/app/controllers/website-backends/form.js b/src/api-umbrella/admin/app/components/website-backends/record-form.js similarity index 80% rename from src/api-umbrella/admin/app/controllers/website-backends/form.js rename to src/api-umbrella/admin/app/components/website-backends/record-form.js index 5d47536c1..371bb387d 100644 --- a/src/api-umbrella/admin/app/controllers/website-backends/form.js +++ b/src/api-umbrella/admin/app/components/website-backends/record-form.js @@ -1,15 +1,15 @@ -import App from '../../app'; import Ember from 'ember'; +import Save from 'api-umbrella-admin/mixins/save'; -export default Ember.ObjectController.extend(App.Save, { +export default Ember.Component.extend(Save, { backendProtocolOptions: [ { id: 'http', name: 'http' }, { id: 'https', name: 'https' }, ], changeDefaultPort: function() { - var protocol = this.get('model.backendProtocol'); - var port = parseInt(this.get('model.serverPort'), 10); + let protocol = this.get('model.backendProtocol'); + let port = parseInt(this.get('model.serverPort'), 10); if(protocol === 'https') { if(!port || port === 80) { this.set('model.serverPort', 443); @@ -22,14 +22,14 @@ export default Ember.ObjectController.extend(App.Save, { }.observes('model.backendProtocol'), actions: { - submit: function() { + submit() { this.save({ transitionToRoute: 'website_backends', message: 'Successfully saved the "' + _.escape(this.get('model.frontendHost')) + '" website backend
Note: Your changes are not yet live. Publish Changes to send your updates live.', }); }, - delete: function() { + delete() { bootbox.confirm('Are you sure you want to delete this website backend?', _.bind(function(result) { if(result) { this.get('model').deleteRecord(); diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/edit.js b/src/api-umbrella/admin/app/controllers/admin-groups/edit.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/admin-groups/edit.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/admin-groups/new.js b/src/api-umbrella/admin/app/controllers/admin-groups/new.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/admin-groups/new.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/admins/edit.js b/src/api-umbrella/admin/app/controllers/admins/edit.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/admins/edit.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/admins/index.js b/src/api-umbrella/admin/app/controllers/admins/index.js deleted file mode 100644 index 23641a355..000000000 --- a/src/api-umbrella/admin/app/controllers/admins/index.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; - -export default Ember.ObjectController.extend({ - queryParams: null, - - downloadUrl: function() { - return '/api-umbrella/v1/admins.csv?' + $.param(this.get('queryParams')) + '&api_key=' + webAdminAjaxApiKey; - }.property('queryParams'), - - actions: { - paramsChange: function(newParams) { - // Remove paging - delete newParams.start; - delete newParams.length; - this.set('queryParams', newParams); - } - } -}); diff --git a/src/api-umbrella/admin/app/controllers/admins/new.js b/src/api-umbrella/admin/app/controllers/admins/new.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/admins/new.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/edit.js b/src/api-umbrella/admin/app/controllers/api-scopes/edit.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/api-scopes/edit.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/api-scopes/new.js b/src/api-umbrella/admin/app/controllers/api-scopes/new.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/api-scopes/new.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/api-users/edit.js b/src/api-umbrella/admin/app/controllers/api-users/edit.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/api-users/edit.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/api-users/form.js b/src/api-umbrella/admin/app/controllers/api-users/form.js deleted file mode 100644 index ec659af66..000000000 --- a/src/api-umbrella/admin/app/controllers/api-users/form.js +++ /dev/null @@ -1,36 +0,0 @@ -import App from '../../app'; -import Ember from 'ember'; - -export default Ember.ObjectController.extend(App.Save, { - throttleByIpOptions: [ - { id: false, name: 'Rate limit by API key' }, - { id: true, name: 'Rate limit by IP address' }, - ], - - enabledOptions: [ - { id: true, name: 'Enabled' }, - { id: false, name: 'Disabled' }, - ], - - roleOptions: function() { - return Admin.ApiUserRole.find(); - // Don't cache this property, so we can rely on refreshing the underlying - // model to refresh the options. - }.property().cacheable(false), - - actions: { - submit: function() { - this.save({ - transitionToRoute: 'api_users', - message: function(model) { - var message = 'Successfully saved the user "' + _.escape(model.get('email')) + '"'; - if(model.get('apiKey')) { - message += '
API Key: ' + _.escape(model.get('apiKey')) + ''; - } - - return message; - }, - }); - }, - }, -}); diff --git a/src/api-umbrella/admin/app/controllers/api-users/new.js b/src/api-umbrella/admin/app/controllers/api-users/new.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/api-users/new.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/apis/form.js b/src/api-umbrella/admin/app/controllers/apis/form.js index df5443749..494faebee 100644 --- a/src/api-umbrella/admin/app/controllers/apis/form.js +++ b/src/api-umbrella/admin/app/controllers/apis/form.js @@ -1,7 +1,7 @@ import App from '../../app'; import Ember from 'ember'; -export default Ember.ObjectController.extend(App.Save, { +export default Ember.Controller.extend(App.Save, { needs: [ 'apis_server_form', 'apis_url_match_form', @@ -21,14 +21,14 @@ export default Ember.ObjectController.extend(App.Save, { ], actions: { - submit: function() { + submit() { this.save({ transitionToRoute: 'apis', message: 'Successfully saved the "' + _.escape(this.get('model.name')) + '" API backend
Note: Your changes are not yet live. Publish Changes to send your updates live.', }); }, - delete: function() { + delete() { bootbox.confirm('Are you sure you want to delete this API backend?', _.bind(function(result) { if(result) { this.get('model').deleteRecord(); @@ -37,7 +37,7 @@ export default Ember.ObjectController.extend(App.Save, { }, this)); }, - addServer: function() { + addServer() { this.get('controllers.apis_server_form').add(this.get('model'), 'servers'); // For new servers, intelligently pick the default port based on the @@ -52,7 +52,7 @@ export default Ember.ObjectController.extend(App.Save, { // "Backend Host" field based on the server's host (because in most // non-load balancing situations they will match). this.get('controllers.apis_server_form').on('closeOk', _.bind(function() { - var server = this.get('model.servers.firstObject'); + let server = this.get('model.servers.firstObject'); if(!this.get('model.backendHost') && server) { this.set('model.backendHost', server.get('host')); } @@ -61,60 +61,60 @@ export default Ember.ObjectController.extend(App.Save, { this.send('openModal', 'apis/server_form'); }, - editServer: function(server) { + editServer(server) { this.get('controllers.apis_server_form').edit(this.get('model'), 'servers', server); this.send('openModal', 'apis/server_form'); }, - deleteServer: function(server) { + deleteServer(server) { this.deleteChildRecord('servers', server, 'Are you sure you want to remove this server?'); }, - addUrlMatch: function() { + addUrlMatch() { this.get('controllers.apis_url_match_form').add(this.get('model'), 'urlMatches'); this.send('openModal', 'apis/url_match_form'); }, - editUrlMatch: function(urlMatch) { + editUrlMatch(urlMatch) { this.get('controllers.apis_url_match_form').edit(this.get('model'), 'urlMatches', urlMatch); this.send('openModal', 'apis/url_match_form'); }, - deleteUrlMatch: function(urlMatch) { + deleteUrlMatch(urlMatch) { this.deleteChildRecord('urlMatches', urlMatch, 'Are you sure you want to remove this URL prefix?'); }, - addSubSettings: function() { + addSubSettings() { this.get('controllers.apis_sub_settings_form').add(this.get('model'), 'subSettings'); this.send('openModal', 'apis/sub_settings_form'); }, - editSubSettings: function(subSettings) { + editSubSettings(subSettings) { this.get('controllers.apis_sub_settings_form').edit(this.get('model'), 'subSettings', subSettings); this.send('openModal', 'apis/sub_settings_form'); }, - deleteSubSettings: function(subSettings) { + deleteSubSettings(subSettings) { this.deleteChildRecord('subSettings', subSettings, 'Are you sure you want to remove this URL setting?'); }, - addRewrite: function() { + addRewrite() { this.get('controllers.apis_rewrite_form').add(this.get('model'), 'rewrites'); this.send('openModal', 'apis/rewrite_form'); }, - editRewrite: function(rewrite) { + editRewrite(rewrite) { this.get('controllers.apis_rewrite_form').edit(this.get('model'), 'rewrites', rewrite); this.send('openModal', 'apis/rewrite_form'); }, - deleteRewrite: function(rewrite) { + deleteRewrite(rewrite) { this.deleteChildRecord('rewrites', rewrite, 'Are you sure you want to remove this rewrite?'); }, }, - deleteChildRecord: function(collectionName, record, message) { - var collection = this.get('model').get(collectionName); + deleteChildRecord(collectionName, record, message) { + let collection = this.get('model').get(collectionName); bootbox.confirm(message, function(result) { if(result) { collection.removeObject(record); diff --git a/src/api-umbrella/admin/app/controllers/apis/index.js b/src/api-umbrella/admin/app/controllers/apis/index.js deleted file mode 100644 index 511d5dfde..000000000 --- a/src/api-umbrella/admin/app/controllers/apis/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import Ember from 'ember'; - -export default Ember.ArrayController.extend({ - reorderActive: false, - - actions: { - toggleReorderApis: function() { - this.set('reorderActive', !this.get('reorderActive')); - }, - }, -}); diff --git a/src/api-umbrella/admin/app/controllers/apis/nested-form.js b/src/api-umbrella/admin/app/controllers/apis/nested-form.js index aac3d2289..e47c9031c 100644 --- a/src/api-umbrella/admin/app/controllers/apis/nested-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/nested-form.js @@ -1,6 +1,6 @@ import Ember from 'ember'; -export default Ember.ObjectController.extend(Ember.Evented, { +export default Ember.Controller.extend(Ember.Evented, { needs: ['modal'], titleBase: null, @@ -9,12 +9,12 @@ export default Ember.ObjectController.extend(Ember.Evented, { isNew: null, originalData: null, - setup: function(apiModel, parentCollectionName) { + setup(apiModel, parentCollectionName) { this.set('apiModel', apiModel); this.set('parentCollection', apiModel.get(parentCollectionName)); }, - add: function(apiModel, parentCollectionName) { + add(apiModel, parentCollectionName) { this.setup(apiModel, parentCollectionName); this.set('model', this.get('parentCollection').create()); @@ -22,7 +22,7 @@ export default Ember.ObjectController.extend(Ember.Evented, { this.set('isNew', true); }, - edit: function(apiModel, parentCollectionName, record) { + edit(apiModel, parentCollectionName, record) { this.setup(apiModel, parentCollectionName); this.set('model', record); @@ -32,8 +32,8 @@ export default Ember.ObjectController.extend(Ember.Evented, { }, actions: { - ok: function() { - var model = this.get('model'); + ok() { + let model = this.get('model'); // Validate the nested model (if supported) before allowing the modal to // close. @@ -54,11 +54,11 @@ export default Ember.ObjectController.extend(Ember.Evented, { } }, - cancel: function() { + cancel() { if(this.get('isNew')) { this.get('parentCollection').removeObject(this.get('model')); } else { - var data = this.get('originalData'); + let data = this.get('originalData'); this.get('model').load(data.id, data); } diff --git a/src/api-umbrella/admin/app/controllers/apis/rewrites.js b/src/api-umbrella/admin/app/controllers/apis/rewrites.js index b24e929f3..108ac13dc 100644 --- a/src/api-umbrella/admin/app/controllers/apis/rewrites.js +++ b/src/api-umbrella/admin/app/controllers/apis/rewrites.js @@ -2,7 +2,7 @@ import Sortable from './sortable'; export default Sortable.extend({ actions: { - reorderRewrites: function() { + reorderRewrites() { this.reorderCollection('rewrites'); }, }, diff --git a/src/api-umbrella/admin/app/controllers/apis/server.js b/src/api-umbrella/admin/app/controllers/apis/server.js index f4c31ad13..3c3552644 100644 --- a/src/api-umbrella/admin/app/controllers/apis/server.js +++ b/src/api-umbrella/admin/app/controllers/apis/server.js @@ -1,5 +1,5 @@ import Ember from 'ember'; export default Ember.Controller.extend({ - title: 'HELLO' + title: 'HELLO', }); diff --git a/src/api-umbrella/admin/app/controllers/apis/sortable.js b/src/api-umbrella/admin/app/controllers/apis/sortable.js index 8585fccc7..fcde793ff 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sortable.js +++ b/src/api-umbrella/admin/app/controllers/apis/sortable.js @@ -1,21 +1,21 @@ import Ember from 'ember'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ reorderable: function() { - var length = this.get('length'); + let length = this.get('length'); return (length && length > 1); }.property('length'), - updateSortOrder: function(indexes) { + updateSortOrder(indexes) { this.forEach(function(record) { - var index = indexes[record.get('id')]; + let index = indexes[record.get('id')]; record.set('sortOrder', index); }); }, - reorderCollection: function(containerId) { - var $container = $('#' + containerId); - var $buttonText = $container.find('.reorder-button-text'); + reorderCollection(containerId) { + let $container = $('#' + containerId); + let $buttonText = $container.find('.reorder-button-text'); if($container.hasClass('reorder-active')) { $buttonText.text($buttonText.data('originalText')); @@ -26,18 +26,18 @@ export default Ember.ArrayController.extend({ $container.toggleClass('reorder-active'); - var controller = this; + let controller = this; $container.find('tbody').sortable({ handle: '.reorder-handle', placeholder: 'reorder-placeholder', - helper: function(event, ui) { + helper(event, ui) { ui.children().each(function() { $(this).width($(this).width()); }); return ui; }, - stop: function() { - var indexes = {}; + stop() { + let indexes = {}; $(this).find('tr').each(function(index) { indexes[$(this).data('id')] = index; }); diff --git a/src/api-umbrella/admin/app/controllers/apis/sub-settings.js b/src/api-umbrella/admin/app/controllers/apis/sub-settings.js index bbfa1dc2b..3aebc62bb 100644 --- a/src/api-umbrella/admin/app/controllers/apis/sub-settings.js +++ b/src/api-umbrella/admin/app/controllers/apis/sub-settings.js @@ -2,7 +2,7 @@ import Sortable from './sortable'; export default Sortable.extend({ actions: { - reorderSubSettings: function() { + reorderSubSettings() { this.reorderCollection('sub_settings'); }, }, diff --git a/src/api-umbrella/admin/app/controllers/apis/url-match-form.js b/src/api-umbrella/admin/app/controllers/apis/url-match-form.js index 9eee0c6b3..8d9a28bf2 100644 --- a/src/api-umbrella/admin/app/controllers/apis/url-match-form.js +++ b/src/api-umbrella/admin/app/controllers/apis/url-match-form.js @@ -5,14 +5,14 @@ export default NestedForm.extend({ exampleSuffix: 'example.json?param=value', exampleIncomingUrl: function() { - var root = this.get('apiModel.exampleIncomingUrlRoot') || ''; - var prefix = this.get('frontendPrefix') || ''; + let root = this.get('apiModel.exampleIncomingUrlRoot') || ''; + let prefix = this.get('frontendPrefix') || ''; return root + prefix + this.get('exampleSuffix'); }.property('frontendPrefix'), exampleOutgoingUrl: function() { - var root = this.get('apiModel.exampleOutgoingUrlRoot') || ''; - var prefix = this.get('backendPrefixWithDefault') || ''; + let root = this.get('apiModel.exampleOutgoingUrlRoot') || ''; + let prefix = this.get('backendPrefixWithDefault') || ''; return root + prefix + this.get('exampleSuffix'); }.property('backendPrefix', 'frontendPrefix'), }); diff --git a/src/api-umbrella/admin/app/controllers/apis/url-matches.js b/src/api-umbrella/admin/app/controllers/apis/url-matches.js index 7454a2d11..9f45b9d6f 100644 --- a/src/api-umbrella/admin/app/controllers/apis/url-matches.js +++ b/src/api-umbrella/admin/app/controllers/apis/url-matches.js @@ -2,7 +2,7 @@ import Sortable from './sortable'; export default Sortable.extend({ actions: { - reorderUrlMatches: function() { + reorderUrlMatches() { this.reorderCollection('url_matches'); }, }, diff --git a/src/api-umbrella/admin/app/controllers/application.js b/src/api-umbrella/admin/app/controllers/application.js index e8cae6f3c..3cad72ec9 100644 --- a/src/api-umbrella/admin/app/controllers/application.js +++ b/src/api-umbrella/admin/app/controllers/application.js @@ -1,5 +1,7 @@ import Ember from 'ember'; -export default Ember.ObjectController.extend({ +export default Ember.Controller.extend({ + session: Ember.inject.service('session'), + isLoading: null, }); diff --git a/src/api-umbrella/admin/app/controllers/config/publish.js b/src/api-umbrella/admin/app/controllers/config/publish.js index 210a42e1f..b0a6fa4eb 100644 --- a/src/api-umbrella/admin/app/controllers/config/publish.js +++ b/src/api-umbrella/admin/app/controllers/config/publish.js @@ -2,12 +2,12 @@ import Ember from 'ember'; export default Ember.Controller.extend({ hasChanges: function() { - var newApis = this.get('model.config.apis.new'); - var modifiedApis = this.get('model.config.apis.modified'); - var deletedApis = this.get('model.config.apis.deleted'); - var newWebsiteBackends = this.get('model.config.website_backends.new'); - var modifiedWebsiteBackends = this.get('model.config.website_backends.modified'); - var deletedWebsiteBackends = this.get('model.config.website_backends.deleted'); + let newApis = this.get('model.config.apis.new'); + let modifiedApis = this.get('model.config.apis.modified'); + let deletedApis = this.get('model.config.apis.deleted'); + let newWebsiteBackends = this.get('model.config.website_backends.new'); + let modifiedWebsiteBackends = this.get('model.config.website_backends.modified'); + let deletedWebsiteBackends = this.get('model.config.website_backends.deleted'); if(newApis.length > 0 || modifiedApis.length > 0 || deletedApis.length > 0 || newWebsiteBackends.length > 0 || modifiedWebsiteBackends.length > 0 || deletedWebsiteBackends.length > 0) { return true; diff --git a/src/api-umbrella/admin/app/controllers/modal.js b/src/api-umbrella/admin/app/controllers/modal.js index 7c7370213..8a87c2af5 100644 --- a/src/api-umbrella/admin/app/controllers/modal.js +++ b/src/api-umbrella/admin/app/controllers/modal.js @@ -1,5 +1,5 @@ import Ember from 'ember'; export default Ember.Controller.extend({ - title: 'Example Modal Title' + title: 'Example Modal Title', }); diff --git a/src/api-umbrella/admin/app/controllers/stats/base.js b/src/api-umbrella/admin/app/controllers/stats/base.js index 7113d2073..a1bd73a5b 100644 --- a/src/api-umbrella/admin/app/controllers/stats/base.js +++ b/src/api-umbrella/admin/app/controllers/stats/base.js @@ -1,13 +1,13 @@ import Ember from 'ember'; -export default Ember.ObjectController.extend({ +export default Ember.Controller.extend({ needs: ['application'], query: null, actions: { - submit: function() { - var query = this.get('query'); + submit() { + let query = this.get('query'); query.beginPropertyChanges(); if($('#filter_type_advanced').css('display') === 'none') { diff --git a/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js b/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js index b55237d7e..bd2a36499 100644 --- a/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js +++ b/src/api-umbrella/admin/app/controllers/stats/drilldown-default.js @@ -1,7 +1,7 @@ import Drilldown from './drilldown'; export default Drilldown.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/drilldown'); - } + }, }); diff --git a/src/api-umbrella/admin/app/controllers/stats/drilldown.js b/src/api-umbrella/admin/app/controllers/stats/drilldown.js index 964818d4d..c08948d91 100644 --- a/src/api-umbrella/admin/app/controllers/stats/drilldown.js +++ b/src/api-umbrella/admin/app/controllers/stats/drilldown.js @@ -2,14 +2,14 @@ import Base from './base'; export default Base.extend({ breadcrumbs: function() { - var crumbs = []; + let crumbs = []; - var data = this.get('model.breadcrumbs'); - for(var i = 0; i < data.length; i++) { - var crumb = { name: data[i].crumb }; + let data = this.get('model.breadcrumbs'); + for(let i = 0; i < data.length; i++) { + let crumb = { name: data[i].crumb }; if(i < data.length -1) { - var params = _.clone(this.get('query.params')); + let params = _.clone(this.get('query.params')); params.prefix = data[i].prefix; crumb.linkQuery = $.param(params); } diff --git a/src/api-umbrella/admin/app/controllers/stats/map-default.js b/src/api-umbrella/admin/app/controllers/stats/map-default.js index f4b746a3a..a1d99d072 100644 --- a/src/api-umbrella/admin/app/controllers/stats/map-default.js +++ b/src/api-umbrella/admin/app/controllers/stats/map-default.js @@ -1,7 +1,7 @@ import Map from './map'; export default Map.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/users'); - } + }, }); diff --git a/src/api-umbrella/admin/app/controllers/stats/map.js b/src/api-umbrella/admin/app/controllers/stats/map.js index fdd08ccca..72e5e390d 100644 --- a/src/api-umbrella/admin/app/controllers/stats/map.js +++ b/src/api-umbrella/admin/app/controllers/stats/map.js @@ -2,14 +2,14 @@ import Base from './base'; export default Base.extend({ breadcrumbs: function() { - var crumbs = []; + let crumbs = []; - var data = this.get('model.map_breadcrumbs'); - for(var i = 0; i < data.length; i++) { - var crumb = { name: data[i].name }; + let data = this.get('model.map_breadcrumbs'); + for(let i = 0; i < data.length; i++) { + let crumb = { name: data[i].name }; if(i < data.length -1) { - var params = _.clone(this.get('query.params')); + let params = _.clone(this.get('query.params')); params.region = data[i].region; crumb.linkQuery = $.param(params); } diff --git a/src/api-umbrella/admin/app/controllers/stats/users-default.js b/src/api-umbrella/admin/app/controllers/stats/users-default.js index b5771e7c0..4a4921085 100644 --- a/src/api-umbrella/admin/app/controllers/stats/users-default.js +++ b/src/api-umbrella/admin/app/controllers/stats/users-default.js @@ -1,7 +1,7 @@ import Users from './users'; export default Users.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/users'); - } + }, }); diff --git a/src/api-umbrella/admin/app/controllers/website-backends/edit.js b/src/api-umbrella/admin/app/controllers/website-backends/edit.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/website-backends/edit.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/controllers/website-backends/new.js b/src/api-umbrella/admin/app/controllers/website-backends/new.js deleted file mode 100644 index c726cbb86..000000000 --- a/src/api-umbrella/admin/app/controllers/website-backends/new.js +++ /dev/null @@ -1,4 +0,0 @@ -import Form from './form'; - -export default Form.extend({ -}); diff --git a/src/api-umbrella/admin/app/helpers/format-date.js b/src/api-umbrella/admin/app/helpers/format-date.js new file mode 100644 index 000000000..5a8713335 --- /dev/null +++ b/src/api-umbrella/admin/app/helpers/format-date.js @@ -0,0 +1,18 @@ +import Ember from 'ember'; + +export function formatDate(params) { + let date = params[0]; + let format = params[1]; + + if(!format || !_.isString(format)) { + format = 'YYYY-MM-DD HH:mm Z'; + } + + if(date) { + return moment(date).format(format); + } else { + return ''; + } +} + +export default Ember.Helper.helper(formatDate); diff --git a/src/api-umbrella/admin/app/helpers/html-safe.js b/src/api-umbrella/admin/app/helpers/html-safe.js new file mode 100644 index 000000000..966daeadb --- /dev/null +++ b/src/api-umbrella/admin/app/helpers/html-safe.js @@ -0,0 +1,8 @@ +import Ember from 'ember'; + +export function htmlSafe(params) { + let value = params[0]; + return new Ember.Handlebars.SafeString(value); +} + +export default Ember.Helper.helper(htmlSafe); diff --git a/src/api-umbrella/admin/app/helpers/t.js b/src/api-umbrella/admin/app/helpers/t.js new file mode 100644 index 000000000..b61ac29b7 --- /dev/null +++ b/src/api-umbrella/admin/app/helpers/t.js @@ -0,0 +1,8 @@ +import Ember from 'ember'; + +export function t(params) { + let key = params[0]; + return I18n.t(key); +} + +export default Ember.Helper.helper(t); diff --git a/src/api-umbrella/admin/app/index.html b/src/api-umbrella/admin/app/index.html index 58436e433..063da98ac 100644 --- a/src/api-umbrella/admin/app/index.html +++ b/src/api-umbrella/admin/app/index.html @@ -7,19 +7,20 @@ - {{content-for 'head'}} + {{content-for "head"}} - {{content-for 'head-footer'}} + {{content-for "head-footer"}} - {{content-for 'body'}} + {{content-for "body"}} + - {{content-for 'body-footer'}} + {{content-for "body-footer"}} diff --git a/src/api-umbrella/admin/app/initializers/bootbox.js b/src/api-umbrella/admin/app/initializers/bootbox.js index 8ab7a1a5d..92647ac41 100644 --- a/src/api-umbrella/admin/app/initializers/bootbox.js +++ b/src/api-umbrella/admin/app/initializers/bootbox.js @@ -1,8 +1,10 @@ export function initialize() { - bootbox.animate(false); + bootbox.setDefaults({ + animate: false, + }); } export default { name: 'bootbox', - initialize + initialize, }; diff --git a/src/api-umbrella/admin/app/initializers/datatables.js b/src/api-umbrella/admin/app/initializers/datatables.js index 1dad79f3b..3873da13f 100644 --- a/src/api-umbrella/admin/app/initializers/datatables.js +++ b/src/api-umbrella/admin/app/initializers/datatables.js @@ -1,14 +1,3 @@ -// DataTables plugin to programmatically show the processing indidicator. -// https://datatables.net/plug-ins/api#fnProcessingIndicator -jQuery.fn.dataTableExt.oApi.fnProcessingIndicator = function ( oSettings, onoff ) -{ - if( typeof(onoff) === 'undefined' ) - { - onoff=true; - } - this.oApi._fnProcessingDisplay( oSettings, onoff ); -}; - export function initialize() { // Defaults for DataTables. _.merge($.fn.DataTable.defaults, { @@ -21,7 +10,7 @@ export function initialize() { // Re-arrange how the table and surrounding fields (pagination, search, etc) // are laid out. - dom: 'rft<"row-fluid"<"span3 table-info"i><"span6 table-pagination"p><"span3 table-length"l>>', + dom: 'rft<"row"<"col-sm-3 table-info"i><"col-sm-6 table-pagination"p><"col-sm-3 table-length"l>>', language: { // Don't have an explicit label for the search field. Use a placeholder @@ -30,7 +19,7 @@ export function initialize() { searchPlaceholder: 'Search...', }, - preDrawCallback: function() { + preDrawCallback() { if(!this.customProcessingCallbackSet) { // Use blockui to provide a more obvious processing message the overlays // the entire table (this helps for long tables, where a simple processing @@ -56,5 +45,5 @@ export function initialize() { export default { name: 'datatables', - initialize + initialize, }; diff --git a/src/api-umbrella/admin/app/initializers/easy-form.js b/src/api-umbrella/admin/app/initializers/easy-form.js deleted file mode 100644 index 12d9d8420..000000000 --- a/src/api-umbrella/admin/app/initializers/easy-form.js +++ /dev/null @@ -1,290 +0,0 @@ -function eachTranslatedAttribute(object, fn) { - var isTranslatedAttribute = /(.+)Translation$/, - isTranslatedAttributeMatch; - - for (var key in object) { - isTranslatedAttributeMatch = key.match(isTranslatedAttribute); - if (isTranslatedAttributeMatch) { - var translation = (!object[key]) ? null : polyglot.t(object[key]); - fn.call(object, isTranslatedAttributeMatch[1], translation); - } - } -} - -export function initialize() { - // Override existing Ember.EasyForm.processOptions to use our polyglot - // translations instead of Ember.i18n for the special *Translation fields. - // - // We could also potentially use subexpressions to call polyglot directly in - // the templates, but at least as of Ember 1.7, there are bugs with multiple - // subexpressions: https://github.com/wycats/handlebars.js/issues/748 - // Perhaps revisit when we upgrade Ember. - Ember.EasyForm.processOptions = function(property, options) { - if(options) { - if(polyglot) { - eachTranslatedAttribute(options.hash, function(attribute, translation) { - options.hash[attribute] = translation; - delete options.hash[attribute + 'Translation']; - }); - } - options.hash.property = property; - } else { - options = property; - } - - return options; - }; - - Ember.EasyForm.Tooltip = Ember.EasyForm.BaseView.extend({ - tagName: 'a', - attributeBindings: ['title', 'rel', 'data-tooltip-class'], - template: Ember.Handlebars.compile(''), - rel: 'tooltip', - }); - - Ember.Handlebars.registerBoundHelper('formatDate', function(date, format) { - if(!format || !_.isString(format)) { - format = 'YYYY-MM-DD HH:mm Z'; - } - - if(date) { - return moment(date).format(format); - } else { - return ''; - } - }); - - Ember.Handlebars.helper('formatNumber', function(number) { - return numeral(number).format('0,0'); - }); - - Ember.Handlebars.helper('inflect', function(word, number) { - return inflection.inflect(word, number); - }); - - // i18n helper via polyglot library - Ember.Handlebars.registerHelper('t', function(property, options) { - return polyglot.t(property, options.hash); - }); - - Ember.Handlebars.registerHelper('tooltip-field', function(property, options) { - options = Ember.EasyForm.processOptions(property, options); - options.hash.viewName = 'tooltip-field-'+options.data.view.elementId; - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Tooltip, options); - }); - - // Use a custom template for Easy Form. This adds a tooltip and wraps that in - // the control-label div with the label. - Ember.TEMPLATES['easyForm/wrapped_input'] = Ember.Handlebars.compile('
{{label-field propertyBinding="view.property" textBinding="view.label" viewBinding="view"}}{{#if view.tooltip}}{{tooltip-field titleBinding="view.tooltip" data-tooltip-classBinding="view.tooltipClass"}}{{/if}}
{{partial "easyForm/inputControls"}}
'); - - Ember.EasyForm.Config.registerInputType('selectize', Ember.EasyForm.TextField.extend({ - defaultOptions: [], - - init: function() { - this._super(); - this.set('selectizeTextInputId', this.elementId + '_selectize_text_input'); - this.set('overrideForElementId', this.get('selectizeTextInputId')); - }, - - didInsertElement: function() { - this._super(); - - this.$input = this.$().selectize({ - plugins: ['restore_on_backspace', 'remove_button'], - delimiter: ',', - options: this.get('defaultOptions'), - valueField: 'id', - labelField: 'label', - searchField: 'label', - sortField: 'label', - onChange: _.bind(this.handleSelectizeChange, this), - create: true, - - // Add to body so it doesn't get clipped by parent div containers. - dropdownParent: 'body', - }); - - this.selectize = this.$input[0].selectize; - this.selectize.$control_input.attr('id', this.get('selectizeTextInputId')); - this.selectize.$control_input.attr('data-raw-input-id', this.elementId); - - var controlId = this.elementId + '_selectize_control'; - this.selectize.$control.attr('id', controlId); - this.selectize.$control_input.attr('data-selectize-control-id', controlId); - }, - - defaultOptionsDidChange: function() { - this.set('defaultOptions', this.get('collection').map(_.bind(function(item) { - return { - id: item.get(this.get('optionValuePath')), - label: item.get(this.get('optionLabelPath')), - }; - }, this))); - - if(this.selectize) { - this.get('defaultOptions').forEach(_.bind(function(option) { - this.selectize.addOption(option); - }, this)); - - this.selectize.refreshOptions(false); - } - }.observes('collection.@each').on('init'), - - // Sync the selectize input with the value binding if the value changes - // externally. - valueDidChange: function() { - if(this.selectize) { - var valueString = this.get('value'); - if(valueString !== this.selectize.getValue()) { - var values = valueString; - if(values) { - values = _.uniq(values.split(',')); - - // Ensure the selected value is available as an option in the menu. - // This takes into account the fact that the default options may not - // be loaded yet, or they may not contain this specific option. - for(var i = 0; i < values.length; i++) { - var option = { - id: values[i], - label: values[i], - }; - - this.selectize.addOption(option); - } - - this.selectize.refreshOptions(false); - } - - this.selectize.setValue(values); - } - } - }.observes('value').on('init'), - - // Update the value binding when the selectize input changes. - handleSelectizeChange: function(value) { - this.set('value', value); - }, - - willDestroyElement: function() { - if(this.selectize) { - this.selectize.destroy(); - } - }, - })); - - Ember.EasyForm.Config.registerInputType('ace', Ember.EasyForm.TextArea.extend({ - attributeBindings: ['data-ace-mode'], - - init: function() { - this._super(); - this.set('aceId', this.elementId + '_ace'); - this.set('aceTextInputId', this.elementId + '_ace_text_input'); - this.set('overrideForElementId', this.get('aceTextInputId')); - }, - - didInsertElement: function() { - this._super(); - - var aceId = this.get('aceId'); - this.$().hide(); - this.$().before('
'); - - this.editor = ace.edit(aceId); - - var editor = this.editor; - var session = this.editor.getSession(); - var element = this.$(); - - editor.setTheme('ace/theme/textmate'); - editor.setShowPrintMargin(false); - editor.setHighlightActiveLine(false); - session.setUseWorker(false); - session.setTabSize(2); - session.setMode('ace/mode/' + this.$().data('ace-mode')); - session.setValue(this.$().val()); - - var $textElement = $(editor.textInput.getElement()); - $textElement.attr('id', this.get('aceTextInputId')); - $textElement.attr('data-raw-input-id', this.elementId); - - var contentId = this.elementId + '_ace_content'; - var $content = $(editor.container).find('.ace_content'); - $content.attr('id', contentId); - $textElement.attr('data-ace-content-id', contentId); - - - session.on('change', function() { - element.val(session.getValue()); - element.trigger('change'); - }); - }, - })); - - Ember.EasyForm.Config.registerWrapper('default', { - formClass: '', - fieldErrorClass: 'error', - errorClass: 'help-block', - hintClass: 'help-block', - inputClass: 'control-group', - wrapControls: true, - controlsWrapperClass: 'controls' - }); - - Ember.EasyForm.Input.reopen({ - didInsertElement: function() { - var forId = this.get('input-field-' + this.elementId + '.overrideForElementId') || this.get('input-field-' + this.elementId + '.elementId'); - this.set('label-field-' + this.elementId + '.for', forId); - }, - - // Observe the "showAllValidationErrors" property and show all the inline - // input validations when this gets set to true. This allows us to show all - // the invalid fields on the page without actually visiting each input field - // (useful on form submits). This is a bit of a workaround since - // ember-easyForm doesn't currently support this: - // https://github.com/dockyard/ember-easyForm/issues/146 - // https://github.com/dockyard/ember-easyForm/pull/143 - showAllValidationErrorsOnModelChange: function() { - if(this.get('context.showAllValidationErrors') === true) { - this.set('hasFocusedOut', true); - this.set('canShowValidationError', true); - } else { - this.showValidationError(); - } - }.observes('context.showAllValidationErrors'), - }); - - Ember.EasyForm.Form.reopen({ - submit: function(event) { - if (event) { - event.preventDefault(); - } - - if(!this.get('context.model.validate')) { - this.get('controller').send(this.get('action')); - } else { - // Reset the error objects used for error-messages display before each - // submit, so the messages reflect the new validations. - this.set('context.model.clientErrors', {}); - this.set('context.model.serverErrors', {}); - - this.get('context.model').validate().then(_.bind(function() { - this.get('controller').send(this.get('action')); - }, this)).catch(_.bind(function() { - // On validation failure, set the errors for error-messages display and - // scroll to the error messages display. - this.set('context.model.clientErrors', this.get('context.model.errors')); - $.scrollTo('#error_messages', { offset: -50, duration: 200 }); - - // Display all the inline errors for at least the top-level model - // (note, this doesn't currently propagate to embedded models/forms). - this.set('context.model.showAllValidationErrors', true); - }, this)); - } - }, - }); -} - -export default { - name: 'easy-form', - initialize -}; diff --git a/src/api-umbrella/admin/app/initializers/pnotify.js b/src/api-umbrella/admin/app/initializers/pnotify.js index 574fd5545..6c81ef60a 100644 --- a/src/api-umbrella/admin/app/initializers/pnotify.js +++ b/src/api-umbrella/admin/app/initializers/pnotify.js @@ -1,19 +1,19 @@ export function initialize() { _.merge(PNotify.prototype.options, { - styling: 'bootstrap2', + styling: 'bootstrap3', width: '400px', icon: false, animate_speed: 'fast', history: { - history: false + history: false, }, buttons: { - sticker: false - } + sticker: false, + }, }); } export default { name: 'pnotify', - initialize + initialize, }; diff --git a/src/api-umbrella/admin/app/initializers/qtip.js b/src/api-umbrella/admin/app/initializers/qtip.js new file mode 100644 index 000000000..64e9007fa --- /dev/null +++ b/src/api-umbrella/admin/app/initializers/qtip.js @@ -0,0 +1,33 @@ +export function initialize() { + $(document).on('click', 'a[rel=tooltip]', function(event) { + $(this).qtip({ + overwrite: false, + show: { + event: event.type, + ready: true, + solo: true, + }, + hide: { + event: 'unfocus', + }, + style: { + classes: 'qtip-bootstrap ' + $(this).data('tooltip-class'), + }, + position: { + viewport: true, + my: 'bottom left', + at: 'top center', + adjust: { + y: 2, + }, + }, + }, event); + + event.preventDefault(); + }); +} + +export default { + name: 'qtip', + initialize, +}; diff --git a/src/api-umbrella/admin/app/instance-initializers/jquery-ajax.js b/src/api-umbrella/admin/app/instance-initializers/jquery-ajax.js new file mode 100644 index 000000000..4157c9f3a --- /dev/null +++ b/src/api-umbrella/admin/app/instance-initializers/jquery-ajax.js @@ -0,0 +1,15 @@ +export function initialize(appInstance) { + let session = appInstance.lookup('service:session'); + $.ajaxPrefilter(function(options) { + session.authorize('authorizer:devise-server-side', function(apiKey, csrfToken) { + options.headers = options.headers || {}; + options.headers['X-Api-Key'] = apiKey; + options.headers['X-CSRF-Token'] = csrfToken; + }); + }); +} + +export default { + name: 'jquery-ajax', + initialize, +}; diff --git a/src/api-umbrella/admin/app/mixins/save.js b/src/api-umbrella/admin/app/mixins/save.js new file mode 100644 index 000000000..41e697968 --- /dev/null +++ b/src/api-umbrella/admin/app/mixins/save.js @@ -0,0 +1,43 @@ +import Ember from 'ember'; + +export default Ember.Mixin.create({ + router: Ember.inject.service('router'), + + scrollToErrors() { + $('#save_button').button('reset'); + $.scrollTo('#error_messages', { offset: -60, duration: 200 }); + }, + + save(options) { + let button = $('#save_button'); + button.button('loading'); + + this.get('model').validate().then(function() { + if(this.get('model.validations.isValid') === false) { + this.set('model.clientErrors', this.get('model.validations.errors')); + this.scrollToErrors(); + } else { + this.get('model').save().then(_.bind(function() { + button.button('reset'); + new PNotify({ + type: 'success', + title: 'Saved', + text: (_.isFunction(options.message)) ? options.message(this.get('model')) : options.message, + }); + + this.sendAction('action', options.transitionToRoute); + }, this), _.bind(function(response) { + // Set the errors from the server response on a "serverErrors" property + // for the error-messages component display. + try { + this.set('model.serverErrors', response.responseJSON.errors); + } catch(e) { + this.set('model.serverErrors', response.responseText); + } + + this.scrollToErrors(); + }, this)); + } + }.bind(this)); + }, +}); diff --git a/src/api-umbrella/admin/app/models/admin-group.js b/src/api-umbrella/admin/app/models/admin-group.js index 7ba608a1a..eaad00b2d 100644 --- a/src/api-umbrella/admin/app/models/admin-group.js +++ b/src/api-umbrella/admin/app/models/admin-group.js @@ -1,8 +1,12 @@ -import Ember from 'ember'; -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import { validator, buildValidations } from 'ember-cp-validations'; -export default Model.extend(Ember.Validations.Mixin, { - id: attr(), +const Validations = buildValidations({ + name: validator('presence', true), +}); + +export default Model.extend(Validations, { name: attr(), apiScopeIds: attr(), permissionIds: attr(), @@ -11,17 +15,8 @@ export default Model.extend(Ember.Validations.Mixin, { updatedAt: attr(), creator: attr(), updater: attr(), - - validations: { - name: { - presence: true, - }, - }, }).reopenClass({ - url: '/api-umbrella/v1/admin_groups', - rootKey: 'admin_group', - collectionKey: 'data', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/admin_groups', + singlePayloadKey: 'admin_group', + arrayPayloadKey: 'data', }); diff --git a/src/api-umbrella/admin/app/models/admin-permission.js b/src/api-umbrella/admin/app/models/admin-permission.js index e09b8fee6..a482a18c8 100644 --- a/src/api-umbrella/admin/app/models/admin-permission.js +++ b/src/api-umbrella/admin/app/models/admin-permission.js @@ -1,13 +1,10 @@ -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; export default Model.extend({ - id: attr(), - name: attr() + name: attr(), }).reopenClass({ - url: '/api-umbrella/v1/admin_permissions', - rootKey: 'admin_permission', - collectionKey: 'admin_permissions', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/admin_permissions', + singlePayloadKey: 'admin_permission', + arrayPayloadKey: 'admin_permissions', }); diff --git a/src/api-umbrella/admin/app/models/admin.js b/src/api-umbrella/admin/app/models/admin.js index 6c08d8c3b..61f4d78df 100644 --- a/src/api-umbrella/admin/app/models/admin.js +++ b/src/api-umbrella/admin/app/models/admin.js @@ -1,12 +1,12 @@ -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; export default Model.extend({ - id: attr(), username: attr(), email: attr(), name: attr(), superuser: attr(), - groupIds: attr(), + groupIds: attr({ defaultValue() { return [] } }), signInCount: attr(), lastSignInAt: attr(), lastSignInIp: attr(), @@ -17,10 +17,7 @@ export default Model.extend({ creator: attr(), updater: attr(), }).reopenClass({ - url: '/api-umbrella/v1/admins', - rootKey: 'admin', - collectionKey: 'data', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/admins', + singlePayloadKey: 'admin', + arrayPayloadKey: 'data', }); diff --git a/src/api-umbrella/admin/app/models/api-scope.js b/src/api-umbrella/admin/app/models/api-scope.js index 88e1971de..f7325e0bb 100644 --- a/src/api-umbrella/admin/app/models/api-scope.js +++ b/src/api-umbrella/admin/app/models/api-scope.js @@ -1,8 +1,26 @@ -import Ember from 'ember'; -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import { validator, buildValidations } from 'ember-cp-validations'; -export default Model.extend(Ember.Validations.Mixin, { - id: attr(), +const Validations = buildValidations({ + name: validator('presence', true), + host: [ + validator('presence', true), + validator('format', { + regex: CommonValidations.host_format_with_wildcard, + message: I18n.t('errors.messages.invalid_host_format'), + }), + ], + pathPrefix: [ + validator('presence', true), + validator('format', { + regex: CommonValidations.url_prefix_format, + message: I18n.t('errors.messages.invalid_url_prefix_format'), + }), + ], +}); + +export default Model.extend(Validations, { name: attr(), host: attr(), pathPrefix: attr(), @@ -11,34 +29,11 @@ export default Model.extend(Ember.Validations.Mixin, { creator: attr(), updater: attr(), - validations: { - name: { - presence: true, - }, - host: { - presence: true, - format: { - with: CommonValidations.host_format_with_wildcard, - message: polyglot.t('errors.messages.invalid_host_format'), - }, - }, - pathPrefix: { - presence: true, - format: { - with: CommonValidations.url_prefix_format, - message: polyglot.t('errors.messages.invalid_url_prefix_format'), - }, - }, - }, - - displayName: function() { + displayName: Ember.computed('name', 'host', 'pathPrefix', function() { return this.get('name') + ' - ' + this.get('host') + this.get('pathPrefix'); - }.property('name', 'host', 'pathPrefix') + }), }).reopenClass({ - url: '/api-umbrella/v1/api_scopes', - rootKey: 'api_scope', - collectionKey: 'data', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/api_scopes', + singlePayloadKey: 'api_scope', + arrayPayloadKey: 'data', }); diff --git a/src/api-umbrella/admin/app/models/api-user-role.js b/src/api-umbrella/admin/app/models/api-user-role.js index 6eb776a15..8e42662a2 100644 --- a/src/api-umbrella/admin/app/models/api-user-role.js +++ b/src/api-umbrella/admin/app/models/api-user-role.js @@ -1,12 +1,7 @@ -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; export default Model.extend({ - id: attr(), }).reopenClass({ - url: '/api-umbrella/v1/user_roles', - rootKey: 'user_roles', - collectionKey: 'user_roles', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/user_roles', + arrayPayloadKey: 'user_roles', }); diff --git a/src/api-umbrella/admin/app/models/api-user.js b/src/api-umbrella/admin/app/models/api-user.js index 50c874c59..5f45bc6a1 100644 --- a/src/api-umbrella/admin/app/models/api-user.js +++ b/src/api-umbrella/admin/app/models/api-user.js @@ -1,8 +1,16 @@ import Ember from 'ember'; -import { Model, attr, belongsTo } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import { belongsTo } from 'ember-data/relationships'; +import { validator, buildValidations } from 'ember-cp-validations'; -export default Model.extend(Ember.Validations.Mixin, { - id: attr(), +const Validations = buildValidations({ + firstName: validator('presence', true), + lastName: validator('presence', true), + email: validator('presence', true), +}); + +export default Model.extend(Validations, { apiKey: attr(), apiKeyHidesAt: attr(), apiKeyPreview: attr(), @@ -15,9 +23,9 @@ export default Model.extend(Ember.Validations.Mixin, { registrationSource: attr(), termsAndConditions: attr(), sendWelcomeEmail: attr(), - throttleByIp: attr(), + throttleByIp: attr('boolean'), roles: attr(), - enabled: attr(), + enabled: attr('boolean'), createdAt: attr(), updatedAt: attr(), creator: attr(), @@ -27,31 +35,14 @@ export default Model.extend(Ember.Validations.Mixin, { registrationReferer: attr(), registrationOrigin: attr(), - settings: belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), - - validations: { - firstName: { - presence: true, - }, - lastName: { - presence: true, - }, - email: { - presence: true, - }, - }, - - init: function() { - this._super(); + settings: belongsTo('api/settings', { async: false }), - // Set defaults for new records. + ready() { this.setDefaults(); - - // For existing records, we need to set the defaults after loading. - this.on('didLoad', this, this.setDefaults); + this._super(); }, - setDefaults: function() { + setDefaults() { if(this.get('throttleByIp') === undefined) { this.set('throttleByIp', false); } @@ -61,7 +52,7 @@ export default Model.extend(Ember.Validations.Mixin, { } if(!this.get('settings')) { - this.set('settings', Admin.ApiSettings.create()); + this.set('settings', this.get('store').createRecord('api/settings')); } if(!this.get('registrationSource') && this.get('isNew')) { @@ -69,32 +60,32 @@ export default Model.extend(Ember.Validations.Mixin, { } }, - rolesString: function(key, value) { - // Setter - if(arguments.length > 1) { - var roles = value.split(','); + rolesString: Ember.computed('roles', { + get() { + let rolesString = ''; + if(this.get('roles')) { + rolesString = this.get('roles').join(','); + } + return rolesString; + }, + set(key, value) { + let roles = value.split(','); this.set('roles', roles); - } - - // Getter - var rolesString = ''; - if(this.get('roles')) { - rolesString = this.get('roles').join(','); - } - - return rolesString; - }.property('roles'), + return value; + }, + }), - didSaveRecord: function() { + didUpdate() { // Clear the cached roles on save, so the list of available roles is always // correct for subsequent form renderings in this current session. - Admin.ApiUserRole.clearCache(); + this.get('store').unloadAll('api-user-role'); + }, + + didCreate() { + this.didUpdate(); }, }).reopenClass({ - url: '/api-umbrella/v1/users', - rootKey: 'user', - collectionKey: 'data', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/users', + singlePayloadKey: 'user', + arrayPayloadKey: 'data', }); diff --git a/src/api-umbrella/admin/app/models/api.js b/src/api-umbrella/admin/app/models/api.js index 62fb26e05..f708bc8f0 100644 --- a/src/api-umbrella/admin/app/models/api.js +++ b/src/api-umbrella/admin/app/models/api.js @@ -3,7 +3,7 @@ import { Model, attr, belongsTo, hasMany } from 'ember-model'; export default Model.extend(Ember.Validations.Mixin, { name: attr(), - sortOrder: attr(Number), + sortOrder: attr('number'), backendProtocol: attr(), frontendHost: attr(), backendHost: attr(), @@ -13,11 +13,11 @@ export default Model.extend(Ember.Validations.Mixin, { creator: attr(), updater: attr(), - servers: hasMany('Admin.ApiServer', { key: 'servers', embedded: true }), - urlMatches: hasMany('Admin.ApiUrlMatch', { key: 'url_matches', embedded: true }), - settings: belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), - subSettings: hasMany('Admin.ApiSubSettings', { key: 'sub_settings', embedded: true }), - rewrites: hasMany('Admin.ApiRewrite', { key: 'rewrites', embedded: true }), + servers: hasMany('api/server', { async: false }), + urlMatches: hasMany('api/url-match', { async: false }), + settings: belongsTo('api/settings', { async: false }), + subSettings: hasMany('api/sub-settings', { async: false }), + rewrites: hasMany('api/rewrites', { async: false }), validations: { name: { @@ -27,26 +27,26 @@ export default Model.extend(Ember.Validations.Mixin, { presence: true, format: { with: CommonValidations.host_format_with_wildcard, - message: polyglot.t('errors.messages.invalid_host_format'), + message: I18n.t('errors.messages.invalid_host_format'), }, }, backendHost: { presence: { - unless: function(object) { + unless(object) { return (object.get('frontendHost') && object.get('frontendHost')[0] === '*'); }, }, format: { with: CommonValidations.host_format_with_wildcard, - message: polyglot.t('errors.messages.invalid_host_format'), - if: function(object) { + message: I18n.t('errors.messages.invalid_host_format'), + if(object) { return !!object.get('backendHost'); }, }, }, }, - init: function() { + init() { this._super(); // Set defaults for new records. @@ -56,7 +56,7 @@ export default Model.extend(Ember.Validations.Mixin, { this.on('didLoad', this, this.setDefaults); }, - setDefaults: function() { + setDefaults() { if(!this.get('settings')) { this.set('settings', Admin.ApiSettings.create()); } @@ -70,10 +70,14 @@ export default Model.extend(Ember.Validations.Mixin, { return 'http://' + (this.get('backendHost') || this.get('frontendHost') || ''); }.property('backendHost'), - didSaveRecord: function() { + didUpdate() { // Clear the cached roles on save, so the list of available roles is always // correct for subsequent form renderings in this current session. - Admin.ApiUserRole.clearCache(); + this.get('store').unloadAll('api-user-role'); + }, + + didCreate() { + this.didUpdate(); }, }).reopenClass({ url: '/api-umbrella/v1/apis', diff --git a/src/api-umbrella/admin/app/models/api/rate-limit.js b/src/api-umbrella/admin/app/models/api/rate-limit.js index 9dd7256b8..4826e4ae4 100644 --- a/src/api-umbrella/admin/app/models/api/rate-limit.js +++ b/src/api-umbrella/admin/app/models/api/rate-limit.js @@ -1,33 +1,24 @@ -import Ember from 'ember'; -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; export default Model.extend({ - id: attr(), - duration: attr(Number), + duration: attr('number'), limitBy: attr(), limit: attr(), responseHeaders: attr(), - //durationUnits: attr(), - //durationInUnits: attr(Number), - - init: function() { - this._super(); - - // Set defaults for new records. + ready() { this.setDefaults(); - - // For existing records, we need to set the defaults after loading. - this.on('didLoad', this, this.setDefaults); + this._super(); }, - setDefaults: function() { - var duration = this.get('duration'); + setDefaults() { + let duration = this.get('duration'); if(duration) { - var days = duration / 86400000; - var hours = duration / 3600000; - var minutes = duration / 60000; - var seconds = duration / 1000; + let days = duration / 86400000; + let hours = duration / 3600000; + let minutes = duration / 60000; + let seconds = duration / 1000; if(days % 1 === 0) { this.set('durationInUnits', days); @@ -45,26 +36,23 @@ export default Model.extend({ } }, - durationFromUnits: function() { + durationFromUnits: Ember.computed('durationInUnits', 'durationUnits', function() { if(this.get('durationInUnits') && this.get('durationUnits')) { - var inUnits = parseInt(this.get('durationInUnits'), 10); - var units = this.get('durationUnits'); + let inUnits = parseInt(this.get('durationInUnits'), 10); + let units = this.get('durationUnits'); return moment.duration(inUnits, units).asMilliseconds(); } else { return this.get('duration'); } - }.property('durationInUnits', 'durationUnits'), + }), settingsId: function() { return this.get('parent.id'); }.property(), - toJSON: function() { - var json = this._super(); + toJSON() { + let json = this._super(); json.duration = this.get('durationFromUnits'); return json; }, -}).reopenClass({ - primaryKey: 'id', - camelizeKeys: true, }); diff --git a/src/api-umbrella/admin/app/models/api/server.js b/src/api-umbrella/admin/app/models/api/server.js index 676ebabe3..4ec80e80a 100644 --- a/src/api-umbrella/admin/app/models/api/server.js +++ b/src/api-umbrella/admin/app/models/api/server.js @@ -11,7 +11,7 @@ export default Model.extend(Ember.Validations.Mixin, { presence: true, format: { with: CommonValidations.host_format, - message: polyglot.t('errors.messages.invalid_host_format'), + message: I18n.t('errors.messages.invalid_host_format'), }, }, port: { diff --git a/src/api-umbrella/admin/app/models/api/settings.js b/src/api-umbrella/admin/app/models/api/settings.js index efb8fa50c..f7ba89626 100644 --- a/src/api-umbrella/admin/app/models/api/settings.js +++ b/src/api-umbrella/admin/app/models/api/settings.js @@ -1,7 +1,8 @@ -import { Model, attr, hasMany } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import { hasMany } from 'ember-data/relationships'; export default Model.extend({ - id: attr(), appendQueryString: attr(), headersString: attr(), httpBasicAuth: attr(), @@ -22,19 +23,14 @@ export default Model.extend({ errorTemplates: attr(), errorDataYamlStrings: attr(), - rateLimits: hasMany('Admin.ApiRateLimit', { key: 'rate_limits', embedded: true }), + rateLimits: hasMany('api/rate-limit', { async: false }), - init: function() { - this._super(); - - // Set defaults for new records. + ready() { this.setDefaults(); - - // For existing records, we need to set the defaults after loading. - this.on('didLoad', this, this.setDefaults); + this._super(); }, - setDefaults: function() { + setDefaults() { if(this.get('rateLimitMode') === undefined) { this.set('rateLimitMode', null); } @@ -53,13 +49,13 @@ export default Model.extend({ requiredRolesString: function(key, value) { // Setter if(arguments.length > 1) { - var roles = _.compact(value.split(',')); + let roles = _.compact(value.split(',')); if(roles.length === 0) { roles = null; } this.set('requiredRoles', roles); } // Getter - var rolesString = ''; + let rolesString = ''; if(this.get('requiredRoles')) { rolesString = this.get('requiredRoles').join(','); } @@ -70,13 +66,13 @@ export default Model.extend({ allowedIpsString: function(key, value) { // Setter if(arguments.length > 1) { - var ips = _.compact(value.split(/[\r\n]+/)); + let ips = _.compact(value.split(/[\r\n]+/)); if(ips.length === 0) { ips = null; } this.set('allowedIps', ips); } // Getter - var allowedIpsString = ''; + let allowedIpsString = ''; if(this.get('allowedIps')) { allowedIpsString = this.get('allowedIps').join('\n'); } @@ -87,13 +83,13 @@ export default Model.extend({ allowedReferersString: function(key, value) { // Setter if(arguments.length > 1) { - var referers = _.compact(value.split(/[\r\n]+/)); + let referers = _.compact(value.split(/[\r\n]+/)); if(referers.length === 0) { referers = null; } this.set('allowedReferers', referers); } // Getter - var allowedReferersString = ''; + let allowedReferersString = ''; if(this.get('allowedReferers')) { allowedReferersString = this.get('allowedReferers').join('\n'); } @@ -104,7 +100,4 @@ export default Model.extend({ isRateLimitModeCustom: function() { return (this.get('rateLimitMode') === 'custom'); }.property('rateLimitMode'), -}).reopenClass({ - primaryKey: 'id', - camelizeKeys: true, }); diff --git a/src/api-umbrella/admin/app/models/api/sub-settings.js b/src/api-umbrella/admin/app/models/api/sub-settings.js index c6ac293d2..eddfa555a 100644 --- a/src/api-umbrella/admin/app/models/api/sub-settings.js +++ b/src/api-umbrella/admin/app/models/api/sub-settings.js @@ -8,7 +8,7 @@ export default Model.extend({ settings: belongsTo('Admin.ApiSettings', { key: 'settings', embedded: true }), - init: function() { + init() { this._super(); // Set defaults for new records. @@ -18,7 +18,7 @@ export default Model.extend({ this.on('didLoad', this, this.setDefaults); }, - setDefaults: function() { + setDefaults() { if(!this.get('settings')) { this.set('settings', Admin.ApiSettings.create()); } diff --git a/src/api-umbrella/admin/app/models/api/url-match.js b/src/api-umbrella/admin/app/models/api/url-match.js index 054a02f8a..ca50eeeff 100644 --- a/src/api-umbrella/admin/app/models/api/url-match.js +++ b/src/api-umbrella/admin/app/models/api/url-match.js @@ -12,14 +12,14 @@ export default Model.extend(Ember.Validations.Mixin, { presence: true, format: { with: CommonValidations.url_prefix_format, - message: polyglot.t('errors.messages.invalid_url_prefix_format'), + message: I18n.t('errors.messages.invalid_url_prefix_format'), }, }, backendPrefix: { presence: true, format: { with: CommonValidations.url_prefix_format, - message: polyglot.t('errors.messages.invalid_url_prefix_format'), + message: I18n.t('errors.messages.invalid_url_prefix_format'), }, }, }, diff --git a/src/api-umbrella/admin/app/models/stats/drilldown.js b/src/api-umbrella/admin/app/models/stats/drilldown.js index f7c7ee1b9..e80447700 100644 --- a/src/api-umbrella/admin/app/models/stats/drilldown.js +++ b/src/api-umbrella/admin/app/models/stats/drilldown.js @@ -3,14 +3,14 @@ import Ember from 'ember'; export default Ember.Object.extend(Ember.Evented, { results: null, }).reopenClass({ - find: function(params) { - var promise = Ember.Deferred.create(); + find(params) { + let promise = Ember.Deferred.create(); $.ajax({ url: '/api-umbrella/v1/analytics/drilldown.json', data: params, }).done(function(data) { - var map = Admin.StatsDrilldown.create(data); + let map = Admin.StatsDrilldown.create(data); promise.resolve(map); }).fail(function() { promise.reject(); diff --git a/src/api-umbrella/admin/app/models/stats/logs.js b/src/api-umbrella/admin/app/models/stats/logs.js index 2bbd9e745..64755dd77 100644 --- a/src/api-umbrella/admin/app/models/stats/logs.js +++ b/src/api-umbrella/admin/app/models/stats/logs.js @@ -6,14 +6,14 @@ export default Ember.Object.extend(Ember.Evented, { facets: null, logs: null, }).reopenClass({ - find: function(params) { - var promise = Ember.Deferred.create(); + find(params) { + let promise = Ember.Deferred.create(); $.ajax({ url: '/admin/stats/search.json', data: params, }).done(function(data) { - var stats = Admin.StatsLogs.create(data); + let stats = Admin.StatsLogs.create(data); promise.resolve(stats); }).fail(function() { promise.reject(); diff --git a/src/api-umbrella/admin/app/models/stats/map.js b/src/api-umbrella/admin/app/models/stats/map.js index a7041d65f..63a4e1270 100644 --- a/src/api-umbrella/admin/app/models/stats/map.js +++ b/src/api-umbrella/admin/app/models/stats/map.js @@ -4,14 +4,14 @@ export default Ember.Object.extend(Ember.Evented, { regions: null, map_regions: null, }).reopenClass({ - find: function(params) { - var promise = Ember.Deferred.create(); + find(params) { + let promise = Ember.Deferred.create(); $.ajax({ url: '/admin/stats/map.json', data: params, }).done(function(data) { - var map = Admin.StatsMap.create(data); + let map = Admin.StatsMap.create(data); promise.resolve(map); }).fail(function() { promise.reject(); diff --git a/src/api-umbrella/admin/app/models/website-backend.js b/src/api-umbrella/admin/app/models/website-backend.js index 8153fe8ab..81962a540 100644 --- a/src/api-umbrella/admin/app/models/website-backend.js +++ b/src/api-umbrella/admin/app/models/website-backend.js @@ -1,41 +1,36 @@ -import Ember from 'ember'; -import { Model, attr } from 'ember-model'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import { validator, buildValidations } from 'ember-cp-validations'; -export default Model.extend(Ember.Validations.Mixin, { - id: attr(), +const Validations = buildValidations({ + frontendHost: [ + validator('presence', true), + validator('format', { + regex: CommonValidations.host_format_with_wildcard, + message: I18n.t('errors.messages.invalid_host_format'), + }), + ], + backendProtocol: validator('presence', true), + serverHost: [ + validator('presence', true), + validator('format', { + regex: CommonValidations.host_format_with_wildcard, + message: I18n.t('errors.messages.invalid_host_format'), + }), + ], + serverPort: [ + validator('presence', true), + validator('number', { allowString: true }), + ], +}); + +export default Model.extend(Validations, { frontendHost: attr(), backendProtocol: attr(), serverHost: attr(), - serverPort: attr(Number), - - validations: { - frontendHost: { - presence: true, - format: { - with: CommonValidations.host_format_with_wildcard, - message: polyglot.t('errors.messages.invalid_host_format'), - }, - }, - backendProtocol: { - presence: true, - }, - serverHost: { - presence: true, - format: { - with: CommonValidations.host_format_with_wildcard, - message: polyglot.t('errors.messages.invalid_host_format'), - }, - }, - serverPort: { - presence: true, - numericality: true, - }, - }, + serverPort: attr('number'), }).reopenClass({ - url: '/api-umbrella/v1/website_backends', - rootKey: 'website_backend', - collectionKey: 'data', - primaryKey: 'id', - camelizeKeys: true, - adapter: Admin.APIUmbrellaRESTAdapter.create(), + urlRoot: '/api-umbrella/v1/website_backends', + singlePayloadKey: 'website_backend', + arrayPayloadKey: 'data', }); diff --git a/src/api-umbrella/admin/app/nonjs/common-validations.js.erb b/src/api-umbrella/admin/app/nonjs/common-validations.js.erb deleted file mode 100644 index 16bea1379..000000000 --- a/src/api-umbrella/admin/app/nonjs/common-validations.js.erb +++ /dev/null @@ -1,5 +0,0 @@ -var CommonValidations = { - host_format: new RegExp(<%= CommonValidations::HOST_FORMAT.source.to_json %>), - host_format_with_wildcard: new RegExp(<%= CommonValidations::HOST_FORMAT_WITH_WILDCARD.source.to_json %>), - url_prefix_format: new RegExp(<%= CommonValidations::URL_PREFIX_FORMAT.source.to_json %>) -}; diff --git a/src/api-umbrella/admin/app/nonjs/locales/de.js.erb b/src/api-umbrella/admin/app/nonjs/locales/de.js.erb deleted file mode 100644 index b77c25540..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/de.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "de.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:de) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/en.js.erb b/src/api-umbrella/admin/app/nonjs/locales/en.js.erb deleted file mode 100644 index 5968984c3..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/en.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "en.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:en) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb b/src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb deleted file mode 100644 index c47343eff..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/es-419.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "es-419.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:"es-419") %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/fi.js.erb b/src/api-umbrella/admin/app/nonjs/locales/fi.js.erb deleted file mode 100644 index 5c5423b0f..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/fi.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "fi.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:fi) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/fr.js.erb b/src/api-umbrella/admin/app/nonjs/locales/fr.js.erb deleted file mode 100644 index 0254c0fd9..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/fr.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "fr.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:fr) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/it.js.erb b/src/api-umbrella/admin/app/nonjs/locales/it.js.erb deleted file mode 100644 index c4cb74684..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/it.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "it.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:it) %> diff --git a/src/api-umbrella/admin/app/nonjs/locales/ru.js.erb b/src/api-umbrella/admin/app/nonjs/locales/ru.js.erb deleted file mode 100644 index 142719c62..000000000 --- a/src/api-umbrella/admin/app/nonjs/locales/ru.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on "ru.yml" -//= require polyglot -<%= JsLocaleHelper.output_locale(:ru) %> diff --git a/src/api-umbrella/admin/app/resolver.js b/src/api-umbrella/admin/app/resolver.js new file mode 100644 index 000000000..2fb563d6c --- /dev/null +++ b/src/api-umbrella/admin/app/resolver.js @@ -0,0 +1,3 @@ +import Resolver from 'ember-resolver'; + +export default Resolver; diff --git a/src/api-umbrella/admin/app/router.js b/src/api-umbrella/admin/app/router.js index 573b9b347..698b7b0e9 100644 --- a/src/api-umbrella/admin/app/router.js +++ b/src/api-umbrella/admin/app/router.js @@ -2,40 +2,40 @@ import Ember from 'ember'; import config from './config/environment'; const Router = Ember.Router.extend({ - location: config.locationType + location: config.locationType, }); Router.map(function() { - this.resource('apis', { path: '/apis' }, function() { + this.route('apis', { path: '/apis' }, function() { this.route('new'); this.route('edit', { path: '/:apiId/edit' }); }); - this.resource('api_users', { path: '/api_users' }, function() { + this.route('api_users', { path: '/api_users' }, function() { this.route('new'); this.route('edit', { path: '/:apiUserId/edit' }); }); - this.resource('admins', { path: '/admins' }, function() { + this.route('admins', { path: '/admins' }, function() { this.route('new'); this.route('edit', { path: '/:adminId/edit' }); }); - this.resource('api_scopes', { path: '/api_scopes' }, function() { + this.route('api_scopes', { path: '/api_scopes' }, function() { this.route('new'); this.route('edit', { path: '/:apiScopeId/edit' }); }); - this.resource('admin_groups', { path: '/admin_groups' }, function() { + this.route('admin_groups', { path: '/admin_groups' }, function() { this.route('new'); this.route('edit', { path: '/:adminGroupId/edit' }); }); - this.resource('config', { path: '/config' }, function() { + this.route('config', { path: '/config' }, function() { this.route('publish'); }); - this.resource('stats', { path: '/stats' }, function() { + this.route('stats', { path: '/stats' }, function() { this.route('drilldown', { path: '/drilldown/*query' }); this.route('drilldownDefault', { path: '/drilldown' }); @@ -49,10 +49,11 @@ Router.map(function() { this.route('mapDefault', { path: '/map' }); }); - this.resource('website_backends', { path: '/website_backends' }, function() { + this.route('website_backends', { path: '/website_backends' }, function() { this.route('new'); this.route('edit', { path: '/:websiteBackendId/edit' }); }); + this.route('login'); }); export default Router; diff --git a/src/api-umbrella/admin/app/routes/admin-groups/base.js b/src/api-umbrella/admin/app/routes/admin-groups/base.js index ed75a4d8f..48853d09d 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/base.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/base.js @@ -1,7 +1,8 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - setupController: function(controller, model) { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); diff --git a/src/api-umbrella/admin/app/routes/admin-groups/edit.js b/src/api-umbrella/admin/app/routes/admin-groups/edit.js index 1de9cece0..d5ff66ef3 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/edit.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/edit.js @@ -1,11 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function(params) { - // Clear the record cache, so this is always fetched from the server (to - // account for two users simultaneously editing the same record). - Admin.AdminGroup.clearCache(); - - return Admin.AdminGroup.find(params.adminGroupId); + model(params) { + return this.get('store').findRecord('admin-group', params.adminGroupId); }, }); diff --git a/src/api-umbrella/admin/app/routes/admin-groups/new.js b/src/api-umbrella/admin/app/routes/admin-groups/new.js index 3443d6c39..9800c6035 100644 --- a/src/api-umbrella/admin/app/routes/admin-groups/new.js +++ b/src/api-umbrella/admin/app/routes/admin-groups/new.js @@ -1,7 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function() { - return Admin.AdminGroup.create(); + model() { + return this.get('store').createRecord('admin-group'); }, }); diff --git a/src/api-umbrella/admin/app/routes/admins/base.js b/src/api-umbrella/admin/app/routes/admins/base.js index ed75a4d8f..48853d09d 100644 --- a/src/api-umbrella/admin/app/routes/admins/base.js +++ b/src/api-umbrella/admin/app/routes/admins/base.js @@ -1,7 +1,8 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - setupController: function(controller, model) { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); diff --git a/src/api-umbrella/admin/app/routes/admins/edit.js b/src/api-umbrella/admin/app/routes/admins/edit.js index 5036aa123..967cb4d96 100644 --- a/src/api-umbrella/admin/app/routes/admins/edit.js +++ b/src/api-umbrella/admin/app/routes/admins/edit.js @@ -1,11 +1,11 @@ import Base from './base'; export default Base.extend({ - model: function(params) { + model(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). - Admin.Admin.clearCache(); + //Admin.Admin.clearCache(); - return Admin.Admin.find(params.adminId); + return this.get('store').findRecord('admin', params.adminId); }, }); diff --git a/src/api-umbrella/admin/app/routes/admins/new.js b/src/api-umbrella/admin/app/routes/admins/new.js index 80c528502..f5d4fcb99 100644 --- a/src/api-umbrella/admin/app/routes/admins/new.js +++ b/src/api-umbrella/admin/app/routes/admins/new.js @@ -1,7 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function() { - return Admin.Admin.create(); + model() { + return this.get('store').createRecord('admin'); }, }); diff --git a/src/api-umbrella/admin/app/routes/api-scopes/base.js b/src/api-umbrella/admin/app/routes/api-scopes/base.js index ed75a4d8f..48853d09d 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/base.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/base.js @@ -1,7 +1,8 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - setupController: function(controller, model) { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); diff --git a/src/api-umbrella/admin/app/routes/api-scopes/edit.js b/src/api-umbrella/admin/app/routes/api-scopes/edit.js index 77dab3bce..bae62894b 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/edit.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/edit.js @@ -1,11 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function(params) { - // Clear the record cache, so this is always fetched from the server (to - // account for two users simultaneously editing the same record). - Admin.ApiScope.clearCache(); - - return Admin.ApiScope.find(params.apiScopeId); + model(params) { + return this.get('store').findRecord('api-scope', params.apiScopeId); }, }); diff --git a/src/api-umbrella/admin/app/routes/api-scopes/new.js b/src/api-umbrella/admin/app/routes/api-scopes/new.js index df4d93aa6..2fe7898f5 100644 --- a/src/api-umbrella/admin/app/routes/api-scopes/new.js +++ b/src/api-umbrella/admin/app/routes/api-scopes/new.js @@ -1,7 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function() { - return Admin.ApiScope.create(); + model() { + return this.get('store').createRecord('api-scope'); }, }); diff --git a/src/api-umbrella/admin/app/routes/api-users/base.js b/src/api-umbrella/admin/app/routes/api-users/base.js index ed75a4d8f..48853d09d 100644 --- a/src/api-umbrella/admin/app/routes/api-users/base.js +++ b/src/api-umbrella/admin/app/routes/api-users/base.js @@ -1,7 +1,8 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - setupController: function(controller, model) { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); diff --git a/src/api-umbrella/admin/app/routes/api-users/edit.js b/src/api-umbrella/admin/app/routes/api-users/edit.js index 2baa7bbc6..0a71b5bac 100644 --- a/src/api-umbrella/admin/app/routes/api-users/edit.js +++ b/src/api-umbrella/admin/app/routes/api-users/edit.js @@ -1,11 +1,13 @@ import Base from './base'; export default Base.extend({ - model: function(params) { + model(params) { + /* // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). Admin.ApiUser.clearCache(); + */ - return Admin.ApiUser.find(params.apiUserId); + return this.get('store').findRecord('api-user', params.apiUserId); }, }); diff --git a/src/api-umbrella/admin/app/routes/api-users/new.js b/src/api-umbrella/admin/app/routes/api-users/new.js index af2104835..045cc2a1d 100644 --- a/src/api-umbrella/admin/app/routes/api-users/new.js +++ b/src/api-umbrella/admin/app/routes/api-users/new.js @@ -1,7 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function() { - return Admin.ApiUser.create(); + model() { + return this.get('store').createRecord('api-user'); }, }); diff --git a/src/api-umbrella/admin/app/routes/apis/base.js b/src/api-umbrella/admin/app/routes/apis/base.js index e3a6b6ece..4577dc439 100644 --- a/src/api-umbrella/admin/app/routes/apis/base.js +++ b/src/api-umbrella/admin/app/routes/apis/base.js @@ -1,7 +1,8 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - setupController: function(controller, model) { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); diff --git a/src/api-umbrella/admin/app/routes/apis/edit.js b/src/api-umbrella/admin/app/routes/apis/edit.js index a98d0ff12..c64201141 100644 --- a/src/api-umbrella/admin/app/routes/apis/edit.js +++ b/src/api-umbrella/admin/app/routes/apis/edit.js @@ -1,7 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function(params) { + model(params) { // Clear the record cache, so this is always fetched from the server (to // account for two users simultaneously editing the same record). Admin.Api.clearCache(); diff --git a/src/api-umbrella/admin/app/routes/apis/new.js b/src/api-umbrella/admin/app/routes/apis/new.js index 485187024..843a8a269 100644 --- a/src/api-umbrella/admin/app/routes/apis/new.js +++ b/src/api-umbrella/admin/app/routes/apis/new.js @@ -1,7 +1,7 @@ import Base from './base'; export default Base.extend({ - model: function() { + model() { return Admin.Api.create({ frontendHost: location.hostname, }); diff --git a/src/api-umbrella/admin/app/routes/application.js b/src/api-umbrella/admin/app/routes/application.js index 550ae261d..fd3a94a0a 100644 --- a/src/api-umbrella/admin/app/routes/application.js +++ b/src/api-umbrella/admin/app/routes/application.js @@ -1,8 +1,9 @@ import Ember from 'ember'; +import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; -export default Ember.Route.extend({ +export default Ember.Route.extend(ApplicationRouteMixin, { actions: { - openModal: function(template) { + openModal(template) { this.render(template, { into: 'modal', outlet: 'modalBody' }); $('.modal').modal({ // Don't close when the background is clicked or the escape key is hit. @@ -12,12 +13,16 @@ export default Ember.Route.extend({ // keyboard or background clicks and what the behavior should be // (cancel, or ok?). backdrop: 'static', - keyboard: false + keyboard: false, }); }, - closeModal: function() { + closeModal() { this.render('hide_modal', { into: 'modal', outlet: 'modalBody' }); }, + + redirectTo(route) { + this.transitionTo(route); + }, }, }); diff --git a/src/api-umbrella/admin/app/routes/config/publish.js b/src/api-umbrella/admin/app/routes/config/publish.js index 781bf73f7..5b8fdc848 100644 --- a/src/api-umbrella/admin/app/routes/config/publish.js +++ b/src/api-umbrella/admin/app/routes/config/publish.js @@ -1,11 +1,12 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - model: function() { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + model() { return ic.ajax.request('/api-umbrella/v1/config/pending_changes'); }, - setupController: function(controller, model) { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); @@ -13,10 +14,10 @@ export default Ember.Route.extend({ }, actions: { - publish: function() { - var form = $('#publish_form'); + publish() { + let form = $('#publish_form'); - var button = $('#publish_button'); + let button = $('#publish_button'); button.button('loading'); ic.ajax.raw({ @@ -33,10 +34,10 @@ export default Ember.Route.extend({ this.refresh(); }, this), function(response) { - var message = '

Error

'; + let message = '

Error

'; try { - var errors = response.responseJSON.errors; - for(var prop in errors) { + let errors = response.responseJSON.errors; + for(let prop in errors) { message += prop + ': ' + errors[prop].join(', ') + '
'; } } catch(e) { diff --git a/src/api-umbrella/admin/app/routes/login.js b/src/api-umbrella/admin/app/routes/login.js new file mode 100644 index 000000000..469459d00 --- /dev/null +++ b/src/api-umbrella/admin/app/routes/login.js @@ -0,0 +1,14 @@ +import Ember from 'ember'; +import UnauthenticatedRouteMixin from 'ember-simple-auth/mixins/unauthenticated-route-mixin'; + +export default Ember.Route.extend(UnauthenticatedRouteMixin, { + activate() { + this.authenticate(); + }, + + authenticate() { + this.get('session').authenticate('authenticator:devise-server-side').catch((reason) => { + window.location.href = '/admin/login'; + }); + }, +}); diff --git a/src/api-umbrella/admin/app/routes/stats/base.js b/src/api-umbrella/admin/app/routes/stats/base.js index a5e04d370..2532671de 100644 --- a/src/api-umbrella/admin/app/routes/stats/base.js +++ b/src/api-umbrella/admin/app/routes/stats/base.js @@ -1,6 +1,7 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ +export default Ember.Route.extend(AuthenticatedRouteMixin, { defaultQueryParams: { tz: jstz.determine().name(), search: '', @@ -14,18 +15,18 @@ export default Ember.Route.extend({ input: 'select', operator: 'is_null', type: 'string', - value: null - }] - }) + value: null, + }], + }), }, - model: function(params) { + model(params) { this.controllerFor('application').set('isLoading', true); this.setQueryParams(params); }, - setupController: function(controller, model) { + setupController(controller, model) { if(!controller.get('query')) { controller.set('query', this.get('query')); } @@ -38,8 +39,8 @@ export default Ember.Route.extend({ $('ul.nav li.nav-analytics').addClass('active'); }, - setQueryParams: function(params) { - var activeQueryParams = {}; + setQueryParams(params) { + let activeQueryParams = {}; if(params && params.query) { activeQueryParams = $.deparam(params.query); } @@ -47,7 +48,7 @@ export default Ember.Route.extend({ _.defaults(activeQueryParams, this.defaultQueryParams); this.set('activeQueryParams', activeQueryParams); - var query = this.get('query'); + let query = this.get('query'); if(!query) { query = Ember.Object.create({ params: {} }); } @@ -56,11 +57,11 @@ export default Ember.Route.extend({ // values that differ. This is to cut down on unneeded observer // notifications. query.beginPropertyChanges(); - for(var prop in activeQueryParams) { + for(let prop in activeQueryParams) { if(activeQueryParams.hasOwnProperty(prop)) { - var paramKey = 'params.' + prop; - var existingValue = query.get(paramKey); - var newValue = activeQueryParams[prop]; + let paramKey = 'params.' + prop; + let existingValue = query.get(paramKey); + let newValue = activeQueryParams[prop]; if(newValue !== existingValue) { query.set(paramKey, newValue); @@ -75,9 +76,9 @@ export default Ember.Route.extend({ }, queryChange: function() { - var newQueryParams = this.get('query.params'); + let newQueryParams = this.get('query.params'); if(newQueryParams && !_.isEmpty(newQueryParams)) { - var activeQueryParams = this.get('activeQueryParams'); + let activeQueryParams = this.get('activeQueryParams'); if(!_.isEqual(newQueryParams, activeQueryParams)) { this.transitionTo('stats.logs', $.param(newQueryParams)); } @@ -85,7 +86,7 @@ export default Ember.Route.extend({ }.observes('query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), actions: { - error: function() { + error() { bootbox.alert('An unexpected error occurred. Please check your query and try again.'); }, }, diff --git a/src/api-umbrella/admin/app/routes/stats/drilldown-default.js b/src/api-umbrella/admin/app/routes/stats/drilldown-default.js index 619ed9772..79ee69d99 100644 --- a/src/api-umbrella/admin/app/routes/stats/drilldown-default.js +++ b/src/api-umbrella/admin/app/routes/stats/drilldown-default.js @@ -1,7 +1,7 @@ import Drilldown from './drilldown'; export default Drilldown.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/drilldown', { controller: 'statsDrilldownDefault' }); - } + }, }); diff --git a/src/api-umbrella/admin/app/routes/stats/drilldown.js b/src/api-umbrella/admin/app/routes/stats/drilldown.js index 25473d322..2b1ced3c5 100644 --- a/src/api-umbrella/admin/app/routes/stats/drilldown.js +++ b/src/api-umbrella/admin/app/routes/stats/drilldown.js @@ -1,14 +1,14 @@ import Base from './base'; export default Base.extend({ - init: function() { + init() { _.defaults(this.defaultQueryParams, { interval: 'day', prefix: '0/', }); }, - model: function(params) { + model(params) { this._super(params); if(this.validateOptions()) { return Admin.StatsDrilldown.find(this.get('query.params')); @@ -18,23 +18,23 @@ export default Base.extend({ }, queryChange: function() { - var newQueryParams = this.get('query.params'); + let newQueryParams = this.get('query.params'); if(newQueryParams && !_.isEmpty(newQueryParams)) { - var activeQueryParams = this.get('activeQueryParams'); + let activeQueryParams = this.get('activeQueryParams'); if(!_.isEqual(newQueryParams, activeQueryParams)) { this.transitionTo('stats.drilldown', $.param(newQueryParams)); } } }.observes('query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), - validateOptions: function() { - var valid = true; + validateOptions() { + let valid = true; - var interval = this.get('query.params.interval'); - var start = moment(this.get('query.params.start_at')); - var end = moment(this.get('query.params.end_at')); + let interval = this.get('query.params.interval'); + let start = moment(this.get('query.params.start_at')); + let end = moment(this.get('query.params.end_at')); - var range = end.unix() - start.unix(); + let range = end.unix() - start.unix(); switch(interval) { case 'minute': // 2 days maximum range diff --git a/src/api-umbrella/admin/app/routes/stats/logs-default.js b/src/api-umbrella/admin/app/routes/stats/logs-default.js index 652b2e3db..daa96d9fc 100644 --- a/src/api-umbrella/admin/app/routes/stats/logs-default.js +++ b/src/api-umbrella/admin/app/routes/stats/logs-default.js @@ -1,7 +1,7 @@ import Logs from './logs'; export default Logs.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/logs', { controller: 'statsLogsDefault' }); - } + }, }); diff --git a/src/api-umbrella/admin/app/routes/stats/logs.js b/src/api-umbrella/admin/app/routes/stats/logs.js index f536e6c86..ef0969dae 100644 --- a/src/api-umbrella/admin/app/routes/stats/logs.js +++ b/src/api-umbrella/admin/app/routes/stats/logs.js @@ -1,13 +1,13 @@ import Base from './base'; export default Base.extend({ - init: function() { + init() { _.defaults(this.defaultQueryParams, { interval: 'day', }); }, - model: function(params) { + model(params) { this._super(params); if(this.validateOptions()) { return Admin.StatsLogs.find(this.get('query.params')); @@ -17,23 +17,23 @@ export default Base.extend({ }, queryChange: function() { - var newQueryParams = this.get('query.params'); + let newQueryParams = this.get('query.params'); if(newQueryParams && !_.isEmpty(newQueryParams)) { - var activeQueryParams = this.get('activeQueryParams'); + let activeQueryParams = this.get('activeQueryParams'); if(!_.isEqual(newQueryParams, activeQueryParams)) { this.transitionTo('stats.logs', $.param(newQueryParams)); } } }.observes('query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), - validateOptions: function() { - var valid = true; + validateOptions() { + let valid = true; - var interval = this.get('query.params.interval'); - var start = moment(this.get('query.params.start_at')); - var end = moment(this.get('query.params.end_at')); + let interval = this.get('query.params.interval'); + let start = moment(this.get('query.params.start_at')); + let end = moment(this.get('query.params.end_at')); - var range = end.unix() - start.unix(); + let range = end.unix() - start.unix(); switch(interval) { case 'minute': // 2 days maximum range diff --git a/src/api-umbrella/admin/app/routes/stats/map-default.js b/src/api-umbrella/admin/app/routes/stats/map-default.js index 5d4954c9a..288198046 100644 --- a/src/api-umbrella/admin/app/routes/stats/map-default.js +++ b/src/api-umbrella/admin/app/routes/stats/map-default.js @@ -1,7 +1,7 @@ import Map from './map'; export default Map.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/map', { controller: 'statsMapDefault' }); - } + }, }); diff --git a/src/api-umbrella/admin/app/routes/stats/map.js b/src/api-umbrella/admin/app/routes/stats/map.js index 416a43c8b..7a11761ba 100644 --- a/src/api-umbrella/admin/app/routes/stats/map.js +++ b/src/api-umbrella/admin/app/routes/stats/map.js @@ -1,21 +1,21 @@ import Base from './base'; export default Base.extend({ - init: function() { + init() { _.defaults(this.defaultQueryParams, { region: 'world', }); }, - model: function(params) { + model(params) { this._super(params); return Admin.StatsMap.find(this.get('query.params')); }, queryChange: function() { - var newQueryParams = this.get('query.params'); + let newQueryParams = this.get('query.params'); if(newQueryParams && !_.isEmpty(newQueryParams)) { - var activeQueryParams = this.get('activeQueryParams'); + let activeQueryParams = this.get('activeQueryParams'); if(!_.isEqual(newQueryParams, activeQueryParams)) { this.transitionTo('stats.map', $.param(newQueryParams)); } diff --git a/src/api-umbrella/admin/app/routes/stats/users-default.js b/src/api-umbrella/admin/app/routes/stats/users-default.js index 19f00c458..db7468788 100644 --- a/src/api-umbrella/admin/app/routes/stats/users-default.js +++ b/src/api-umbrella/admin/app/routes/stats/users-default.js @@ -1,7 +1,7 @@ import Users from './users'; export default Users.extend({ - renderTemplate: function() { + renderTemplate() { this.render('stats/users', { controller: 'statsUsersDefault' }); - } + }, }); diff --git a/src/api-umbrella/admin/app/routes/stats/users.js b/src/api-umbrella/admin/app/routes/stats/users.js index 5596ca89a..1410ff234 100644 --- a/src/api-umbrella/admin/app/routes/stats/users.js +++ b/src/api-umbrella/admin/app/routes/stats/users.js @@ -1,15 +1,15 @@ import Base from './base'; export default Base.extend({ - model: function(params) { + model(params) { this._super(params); return {}; }, queryChange: function() { - var newQueryParams = this.get('query.params'); + let newQueryParams = this.get('query.params'); if(newQueryParams && !_.isEmpty(newQueryParams)) { - var activeQueryParams = this.get('activeQueryParams'); + let activeQueryParams = this.get('activeQueryParams'); if(!_.isEqual(newQueryParams, activeQueryParams)) { this.transitionTo('stats.users', $.param(newQueryParams)); } diff --git a/src/api-umbrella/admin/app/routes/website-backends/base.js b/src/api-umbrella/admin/app/routes/website-backends/base.js index e3a6b6ece..4577dc439 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/base.js +++ b/src/api-umbrella/admin/app/routes/website-backends/base.js @@ -1,7 +1,8 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ - setupController: function(controller, model) { +export default Ember.Route.extend(AuthenticatedRouteMixin, { + setupController(controller, model) { controller.set('model', model); $('ul.nav li').removeClass('active'); diff --git a/src/api-umbrella/admin/app/routes/website-backends/edit.js b/src/api-umbrella/admin/app/routes/website-backends/edit.js index e8b326dd7..59be99050 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/edit.js +++ b/src/api-umbrella/admin/app/routes/website-backends/edit.js @@ -1,11 +1,7 @@ -import Base from 'base'; +import Base from './base'; export default Base.extend({ - model: function(params) { - // Clear the record cache, so this is always fetched from the server (to - // account for two users simultaneously editing the same record). - Admin.WebsiteBackend.clearCache(); - - return Admin.WebsiteBackend.find(params.websiteBackendId); + model(params) { + return this.get('store').findRecord('website-backend', params.websiteBackendId); }, }); diff --git a/src/api-umbrella/admin/app/routes/website-backends/new.js b/src/api-umbrella/admin/app/routes/website-backends/new.js index 5dd451f63..1870b14f0 100644 --- a/src/api-umbrella/admin/app/routes/website-backends/new.js +++ b/src/api-umbrella/admin/app/routes/website-backends/new.js @@ -1,8 +1,8 @@ -import Base from 'base'; +import Base from './base'; export default Base.extend({ - model: function() { - return Admin.WebsiteBackend.create({ + model() { + return this.get('store').createRecord('website-backend', { serverPort: 80, }); }, diff --git a/src/api-umbrella/admin/app/serializers/api-user.js b/src/api-umbrella/admin/app/serializers/api-user.js new file mode 100644 index 000000000..a24769e8c --- /dev/null +++ b/src/api-umbrella/admin/app/serializers/api-user.js @@ -0,0 +1,8 @@ +import ApplicationSerializer from 'api-umbrella-admin/serializers/application'; +import EmbeddedRecordsMixin from 'ember-data/serializers/embedded-records-mixin'; + +export default ApplicationSerializer.extend(EmbeddedRecordsMixin, { + attrs: { + settings: { embedded: 'always' }, + }, +}); diff --git a/src/api-umbrella/admin/app/serializers/api/settings.js b/src/api-umbrella/admin/app/serializers/api/settings.js new file mode 100644 index 000000000..6ceb6089a --- /dev/null +++ b/src/api-umbrella/admin/app/serializers/api/settings.js @@ -0,0 +1,8 @@ +import ApplicationSerializer from 'api-umbrella-admin/serializers/application'; +import EmbeddedRecordsMixin from 'ember-data/serializers/embedded-records-mixin'; + +export default ApplicationSerializer.extend(EmbeddedRecordsMixin, { + attrs: { + rateLimits: { embedded: 'always' }, + }, +}); diff --git a/src/api-umbrella/admin/app/serializers/application.js b/src/api-umbrella/admin/app/serializers/application.js new file mode 100644 index 000000000..298607685 --- /dev/null +++ b/src/api-umbrella/admin/app/serializers/application.js @@ -0,0 +1,36 @@ +import Ember from 'ember'; +import JSONSerializer from 'ember-data/serializers/json'; + +export default JSONSerializer.extend({ + keyForAttribute(attr) { + return Ember.String.underscore(attr); + }, + + normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) { + let key = primaryModelClass.singlePayloadKey; + if(key) { + payload = payload[key]; + } + + return this._super(store, primaryModelClass, payload, id, requestType); + }, + + + normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) { + let key = primaryModelClass.arrayPayloadKey; + if(key) { + payload = payload[key]; + } + + return this._super(store, primaryModelClass, payload, id, requestType); + }, + + serializeIntoHash(hash, typeClass, snapshot, options) { + let key = typeClass.singlePayloadKey; + if(key) { + hash[key] = this.serialize(snapshot, options); + } else { + this._super(...arguments); + } + }, +}); diff --git a/src/api-umbrella/admin/app/styles/admin/base.scss b/src/api-umbrella/admin/app/styles/admin/base.scss index ebf4eeb57..bb21c87b6 100644 --- a/src/api-umbrella/admin/app/styles/admin/base.scss +++ b/src/api-umbrella/admin/app/styles/admin/base.scss @@ -36,8 +36,6 @@ ul.collection-list .collection-item { background-color: #e0e0e3; padding: 8px 16px; - -webkit-border-radius: 16px; - -moz-border-radius: 16px; border-radius: 16px; -webkit-box-shadow: 1px 1px 0px 0px rgba(0, 0, 0, 0.2); @@ -112,7 +110,7 @@ textarea.fill { } #results_table .table thead th { - color: $linkColor; + color: $link-color; } table.table thead .sorting, @@ -124,6 +122,7 @@ table.table thead .sorting_desc { table.table thead .sorting:after, table.table thead .sorting_asc:after, table.table thead .sorting_desc:after { + opacity: 1.0; font-family: FontAwesome; color: #ddd; margin-left: 8px; @@ -131,7 +130,7 @@ table.table thead .sorting_desc:after { table.table thead .sorting_asc:after, table.table thead .sorting_desc:after { - color: $linkColor; + color: $link-color; } table.table thead .sorting:after { @@ -153,7 +152,7 @@ div.dataTables_info { } div.dataTables_paginate { - text-align: center; + text-align: center !important; float: none; } @@ -171,15 +170,19 @@ div.dataTables_length { } } -div.dataTables_filter { - label { - float: left; - } -} - -.dataTables_wrapper { +div.dataTables_wrapper { position: relative; + div.dataTables_filter { + label { + float: left; + } + + input { + margin-left: 0px; + } + } + .blockUI { color: #999 !important; border: 1px solid #ddd !important; @@ -204,16 +207,7 @@ div.dataTables_filter { background-color: white; } -.loading-overlay { - position: fixed; - top: 0px; - left: 0px; - width: 100%; - height: 100%; - background-color: rgba(100, 100, 100, 0.5); - z-index: 999; -} - +/* .control-label { font-weight: bold; @@ -222,7 +216,9 @@ div.dataTables_filter { display: inline; } } +*/ +/* .control-group { margin-top: 5px; } @@ -230,18 +226,17 @@ div.dataTables_filter { .form-horizontal .control-group { margin-bottom: 10px; } +*/ -.form-horizontal.info .control-group { - margin: 3px 0px 5px 0px; -} - -.form-horizontal.info .control-label { - padding-top: 0px; +.form-horizontal.condensed .form-group { + margin-bottom: 5px; } +/* .modal form { margin: 0px; } +*/ fieldset { margin: 12px 0px 32px 0px; @@ -357,7 +352,7 @@ a { a.remove-action { font-size: 12px; - color: $red; + color: $brand-danger; } .table-actions { @@ -399,15 +394,18 @@ a:hover { cursor: pointer; } +/* .modal { width: 820px; margin-left: -410px; } +*/ .api-key { - font-family: $monoFontFamily; + font-family: $font-family-monospace; } +/* .selectize-control { width: 100%; } @@ -415,6 +413,7 @@ a:hover { .selectize-dropdown { z-index: 9999; } +*/ .record-details { text-align: right; @@ -440,16 +439,16 @@ td.reorder-handle { .reorder-placeholder th, .reorder-placeholder td { - background-color: $warningBackground !important; + background-color: $state-warning-bg !important; } .form-horizontal .ace_editor { height: 96px; - border: 1px solid $inputBorder; - @include border-radius($inputBorderRadius); + border: 1px solid $input-border; + border-radius: $input-border-radius; } -.control-group a[rel='tooltip'] { +.control-label a[rel='tooltip'] { margin-left: 8px; } @@ -525,7 +524,7 @@ td.reorder-handle { .table tr.line-bottom th, .table tr.line-bottom td { border-top: none; - border-bottom: 1px solid $tableBorder; + border-bottom: 1px solid $table-border-color; } .diff { diff --git a/src/api-umbrella/admin/app/styles/app.scss b/src/api-umbrella/admin/app/styles/app.scss index 32016291c..0ccc50446 100644 --- a/src/api-umbrella/admin/app/styles/app.scss +++ b/src/api-umbrella/admin/app/styles/app.scss @@ -1,12 +1,10 @@ +@import "bower_components/bootswatch/cerulean/_variables.scss"; @import "admin/variables"; -@import "bower_components/bootstrap-sass/vendor/assets/stylesheets/bootstrap.scss"; -@import "bower_components/bootstrap-sass/vendor/assets/stylesheets/bootstrap-responsive.scss"; -@import "bower_components/fontawesome/scss/font-awesome.scss"; +@import "bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss"; +@import "bower_components/bootswatch/cerulean/_bootswatch.scss"; +@import "bower_components/font-awesome/scss/font-awesome.scss"; -@import "vendor/jQuery-QueryBuilder/query-builder.css"; -@import "bower_components/qtip2/jquery.qtip.css"; -@import "bower_components/bootstrap-daterangepicker/daterangepicker-bs2.css"; -@import "bower_components/selectize/dist/css/selectize.default.css"; -@import "bower_components/pnotify/pnotify.core.css"; +@import "bower_components/jQuery-QueryBuilder/dist/scss/default.scss"; +@import "bower_components/bootstrap-daterangepicker/daterangepicker.scss"; @import "admin/base"; @import "admin/stats"; diff --git a/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs b/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs deleted file mode 100644 index 7fc1a6a6d..000000000 --- a/src/api-umbrella/admin/app/templates/admin-groups/-form.hbs +++ /dev/null @@ -1,63 +0,0 @@ -{{error-messages model=model}} - -{{#form-for model}} -
- {{input name - label='Group Name' - inputConfig='class:span6'}} - -
-
- -
-
- {{view 'checkbox-list' checkedValuesBinding='apiScopeIds' contentBinding='apiScopeOptions'}} -
-
- -
-
- -
-
- {{view 'checkbox-list' checkedValuesBinding='permissionIds' contentBinding='permissionOptions'}} -
-
- - {{#if id}} -
-
- -
-
- {{#if admins}} -
    - {{#each admins}} -
  • {{#link-to 'admins.edit' id}}{{username}}{{/link-to}} (Last Login: {{#if last_sign_in_at}}{{formatDate last_sign_in_at}}{{else}}Never{{/if}})
  • - {{/each}} -
- {{else}} - None - {{/if}} -
-
- {{/if}} -
- -
-
- -
-
- {{#if id}} - Created: {{formatDate createdAt}} by {{creator.username}}
- Last Updated: {{formatDate updatedAt}} by {{updater.username}}
- {{/if}} -
-
- {{#if id}} - - {{/if}} -{{/form-for}} diff --git a/src/api-umbrella/admin/app/templates/admin-groups/edit.hbs b/src/api-umbrella/admin/app/templates/admin-groups/edit.hbs index 276e5fc9d..a94787a54 100644 --- a/src/api-umbrella/admin/app/templates/admin-groups/edit.hbs +++ b/src/api-umbrella/admin/app/templates/admin-groups/edit.hbs @@ -1,2 +1,2 @@

Edit Admin Group

-{{partial "admin_groups/form"}} +{{admin-groups/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/admin-groups/index.hbs b/src/api-umbrella/admin/app/templates/admin-groups/index.hbs index 4e8fda713..331fe01e5 100644 --- a/src/api-umbrella/admin/app/templates/admin-groups/index.hbs +++ b/src/api-umbrella/admin/app/templates/admin-groups/index.hbs @@ -4,6 +4,4 @@ Add New Admin Group -
- {{view 'admin-groups/table' dataBinding='model.logs' queryBinding='query'}} -
+{{admin-groups/index-table}} diff --git a/src/api-umbrella/admin/app/templates/admin-groups/new.hbs b/src/api-umbrella/admin/app/templates/admin-groups/new.hbs index 3bb247524..8dd181f22 100644 --- a/src/api-umbrella/admin/app/templates/admin-groups/new.hbs +++ b/src/api-umbrella/admin/app/templates/admin-groups/new.hbs @@ -1,2 +1,2 @@

Add Admin Group

-{{partial "admin_groups/form"}} +{{admin-groups/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/admins/-form.hbs b/src/api-umbrella/admin/app/templates/admins/-form.hbs deleted file mode 100644 index 3d2d40a16..000000000 --- a/src/api-umbrella/admin/app/templates/admins/-form.hbs +++ /dev/null @@ -1,83 +0,0 @@ -{{error-messages model=model}} - -{{#form-for model}} -
- User Info - - {{input username - label='Username' - inputConfig='class:span6'}} - - {{input notes as='text' - label='Notes' - inputConfig='class:span6'}} - - {{#if email}} -
-
E-mail
-
{{email}}
-
- {{/if}} - {{#if name}} -
-
Name
-
{{name}}
-
- {{/if}} -
- - {{#if authenticationToken}} -
- Admin API Access - -
-
Admin API Token
-
{{authenticationToken}}
-
-
- {{/if}} - -
- Permissions - -
-
- -
-
- {{view 'checkbox-list' checkedValuesBinding='groupIds' contentBinding='groupOptions'}} -
-
- - {{#if currentAdmin.superuser}} -
-
- -
-
- {{/if}} - -
- -
-
- -
-
- {{#if id}} - Created: {{formatDate createdAt}} by {{creator.username}}
- Last Updated: {{formatDate updatedAt}} by {{updater.username}}
- Last Login: {{formatDate lastSignInAt}} from {{lastSignInIp}} via {{lastSignInProvider}}
- Logged in: {{signInCount}} times
- {{/if}} -
-
- {{#if id}} - - {{/if}} -{{/form-for}} diff --git a/src/api-umbrella/admin/app/templates/admins/edit.hbs b/src/api-umbrella/admin/app/templates/admins/edit.hbs index 2975beaaf..f3997b461 100644 --- a/src/api-umbrella/admin/app/templates/admins/edit.hbs +++ b/src/api-umbrella/admin/app/templates/admins/edit.hbs @@ -1,2 +1,2 @@

Edit Admin

-{{partial "admins/form"}} +{{admins/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/admins/index.hbs b/src/api-umbrella/admin/app/templates/admins/index.hbs index 90fdec5c4..8fe35dc67 100644 --- a/src/api-umbrella/admin/app/templates/admins/index.hbs +++ b/src/api-umbrella/admin/app/templates/admins/index.hbs @@ -4,10 +4,4 @@ Add New Admin -
- {{view 'admins/table' dataBinding='model.logs' queryBinding='query'}} -
- - +{{admins/index-table}} diff --git a/src/api-umbrella/admin/app/templates/admins/new.hbs b/src/api-umbrella/admin/app/templates/admins/new.hbs index 15cb985b1..c3908e98c 100644 --- a/src/api-umbrella/admin/app/templates/admins/new.hbs +++ b/src/api-umbrella/admin/app/templates/admins/new.hbs @@ -1,2 +1,2 @@

Add Admin

-{{partial "admins/form"}} +{{admins/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/api-scopes/-form.hbs b/src/api-umbrella/admin/app/templates/api-scopes/-form.hbs deleted file mode 100644 index cdb83dc53..000000000 --- a/src/api-umbrella/admin/app/templates/api-scopes/-form.hbs +++ /dev/null @@ -1,34 +0,0 @@ -{{error-messages model=model}} - -{{#form-for model}} -
- {{input name - label='Name' - inputConfig='class:span6'}} - - {{input host - label='Host' - inputConfig='class:span6'}} - - {{input pathPrefix - label='Path Prefix' - inputConfig='class:span6'}} -
- -
-
- -
-
- {{#if id}} - Created: {{formatDate createdAt}} by {{creator.username}}
- Last Updated: {{formatDate updatedAt}} by {{updater.username}}
- {{/if}} -
-
- {{#if id}} - - {{/if}} -{{/form-for}} diff --git a/src/api-umbrella/admin/app/templates/api-scopes/edit.hbs b/src/api-umbrella/admin/app/templates/api-scopes/edit.hbs index 4afcf8899..e56bdcbac 100644 --- a/src/api-umbrella/admin/app/templates/api-scopes/edit.hbs +++ b/src/api-umbrella/admin/app/templates/api-scopes/edit.hbs @@ -1,2 +1,2 @@

Edit API Scope

-{{partial "api_scopes/form"}} +{{api-scopes/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/api-scopes/index.hbs b/src/api-umbrella/admin/app/templates/api-scopes/index.hbs index a64037eb1..a671af47f 100644 --- a/src/api-umbrella/admin/app/templates/api-scopes/index.hbs +++ b/src/api-umbrella/admin/app/templates/api-scopes/index.hbs @@ -4,6 +4,4 @@ Add New API Scope -
- {{view 'api-scopes/table' dataBinding='model.logs' queryBinding='query'}} -
+{{api-scopes/index-table}} diff --git a/src/api-umbrella/admin/app/templates/api-scopes/new.hbs b/src/api-umbrella/admin/app/templates/api-scopes/new.hbs index 86320593a..91ad38a1e 100644 --- a/src/api-umbrella/admin/app/templates/api-scopes/new.hbs +++ b/src/api-umbrella/admin/app/templates/api-scopes/new.hbs @@ -1,2 +1,2 @@

Add API Scope

-{{partial "api_scopes/form"}} +{{api-scopes/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/api-users/-form.hbs b/src/api-umbrella/admin/app/templates/api-users/-form.hbs deleted file mode 100644 index 763d5e835..000000000 --- a/src/api-umbrella/admin/app/templates/api-users/-form.hbs +++ /dev/null @@ -1,120 +0,0 @@ -{{error-messages model=model}} - -{{#form-for model}} -
- User Info - - {{input email - label='E-mail' - inputConfig='class:span6'}} - {{input firstName - label='First Name' - inputConfig='class:span6'}} - {{input lastName - label='Last Name' - inputConfig='class:span6'}} - {{input useDescription as='text' - label='Purpose' - inputConfig='rows:3;class:span6'}} - - {{#if id}} -
-
Signed Up
-
{{formatDate createdAt}}
-
-
-
API Key
-
- {{#if apiKey}} - {{apiKeyPreview}} {{t 'admin.reveal_action'}} - {{else}} - {{apiKeyPreview}} - {{/if}} -
-
-
-
User ID
-
- {{id}} -
-
-
-
Registration Source
-
{{registrationSource}}
-
- {{else}} -
-
- -
-
-
-
- -
-
- {{/if}} -
- -
- Rate Limiting - {{render 'apis/settings_rate_limit_fields' settings}} - - {{input throttleByIp as='select' - value='throttleByIp' - label='Limit By' - collection='throttleByIpOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} -
- -
- Permissions - - {{input rolesString as='selectize' - collectionBinding='roleOptions' - optionValuePath='id' - optionLabelPath='id' - class='row-fluid' - label='Roles'}} - - {{render 'apis/settings_allowed_ips_fields' settings}} - {{render 'apis/settings_allowed_referers_fields' settings}} - - {{input enabled as='select' - value='enabled' - label='Account Enabled' - collection='enabledOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} -
- -
-
- -
-
- Created: {{formatDate createdAt}}{{#if creator}} by {{creator.username}}{{/if}}
- Last Updated: {{formatDate updatedAt}}{{#if updater}} by {{updater.username}}{{/if}}
- E-mail Verified: {{emailVerified}}
- {{#if registrationIp}} - Registration IP: {{registrationIp}}
- {{/if}} - {{#if registrationUserAgent}} - Registration User Agent: {{registrationUserAgent}}
- {{/if}} - {{#if registrationReferer}} - Registration Referer: {{registrationReferer}}
- {{/if}} - {{#if registrationOrigin}} - Registration Origin: {{registrationOrigin}}
- {{/if}} -
-
-{{/form-for}} diff --git a/src/api-umbrella/admin/app/templates/api-users/edit.hbs b/src/api-umbrella/admin/app/templates/api-users/edit.hbs index c111ac1e7..0094b8a28 100644 --- a/src/api-umbrella/admin/app/templates/api-users/edit.hbs +++ b/src/api-umbrella/admin/app/templates/api-users/edit.hbs @@ -1,2 +1,2 @@

Edit API User

-{{partial "api_users/form"}} +{{api-users/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/api-users/index.hbs b/src/api-umbrella/admin/app/templates/api-users/index.hbs index 5e9ea4323..d0a6cfce1 100644 --- a/src/api-umbrella/admin/app/templates/api-users/index.hbs +++ b/src/api-umbrella/admin/app/templates/api-users/index.hbs @@ -4,6 +4,4 @@ Add New API User -
- {{view 'api-users/table' dataBinding='model.logs' queryBinding='query'}} -
+{{api-users/index-table}} diff --git a/src/api-umbrella/admin/app/templates/api-users/new.hbs b/src/api-umbrella/admin/app/templates/api-users/new.hbs index 63fd04547..14910dcc2 100644 --- a/src/api-umbrella/admin/app/templates/api-users/new.hbs +++ b/src/api-umbrella/admin/app/templates/api-users/new.hbs @@ -1,2 +1,2 @@

Add API User

-{{partial "api_users/form"}} +{{api-users/record-form model=model action="redirectTo"}} diff --git a/src/api-umbrella/admin/app/templates/apis/-form.hbs b/src/api-umbrella/admin/app/templates/apis/-form.hbs index 948fb9d94..829a785ef 100644 --- a/src/api-umbrella/admin/app/templates/apis/-form.hbs +++ b/src/api-umbrella/admin/app/templates/apis/-form.hbs @@ -38,7 +38,7 @@ {{/if}} - +
@@ -192,12 +192,12 @@
- +
{{#if id}} - Created: {{formatDate createdAt}} by {{creator.username}}
- Last Updated: {{formatDate updatedAt}} by {{updater.username}}
+ Created: {{format-date createdAt}} by {{creator.username}}
+ Last Updated: {{format-date updatedAt}} by {{updater.username}}
{{/if}}
diff --git a/src/api-umbrella/admin/app/templates/apis/index.hbs b/src/api-umbrella/admin/app/templates/apis/index.hbs index 6f868fe61..de5efd8fe 100644 --- a/src/api-umbrella/admin/app/templates/apis/index.hbs +++ b/src/api-umbrella/admin/app/templates/apis/index.hbs @@ -4,9 +4,4 @@ Add API Backend -
- {{view 'apis/table'}} -
-
- -
+{{apis/index-table}} diff --git a/src/api-umbrella/admin/app/templates/apis/rewrites.hbs b/src/api-umbrella/admin/app/templates/apis/rewrites.hbs index 46fb70c1d..4443fa0aa 100644 --- a/src/api-umbrella/admin/app/templates/apis/rewrites.hbs +++ b/src/api-umbrella/admin/app/templates/apis/rewrites.hbs @@ -31,11 +31,11 @@
- +
{{#if reorderable}} - + {{/if}}
diff --git a/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs b/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs deleted file mode 100644 index 6b1d61b16..000000000 --- a/src/api-umbrella/admin/app/templates/apis/settings-rate-limit-fields.hbs +++ /dev/null @@ -1,95 +0,0 @@ -{{input rateLimitMode as='select' - value='rateLimitMode' - label='Rate Limit' - collection='rateLimitModeOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} - -{{#if isRateLimitModeCustom}} -
-
- - - - - - - - - - - - - {{#if rateLimits}} - {{#each rateLimits}} - - - - - - - - - {{/each}} - {{else}} - - {{/if}} - -
DurationLimit ByLimit - Primary - -
- {{input-field durationInUnits inputConfig='class:input-small rate-limit-duration-in-units'}} - - {{input-field durationUnits as='select' - value='durationUnits' - collection='controller.rateLimitDurationUnitOptions' - inputConfig='class:input-small rate-limit-duration-units' - optionValuePath='content.id' - optionLabelPath='content.name'}} - - {{input-field limitBy as='select' - value='limitBy' - collection='controller.rateLimitLimitByOptions' - inputConfig='class:input-small rate-limit-limit-by' - optionValuePath='content.id' - optionLabelPath='content.name'}} - -
- {{input-field limit inputConfig='class:input-small rate-limit-limit'}} - requests -
-
- {{view 'boolean-radio-button' - nameBinding='controller.uniqueSettingsId' - selectionBinding='responseHeaders' - value='true' - class='rate-limit-response-headers'}} - - Remove -
No custom rate limits have been added yet. Click "Add Rate Limit" below to get started.
- -
-
-{{/if}} - -{{#if disableApiKey}} - {{input anonymousRateLimitBehavior as='select' - value='anonymousRateLimitBehavior' - label='Anonymous Rate Limit Behavior' - collection='anonymousRateLimitBehaviorOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} - - {{input authenticatedRateLimitBehavior as='select' - value='authenticatedRateLimitBehavior' - label='Authenticated Rate Limit Behavior' - collection='authenticatedRateLimitBehaviorOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} -{{/if}} diff --git a/src/api-umbrella/admin/app/templates/apis/sub-settings.hbs b/src/api-umbrella/admin/app/templates/apis/sub-settings.hbs index bcf95598d..8131f0b15 100644 --- a/src/api-umbrella/admin/app/templates/apis/sub-settings.hbs +++ b/src/api-umbrella/admin/app/templates/apis/sub-settings.hbs @@ -26,11 +26,11 @@
- +
{{#if reorderable}} - + {{/if}}
diff --git a/src/api-umbrella/admin/app/templates/apis/url-matches.hbs b/src/api-umbrella/admin/app/templates/apis/url-matches.hbs index 920010c4e..08b5a388d 100644 --- a/src/api-umbrella/admin/app/templates/apis/url-matches.hbs +++ b/src/api-umbrella/admin/app/templates/apis/url-matches.hbs @@ -28,11 +28,11 @@
- +
{{#if reorderable}} - + {{/if}}
diff --git a/src/api-umbrella/admin/app/templates/application.hbs b/src/api-umbrella/admin/app/templates/application.hbs index 540836e15..b24ff18ae 100644 --- a/src/api-umbrella/admin/app/templates/application.hbs +++ b/src/api-umbrella/admin/app/templates/application.hbs @@ -1,39 +1,52 @@ -
@@ -53,7 +53,7 @@

{{t "admin.api.sub_settings.note"}}

- {{render "apis/sub_settings" subSettings}} + {{apis/sub-settings-table model=model}}
@@ -61,7 +61,7 @@

{{t "admin.api.rewrites.note"}}

- {{render "apis/rewrites" rewrites}} + {{apis/rewrite-table model=model}}
diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-form.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-form.hbs index 889d9eead..e379dee53 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-form.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-form.hbs @@ -1 +1,31 @@ -{{yield}} +{{#bs-modal open=openModal submitAction=(action "submit") closedAction=(action "closed") title=modalTitle body=false footer=false backdropClose=false size="lg"}} + {{#bs-modal-body}} +
+ {{#fields-for model=bufferedModel style="vertical" as |f|}} +
+
+ {{f.select-field "matcherType" label="Matcher Type" options=matcherTypeOptions}} +
+
+
+
+ {{f.select-field "httpMethod" label="HTTP Method" options=httpMethodOptions}} +
+
+ {{f.text-field "frontendMatcher" label="Frontend Matcher" placeholder="/example/"}} +
+
+
+ rewrite to +
+
+
+ {{f.text-field "backendReplacement" label="Backend Replacement" placeholder="/example/"}} +
+
+ {{/fields-for}} + +
+ {{/bs-modal-body}} + {{bs-modal-footer closeTitle="Cancel" submitTitle="OK"}} +{{/bs-modal}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-table.hbs index 889d9eead..f2b73c30c 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-table.hbs @@ -1 +1,43 @@ -{{yield}} +{{apis/rewrite-form model=rewriteModel collection=model.rewrites openModal=openModal}} + + + + + + + + + + + + + + {{#if model.rewrites}} + {{#each model.rewrites as |rewrite|}} + + + + + + + + + {{/each}} + {{else}} + + {{/if}} + +
Matching TypeHTTP MethodFromTo
{{rewrite.matcherType}}{{rewrite.httpMethod}}{{rewrite.frontendMatcher}}{{rewrite.backendReplacement}} + {{t "admin.edit"}} + {{t "admin.remove"}} +
{{t "admin.api.rewrites.empty_list" add=(t "admin.api.rewrites.add")}}
+
+
+ +
+
+ {{#if isReorderable}} + + {{/if}} +
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-settings/allowed-ips-fields.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/api-settings/allowed-ips-fields.hbs rename to src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-settings/allowed-referers-fields.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/api-settings/allowed-referers-fields.hbs rename to src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs new file mode 100644 index 000000000..7be777f62 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs @@ -0,0 +1,20 @@ +{{#fields-for model=model style="horizontal-wide-labels" as |f|}} + {{f.select-field "requireHttps" label=(t "admin.api.settings.require_https") tooltip=(t "admin.api.settings.require_https_tooltip_markdown") options=requireHttpsOptions}} + {{f.select-field "disableApiKey" label=(t "admin.api.settings.disable_api_key") options=disableApiKeyOptions}} + {{f.select-field "apiKeyVerificationLevel" label=(t "admin.api.settings.api_key_verification_level") options=apiKeyVerificationLevelOptions}} + {{f.selectize-field "requiredRolesString" label=(t "admin.api.settings.required_roles") tooltip=(t "admin.api.settings.required_roles_tooltip_markdown") options=roleOptions}} + {{#if isSubSettings}} + {{f.checkbox-field "requiredRolesOverride" label=(t "admin.api.settings.required_roles_override") tooltip=(t "admin.api.settings.required_roles_override_tooltip_markdown")}} + {{/if}} + {{f.checkboxes-field "passApiKey" label=(t "admin.api.settings.pass_api_key") tooltip=(t "admin.api.settings.pass_api_key_tooltip_markdown") options=passApiKeyOptions}} + + {{apis/settings/rate-limit-fields model=model style="horizontal-wide-labels"}} + {{#if model.disableApiKey}} + {{f.select-field "anonymousRateLimitBehavior" label="Anonymous Rate Limit Behavior" options=anonymousRateLimitBehaviorOptions}} + {{f.select-field "authenticatedRateLimitBehavior" label="Authenticated Rate Limit Behavior" options=authenticatedRateLimitBehaviorgt}} + {{/if}} + + {{f.select-field "requireHttps" label=(t "admin.api.settings.require_https") tooltip=(t "admin.api.settings.require_https_tooltip_markdown") options=requireHttpsOptions}} + {{f.textarea-field "defaultResponseHeadersString" label=(t "admin.api.settings.default_response_headers") tooltip=(t "admin.api.settings.default_response_headers_tooltip_markdown") placeholder="X-Example-Header: value"}} + {{f.textarea-field "overrideResponseHeadersString" label=(t "admin.api.settings.override_response_headers") tooltip=(t "admin.api.settings.override_response_headers_tooltip_markdown") placeholder="X-Example-Header: value"}} +{{/fields-for}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-settings/rate-limit-fields.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs similarity index 74% rename from src/api-umbrella/admin-ui/app/templates/components/api-settings/rate-limit-fields.hbs rename to src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs index a42d5c690..9dcf0a8b8 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/api-settings/rate-limit-fields.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs @@ -1,17 +1,8 @@ -
- -
- {{#x-select value=model.rateLimitMode id=(concat elementId '-rateLimitMode') class="form-control"}} - {{#each rateLimitModeOptions as |option|}} - {{#x-option value=option.id}}{{option.name}}{{/x-option}} - {{/each}} - {{/x-select}} -
-
+{{#fields-for model=model style=(if style style "horizontal") as |f|}} + {{f.select-field "rateLimitMode" label="Rate Limit" options=rateLimitModeOptions}} -{{#if model.isRateLimitModeCustom}} -
-
+ {{#if model.isRateLimitModeCustom}} + {{#form-fields/field-wrapper style=(if style style "horizontal")}} @@ -72,22 +63,6 @@
-
-
-{{/if}} - -{{#if model.disableApiKey}} - {{input anonymousRateLimitBehavior as='select' - value='anonymousRateLimitBehavior' - label='Anonymous Rate Limit Behavior' - collection='anonymousRateLimitBehaviorOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} - - {{input authenticatedRateLimitBehavior as='select' - value='authenticatedRateLimitBehavior' - label='Authenticated Rate Limit Behavior' - collection='authenticatedRateLimitBehaviorOptions' - optionValuePath='content.id' - optionLabelPath='content.name'}} -{{/if}} + {{/form-fields/field-wrapper}} + {{/if}} +{{/fields-for}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-form.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-form.hbs index 889d9eead..6bb880484 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-form.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-form.hbs @@ -1 +1,19 @@ -{{yield}} +{{#bs-modal open=openModal submitAction=(action "submit") closedAction=(action "closed") title=modalTitle body=false footer=false backdropClose=false size="lg"}} + {{#bs-modal-body}} +
+ {{#fields-for model=bufferedModel style="vertical" as |f|}} +
+
+ {{f.select-field "httpMethod" label="HTTP Method" options=httpMethodOptions}} +
+
+ {{f.text-field "regex" label="Regex" placeholder="^/example.*param1=.+"}} +
+
+ {{/fields-for}} + {{apis/settings/common-fields model=model.settings isSubSettings=true}} + +
+ {{/bs-modal-body}} + {{bs-modal-footer closeTitle="Cancel" submitTitle="OK"}} +{{/bs-modal}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-table.hbs index 889d9eead..7a0300616 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-table.hbs @@ -1 +1,38 @@ -{{yield}} +{{apis/sub-settings-form model=subSettingsModel collection=model.subSettings openModal=openModal}} + + + + + + + + + + + {{#if model.subSettings}} + {{#each model.subSettings as |subSettings|}} + + + + + + + {{/each}} + {{else}} + + {{/if}} + +
HTTP MethodURL Matcher
{{subSettings.httpMethod}}{{subSettings.regex}} + Edit + Remove +
No sub-URL request settings have been added yet. Click "Add URL Settings" below to get started.
+
+
+ +
+
+ {{#if isReorderable}} + + {{/if}} +
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-form.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-form.hbs index 889d9eead..26db82f43 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-form.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-form.hbs @@ -1 +1,33 @@ -{{yield}} +{{#bs-modal open=openModal submitAction=(action "submit") closedAction=(action "closed") title=modalTitle body=false footer=false backdropClose=false size="lg"}} + {{#bs-modal-body}} +
+ {{#fields-for model=bufferedModel style="vertical" as |f|}} +
+
+ {{f.text-field "frontendPrefix" label="Frontend Prefix" placeholder="/example/"}} +
+
+ +
rewrite to
+
+
+ {{f.text-field "backendPrefix" label="Frontend Prefix" placeholder="/example/"}} +
+
+ {{/fields-for}} + + {{#unless id}} +

+ Tip: We recommend using trailing slashes when configuring these URL prefixes when possible (for example, using /wind/ instead of /wind). While not necessary, this helps prevent future overlapping conflicts (for example, if someone later wants to set up /windmill/). +

+ {{/unless}} + +

Example:

+
Incoming Frontend Request: {{exampleIncomingUrl}}
+
Outgoing Backend Request: {{exampleOutgoingUrl}}
+ + +
+ {{/bs-modal-body}} + {{bs-modal-footer closeTitle="Cancel" submitTitle="OK"}} +{{/bs-modal}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-table.hbs index 889d9eead..03dac6363 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-table.hbs @@ -1 +1,41 @@ -{{yield}} +{{apis/url-match-form model=urlMatchModel collection=model.urlMatches apiExampleIncomingUrlRoot=model.exampleIncomingUrlRoot openModal=openModal}} + +
+ + + + + + + + + + + {{#if model.urlMatches}} + {{#each model.urlMatches as |urlMatch|}} + + + + + + + {{/each}} + {{else}} + + {{/if}} + +
Frontend PrefixBackend Prefix
{{urlMatch.frontendPrefix}}{{urlMatch.backendPrefixWithDefault}} + {{t "admin.edit"}} + {{t "admin.remove"}} +
{{t "admin.api.url_matches.empty_list" add=(t "admin.api.url_matches.add")}}
+
+
+ +
+
+ {{#if isReorderable}} + + {{/if}} +
+
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/field-wrapper.hbs b/src/api-umbrella/admin-ui/app/templates/components/form-fields/field-wrapper.hbs index 0b82782c3..77f9ba484 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/form-fields/field-wrapper.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/form-fields/field-wrapper.hbs @@ -1,26 +1,34 @@ -
- {{#if (eq style "horizontal")}} -
- - {{help-tooltip tooltip=tooltip}} +{{#if (eq style "horizontal")}} +
+
+
+ + {{help-tooltip tooltip=tooltip}} +
+
+ {{yield}} + {{form-fields/error-messages hasErrors=fieldErrorMessages errorMessages=fieldErrorMessages}} +
-
- {{yield}} - {{form-fields/error-messages hasErrors=fieldErrorMessages errorMessages=fieldErrorMessages}} +
+{{else if (eq style "horizontal-wide-labels")}} +
+
+
+ + {{help-tooltip tooltip=tooltip}} +
+
+ {{yield}} + {{form-fields/error-messages hasErrors=fieldErrorMessages errorMessages=fieldErrorMessages}} +
- {{else if (eq style "horizontal-wide-labels")}} -
- - {{help-tooltip tooltip=tooltip}} -
-
- {{yield}} - {{form-fields/error-messages hasErrors=fieldErrorMessages errorMessages=fieldErrorMessages}} -
- {{else}} +
+{{else}} +
{{help-tooltip tooltip=tooltip}} {{yield}} {{form-fields/error-messages hasErrors=fieldErrorMessages errorMessages=fieldErrorMessages}} - {{/if}} -
+
+{{/if}} diff --git a/src/api-umbrella/admin-ui/bower.json b/src/api-umbrella/admin-ui/bower.json index f523e683f..933955b8d 100644 --- a/src/api-umbrella/admin-ui/bower.json +++ b/src/api-umbrella/admin-ui/bower.json @@ -17,6 +17,7 @@ "inflection": "1.10.0", "jQuery-QueryBuilder": "2.3.3", "jquery-bbq-deparam": "1.2.1", + "jquery-ui": "1.12.0", "jquery.scrollTo": "2.1.2", "jsdiff": "2.2.2", "jstz-detect": "1.0.5", diff --git a/src/api-umbrella/admin-ui/ember-cli-build.js b/src/api-umbrella/admin-ui/ember-cli-build.js index 93985d160..aa62f493d 100644 --- a/src/api-umbrella/admin-ui/ember-cli-build.js +++ b/src/api-umbrella/admin-ui/ember-cli-build.js @@ -53,8 +53,14 @@ module.exports = function(defaults) { app.import('bower_components/qtip2/jquery.qtip.js'); app.import('bower_components/selectize/dist/css/selectize.default.css'); app.import('bower_components/selectize/dist/js/standalone/selectize.js'); + app.import('bower_components/jquery-ui/ui/version.js'); + app.import('bower_components/jquery-ui/ui/data.js'); + app.import('bower_components/jquery-ui/ui/ie.js'); + app.import('bower_components/jquery-ui/ui/scroll-parent.js'); + app.import('bower_components/jquery-ui/ui/widget.js'); + app.import('bower_components/jquery-ui/ui/widgets/mouse.js'); + app.import('bower_components/jquery-ui/ui/widgets/sortable.js'); app.import('vendor/dirtyforms/jquery.dirtyforms.js'); - app.import('vendor/jquery-ui-1.10.3.custom.js'); app.import('vendor/jquery.truncate.js'); return app.toTree(); diff --git a/src/api-umbrella/admin-ui/tests/integration/components/api-settings/allowed-referers-fields-test.js b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/allowed-ips-fields-test.js similarity index 63% rename from src/api-umbrella/admin-ui/tests/integration/components/api-settings/allowed-referers-fields-test.js rename to src/api-umbrella/admin-ui/tests/integration/components/apis/settings/allowed-ips-fields-test.js index a28a8d532..27518630d 100644 --- a/src/api-umbrella/admin-ui/tests/integration/components/api-settings/allowed-referers-fields-test.js +++ b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/allowed-ips-fields-test.js @@ -1,7 +1,7 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; -moduleForComponent('api-settings/allowed-referers-fields', 'Integration | Component | api settings/allowed referers fields', { +moduleForComponent('apis/settings/allowed-ips-fields', 'Integration | Component | apis/settings/allowed ips fields', { integration: true }); @@ -9,15 +9,15 @@ test('it renders', function(assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - this.render(hbs`{{api-settings/allowed-referers-fields}}`); + this.render(hbs`{{apis/settings/allowed-ips-fields}}`); assert.equal(this.$().text().trim(), ''); // Template block usage: this.render(hbs` - {{#api-settings/allowed-referers-fields}} + {{#apis/settings/allowed-ips-fields}} template block text - {{/api-settings/allowed-referers-fields}} + {{/apis/settings/allowed-ips-fields}} `); assert.equal(this.$().text().trim(), 'template block text'); diff --git a/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/allowed-referers-fields-test.js b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/allowed-referers-fields-test.js new file mode 100644 index 000000000..f11d1c69d --- /dev/null +++ b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/allowed-referers-fields-test.js @@ -0,0 +1,24 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('apis/settings/allowed-referers-fields', 'Integration | Component | apis/settings/allowed referers fields', { + integration: true +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{apis/settings/allowed-referers-fields}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + {{#apis/settings/allowed-referers-fields}} + template block text + {{/apis/settings/allowed-referers-fields}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff --git a/src/api-umbrella/admin-ui/tests/integration/components/api-settings/rate-limit-fields-test.js b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/common-fields-test.js similarity index 66% rename from src/api-umbrella/admin-ui/tests/integration/components/api-settings/rate-limit-fields-test.js rename to src/api-umbrella/admin-ui/tests/integration/components/apis/settings/common-fields-test.js index b1f99cfa5..6469cdf03 100644 --- a/src/api-umbrella/admin-ui/tests/integration/components/api-settings/rate-limit-fields-test.js +++ b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/common-fields-test.js @@ -1,7 +1,7 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; -moduleForComponent('api-settings/rate-limit-fields', 'Integration | Component | api settings/rate limit fields', { +moduleForComponent('apis/settings/common-fields', 'Integration | Component | apis/settings/common fields', { integration: true }); @@ -9,15 +9,15 @@ test('it renders', function(assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - this.render(hbs`{{api-settings/rate-limit-fields}}`); + this.render(hbs`{{apis/settings/common-fields}}`); assert.equal(this.$().text().trim(), ''); // Template block usage: this.render(hbs` - {{#api-settings/rate-limit-fields}} + {{#apis/settings/common-fields}} template block text - {{/api-settings/rate-limit-fields}} + {{/apis/settings/common-fields}} `); assert.equal(this.$().text().trim(), 'template block text'); diff --git a/src/api-umbrella/admin-ui/tests/integration/components/api-settings/allowed-ips-fields-test.js b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/rate-limit-fields-test.js similarity index 65% rename from src/api-umbrella/admin-ui/tests/integration/components/api-settings/allowed-ips-fields-test.js rename to src/api-umbrella/admin-ui/tests/integration/components/apis/settings/rate-limit-fields-test.js index e144be873..058e9e9dd 100644 --- a/src/api-umbrella/admin-ui/tests/integration/components/api-settings/allowed-ips-fields-test.js +++ b/src/api-umbrella/admin-ui/tests/integration/components/apis/settings/rate-limit-fields-test.js @@ -1,7 +1,7 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; -moduleForComponent('api-settings/allowed-ips-fields', 'Integration | Component | api settings/allowed ips fields', { +moduleForComponent('apis/settings/rate-limit-fields', 'Integration | Component | apis/settings/rate limit fields', { integration: true }); @@ -9,15 +9,15 @@ test('it renders', function(assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - this.render(hbs`{{api-settings/allowed-ips-fields}}`); + this.render(hbs`{{apis/settings/rate-limit-fields}}`); assert.equal(this.$().text().trim(), ''); // Template block usage: this.render(hbs` - {{#api-settings/allowed-ips-fields}} + {{#apis/settings/rate-limit-fields}} template block text - {{/api-settings/allowed-ips-fields}} + {{/apis/settings/rate-limit-fields}} `); assert.equal(this.$().text().trim(), 'template block text'); diff --git a/src/api-umbrella/admin-ui/tests/unit/helpers/guid-for-test.js b/src/api-umbrella/admin-ui/tests/unit/helpers/guid-for-test.js new file mode 100644 index 000000000..d40862ee3 --- /dev/null +++ b/src/api-umbrella/admin-ui/tests/unit/helpers/guid-for-test.js @@ -0,0 +1,10 @@ +import { guidFor } from 'api-umbrella-admin/helpers/guid-for'; +import { module, test } from 'qunit'; + +module('Unit | Helper | guid for'); + +// Replace this with your real tests. +test('it works', function(assert) { + let result = guidFor([42]); + assert.ok(result); +}); diff --git a/src/api-umbrella/admin-ui/tests/unit/mixins/sortable-test.js b/src/api-umbrella/admin-ui/tests/unit/mixins/sortable-test.js new file mode 100644 index 000000000..29153d998 --- /dev/null +++ b/src/api-umbrella/admin-ui/tests/unit/mixins/sortable-test.js @@ -0,0 +1,12 @@ +import Ember from 'ember'; +import SortableMixin from 'api-umbrella-admin/mixins/sortable'; +import { module, test } from 'qunit'; + +module('Unit | Mixin | sortable'); + +// Replace this with your real tests. +test('it works', function(assert) { + let SortableObject = Ember.Object.extend(SortableMixin); + let subject = SortableObject.create(); + assert.ok(subject); +}); diff --git a/src/api-umbrella/admin-ui/vendor/jquery-ui-1.10.3.custom.js b/src/api-umbrella/admin-ui/vendor/jquery-ui-1.10.3.custom.js deleted file mode 100755 index 8946b4247..000000000 --- a/src/api-umbrella/admin-ui/vendor/jquery-ui-1.10.3.custom.js +++ /dev/null @@ -1,2252 +0,0 @@ -/*! jQuery UI - v1.10.3 - 2013-09-02 -* http://jqueryui.com -* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.sortable.js -* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ - -(function( $, undefined ) { - -var uuid = 0, - runiqueId = /^ui-id-\d+$/; - -// $.ui might exist from components with no dependencies, e.g., $.ui.position -$.ui = $.ui || {}; - -$.extend( $.ui, { - version: "1.10.3", - - keyCode: { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 - } -}); - -// plugins -$.fn.extend({ - focus: (function( orig ) { - return function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - orig.apply( this, arguments ); - }; - })( $.fn.focus ), - - scrollParent: function() { - var scrollParent; - if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } - - return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent; - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - //
- value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } - } - elem = elem.parent(); - } - } - - return 0; - }, - - uniqueId: function() { - return this.each(function() { - if ( !this.id ) { - this.id = "ui-id-" + (++uuid); - } - }); - }, - - removeUniqueId: function() { - return this.each(function() { - if ( runiqueId.test( this.id ) ) { - $( this ).removeAttr( "id" ); - } - }); - } -}); - -// selectors -function focusable( element, isTabIndexNotNaN ) { - var map, mapName, img, - nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - map = element.parentNode; - mapName = map.name; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) ? - !element.disabled : - "a" === nodeName ? - element.href || isTabIndexNotNaN : - isTabIndexNotNaN) && - // the element and all of its ancestors must be visible - visible( element ); -} - -function visible( element ) { - return $.expr.filters.visible( element ) && - !$( element ).parents().addBack().filter(function() { - return $.css( this, "visibility" ) === "hidden"; - }).length; -} - -$.extend( $.expr[ ":" ], { - data: $.expr.createPseudo ? - $.expr.createPseudo(function( dataName ) { - return function( elem ) { - return !!$.data( elem, dataName ); - }; - }) : - // support: jQuery <1.8 - function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, - - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, - - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); - -// support: jQuery <1.8 -if ( !$( "" ).outerWidth( 1 ).jquery ) { - $.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; - if ( border ) { - size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; - } - }); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); - }; - - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); - }; - }); -} - -// support: jQuery <1.8 -if ( !$.fn.addBack ) { - $.fn.addBack = function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - }; -} - -// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) -if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { - $.fn.removeData = (function( removeData ) { - return function( key ) { - if ( arguments.length ) { - return removeData.call( this, $.camelCase( key ) ); - } else { - return removeData.call( this ); - } - }; - })( $.fn.removeData ); -} - - - - - -// deprecated -$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); - -$.support.selectstart = "onselectstart" in document.createElement( "div" ); -$.fn.extend({ - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, - - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - } -}); - -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use $.widget() extensions instead. - plugin: { - add: function( module, option, set ) { - var i, - proto = $.ui[ module ].prototype; - for ( i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var i, - set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { - return; - } - - for ( i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } - }, - - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; - } - - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; - } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; - } -}); - -})( jQuery ); -(function( $, undefined ) { - -var uuid = 0, - slice = Array.prototype.slice, - _cleanData = $.cleanData; -$.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); -}; - -$.widget = function( name, base, prototype ) { - var fullName, existingConstructor, constructor, basePrototype, - // proxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - proxiedPrototype = {}, - namespace = name.split( "." )[ 0 ]; - - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - // extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - // copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - // track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( !$.isFunction( value ) ) { - proxiedPrototype[ prop ] = value; - return; - } - proxiedPrototype[ prop ] = (function() { - var _super = function() { - return base.prototype[ prop ].apply( this, arguments ); - }, - _superApply = function( args ) { - return base.prototype[ prop ].apply( this, args ); - }; - return function() { - var __super = this._super, - __superApply = this._superApply, - returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - }); - constructor.prototype = $.widget.extend( basePrototype, { - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); - }); - // remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); -}; - -$.widget.extend = function( target ) { - var input = slice.call( arguments, 1 ), - inputIndex = 0, - inputLength = input.length, - key, - value; - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; -}; - -$.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.widget.extend.apply( null, [ options ].concat(args) ) : - options; - - if ( isMethodCall ) { - this.each(function() { - var methodValue, - instance = $.data( this, fullName ); - if ( !instance ) { - return $.error( "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + " widget instance" ); - } - methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, fullName, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( /* options, element */ ) {}; -$.Widget._childConstructors = []; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
", - options: { - disabled: false, - - // callbacks - create: null - }, - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = uuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - }); - this.document = $( element.style ? - // element within the document - element.ownerDocument : - // element is window or document - element.document || element ); - this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); - } - - this._create(); - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - _getCreateOptions: $.noop, - _getCreateEventData: $.noop, - _create: $.noop, - _init: $.noop, - - destroy: function() { - this._destroy(); - // we can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .unbind( this.eventNamespace ) - // 1.9 BC for #7810 - // TODO remove dual storage - .removeData( this.widgetName ) - .removeData( this.widgetFullName ) - // support: jquery <1.6.3 - // http://bugs.jquery.com/ticket/9413 - .removeData( $.camelCase( this.widgetFullName ) ); - this.widget() - .unbind( this.eventNamespace ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetFullName + "-disabled " + - "ui-state-disabled" ); - - // clean up events and states - this.bindings.unbind( this.eventNamespace ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - }, - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key, - parts, - curOption, - i; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( value === undefined ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( value === undefined ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) - .attr( "aria-disabled", value ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement, - instance = this; - - // no suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // no element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - // accept selectors, DOM elements - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - // allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^(\w+)\s*(.*)$/ ), - eventName = match[1] + instance.eventNamespace, - selector = match[2]; - if ( selector ) { - delegateElement.delegate( selector, eventName, handlerProxy ); - } else { - element.bind( eventName, handlerProxy ); - } - }); - }, - - _off: function( element, eventName ) { - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; - element.unbind( eventName ).undelegate( eventName ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - $( event.currentTarget ).addClass( "ui-state-hover" ); - }, - mouseleave: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-hover" ); - } - }); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - $( event.currentTarget ).addClass( "ui-state-focus" ); - }, - focusout: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-focus" ); - } - }); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[0], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } -}; - -$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - var hasOptions, - effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - if ( options.delay ) { - element.delay( options.delay ); - } - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue(function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - }); - } - }; -}); - -})( jQuery ); -(function( $, undefined ) { - -var mouseHandled = false; -$( document ).mouseup( function() { - mouseHandled = false; -}); - -$.widget("ui.mouse", { - version: "1.10.3", - options: { - cancel: "input,textarea,button,select,option", - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var that = this; - - this.element - .bind("mousedown."+this.widgetName, function(event) { - return that._mouseDown(event); - }) - .bind("click."+this.widgetName, function(event) { - if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { - $.removeData(event.target, that.widgetName + ".preventClickEvent"); - event.stopImmediatePropagation(); - return false; - } - }); - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind("."+this.widgetName); - if ( this._mouseMoveDelegate ) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); - } - }, - - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - if( mouseHandled ) { return; } - - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); - - this._mouseDownEvent = event; - - var that = this, - btnIsLeft = (event.which === 1), - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - that.mouseDelayMet = true; - }, this.options.delay); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; - } - } - - // Click event may never have fired (Gecko & Opera) - if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { - $.removeData(event.target, this.widgetName + ".preventClickEvent"); - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return that._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return that._mouseUp(event); - }; - $(document) - .bind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .bind("mouseup."+this.widgetName, this._mouseUpDelegate); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { - return this._mouseUp(event); - } - - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); - } - - return !this._mouseStarted; - }, - - _mouseUp: function(event) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - - if (event.target === this._mouseDownEvent.target) { - $.data(event.target, this.widgetName + ".preventClickEvent", true); - } - - this._mouseStop(event); - } - - return false; - }, - - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function(/* event */) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(/* event */) {}, - _mouseDrag: function(/* event */) {}, - _mouseStop: function(/* event */) {}, - _mouseCapture: function(/* event */) { return true; } -}); - -})(jQuery); -(function( $, undefined ) { - -/*jshint loopfunc: true */ - -function isOverAxis( x, reference, size ) { - return ( x > reference ) && ( x < ( reference + size ) ); -} - -function isFloating(item) { - return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display")); -} - -$.widget("ui.sortable", $.ui.mouse, { - version: "1.10.3", - widgetEventPrefix: "sort", - ready: false, - options: { - appendTo: "parent", - axis: false, - connectWith: false, - containment: false, - cursor: "auto", - cursorAt: false, - dropOnEmpty: true, - forcePlaceholderSize: false, - forceHelperSize: false, - grid: false, - handle: false, - helper: "original", - items: "> *", - opacity: false, - placeholder: false, - revert: false, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - scope: "default", - tolerance: "intersect", - zIndex: 1000, - - // callbacks - activate: null, - beforeStop: null, - change: null, - deactivate: null, - out: null, - over: null, - receive: null, - remove: null, - sort: null, - start: null, - stop: null, - update: null - }, - _create: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false; - - //Let's determine the parent's offset - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this._mouseInit(); - - //We're ready to go - this.ready = true; - - }, - - _destroy: function() { - this.element - .removeClass("ui-sortable ui-sortable-disabled"); - this._mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) { - this.items[i].item.removeData(this.widgetName + "-item"); - } - - return this; - }, - - _setOption: function(key, value){ - if ( key === "disabled" ) { - this.options[ key ] = value; - - this.widget().toggleClass( "ui-sortable-disabled", !!value ); - } else { - // Don't call widget base _setOption for disable as it adds ui-state-disabled class - $.Widget.prototype._setOption.apply(this, arguments); - } - }, - - _mouseCapture: function(event, overrideHandle) { - var currentItem = null, - validHandle = false, - that = this; - - if (this.reverting) { - return false; - } - - if(this.options.disabled || this.options.type === "static") { - return false; - } - - //We have to refresh the items data once first - this._refreshItems(event); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - $(event.target).parents().each(function() { - if($.data(this, that.widgetName + "-item") === that) { - currentItem = $(this); - return false; - } - }); - if($.data(event.target, that.widgetName + "-item") === that) { - currentItem = $(event.target); - } - - if(!currentItem) { - return false; - } - if(this.options.handle && !overrideHandle) { - $(this.options.handle, currentItem).find("*").addBack().each(function() { - if(this === event.target) { - validHandle = true; - } - }); - if(!validHandle) { - return false; - } - } - - this.currentItem = currentItem; - this._removeCurrentsFromItems(); - return true; - - }, - - _mouseStart: function(event, overrideHandle, noActivation) { - - var i, body, - o = this.options; - - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = this._createHelper(event); - - //Cache the helper size - this._cacheHelperProportions(); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Get the next scrolling parent - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.currentItem.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - // Only after we got the offset, we can change the helper's position to absolute - // TODO: Still need to figure out a way to make relative sorting possible - this.helper.css("position", "absolute"); - this.cssPosition = this.helper.css("position"); - - //Generate the original position - this.originalPosition = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if "cursorAt" is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Cache the former DOM position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; - - //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way - if(this.helper[0] !== this.currentItem[0]) { - this.currentItem.hide(); - } - - //Create the placeholder - this._createPlaceholder(); - - //Set a containment if given in the options - if(o.containment) { - this._setContainment(); - } - - if( o.cursor && o.cursor !== "auto" ) { // cursor option - body = this.document.find( "body" ); - - // support: IE - this.storedCursor = body.css( "cursor" ); - body.css( "cursor", o.cursor ); - - this.storedStylesheet = $( "" ).appendTo( body ); - } - - if(o.opacity) { // opacity option - if (this.helper.css("opacity")) { - this._storedOpacity = this.helper.css("opacity"); - } - this.helper.css("opacity", o.opacity); - } - - if(o.zIndex) { // zIndex option - if (this.helper.css("zIndex")) { - this._storedZIndex = this.helper.css("zIndex"); - } - this.helper.css("zIndex", o.zIndex); - } - - //Prepare scrolling - if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { - this.overflowOffset = this.scrollParent.offset(); - } - - //Call callbacks - this._trigger("start", event, this._uiHash()); - - //Recache the helper size - if(!this._preserveHelperProportions) { - this._cacheHelperProportions(); - } - - - //Post "activate" events to possible containers - if( !noActivation ) { - for ( i = this.containers.length - 1; i >= 0; i-- ) { - this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); - } - } - - //Prepare possible droppables - if($.ui.ddmanager) { - $.ui.ddmanager.current = this; - } - - if ($.ui.ddmanager && !o.dropBehaviour) { - $.ui.ddmanager.prepareOffsets(this, event); - } - - this.dragging = true; - - this.helper.addClass("ui-sortable-helper"); - this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - }, - - _mouseDrag: function(event) { - var i, item, itemElement, intersection, - o = this.options, - scrolled = false; - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - if (!this.lastPositionAbs) { - this.lastPositionAbs = this.positionAbs; - } - - //Do scrolling - if(this.options.scroll) { - if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { - - if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; - } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) { - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; - } - - if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; - } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) { - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; - } - - } else { - - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { - $.ui.ddmanager.prepareOffsets(this, event); - } - } - - //Regenerate the absolute position used for position checks - this.positionAbs = this._convertPositionTo("absolute"); - - //Set the helper position - if(!this.options.axis || this.options.axis !== "y") { - this.helper[0].style.left = this.position.left+"px"; - } - if(!this.options.axis || this.options.axis !== "x") { - this.helper[0].style.top = this.position.top+"px"; - } - - //Rearrange - for (i = this.items.length - 1; i >= 0; i--) { - - //Cache variables and intersection, continue if no intersection - item = this.items[i]; - itemElement = item.item[0]; - intersection = this._intersectsWithPointer(item); - if (!intersection) { - continue; - } - - // Only put the placeholder inside the current Container, skip all - // items form other containers. This works because when moving - // an item from one container to another the - // currentContainer is switched before the placeholder is moved. - // - // Without this moving items in "sub-sortables" can cause the placeholder to jitter - // beetween the outer and inner container. - if (item.instance !== this.currentContainer) { - continue; - } - - // cannot intersect with itself - // no useless actions that have been done before - // no action if the item moved is the parent of the item checked - if (itemElement !== this.currentItem[0] && - this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement && - !$.contains(this.placeholder[0], itemElement) && - (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true) - ) { - - this.direction = intersection === 1 ? "down" : "up"; - - if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) { - this._rearrange(event, item); - } else { - break; - } - - this._trigger("change", event, this._uiHash()); - break; - } - } - - //Post events to containers - this._contactContainers(event); - - //Interconnect with droppables - if($.ui.ddmanager) { - $.ui.ddmanager.drag(this, event); - } - - //Call callbacks - this._trigger("sort", event, this._uiHash()); - - this.lastPositionAbs = this.positionAbs; - return false; - - }, - - _mouseStop: function(event, noPropagation) { - - if(!event) { - return; - } - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) { - $.ui.ddmanager.drop(this, event); - } - - if(this.options.revert) { - var that = this, - cur = this.placeholder.offset(), - axis = this.options.axis, - animation = {}; - - if ( !axis || axis === "x" ) { - animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft); - } - if ( !axis || axis === "y" ) { - animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop); - } - this.reverting = true; - $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() { - that._clear(event); - }); - } else { - this._clear(event, noPropagation); - } - - return false; - - }, - - cancel: function() { - - if(this.dragging) { - - this._mouseUp({ target: null }); - - if(this.options.helper === "original") { - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - //Post deactivating events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i]._trigger("deactivate", null, this._uiHash(this)); - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", null, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - if (this.placeholder) { - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - if(this.placeholder[0].parentNode) { - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - } - if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) { - this.helper.remove(); - } - - $.extend(this, { - helper: null, - dragging: false, - reverting: false, - _noFinalSort: null - }); - - if(this.domPosition.prev) { - $(this.domPosition.prev).after(this.currentItem); - } else { - $(this.domPosition.parent).prepend(this.currentItem); - } - } - - return this; - - }, - - serialize: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected), - str = []; - o = o || {}; - - $(items).each(function() { - var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/)); - if (res) { - str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2])); - } - }); - - if(!str.length && o.key) { - str.push(o.key + "="); - } - - return str.join("&"); - - }, - - toArray: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected), - ret = []; - - o = o || {}; - - items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); }); - return ret; - - }, - - /* Be careful with the following core functions */ - _intersectsWith: function(item) { - - var x1 = this.positionAbs.left, - x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, - y2 = y1 + this.helperProportions.height, - l = item.left, - r = l + item.width, - t = item.top, - b = t + item.height, - dyClick = this.offset.click.top, - dxClick = this.offset.click.left, - isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ), - isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ), - isOverElement = isOverElementHeight && isOverElementWidth; - - if ( this.options.tolerance === "pointer" || - this.options.forcePointerForContainers || - (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"]) - ) { - return isOverElement; - } else { - - return (l < x1 + (this.helperProportions.width / 2) && // Right Half - x2 - (this.helperProportions.width / 2) < r && // Left Half - t < y1 + (this.helperProportions.height / 2) && // Bottom Half - y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - }, - - _intersectsWithPointer: function(item) { - - var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), - isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), - isOverElement = isOverElementHeight && isOverElementWidth, - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (!isOverElement) { - return false; - } - - return this.floating ? - ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 ) - : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) ); - - }, - - _intersectsWithSides: function(item) { - - var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), - isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (this.floating && horizontalDirection) { - return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf)); - } else { - return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf)); - } - - }, - - _getDragVerticalDirection: function() { - var delta = this.positionAbs.top - this.lastPositionAbs.top; - return delta !== 0 && (delta > 0 ? "down" : "up"); - }, - - _getDragHorizontalDirection: function() { - var delta = this.positionAbs.left - this.lastPositionAbs.left; - return delta !== 0 && (delta > 0 ? "right" : "left"); - }, - - refresh: function(event) { - this._refreshItems(event); - this.refreshPositions(); - return this; - }, - - _connectWith: function() { - var options = this.options; - return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith; - }, - - _getItemsAsjQuery: function(connected) { - - var i, j, cur, inst, - items = [], - queries = [], - connectWith = this._connectWith(); - - if(connectWith && connected) { - for (i = connectWith.length - 1; i >= 0; i--){ - cur = $(connectWith[i]); - for ( j = cur.length - 1; j >= 0; j--){ - inst = $.data(cur[j], this.widgetFullName); - if(inst && inst !== this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]); - } - } - } - } - - queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]); - - for (i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - items.push(this); - }); - } - - return $(items); - - }, - - _removeCurrentsFromItems: function() { - - var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); - - this.items = $.grep(this.items, function (item) { - for (var j=0; j < list.length; j++) { - if(list[j] === item.item[0]) { - return false; - } - } - return true; - }); - - }, - - _refreshItems: function(event) { - - this.items = []; - this.containers = [this]; - - var i, j, cur, inst, targetData, _queries, item, queriesLength, - items = this.items, - queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]], - connectWith = this._connectWith(); - - if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down - for (i = connectWith.length - 1; i >= 0; i--){ - cur = $(connectWith[i]); - for (j = cur.length - 1; j >= 0; j--){ - inst = $.data(cur[j], this.widgetFullName); - if(inst && inst !== this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - } - } - } - - for (i = queries.length - 1; i >= 0; i--) { - targetData = queries[i][1]; - _queries = queries[i][0]; - - for (j=0, queriesLength = _queries.length; j < queriesLength; j++) { - item = $(_queries[j]); - - item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager) - - items.push({ - item: item, - instance: targetData, - width: 0, height: 0, - left: 0, top: 0 - }); - } - } - - }, - - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent && this.helper) { - this.offset.parent = this._getParentOffset(); - } - - var i, item, t, p; - - for (i = this.items.length - 1; i >= 0; i--){ - item = this.items[i]; - - //We ignore calculating positions of all connected containers when we're not over them - if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) { - continue; - } - - t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; - - if (!fast) { - item.width = t.outerWidth(); - item.height = t.outerHeight(); - } - - p = t.offset(); - item.left = p.left; - item.top = p.top; - } - - if(this.options.custom && this.options.custom.refreshContainers) { - this.options.custom.refreshContainers.call(this); - } else { - for (i = this.containers.length - 1; i >= 0; i--){ - p = this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - } - } - - return this; - }, - - _createPlaceholder: function(that) { - that = that || this; - var className, - o = that.options; - - if(!o.placeholder || o.placeholder.constructor === String) { - className = o.placeholder; - o.placeholder = { - element: function() { - - var nodeName = that.currentItem[0].nodeName.toLowerCase(), - element = $( "<" + nodeName + ">", that.document[0] ) - .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder") - .removeClass("ui-sortable-helper"); - - if ( nodeName === "tr" ) { - that.currentItem.children().each(function() { - $( " ", that.document[0] ) - .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) - .appendTo( element ); - }); - } else if ( nodeName === "img" ) { - element.attr( "src", that.currentItem.attr( "src" ) ); - } - - if ( !className ) { - element.css( "visibility", "hidden" ); - } - - return element; - }, - update: function(container, p) { - - // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that - // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified - if(className && !o.forcePlaceholderSize) { - return; - } - - //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item - if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); } - if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); } - } - }; - } - - //Create the placeholder - that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem)); - - //Append it after the actual current item - that.currentItem.after(that.placeholder); - - //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) - o.placeholder.update(that, that.placeholder); - - }, - - _contactContainers: function(event) { - var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating, - innermostContainer = null, - innermostIndex = null; - - // get innermost container that intersects with item - for (i = this.containers.length - 1; i >= 0; i--) { - - // never consider a container that's located within the item itself - if($.contains(this.currentItem[0], this.containers[i].element[0])) { - continue; - } - - if(this._intersectsWith(this.containers[i].containerCache)) { - - // if we've already found a container and it's more "inner" than this, then continue - if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) { - continue; - } - - innermostContainer = this.containers[i]; - innermostIndex = i; - - } else { - // container doesn't intersect. trigger "out" event if necessary - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", event, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - // if no intersecting containers found, return - if(!innermostContainer) { - return; - } - - // move the item into the container if it's not there already - if(this.containers.length === 1) { - if (!this.containers[innermostIndex].containerCache.over) { - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - } else { - - //When entering a new container, we will find the item with the least distance and append our item near it - dist = 10000; - itemWithLeastDistance = null; - floating = innermostContainer.floating || isFloating(this.currentItem); - posProperty = floating ? "left" : "top"; - sizeProperty = floating ? "width" : "height"; - base = this.positionAbs[posProperty] + this.offset.click[posProperty]; - for (j = this.items.length - 1; j >= 0; j--) { - if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) { - continue; - } - if(this.items[j].item[0] === this.currentItem[0]) { - continue; - } - if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) { - continue; - } - cur = this.items[j].item.offset()[posProperty]; - nearBottom = false; - if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){ - nearBottom = true; - cur += this.items[j][sizeProperty]; - } - - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - this.direction = nearBottom ? "up": "down"; - } - } - - //Check if dropOnEmpty is enabled - if(!itemWithLeastDistance && !this.options.dropOnEmpty) { - return; - } - - if(this.currentContainer === this.containers[innermostIndex]) { - return; - } - - itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); - this._trigger("change", event, this._uiHash()); - this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); - this.currentContainer = this.containers[innermostIndex]; - - //Update the placeholder - this.options.placeholder.update(this.currentContainer, this.placeholder); - - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - - - }, - - _createHelper: function(event) { - - var o = this.options, - helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem); - - //Add the helper to the DOM if that didn't happen already - if(!helper.parents("body").length) { - $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); - } - - if(helper[0] === this.currentItem[0]) { - this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; - } - - if(!helper[0].style.width || o.forceHelperSize) { - helper.width(this.currentItem.width()); - } - if(!helper[0].style.height || o.forceHelperSize) { - helper.height(this.currentItem.height()); - } - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj === "string") { - obj = obj.split(" "); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ("left" in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ("right" in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ("top" in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ("bottom" in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - // This needs to be actually done for all browsers, since pageX/pageY includes this information - // with an ugly IE fix - if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { - po = { top: 0, left: 0 }; - } - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition === "relative") { - var p = this.currentItem.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var ce, co, over, - o = this.options; - if(o.containment === "parent") { - o.containment = this.helper[0].parentNode; - } - if(o.containment === "document" || o.containment === "window") { - this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left, - ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - } - - if(!(/^(document|window|parent)$/).test(o.containment)) { - ce = $(o.containment)[0]; - co = $(o.containment).offset(); - over = ($(ce).css("overflow") !== "hidden"); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, - co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, - co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - ]; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) { - pos = this.position; - } - var mod = d === "absolute" ? 1 : -1, - scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, - scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top + // The absolute mouse position - this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left + // The absolute mouse position - this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var top, left, - o = this.options, - pageX = event.pageX, - pageY = event.pageY, - scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - // This is another very weird special case that only happens for relative elements: - // 1. If the css position is relative - // 2. and the scroll parent is the document or similar to the offset parent - // we have to refresh the relative offset during the scroll so there are no jumps - if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) { - this.offset.relative = this._getRelativeOffset(); - } - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - - if(this.containment) { - if(event.pageX - this.offset.click.left < this.containment[0]) { - pageX = this.containment[0] + this.offset.click.left; - } - if(event.pageY - this.offset.click.top < this.containment[1]) { - pageY = this.containment[1] + this.offset.click.top; - } - if(event.pageX - this.offset.click.left > this.containment[2]) { - pageX = this.containment[2] + this.offset.click.left; - } - if(event.pageY - this.offset.click.top > this.containment[3]) { - pageY = this.containment[3] + this.offset.click.top; - } - } - - if(o.grid) { - top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; - pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; - pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY - // The absolute mouse position - this.offset.click.top - // Click offset (relative to the element) - this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.top + // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX - // The absolute mouse position - this.offset.click.left - // Click offset (relative to the element) - this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.left + // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _rearrange: function(event, i, a, hardRefresh) { - - a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling)); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var counter = this.counter; - - this._delay(function() { - if(counter === this.counter) { - this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - } - }); - - }, - - _clear: function(event, noPropagation) { - - this.reverting = false; - // We delay all events that have to be triggered to after the point where the placeholder has been removed and - // everything else normalized again - var i, - delayedTriggers = []; - - // We first have to update the dom position of the actual currentItem - // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) - if(!this._noFinalSort && this.currentItem.parent().length) { - this.placeholder.before(this.currentItem); - } - this._noFinalSort = null; - - if(this.helper[0] === this.currentItem[0]) { - for(i in this._storedCSS) { - if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") { - this._storedCSS[i] = ""; - } - } - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - if(this.fromOutside && !noPropagation) { - delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); - } - if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) { - delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed - } - - // Check if the items Container has Changed and trigger appropriate - // events. - if (this !== this.currentContainer) { - if(!noPropagation) { - delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); - delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); - delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); - } - } - - - //Post events to containers - for (i = this.containers.length - 1; i >= 0; i--){ - if(!noPropagation) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - } - if(this.containers[i].containerCache.over) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - this.containers[i].containerCache.over = 0; - } - } - - //Do what was originally in plugins - if ( this.storedCursor ) { - this.document.find( "body" ).css( "cursor", this.storedCursor ); - this.storedStylesheet.remove(); - } - if(this._storedOpacity) { - this.helper.css("opacity", this._storedOpacity); - } - if(this._storedZIndex) { - this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex); - } - - this.dragging = false; - if(this.cancelHelperRemoval) { - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - for (i=0; i < delayedTriggers.length; i++) { - delayedTriggers[i].call(this, event); - } //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return false; - } - - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - } - - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - - if(this.helper[0] !== this.currentItem[0]) { - this.helper.remove(); - } - this.helper = null; - - if(!noPropagation) { - for (i=0; i < delayedTriggers.length; i++) { - delayedTriggers[i].call(this, event); - } //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return true; - - }, - - _trigger: function() { - if ($.Widget.prototype._trigger.apply(this, arguments) === false) { - this.cancel(); - } - }, - - _uiHash: function(_inst) { - var inst = _inst || this; - return { - helper: inst.helper, - placeholder: inst.placeholder || $([]), - position: inst.position, - originalPosition: inst.originalPosition, - offset: inst.positionAbs, - item: inst.currentItem, - sender: _inst ? _inst.element : null - }; - } - -}); - -})(jQuery); From f5daf4fb3f57081433c25fdf5c0faba8f13d7115 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sun, 17 Jul 2016 21:29:12 -0600 Subject: [PATCH 016/214] Fix validation handling. - Don't display the validation errors until the form field has been interacted with. This prevents the page from initially loading with validation errors displayed. - Fix validations in the modals where we use BufferedProxy. We need to apply the validation class to the BufferedProxy instance. --- .../app/components/apis/server-form.js | 4 +++- .../app/components/apis/url-match-form.js | 4 +++- .../components/form-fields/field-wrapper.js | 22 ++++++++++++++++--- .../admin-ui/app/models/api/server.js | 2 ++ .../admin-ui/app/models/api/url-match.js | 2 ++ 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/api-umbrella/admin-ui/app/components/apis/server-form.js b/src/api-umbrella/admin-ui/app/components/apis/server-form.js index af10b440a..3a23b8427 100644 --- a/src/api-umbrella/admin-ui/app/components/apis/server-form.js +++ b/src/api-umbrella/admin-ui/app/components/apis/server-form.js @@ -1,5 +1,6 @@ import Ember from 'ember'; import BufferedProxy from 'ember-buffered-proxy/proxy'; +import Server from 'api-umbrella-admin/models/api/server'; export default Ember.Component.extend({ openModal: false, @@ -13,7 +14,8 @@ export default Ember.Component.extend({ }), bufferedModel: Ember.computed('model', function() { - return BufferedProxy.create({ content: this.get('model') }); + let owner = Ember.getOwner(this).ownerInjection(); + return BufferedProxy.extend(Server.validationClass).create(owner, { content: this.get('model') }); }), actions: { diff --git a/src/api-umbrella/admin-ui/app/components/apis/url-match-form.js b/src/api-umbrella/admin-ui/app/components/apis/url-match-form.js index 381348efa..65bb1f265 100644 --- a/src/api-umbrella/admin-ui/app/components/apis/url-match-form.js +++ b/src/api-umbrella/admin-ui/app/components/apis/url-match-form.js @@ -1,5 +1,6 @@ import Ember from 'ember'; import BufferedProxy from 'ember-buffered-proxy/proxy'; +import UrlMatch from 'api-umbrella-admin/models/api/url-match'; export default Ember.Component.extend({ openModal: false, @@ -14,7 +15,8 @@ export default Ember.Component.extend({ }), bufferedModel: Ember.computed('model', function() { - return BufferedProxy.create({ content: this.get('model') }); + let owner = Ember.getOwner(this).ownerInjection(); + return BufferedProxy.extend(UrlMatch.validationClass).create(owner, { content: this.get('model') }); }), exampleIncomingUrl: Ember.computed('bufferedModel.frontendPrefix', function() { diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/field-wrapper.js b/src/api-umbrella/admin-ui/app/components/form-fields/field-wrapper.js index ef8067d5d..03366b3ac 100644 --- a/src/api-umbrella/admin-ui/app/components/form-fields/field-wrapper.js +++ b/src/api-umbrella/admin-ui/app/components/form-fields/field-wrapper.js @@ -1,13 +1,25 @@ import Ember from 'ember'; export default Ember.Component.extend({ + canShoErrors: false, + fieldNameDidChange: Ember.on('init', Ember.observer('fieldName', function() { let fieldName = this.get('fieldName'); let fieldValidations = 'model.validations.attrs.' + fieldName; Ember.mixin(this, { - fieldErrorMessages: Ember.computed.reads(fieldValidations + '.messages'), - fieldHasErrors: Ember.computed(fieldValidations + '.isValid', function() { - return (this.get(fieldValidations + '.isValid') === false); + fieldErrorMessages: Ember.computed(fieldValidations + '.messages', 'canShowErrors', function() { + if(this.get('canShowErrors')) { + return this.get(fieldValidations + '.messages'); + } else { + return []; + } + }), + fieldHasErrors: Ember.computed(fieldValidations + '.isValid', 'canShowErrors', function() { + if(this.get('canShowErrors')) { + return (this.get(fieldValidations + '.isValid') === false); + } else { + return false; + } }), }); })), @@ -19,4 +31,8 @@ export default Ember.Component.extend({ return ''; } }), + + focusOut() { + this.set('canShowErrors', true); + }, }); diff --git a/src/api-umbrella/admin-ui/app/models/api/server.js b/src/api-umbrella/admin-ui/app/models/api/server.js index 5a045e1f3..0f3c62cb6 100644 --- a/src/api-umbrella/admin-ui/app/models/api/server.js +++ b/src/api-umbrella/admin-ui/app/models/api/server.js @@ -24,4 +24,6 @@ export default Model.extend(Validations, { hostWithPort: Ember.computed('host', 'port', function() { return _.compact([this.get('host'), this.get('port')]).join(':'); }), +}).reopenClass({ + validationClass: Validations, }); diff --git a/src/api-umbrella/admin-ui/app/models/api/url-match.js b/src/api-umbrella/admin-ui/app/models/api/url-match.js index 8d36dbef8..0107dfa00 100644 --- a/src/api-umbrella/admin-ui/app/models/api/url-match.js +++ b/src/api-umbrella/admin-ui/app/models/api/url-match.js @@ -28,4 +28,6 @@ export default Model.extend(Validations, { backendPrefixWithDefault: Ember.computed('backendPrefix', 'frontendPrefix', function() { return this.get('backendPrefix') || this.get('frontendPrefix'); }), +}).reopenClass({ + validationClass: Validations, }); From 28b71b6b21ce69b942183e3834c5a1988eba0dae Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 23 Jul 2016 14:59:04 -0600 Subject: [PATCH 017/214] Fix select menus not getting default values inside modals. --- .../admin-ui/app/components/select-menu.js | 27 +++++++++++++++++++ .../apis/settings/rate-limit-fields.hbs | 12 ++------- .../components/form-fields/select-field.hbs | 6 +---- .../app/templates/components/select-menu.hbs | 5 ++++ src/api-umbrella/admin-ui/package.json | 2 +- .../components/select-menu-test.js | 24 +++++++++++++++++ 6 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 src/api-umbrella/admin-ui/app/components/select-menu.js create mode 100644 src/api-umbrella/admin-ui/app/templates/components/select-menu.hbs create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/select-menu-test.js diff --git a/src/api-umbrella/admin-ui/app/components/select-menu.js b/src/api-umbrella/admin-ui/app/components/select-menu.js new file mode 100644 index 000000000..e4e668f2e --- /dev/null +++ b/src/api-umbrella/admin-ui/app/components/select-menu.js @@ -0,0 +1,27 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + // If a select menu doesn't have a value set on the model, set it to the + // value of the first option. This better aligns with the default behavior of + // select menus (so even if the user doesn't interact with the menu, the + // model still gets set with the first value that will always be selected). + // + // We do this differently than the emberx-select way here: + // https://github.com/thefrontside/emberx-select/pull/90 + // Instead, we do this with an observer on any value changes. This is needed + // for select menus inside our modals to work, since the model on those isn't + // set until the modal opens (so setting a default value just on the initial + // render doesn't work). + updateDefault: Ember.on('init', Ember.observer('value', function() { + var value = this.get('value'); + if(value === undefined) { + var options = this.get('options'); + if(options) { + var firstOption = options[0]; + if(firstOption && firstOption.id) { + this.sendAction('action', firstOption.id, this); + } + } + } + })), +}); diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs index 9dcf0a8b8..54e32a997 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs @@ -30,18 +30,10 @@ {{input type="text" value=rateLimit.durationInUnits class="form-control input-sm rate-limit-duration-in-units"}} - {{#x-select value=rateLimit.durationUnits class="form-control input-sm rate-limit-duration-units"}} - {{#each rateLimitDurationUnitOptions as |option|}} - {{#x-option value=option.id}}{{option.name}}{{/x-option}} - {{/each}} - {{/x-select}} + {{select-menu value=rateLimit.durationUnits action=(action (mut rateLimit.durationUnits)) options=rateLimitDurationUnitOptions inputClass="form-control input-sm rate-limit-duration-units"}} - {{#x-select value=rateLimit.limitBy class="form-control input-sm rate-limit-limit-by"}} - {{#each rateLimitLimitByOptions as |option|}} - {{#x-option value=option.id}}{{option.name}}{{/x-option}} - {{/each}} - {{/x-select}} + {{select-menu value=rateLimit.limitBy action=(action (mut rateLimit.limitBy)) options=rateLimitLimitByOptions inputClass="form-control input-sm rate-limit-limit-by"}}
diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/select-field.hbs b/src/api-umbrella/admin-ui/app/templates/components/form-fields/select-field.hbs index 350407118..ebe2b6f2d 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/form-fields/select-field.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/form-fields/select-field.hbs @@ -1,7 +1,3 @@ {{#form-fields/field-wrapper model=model style=style fieldName=fieldName inputId=inputId label=label tooltip=tooltip}} - {{#x-select value=(mut (get model fieldName)) id=inputId class="form-control"}} - {{#each options as |option|}} - {{#x-option value=option.id}}{{option.name}}{{/x-option}} - {{/each}} - {{/x-select}} + {{select-menu value=(get model fieldName) action=(action (mut (get model fieldName))) options=options inputId=inputId inputClass="form-control"}} {{/form-fields/field-wrapper}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/select-menu.hbs b/src/api-umbrella/admin-ui/app/templates/components/select-menu.hbs new file mode 100644 index 000000000..543990380 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/select-menu.hbs @@ -0,0 +1,5 @@ +{{#x-select value=value one-way=true action=action id=inputId class=inputClass}} + {{#each options as |option|}} + {{#x-option value=option.id}}{{option.name}}{{/x-option}} + {{/each}} +{{/x-select}} diff --git a/src/api-umbrella/admin-ui/package.json b/src/api-umbrella/admin-ui/package.json index 5087f6b72..0b15bcf1b 100644 --- a/src/api-umbrella/admin-ui/package.json +++ b/src/api-umbrella/admin-ui/package.json @@ -47,7 +47,7 @@ "ember-simple-auth": "1.1.0", "ember-truth-helpers": "1.2.0", "ember-welcome-page": "^1.0.1", - "emberx-select": "2.1.2", + "emberx-select": "2.2.1", "loader.js": "^4.0.1" }, "ember-addon": { diff --git a/src/api-umbrella/admin-ui/tests/integration/components/select-menu-test.js b/src/api-umbrella/admin-ui/tests/integration/components/select-menu-test.js new file mode 100644 index 000000000..6cbd24d82 --- /dev/null +++ b/src/api-umbrella/admin-ui/tests/integration/components/select-menu-test.js @@ -0,0 +1,24 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('select-menu', 'Integration | Component | select menu', { + integration: true +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{select-menu}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + {{#select-menu}} + template block text + {{/select-menu}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); From 21ac0ecc3c88a6937c33ab717a0be311c3882fae Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 23 Jul 2016 15:01:18 -0600 Subject: [PATCH 018/214] Get rid of duplicate requireHttps input. --- .../app/templates/components/apis/settings/common-fields.hbs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs index 7be777f62..a1731554b 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs @@ -14,7 +14,6 @@ {{f.select-field "authenticatedRateLimitBehavior" label="Authenticated Rate Limit Behavior" options=authenticatedRateLimitBehaviorgt}} {{/if}} - {{f.select-field "requireHttps" label=(t "admin.api.settings.require_https") tooltip=(t "admin.api.settings.require_https_tooltip_markdown") options=requireHttpsOptions}} {{f.textarea-field "defaultResponseHeadersString" label=(t "admin.api.settings.default_response_headers") tooltip=(t "admin.api.settings.default_response_headers_tooltip_markdown") placeholder="X-Example-Header: value"}} {{f.textarea-field "overrideResponseHeadersString" label=(t "admin.api.settings.override_response_headers") tooltip=(t "admin.api.settings.override_response_headers_tooltip_markdown") placeholder="X-Example-Header: value"}} {{/fields-for}} From 6f4f39e710f736a425772dd749551ac6f05d4dec Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 23 Jul 2016 16:57:13 -0600 Subject: [PATCH 019/214] Update dependencies. --- src/api-umbrella/admin-ui/bower.json | 6 +++--- src/api-umbrella/admin-ui/package.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/api-umbrella/admin-ui/bower.json b/src/api-umbrella/admin-ui/bower.json index 933955b8d..0e6e66c9c 100644 --- a/src/api-umbrella/admin-ui/bower.json +++ b/src/api-umbrella/admin-ui/bower.json @@ -5,11 +5,11 @@ "blockUI": "blockui#*", "bootbox": "4.4.0", "bootstrap": "~3.3.5", - "bootstrap-daterangepicker": "2.1.23", + "bootstrap-daterangepicker": "2.1.24", "bootstrap-sass": "3.3.6", "bootswatch": "v3.3.6+2", "datatables": "1.10.12", - "ember": "~2.6.0", + "ember": "2.6.2", "ember-cli-shims": "0.1.1", "ember-cli-test-loader": "0.2.2", "ember-qunit-notifications": "0.1.0", @@ -23,7 +23,7 @@ "jstz-detect": "1.0.5", "lodash": "4.13.1", "marked": "0.3.5", - "moment": "2.13.0", + "moment": "2.14.1", "numeral": "1.5.3", "pnotify": "3.0.0", "polyglot": "2.0.0", diff --git a/src/api-umbrella/admin-ui/package.json b/src/api-umbrella/admin-ui/package.json index 0b15bcf1b..aa8421f6e 100644 --- a/src/api-umbrella/admin-ui/package.json +++ b/src/api-umbrella/admin-ui/package.json @@ -25,11 +25,11 @@ "ember-bootstrap": "0.8.0", "ember-buffered-proxy": "0.6.0", "ember-busy-blocker": "0.1.0", - "ember-cli": "2.6.2", + "ember-cli": "2.6.3", "ember-cli-app-version": "^1.0.0", "ember-cli-babel": "^5.1.6", "ember-cli-dependency-checker": "^1.2.0", - "ember-cli-eslint": "1.6.0", + "ember-cli-eslint": "1.7.0", "ember-cli-htmlbars": "^1.0.3", "ember-cli-htmlbars-inline-precompile": "^0.3.1", "ember-cli-qunit": "^1.4.0", @@ -37,7 +37,7 @@ "ember-cli-sass": "5.3.1", "ember-cli-sri": "^2.1.0", "ember-cli-uglify": "^1.2.0", - "ember-cp-validations": "3.0.0-beta.0", + "ember-cp-validations": "3.0.0-beta.2", "ember-data": "^2.6.0", "ember-export-application-global": "^1.0.5", "ember-load-initializers": "^0.5.1", From 8409d14f755095fbd7807381810f1dd66c13adf3 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sun, 24 Jul 2016 22:40:37 -0600 Subject: [PATCH 020/214] Initial pass at Ember 2 upgrades for analytics section. --- .../stats/drilldown/results-breadcrumbs.js | 23 ++++ .../stats/drilldown/results-chart.js} | 10 +- .../stats/drilldown/results-table.js} | 37 +++--- .../components/stats/logs/results-chart.js} | 10 +- .../stats/logs/results-highlights.js | 4 + .../components/stats/logs/results-table.js} | 74 +++++------ .../stats/map/results-breadcrumbs.js | 23 ++++ .../components/stats/map/results-map.js} | 16 +-- .../components/stats/map/results-table.js} | 36 ++--- .../components}/stats/query-form.js | 125 ++++++++---------- .../components/stats/users/results-table.js} | 46 +++---- .../admin-ui/app/controllers/stats/base.js | 33 ++++- .../controllers/stats/drilldown-default.js | 7 - .../app/controllers/stats/drilldown.js | 26 ---- .../app/controllers/stats/logs-default.js | 4 - .../admin-ui/app/controllers/stats/logs.js | 3 - .../app/controllers/stats/map-default.js | 7 - .../admin-ui/app/controllers/stats/map.js | 22 --- .../app/controllers/stats/users-default.js | 7 - .../admin-ui/app/controllers/stats/users.js | 3 - .../admin-ui/app/helpers/inflect.js | 9 ++ src/api-umbrella/admin-ui/app/index.html | 5 + .../admin-ui/app/models/stats/drilldown.js | 31 +++-- .../admin-ui/app/models/stats/logs.js | 31 +++-- .../admin-ui/app/models/stats/map.js | 37 +++--- src/api-umbrella/admin-ui/app/router.js | 15 +-- .../admin-ui/app/routes/stats/base.js | 123 ++++++++--------- .../app/routes/stats/drilldown-default.js | 7 - .../admin-ui/app/routes/stats/drilldown.js | 53 +------- .../admin-ui/app/routes/stats/logs-default.js | 7 - .../admin-ui/app/routes/stats/logs.js | 52 +------- .../admin-ui/app/routes/stats/map-default.js | 7 - .../admin-ui/app/routes/stats/map.js | 24 +--- .../app/routes/stats/users-default.js | 7 - .../admin-ui/app/routes/stats/users.js | 14 -- .../components/admin-groups/index-table.hbs | 2 +- .../components/admins/index-table.hbs | 2 +- .../components/api-scopes/index-table.hbs | 2 +- .../components/api-users/index-table.hbs | 2 +- .../templates/components/apis/index-table.hbs | 2 +- .../stats/drilldown/results-breadcrumbs.hbs | 7 + .../stats/drilldown/results-chart.hbs | 1 + .../stats/drilldown/results-table.hbs | 6 + .../components/stats/logs/results-chart.hbs | 1 + .../stats/logs/results-highlights.hbs | 28 ++++ .../components/stats/logs/results-table.hbs | 6 + .../stats/map/results-breadcrumbs.hbs | 7 + .../components/stats/map/results-map.hbs | 1 + .../components/stats/map/results-table.hbs | 6 + .../stats/query-form.hbs} | 56 ++++---- .../components/stats/users/results-table.hbs | 6 + .../website-backends/index-table.hbs | 2 +- .../app/templates/stats/drilldown.hbs | 24 +--- .../admin-ui/app/templates/stats/logs.hbs | 45 +------ .../admin-ui/app/templates/stats/map.hbs | 24 +--- .../admin-ui/app/templates/stats/users.hbs | 12 +- src/api-umbrella/admin-ui/ember-cli-build.js | 9 +- .../old-views/website-backends/table.js | 33 ----- src/api-umbrella/admin-ui/package.json | 1 + .../drilldown/results-breadcrumbs-test.js | 24 ++++ .../stats/drilldown/results-chart-test.js | 24 ++++ .../stats/drilldown/results-table-test.js | 24 ++++ .../stats/logs/results-chart-test.js | 24 ++++ .../stats/logs/results-highlights-test.js | 24 ++++ .../stats/logs/results-table-test.js | 24 ++++ .../stats/map/results-breadcrumbs-test.js | 24 ++++ .../components/stats/map/results-map-test.js | 24 ++++ .../stats/map/results-table-test.js | 24 ++++ .../components/stats/query-form-test.js | 24 ++++ .../stats/users/results-table-test.js | 24 ++++ .../tests/unit/helpers/inflect-test.js | 10 ++ 71 files changed, 792 insertions(+), 705 deletions(-) create mode 100644 src/api-umbrella/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js rename src/api-umbrella/admin-ui/{old-views/stats/drilldown-chart.js => app/components/stats/drilldown/results-chart.js} (93%) rename src/api-umbrella/admin-ui/{old-views/stats/drilldown-table.js => app/components/stats/drilldown/results-table.js} (55%) rename src/api-umbrella/admin-ui/{old-views/stats/interval-chart.js => app/components/stats/logs/results-chart.js} (93%) create mode 100644 src/api-umbrella/admin-ui/app/components/stats/logs/results-highlights.js rename src/api-umbrella/admin-ui/{old-views/stats/logs-table.js => app/components/stats/logs/results-table.js} (64%) create mode 100644 src/api-umbrella/admin-ui/app/components/stats/map/results-breadcrumbs.js rename src/api-umbrella/admin-ui/{old-views/stats/map-geo.js => app/components/stats/map/results-map.js} (85%) rename src/api-umbrella/admin-ui/{old-views/stats/map-table.js => app/components/stats/map/results-table.js} (56%) rename src/api-umbrella/admin-ui/{old-views => app/components}/stats/query-form.js (58%) rename src/api-umbrella/admin-ui/{old-views/stats/users-table.js => app/components/stats/users/results-table.js} (57%) delete mode 100644 src/api-umbrella/admin-ui/app/controllers/stats/drilldown-default.js delete mode 100644 src/api-umbrella/admin-ui/app/controllers/stats/logs-default.js delete mode 100644 src/api-umbrella/admin-ui/app/controllers/stats/map-default.js delete mode 100644 src/api-umbrella/admin-ui/app/controllers/stats/users-default.js create mode 100644 src/api-umbrella/admin-ui/app/helpers/inflect.js delete mode 100644 src/api-umbrella/admin-ui/app/routes/stats/drilldown-default.js delete mode 100644 src/api-umbrella/admin-ui/app/routes/stats/logs-default.js delete mode 100644 src/api-umbrella/admin-ui/app/routes/stats/map-default.js delete mode 100644 src/api-umbrella/admin-ui/app/routes/stats/users-default.js create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-table.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-chart.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-highlights.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-table.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/map/results-map.hbs create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/map/results-table.hbs rename src/api-umbrella/admin-ui/app/templates/{stats/-query-form.hbs => components/stats/query-form.hbs} (76%) create mode 100644 src/api-umbrella/admin-ui/app/templates/components/stats/users/results-table.hbs delete mode 100644 src/api-umbrella/admin-ui/old-views/website-backends/table.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/drilldown/results-breadcrumbs-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/drilldown/results-chart-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/drilldown/results-table-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/logs/results-chart-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/logs/results-highlights-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/logs/results-table-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/map/results-breadcrumbs-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/map/results-map-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/map/results-table-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/query-form-test.js create mode 100644 src/api-umbrella/admin-ui/tests/integration/components/stats/users/results-table-test.js create mode 100644 src/api-umbrella/admin-ui/tests/unit/helpers/inflect-test.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js b/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js new file mode 100644 index 000000000..13edcfb64 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js @@ -0,0 +1,23 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + breadcrumbLinks: Ember.computed('breadcrumbs', function() { + let crumbs = []; + + let data = this.get('breadcrumbs'); + for(let i = 0; i < data.length; i++) { + let crumb = { name: data[i].crumb }; + if(i < data.length - 1) { + crumb.prefix = data[i].prefix; + } + + crumbs.push(crumb); + } + + if(crumbs.length <= 1) { + crumbs = []; + } + + return crumbs; + }), +}); diff --git a/src/api-umbrella/admin-ui/old-views/stats/drilldown-chart.js b/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-chart.js similarity index 93% rename from src/api-umbrella/admin-ui/old-views/stats/drilldown-chart.js rename to src/api-umbrella/admin-ui/app/components/stats/drilldown/results-chart.js index ca37a7805..e17be9bc6 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/drilldown-chart.js +++ b/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-chart.js @@ -1,8 +1,6 @@ import Ember from 'ember'; -export default Ember.View.extend({ - data: [], - +export default Ember.Component.extend({ chartOptions: { pointSize: 0, lineWidth: 1, @@ -57,8 +55,8 @@ export default Ember.View.extend({ $(window).on('resize', _.debounce(this.draw.bind(this), 100)); }, - refreshData: function() { - this.chartData = this.get('data'); + refreshData: Ember.observer('hitsOverTime', function() { + this.chartData = this.get('hitsOverTime'); for(var i = 0; i < this.chartData.rows.length; i++) { this.chartData.rows[i].c[0].v = new Date(this.chartData.rows[i].c[0].v); } @@ -85,7 +83,7 @@ export default Ember.View.extend({ this.dataTable = new google.visualization.DataTable(this.chartData); this.draw(); - }.observes('data'), + }), draw: function() { this.chart.draw(this.dataTable, this.chartOptions); diff --git a/src/api-umbrella/admin-ui/old-views/stats/drilldown-table.js b/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-table.js similarity index 55% rename from src/api-umbrella/admin-ui/old-views/stats/drilldown-table.js rename to src/api-umbrella/admin-ui/app/components/stats/drilldown/results-table.js index d474d13d3..e77ed6020 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/drilldown-table.js +++ b/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-table.js @@ -1,42 +1,40 @@ import Ember from 'ember'; +import numeral from 'numeral'; -export default Ember.View.extend({ - tagName: 'table', +export default Ember.Component.extend({ + session: Ember.inject.service(), - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - this.$().DataTable({ + didInsertElement() { + this.$().find('table').DataTable({ searching: false, order: [[1, 'desc']], - data: this.get('model.results'), + data: this.get('results'), columns: [ { data: 'path', title: 'Path', defaultContent: '-', - render: _.bind(function(name, type, data) { + render: function(name, type, data) { if(type === 'display' && name && name !== '-') { if(data.terminal) { return '' + _.escape(name); } else { - var link, params; - params = _.clone(this.get('controller.query.params')); + let params = _.clone(this.get('queryParamValues')); params.prefix = data.descendent_prefix; - link = '#/stats/drilldown/' + $.param(params); + let link = '#/stats/drilldown?' + $.param(params); return '' + _.escape(name) + ''; } } return name; - }, this), + }.bind(this), }, { data: 'hits', title: 'Hits', defaultContent: '-', - render: function(number, type) { + render(number, type) { if(type === 'display' && number && number !== '-') { return numeral(number).format('0,0'); } @@ -48,9 +46,14 @@ export default Ember.View.extend({ }); }, - refreshData: function() { - var table = this.$().DataTable(); + refreshData: Ember.observer('results', function() { + let table = this.$().find('table').dataTable().api(); table.clear(); - table.rows.add(this.get('model.results')).draw(); - }.observes('model.results'), + table.rows.add(this.get('results')); + table.draw(); + }), + + downloadUrl: Ember.computed('allQueryParamValues', function() { + return '/admin/stats/users.csv?' + $.param(this.get('allQueryParamValues')); + }), }); diff --git a/src/api-umbrella/admin-ui/old-views/stats/interval-chart.js b/src/api-umbrella/admin-ui/app/components/stats/logs/results-chart.js similarity index 93% rename from src/api-umbrella/admin-ui/old-views/stats/interval-chart.js rename to src/api-umbrella/admin-ui/app/components/stats/logs/results-chart.js index 4f4c493fe..0c043fffd 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/interval-chart.js +++ b/src/api-umbrella/admin-ui/app/components/stats/logs/results-chart.js @@ -1,8 +1,6 @@ import Ember from 'ember'; -export default Ember.View.extend({ - data: [], - +export default Ember.Component.extend({ chartOptions: { focusTarget: 'category', width: '100%', @@ -55,8 +53,8 @@ export default Ember.View.extend({ $(window).on('resize', _.debounce(this.draw.bind(this), 100)); }, - refreshData: function() { - this.chartData.rows = this.get('data') || []; + refreshData: Ember.observer('hitsOverTime', function() { + this.chartData.rows = this.get('hitsOverTime') || []; for(var i = 0; i < this.chartData.rows.length; i++) { this.chartData.rows[i].c[0].v = new Date(this.chartData.rows[i].c[0].v); } @@ -91,7 +89,7 @@ export default Ember.View.extend({ this.dataTable = new google.visualization.DataTable(this.chartData); this.draw(); - }.observes('data'), + }), draw: function() { this.chart.draw(this.dataTable, this.chartOptions); diff --git a/src/api-umbrella/admin-ui/app/components/stats/logs/results-highlights.js b/src/api-umbrella/admin-ui/app/components/stats/logs/results-highlights.js new file mode 100644 index 000000000..926b61300 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/components/stats/logs/results-highlights.js @@ -0,0 +1,4 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ +}); diff --git a/src/api-umbrella/admin-ui/old-views/stats/logs-table.js b/src/api-umbrella/admin-ui/app/components/stats/logs/results-table.js similarity index 64% rename from src/api-umbrella/admin-ui/old-views/stats/logs-table.js rename to src/api-umbrella/admin-ui/app/components/stats/logs/results-table.js index 90f5fdf74..f153e7092 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/logs-table.js +++ b/src/api-umbrella/admin-ui/app/components/stats/logs/results-table.js @@ -1,12 +1,9 @@ import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', - - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - this.$().DataTable({ +export default Ember.Component.extend({ + didInsertElement() { + this.$().find('table').DataTable({ searching: false, serverSide: true, ajax: { @@ -14,10 +11,9 @@ export default Ember.View.extend({ // Use POST for this endpoint, since the URLs can be very long and // exceed URL length limits in IE (and apparently Capybara too). type: 'POST', - data: _.bind(function(data) { - var query = this.get('controller.query.params'); - return _.extend({}, data, query); - }, this) + data: function(data) { + return _.extend({}, data, this.get('allQueryParamValues')); + }.bind(this), }, drawCallback: _.bind(function() { this.$().find('td').truncate({ @@ -48,77 +44,77 @@ export default Ember.View.extend({ type: 'date', title: 'Time', defaultContent: '-', - render: Admin.DataTablesHelpers.renderTime, + render: DataTablesHelpers.renderTime, }, { data: 'request_method', title: 'Method', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_host', title: 'Host', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_url', title: 'URL', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'user_email', title: 'User', defaultContent: '-', - render: _.bind(function(email, type, data) { + render: function(email, type, data) { if(type === 'display' && email && email !== '-') { - var params = _.clone(this.get('controller.query.params')); + let params = _.clone(this.get('queryParamValues')); params.search = _.compact([params.search, 'user_id:"' + data.user_id + '"']).join(' AND '); - var link = '#/stats/logs/' + $.param(params); + let link = '#/stats/logs?' + $.param(params); return '' + _.escape(email) + ''; } return email; - }, this), + }.bind(this), }, { data: 'request_ip', title: 'IP Address', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_ip_country', title: 'Country', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_ip_region', title: 'State', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_ip_city', title: 'City', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'response_status', title: 'Status', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'gatekeeper_denied_code', title: 'Reason Denied', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'response_time', @@ -136,55 +132,53 @@ export default Ember.View.extend({ data: 'response_content_type', title: 'Content Type', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_accept_encoding', title: 'Accept Encoding', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_user_agent', title: 'User Agent', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_user_agent_family', title: 'User Agent Family', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_user_agent_type', title: 'User Agent Type', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_referer', title: 'Referer', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'request_origin', title: 'Origin', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, ] }); }, - redrawTable: function() { - this.$().DataTable().draw(); - }, + refreshData: Ember.observer('allQueryParamValues', function() { + this.$().find('table').DataTable().draw(); + }), - refreshData: function() { - // Wrap datatables redraw in Ember.run.once so that we only trigger it once - // even if multiple query parameters are being changed at once. - Ember.run.once(this, 'redrawTable'); - }.observes('controller.query.params.query', 'controller.query.params.search', 'controller.query.params.start_at', 'controller.query.params.end_at', 'controller.query.params.beta_analytics'), + downloadUrl: Ember.computed('allQueryParamValues', function() { + return '/admin/stats/logs.csv?' + $.param(this.get('allQueryParamValues')); + }), }); diff --git a/src/api-umbrella/admin-ui/app/components/stats/map/results-breadcrumbs.js b/src/api-umbrella/admin-ui/app/components/stats/map/results-breadcrumbs.js new file mode 100644 index 000000000..ef520aca9 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/components/stats/map/results-breadcrumbs.js @@ -0,0 +1,23 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + breadcrumbLinks: Ember.computed('breadcrumbs', function() { + let crumbs = []; + + let data = this.get('breadcrumbs'); + for(let i = 0; i < data.length; i++) { + let crumb = { name: data[i].name }; + if(i < data.length - 1) { + crumb.region = data[i].region; + } + + crumbs.push(crumb); + } + + if(crumbs.length <= 1) { + crumbs = []; + } + + return crumbs; + }), +}); diff --git a/src/api-umbrella/admin-ui/old-views/stats/map-geo.js b/src/api-umbrella/admin-ui/app/components/stats/map/results-map.js similarity index 85% rename from src/api-umbrella/admin-ui/old-views/stats/map-geo.js rename to src/api-umbrella/admin-ui/app/components/stats/map/results-map.js index d5f497df9..879415881 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/map-geo.js +++ b/src/api-umbrella/admin-ui/app/components/stats/map/results-map.js @@ -1,8 +1,6 @@ import Ember from 'ember'; -export default Ember.View.extend({ - data: [], - +export default Ember.Component.extend({ chartOptions: { width: 640, colorAxis: { @@ -34,7 +32,7 @@ export default Ember.View.extend({ }, handleCityClick: function() { - if(this.get('model.region_field') === 'request_ip_city') { + if(this.get('regionField') === 'request_ip_city') { var selection = this.chart.getSelection(); if(selection) { var rowIndex = selection[0].row; @@ -48,19 +46,19 @@ export default Ember.View.extend({ } }, - refreshData: function() { - this.chartData.rows = this.get('model.map_regions') || []; + refreshData: Ember.observer('regions', function() { + this.chartData.rows = this.get('regions') || []; this.chartData.cols = [ {id: 'region', label: 'Region', type: 'string'}, {id: 'startDate', label: 'Hits', type: 'number'}, ]; - if(this.get('model.region_field') === 'request_ip_city') { + if(this.get('regionField') === 'request_ip_city') { this.chartData.cols.unshift({id: 'latitude', label: 'Latitude', type: 'number'}, {id: 'longitude', label: 'Longitude', type: 'number'}); } - this.chartOptions.region = this.get('controller.query.params.region'); + this.chartOptions.region = this.get('allQueryParamValues.region'); if(this.chartOptions.region.indexOf('US') === 0) { this.chartOptions.resolution = 'provinces'; } else { @@ -75,7 +73,7 @@ export default Ember.View.extend({ this.dataTable = new google.visualization.DataTable(this.chartData); this.draw(); - }.observes('model.map_regions'), + }), draw: function() { this.chart.draw(this.dataTable, this.chartOptions); diff --git a/src/api-umbrella/admin-ui/old-views/stats/map-table.js b/src/api-umbrella/admin-ui/app/components/stats/map/results-table.js similarity index 56% rename from src/api-umbrella/admin-ui/old-views/stats/map-table.js rename to src/api-umbrella/admin-ui/app/components/stats/map/results-table.js index 8ef053319..372007e86 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/map-table.js +++ b/src/api-umbrella/admin-ui/app/components/stats/map/results-table.js @@ -1,15 +1,12 @@ import Ember from 'ember'; +import numeral from 'numeral'; -export default Ember.View.extend({ - tagName: 'table', - - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - +export default Ember.Component.extend({ didInsertElement: function() { - this.$().DataTable({ + this.$().find('table').DataTable({ searching: false, order: [[1, 'desc']], - data: this.get('model.regions'), + data: this.get('regions'), columns: [ { data: 'name', @@ -17,15 +14,15 @@ export default Ember.View.extend({ defaultContent: '-', render: _.bind(function(name, type, data) { if(type === 'display' && name && name !== '-') { - var link, params; - if(this.get('model.region_field') === 'request_ip_city') { - params = _.clone(this.get('controller.query.params')); + let link; + let params = _.clone(this.get('queryParamValues')); + if(this.get('regionField') === 'request_ip_city') { + delete params.region; params.search = 'request_ip_city:"' + data.id + '"'; - link = '#/stats/logs/' + $.param(params); + link = '#/stats/logs?' + $.param(params); } else { - params = _.clone(this.get('controller.query.params')); params.region = data.id; - link = '#/stats/map/' + $.param(params); + link = '#/stats/map?' + $.param(params); } return '' + _.escape(name) + ''; @@ -50,9 +47,14 @@ export default Ember.View.extend({ }); }, - refreshData: function() { - var table = this.$().DataTable(); + refreshData: Ember.observer('regions', function() { + var table = this.$().find('table').dataTable().api(); table.clear(); - table.rows.add(this.get('model.regions')).draw(); - }.observes('model.regions'), + table.rows.add(this.get('regions')); + table.draw(); + }), + + downloadUrl: Ember.computed('allQueryParamValues', function() { + return '/admin/stats/map.csv?' + $.param(this.get('allQueryParamValues')); + }), }); diff --git a/src/api-umbrella/admin-ui/old-views/stats/query-form.js b/src/api-umbrella/admin-ui/app/components/stats/query-form.js similarity index 58% rename from src/api-umbrella/admin-ui/old-views/stats/query-form.js rename to src/api-umbrella/admin-ui/app/components/stats/query-form.js index 2d5ed9f64..8f143e96a 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/query-form.js +++ b/src/api-umbrella/admin-ui/app/components/stats/query-form.js @@ -1,8 +1,6 @@ import Ember from 'ember'; -export default Ember.View.extend({ - templateName: 'stats/_query_form', - +export default Ember.Component.extend({ enableInterval: false, datePickerRanges: { @@ -35,12 +33,11 @@ export default Ember.View.extend({ didInsertElement: function() { this.updateInterval(); this.updateDateRange(); - this.updateBetaAnalytics(); $('#reportrange').daterangepicker({ ranges: this.datePickerRanges, - startDate: moment(this.get('controller.query.params.start_at'), 'YYYY-MM-DD'), - endDate: moment(this.get('controller.query.params.end_at'), 'YYYY-MM-DD'), + startDate: moment(this.get('start_at'), 'YYYY-MM-DD'), + endDate: moment(this.get('end_at'), 'YYYY-MM-DD'), }, _.bind(this.handleDateRangeChange, this)); var stringOperators = [ @@ -86,8 +83,8 @@ export default Ember.View.extend({ filters: [ { id: 'request_method', - label: polyglot.t('admin.stats.fields.request_method.label'), - description: polyglot.t('admin.stats.fields.request_method.description_markdown'), + label: I18n.t('admin.stats.fields.request_method.label'), + description: I18n.t('admin.stats.fields.request_method.description_markdown'), type: 'string', operators: selectOperators, input: 'select', @@ -103,8 +100,8 @@ export default Ember.View.extend({ }, { id: 'request_scheme', - label: polyglot.t('admin.stats.fields.request_scheme.label'), - description: polyglot.t('admin.stats.fields.request_scheme.description_markdown'), + label: I18n.t('admin.stats.fields.request_scheme.label'), + description: I18n.t('admin.stats.fields.request_scheme.description_markdown'), type: 'string', operators: selectOperators, input: 'select', @@ -115,120 +112,120 @@ export default Ember.View.extend({ }, { id: 'request_host', - label: polyglot.t('admin.stats.fields.request_host.label'), - description: polyglot.t('admin.stats.fields.request_host.description_markdown'), + label: I18n.t('admin.stats.fields.request_host.label'), + description: I18n.t('admin.stats.fields.request_host.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_path', - label: polyglot.t('admin.stats.fields.request_path.label'), - description: polyglot.t('admin.stats.fields.request_path.description_markdown'), + label: I18n.t('admin.stats.fields.request_path.label'), + description: I18n.t('admin.stats.fields.request_path.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_url', - label: polyglot.t('admin.stats.fields.request_url.label'), - description: polyglot.t('admin.stats.fields.request_url.description_markdown'), + label: I18n.t('admin.stats.fields.request_url.label'), + description: I18n.t('admin.stats.fields.request_url.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_ip', - label: polyglot.t('admin.stats.fields.request_ip.label'), - description: polyglot.t('admin.stats.fields.request_ip.description_markdown'), + label: I18n.t('admin.stats.fields.request_ip.label'), + description: I18n.t('admin.stats.fields.request_ip.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_ip_country', - label: polyglot.t('admin.stats.fields.request_ip_country.label'), - description: polyglot.t('admin.stats.fields.request_ip_country.description_markdown'), + label: I18n.t('admin.stats.fields.request_ip_country.label'), + description: I18n.t('admin.stats.fields.request_ip_country.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_ip_region', - label: polyglot.t('admin.stats.fields.request_ip_region.label'), - description: polyglot.t('admin.stats.fields.request_ip_region.description_markdown'), + label: I18n.t('admin.stats.fields.request_ip_region.label'), + description: I18n.t('admin.stats.fields.request_ip_region.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_ip_city', - label: polyglot.t('admin.stats.fields.request_ip_city.label'), - description: polyglot.t('admin.stats.fields.request_ip_city.description_markdown'), + label: I18n.t('admin.stats.fields.request_ip_city.label'), + description: I18n.t('admin.stats.fields.request_ip_city.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_user_agent', - label: polyglot.t('admin.stats.fields.request_user_agent.label'), - description: polyglot.t('admin.stats.fields.request_user_agent.description_markdown'), + label: I18n.t('admin.stats.fields.request_user_agent.label'), + description: I18n.t('admin.stats.fields.request_user_agent.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_user_agent_family', - label: polyglot.t('admin.stats.fields.request_user_agent_family.label'), - description: polyglot.t('admin.stats.fields.request_user_agent_family.description_markdown'), + label: I18n.t('admin.stats.fields.request_user_agent_family.label'), + description: I18n.t('admin.stats.fields.request_user_agent_family.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_user_agent_type', - label: polyglot.t('admin.stats.fields.request_user_agent_type.label'), - description: polyglot.t('admin.stats.fields.request_user_agent_type.description_markdown'), + label: I18n.t('admin.stats.fields.request_user_agent_type.label'), + description: I18n.t('admin.stats.fields.request_user_agent_type.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_referer', - label: polyglot.t('admin.stats.fields.request_referer.label'), - description: polyglot.t('admin.stats.fields.request_referer.description_markdown'), + label: I18n.t('admin.stats.fields.request_referer.label'), + description: I18n.t('admin.stats.fields.request_referer.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'request_origin', - label: polyglot.t('admin.stats.fields.request_origin.label'), - description: polyglot.t('admin.stats.fields.request_origin.description_markdown'), + label: I18n.t('admin.stats.fields.request_origin.label'), + description: I18n.t('admin.stats.fields.request_origin.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'api_key', - label: polyglot.t('admin.stats.fields.api_key.label'), - description: polyglot.t('admin.stats.fields.api_key.description_markdown'), + label: I18n.t('admin.stats.fields.api_key.label'), + description: I18n.t('admin.stats.fields.api_key.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'user_email', - label: polyglot.t('admin.stats.fields.user_email.label'), - description: polyglot.t('admin.stats.fields.user_email.description_markdown'), + label: I18n.t('admin.stats.fields.user_email.label'), + description: I18n.t('admin.stats.fields.user_email.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'user_id', - label: polyglot.t('admin.stats.fields.user_id.label'), - description: polyglot.t('admin.stats.fields.user_id.description_markdown'), + label: I18n.t('admin.stats.fields.user_id.label'), + description: I18n.t('admin.stats.fields.user_id.description_markdown'), type: 'string', operators: stringOperators, }, { id: 'response_status', - label: polyglot.t('admin.stats.fields.response_status.label'), - description: polyglot.t('admin.stats.fields.response_status.description_markdown'), + label: I18n.t('admin.stats.fields.response_status.label'), + description: I18n.t('admin.stats.fields.response_status.description_markdown'), type: 'integer', operators: numberOperators, }, { id: 'gatekeeper_denied_code', - label: polyglot.t('admin.stats.fields.gatekeeper_denied_code.label'), - description: polyglot.t('admin.stats.fields.gatekeeper_denied_code.description_markdown'), + label: I18n.t('admin.stats.fields.gatekeeper_denied_code.label'), + description: I18n.t('admin.stats.fields.gatekeeper_denied_code.description_markdown'), type: 'string', operators: selectOperators, input: 'select', @@ -246,22 +243,22 @@ export default Ember.View.extend({ }, { id: 'response_time', - label: polyglot.t('admin.stats.fields.response_time.label'), - description: polyglot.t('admin.stats.fields.response_time.description_markdown'), + label: I18n.t('admin.stats.fields.response_time.label'), + description: I18n.t('admin.stats.fields.response_time.description_markdown'), type: 'integer', operators: numberOperators, }, { id: 'response_content_type', - label: polyglot.t('admin.stats.fields.response_content_type.label'), - description: polyglot.t('admin.stats.fields.response_content_type.description_markdown'), + label: I18n.t('admin.stats.fields.response_content_type.label'), + description: I18n.t('admin.stats.fields.response_content_type.description_markdown'), type: 'string', operators: stringOperators, }, ], }); - var query = this.get('controller.query.params.query'); + var query = this.get('query'); var rules; if(query) { rules = JSON.parse(query); @@ -274,14 +271,14 @@ export default Ember.View.extend({ this.send('toggleFilters'); this.send('toggleFilterType', 'builder'); - } else if(this.get('controller.query.params.search')) { + } else if(this.get('search')) { this.send('toggleFilters'); this.send('toggleFilterType', 'advanced'); } }, updateQueryBuilderRules: function() { - var query = this.get('controller.query.params.query'); + var query = this.get('query'); var rules; if(query) { rules = JSON.parse(query); @@ -292,35 +289,27 @@ export default Ember.View.extend({ } else { $('#query_builder').queryBuilder('reset'); } - }.observes('controller.query.params.query'), + }.observes('query'), updateInterval: function() { - var interval = this.get('controller.query.params.interval'); + var interval = this.get('interval'); $('#interval_buttons').find('button[value="' + interval + '"]').button('toggle'); - }.observes('controller.query.params.interval'), + }.observes('interval'), updateDateRange: function() { - var start = moment(this.get('controller.query.params.start_at')); - var end = moment(this.get('controller.query.params.end_at')); + var start = moment(this.get('start_at')); + var end = moment(this.get('end_at')); $('#reportrange span.text').html(start.format('MMM D, YYYY') + ' - ' + end.format('MMM D, YYYY')); - }.observes('controller.query.params.start_at', 'controller.query.params.end_at'), + }.observes('start_at', 'end_at'), handleDateRangeChange: function(start, end) { this.setProperties({ - 'controller.query.params.start_at': start.format('YYYY-MM-DD'), - 'controller.query.params.end_at': end.format('YYYY-MM-DD'), + 'start_at': start.format('YYYY-MM-DD'), + 'end_at': end.format('YYYY-MM-DD'), }); }, - updateBetaAnalytics: function() { - this.set('isBetaAnalytics', this.get('controller.query.params.beta_analytics') === 'true'); - }.observes('controller.query.params.beta_analytics'), - - handleBetaAnalytics: function() { - this.set('controller.query.params.beta_analytics', this.get('isBetaAnalytics').toString()); - }.observes('isBetaAnalytics'), - actions: { toggleFilters: function() { var $container = $('#filters_ui'); @@ -342,7 +331,7 @@ export default Ember.View.extend({ }, clickInterval: function(interval) { - this.set('controller.query.params.interval', interval); + this.set('interval', interval); }, }, }); diff --git a/src/api-umbrella/admin-ui/old-views/stats/users-table.js b/src/api-umbrella/admin-ui/app/components/stats/users/results-table.js similarity index 57% rename from src/api-umbrella/admin-ui/old-views/stats/users-table.js rename to src/api-umbrella/admin-ui/app/components/stats/users/results-table.js index 8700312ea..d93d4c403 100644 --- a/src/api-umbrella/admin-ui/old-views/stats/users-table.js +++ b/src/api-umbrella/admin-ui/app/components/stats/users/results-table.js @@ -1,20 +1,16 @@ import Ember from 'ember'; +import DataTablesHelpers from 'api-umbrella-admin/utils/data-tables-helpers'; -export default Ember.View.extend({ - tagName: 'table', - - classNames: ['table', 'table-striped', 'table-bordered', 'table-condensed'], - - didInsertElement: function() { - this.$().DataTable({ +export default Ember.Component.extend({ + didInsertElement() { + this.$().find('table').DataTable({ searching: false, serverSide: true, ajax: { url: '/admin/stats/users.json', - data: _.bind(function(data) { - var query = this.get('controller.query.params'); - return _.extend({}, data, query); - }, this) + data: function(data) { + return _.extend({}, data, this.get('allQueryParamValues')); + }.bind(this), }, order: [[4, 'desc']], columns: [ @@ -22,36 +18,36 @@ export default Ember.View.extend({ data: 'email', title: 'Email', defaultContent: '-', - render: _.bind(function(email, type, data) { + render: function(email, type, data) { if(type === 'display' && email && email !== '-') { - var params = _.clone(this.get('controller.query.params')); + let params = _.clone(this.get('queryParamValues')); params.search = 'user_id:"' + data.id + '"'; - var link = '#/stats/logs/' + $.param(params); + let link = '#/stats/logs?' + $.param(params); return '' + _.escape(email) + ''; } return email; - }, this), + }.bind(this), }, { data: 'first_name', title: 'First Name', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'last_name', title: 'Last Name', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, { data: 'created_at', type: 'date', title: 'Signed Up', defaultContent: '-', - render: Admin.DataTablesHelpers.renderTime, + render: DataTablesHelpers.renderTime, }, { data: 'hits', @@ -70,19 +66,23 @@ export default Ember.View.extend({ type: 'date', title: 'Last Request', defaultContent: '-', - render: Admin.DataTablesHelpers.renderTime, + render: DataTablesHelpers.renderTime, }, { data: 'use_description', title: 'Use Description', defaultContent: '-', - render: Admin.DataTablesHelpers.renderEscaped, + render: DataTablesHelpers.renderEscaped, }, ] }); }, - refreshData: function() { - this.$().DataTable().draw(); - }.observes('controller.query.params.query', 'controller.query.params.search', 'controller.query.params.start_at', 'controller.query.params.end_at', 'controller.query.params.beta_analytics'), + refreshData: Ember.observer('allQueryParamValues', function() { + this.$().find('table').DataTable().draw(); + }), + + downloadUrl: Ember.computed('allQueryParamValues', function() { + return '/admin/stats/users.csv?' + $.param(this.get('allQueryParamValues')); + }), }); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/base.js b/src/api-umbrella/admin-ui/app/controllers/stats/base.js index a1bd73a5b..6f80660c7 100644 --- a/src/api-umbrella/admin-ui/app/controllers/stats/base.js +++ b/src/api-umbrella/admin-ui/app/controllers/stats/base.js @@ -1,9 +1,36 @@ import Ember from 'ember'; export default Ember.Controller.extend({ - needs: ['application'], - - query: null, + queryParams: [ + 'tz', + 'interval', + 'search', + 'start_at', + 'end_at', + 'query', + 'beta_analytics', + 'prefix', + 'region', + ], + tz: jstz.determine().name(), + search: null, + interval: 'day', + prefix: '0/', + region: 'world', + start_at: moment().subtract(29, 'days').format('YYYY-MM-DD'), + end_at: moment().format('YYYY-MM-DD'), + query: JSON.stringify({ + condition: 'AND', + rules: [{ + field: 'gatekeeper_denied_code', + id: 'gatekeeper_denied_code', + input: 'select', + operator: 'is_null', + type: 'string', + value: null, + }], + }), + beta_analytics: false, actions: { submit() { diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/drilldown-default.js b/src/api-umbrella/admin-ui/app/controllers/stats/drilldown-default.js deleted file mode 100644 index bd2a36499..000000000 --- a/src/api-umbrella/admin-ui/app/controllers/stats/drilldown-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Drilldown from './drilldown'; - -export default Drilldown.extend({ - renderTemplate() { - this.render('stats/drilldown'); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/drilldown.js b/src/api-umbrella/admin-ui/app/controllers/stats/drilldown.js index c08948d91..a57fe0956 100644 --- a/src/api-umbrella/admin-ui/app/controllers/stats/drilldown.js +++ b/src/api-umbrella/admin-ui/app/controllers/stats/drilldown.js @@ -1,30 +1,4 @@ import Base from './base'; export default Base.extend({ - breadcrumbs: function() { - let crumbs = []; - - let data = this.get('model.breadcrumbs'); - for(let i = 0; i < data.length; i++) { - let crumb = { name: data[i].crumb }; - - if(i < data.length -1) { - let params = _.clone(this.get('query.params')); - params.prefix = data[i].prefix; - crumb.linkQuery = $.param(params); - } - - crumbs.push(crumb); - } - - if(crumbs.length <= 1) { - crumbs = []; - } - - return crumbs; - }.property('model.breadcrumbs'), - - downloadUrl: function() { - return '/api-umbrella/v1/analytics/drilldown.csv?' + $.param(this.get('query.params')) + '&api_key=' + webAdminAjaxApiKey; - }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.prefix', 'query.params.beta_analytics'), }); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/logs-default.js b/src/api-umbrella/admin-ui/app/controllers/stats/logs-default.js deleted file mode 100644 index d6d111e36..000000000 --- a/src/api-umbrella/admin-ui/app/controllers/stats/logs-default.js +++ /dev/null @@ -1,4 +0,0 @@ -import Logs from './logs'; - -export default Logs.extend({ -}); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/logs.js b/src/api-umbrella/admin-ui/app/controllers/stats/logs.js index 9e0be336b..a57fe0956 100644 --- a/src/api-umbrella/admin-ui/app/controllers/stats/logs.js +++ b/src/api-umbrella/admin-ui/app/controllers/stats/logs.js @@ -1,7 +1,4 @@ import Base from './base'; export default Base.extend({ - downloadUrl: function() { - return '/admin/stats/logs.csv?' + $.param(this.get('query.params')); - }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), }); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/map-default.js b/src/api-umbrella/admin-ui/app/controllers/stats/map-default.js deleted file mode 100644 index a1d99d072..000000000 --- a/src/api-umbrella/admin-ui/app/controllers/stats/map-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Map from './map'; - -export default Map.extend({ - renderTemplate() { - this.render('stats/users'); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/map.js b/src/api-umbrella/admin-ui/app/controllers/stats/map.js index 72e5e390d..a57fe0956 100644 --- a/src/api-umbrella/admin-ui/app/controllers/stats/map.js +++ b/src/api-umbrella/admin-ui/app/controllers/stats/map.js @@ -1,26 +1,4 @@ import Base from './base'; export default Base.extend({ - breadcrumbs: function() { - let crumbs = []; - - let data = this.get('model.map_breadcrumbs'); - for(let i = 0; i < data.length; i++) { - let crumb = { name: data[i].name }; - - if(i < data.length -1) { - let params = _.clone(this.get('query.params')); - params.region = data[i].region; - crumb.linkQuery = $.param(params); - } - - crumbs.push(crumb); - } - - return crumbs; - }.property('model.breadcrumb'), - - downloadUrl: function() { - return '/admin/stats/map.csv?' + $.param(this.get('query.params')); - }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), }); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/users-default.js b/src/api-umbrella/admin-ui/app/controllers/stats/users-default.js deleted file mode 100644 index 4a4921085..000000000 --- a/src/api-umbrella/admin-ui/app/controllers/stats/users-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Users from './users'; - -export default Users.extend({ - renderTemplate() { - this.render('stats/users'); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/users.js b/src/api-umbrella/admin-ui/app/controllers/stats/users.js index 43cf14ec5..a57fe0956 100644 --- a/src/api-umbrella/admin-ui/app/controllers/stats/users.js +++ b/src/api-umbrella/admin-ui/app/controllers/stats/users.js @@ -1,7 +1,4 @@ import Base from './base'; export default Base.extend({ - downloadUrl: function() { - return '/admin/stats/users.csv?' + $.param(this.get('query.params')); - }.property('query.params', 'query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), }); diff --git a/src/api-umbrella/admin-ui/app/helpers/inflect.js b/src/api-umbrella/admin-ui/app/helpers/inflect.js new file mode 100644 index 000000000..0208c939c --- /dev/null +++ b/src/api-umbrella/admin-ui/app/helpers/inflect.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; + +export function inflect(params) { + let word = params[0]; + let number = params[1]; + return inflection.inflect(word, number); +} + +export default Ember.Helper.helper(inflect); diff --git a/src/api-umbrella/admin-ui/app/index.html b/src/api-umbrella/admin-ui/app/index.html index 063da98ac..dff3cb81a 100644 --- a/src/api-umbrella/admin-ui/app/index.html +++ b/src/api-umbrella/admin-ui/app/index.html @@ -17,6 +17,11 @@ {{content-for "body"}} + + + diff --git a/src/api-umbrella/admin-ui/app/models/stats/drilldown.js b/src/api-umbrella/admin-ui/app/models/stats/drilldown.js index e80447700..6adde56f6 100644 --- a/src/api-umbrella/admin-ui/app/models/stats/drilldown.js +++ b/src/api-umbrella/admin-ui/app/models/stats/drilldown.js @@ -1,21 +1,24 @@ import Ember from 'ember'; -export default Ember.Object.extend(Ember.Evented, { +let Drilldown = Ember.Object.extend(Ember.Evented, { results: null, -}).reopenClass({ - find(params) { - let promise = Ember.Deferred.create(); +}); - $.ajax({ - url: '/api-umbrella/v1/analytics/drilldown.json', - data: params, - }).done(function(data) { - let map = Admin.StatsDrilldown.create(data); - promise.resolve(map); - }).fail(function() { - promise.reject(); - }); +Drilldown.reopenClass({ + urlRoot: '/api-umbrella/v1/analytics/drilldown.json', - return promise; + find(params) { + return new Ember.RSVP.Promise(function(resolve, reject) { + return $.ajax({ + url: this.urlRoot, + data: params + }).then(function(data) { + resolve(new Drilldown(data)); + }, function() { + reject(); + }); + }.bind(this)); }, }); + +export default Drilldown; diff --git a/src/api-umbrella/admin-ui/app/models/stats/logs.js b/src/api-umbrella/admin-ui/app/models/stats/logs.js index 64755dd77..bff33d4be 100644 --- a/src/api-umbrella/admin-ui/app/models/stats/logs.js +++ b/src/api-umbrella/admin-ui/app/models/stats/logs.js @@ -1,24 +1,27 @@ import Ember from 'ember'; -export default Ember.Object.extend(Ember.Evented, { +let Logs = Ember.Object.extend(Ember.Evented, { hits_over_time: null, stats: null, facets: null, logs: null, -}).reopenClass({ - find(params) { - let promise = Ember.Deferred.create(); +}); - $.ajax({ - url: '/admin/stats/search.json', - data: params, - }).done(function(data) { - let stats = Admin.StatsLogs.create(data); - promise.resolve(stats); - }).fail(function() { - promise.reject(); - }); +Logs.reopenClass({ + urlRoot: '/admin/stats/search.json', - return promise; + find(params) { + return new Ember.RSVP.Promise(function(resolve, reject) { + return $.ajax({ + url: this.urlRoot, + data: params + }).then(function(data) { + resolve(new Logs(data)); + }, function() { + reject(); + }); + }.bind(this)); }, }); + +export default Logs; diff --git a/src/api-umbrella/admin-ui/app/models/stats/map.js b/src/api-umbrella/admin-ui/app/models/stats/map.js index 63a4e1270..f7f1e4b9e 100644 --- a/src/api-umbrella/admin-ui/app/models/stats/map.js +++ b/src/api-umbrella/admin-ui/app/models/stats/map.js @@ -1,22 +1,27 @@ import Ember from 'ember'; -export default Ember.Object.extend(Ember.Evented, { - regions: null, - map_regions: null, -}).reopenClass({ - find(params) { - let promise = Ember.Deferred.create(); +let Map = Ember.Object.extend(Ember.Evented, { + hits_over_time: null, + stats: null, + facets: null, + logs: null, +}); - $.ajax({ - url: '/admin/stats/map.json', - data: params, - }).done(function(data) { - let map = Admin.StatsMap.create(data); - promise.resolve(map); - }).fail(function() { - promise.reject(); - }); +Map.reopenClass({ + urlRoot: '/admin/stats/map.json', - return promise; + find(params) { + return new Ember.RSVP.Promise(function(resolve, reject) { + return $.ajax({ + url: this.urlRoot, + data: params + }).then(function(data) { + resolve(new Map(data)); + }, function() { + reject(); + }); + }.bind(this)); }, }); + +export default Map; diff --git a/src/api-umbrella/admin-ui/app/router.js b/src/api-umbrella/admin-ui/app/router.js index 698b7b0e9..4a6d1cc9c 100644 --- a/src/api-umbrella/admin-ui/app/router.js +++ b/src/api-umbrella/admin-ui/app/router.js @@ -36,17 +36,10 @@ Router.map(function() { }); this.route('stats', { path: '/stats' }, function() { - this.route('drilldown', { path: '/drilldown/*query' }); - this.route('drilldownDefault', { path: '/drilldown' }); - - this.route('logs', { path: '/logs/*query' }); - this.route('logsDefault', { path: '/logs' }); - - this.route('users', { path: '/users/*query' }); - this.route('usersDefault', { path: '/users' }); - - this.route('map', { path: '/map/*query' }); - this.route('mapDefault', { path: '/map' }); + this.route('drilldown', { path: '/drilldown' }); + this.route('logs', { path: '/logs' }); + this.route('users', { path: '/users' }); + this.route('map', { path: '/map' }); }); this.route('website_backends', { path: '/website_backends' }, function() { diff --git a/src/api-umbrella/admin-ui/app/routes/stats/base.js b/src/api-umbrella/admin-ui/app/routes/stats/base.js index 2532671de..4586694a8 100644 --- a/src/api-umbrella/admin-ui/app/routes/stats/base.js +++ b/src/api-umbrella/admin-ui/app/routes/stats/base.js @@ -2,92 +2,79 @@ import Ember from 'ember'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; export default Ember.Route.extend(AuthenticatedRouteMixin, { - defaultQueryParams: { - tz: jstz.determine().name(), - search: '', - start_at: moment().subtract(29, 'days').format('YYYY-MM-DD'), - end_at: moment().format('YYYY-MM-DD'), - query: JSON.stringify({ - condition: 'AND', - rules: [{ - field: 'gatekeeper_denied_code', - id: 'gatekeeper_denied_code', - input: 'select', - operator: 'is_null', - type: 'string', - value: null, - }], - }), - }, - - model(params) { - this.controllerFor('application').set('isLoading', true); - - this.setQueryParams(params); + queryParams: { + tz: { + refreshModel: true, + }, + interval: { + refreshModel: true, + }, + search: { + refreshModel: true, + }, + start_at: { + refreshModel: true, + }, + end_at: { + refreshModel: true, + }, + query: { + refreshModel: true, + }, + beta_analytics: { + refreshModel: true, + }, + prefix: { + refreshModel: true, + }, + region: { + refreshModel: true, + }, }, setupController(controller, model) { - if(!controller.get('query')) { - controller.set('query', this.get('query')); - } - controller.set('model', model); - - this.controllerFor('application').set('isLoading', false); + controller.set('queryParamValues', this.get('queryParamValues') || {}); + controller.set('allQueryParamValues', this.paramsFor(this.routeName)); $('ul.nav li').removeClass('active'); $('ul.nav li.nav-analytics').addClass('active'); }, - setQueryParams(params) { - let activeQueryParams = {}; - if(params && params.query) { - activeQueryParams = $.deparam(params.query); - } - - _.defaults(activeQueryParams, this.defaultQueryParams); - this.set('activeQueryParams', activeQueryParams); + validateParams(params) { + let valid = true; - let query = this.get('query'); - if(!query) { - query = Ember.Object.create({ params: {} }); - } + let interval = params.interval; + let start = moment(params.start_at); + let end = moment(params.end_at); - // Wrap setting the parameters in a begin/end transaction and only set - // values that differ. This is to cut down on unneeded observer - // notifications. - query.beginPropertyChanges(); - for(let prop in activeQueryParams) { - if(activeQueryParams.hasOwnProperty(prop)) { - let paramKey = 'params.' + prop; - let existingValue = query.get(paramKey); - let newValue = activeQueryParams[prop]; + let range = end.unix() - start.unix(); + switch(interval) { + case 'minute': + // 2 days maximum range + if(range > 2 * 24 * 60 * 60) { + valid = false; + bootbox.alert('Your date range is too large for viewing minutely data. Adjust your viewing interval or choose a date range to no more than 2 days.'); + } - if(newValue !== existingValue) { - query.set(paramKey, newValue); + break; + case 'hour': + // 31 day maximum range + if(range > 31 * 24 * 60 * 60) { + valid = false; + bootbox.alert('Your date range is too large for viewing hourly data. Adjust your viewing interval or choose a date range to no more than 31 days.'); } - } - } - query.endPropertyChanges(); - if(!this.get('query')) { - this.set('query', query); + break; } - }, - queryChange: function() { - let newQueryParams = this.get('query.params'); - if(newQueryParams && !_.isEmpty(newQueryParams)) { - let activeQueryParams = this.get('activeQueryParams'); - if(!_.isEqual(newQueryParams, activeQueryParams)) { - this.transitionTo('stats.logs', $.param(newQueryParams)); - } - } - }.observes('query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), + return valid; + }, actions: { - error() { - bootbox.alert('An unexpected error occurred. Please check your query and try again.'); + queryParamsDidChange: function(changed, present) { + this._super(...arguments); + this.set('queryParamValues', present); }, }, }); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/drilldown-default.js b/src/api-umbrella/admin-ui/app/routes/stats/drilldown-default.js deleted file mode 100644 index 79ee69d99..000000000 --- a/src/api-umbrella/admin-ui/app/routes/stats/drilldown-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Drilldown from './drilldown'; - -export default Drilldown.extend({ - renderTemplate() { - this.render('stats/drilldown', { controller: 'statsDrilldownDefault' }); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/drilldown.js b/src/api-umbrella/admin-ui/app/routes/stats/drilldown.js index 2b1ced3c5..66397bea2 100644 --- a/src/api-umbrella/admin-ui/app/routes/stats/drilldown.js +++ b/src/api-umbrella/admin-ui/app/routes/stats/drilldown.js @@ -1,59 +1,12 @@ import Base from './base'; +import StatsDrilldown from 'api-umbrella-admin/models/stats/drilldown'; export default Base.extend({ - init() { - _.defaults(this.defaultQueryParams, { - interval: 'day', - prefix: '0/', - }); - }, - model(params) { - this._super(params); - if(this.validateOptions()) { - return Admin.StatsDrilldown.find(this.get('query.params')); + if(this.validateParams(params)) { + return StatsDrilldown.find(params); } else { return {}; } }, - - queryChange: function() { - let newQueryParams = this.get('query.params'); - if(newQueryParams && !_.isEmpty(newQueryParams)) { - let activeQueryParams = this.get('activeQueryParams'); - if(!_.isEqual(newQueryParams, activeQueryParams)) { - this.transitionTo('stats.drilldown', $.param(newQueryParams)); - } - } - }.observes('query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), - - validateOptions() { - let valid = true; - - let interval = this.get('query.params.interval'); - let start = moment(this.get('query.params.start_at')); - let end = moment(this.get('query.params.end_at')); - - let range = end.unix() - start.unix(); - switch(interval) { - case 'minute': - // 2 days maximum range - if(range > 2 * 24 * 60 * 60) { - valid = false; - bootbox.alert('Your date range is too large for viewing minutely data. Adjust your viewing interval or choose a date range to no more than 2 days.'); - } - - break; - case 'hour': - // 31 day maximum range - if(range > 31 * 24 * 60 * 60) { - valid = false; - bootbox.alert('Your date range is too large for viewing hourly data. Adjust your viewing interval or choose a date range to no more than 31 days.'); - } - - break; - } - - return valid; - }, }); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/logs-default.js b/src/api-umbrella/admin-ui/app/routes/stats/logs-default.js deleted file mode 100644 index daa96d9fc..000000000 --- a/src/api-umbrella/admin-ui/app/routes/stats/logs-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Logs from './logs'; - -export default Logs.extend({ - renderTemplate() { - this.render('stats/logs', { controller: 'statsLogsDefault' }); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/logs.js b/src/api-umbrella/admin-ui/app/routes/stats/logs.js index ef0969dae..45e001f60 100644 --- a/src/api-umbrella/admin-ui/app/routes/stats/logs.js +++ b/src/api-umbrella/admin-ui/app/routes/stats/logs.js @@ -1,58 +1,12 @@ import Base from './base'; +import StatsLogs from 'api-umbrella-admin/models/stats/logs'; export default Base.extend({ - init() { - _.defaults(this.defaultQueryParams, { - interval: 'day', - }); - }, - model(params) { - this._super(params); - if(this.validateOptions()) { - return Admin.StatsLogs.find(this.get('query.params')); + if(this.validateParams(params)) { + return StatsLogs.find(params); } else { return {}; } }, - - queryChange: function() { - let newQueryParams = this.get('query.params'); - if(newQueryParams && !_.isEmpty(newQueryParams)) { - let activeQueryParams = this.get('activeQueryParams'); - if(!_.isEqual(newQueryParams, activeQueryParams)) { - this.transitionTo('stats.logs', $.param(newQueryParams)); - } - } - }.observes('query.params.query', 'query.params.search', 'query.params.interval', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), - - validateOptions() { - let valid = true; - - let interval = this.get('query.params.interval'); - let start = moment(this.get('query.params.start_at')); - let end = moment(this.get('query.params.end_at')); - - let range = end.unix() - start.unix(); - switch(interval) { - case 'minute': - // 2 days maximum range - if(range > 2 * 24 * 60 * 60) { - valid = false; - bootbox.alert('Your date range is too large for viewing minutely data. Adjust your viewing interval or choose a date range to no more than 2 days.'); - } - - break; - case 'hour': - // 31 day maximum range - if(range > 31 * 24 * 60 * 60) { - valid = false; - bootbox.alert('Your date range is too large for viewing hourly data. Adjust your viewing interval or choose a date range to no more than 31 days.'); - } - - break; - } - - return valid; - }, }); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/map-default.js b/src/api-umbrella/admin-ui/app/routes/stats/map-default.js deleted file mode 100644 index 288198046..000000000 --- a/src/api-umbrella/admin-ui/app/routes/stats/map-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Map from './map'; - -export default Map.extend({ - renderTemplate() { - this.render('stats/map', { controller: 'statsMapDefault' }); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/map.js b/src/api-umbrella/admin-ui/app/routes/stats/map.js index 7a11761ba..9601a8742 100644 --- a/src/api-umbrella/admin-ui/app/routes/stats/map.js +++ b/src/api-umbrella/admin-ui/app/routes/stats/map.js @@ -1,25 +1,13 @@ import Base from './base'; +import StatsMap from 'api-umbrella-admin/models/stats/map'; export default Base.extend({ - init() { - _.defaults(this.defaultQueryParams, { - region: 'world', - }); - }, - model(params) { - this._super(params); - return Admin.StatsMap.find(this.get('query.params')); - }, - - queryChange: function() { - let newQueryParams = this.get('query.params'); - if(newQueryParams && !_.isEmpty(newQueryParams)) { - let activeQueryParams = this.get('activeQueryParams'); - if(!_.isEqual(newQueryParams, activeQueryParams)) { - this.transitionTo('stats.map', $.param(newQueryParams)); - } + if(this.validateParams(params)) { + return StatsMap.find(params); + } else { + return {}; } - }.observes('query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.region', 'query.params.beta_analytics'), + }, }); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/users-default.js b/src/api-umbrella/admin-ui/app/routes/stats/users-default.js deleted file mode 100644 index db7468788..000000000 --- a/src/api-umbrella/admin-ui/app/routes/stats/users-default.js +++ /dev/null @@ -1,7 +0,0 @@ -import Users from './users'; - -export default Users.extend({ - renderTemplate() { - this.render('stats/users', { controller: 'statsUsersDefault' }); - }, -}); diff --git a/src/api-umbrella/admin-ui/app/routes/stats/users.js b/src/api-umbrella/admin-ui/app/routes/stats/users.js index 1410ff234..a57fe0956 100644 --- a/src/api-umbrella/admin-ui/app/routes/stats/users.js +++ b/src/api-umbrella/admin-ui/app/routes/stats/users.js @@ -1,18 +1,4 @@ import Base from './base'; export default Base.extend({ - model(params) { - this._super(params); - return {}; - }, - - queryChange: function() { - let newQueryParams = this.get('query.params'); - if(newQueryParams && !_.isEmpty(newQueryParams)) { - let activeQueryParams = this.get('activeQueryParams'); - if(!_.isEqual(newQueryParams, activeQueryParams)) { - this.transitionTo('stats.users', $.param(newQueryParams)); - } - } - }.observes('query.params.query', 'query.params.search', 'query.params.start_at', 'query.params.end_at', 'query.params.beta_analytics'), }); diff --git a/src/api-umbrella/admin-ui/app/templates/components/admin-groups/index-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/admin-groups/index-table.hbs index 7d562c2ff..52f6a684f 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/admin-groups/index-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/admin-groups/index-table.hbs @@ -1,3 +1,3 @@
-
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/admins/index-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/admins/index-table.hbs index 79dcd2181..e05f53a67 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/admins/index-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/admins/index-table.hbs @@ -1,5 +1,5 @@
-
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-scopes/index-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/api-scopes/index-table.hbs index 7d562c2ff..52f6a684f 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/api-scopes/index-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/api-scopes/index-table.hbs @@ -1,3 +1,3 @@
-
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-users/index-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/api-users/index-table.hbs index 7d562c2ff..52f6a684f 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/api-users/index-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/api-users/index-table.hbs @@ -1,3 +1,3 @@
-
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/index-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/apis/index-table.hbs index b5921db28..65a3eecc8 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/index-table.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/apis/index-table.hbs @@ -1,5 +1,5 @@
-
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs new file mode 100644 index 000000000..93127e0d8 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs @@ -0,0 +1,7 @@ +{{#each breadcrumbLinks as |breadcrumb|}} + {{#if breadcrumb.prefix}} + {{#link-to "stats.drilldown" (query-params prefix=breadcrumb.prefix)}}{{breadcrumb.name}}{{/link-to}} / + {{else}} + {{breadcrumb.name}} + {{/if}} +{{/each}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs new file mode 100644 index 000000000..889d9eead --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs @@ -0,0 +1 @@ +{{yield}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-table.hbs new file mode 100644 index 000000000..acd08a54e --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-table.hbs @@ -0,0 +1,6 @@ +
+
+
+ diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-chart.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-chart.hbs new file mode 100644 index 000000000..889d9eead --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-chart.hbs @@ -0,0 +1 @@ +{{yield}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-highlights.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-highlights.hbs new file mode 100644 index 000000000..64281c6bc --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-highlights.hbs @@ -0,0 +1,28 @@ +
+
+ {{format-number stats.total_hits format="0,0"}} + {{inflect "hit" stats.total_hits}} +
+
+ {{format-number stats.total_users format="0,0"}} + unique {{inflect "user" stats.total_users}} + + {{! view 'stats/facet-table' + data=model.aggregations.users + facetTerm='user_email' + toggleLabel='view top users'}} +
+
+ {{format-number stats.total_ips format="0,0"}} + unique ip {{inflect "address" stats.total_ips}} + + {{! view 'stats/facet-table' + data=model.aggregations.ips + facetTerm='request_ip' + toggleLabel='view top ips'}} +
+
+ {{format-number stats.average_response_time format="0,0"}} ms + average response time +
+
diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-table.hbs new file mode 100644 index 000000000..acd08a54e --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-table.hbs @@ -0,0 +1,6 @@ +
+
+
+ diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs new file mode 100644 index 000000000..ff97b0904 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs @@ -0,0 +1,7 @@ +{{#each breadcrumbLinks as |breadcrumb|}} + {{#if breadcrumb.region}} + {{#link-to "stats.map" (query-params region=breadcrumb.region)}}{{breadcrumb.name}}{{/link-to}} / + {{else}} + {{breadcrumb.name}} + {{/if}} +{{/each}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-map.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-map.hbs new file mode 100644 index 000000000..889d9eead --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-map.hbs @@ -0,0 +1 @@ +{{yield}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-table.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-table.hbs new file mode 100644 index 000000000..acd08a54e --- /dev/null +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-table.hbs @@ -0,0 +1,6 @@ +
+
+
+ diff --git a/src/api-umbrella/admin-ui/app/templates/stats/-query-form.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs similarity index 76% rename from src/api-umbrella/admin-ui/app/templates/stats/-query-form.hbs rename to src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs index 401801b13..9715461de 100644 --- a/src/api-umbrella/admin-ui/app/templates/stats/-query-form.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs @@ -1,23 +1,33 @@
-
-
+
+ -
- +
+ - {{! #if view.enableInterval}} -
- - - - - + {{#if enableInterval}} +
+ + + + +
- {{! /if}} + {{/if}}
{{#if model.id}} -
+ {{/if}} diff --git a/src/api-umbrella/admin-ui/app/templates/website-backends/edit.hbs b/src/api-umbrella/admin-ui/app/templates/website-backends/edit.hbs index 69f69a13a..82932e2cb 100644 --- a/src/api-umbrella/admin-ui/app/templates/website-backends/edit.hbs +++ b/src/api-umbrella/admin-ui/app/templates/website-backends/edit.hbs @@ -1,2 +1,2 @@

Edit Website Backend

-{{website-backends/record-form model=model action="redirectTo"}} +{{website-backends/record-form model=model}} diff --git a/src/api-umbrella/admin-ui/app/templates/website-backends/new.hbs b/src/api-umbrella/admin-ui/app/templates/website-backends/new.hbs index 259c3b4b6..7b22fc744 100644 --- a/src/api-umbrella/admin-ui/app/templates/website-backends/new.hbs +++ b/src/api-umbrella/admin-ui/app/templates/website-backends/new.hbs @@ -1,2 +1,2 @@

Add Website Backend

-{{website-backends/record-form model=model action="redirectTo"}} +{{website-backends/record-form model=model}} From 95d21c6b9f80222b3fbc802355bfb88bf7eb4588 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sun, 31 Jul 2016 19:00:01 -0600 Subject: [PATCH 025/214] Cleanup styles a bit. --- .../styles/{admin/base.scss => _base.scss} | 165 ++---------------- .../styles/{admin/stats.scss => _stats.scss} | 0 .../admin-ui/app/styles/_variables_post.scss | 14 ++ .../admin-ui/app/styles/_variables_pre.scss | 1 + .../admin-ui/app/styles/admin/variables.scss | 5 - src/api-umbrella/admin-ui/app/styles/app.scss | 7 +- 6 files changed, 32 insertions(+), 160 deletions(-) rename src/api-umbrella/admin-ui/app/styles/{admin/base.scss => _base.scss} (75%) rename src/api-umbrella/admin-ui/app/styles/{admin/stats.scss => _stats.scss} (100%) create mode 100644 src/api-umbrella/admin-ui/app/styles/_variables_post.scss create mode 100644 src/api-umbrella/admin-ui/app/styles/_variables_pre.scss delete mode 100644 src/api-umbrella/admin-ui/app/styles/admin/variables.scss diff --git a/src/api-umbrella/admin-ui/app/styles/admin/base.scss b/src/api-umbrella/admin-ui/app/styles/_base.scss similarity index 75% rename from src/api-umbrella/admin-ui/app/styles/admin/base.scss rename to src/api-umbrella/admin-ui/app/styles/_base.scss index e7787fb1f..b1f11987c 100644 --- a/src/api-umbrella/admin-ui/app/styles/admin/base.scss +++ b/src/api-umbrella/admin-ui/app/styles/_base.scss @@ -6,80 +6,6 @@ body { font-weight: bold; } -.crumbs { - font-size: 85%; - color: #3c4349; - font-weight: bold; - margin-bottom: 12px; -} - -.crumbs a:link, -.crumbs a:visited { - color: #3c4349; -} - - -ul.collection-list { - margin: 0px; -} - -ul.collection-list li { - list-style-type: none; - margin-bottom: 10px; -} - -ul.collection-list ul { - margin: 10px 0px 10px 40px; -} - -ul.collection-list .collection-item { - background-color: #e0e0e3; - padding: 8px 16px; - - border-radius: 16px; - - -webkit-box-shadow: 1px 1px 0px 0px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 1px 0px 0px rgba(0, 0, 0, 0.2); - box-shadow: 1px 1px 0px 0px rgba(0, 0, 0, 0.2); -} - -ul.collection-list .collection-actions { - float: right; -} - -.input { - margin: 3px 0px; -} - -.input label { - font-weight: bold; - margin-bottom: 2px; -} - -.hint { - display: block; - clear: left; - color: #777; - font-size: 93%; - padding-top: 2px; -} - -textarea.editor { -} - -input.fill, -textarea.fill { - width: 100%; -} - -.icon { - width: 17px; - height: 17px; - display: block; - float: left; - text-indent: -9999px; -} - .button-actions { text-align: right; margin-bottom: 16px; @@ -92,18 +18,6 @@ textarea.fill { z-index: 999; } -.select-mini { - font-size: 11px; - height: 22px; - line-height: 22px; - margin-bottom: 0px; - padding-top: 2px; - padding-bottom: 2px; -} - -#results_table { -} - #results_table .table th, #results_table .table td { white-space: nowrap; @@ -124,7 +38,7 @@ table.table thead .sorting_asc:after, table.table thead .sorting_desc:after { opacity: 1.0; font-family: FontAwesome; - color: #ddd; + color: $gray-lighter; margin-left: 8px; } @@ -148,7 +62,7 @@ table.table thead .sorting_desc:after { div.dataTables_info { padding: 0px; font-size: 13px; - color: #666; + color: $text-color-light; } div.dataTables_paginate { @@ -162,7 +76,7 @@ div.dataTables_length { label { float: none; font-size: 13px; - color: #666; + color: $text-color-light; } select { @@ -184,7 +98,7 @@ div.dataTables_wrapper { } .blockUI { - color: #999 !important; + color: $gray-light !important; border: 1px solid #ddd !important; font-size: 32px !important; line-height: 60px !important; @@ -201,33 +115,12 @@ div.dataTables_wrapper { margin-top: -30px; border: 1px solid #ddd; text-align: center; - color: #999; + color: $gray-light; font-size: 32px; line-height: 60px; background-color: white; } -/* -.control-label { - font-weight: bold; - - label { - font-weight: bold; - display: inline; - } -} -*/ - -/* -.control-group { - margin-top: 5px; -} - -.form-horizontal .control-group { - margin-bottom: 10px; -} -*/ - .form-horizontal.condensed .form-group { margin-bottom: 5px; } @@ -248,7 +141,7 @@ fieldset.collapsible { legend { margin-bottom: 2px; border-bottom-width: 1px; - border-color: #999; + border-color: $gray-light; margin-left: -12px; padding: 6px 10px 3px 2px; line-height: 22px; @@ -261,7 +154,7 @@ legend a { .fieldset-note { font-size: 85%; - color: #555; + color: $text-color-light; margin-bottom: 4px; } @@ -306,13 +199,13 @@ fieldset .table { .arrow { margin-top: 24px; text-align: center; - color: #999; + color: $gray-light; font-size: 10px; line-height: 10px; } .arrow i { - color: #ddd; + color: lighten($gray-light, 16%); } .arrow-vertical { @@ -359,18 +252,6 @@ table input { margin-bottom: 0px !important; } -/* -.form-horizontal-wide { - .control-label { - width: 240px; - } - - .controls { - margin-left: 260px; - } -} -*/ - legend a:hover { text-decoration: none; } @@ -393,21 +274,11 @@ a:hover { font-family: $font-family-monospace; } -/* -.selectize-control { - width: 100%; -} - -.selectize-dropdown { - z-index: 9999; -} -*/ - .record-details { text-align: right; font-size: 11px; line-height: 13px; - color: #777; + color: $text-color-lighter; } th.reorder-handle, @@ -501,7 +372,7 @@ td.reorder-handle { text-align: center; font-size: 12px; font-style: italic; - color: #555; + color: $text-color-light; } .table th.text-center, @@ -535,16 +406,6 @@ td.reorder-handle { } } -/* Pulled from Bootstrap 3. Remove once we upgrade */ -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap; -} - .publish-toggle-checkboxes { margin: -28px 0px 32px 17px; text-align: center; @@ -557,13 +418,13 @@ td.reorder-handle { } #version_footer .row-fluid { - border-top: 1px solid #ddd; + border-top: 1px solid $gray-lighter; text-align: center; margin-top: 3em; margin-bottom: 1em; padding-top: 1em; font-size: 11px; - color: #777; + color: $text-color-lighter; } // For when we want to submit a form with the enter key, but don't want a real diff --git a/src/api-umbrella/admin-ui/app/styles/admin/stats.scss b/src/api-umbrella/admin-ui/app/styles/_stats.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/admin/stats.scss rename to src/api-umbrella/admin-ui/app/styles/_stats.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_variables_post.scss b/src/api-umbrella/admin-ui/app/styles/_variables_post.scss new file mode 100644 index 000000000..93402524a --- /dev/null +++ b/src/api-umbrella/admin-ui/app/styles/_variables_post.scss @@ -0,0 +1,14 @@ +$headings-color: $text-color; + +$padding-base-vertical: 6px; +$padding-large-vertical: 10px; +$modal-inner-padding: 15px; + +$navbar-default-bg: lighten($gray-base, 23%); +$navbar-default-link-hover-bg: darken($navbar-default-bg, 10%); +$navbar-default-link-active-bg: $navbar-default-link-hover-bg; + +$gray-lighter: lighten($gray-base, 85%); + +$text-color-light: lighten($text-color, 16%); +$text-color-lighter: lighten($text-color, 28%); diff --git a/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss b/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss new file mode 100644 index 000000000..95a27dbd3 --- /dev/null +++ b/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss @@ -0,0 +1 @@ +$text-color: #313131; diff --git a/src/api-umbrella/admin-ui/app/styles/admin/variables.scss b/src/api-umbrella/admin-ui/app/styles/admin/variables.scss deleted file mode 100644 index 45e5f9adb..000000000 --- a/src/api-umbrella/admin-ui/app/styles/admin/variables.scss +++ /dev/null @@ -1,5 +0,0 @@ -$headings-color: $text-color; - -$navbar-default-bg: lighten($gray-base, 23%); -$navbar-default-link-hover-bg: darken($navbar-default-bg, 10%); -$navbar-default-link-active-bg: $navbar-default-link-hover-bg; diff --git a/src/api-umbrella/admin-ui/app/styles/app.scss b/src/api-umbrella/admin-ui/app/styles/app.scss index 0ccc50446..cf5671a13 100644 --- a/src/api-umbrella/admin-ui/app/styles/app.scss +++ b/src/api-umbrella/admin-ui/app/styles/app.scss @@ -1,10 +1,11 @@ +@import "_variables_pre.scss"; @import "bower_components/bootswatch/cerulean/_variables.scss"; -@import "admin/variables"; +@import "_variables_post.scss"; @import "bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss"; @import "bower_components/bootswatch/cerulean/_bootswatch.scss"; @import "bower_components/font-awesome/scss/font-awesome.scss"; @import "bower_components/jQuery-QueryBuilder/dist/scss/default.scss"; @import "bower_components/bootstrap-daterangepicker/daterangepicker.scss"; -@import "admin/base"; -@import "admin/stats"; +@import "_base.scss"; +@import "_stats.scss"; From 2764bdf3c4eec064443e06dc0bcd870b31ef69a6 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Sat, 6 Aug 2016 09:12:53 -0600 Subject: [PATCH 026/214] Fix some upgrade layout issues and functionality with analytics filters. --- .../admin-ui/app/initializers/qtip.js | 34 ++++++++++++++ .../admin-ui/app/styles/_stats.scss | 10 ----- .../admin-ui/app/styles/_variables_post.scss | 4 -- .../admin-ui/app/styles/_variables_pre.scss | 9 ++++ .../templates/components/stats/query-form.hbs | 44 +++++++++---------- src/api-umbrella/admin-ui/bower.json | 4 +- src/api-umbrella/admin-ui/ember-cli-build.js | 7 ++- src/api-umbrella/admin-ui/package.json | 2 +- 8 files changed, 73 insertions(+), 41 deletions(-) diff --git a/src/api-umbrella/admin-ui/app/initializers/qtip.js b/src/api-umbrella/admin-ui/app/initializers/qtip.js index 64e9007fa..dfaf2a924 100644 --- a/src/api-umbrella/admin-ui/app/initializers/qtip.js +++ b/src/api-umbrella/admin-ui/app/initializers/qtip.js @@ -25,6 +25,40 @@ export function initialize() { event.preventDefault(); }); + + $(document).on('click', 'a[rel=popover]', function(event) { + $(this).qtip({ + overwrite: false, + show: { + event: event.type, + ready: true, + solo: true, + }, + hide: { + event: 'unfocus', + }, + content: { + text: function(event) { + var target = $(event.target).attr('href'); + var content = $(target).html(); + return content; + }, + }, + style: { + classes: 'qtip-bootstrap qtip-wide ' + $(this).data('tooltip-class'), + }, + position: { + viewport: false, + my: 'top left', + at: 'bottom center', + adjust: { + y: 2, + }, + }, + }, event); + + event.preventDefault(); + }); } export default { diff --git a/src/api-umbrella/admin-ui/app/styles/_stats.scss b/src/api-umbrella/admin-ui/app/styles/_stats.scss index 630336c4b..c34399c0f 100644 --- a/src/api-umbrella/admin-ui/app/styles/_stats.scss +++ b/src/api-umbrella/admin-ui/app/styles/_stats.scss @@ -23,16 +23,6 @@ } .advanced-filter { - .input-append { - margin-bottom: 0px; - } - - input { - font-size: 12px; - padding: 2px 3px; - min-height: 20px; - } - .help-block { font-size: 85%; line-height: 110%; diff --git a/src/api-umbrella/admin-ui/app/styles/_variables_post.scss b/src/api-umbrella/admin-ui/app/styles/_variables_post.scss index 93402524a..8d8fe42bf 100644 --- a/src/api-umbrella/admin-ui/app/styles/_variables_post.scss +++ b/src/api-umbrella/admin-ui/app/styles/_variables_post.scss @@ -1,9 +1,5 @@ $headings-color: $text-color; -$padding-base-vertical: 6px; -$padding-large-vertical: 10px; -$modal-inner-padding: 15px; - $navbar-default-bg: lighten($gray-base, 23%); $navbar-default-link-hover-bg: darken($navbar-default-bg, 10%); $navbar-default-link-active-bg: $navbar-default-link-hover-bg; diff --git a/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss b/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss index 95a27dbd3..6d1dc9ac3 100644 --- a/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss +++ b/src/api-umbrella/admin-ui/app/styles/_variables_pre.scss @@ -1 +1,10 @@ $text-color: #313131; + +// Use the default bootstrap padding & heights, rather than the larger defaults +// from the Cerulean theme. +$padding-base-vertical: 6px; +$padding-large-vertical: 10px; +$modal-inner-padding: 15px; + +// Show navbar above qtip tooltip or popovers. +$zindex-navbar-fixed: 16000; diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs b/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs index 0e749ddbd..ad610ab01 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs +++ b/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs @@ -1,7 +1,7 @@ -
+
{{#if session.data.authenticated.enable_beta_analytics}} @@ -11,19 +11,19 @@ {{#if enableInterval}}
{{/if}} @@ -44,41 +44,39 @@
- +