From 76c9f87bd0366e83644a6e1b9a11a7cf4b1d3e14 Mon Sep 17 00:00:00 2001 From: Rod Simpson Date: Fri, 25 Jul 2014 13:15:29 -0600 Subject: [PATCH 1/5] Added apache license headers to remaining files --- sdks/ios/UGAPI/v2/UGConnection.h | 16 ++++++++++++++++ sdks/ios/UGAPI/v2/UGConnection.m | 18 +++++++++++++++++- sdks/ios/UGAPI/v2/UGHTTPClient.h | 16 ++++++++++++++++ sdks/ios/UGAPI/v2/UGHTTPClient.m | 16 ++++++++++++++++ sdks/ios/UGAPI/v2/UGHTTPHelpers.h | 19 +++++++++++++++++-- sdks/ios/UGAPI/v2/UGHTTPHelpers.m | 17 ++++++++++++++++- sdks/ios/UGAPI/v2/UGHTTPResult.h | 16 ++++++++++++++++ sdks/ios/UGAPI/v2/UGHTTPResult.m | 16 ++++++++++++++++ 8 files changed, 130 insertions(+), 4 deletions(-) diff --git a/sdks/ios/UGAPI/v2/UGConnection.h b/sdks/ios/UGAPI/v2/UGConnection.h index 84e80ca7b2..d44c8e91bd 100644 --- a/sdks/ios/UGAPI/v2/UGConnection.h +++ b/sdks/ios/UGAPI/v2/UGConnection.h @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ // // UGConnection.h // UGAPIApp diff --git a/sdks/ios/UGAPI/v2/UGConnection.m b/sdks/ios/UGAPI/v2/UGConnection.m index bb441e200a..48840b34dc 100644 --- a/sdks/ios/UGAPI/v2/UGConnection.m +++ b/sdks/ios/UGAPI/v2/UGConnection.m @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ // // UGConnection.m // UGAPIApp @@ -483,7 +499,7 @@ - (NSMutableURLRequest *) createActivityForFollowersOfUser:(NSString *) userIden return [self authorizedRequestWithMethod:@"POST" path:path body:[values URLQueryData]]; - + } - (NSMutableURLRequest *) getActivitiesForUser:(NSString *) userIdentifier diff --git a/sdks/ios/UGAPI/v2/UGHTTPClient.h b/sdks/ios/UGAPI/v2/UGHTTPClient.h index 103a268644..64fe9be194 100644 --- a/sdks/ios/UGAPI/v2/UGHTTPClient.h +++ b/sdks/ios/UGAPI/v2/UGHTTPClient.h @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #import @class UGHTTPResult; diff --git a/sdks/ios/UGAPI/v2/UGHTTPClient.m b/sdks/ios/UGAPI/v2/UGHTTPClient.m index a42722a593..38aee42a51 100644 --- a/sdks/ios/UGAPI/v2/UGHTTPClient.m +++ b/sdks/ios/UGAPI/v2/UGHTTPClient.m @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #import "UGHTTPClient.h" #import "UGHTTPResult.h" diff --git a/sdks/ios/UGAPI/v2/UGHTTPHelpers.h b/sdks/ios/UGAPI/v2/UGHTTPHelpers.h index a2a5d45b00..64c678a99d 100644 --- a/sdks/ios/UGAPI/v2/UGHTTPHelpers.h +++ b/sdks/ios/UGAPI/v2/UGHTTPHelpers.h @@ -1,9 +1,24 @@ -// +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + // // UGHTTPHelpers.h // UGHTTP // // Created by Tim Burks on 2/24/12. -// Copyright (c) 2012 Radtastical Inc. All rights reserved. // #import diff --git a/sdks/ios/UGAPI/v2/UGHTTPHelpers.m b/sdks/ios/UGAPI/v2/UGHTTPHelpers.m index f29b525d32..9bad1b9ab9 100644 --- a/sdks/ios/UGAPI/v2/UGHTTPHelpers.m +++ b/sdks/ios/UGAPI/v2/UGHTTPHelpers.m @@ -1,9 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ // // UGHTTPHelpers.m // UGHTTP // // Created by Tim Burks on 2/24/12. -// Copyright (c) 2012 Radtastical Inc. All rights reserved. // #import "UGHTTPHelpers.h" diff --git a/sdks/ios/UGAPI/v2/UGHTTPResult.h b/sdks/ios/UGAPI/v2/UGHTTPResult.h index f6e01bf759..e8faf9b985 100644 --- a/sdks/ios/UGAPI/v2/UGHTTPResult.h +++ b/sdks/ios/UGAPI/v2/UGHTTPResult.h @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ // // UGHTTPResult.h // UGAPIApp diff --git a/sdks/ios/UGAPI/v2/UGHTTPResult.m b/sdks/ios/UGAPI/v2/UGHTTPResult.m index 28cc32bc84..2e0e115f71 100644 --- a/sdks/ios/UGAPI/v2/UGHTTPResult.m +++ b/sdks/ios/UGAPI/v2/UGHTTPResult.m @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ // // UGHTTPResult.m // UGAPIApp From bb066879c4362b1beb8a7e7c81b4f26941e012b0 Mon Sep 17 00:00:00 2001 From: Rod Simpson Date: Tue, 29 Jul 2014 13:30:17 -0600 Subject: [PATCH 2/5] cleanup of admin portal convert to Usergrid branding remove highcharts remove other Apigee artifacts --- .gitignore | 2 + ...vigation.css => apigeeGlobalNavigation.css | 0 {portal => deleted}/archive/coming_soon.html | 0 {portal => deleted}/archive/config.js | 0 .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin .../images/ui-bg_flat_100_deedf7_40x100.png | Bin .../images/ui-bg_flat_100_e4f1fb_40x100.png | Bin .../images/ui-bg_flat_100_f2f5f7_40x100.png | Bin .../images/ui-bg_flat_15_cd0a0a_40x100.png | Bin .../images/ui-bg_flat_50_3baae3_40x100.png | Bin .../images/ui-bg_flat_80_d7ebf9_40x100.png | Bin .../ui-bg_highlight-hard_70_000000_1x100.png | Bin .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin .../images/ui-icons_000000_256x240.png | Bin .../images/ui-icons_2694e8_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_3d80b3_256x240.png | Bin .../images/ui-icons_72a7cf_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../custom-theme/jquery-ui-1.8.9.custom.css | 0 .../archive/css/jquery-ui-timepicker.css | 0 .../archive/css/jquery.ui.statusbar.css | 0 {portal => deleted}/archive/css/prettify.css | 0 .../archive/css/usergrid-stripped.css | 0 {portal => deleted}/archive/css/usergrid.css | 0 {portal => deleted}/archive/dash/README.md | 0 .../dash/config/testacular-e2e.conf.js | 0 .../archive/dash/config/testacular.conf.js | 0 .../archive/dash/test/e2e/runner.html | 0 .../archive/dash/test/e2e/scenarios.js | 0 .../dash/test/lib/angular/angular-mocks.js | 0 .../dash/test/lib/angular/angular-scenario.js | 0 .../archive/dash/test/lib/angular/version.txt | 0 .../archive/dash/test/unit/controllersSpec.js | 0 .../archive/dash/test/unit/directivesSpec.js | 0 .../archive/dash/test/unit/filtersSpec.js | 0 .../archive/dash/test/unit/servicesSpec.js | 0 .../archive/images/APNS_cert_upload.png | Bin .../archive/images/APNS_certification.png | Bin .../archive/images/android-notification.png | Bin .../archive/images/android-sdk-download.png | Bin .../archive/images/api-activity.gif | Bin .../archive/images/apigee-logo.png | Bin .../archive/images/apigeetopbar.png | Bin .../archive/images/background_one_col.png | Bin .../archive/images/btn-copyCurl-up.png | Bin .../archive/images/clippy-bg.png | Bin {portal => deleted}/archive/images/close.gif | Bin .../archive/images/dotnet-sdk-download.png | Bin .../archive/images/down_arrow.png | Bin {portal => deleted}/archive/images/error.png | Bin .../archive/images/faviconApigee.ico | Bin .../images/glyphicons-halflings-white.png | Bin .../archive/images/glyphicons-halflings.png | Bin ...glyphicons_halflings_135_wrench-white2.pdn | Bin ...glyphicons_halflings_135_wrench-white2.png | Bin .../glyphicons_halflings_135_wrench.png | Bin .../glyphicons_halflings_135_wrench_white.png | Bin .../glyphicons_halflings_wrench_white.png | Bin .../archive/images/google_api_key.png | Bin .../archive/images/green_dot.png | Bin {portal => deleted}/archive/images/grid.png | Bin {portal => deleted}/archive/images/icons.png | Bin .../archive/images/ios-sdk-download.png | Bin .../archive/images/iphone_message.png | Bin .../images/javascript-sdk-download.png | Bin .../archive/images/left_arrow.png | Bin .../archive/images/logo-white.png | Bin .../archive/images/menuActiveTriangle.png | Bin .../archive/images/nodejs-sdk-download.png | Bin {portal => deleted}/archive/images/notice.png | Bin .../archive/images/orange-arrow.png | Bin .../images/push_notifications_icon.png | Bin .../archive/images/red_dot.png | Bin .../archive/images/right_arrow.png | Bin .../archive/images/ruby-sdk-download.png | Bin {portal => deleted}/archive/images/step_1.png | Bin {portal => deleted}/archive/images/step_2.png | Bin {portal => deleted}/archive/images/step_3.png | Bin .../archive/images/success.png | Bin .../archive/images/swish_arrow.png | Bin .../archive/images/topbackground.png | Bin .../archive/images/up_arrow.png | Bin .../archive/images/user-photo.png | Bin .../archive/images/user_profile.png | Bin .../archive/images/usergrid_200.png | Bin .../archive/images/usergrid_400.png | Bin .../archive/images/warning.png | Bin .../archive/images/yellow_dot.png | Bin .../archive/index-stripped2.html | 0 {portal => deleted}/archive/index.html | 0 {portal => deleted}/archive/js/app/app.js | 0 {portal => deleted}/archive/js/app/console.js | 0 {portal => deleted}/archive/js/app/helpers.js | 0 .../archive/js/app/navigation.js | 0 {portal => deleted}/archive/js/app/pages.js | 0 {portal => deleted}/archive/js/app/params.js | 0 .../archive/js/app/quickLogin.js | 0 {portal => deleted}/archive/js/app/session.js | 0 {portal => deleted}/archive/js/app/sso.js | 0 {portal => deleted}/archive/js/app/status.js | 0 .../archive/js/app/ui/collections.entity.js | 0 .../archive/js/app/ui/collections.user.js | 0 {portal => deleted}/archive/js/app/ui/ui.js | 0 .../archive/js/app/usergrid.appSDK.js | 0 .../archive/js/app/usergrid.appSDK.orig.js | 0 {portal => deleted}/archive/js/lib/MD5.min.js | 0 .../archive/js/lib/backbone.js | 0 .../archive/js/lib/bootstrap.min.js | 0 .../archive/js/lib/date.min.js | 0 .../archive/js/lib/jquery-1.7.2.min.js | 0 .../archive/js/lib/jquery-ui-1.8.18.min.js | 0 .../archive/js/lib/jquery.dataset.min.js | 0 .../archive/js/lib/jquery.dform-0.1.3.min.js | 0 .../archive/js/lib/jquery.jsonp-2.3.1.min.js | 0 .../archive/js/lib/jquery.tmpl.min.js | 0 .../archive/js/lib/jquery.ui.statusbar.min.js | 0 .../js/lib/jquery.ui.timepicker.min.js | 0 .../archive/js/lib/prettify.js | 0 .../archive/js/lib/underscore-min.js | 0 .../archive/js/spec/client-tests.js | 0 .../archive/js/spec/index.html | 0 .../archive/js/spec/qunit-git.css | 0 .../archive/js/spec/qunit-git.js | 0 .../archive/js/unit-tests/appSDK-tests.js | 0 .../archive/js/unit-tests/ie-jquery-tests.js | 0 .../archive/js/unit-tests/qunit.css | 0 .../archive/js/unit-tests/qunit.js | 0 {portal => deleted}/archive/loading.html | 0 {portal => deleted}/archive/max/index.html | 0 .../archive/planned_outage.html | 0 {portal => deleted}/archive/push/index.html | 0 {portal => deleted}/archive/service_down.html | 0 .../apigee.ui.activities.table_rows.html | 0 .../apigee.ui.admins.table_rows.html | 0 .../apigee.ui.applications.table_rows.html | 0 .../apigee.ui.collection.table_rows.html | 0 .../apigee.ui.collections.query.indexes.html | 0 .../apigee.ui.collections.table_rows.html | 0 .../apigee.ui.collections.user.header.html | 0 .../templates/apigee.ui.curl.detail.html | 0 .../templates/apigee.ui.feed.table_rows.html | 0 .../apigee.ui.groups.table_rows.html | 0 .../apigee.ui.panels.group.activities.html | 0 .../apigee.ui.panels.group.details.html | 0 .../apigee.ui.panels.group.memberships.html | 0 .../apigee.ui.panels.group.permissions.html | 0 ...gee.ui.panels.notifications.configure.html | 0 .../apigee.ui.panels.role.permissions.html | 0 .../apigee.ui.panels.role.users.html | 0 .../apigee.ui.panels.user.activities.html | 0 .../apigee.ui.panels.user.graph.html | 0 .../apigee.ui.panels.user.memberships.html | 0 .../apigee.ui.panels.user.permissions.html | 0 .../apigee.ui.panels.user.profile.html | 0 .../apigee.ui.role.groups.table_rows.html | 0 .../templates/apigee.ui.roles.table_rows.html | 0 .../templates/apigee.ui.users.table_rows.html | 0 .../archive/templates/test/modalForm2.html | 0 .../archive/test/autocomplete.html | 0 .../archive/test/modalForm.html | 0 .../js => deleted}/charts/chart-controller.js | 0 .../js => deleted}/charts/chart-directives.js | 0 .../js => deleted}/charts/chart-service.js | 0 .../js => deleted}/charts/highcharts.json | 0 {portal/js => deleted}/charts/sparklines.js | 0 .../usergrid-portal/archive/coming_soon.html | 0 .../usergrid-portal/archive/config.js | 0 .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin .../images/ui-bg_flat_100_deedf7_40x100.png | Bin .../images/ui-bg_flat_100_e4f1fb_40x100.png | Bin .../images/ui-bg_flat_100_f2f5f7_40x100.png | Bin .../images/ui-bg_flat_15_cd0a0a_40x100.png | Bin .../images/ui-bg_flat_50_3baae3_40x100.png | Bin .../images/ui-bg_flat_80_d7ebf9_40x100.png | Bin .../ui-bg_highlight-hard_70_000000_1x100.png | Bin .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin .../images/ui-icons_000000_256x240.png | Bin .../images/ui-icons_2694e8_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_3d80b3_256x240.png | Bin .../images/ui-icons_72a7cf_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../custom-theme/jquery-ui-1.8.9.custom.css | 0 .../archive/css/jquery-ui-timepicker.css | 0 .../archive/css/jquery.ui.statusbar.css | 0 .../usergrid-portal/archive/css/prettify.css | 0 .../archive/css/usergrid-stripped.css | 0 .../usergrid-portal/archive/css/usergrid.css | 0 .../usergrid-portal/archive/dash/README.md | 0 .../dash/config/testacular-e2e.conf.js | 0 .../archive/dash/config/testacular.conf.js | 0 .../archive/dash/test/e2e/runner.html | 0 .../archive/dash/test/e2e/scenarios.js | 0 .../dash/test/lib/angular/angular-mocks.js | 0 .../dash/test/lib/angular/angular-scenario.js | 0 .../archive/dash/test/lib/angular/version.txt | 0 .../archive/dash/test/unit/controllersSpec.js | 0 .../archive/dash/test/unit/directivesSpec.js | 0 .../archive/dash/test/unit/filtersSpec.js | 0 .../archive/dash/test/unit/servicesSpec.js | 0 .../archive/images/APNS_cert_upload.png | Bin .../archive/images/APNS_certification.png | Bin .../archive/images/android-notification.png | Bin .../archive/images/android-sdk-download.png | Bin .../archive/images/api-activity.gif | Bin .../archive/images/apigee-logo.png | Bin .../archive/images/apigeetopbar.png | Bin .../archive/images/background_one_col.png | Bin .../archive/images/btn-copyCurl-up.png | Bin .../archive/images/clippy-bg.png | Bin .../usergrid-portal/archive/images/close.gif | Bin .../archive/images/dotnet-sdk-download.png | Bin .../archive/images/down_arrow.png | Bin .../usergrid-portal/archive/images/error.png | Bin .../archive/images/faviconApigee.ico | Bin .../images/glyphicons-halflings-white.png | Bin .../archive/images/glyphicons-halflings.png | Bin ...glyphicons_halflings_135_wrench-white2.pdn | Bin ...glyphicons_halflings_135_wrench-white2.png | Bin .../glyphicons_halflings_135_wrench.png | Bin .../glyphicons_halflings_135_wrench_white.png | Bin .../glyphicons_halflings_wrench_white.png | Bin .../archive/images/google_api_key.png | Bin .../archive/images/green_dot.png | Bin .../usergrid-portal/archive/images/grid.png | Bin .../usergrid-portal/archive/images/icons.png | Bin .../archive/images/ios-sdk-download.png | Bin .../archive/images/iphone_message.png | Bin .../images/javascript-sdk-download.png | Bin .../archive/images/left_arrow.png | Bin .../archive/images/logo-white.png | Bin .../archive/images/menuActiveTriangle.png | Bin .../archive/images/nodejs-sdk-download.png | Bin .../usergrid-portal/archive/images/notice.png | Bin .../archive/images/orange-arrow.png | Bin .../images/push_notifications_icon.png | Bin .../archive/images/red_dot.png | Bin .../archive/images/right_arrow.png | Bin .../archive/images/ruby-sdk-download.png | Bin .../usergrid-portal/archive/images/step_1.png | Bin .../usergrid-portal/archive/images/step_2.png | Bin .../usergrid-portal/archive/images/step_3.png | Bin .../archive/images/success.png | Bin .../archive/images/swish_arrow.png | Bin .../archive/images/topbackground.png | Bin .../archive/images/up_arrow.png | Bin .../archive/images/user-photo.png | Bin .../archive/images/user_profile.png | Bin .../archive/images/usergrid_200.png | Bin .../archive/images/usergrid_400.png | Bin .../archive/images/warning.png | Bin .../archive/images/yellow_dot.png | Bin .../archive/index-stripped2.html | 0 .../usergrid-portal/archive/index.html | 0 .../usergrid-portal/archive/js/app/app.js | 0 .../usergrid-portal/archive/js/app/console.js | 0 .../usergrid-portal/archive/js/app/helpers.js | 0 .../archive/js/app/navigation.js | 0 .../usergrid-portal/archive/js/app/pages.js | 0 .../usergrid-portal/archive/js/app/params.js | 0 .../archive/js/app/quickLogin.js | 0 .../usergrid-portal/archive/js/app/session.js | 0 .../usergrid-portal/archive/js/app/sso.js | 0 .../usergrid-portal/archive/js/app/status.js | 0 .../archive/js/app/ui/collections.entity.js | 0 .../archive/js/app/ui/collections.user.js | 0 .../usergrid-portal/archive/js/app/ui/ui.js | 0 .../archive/js/app/usergrid.appSDK.js | 0 .../archive/js/app/usergrid.appSDK.orig.js | 0 .../usergrid-portal/archive/js/lib/MD5.min.js | 0 .../archive/js/lib/backbone.js | 0 .../archive/js/lib/bootstrap.min.js | 0 .../archive/js/lib/date.min.js | 0 .../archive/js/lib/jquery-1.7.2.min.js | 0 .../archive/js/lib/jquery-ui-1.8.18.min.js | 0 .../archive/js/lib/jquery.dataset.min.js | 0 .../archive/js/lib/jquery.dform-0.1.3.min.js | 0 .../archive/js/lib/jquery.jsonp-2.3.1.min.js | 0 .../archive/js/lib/jquery.tmpl.min.js | 0 .../archive/js/lib/jquery.ui.statusbar.min.js | 0 .../js/lib/jquery.ui.timepicker.min.js | 0 .../archive/js/lib/prettify.js | 0 .../archive/js/lib/underscore-min.js | 0 .../archive/js/spec/client-tests.js | 0 .../archive/js/spec/index.html | 0 .../archive/js/spec/qunit-git.css | 0 .../archive/js/spec/qunit-git.js | 0 .../archive/js/unit-tests/appSDK-tests.js | 0 .../archive/js/unit-tests/ie-jquery-tests.js | 0 .../archive/js/unit-tests/qunit.css | 0 .../archive/js/unit-tests/qunit.js | 0 .../usergrid-portal/archive/loading.html | 0 .../usergrid-portal/archive/max/index.html | 0 .../archive/planned_outage.html | 0 .../usergrid-portal/archive/push/index.html | 0 .../usergrid-portal/archive/service_down.html | 0 .../apigee.ui.activities.table_rows.html | 0 .../apigee.ui.admins.table_rows.html | 0 .../apigee.ui.applications.table_rows.html | 0 .../apigee.ui.collection.table_rows.html | 0 .../apigee.ui.collections.query.indexes.html | 0 .../apigee.ui.collections.table_rows.html | 0 .../apigee.ui.collections.user.header.html | 0 .../templates/apigee.ui.curl.detail.html | 0 .../templates/apigee.ui.feed.table_rows.html | 0 .../apigee.ui.groups.table_rows.html | 0 .../apigee.ui.panels.group.activities.html | 0 .../apigee.ui.panels.group.details.html | 0 .../apigee.ui.panels.group.memberships.html | 0 .../apigee.ui.panels.group.permissions.html | 0 ...gee.ui.panels.notifications.configure.html | 0 .../apigee.ui.panels.role.permissions.html | 0 .../apigee.ui.panels.role.users.html | 0 .../apigee.ui.panels.user.activities.html | 0 .../apigee.ui.panels.user.graph.html | 0 .../apigee.ui.panels.user.memberships.html | 0 .../apigee.ui.panels.user.permissions.html | 0 .../apigee.ui.panels.user.profile.html | 0 .../apigee.ui.role.groups.table_rows.html | 0 .../templates/apigee.ui.roles.table_rows.html | 0 .../templates/apigee.ui.users.table_rows.html | 0 .../archive/templates/test/modalForm2.html | 0 .../archive/test/autocomplete.html | 0 .../archive/test/modalForm.html | 0 .../angular-intro.js/Gruntfile.js | 0 .../bower_components/angular-intro.js/LICENSE | 0 .../angular-intro.js/bower.json | 0 .../build/angular-intro.min.js | 0 .../angular-intro.js/example/app.js | 0 .../angular-intro.js/package.json | 0 .../angular-intro.js/src/angular-intro.js | 0 .../bower_components/angular/README.md | 0 .../bower_components/angular/angular-csp.css | 2 +- .../bower_components/angular/angular.js | 2642 ++- .../bower_components/angular/angular.min.js | 217 + .../angular/angular.min.js.gzip | Bin 0 -> 39855 bytes .../angular/angular.min.js.map | 8 + .../bower_components/angular/bower.json | 2 +- .../angularitics/Gruntfile.js | 0 .../bower_components/angularitics/LICENSE | 0 .../bower_components/angularitics/README.md | 0 .../bower_components/angularitics/bower.json | 0 .../dist/angulartics-chartbeat.min.js | 0 .../dist/angulartics-ga-cordova.min.js | 0 .../angularitics/dist/angulartics-ga.min.js | 0 .../dist/angulartics-google-analytics.min.js | 0 .../dist/angulartics-kissmetrics.min.js | 0 .../dist/angulartics-mixpanel.min.js | 0 .../dist/angulartics-scroll.min.js | 0 .../dist/angulartics-segmentio.min.js | 0 .../angularitics/dist/angulartics.min.js | 0 .../angularitics/karma.conf.js | 0 .../angularitics/package.json | 0 .../angularitics/samples/chartbeat.html | 0 .../samples/google-analytics.html | 0 .../angularitics/samples/kissmetrics.html | 0 .../angularitics/samples/mixpanel.html | 0 .../angularitics/samples/partials/a.tpl.html | 0 .../angularitics/samples/partials/b.tpl.html | 0 .../angularitics/samples/partials/c.tpl.html | 0 .../samples/partials/root.tpl.html | 0 .../angularitics/samples/scroll.html | 0 .../angularitics/samples/segmentio.html | 0 .../angularitics/src/angulartics-chartbeat.js | 0 .../src/angulartics-ga-cordova.js | 0 .../angularitics/src/angulartics-ga.js | 0 .../src/angulartics-kissmetrics.js | 0 .../angularitics/src/angulartics-mixpanel.js | 0 .../angularitics/src/angulartics-scroll.js | 0 .../angularitics/src/angulartics-segmentio.js | 0 .../angularitics/src/angulartics.js | 0 .../angularitics/test/angularticsSpec.js | 0 .../bower_components/apigee-sdk/apigee.js | 0 .../bower_components/apigee-sdk/apigee.min.js | 0 .../bower_components/apigee-sdk/bower.json | 0 .../apigee-sdk/samples/books/index.html | 0 .../samples/collections/css/apigee.min.css | 0 .../css/jquery.mobile.icons.min.css | 0 .../samples/collections/css/theme.min.css | 0 .../apigee-sdk/samples/collections/index.html | 0 .../samples/collections/js/index.js | 0 .../entities/css/jquery.mobile.icons.min.css | 0 .../samples/entities/css/theme.min.css | 0 .../apigee-sdk/samples/entities/index.html | 0 .../apigee-sdk/samples/entities/js/index.js | 0 .../css/jquery.mobile.icons.min.css | 0 .../samples/geolocation/css/theme.min.css | 0 .../apigee-sdk/samples/geolocation/index.html | 0 .../samples/geolocation/js/index.js | 0 .../apigee-sdk/samples/messagee/app.js | 0 .../apigee-sdk/samples/messagee/index.html | 0 .../samples/messagee/usergrid.validation.js | 0 .../apigee-sdk/samples/monitoring/index.html | 0 .../samples/push/android/AndroidManifest.xml | 0 .../samples/push/android/ant.properties | 0 .../android/assets/www/PushNotification.js | 0 .../push/android/assets/www/cordova-2.7.0.js | 0 .../push/android/assets/www/css/index.css | 0 .../push/android/assets/www/img/cordova.png | Bin .../push/android/assets/www/img/logo.png | Bin .../push/android/assets/www/index.html | 0 .../push/android/assets/www/js/index.js | 0 .../samples/push/android/assets/www/main.js | 0 .../push/android/assets/www/master.css | 0 .../screen/android/screen-hdpi-landscape.png | Bin .../screen/android/screen-hdpi-portrait.png | Bin .../screen/android/screen-ldpi-landscape.png | Bin .../screen/android/screen-ldpi-portrait.png | Bin .../screen/android/screen-mdpi-landscape.png | Bin .../screen/android/screen-mdpi-portrait.png | Bin .../screen/android/screen-xhdpi-landscape.png | Bin .../screen/android/screen-xhdpi-portrait.png | Bin .../samples/push/android/assets/www/spec.html | 0 .../push/android/assets/www/spec/helper.js | 0 .../push/android/assets/www/spec/index.js | 0 .../www/spec/lib/jasmine-1.2.0/MIT.LICENSE | 0 .../spec/lib/jasmine-1.2.0/jasmine-html.js | 0 .../www/spec/lib/jasmine-1.2.0/jasmine.css | 0 .../www/spec/lib/jasmine-1.2.0/jasmine.js | 0 .../apigee-sdk/samples/push/android/build.xml | 0 .../samples/push/android/cordova/appinfo.jar | Bin .../samples/push/android/cordova/build | 0 .../samples/push/android/cordova/clean | 0 .../samples/push/android/cordova/cordova | 0 .../samples/push/android/cordova/log | 0 .../samples/push/android/cordova/release | 0 .../samples/push/android/cordova/run | 0 .../push/android/libs/android-support-v13.jar | Bin .../push/android/libs/cordova-2.7.0.jar | Bin .../samples/push/android/libs/gcm.jar | Bin .../samples/push/android/proguard-project.txt | 0 .../samples/push/android/project.properties | 0 .../android/res/drawable-hdpi/ic_launcher.png | Bin .../push/android/res/drawable-hdpi/icon.png | Bin .../android/res/drawable-ldpi/ic_launcher.png | Bin .../push/android/res/drawable-ldpi/icon.png | Bin .../android/res/drawable-mdpi/ic_launcher.png | Bin .../push/android/res/drawable-mdpi/icon.png | Bin .../res/drawable-xhdpi/ic_launcher.png | Bin .../push/android/res/drawable-xhdpi/icon.png | Bin .../push/android/res/drawable/icon.png | Bin .../samples/push/android/res/layout/main.xml | 0 .../push/android/res/values/strings.xml | 0 .../samples/push/android/res/xml/config.xml | 0 .../gcm/CordovaGCMBroadcastReceiver.java | 0 .../src/com/plugin/gcm/GCMIntentService.java | 0 .../com/plugin/gcm/PushHandlerActivity.java | 0 .../src/com/plugin/gcm/PushPlugin.java | 0 .../src/me/mdob/android/androidpush.java | 0 .../samples/push/ios/CordovaLib/Classes/CDV.h | 0 .../ios/CordovaLib/Classes/CDVAccelerometer.h | 0 .../ios/CordovaLib/Classes/CDVAccelerometer.m | 0 .../ios/CordovaLib/Classes/CDVAvailability.h | 0 .../push/ios/CordovaLib/Classes/CDVBattery.h | 0 .../push/ios/CordovaLib/Classes/CDVBattery.m | 0 .../push/ios/CordovaLib/Classes/CDVCamera.h | 0 .../push/ios/CordovaLib/Classes/CDVCamera.m | 0 .../push/ios/CordovaLib/Classes/CDVCapture.h | 0 .../push/ios/CordovaLib/Classes/CDVCapture.m | 0 .../CordovaLib/Classes/CDVCommandDelegate.h | 0 .../Classes/CDVCommandDelegateImpl.h | 0 .../Classes/CDVCommandDelegateImpl.m | 0 .../ios/CordovaLib/Classes/CDVCommandQueue.h | 0 .../ios/CordovaLib/Classes/CDVCommandQueue.m | 0 .../ios/CordovaLib/Classes/CDVConfigParser.h | 0 .../ios/CordovaLib/Classes/CDVConfigParser.m | 0 .../ios/CordovaLib/Classes/CDVConnection.h | 0 .../ios/CordovaLib/Classes/CDVConnection.m | 0 .../push/ios/CordovaLib/Classes/CDVContact.h | 0 .../push/ios/CordovaLib/Classes/CDVContact.m | 0 .../push/ios/CordovaLib/Classes/CDVContacts.h | 0 .../push/ios/CordovaLib/Classes/CDVContacts.m | 0 .../push/ios/CordovaLib/Classes/CDVDebug.h | 0 .../ios/CordovaLib/Classes/CDVDebugConsole.h | 0 .../ios/CordovaLib/Classes/CDVDebugConsole.m | 0 .../push/ios/CordovaLib/Classes/CDVDevice.h | 0 .../push/ios/CordovaLib/Classes/CDVDevice.m | 0 .../push/ios/CordovaLib/Classes/CDVEcho.h | 0 .../push/ios/CordovaLib/Classes/CDVEcho.m | 0 .../push/ios/CordovaLib/Classes/CDVExif.h | 0 .../push/ios/CordovaLib/Classes/CDVFile.h | 0 .../push/ios/CordovaLib/Classes/CDVFile.m | 0 .../ios/CordovaLib/Classes/CDVFileTransfer.h | 0 .../ios/CordovaLib/Classes/CDVFileTransfer.m | 0 .../ios/CordovaLib/Classes/CDVGlobalization.h | 0 .../ios/CordovaLib/Classes/CDVGlobalization.m | 0 .../ios/CordovaLib/Classes/CDVInAppBrowser.h | 0 .../ios/CordovaLib/Classes/CDVInAppBrowser.m | 0 .../CordovaLib/Classes/CDVInvokedUrlCommand.h | 0 .../CordovaLib/Classes/CDVInvokedUrlCommand.m | 0 .../push/ios/CordovaLib/Classes/CDVJSON.h | 0 .../push/ios/CordovaLib/Classes/CDVJSON.m | 0 .../CordovaLib/Classes/CDVJpegHeaderWriter.h | 0 .../CordovaLib/Classes/CDVJpegHeaderWriter.m | 0 .../ios/CordovaLib/Classes/CDVLocalStorage.h | 0 .../ios/CordovaLib/Classes/CDVLocalStorage.m | 0 .../push/ios/CordovaLib/Classes/CDVLocation.h | 0 .../push/ios/CordovaLib/Classes/CDVLocation.m | 0 .../push/ios/CordovaLib/Classes/CDVLogger.h | 0 .../push/ios/CordovaLib/Classes/CDVLogger.m | 0 .../ios/CordovaLib/Classes/CDVNotification.h | 0 .../ios/CordovaLib/Classes/CDVNotification.m | 0 .../push/ios/CordovaLib/Classes/CDVPlugin.h | 0 .../push/ios/CordovaLib/Classes/CDVPlugin.m | 0 .../ios/CordovaLib/Classes/CDVPluginResult.h | 0 .../ios/CordovaLib/Classes/CDVPluginResult.m | 0 .../ios/CordovaLib/Classes/CDVReachability.h | 0 .../ios/CordovaLib/Classes/CDVReachability.m | 0 .../Classes/CDVScreenOrientationDelegate.h | 0 .../push/ios/CordovaLib/Classes/CDVSound.h | 0 .../push/ios/CordovaLib/Classes/CDVSound.m | 0 .../ios/CordovaLib/Classes/CDVSplashScreen.h | 0 .../ios/CordovaLib/Classes/CDVSplashScreen.m | 0 .../ios/CordovaLib/Classes/CDVURLProtocol.h | 0 .../ios/CordovaLib/Classes/CDVURLProtocol.m | 0 .../ios/CordovaLib/Classes/CDVUserAgentUtil.h | 0 .../ios/CordovaLib/Classes/CDVUserAgentUtil.m | 0 .../CordovaLib/Classes/CDVViewController.h | 0 .../CordovaLib/Classes/CDVViewController.m | 0 .../CordovaLib/Classes/CDVWebViewDelegate.h | 0 .../CordovaLib/Classes/CDVWebViewDelegate.m | 0 .../ios/CordovaLib/Classes/CDVWhitelist.h | 0 .../ios/CordovaLib/Classes/CDVWhitelist.m | 0 .../CordovaLib/Classes/NSArray+Comparisons.h | 0 .../CordovaLib/Classes/NSArray+Comparisons.m | 0 .../ios/CordovaLib/Classes/NSData+Base64.h | 0 .../ios/CordovaLib/Classes/NSData+Base64.m | 0 .../Classes/NSDictionary+Extensions.h | 0 .../Classes/NSDictionary+Extensions.m | 0 .../Classes/NSMutableArray+QueueAdditions.h | 0 .../Classes/NSMutableArray+QueueAdditions.m | 0 .../CordovaLib/Classes/UIDevice+Extensions.h | 0 .../CordovaLib/Classes/UIDevice+Extensions.m | 0 .../Classes/compatibility/0.9.6/CDV.h | 0 .../Classes/compatibility/0.9.6/CDVPlugin.h | 0 .../Classes/compatibility/0.9.6/CDVPlugin.m | 0 .../Classes/compatibility/1.5.0/CDV.h | 0 .../Classes/compatibility/1.5.0/CDVPlugin.h | 0 .../Classes/compatibility/README.txt | 0 .../CordovaLib.xcodeproj/project.pbxproj | 0 .../push/ios/CordovaLib/CordovaLib_Prefix.pch | 0 .../samples/push/ios/CordovaLib/VERSION | 0 .../apigee-sdk/samples/push/ios/cordova/build | 0 .../samples/push/ios/cordova/emulate | 0 .../apigee-sdk/samples/push/ios/cordova/log | 0 .../samples/push/ios/cordova/release | 0 .../apigee-sdk/samples/push/ios/cordova/run | 0 .../ios/iospush.xcodeproj/project.pbxproj | 0 .../push/ios/iospush/Classes/AppDelegate.h | 0 .../push/ios/iospush/Classes/AppDelegate.m | 0 .../ios/iospush/Classes/MainViewController.h | 0 .../ios/iospush/Classes/MainViewController.m | 0 .../iospush/Classes/MainViewController.xib | 0 .../Plugins/AppDelegate+notification.h | 0 .../Plugins/AppDelegate+notification.m | 0 .../push/ios/iospush/Plugins/PushPlugin.h | 0 .../push/ios/iospush/Plugins/PushPlugin.m | 0 .../samples/push/ios/iospush/Plugins/README | 0 .../Resources/Capture.bundle/controls_bg.png | Bin .../Capture.bundle/controls_bg@2x.png | Bin .../Capture.bundle/controls_bg@2x~ipad.png | Bin .../Capture.bundle/controls_bg~ipad.png | Bin .../microphone-568h@2x~iphone.png | Bin .../Resources/Capture.bundle/microphone.png | Bin .../Capture.bundle/microphone@2x.png | Bin .../Capture.bundle/microphone@2x~ipad.png | Bin .../Capture.bundle/microphone~ipad.png | Bin .../Capture.bundle/record_button.png | Bin .../Capture.bundle/record_button@2x.png | Bin .../Capture.bundle/record_button@2x~ipad.png | Bin .../Capture.bundle/record_button~ipad.png | Bin .../Resources/Capture.bundle/recording_bg.png | Bin .../Capture.bundle/recording_bg@2x.png | Bin .../Capture.bundle/recording_bg@2x~ipad.png | Bin .../Capture.bundle/recording_bg~ipad.png | Bin .../Resources/Capture.bundle/stop_button.png | Bin .../Capture.bundle/stop_button@2x.png | Bin .../Capture.bundle/stop_button@2x~ipad.png | Bin .../Capture.bundle/stop_button~ipad.png | Bin .../Resources/de.lproj/Localizable.strings | 0 .../Resources/en.lproj/Localizable.strings | 0 .../Resources/es.lproj/Localizable.strings | 0 .../ios/iospush/Resources/icons/icon-72.png | Bin .../iospush/Resources/icons/icon-72@2x.png | Bin .../push/ios/iospush/Resources/icons/icon.png | Bin .../ios/iospush/Resources/icons/icon@2x.png | Bin .../Resources/se.lproj/Localizable.strings | 0 .../splash/Default-568h@2x~iphone.png | Bin .../splash/Default-Landscape@2x~ipad.png | Bin .../splash/Default-Landscape~ipad.png | Bin .../splash/Default-Portrait@2x~ipad.png | Bin .../splash/Default-Portrait~ipad.png | Bin .../Resources/splash/Default@2x~iphone.png | Bin .../Resources/splash/Default~iphone.png | Bin .../samples/push/ios/iospush/config.xml | 0 .../push/ios/iospush/iospush-Info.plist | 0 .../push/ios/iospush/iospush-Prefix.pch | 0 .../samples/push/ios/iospush/main.m | 0 .../samples/push/ios/www/PushNotification.js | 0 .../samples/push/ios/www/cordova-2.6.0.js | 0 .../samples/push/ios/www/css/index.css | 0 .../samples/push/ios/www/img/logo.png | Bin .../samples/push/ios/www/index.html | 0 .../samples/push/ios/www/js/index.js | 0 .../screen/ios/screen-ipad-landscape-2x.png | Bin .../res/screen/ios/screen-ipad-landscape.png | Bin .../screen/ios/screen-ipad-portrait-2x.png | Bin .../res/screen/ios/screen-ipad-portrait.png | Bin .../screen/ios/screen-iphone-landscape-2x.png | Bin .../screen/ios/screen-iphone-landscape.png | Bin .../screen/ios/screen-iphone-portrait-2x.png | Bin .../res/screen/ios/screen-iphone-portrait.png | Bin .../apigee-sdk/samples/push/ios/www/spec.html | 0 .../samples/push/ios/www/spec/helper.js | 0 .../samples/push/ios/www/spec/index.js | 0 .../www/spec/lib/jasmine-1.2.0/MIT.LICENSE | 0 .../spec/lib/jasmine-1.2.0/jasmine-html.js | 0 .../www/spec/lib/jasmine-1.2.0/jasmine.css | 0 .../ios/www/spec/lib/jasmine-1.2.0/jasmine.js | 0 .../samples/readmeSample/index.html | 0 .../samples/usersAndGroups/README.txt | 0 .../usersAndGroups/css/codiqa.ext.min.css | 0 .../usersAndGroups/css/images/ajax-loader.gif | Bin .../css/images/icons-18-black.png | Bin .../css/images/icons-18-white.png | Bin .../css/images/icons-36-black.png | Bin .../css/images/icons-36-white.png | Bin .../css/jquery.mobile-1.3.1.min.css | 0 .../samples/usersAndGroups/index.html | 0 .../usersAndGroups/js/codiqa.ext.min.js | 0 .../samples/usersAndGroups/js/index.js | 0 .../usersAndGroups/js/jquery-1.9.1.min.js | 0 .../js/jquery.mobile-1.3.1.min.js | 0 .../bower_components/intro.js/BUILD/BUILD.js | 0 .../bower_components/intro.js/Makefile | 0 .../bower_components/intro.js/README.md | 0 .../bower_components/intro.js/bower.json | 0 .../bower_components/intro.js/component.json | 0 .../intro.js/example/RTL/index.html | 0 .../assets/css/bootstrap-responsive.min.css | 0 .../example/assets/css/bootstrap.min.css | 0 .../intro.js/example/assets/css/demo.css | 0 .../assets/img/glyphicons-halflings-white.png | Bin .../assets/img/glyphicons-halflings.png | Bin .../intro.js/example/custom-class/index.html | 0 .../intro.js/example/hello-world/index.html | 0 .../example/hello-world/withoutBullets.html | 0 .../example/hello-world/withoutButtons.html | 0 .../intro.js/example/html-tooltip/index.html | 0 .../intro.js/example/index.html | 0 .../intro.js/example/multi-page/index.html | 0 .../intro.js/example/multi-page/second.html | 0 .../intro.js/example/programmatic/index.html | 0 .../bower_components/intro.js/intro.js | 0 .../bower_components/intro.js/introjs-rtl.css | 0 .../bower_components/intro.js/introjs.css | 0 .../intro.js/minified/intro.min.js | 0 .../intro.js/minified/introjs-rtl.min.css | 0 .../intro.js/minified/introjs.min.css | 0 .../bower_components/intro.js/package.json | 0 .../jquery-waypoints/CHANGELOG.md | 10 - .../jquery-waypoints/README.markdown | 0 .../jquery-waypoints/bower.json | 2 +- .../jquery-waypoints/licenses.txt | 0 .../jquery-waypoints/package.json | 2 +- .../infinite-scroll/waypoints-infinite.js | 45 +- .../infinite-scroll/waypoints-infinite.min.js | 8 + .../sticky-elements/waypoints-sticky.js | 24 +- .../sticky-elements/waypoints-sticky.min.js | 8 + .../jquery-waypoints/waypoints.js | 15 +- .../jquery-waypoints/waypoints.min.js | 8 + .../bower_components/jquery/MIT-LICENSE.txt | 0 .../bower_components/jquery/bower.json | 4 +- .../bower_components/jquery/dist/jquery.js | 88 +- .../jquery/dist/jquery.min.js | 5 + .../jquery/dist/jquery.min.map | 1 + .../bower_components/jquery/src/ajax.js | 0 .../bower_components/jquery/src/ajax/jsonp.js | 0 .../bower_components/jquery/src/ajax/load.js | 0 .../jquery/src/ajax/parseJSON.js | 0 .../jquery/src/ajax/parseXML.js | 0 .../jquery/src/ajax/script.js | 0 .../jquery/src/ajax/var/nonce.js | 0 .../jquery/src/ajax/var/rquery.js | 0 .../bower_components/jquery/src/ajax/xhr.js | 0 .../bower_components/jquery/src/attributes.js | 0 .../jquery/src/attributes/attr.js | 0 .../jquery/src/attributes/classes.js | 0 .../jquery/src/attributes/prop.js | 0 .../jquery/src/attributes/support.js | 0 .../jquery/src/attributes/val.js | 0 .../bower_components/jquery/src/callbacks.js | 0 .../bower_components/jquery/src/core.js | 0 .../jquery/src/core/access.js | 0 .../bower_components/jquery/src/core/init.js | 0 .../jquery/src/core/parseHTML.js | 0 .../bower_components/jquery/src/core/ready.js | 0 .../jquery/src/core/var/rsingleTag.js | 0 .../bower_components/jquery/src/css.js | 2 +- .../jquery/src/css/addGetHookIf.js | 0 .../bower_components/jquery/src/css/curCSS.js | 0 .../jquery/src/css/defaultDisplay.js | 0 .../jquery/src/css/hiddenVisibleSelectors.js | 0 .../jquery/src/css/support.js | 0 .../bower_components/jquery/src/css/swap.js | 0 .../jquery/src/css/var/cssExpand.js | 0 .../jquery/src/css/var/getStyles.js | 0 .../jquery/src/css/var/isHidden.js | 0 .../jquery/src/css/var/rmargin.js | 0 .../jquery/src/css/var/rnumnonpx.js | 0 .../bower_components/jquery/src/data.js | 12 +- .../bower_components/jquery/src/data/Data.js | 0 .../jquery/src/data/accepts.js | 0 .../jquery/src/data/var/data_priv.js | 0 .../jquery/src/data/var/data_user.js | 0 .../bower_components/jquery/src/deferred.js | 0 .../bower_components/jquery/src/deprecated.js | 0 .../bower_components/jquery/src/dimensions.js | 0 .../bower_components/jquery/src/effects.js | 8 +- .../jquery/src/effects/Tween.js | 0 .../jquery/src/effects/animatedSelector.js | 0 .../bower_components/jquery/src/event.js | 0 .../jquery/src/event/alias.js | 0 .../jquery/src/event/support.js | 0 .../jquery/src/exports/amd.js | 0 .../jquery/src/exports/global.js | 0 .../bower_components/jquery/src/intro.js | 0 .../bower_components/jquery/src/jquery.js | 0 .../jquery/src/manipulation.js | 0 .../jquery/src/manipulation/_evalUrl.js | 0 .../jquery/src/manipulation/support.js | 0 .../src/manipulation/var/rcheckableType.js | 0 .../bower_components/jquery/src/offset.js | 0 .../bower_components/jquery/src/outro.js | 0 .../bower_components/jquery/src/queue.js | 0 .../jquery/src/queue/delay.js | 0 .../jquery/src/selector-native.js | 0 .../jquery/src/selector-sizzle.js | 0 .../bower_components/jquery/src/selector.js | 0 .../bower_components/jquery/src/serialize.js | 0 .../jquery/src/sizzle/dist/sizzle.js | 60 +- .../jquery/src/sizzle/dist/sizzle.min.js | 3 + .../jquery/src/sizzle/dist/sizzle.min.map | 1 + .../bower_components/jquery/src/traversing.js | 0 .../jquery/src/traversing/findFilter.js | 0 .../src/traversing/var/rneedsContext.js | 0 .../bower_components/jquery/src/var/arr.js | 0 .../jquery/src/var/class2type.js | 0 .../bower_components/jquery/src/var/concat.js | 0 .../bower_components/jquery/src/var/hasOwn.js | 0 .../jquery/src/var/indexOf.js | 0 .../bower_components/jquery/src/var/pnum.js | 0 .../bower_components/jquery/src/var/push.js | 0 .../jquery/src/var/rnotwhite.js | 0 .../bower_components/jquery/src/var/slice.js | 0 .../jquery/src/var/strundefined.js | 0 .../jquery/src/var/support.js | 0 .../jquery/src/var/toString.js | 0 .../bower_components/jquery/src/wrap.js | 0 .../bower_components/sizzle/dist/sizzle.js | 0 .../sizzle/dist/sizzle.min.js | 0 .../sizzle/dist/sizzle.min.map | 0 .../bower_components/sizzle/tasks/commit.js | 0 .../bower_components/sizzle/tasks/compile.js | 0 .../bower_components/sizzle/tasks/dist.js | 0 .../bower_components/sizzle/tasks/release.js | 0 .../bower_components/sizzle/tasks/tag.js | 0 .../bower_components/sizzle/tasks/version.js | 0 .../sizzle/test/data/empty.js | 0 .../sizzle/test/data/mixed_sort.html | 0 .../sizzle/test/data/testinit.js | 0 .../bower_components/sizzle/test/index.html | 0 .../bower_components/sizzle/test/jquery.js | 0 .../sizzle/test/libs/qunit/qunit.css | 0 .../sizzle/test/libs/qunit/qunit.js | 0 .../sizzle/test/unit/extending.js | 0 .../sizzle/test/unit/selector.js | 0 .../sizzle/test/unit/utilities.js | 0 .../dist-cov}/usergrid-portal/config.js | 0 .../css/apigeeGlobalNavigation.css | 0 .../css/arsmarquette/ARSMaquettePro-Light.otf | Bin .../arsmarquette/ARSMaquettePro-Medium.otf | Bin .../arsmarquette/ARSMaquettePro-Regular.otf | Bin .../usergrid-portal}/css/dash.min.css | 0 .../usergrid-portal/css/entypo/entypo.eot | Bin .../usergrid-portal/css/entypo/entypo.svg | 0 .../usergrid-portal/css/entypo/entypo.ttf | Bin .../usergrid-portal/css/entypo/entypo.woff | Bin .../dist-cov}/usergrid-portal/css/main.css | 0 .../img/appswitcher/apiPlatform_lg.png | Bin .../img/appswitcher/appServices_lg.png | Bin .../img/appswitcher/console_lg.png | Bin .../img/appswitcher/home_lg.png | Bin .../img/appswitcher/logo_color.png | Bin .../img/appswitcher/max_lg.png | Bin .../appswitcher/triangleMenuItem_right.png | Bin .../triangleMenuItem_right_hover.png | Bin .../usergrid-portal/img/blue-bars.png | Bin .../usergrid-portal/img/blue-bolt.png | Bin .../usergrid-portal/img/blue-carat.png | Bin .../usergrid-portal/img/green_dot.png | Bin .../img/introjs_arrow_step_next.png | Bin .../img/introjs_arrow_step_next_disabled.png | Bin .../img/introjs_arrow_step_prev.png | Bin .../img/introjs_arrow_step_prev_disabled.png | Bin .../usergrid-portal/img/introjs_close.png | Bin .../dist-cov}/usergrid-portal/img/logo.gif | Bin .../usergrid-portal/img/nav-device.gif | Bin .../usergrid-portal/img/nav-sprites.png | Bin .../usergrid-portal/img/no-data1.png | Bin .../usergrid-portal/img/phone-small.gif | Bin .../img/push/APNS_cert_upload.png | Bin .../img/push/APNS_certification.png | Bin .../img/push/android-notification.png | Bin .../img/push/google_api_key.png | Bin .../img/push/iphone_message.png | Bin .../usergrid-portal/img/push/step_1.png | Bin .../usergrid-portal/img/push/step_2.png | Bin .../usergrid-portal/img/push/step_3.png | Bin .../dist-cov}/usergrid-portal/img/red_dot.png | Bin .../usergrid-portal/img/sdk-sprites-large.png | Bin .../usergrid-portal/img/sdk-sprites.png | Bin .../usergrid-portal/img/tablet-small.gif | Bin .../usergrid-portal/img/user-photo.png | Bin .../usergrid-portal/img/user_profile.png | Bin .../dist-cov}/usergrid-portal/img/verify.png | Bin .../usergrid-portal/img/yellow_dot.png | Bin .../dist-cov}/usergrid-portal/index.html | 2 +- .../js/charts/highcharts.json | 0 .../js/libs/Highcharts-2.3.5/index.htm | 0 .../js/adapters/mootools-adapter.js | 0 .../js/adapters/mootools-adapter.src.js | 0 .../js/adapters/prototype-adapter.js | 0 .../js/adapters/prototype-adapter.src.js | 0 .../Highcharts-2.3.5/js/highcharts-more.js | 0 .../js/highcharts-more.src.js | 0 .../js/libs/Highcharts-2.3.5/js/highcharts.js | 0 .../Highcharts-2.3.5/js/highcharts.src.js | 0 .../js/modules/canvas-tools.js | 0 .../js/modules/canvas-tools.src.js | 0 .../libs/Highcharts-2.3.5/js/modules/data.js | 0 .../Highcharts-2.3.5/js/modules/data.src.js | 0 .../Highcharts-2.3.5/js/modules/exporting.js | 0 .../js/modules/exporting.src.js | 0 .../Highcharts-2.3.5/js/themes/dark-blue.js | 0 .../Highcharts-2.3.5/js/themes/dark-green.js | 0 .../libs/Highcharts-2.3.5/js/themes/gray.js | 0 .../libs/Highcharts-2.3.5/js/themes/grid.js | 0 .../libs/Highcharts-2.3.5/js/themes/skies.js | 0 .../usergrid-portal/js/libs/MD5.min.js | 0 .../js/libs/angular-1.0.5/angular-cookies.js | 0 .../libs/angular-1.0.5/angular-cookies.min.js | 0 .../js/libs/angular-1.0.5/angular-loader.js | 0 .../libs/angular-1.0.5/angular-loader.min.js | 0 .../js/libs/angular-1.0.5/angular-mocks.js | 0 .../js/libs/angular-1.0.5/angular-resource.js | 0 .../angular-1.0.5/angular-resource.min.js | 0 .../js/libs/angular-1.0.5/angular-sanitize.js | 0 .../angular-1.0.5/angular-sanitize.min.js | 0 .../js/libs/angular-1.0.5/angular.js | 0 .../js/libs/angular-1.0.5/angular.min.js | 0 .../js/libs/angular-1.0.5/version.txt | 0 .../js/libs/angular-1.1.5/angular-1.1.5.js | 0 .../libs/angular-1.1.5/angular-merge.min.js | 0 .../angular-1.1.5/angular-resource-1.1.5.js | 0 .../js/libs/angular-1.2.5/angular-animate.js | 0 .../libs/angular-1.2.5/angular-animate.min.js | 0 .../angular-1.2.5/angular-animate.min.js.map | 0 .../js/libs/angular-1.2.5/angular-cookies.js | 0 .../libs/angular-1.2.5/angular-cookies.min.js | 0 .../angular-1.2.5/angular-cookies.min.js.map | 0 .../js/libs/angular-1.2.5/angular-csp.css | 0 .../js/libs/angular-1.2.5/angular-loader.js | 0 .../libs/angular-1.2.5/angular-loader.min.js | 0 .../angular-1.2.5/angular-loader.min.js.map | 0 .../js/libs/angular-1.2.5/angular-mocks.js | 0 .../js/libs/angular-1.2.5/angular-resource.js | 0 .../angular-1.2.5/angular-resource.min.js | 0 .../angular-1.2.5/angular-resource.min.js.map | 0 .../js/libs/angular-1.2.5/angular-route.js | 0 .../libs/angular-1.2.5/angular-route.min.js | 0 .../angular-1.2.5/angular-route.min.js.map | 0 .../js/libs/angular-1.2.5/angular-sanitize.js | 0 .../angular-1.2.5/angular-sanitize.min.js | 0 .../angular-1.2.5/angular-sanitize.min.js.map | 0 .../js/libs/angular-1.2.5/angular-scenario.js | 0 .../js/libs/angular-1.2.5/angular-touch.js | 0 .../libs/angular-1.2.5/angular-touch.min.js | 0 .../angular-1.2.5/angular-touch.min.js.map | 0 .../js/libs/angular-1.2.5/angular.js | 0 .../js/libs/angular-1.2.5/angular.min.js | 0 .../js/libs/angular-1.2.5/angular.min.js.map | 0 .../js/libs/angular-1.2.5/errors.json | 0 .../js/libs/angular-1.2.5/version.json | 0 .../js/libs/angular-1.2.5/version.txt | 0 .../angularitics-0.8.5-google-analytics.js | 0 .../libs/angularitics/angularitics-0.8.5.js | 0 .../bootstrap/css/bootstrap-responsive.css | 0 .../css/bootstrap-responsive.min.css | 0 .../js/libs/bootstrap/css/bootstrap.css | 0 .../js/libs/bootstrap/css/bootstrap.min.css | 0 .../libs/bootstrap/custom/css/bootstrap.css | 0 .../bootstrap/custom/css/bootstrap.min.css | 0 .../custom/img/glyphicons-halflings-white.png | Bin .../custom/img/glyphicons-halflings.png | Bin .../js/libs/bootstrap/custom/js/bootstrap.js | 0 .../libs/bootstrap/custom/js/bootstrap.min.js | 0 .../img/glyphicons-halflings-white.png | Bin .../bootstrap/img/glyphicons-halflings.png | Bin .../js/libs/bootstrap/js/bootstrap.js | 0 .../js/libs/bootstrap/js/bootstrap.min.js | 0 .../usergrid-portal/js/libs/google-viz-api.js | 0 .../js/libs/jquery/jquery-1.9.1.min.js | 0 .../libs/jquery/jquery-migrate-1.1.1.min.js | 0 .../js/libs/jquery/jquery.sparkline.min.js | 0 .../js/libs/jqueryui/date.min.js | 0 .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin .../images/ui-bg_flat_100_deedf7_40x100.png | Bin .../images/ui-bg_flat_100_e4f1fb_40x100.png | Bin .../images/ui-bg_flat_100_f2f5f7_40x100.png | Bin .../images/ui-bg_flat_15_cd0a0a_40x100.png | Bin .../images/ui-bg_flat_50_3baae3_40x100.png | Bin .../images/ui-bg_flat_80_d7ebf9_40x100.png | Bin .../ui-bg_highlight-hard_70_000000_1x100.png | Bin .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin .../images/ui-icons_000000_256x240.png | Bin .../images/ui-icons_2694e8_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_3d80b3_256x240.png | Bin .../images/ui-icons_72a7cf_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../js/libs/jqueryui/jquery-ui-1.8.18.min.js | 0 .../libs/jqueryui/jquery-ui-1.8.9.custom.css | 0 .../js/libs/jqueryui/jquery-ui-timepicker.css | 0 .../libs/jqueryui/jquery.ui.timepicker.min.js | 0 .../ui-bootstrap-custom-0.3.0.min.js | 0 .../ui-bootstrap-custom-tpls-0.3.0.min.js | 0 .../js/libs/usergrid-libs.min.js | 2 +- .../usergrid-portal/js/libs/usergrid.sdk.js | 0 .../js/usergrid-coverage.min.js | 25 + .../usergrid-portal/js/usergrid-dev.min.js | 17 +- .../usergrid-portal/js/usergrid.min.js | 22 + .../usergrid-portal/sdk/usergrid.0.10.4.js | 0 .../usergrid-portal/sdk/usergrid.0.10.5.js | 0 .../usergrid-portal/sdk/usergrid.0.10.7.js | 0 portal/Gruntfile.js | 11 +- portal/bower.json | 1 - portal/css/main.css | 84 +- portal/css/main.min.css | 1 + .../bower_components/angular/angular.min.js | 220 - .../angular/angular.min.js.gzip | Bin 40453 -> 0 bytes .../angular/angular.min.js.map | 8 - .../infinite-scroll/waypoints-infinite.min.js | 8 - .../sticky-elements/waypoints-sticky.min.js | 8 - .../jquery-waypoints/waypoints.min.js | 8 - .../jquery/dist/jquery.min.js | 5 - .../jquery/dist/jquery.min.map | 1 - .../jquery/src/sizzle/dist/sizzle.min.js | 3 - .../jquery/src/sizzle/dist/sizzle.min.map | 1 - portal/dist/usergrid-portal/css/dash.min.css | 1 - portal/dist/usergrid-portal/favicon.ico | Bin 1150 -> 0 bytes portal/dist/usergrid-portal/index-debug.html | 168 - .../dist/usergrid-portal/index-template.html | 173 - .../dist/usergrid-portal/js/usergrid.min.js | 25 - portal/img/green_dot.png | Bin 3472 -> 0 bytes portal/img/logo.gif | Bin 2279 -> 0 bytes portal/img/logo.png | Bin 0 -> 7758 bytes portal/img/push/APNS_cert_upload.png | Bin 33956 -> 0 bytes portal/img/push/APNS_certification.png | Bin 16855 -> 0 bytes portal/img/push/android-notification.png | Bin 41629 -> 0 bytes portal/img/push/google_api_key.png | Bin 98118 -> 0 bytes portal/img/push/iphone_message.png | Bin 90307 -> 0 bytes portal/img/push/step_1.png | Bin 1953 -> 0 bytes portal/img/push/step_2.png | Bin 2117 -> 0 bytes portal/img/push/step_3.png | Bin 2162 -> 0 bytes portal/img/red_dot.png | Bin 3482 -> 0 bytes portal/img/yellow_dot.png | Bin 3475 -> 0 bytes portal/index-template.html | 7 +- portal/js/app-overview/app-overview.html | 6 - portal/js/global/appswitcher-template.html | 34 - portal/js/libs/Highcharts-2.3.5/index.htm | 79 - .../js/adapters/mootools-adapter.js | 13 - .../js/adapters/mootools-adapter.src.js | 328 - .../js/adapters/prototype-adapter.js | 16 - .../js/adapters/prototype-adapter.src.js | 385 - .../Highcharts-2.3.5/js/highcharts-more.js | 35 - .../js/highcharts-more.src.js | 1581 -- .../js/libs/Highcharts-2.3.5/js/highcharts.js | 250 - .../Highcharts-2.3.5/js/highcharts.src.js | 15281 ---------------- .../js/modules/canvas-tools.js | 133 - .../js/modules/canvas-tools.src.js | 3113 ---- .../libs/Highcharts-2.3.5/js/modules/data.js | 14 - .../Highcharts-2.3.5/js/modules/data.src.js | 512 - .../Highcharts-2.3.5/js/modules/exporting.js | 23 - .../js/modules/exporting.src.js | 752 - .../Highcharts-2.3.5/js/themes/dark-blue.js | 263 - .../Highcharts-2.3.5/js/themes/dark-green.js | 263 - .../libs/Highcharts-2.3.5/js/themes/gray.js | 262 - .../libs/Highcharts-2.3.5/js/themes/grid.js | 95 - .../libs/Highcharts-2.3.5/js/themes/skies.js | 89 - portal/sdk/usergrid.0.10.4.js | 1402 -- portal/sdk/usergrid.0.10.5.js | 1755 -- portal/sdk/usergrid.0.10.7.js | 2265 --- 1004 files changed, 1639 insertions(+), 31290 deletions(-) rename portal/css/apigeeGlobalNavigation.css => apigeeGlobalNavigation.css (100%) rename {portal => deleted}/archive/coming_soon.html (100%) rename {portal => deleted}/archive/config.js (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-icons_000000_256x240.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png (100%) rename {portal => deleted}/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png (100%) rename {portal => deleted}/archive/css/custom-theme/jquery-ui-1.8.9.custom.css (100%) rename {portal => deleted}/archive/css/jquery-ui-timepicker.css (100%) rename {portal => deleted}/archive/css/jquery.ui.statusbar.css (100%) rename {portal => deleted}/archive/css/prettify.css (100%) rename {portal => deleted}/archive/css/usergrid-stripped.css (100%) rename {portal => deleted}/archive/css/usergrid.css (100%) rename {portal => deleted}/archive/dash/README.md (100%) rename {portal => deleted}/archive/dash/config/testacular-e2e.conf.js (100%) rename {portal => deleted}/archive/dash/config/testacular.conf.js (100%) rename {portal => deleted}/archive/dash/test/e2e/runner.html (100%) rename {portal => deleted}/archive/dash/test/e2e/scenarios.js (100%) rename {portal => deleted}/archive/dash/test/lib/angular/angular-mocks.js (100%) rename {portal => deleted}/archive/dash/test/lib/angular/angular-scenario.js (100%) rename {portal => deleted}/archive/dash/test/lib/angular/version.txt (100%) rename {portal => deleted}/archive/dash/test/unit/controllersSpec.js (100%) rename {portal => deleted}/archive/dash/test/unit/directivesSpec.js (100%) rename {portal => deleted}/archive/dash/test/unit/filtersSpec.js (100%) rename {portal => deleted}/archive/dash/test/unit/servicesSpec.js (100%) rename {portal => deleted}/archive/images/APNS_cert_upload.png (100%) rename {portal => deleted}/archive/images/APNS_certification.png (100%) rename {portal => deleted}/archive/images/android-notification.png (100%) rename {portal => deleted}/archive/images/android-sdk-download.png (100%) rename {portal => deleted}/archive/images/api-activity.gif (100%) rename {portal => deleted}/archive/images/apigee-logo.png (100%) rename {portal => deleted}/archive/images/apigeetopbar.png (100%) rename {portal => deleted}/archive/images/background_one_col.png (100%) rename {portal => deleted}/archive/images/btn-copyCurl-up.png (100%) rename {portal => deleted}/archive/images/clippy-bg.png (100%) rename {portal => deleted}/archive/images/close.gif (100%) rename {portal => deleted}/archive/images/dotnet-sdk-download.png (100%) rename {portal => deleted}/archive/images/down_arrow.png (100%) rename {portal => deleted}/archive/images/error.png (100%) rename {portal => deleted}/archive/images/faviconApigee.ico (100%) rename {portal => deleted}/archive/images/glyphicons-halflings-white.png (100%) rename {portal => deleted}/archive/images/glyphicons-halflings.png (100%) rename {portal => deleted}/archive/images/glyphicons_halflings_135_wrench-white2.pdn (100%) rename {portal => deleted}/archive/images/glyphicons_halflings_135_wrench-white2.png (100%) rename {portal => deleted}/archive/images/glyphicons_halflings_135_wrench.png (100%) rename {portal => deleted}/archive/images/glyphicons_halflings_135_wrench_white.png (100%) rename {portal => deleted}/archive/images/glyphicons_halflings_wrench_white.png (100%) rename {portal => deleted}/archive/images/google_api_key.png (100%) rename {portal => deleted}/archive/images/green_dot.png (100%) rename {portal => deleted}/archive/images/grid.png (100%) rename {portal => deleted}/archive/images/icons.png (100%) rename {portal => deleted}/archive/images/ios-sdk-download.png (100%) rename {portal => deleted}/archive/images/iphone_message.png (100%) rename {portal => deleted}/archive/images/javascript-sdk-download.png (100%) rename {portal => deleted}/archive/images/left_arrow.png (100%) rename {portal => deleted}/archive/images/logo-white.png (100%) rename {portal => deleted}/archive/images/menuActiveTriangle.png (100%) rename {portal => deleted}/archive/images/nodejs-sdk-download.png (100%) rename {portal => deleted}/archive/images/notice.png (100%) rename {portal => deleted}/archive/images/orange-arrow.png (100%) rename {portal => deleted}/archive/images/push_notifications_icon.png (100%) rename {portal => deleted}/archive/images/red_dot.png (100%) rename {portal => deleted}/archive/images/right_arrow.png (100%) rename {portal => deleted}/archive/images/ruby-sdk-download.png (100%) rename {portal => deleted}/archive/images/step_1.png (100%) rename {portal => deleted}/archive/images/step_2.png (100%) rename {portal => deleted}/archive/images/step_3.png (100%) rename {portal => deleted}/archive/images/success.png (100%) rename {portal => deleted}/archive/images/swish_arrow.png (100%) rename {portal => deleted}/archive/images/topbackground.png (100%) rename {portal => deleted}/archive/images/up_arrow.png (100%) rename {portal => deleted}/archive/images/user-photo.png (100%) rename {portal => deleted}/archive/images/user_profile.png (100%) rename {portal => deleted}/archive/images/usergrid_200.png (100%) rename {portal => deleted}/archive/images/usergrid_400.png (100%) rename {portal => deleted}/archive/images/warning.png (100%) rename {portal => deleted}/archive/images/yellow_dot.png (100%) rename {portal => deleted}/archive/index-stripped2.html (100%) rename {portal => deleted}/archive/index.html (100%) rename {portal => deleted}/archive/js/app/app.js (100%) rename {portal => deleted}/archive/js/app/console.js (100%) rename {portal => deleted}/archive/js/app/helpers.js (100%) rename {portal => deleted}/archive/js/app/navigation.js (100%) rename {portal => deleted}/archive/js/app/pages.js (100%) rename {portal => deleted}/archive/js/app/params.js (100%) rename {portal => deleted}/archive/js/app/quickLogin.js (100%) rename {portal => deleted}/archive/js/app/session.js (100%) rename {portal => deleted}/archive/js/app/sso.js (100%) rename {portal => deleted}/archive/js/app/status.js (100%) rename {portal => deleted}/archive/js/app/ui/collections.entity.js (100%) rename {portal => deleted}/archive/js/app/ui/collections.user.js (100%) rename {portal => deleted}/archive/js/app/ui/ui.js (100%) rename {portal => deleted}/archive/js/app/usergrid.appSDK.js (100%) rename {portal => deleted}/archive/js/app/usergrid.appSDK.orig.js (100%) rename {portal => deleted}/archive/js/lib/MD5.min.js (100%) rename {portal => deleted}/archive/js/lib/backbone.js (100%) rename {portal => deleted}/archive/js/lib/bootstrap.min.js (100%) rename {portal => deleted}/archive/js/lib/date.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery-1.7.2.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery-ui-1.8.18.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery.dataset.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery.dform-0.1.3.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery.jsonp-2.3.1.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery.tmpl.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery.ui.statusbar.min.js (100%) rename {portal => deleted}/archive/js/lib/jquery.ui.timepicker.min.js (100%) rename {portal => deleted}/archive/js/lib/prettify.js (100%) rename {portal => deleted}/archive/js/lib/underscore-min.js (100%) rename {portal => deleted}/archive/js/spec/client-tests.js (100%) rename {portal => deleted}/archive/js/spec/index.html (100%) rename {portal => deleted}/archive/js/spec/qunit-git.css (100%) rename {portal => deleted}/archive/js/spec/qunit-git.js (100%) rename {portal => deleted}/archive/js/unit-tests/appSDK-tests.js (100%) rename {portal => deleted}/archive/js/unit-tests/ie-jquery-tests.js (100%) rename {portal => deleted}/archive/js/unit-tests/qunit.css (100%) rename {portal => deleted}/archive/js/unit-tests/qunit.js (100%) rename {portal => deleted}/archive/loading.html (100%) rename {portal => deleted}/archive/max/index.html (100%) rename {portal => deleted}/archive/planned_outage.html (100%) rename {portal => deleted}/archive/push/index.html (100%) rename {portal => deleted}/archive/service_down.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.activities.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.admins.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.applications.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.collection.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.collections.query.indexes.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.collections.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.collections.user.header.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.curl.detail.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.feed.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.groups.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.group.activities.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.group.details.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.group.memberships.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.group.permissions.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.notifications.configure.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.role.permissions.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.role.users.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.user.activities.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.user.graph.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.user.memberships.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.user.permissions.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.panels.user.profile.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.role.groups.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.roles.table_rows.html (100%) rename {portal => deleted}/archive/templates/apigee.ui.users.table_rows.html (100%) rename {portal => deleted}/archive/templates/test/modalForm2.html (100%) rename {portal => deleted}/archive/test/autocomplete.html (100%) rename {portal => deleted}/archive/test/modalForm.html (100%) rename {portal/js => deleted}/charts/chart-controller.js (100%) rename {portal/js => deleted}/charts/chart-directives.js (100%) rename {portal/js => deleted}/charts/chart-service.js (100%) rename {portal/dist/usergrid-portal/js => deleted}/charts/highcharts.json (100%) rename {portal/js => deleted}/charts/sparklines.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/coming_soon.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/config.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/jquery-ui-timepicker.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/jquery.ui.statusbar.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/prettify.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/usergrid-stripped.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/css/usergrid.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/README.md (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/config/testacular-e2e.conf.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/config/testacular.conf.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/e2e/runner.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/e2e/scenarios.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/lib/angular/angular-mocks.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/lib/angular/angular-scenario.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/lib/angular/version.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/unit/controllersSpec.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/unit/directivesSpec.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/unit/filtersSpec.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/dash/test/unit/servicesSpec.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/APNS_cert_upload.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/APNS_certification.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/android-notification.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/android-sdk-download.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/api-activity.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/apigee-logo.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/apigeetopbar.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/background_one_col.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/btn-copyCurl-up.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/clippy-bg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/close.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/dotnet-sdk-download.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/down_arrow.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/error.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/faviconApigee.ico (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons-halflings-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons-halflings.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons_halflings_135_wrench.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons_halflings_135_wrench_white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/glyphicons_halflings_wrench_white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/google_api_key.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/green_dot.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/grid.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/icons.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/ios-sdk-download.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/iphone_message.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/javascript-sdk-download.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/left_arrow.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/logo-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/menuActiveTriangle.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/nodejs-sdk-download.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/notice.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/orange-arrow.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/push_notifications_icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/red_dot.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/right_arrow.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/ruby-sdk-download.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/step_1.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/step_2.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/step_3.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/success.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/swish_arrow.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/topbackground.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/up_arrow.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/user-photo.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/user_profile.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/usergrid_200.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/usergrid_400.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/warning.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/images/yellow_dot.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/index-stripped2.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/app.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/console.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/helpers.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/navigation.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/pages.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/params.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/quickLogin.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/session.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/sso.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/status.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/ui/collections.entity.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/ui/collections.user.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/ui/ui.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/usergrid.appSDK.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/app/usergrid.appSDK.orig.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/MD5.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/backbone.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/bootstrap.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/date.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery-1.7.2.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery-ui-1.8.18.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery.dataset.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery.dform-0.1.3.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery.jsonp-2.3.1.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery.tmpl.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery.ui.statusbar.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/jquery.ui.timepicker.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/prettify.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/lib/underscore-min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/spec/client-tests.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/spec/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/spec/qunit-git.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/spec/qunit-git.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/unit-tests/appSDK-tests.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/unit-tests/ie-jquery-tests.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/unit-tests/qunit.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/js/unit-tests/qunit.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/loading.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/max/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/planned_outage.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/push/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/service_down.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.activities.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.admins.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.applications.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.collection.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.collections.query.indexes.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.collections.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.collections.user.header.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.curl.detail.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.feed.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.groups.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.group.activities.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.group.details.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.group.memberships.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.group.permissions.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.notifications.configure.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.role.permissions.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.role.users.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.user.activities.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.user.graph.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.user.memberships.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.user.permissions.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.panels.user.profile.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.role.groups.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.roles.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/apigee.ui.users.table_rows.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/templates/test/modalForm2.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/test/autocomplete.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/archive/test/modalForm.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/Gruntfile.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/LICENSE (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/bower.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/build/angular-intro.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/example/app.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/package.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular-intro.js/src/angular-intro.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular/README.md (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular/angular-csp.css (89%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular/angular.js (92%) create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js.gzip create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js.map rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angular/bower.json (62%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/Gruntfile.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/LICENSE (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/README.md (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/bower.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-chartbeat.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-ga-cordova.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-ga.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-google-analytics.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-kissmetrics.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-mixpanel.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-scroll.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics-segmentio.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/dist/angulartics.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/karma.conf.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/package.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/chartbeat.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/google-analytics.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/kissmetrics.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/mixpanel.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/partials/a.tpl.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/partials/b.tpl.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/partials/c.tpl.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/partials/root.tpl.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/scroll.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/samples/segmentio.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-chartbeat.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-ga-cordova.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-ga.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-kissmetrics.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-mixpanel.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-scroll.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics-segmentio.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/src/angulartics.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/angularitics/test/angularticsSpec.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/apigee.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/apigee.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/bower.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/books/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/apigee.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/jquery.mobile.icons.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/theme.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/collections/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/collections/js/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/jquery.mobile.icons.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/theme.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/entities/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/entities/js/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/jquery.mobile.icons.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/theme.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/js/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/messagee/app.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/messagee/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/messagee/usergrid.validation.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/monitoring/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/AndroidManifest.xml (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/ant.properties (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/PushNotification.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/cordova-2.7.0.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/css/index.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/cordova.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/logo.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/js/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/main.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/master.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-landscape.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-portrait.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-landscape.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-portrait.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-landscape.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-portrait.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-landscape.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-portrait.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/helper.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/MIT.LICENSE (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine-html.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/build.xml (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/appinfo.jar (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/build (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/clean (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/cordova (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/log (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/release (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/run (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/android-support-v13.jar (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/cordova-2.7.0.jar (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/gcm.jar (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/proguard-project.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/project.properties (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/ic_launcher.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/ic_launcher.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/ic_launcher.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/ic_launcher.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable/icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/layout/main.xml (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/values/strings.xml (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/xml/config.xml (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/CordovaGCMBroadcastReceiver.java (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/GCMIntentService.java (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushHandlerActivity.java (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushPlugin.java (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/me/mdob/android/androidpush.java (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDV.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAvailability.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegate.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebug.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVExif.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVScreenOrientationDelegate.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDV.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDV.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDVPlugin.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/README.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib_Prefix.pch (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/VERSION (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/build (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/emulate (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/log (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/release (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/run (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush.xcodeproj/project.pbxproj (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.xib (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.h (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/README (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone-568h@2x~iphone.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/de.lproj/Localizable.strings (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/en.lproj/Localizable.strings (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/es.lproj/Localizable.strings (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon@2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/se.lproj/Localizable.strings (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-568h@2x~iphone.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait@2x~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait~ipad.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default@2x~iphone.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default~iphone.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/config.xml (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Info.plist (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Prefix.pch (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/main.m (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/PushNotification.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/cordova-2.6.0.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/css/index.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/img/logo.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/js/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape-2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait-2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape-2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait-2x.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/helper.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/MIT.LICENSE (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine-html.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/readmeSample/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/README.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/codiqa.ext.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/ajax-loader.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-black.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-black.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/jquery.mobile-1.3.1.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/codiqa.ext.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/index.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery-1.9.1.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery.mobile-1.3.1.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/BUILD/BUILD.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/Makefile (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/README.md (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/bower.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/component.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/RTL/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap-responsive.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/assets/css/demo.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/custom-class/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/hello-world/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/hello-world/withoutBullets.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/hello-world/withoutButtons.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/html-tooltip/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/multi-page/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/multi-page/second.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/example/programmatic/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/intro.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/introjs-rtl.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/introjs.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/minified/intro.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/minified/introjs-rtl.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/minified/introjs.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/intro.js/package.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md (81%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/README.markdown (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/bower.json (94%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/licenses.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/package.json (95%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js (50%) create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.min.js rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js (73%) create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.min.js rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery-waypoints/waypoints.js (98%) create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.min.js rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/MIT-LICENSE.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/bower.json (87%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/dist/jquery.js (99%) create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.min.js create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.min.map rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/jsonp.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/load.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/parseJSON.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/parseXML.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/script.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/var/nonce.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/var/rquery.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/ajax/xhr.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/attributes.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/attributes/attr.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/attributes/classes.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/attributes/prop.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/attributes/support.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/attributes/val.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/callbacks.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/core.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/core/access.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/core/init.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/core/parseHTML.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/core/ready.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/core/var/rsingleTag.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css.js (99%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/addGetHookIf.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/curCSS.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/defaultDisplay.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/hiddenVisibleSelectors.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/support.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/swap.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/var/cssExpand.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/var/getStyles.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/var/isHidden.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/var/rmargin.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/css/var/rnumnonpx.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/data.js (94%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/data/Data.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/data/accepts.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/data/var/data_priv.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/data/var/data_user.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/deferred.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/deprecated.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/dimensions.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/effects.js (98%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/effects/Tween.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/effects/animatedSelector.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/event.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/event/alias.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/event/support.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/exports/amd.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/exports/global.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/intro.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/jquery.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/manipulation.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/manipulation/_evalUrl.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/manipulation/support.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/manipulation/var/rcheckableType.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/offset.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/outro.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/queue.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/queue/delay.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/selector-native.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/selector-sizzle.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/selector.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/serialize.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/sizzle/dist/sizzle.js (97%) create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery/src/sizzle/dist/sizzle.min.js create mode 100644 deleted/dist-cov/usergrid-portal/bower_components/jquery/src/sizzle/dist/sizzle.min.map rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/traversing.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/traversing/findFilter.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/traversing/var/rneedsContext.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/arr.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/class2type.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/concat.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/hasOwn.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/indexOf.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/pnum.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/push.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/rnotwhite.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/slice.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/strundefined.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/support.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/var/toString.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/jquery/src/wrap.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/dist/sizzle.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/dist/sizzle.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/dist/sizzle.min.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/tasks/commit.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/tasks/compile.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/tasks/dist.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/tasks/release.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/tasks/tag.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/tasks/version.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/data/empty.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/data/mixed_sort.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/data/testinit.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/index.html (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/jquery.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/libs/qunit/qunit.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/libs/qunit/qunit.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/unit/extending.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/unit/selector.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/bower_components/sizzle/test/unit/utilities.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/config.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/apigeeGlobalNavigation.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/arsmarquette/ARSMaquettePro-Light.otf (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/arsmarquette/ARSMaquettePro-Medium.otf (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/arsmarquette/ARSMaquettePro-Regular.otf (100%) rename {portal => deleted/dist-cov/usergrid-portal}/css/dash.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/entypo/entypo.eot (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/entypo/entypo.svg (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/entypo/entypo.ttf (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/entypo/entypo.woff (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/css/main.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/apiPlatform_lg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/appServices_lg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/console_lg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/home_lg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/logo_color.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/max_lg.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/triangleMenuItem_right.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/appswitcher/triangleMenuItem_right_hover.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/blue-bars.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/blue-bolt.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/blue-carat.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/green_dot.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/introjs_arrow_step_next.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/introjs_arrow_step_next_disabled.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/introjs_arrow_step_prev.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/introjs_arrow_step_prev_disabled.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/introjs_close.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/logo.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/nav-device.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/nav-sprites.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/no-data1.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/phone-small.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/APNS_cert_upload.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/APNS_certification.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/android-notification.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/google_api_key.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/iphone_message.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/step_1.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/step_2.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/push/step_3.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/red_dot.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/sdk-sprites-large.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/sdk-sprites.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/tablet-small.gif (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/user-photo.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/user_profile.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/verify.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/img/yellow_dot.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/index.html (99%) rename {portal => deleted/dist-cov/usergrid-portal}/js/charts/highcharts.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/index.htm (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/adapters/mootools-adapter.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/adapters/mootools-adapter.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/adapters/prototype-adapter.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/adapters/prototype-adapter.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/highcharts-more.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/highcharts-more.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/highcharts.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/highcharts.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/modules/canvas-tools.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/modules/canvas-tools.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/modules/data.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/modules/data.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/modules/exporting.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/modules/exporting.src.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/themes/dark-blue.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/themes/dark-green.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/themes/gray.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/themes/grid.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/Highcharts-2.3.5/js/themes/skies.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/MD5.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-cookies.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-cookies.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-loader.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-loader.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-mocks.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-resource.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-resource.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-sanitize.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular-sanitize.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/angular.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.0.5/version.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.1.5/angular-1.1.5.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.1.5/angular-merge.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.1.5/angular-resource-1.1.5.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-animate.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-animate.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-animate.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-cookies.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-cookies.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-cookies.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-csp.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-loader.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-loader.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-loader.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-mocks.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-resource.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-resource.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-resource.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-route.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-route.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-route.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-sanitize.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-sanitize.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-sanitize.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-scenario.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-touch.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-touch.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular-touch.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/angular.min.js.map (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/errors.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/version.json (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angular-1.2.5/version.txt (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angularitics/angularitics-0.8.5-google-analytics.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/angularitics/angularitics-0.8.5.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/css/bootstrap-responsive.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/css/bootstrap-responsive.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/css/bootstrap.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/css/bootstrap.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/custom/css/bootstrap.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/custom/css/bootstrap.min.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/custom/img/glyphicons-halflings-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/custom/img/glyphicons-halflings.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/custom/js/bootstrap.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/custom/js/bootstrap.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/img/glyphicons-halflings-white.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/img/glyphicons-halflings.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/js/bootstrap.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/bootstrap/js/bootstrap.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/google-viz-api.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jquery/jquery-1.9.1.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jquery/jquery-migrate-1.1.1.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jquery/jquery.sparkline.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/date.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_flat_100_deedf7_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_flat_100_e4f1fb_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_flat_100_f2f5f7_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_flat_15_cd0a0a_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_flat_50_3baae3_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_flat_80_d7ebf9_40x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_highlight-hard_70_000000_1x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-bg_highlight-soft_25_ffef8f_1x100.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-icons_000000_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-icons_2694e8_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-icons_2e83ff_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-icons_3d80b3_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-icons_72a7cf_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/images/ui-icons_ffffff_256x240.png (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/jquery-ui-1.8.18.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/jquery-ui-1.8.9.custom.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/jquery-ui-timepicker.css (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/jqueryui/jquery.ui.timepicker.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/ui-bootstrap/ui-bootstrap-custom-0.3.0.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/ui-bootstrap/ui-bootstrap-custom-tpls-0.3.0.min.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/usergrid-libs.min.js (99%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/libs/usergrid.sdk.js (100%) create mode 100644 deleted/dist-cov/usergrid-portal/js/usergrid-coverage.min.js rename {portal/dist => deleted/dist-cov}/usergrid-portal/js/usergrid-dev.min.js (99%) create mode 100644 deleted/dist-cov/usergrid-portal/js/usergrid.min.js rename {portal/dist => deleted/dist-cov}/usergrid-portal/sdk/usergrid.0.10.4.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/sdk/usergrid.0.10.5.js (100%) rename {portal/dist => deleted/dist-cov}/usergrid-portal/sdk/usergrid.0.10.7.js (100%) create mode 100644 portal/css/main.min.css delete mode 100644 portal/dist/usergrid-portal/bower_components/angular/angular.min.js delete mode 100644 portal/dist/usergrid-portal/bower_components/angular/angular.min.js.gzip delete mode 100644 portal/dist/usergrid-portal/bower_components/angular/angular.min.js.map delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.min.js delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.min.js delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery-waypoints/waypoints.min.js delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery/dist/jquery.min.js delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery/dist/jquery.min.map delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery/src/sizzle/dist/sizzle.min.js delete mode 100644 portal/dist/usergrid-portal/bower_components/jquery/src/sizzle/dist/sizzle.min.map delete mode 100644 portal/dist/usergrid-portal/css/dash.min.css delete mode 100644 portal/dist/usergrid-portal/favicon.ico delete mode 100644 portal/dist/usergrid-portal/index-debug.html delete mode 100644 portal/dist/usergrid-portal/index-template.html delete mode 100644 portal/dist/usergrid-portal/js/usergrid.min.js delete mode 100644 portal/img/green_dot.png delete mode 100644 portal/img/logo.gif create mode 100644 portal/img/logo.png delete mode 100644 portal/img/push/APNS_cert_upload.png delete mode 100644 portal/img/push/APNS_certification.png delete mode 100644 portal/img/push/android-notification.png delete mode 100644 portal/img/push/google_api_key.png delete mode 100644 portal/img/push/iphone_message.png delete mode 100644 portal/img/push/step_1.png delete mode 100644 portal/img/push/step_2.png delete mode 100644 portal/img/push/step_3.png delete mode 100644 portal/img/red_dot.png delete mode 100644 portal/img/yellow_dot.png delete mode 100644 portal/js/global/appswitcher-template.html delete mode 100644 portal/js/libs/Highcharts-2.3.5/index.htm delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/adapters/mootools-adapter.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/adapters/mootools-adapter.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/adapters/prototype-adapter.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/adapters/prototype-adapter.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/highcharts-more.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/highcharts-more.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/highcharts.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/highcharts.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/modules/canvas-tools.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/modules/canvas-tools.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/modules/data.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/modules/data.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/modules/exporting.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/modules/exporting.src.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/themes/dark-blue.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/themes/dark-green.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/themes/gray.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/themes/grid.js delete mode 100644 portal/js/libs/Highcharts-2.3.5/js/themes/skies.js delete mode 100755 portal/sdk/usergrid.0.10.4.js delete mode 100644 portal/sdk/usergrid.0.10.5.js delete mode 100644 portal/sdk/usergrid.0.10.7.js diff --git a/.gitignore b/.gitignore index 61a22f221e..39b210b2a5 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,5 @@ stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/q /stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/tree/QueryFilterParser.java /stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/tree/QueryFilterLexer.java portal/js/templates.js + +/portal/dist/usergrid-portal.zip diff --git a/portal/css/apigeeGlobalNavigation.css b/apigeeGlobalNavigation.css similarity index 100% rename from portal/css/apigeeGlobalNavigation.css rename to apigeeGlobalNavigation.css diff --git a/portal/archive/coming_soon.html b/deleted/archive/coming_soon.html similarity index 100% rename from portal/archive/coming_soon.html rename to deleted/archive/coming_soon.html diff --git a/portal/archive/config.js b/deleted/archive/config.js similarity index 100% rename from portal/archive/config.js rename to deleted/archive/config.js diff --git a/portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/deleted/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png rename to deleted/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png b/deleted/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png b/deleted/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png b/deleted/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png b/deleted/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png b/deleted/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png b/deleted/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png b/deleted/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png diff --git a/portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/deleted/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png rename to deleted/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png diff --git a/portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png b/deleted/archive/css/custom-theme/images/ui-icons_000000_256x240.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png rename to deleted/archive/css/custom-theme/images/ui-icons_000000_256x240.png diff --git a/portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png b/deleted/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png rename to deleted/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png diff --git a/portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png b/deleted/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png rename to deleted/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png diff --git a/portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png b/deleted/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png rename to deleted/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png diff --git a/portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png b/deleted/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png rename to deleted/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png diff --git a/portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png b/deleted/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png similarity index 100% rename from portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png rename to deleted/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png diff --git a/portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css b/deleted/archive/css/custom-theme/jquery-ui-1.8.9.custom.css similarity index 100% rename from portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css rename to deleted/archive/css/custom-theme/jquery-ui-1.8.9.custom.css diff --git a/portal/archive/css/jquery-ui-timepicker.css b/deleted/archive/css/jquery-ui-timepicker.css similarity index 100% rename from portal/archive/css/jquery-ui-timepicker.css rename to deleted/archive/css/jquery-ui-timepicker.css diff --git a/portal/archive/css/jquery.ui.statusbar.css b/deleted/archive/css/jquery.ui.statusbar.css similarity index 100% rename from portal/archive/css/jquery.ui.statusbar.css rename to deleted/archive/css/jquery.ui.statusbar.css diff --git a/portal/archive/css/prettify.css b/deleted/archive/css/prettify.css similarity index 100% rename from portal/archive/css/prettify.css rename to deleted/archive/css/prettify.css diff --git a/portal/archive/css/usergrid-stripped.css b/deleted/archive/css/usergrid-stripped.css similarity index 100% rename from portal/archive/css/usergrid-stripped.css rename to deleted/archive/css/usergrid-stripped.css diff --git a/portal/archive/css/usergrid.css b/deleted/archive/css/usergrid.css similarity index 100% rename from portal/archive/css/usergrid.css rename to deleted/archive/css/usergrid.css diff --git a/portal/archive/dash/README.md b/deleted/archive/dash/README.md similarity index 100% rename from portal/archive/dash/README.md rename to deleted/archive/dash/README.md diff --git a/portal/archive/dash/config/testacular-e2e.conf.js b/deleted/archive/dash/config/testacular-e2e.conf.js similarity index 100% rename from portal/archive/dash/config/testacular-e2e.conf.js rename to deleted/archive/dash/config/testacular-e2e.conf.js diff --git a/portal/archive/dash/config/testacular.conf.js b/deleted/archive/dash/config/testacular.conf.js similarity index 100% rename from portal/archive/dash/config/testacular.conf.js rename to deleted/archive/dash/config/testacular.conf.js diff --git a/portal/archive/dash/test/e2e/runner.html b/deleted/archive/dash/test/e2e/runner.html similarity index 100% rename from portal/archive/dash/test/e2e/runner.html rename to deleted/archive/dash/test/e2e/runner.html diff --git a/portal/archive/dash/test/e2e/scenarios.js b/deleted/archive/dash/test/e2e/scenarios.js similarity index 100% rename from portal/archive/dash/test/e2e/scenarios.js rename to deleted/archive/dash/test/e2e/scenarios.js diff --git a/portal/archive/dash/test/lib/angular/angular-mocks.js b/deleted/archive/dash/test/lib/angular/angular-mocks.js similarity index 100% rename from portal/archive/dash/test/lib/angular/angular-mocks.js rename to deleted/archive/dash/test/lib/angular/angular-mocks.js diff --git a/portal/archive/dash/test/lib/angular/angular-scenario.js b/deleted/archive/dash/test/lib/angular/angular-scenario.js similarity index 100% rename from portal/archive/dash/test/lib/angular/angular-scenario.js rename to deleted/archive/dash/test/lib/angular/angular-scenario.js diff --git a/portal/archive/dash/test/lib/angular/version.txt b/deleted/archive/dash/test/lib/angular/version.txt similarity index 100% rename from portal/archive/dash/test/lib/angular/version.txt rename to deleted/archive/dash/test/lib/angular/version.txt diff --git a/portal/archive/dash/test/unit/controllersSpec.js b/deleted/archive/dash/test/unit/controllersSpec.js similarity index 100% rename from portal/archive/dash/test/unit/controllersSpec.js rename to deleted/archive/dash/test/unit/controllersSpec.js diff --git a/portal/archive/dash/test/unit/directivesSpec.js b/deleted/archive/dash/test/unit/directivesSpec.js similarity index 100% rename from portal/archive/dash/test/unit/directivesSpec.js rename to deleted/archive/dash/test/unit/directivesSpec.js diff --git a/portal/archive/dash/test/unit/filtersSpec.js b/deleted/archive/dash/test/unit/filtersSpec.js similarity index 100% rename from portal/archive/dash/test/unit/filtersSpec.js rename to deleted/archive/dash/test/unit/filtersSpec.js diff --git a/portal/archive/dash/test/unit/servicesSpec.js b/deleted/archive/dash/test/unit/servicesSpec.js similarity index 100% rename from portal/archive/dash/test/unit/servicesSpec.js rename to deleted/archive/dash/test/unit/servicesSpec.js diff --git a/portal/archive/images/APNS_cert_upload.png b/deleted/archive/images/APNS_cert_upload.png similarity index 100% rename from portal/archive/images/APNS_cert_upload.png rename to deleted/archive/images/APNS_cert_upload.png diff --git a/portal/archive/images/APNS_certification.png b/deleted/archive/images/APNS_certification.png similarity index 100% rename from portal/archive/images/APNS_certification.png rename to deleted/archive/images/APNS_certification.png diff --git a/portal/archive/images/android-notification.png b/deleted/archive/images/android-notification.png similarity index 100% rename from portal/archive/images/android-notification.png rename to deleted/archive/images/android-notification.png diff --git a/portal/archive/images/android-sdk-download.png b/deleted/archive/images/android-sdk-download.png similarity index 100% rename from portal/archive/images/android-sdk-download.png rename to deleted/archive/images/android-sdk-download.png diff --git a/portal/archive/images/api-activity.gif b/deleted/archive/images/api-activity.gif similarity index 100% rename from portal/archive/images/api-activity.gif rename to deleted/archive/images/api-activity.gif diff --git a/portal/archive/images/apigee-logo.png b/deleted/archive/images/apigee-logo.png similarity index 100% rename from portal/archive/images/apigee-logo.png rename to deleted/archive/images/apigee-logo.png diff --git a/portal/archive/images/apigeetopbar.png b/deleted/archive/images/apigeetopbar.png similarity index 100% rename from portal/archive/images/apigeetopbar.png rename to deleted/archive/images/apigeetopbar.png diff --git a/portal/archive/images/background_one_col.png b/deleted/archive/images/background_one_col.png similarity index 100% rename from portal/archive/images/background_one_col.png rename to deleted/archive/images/background_one_col.png diff --git a/portal/archive/images/btn-copyCurl-up.png b/deleted/archive/images/btn-copyCurl-up.png similarity index 100% rename from portal/archive/images/btn-copyCurl-up.png rename to deleted/archive/images/btn-copyCurl-up.png diff --git a/portal/archive/images/clippy-bg.png b/deleted/archive/images/clippy-bg.png similarity index 100% rename from portal/archive/images/clippy-bg.png rename to deleted/archive/images/clippy-bg.png diff --git a/portal/archive/images/close.gif b/deleted/archive/images/close.gif similarity index 100% rename from portal/archive/images/close.gif rename to deleted/archive/images/close.gif diff --git a/portal/archive/images/dotnet-sdk-download.png b/deleted/archive/images/dotnet-sdk-download.png similarity index 100% rename from portal/archive/images/dotnet-sdk-download.png rename to deleted/archive/images/dotnet-sdk-download.png diff --git a/portal/archive/images/down_arrow.png b/deleted/archive/images/down_arrow.png similarity index 100% rename from portal/archive/images/down_arrow.png rename to deleted/archive/images/down_arrow.png diff --git a/portal/archive/images/error.png b/deleted/archive/images/error.png similarity index 100% rename from portal/archive/images/error.png rename to deleted/archive/images/error.png diff --git a/portal/archive/images/faviconApigee.ico b/deleted/archive/images/faviconApigee.ico similarity index 100% rename from portal/archive/images/faviconApigee.ico rename to deleted/archive/images/faviconApigee.ico diff --git a/portal/archive/images/glyphicons-halflings-white.png b/deleted/archive/images/glyphicons-halflings-white.png similarity index 100% rename from portal/archive/images/glyphicons-halflings-white.png rename to deleted/archive/images/glyphicons-halflings-white.png diff --git a/portal/archive/images/glyphicons-halflings.png b/deleted/archive/images/glyphicons-halflings.png similarity index 100% rename from portal/archive/images/glyphicons-halflings.png rename to deleted/archive/images/glyphicons-halflings.png diff --git a/portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn b/deleted/archive/images/glyphicons_halflings_135_wrench-white2.pdn similarity index 100% rename from portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn rename to deleted/archive/images/glyphicons_halflings_135_wrench-white2.pdn diff --git a/portal/archive/images/glyphicons_halflings_135_wrench-white2.png b/deleted/archive/images/glyphicons_halflings_135_wrench-white2.png similarity index 100% rename from portal/archive/images/glyphicons_halflings_135_wrench-white2.png rename to deleted/archive/images/glyphicons_halflings_135_wrench-white2.png diff --git a/portal/archive/images/glyphicons_halflings_135_wrench.png b/deleted/archive/images/glyphicons_halflings_135_wrench.png similarity index 100% rename from portal/archive/images/glyphicons_halflings_135_wrench.png rename to deleted/archive/images/glyphicons_halflings_135_wrench.png diff --git a/portal/archive/images/glyphicons_halflings_135_wrench_white.png b/deleted/archive/images/glyphicons_halflings_135_wrench_white.png similarity index 100% rename from portal/archive/images/glyphicons_halflings_135_wrench_white.png rename to deleted/archive/images/glyphicons_halflings_135_wrench_white.png diff --git a/portal/archive/images/glyphicons_halflings_wrench_white.png b/deleted/archive/images/glyphicons_halflings_wrench_white.png similarity index 100% rename from portal/archive/images/glyphicons_halflings_wrench_white.png rename to deleted/archive/images/glyphicons_halflings_wrench_white.png diff --git a/portal/archive/images/google_api_key.png b/deleted/archive/images/google_api_key.png similarity index 100% rename from portal/archive/images/google_api_key.png rename to deleted/archive/images/google_api_key.png diff --git a/portal/archive/images/green_dot.png b/deleted/archive/images/green_dot.png similarity index 100% rename from portal/archive/images/green_dot.png rename to deleted/archive/images/green_dot.png diff --git a/portal/archive/images/grid.png b/deleted/archive/images/grid.png similarity index 100% rename from portal/archive/images/grid.png rename to deleted/archive/images/grid.png diff --git a/portal/archive/images/icons.png b/deleted/archive/images/icons.png similarity index 100% rename from portal/archive/images/icons.png rename to deleted/archive/images/icons.png diff --git a/portal/archive/images/ios-sdk-download.png b/deleted/archive/images/ios-sdk-download.png similarity index 100% rename from portal/archive/images/ios-sdk-download.png rename to deleted/archive/images/ios-sdk-download.png diff --git a/portal/archive/images/iphone_message.png b/deleted/archive/images/iphone_message.png similarity index 100% rename from portal/archive/images/iphone_message.png rename to deleted/archive/images/iphone_message.png diff --git a/portal/archive/images/javascript-sdk-download.png b/deleted/archive/images/javascript-sdk-download.png similarity index 100% rename from portal/archive/images/javascript-sdk-download.png rename to deleted/archive/images/javascript-sdk-download.png diff --git a/portal/archive/images/left_arrow.png b/deleted/archive/images/left_arrow.png similarity index 100% rename from portal/archive/images/left_arrow.png rename to deleted/archive/images/left_arrow.png diff --git a/portal/archive/images/logo-white.png b/deleted/archive/images/logo-white.png similarity index 100% rename from portal/archive/images/logo-white.png rename to deleted/archive/images/logo-white.png diff --git a/portal/archive/images/menuActiveTriangle.png b/deleted/archive/images/menuActiveTriangle.png similarity index 100% rename from portal/archive/images/menuActiveTriangle.png rename to deleted/archive/images/menuActiveTriangle.png diff --git a/portal/archive/images/nodejs-sdk-download.png b/deleted/archive/images/nodejs-sdk-download.png similarity index 100% rename from portal/archive/images/nodejs-sdk-download.png rename to deleted/archive/images/nodejs-sdk-download.png diff --git a/portal/archive/images/notice.png b/deleted/archive/images/notice.png similarity index 100% rename from portal/archive/images/notice.png rename to deleted/archive/images/notice.png diff --git a/portal/archive/images/orange-arrow.png b/deleted/archive/images/orange-arrow.png similarity index 100% rename from portal/archive/images/orange-arrow.png rename to deleted/archive/images/orange-arrow.png diff --git a/portal/archive/images/push_notifications_icon.png b/deleted/archive/images/push_notifications_icon.png similarity index 100% rename from portal/archive/images/push_notifications_icon.png rename to deleted/archive/images/push_notifications_icon.png diff --git a/portal/archive/images/red_dot.png b/deleted/archive/images/red_dot.png similarity index 100% rename from portal/archive/images/red_dot.png rename to deleted/archive/images/red_dot.png diff --git a/portal/archive/images/right_arrow.png b/deleted/archive/images/right_arrow.png similarity index 100% rename from portal/archive/images/right_arrow.png rename to deleted/archive/images/right_arrow.png diff --git a/portal/archive/images/ruby-sdk-download.png b/deleted/archive/images/ruby-sdk-download.png similarity index 100% rename from portal/archive/images/ruby-sdk-download.png rename to deleted/archive/images/ruby-sdk-download.png diff --git a/portal/archive/images/step_1.png b/deleted/archive/images/step_1.png similarity index 100% rename from portal/archive/images/step_1.png rename to deleted/archive/images/step_1.png diff --git a/portal/archive/images/step_2.png b/deleted/archive/images/step_2.png similarity index 100% rename from portal/archive/images/step_2.png rename to deleted/archive/images/step_2.png diff --git a/portal/archive/images/step_3.png b/deleted/archive/images/step_3.png similarity index 100% rename from portal/archive/images/step_3.png rename to deleted/archive/images/step_3.png diff --git a/portal/archive/images/success.png b/deleted/archive/images/success.png similarity index 100% rename from portal/archive/images/success.png rename to deleted/archive/images/success.png diff --git a/portal/archive/images/swish_arrow.png b/deleted/archive/images/swish_arrow.png similarity index 100% rename from portal/archive/images/swish_arrow.png rename to deleted/archive/images/swish_arrow.png diff --git a/portal/archive/images/topbackground.png b/deleted/archive/images/topbackground.png similarity index 100% rename from portal/archive/images/topbackground.png rename to deleted/archive/images/topbackground.png diff --git a/portal/archive/images/up_arrow.png b/deleted/archive/images/up_arrow.png similarity index 100% rename from portal/archive/images/up_arrow.png rename to deleted/archive/images/up_arrow.png diff --git a/portal/archive/images/user-photo.png b/deleted/archive/images/user-photo.png similarity index 100% rename from portal/archive/images/user-photo.png rename to deleted/archive/images/user-photo.png diff --git a/portal/archive/images/user_profile.png b/deleted/archive/images/user_profile.png similarity index 100% rename from portal/archive/images/user_profile.png rename to deleted/archive/images/user_profile.png diff --git a/portal/archive/images/usergrid_200.png b/deleted/archive/images/usergrid_200.png similarity index 100% rename from portal/archive/images/usergrid_200.png rename to deleted/archive/images/usergrid_200.png diff --git a/portal/archive/images/usergrid_400.png b/deleted/archive/images/usergrid_400.png similarity index 100% rename from portal/archive/images/usergrid_400.png rename to deleted/archive/images/usergrid_400.png diff --git a/portal/archive/images/warning.png b/deleted/archive/images/warning.png similarity index 100% rename from portal/archive/images/warning.png rename to deleted/archive/images/warning.png diff --git a/portal/archive/images/yellow_dot.png b/deleted/archive/images/yellow_dot.png similarity index 100% rename from portal/archive/images/yellow_dot.png rename to deleted/archive/images/yellow_dot.png diff --git a/portal/archive/index-stripped2.html b/deleted/archive/index-stripped2.html similarity index 100% rename from portal/archive/index-stripped2.html rename to deleted/archive/index-stripped2.html diff --git a/portal/archive/index.html b/deleted/archive/index.html similarity index 100% rename from portal/archive/index.html rename to deleted/archive/index.html diff --git a/portal/archive/js/app/app.js b/deleted/archive/js/app/app.js similarity index 100% rename from portal/archive/js/app/app.js rename to deleted/archive/js/app/app.js diff --git a/portal/archive/js/app/console.js b/deleted/archive/js/app/console.js similarity index 100% rename from portal/archive/js/app/console.js rename to deleted/archive/js/app/console.js diff --git a/portal/archive/js/app/helpers.js b/deleted/archive/js/app/helpers.js similarity index 100% rename from portal/archive/js/app/helpers.js rename to deleted/archive/js/app/helpers.js diff --git a/portal/archive/js/app/navigation.js b/deleted/archive/js/app/navigation.js similarity index 100% rename from portal/archive/js/app/navigation.js rename to deleted/archive/js/app/navigation.js diff --git a/portal/archive/js/app/pages.js b/deleted/archive/js/app/pages.js similarity index 100% rename from portal/archive/js/app/pages.js rename to deleted/archive/js/app/pages.js diff --git a/portal/archive/js/app/params.js b/deleted/archive/js/app/params.js similarity index 100% rename from portal/archive/js/app/params.js rename to deleted/archive/js/app/params.js diff --git a/portal/archive/js/app/quickLogin.js b/deleted/archive/js/app/quickLogin.js similarity index 100% rename from portal/archive/js/app/quickLogin.js rename to deleted/archive/js/app/quickLogin.js diff --git a/portal/archive/js/app/session.js b/deleted/archive/js/app/session.js similarity index 100% rename from portal/archive/js/app/session.js rename to deleted/archive/js/app/session.js diff --git a/portal/archive/js/app/sso.js b/deleted/archive/js/app/sso.js similarity index 100% rename from portal/archive/js/app/sso.js rename to deleted/archive/js/app/sso.js diff --git a/portal/archive/js/app/status.js b/deleted/archive/js/app/status.js similarity index 100% rename from portal/archive/js/app/status.js rename to deleted/archive/js/app/status.js diff --git a/portal/archive/js/app/ui/collections.entity.js b/deleted/archive/js/app/ui/collections.entity.js similarity index 100% rename from portal/archive/js/app/ui/collections.entity.js rename to deleted/archive/js/app/ui/collections.entity.js diff --git a/portal/archive/js/app/ui/collections.user.js b/deleted/archive/js/app/ui/collections.user.js similarity index 100% rename from portal/archive/js/app/ui/collections.user.js rename to deleted/archive/js/app/ui/collections.user.js diff --git a/portal/archive/js/app/ui/ui.js b/deleted/archive/js/app/ui/ui.js similarity index 100% rename from portal/archive/js/app/ui/ui.js rename to deleted/archive/js/app/ui/ui.js diff --git a/portal/archive/js/app/usergrid.appSDK.js b/deleted/archive/js/app/usergrid.appSDK.js similarity index 100% rename from portal/archive/js/app/usergrid.appSDK.js rename to deleted/archive/js/app/usergrid.appSDK.js diff --git a/portal/archive/js/app/usergrid.appSDK.orig.js b/deleted/archive/js/app/usergrid.appSDK.orig.js similarity index 100% rename from portal/archive/js/app/usergrid.appSDK.orig.js rename to deleted/archive/js/app/usergrid.appSDK.orig.js diff --git a/portal/archive/js/lib/MD5.min.js b/deleted/archive/js/lib/MD5.min.js similarity index 100% rename from portal/archive/js/lib/MD5.min.js rename to deleted/archive/js/lib/MD5.min.js diff --git a/portal/archive/js/lib/backbone.js b/deleted/archive/js/lib/backbone.js similarity index 100% rename from portal/archive/js/lib/backbone.js rename to deleted/archive/js/lib/backbone.js diff --git a/portal/archive/js/lib/bootstrap.min.js b/deleted/archive/js/lib/bootstrap.min.js similarity index 100% rename from portal/archive/js/lib/bootstrap.min.js rename to deleted/archive/js/lib/bootstrap.min.js diff --git a/portal/archive/js/lib/date.min.js b/deleted/archive/js/lib/date.min.js similarity index 100% rename from portal/archive/js/lib/date.min.js rename to deleted/archive/js/lib/date.min.js diff --git a/portal/archive/js/lib/jquery-1.7.2.min.js b/deleted/archive/js/lib/jquery-1.7.2.min.js similarity index 100% rename from portal/archive/js/lib/jquery-1.7.2.min.js rename to deleted/archive/js/lib/jquery-1.7.2.min.js diff --git a/portal/archive/js/lib/jquery-ui-1.8.18.min.js b/deleted/archive/js/lib/jquery-ui-1.8.18.min.js similarity index 100% rename from portal/archive/js/lib/jquery-ui-1.8.18.min.js rename to deleted/archive/js/lib/jquery-ui-1.8.18.min.js diff --git a/portal/archive/js/lib/jquery.dataset.min.js b/deleted/archive/js/lib/jquery.dataset.min.js similarity index 100% rename from portal/archive/js/lib/jquery.dataset.min.js rename to deleted/archive/js/lib/jquery.dataset.min.js diff --git a/portal/archive/js/lib/jquery.dform-0.1.3.min.js b/deleted/archive/js/lib/jquery.dform-0.1.3.min.js similarity index 100% rename from portal/archive/js/lib/jquery.dform-0.1.3.min.js rename to deleted/archive/js/lib/jquery.dform-0.1.3.min.js diff --git a/portal/archive/js/lib/jquery.jsonp-2.3.1.min.js b/deleted/archive/js/lib/jquery.jsonp-2.3.1.min.js similarity index 100% rename from portal/archive/js/lib/jquery.jsonp-2.3.1.min.js rename to deleted/archive/js/lib/jquery.jsonp-2.3.1.min.js diff --git a/portal/archive/js/lib/jquery.tmpl.min.js b/deleted/archive/js/lib/jquery.tmpl.min.js similarity index 100% rename from portal/archive/js/lib/jquery.tmpl.min.js rename to deleted/archive/js/lib/jquery.tmpl.min.js diff --git a/portal/archive/js/lib/jquery.ui.statusbar.min.js b/deleted/archive/js/lib/jquery.ui.statusbar.min.js similarity index 100% rename from portal/archive/js/lib/jquery.ui.statusbar.min.js rename to deleted/archive/js/lib/jquery.ui.statusbar.min.js diff --git a/portal/archive/js/lib/jquery.ui.timepicker.min.js b/deleted/archive/js/lib/jquery.ui.timepicker.min.js similarity index 100% rename from portal/archive/js/lib/jquery.ui.timepicker.min.js rename to deleted/archive/js/lib/jquery.ui.timepicker.min.js diff --git a/portal/archive/js/lib/prettify.js b/deleted/archive/js/lib/prettify.js similarity index 100% rename from portal/archive/js/lib/prettify.js rename to deleted/archive/js/lib/prettify.js diff --git a/portal/archive/js/lib/underscore-min.js b/deleted/archive/js/lib/underscore-min.js similarity index 100% rename from portal/archive/js/lib/underscore-min.js rename to deleted/archive/js/lib/underscore-min.js diff --git a/portal/archive/js/spec/client-tests.js b/deleted/archive/js/spec/client-tests.js similarity index 100% rename from portal/archive/js/spec/client-tests.js rename to deleted/archive/js/spec/client-tests.js diff --git a/portal/archive/js/spec/index.html b/deleted/archive/js/spec/index.html similarity index 100% rename from portal/archive/js/spec/index.html rename to deleted/archive/js/spec/index.html diff --git a/portal/archive/js/spec/qunit-git.css b/deleted/archive/js/spec/qunit-git.css similarity index 100% rename from portal/archive/js/spec/qunit-git.css rename to deleted/archive/js/spec/qunit-git.css diff --git a/portal/archive/js/spec/qunit-git.js b/deleted/archive/js/spec/qunit-git.js similarity index 100% rename from portal/archive/js/spec/qunit-git.js rename to deleted/archive/js/spec/qunit-git.js diff --git a/portal/archive/js/unit-tests/appSDK-tests.js b/deleted/archive/js/unit-tests/appSDK-tests.js similarity index 100% rename from portal/archive/js/unit-tests/appSDK-tests.js rename to deleted/archive/js/unit-tests/appSDK-tests.js diff --git a/portal/archive/js/unit-tests/ie-jquery-tests.js b/deleted/archive/js/unit-tests/ie-jquery-tests.js similarity index 100% rename from portal/archive/js/unit-tests/ie-jquery-tests.js rename to deleted/archive/js/unit-tests/ie-jquery-tests.js diff --git a/portal/archive/js/unit-tests/qunit.css b/deleted/archive/js/unit-tests/qunit.css similarity index 100% rename from portal/archive/js/unit-tests/qunit.css rename to deleted/archive/js/unit-tests/qunit.css diff --git a/portal/archive/js/unit-tests/qunit.js b/deleted/archive/js/unit-tests/qunit.js similarity index 100% rename from portal/archive/js/unit-tests/qunit.js rename to deleted/archive/js/unit-tests/qunit.js diff --git a/portal/archive/loading.html b/deleted/archive/loading.html similarity index 100% rename from portal/archive/loading.html rename to deleted/archive/loading.html diff --git a/portal/archive/max/index.html b/deleted/archive/max/index.html similarity index 100% rename from portal/archive/max/index.html rename to deleted/archive/max/index.html diff --git a/portal/archive/planned_outage.html b/deleted/archive/planned_outage.html similarity index 100% rename from portal/archive/planned_outage.html rename to deleted/archive/planned_outage.html diff --git a/portal/archive/push/index.html b/deleted/archive/push/index.html similarity index 100% rename from portal/archive/push/index.html rename to deleted/archive/push/index.html diff --git a/portal/archive/service_down.html b/deleted/archive/service_down.html similarity index 100% rename from portal/archive/service_down.html rename to deleted/archive/service_down.html diff --git a/portal/archive/templates/apigee.ui.activities.table_rows.html b/deleted/archive/templates/apigee.ui.activities.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.activities.table_rows.html rename to deleted/archive/templates/apigee.ui.activities.table_rows.html diff --git a/portal/archive/templates/apigee.ui.admins.table_rows.html b/deleted/archive/templates/apigee.ui.admins.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.admins.table_rows.html rename to deleted/archive/templates/apigee.ui.admins.table_rows.html diff --git a/portal/archive/templates/apigee.ui.applications.table_rows.html b/deleted/archive/templates/apigee.ui.applications.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.applications.table_rows.html rename to deleted/archive/templates/apigee.ui.applications.table_rows.html diff --git a/portal/archive/templates/apigee.ui.collection.table_rows.html b/deleted/archive/templates/apigee.ui.collection.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.collection.table_rows.html rename to deleted/archive/templates/apigee.ui.collection.table_rows.html diff --git a/portal/archive/templates/apigee.ui.collections.query.indexes.html b/deleted/archive/templates/apigee.ui.collections.query.indexes.html similarity index 100% rename from portal/archive/templates/apigee.ui.collections.query.indexes.html rename to deleted/archive/templates/apigee.ui.collections.query.indexes.html diff --git a/portal/archive/templates/apigee.ui.collections.table_rows.html b/deleted/archive/templates/apigee.ui.collections.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.collections.table_rows.html rename to deleted/archive/templates/apigee.ui.collections.table_rows.html diff --git a/portal/archive/templates/apigee.ui.collections.user.header.html b/deleted/archive/templates/apigee.ui.collections.user.header.html similarity index 100% rename from portal/archive/templates/apigee.ui.collections.user.header.html rename to deleted/archive/templates/apigee.ui.collections.user.header.html diff --git a/portal/archive/templates/apigee.ui.curl.detail.html b/deleted/archive/templates/apigee.ui.curl.detail.html similarity index 100% rename from portal/archive/templates/apigee.ui.curl.detail.html rename to deleted/archive/templates/apigee.ui.curl.detail.html diff --git a/portal/archive/templates/apigee.ui.feed.table_rows.html b/deleted/archive/templates/apigee.ui.feed.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.feed.table_rows.html rename to deleted/archive/templates/apigee.ui.feed.table_rows.html diff --git a/portal/archive/templates/apigee.ui.groups.table_rows.html b/deleted/archive/templates/apigee.ui.groups.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.groups.table_rows.html rename to deleted/archive/templates/apigee.ui.groups.table_rows.html diff --git a/portal/archive/templates/apigee.ui.panels.group.activities.html b/deleted/archive/templates/apigee.ui.panels.group.activities.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.group.activities.html rename to deleted/archive/templates/apigee.ui.panels.group.activities.html diff --git a/portal/archive/templates/apigee.ui.panels.group.details.html b/deleted/archive/templates/apigee.ui.panels.group.details.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.group.details.html rename to deleted/archive/templates/apigee.ui.panels.group.details.html diff --git a/portal/archive/templates/apigee.ui.panels.group.memberships.html b/deleted/archive/templates/apigee.ui.panels.group.memberships.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.group.memberships.html rename to deleted/archive/templates/apigee.ui.panels.group.memberships.html diff --git a/portal/archive/templates/apigee.ui.panels.group.permissions.html b/deleted/archive/templates/apigee.ui.panels.group.permissions.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.group.permissions.html rename to deleted/archive/templates/apigee.ui.panels.group.permissions.html diff --git a/portal/archive/templates/apigee.ui.panels.notifications.configure.html b/deleted/archive/templates/apigee.ui.panels.notifications.configure.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.notifications.configure.html rename to deleted/archive/templates/apigee.ui.panels.notifications.configure.html diff --git a/portal/archive/templates/apigee.ui.panels.role.permissions.html b/deleted/archive/templates/apigee.ui.panels.role.permissions.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.role.permissions.html rename to deleted/archive/templates/apigee.ui.panels.role.permissions.html diff --git a/portal/archive/templates/apigee.ui.panels.role.users.html b/deleted/archive/templates/apigee.ui.panels.role.users.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.role.users.html rename to deleted/archive/templates/apigee.ui.panels.role.users.html diff --git a/portal/archive/templates/apigee.ui.panels.user.activities.html b/deleted/archive/templates/apigee.ui.panels.user.activities.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.user.activities.html rename to deleted/archive/templates/apigee.ui.panels.user.activities.html diff --git a/portal/archive/templates/apigee.ui.panels.user.graph.html b/deleted/archive/templates/apigee.ui.panels.user.graph.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.user.graph.html rename to deleted/archive/templates/apigee.ui.panels.user.graph.html diff --git a/portal/archive/templates/apigee.ui.panels.user.memberships.html b/deleted/archive/templates/apigee.ui.panels.user.memberships.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.user.memberships.html rename to deleted/archive/templates/apigee.ui.panels.user.memberships.html diff --git a/portal/archive/templates/apigee.ui.panels.user.permissions.html b/deleted/archive/templates/apigee.ui.panels.user.permissions.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.user.permissions.html rename to deleted/archive/templates/apigee.ui.panels.user.permissions.html diff --git a/portal/archive/templates/apigee.ui.panels.user.profile.html b/deleted/archive/templates/apigee.ui.panels.user.profile.html similarity index 100% rename from portal/archive/templates/apigee.ui.panels.user.profile.html rename to deleted/archive/templates/apigee.ui.panels.user.profile.html diff --git a/portal/archive/templates/apigee.ui.role.groups.table_rows.html b/deleted/archive/templates/apigee.ui.role.groups.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.role.groups.table_rows.html rename to deleted/archive/templates/apigee.ui.role.groups.table_rows.html diff --git a/portal/archive/templates/apigee.ui.roles.table_rows.html b/deleted/archive/templates/apigee.ui.roles.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.roles.table_rows.html rename to deleted/archive/templates/apigee.ui.roles.table_rows.html diff --git a/portal/archive/templates/apigee.ui.users.table_rows.html b/deleted/archive/templates/apigee.ui.users.table_rows.html similarity index 100% rename from portal/archive/templates/apigee.ui.users.table_rows.html rename to deleted/archive/templates/apigee.ui.users.table_rows.html diff --git a/portal/archive/templates/test/modalForm2.html b/deleted/archive/templates/test/modalForm2.html similarity index 100% rename from portal/archive/templates/test/modalForm2.html rename to deleted/archive/templates/test/modalForm2.html diff --git a/portal/archive/test/autocomplete.html b/deleted/archive/test/autocomplete.html similarity index 100% rename from portal/archive/test/autocomplete.html rename to deleted/archive/test/autocomplete.html diff --git a/portal/archive/test/modalForm.html b/deleted/archive/test/modalForm.html similarity index 100% rename from portal/archive/test/modalForm.html rename to deleted/archive/test/modalForm.html diff --git a/portal/js/charts/chart-controller.js b/deleted/charts/chart-controller.js similarity index 100% rename from portal/js/charts/chart-controller.js rename to deleted/charts/chart-controller.js diff --git a/portal/js/charts/chart-directives.js b/deleted/charts/chart-directives.js similarity index 100% rename from portal/js/charts/chart-directives.js rename to deleted/charts/chart-directives.js diff --git a/portal/js/charts/chart-service.js b/deleted/charts/chart-service.js similarity index 100% rename from portal/js/charts/chart-service.js rename to deleted/charts/chart-service.js diff --git a/portal/dist/usergrid-portal/js/charts/highcharts.json b/deleted/charts/highcharts.json similarity index 100% rename from portal/dist/usergrid-portal/js/charts/highcharts.json rename to deleted/charts/highcharts.json diff --git a/portal/js/charts/sparklines.js b/deleted/charts/sparklines.js similarity index 100% rename from portal/js/charts/sparklines.js rename to deleted/charts/sparklines.js diff --git a/portal/dist/usergrid-portal/archive/coming_soon.html b/deleted/dist-cov/usergrid-portal/archive/coming_soon.html similarity index 100% rename from portal/dist/usergrid-portal/archive/coming_soon.html rename to deleted/dist-cov/usergrid-portal/archive/coming_soon.html diff --git a/portal/dist/usergrid-portal/archive/config.js b/deleted/dist-cov/usergrid-portal/archive/config.js similarity index 100% rename from portal/dist/usergrid-portal/archive/config.js rename to deleted/dist-cov/usergrid-portal/archive/config.js diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_deedf7_40x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_e4f1fb_40x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_100_f2f5f7_40x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_15_cd0a0a_40x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_50_3baae3_40x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_flat_80_d7ebf9_40x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-hard_70_000000_1x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-bg_highlight-soft_25_ffef8f_1x100.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_000000_256x240.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_2694e8_256x240.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_2e83ff_256x240.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_3d80b3_256x240.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_72a7cf_256x240.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/images/ui-icons_ffffff_256x240.png diff --git a/portal/dist/usergrid-portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css b/deleted/dist-cov/usergrid-portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css similarity index 100% rename from portal/dist/usergrid-portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css rename to deleted/dist-cov/usergrid-portal/archive/css/custom-theme/jquery-ui-1.8.9.custom.css diff --git a/portal/dist/usergrid-portal/archive/css/jquery-ui-timepicker.css b/deleted/dist-cov/usergrid-portal/archive/css/jquery-ui-timepicker.css similarity index 100% rename from portal/dist/usergrid-portal/archive/css/jquery-ui-timepicker.css rename to deleted/dist-cov/usergrid-portal/archive/css/jquery-ui-timepicker.css diff --git a/portal/dist/usergrid-portal/archive/css/jquery.ui.statusbar.css b/deleted/dist-cov/usergrid-portal/archive/css/jquery.ui.statusbar.css similarity index 100% rename from portal/dist/usergrid-portal/archive/css/jquery.ui.statusbar.css rename to deleted/dist-cov/usergrid-portal/archive/css/jquery.ui.statusbar.css diff --git a/portal/dist/usergrid-portal/archive/css/prettify.css b/deleted/dist-cov/usergrid-portal/archive/css/prettify.css similarity index 100% rename from portal/dist/usergrid-portal/archive/css/prettify.css rename to deleted/dist-cov/usergrid-portal/archive/css/prettify.css diff --git a/portal/dist/usergrid-portal/archive/css/usergrid-stripped.css b/deleted/dist-cov/usergrid-portal/archive/css/usergrid-stripped.css similarity index 100% rename from portal/dist/usergrid-portal/archive/css/usergrid-stripped.css rename to deleted/dist-cov/usergrid-portal/archive/css/usergrid-stripped.css diff --git a/portal/dist/usergrid-portal/archive/css/usergrid.css b/deleted/dist-cov/usergrid-portal/archive/css/usergrid.css similarity index 100% rename from portal/dist/usergrid-portal/archive/css/usergrid.css rename to deleted/dist-cov/usergrid-portal/archive/css/usergrid.css diff --git a/portal/dist/usergrid-portal/archive/dash/README.md b/deleted/dist-cov/usergrid-portal/archive/dash/README.md similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/README.md rename to deleted/dist-cov/usergrid-portal/archive/dash/README.md diff --git a/portal/dist/usergrid-portal/archive/dash/config/testacular-e2e.conf.js b/deleted/dist-cov/usergrid-portal/archive/dash/config/testacular-e2e.conf.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/config/testacular-e2e.conf.js rename to deleted/dist-cov/usergrid-portal/archive/dash/config/testacular-e2e.conf.js diff --git a/portal/dist/usergrid-portal/archive/dash/config/testacular.conf.js b/deleted/dist-cov/usergrid-portal/archive/dash/config/testacular.conf.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/config/testacular.conf.js rename to deleted/dist-cov/usergrid-portal/archive/dash/config/testacular.conf.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/e2e/runner.html b/deleted/dist-cov/usergrid-portal/archive/dash/test/e2e/runner.html similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/e2e/runner.html rename to deleted/dist-cov/usergrid-portal/archive/dash/test/e2e/runner.html diff --git a/portal/dist/usergrid-portal/archive/dash/test/e2e/scenarios.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/e2e/scenarios.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/e2e/scenarios.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/e2e/scenarios.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/lib/angular/angular-mocks.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/lib/angular/angular-mocks.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/lib/angular/angular-mocks.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/lib/angular/angular-mocks.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/lib/angular/angular-scenario.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/lib/angular/angular-scenario.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/lib/angular/angular-scenario.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/lib/angular/angular-scenario.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/lib/angular/version.txt b/deleted/dist-cov/usergrid-portal/archive/dash/test/lib/angular/version.txt similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/lib/angular/version.txt rename to deleted/dist-cov/usergrid-portal/archive/dash/test/lib/angular/version.txt diff --git a/portal/dist/usergrid-portal/archive/dash/test/unit/controllersSpec.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/unit/controllersSpec.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/unit/controllersSpec.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/unit/controllersSpec.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/unit/directivesSpec.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/unit/directivesSpec.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/unit/directivesSpec.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/unit/directivesSpec.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/unit/filtersSpec.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/unit/filtersSpec.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/unit/filtersSpec.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/unit/filtersSpec.js diff --git a/portal/dist/usergrid-portal/archive/dash/test/unit/servicesSpec.js b/deleted/dist-cov/usergrid-portal/archive/dash/test/unit/servicesSpec.js similarity index 100% rename from portal/dist/usergrid-portal/archive/dash/test/unit/servicesSpec.js rename to deleted/dist-cov/usergrid-portal/archive/dash/test/unit/servicesSpec.js diff --git a/portal/dist/usergrid-portal/archive/images/APNS_cert_upload.png b/deleted/dist-cov/usergrid-portal/archive/images/APNS_cert_upload.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/APNS_cert_upload.png rename to deleted/dist-cov/usergrid-portal/archive/images/APNS_cert_upload.png diff --git a/portal/dist/usergrid-portal/archive/images/APNS_certification.png b/deleted/dist-cov/usergrid-portal/archive/images/APNS_certification.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/APNS_certification.png rename to deleted/dist-cov/usergrid-portal/archive/images/APNS_certification.png diff --git a/portal/dist/usergrid-portal/archive/images/android-notification.png b/deleted/dist-cov/usergrid-portal/archive/images/android-notification.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/android-notification.png rename to deleted/dist-cov/usergrid-portal/archive/images/android-notification.png diff --git a/portal/dist/usergrid-portal/archive/images/android-sdk-download.png b/deleted/dist-cov/usergrid-portal/archive/images/android-sdk-download.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/android-sdk-download.png rename to deleted/dist-cov/usergrid-portal/archive/images/android-sdk-download.png diff --git a/portal/dist/usergrid-portal/archive/images/api-activity.gif b/deleted/dist-cov/usergrid-portal/archive/images/api-activity.gif similarity index 100% rename from portal/dist/usergrid-portal/archive/images/api-activity.gif rename to deleted/dist-cov/usergrid-portal/archive/images/api-activity.gif diff --git a/portal/dist/usergrid-portal/archive/images/apigee-logo.png b/deleted/dist-cov/usergrid-portal/archive/images/apigee-logo.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/apigee-logo.png rename to deleted/dist-cov/usergrid-portal/archive/images/apigee-logo.png diff --git a/portal/dist/usergrid-portal/archive/images/apigeetopbar.png b/deleted/dist-cov/usergrid-portal/archive/images/apigeetopbar.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/apigeetopbar.png rename to deleted/dist-cov/usergrid-portal/archive/images/apigeetopbar.png diff --git a/portal/dist/usergrid-portal/archive/images/background_one_col.png b/deleted/dist-cov/usergrid-portal/archive/images/background_one_col.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/background_one_col.png rename to deleted/dist-cov/usergrid-portal/archive/images/background_one_col.png diff --git a/portal/dist/usergrid-portal/archive/images/btn-copyCurl-up.png b/deleted/dist-cov/usergrid-portal/archive/images/btn-copyCurl-up.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/btn-copyCurl-up.png rename to deleted/dist-cov/usergrid-portal/archive/images/btn-copyCurl-up.png diff --git a/portal/dist/usergrid-portal/archive/images/clippy-bg.png b/deleted/dist-cov/usergrid-portal/archive/images/clippy-bg.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/clippy-bg.png rename to deleted/dist-cov/usergrid-portal/archive/images/clippy-bg.png diff --git a/portal/dist/usergrid-portal/archive/images/close.gif b/deleted/dist-cov/usergrid-portal/archive/images/close.gif similarity index 100% rename from portal/dist/usergrid-portal/archive/images/close.gif rename to deleted/dist-cov/usergrid-portal/archive/images/close.gif diff --git a/portal/dist/usergrid-portal/archive/images/dotnet-sdk-download.png b/deleted/dist-cov/usergrid-portal/archive/images/dotnet-sdk-download.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/dotnet-sdk-download.png rename to deleted/dist-cov/usergrid-portal/archive/images/dotnet-sdk-download.png diff --git a/portal/dist/usergrid-portal/archive/images/down_arrow.png b/deleted/dist-cov/usergrid-portal/archive/images/down_arrow.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/down_arrow.png rename to deleted/dist-cov/usergrid-portal/archive/images/down_arrow.png diff --git a/portal/dist/usergrid-portal/archive/images/error.png b/deleted/dist-cov/usergrid-portal/archive/images/error.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/error.png rename to deleted/dist-cov/usergrid-portal/archive/images/error.png diff --git a/portal/dist/usergrid-portal/archive/images/faviconApigee.ico b/deleted/dist-cov/usergrid-portal/archive/images/faviconApigee.ico similarity index 100% rename from portal/dist/usergrid-portal/archive/images/faviconApigee.ico rename to deleted/dist-cov/usergrid-portal/archive/images/faviconApigee.ico diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons-halflings-white.png b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons-halflings-white.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons-halflings-white.png rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons-halflings-white.png diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons-halflings.png b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons-halflings.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons-halflings.png rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons-halflings.png diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.pdn diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.png b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.png rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench-white2.png diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench.png b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench.png rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench.png diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench_white.png b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench_white.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons_halflings_135_wrench_white.png rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_135_wrench_white.png diff --git a/portal/dist/usergrid-portal/archive/images/glyphicons_halflings_wrench_white.png b/deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_wrench_white.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/glyphicons_halflings_wrench_white.png rename to deleted/dist-cov/usergrid-portal/archive/images/glyphicons_halflings_wrench_white.png diff --git a/portal/dist/usergrid-portal/archive/images/google_api_key.png b/deleted/dist-cov/usergrid-portal/archive/images/google_api_key.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/google_api_key.png rename to deleted/dist-cov/usergrid-portal/archive/images/google_api_key.png diff --git a/portal/dist/usergrid-portal/archive/images/green_dot.png b/deleted/dist-cov/usergrid-portal/archive/images/green_dot.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/green_dot.png rename to deleted/dist-cov/usergrid-portal/archive/images/green_dot.png diff --git a/portal/dist/usergrid-portal/archive/images/grid.png b/deleted/dist-cov/usergrid-portal/archive/images/grid.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/grid.png rename to deleted/dist-cov/usergrid-portal/archive/images/grid.png diff --git a/portal/dist/usergrid-portal/archive/images/icons.png b/deleted/dist-cov/usergrid-portal/archive/images/icons.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/icons.png rename to deleted/dist-cov/usergrid-portal/archive/images/icons.png diff --git a/portal/dist/usergrid-portal/archive/images/ios-sdk-download.png b/deleted/dist-cov/usergrid-portal/archive/images/ios-sdk-download.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/ios-sdk-download.png rename to deleted/dist-cov/usergrid-portal/archive/images/ios-sdk-download.png diff --git a/portal/dist/usergrid-portal/archive/images/iphone_message.png b/deleted/dist-cov/usergrid-portal/archive/images/iphone_message.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/iphone_message.png rename to deleted/dist-cov/usergrid-portal/archive/images/iphone_message.png diff --git a/portal/dist/usergrid-portal/archive/images/javascript-sdk-download.png b/deleted/dist-cov/usergrid-portal/archive/images/javascript-sdk-download.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/javascript-sdk-download.png rename to deleted/dist-cov/usergrid-portal/archive/images/javascript-sdk-download.png diff --git a/portal/dist/usergrid-portal/archive/images/left_arrow.png b/deleted/dist-cov/usergrid-portal/archive/images/left_arrow.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/left_arrow.png rename to deleted/dist-cov/usergrid-portal/archive/images/left_arrow.png diff --git a/portal/dist/usergrid-portal/archive/images/logo-white.png b/deleted/dist-cov/usergrid-portal/archive/images/logo-white.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/logo-white.png rename to deleted/dist-cov/usergrid-portal/archive/images/logo-white.png diff --git a/portal/dist/usergrid-portal/archive/images/menuActiveTriangle.png b/deleted/dist-cov/usergrid-portal/archive/images/menuActiveTriangle.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/menuActiveTriangle.png rename to deleted/dist-cov/usergrid-portal/archive/images/menuActiveTriangle.png diff --git a/portal/dist/usergrid-portal/archive/images/nodejs-sdk-download.png b/deleted/dist-cov/usergrid-portal/archive/images/nodejs-sdk-download.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/nodejs-sdk-download.png rename to deleted/dist-cov/usergrid-portal/archive/images/nodejs-sdk-download.png diff --git a/portal/dist/usergrid-portal/archive/images/notice.png b/deleted/dist-cov/usergrid-portal/archive/images/notice.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/notice.png rename to deleted/dist-cov/usergrid-portal/archive/images/notice.png diff --git a/portal/dist/usergrid-portal/archive/images/orange-arrow.png b/deleted/dist-cov/usergrid-portal/archive/images/orange-arrow.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/orange-arrow.png rename to deleted/dist-cov/usergrid-portal/archive/images/orange-arrow.png diff --git a/portal/dist/usergrid-portal/archive/images/push_notifications_icon.png b/deleted/dist-cov/usergrid-portal/archive/images/push_notifications_icon.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/push_notifications_icon.png rename to deleted/dist-cov/usergrid-portal/archive/images/push_notifications_icon.png diff --git a/portal/dist/usergrid-portal/archive/images/red_dot.png b/deleted/dist-cov/usergrid-portal/archive/images/red_dot.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/red_dot.png rename to deleted/dist-cov/usergrid-portal/archive/images/red_dot.png diff --git a/portal/dist/usergrid-portal/archive/images/right_arrow.png b/deleted/dist-cov/usergrid-portal/archive/images/right_arrow.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/right_arrow.png rename to deleted/dist-cov/usergrid-portal/archive/images/right_arrow.png diff --git a/portal/dist/usergrid-portal/archive/images/ruby-sdk-download.png b/deleted/dist-cov/usergrid-portal/archive/images/ruby-sdk-download.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/ruby-sdk-download.png rename to deleted/dist-cov/usergrid-portal/archive/images/ruby-sdk-download.png diff --git a/portal/dist/usergrid-portal/archive/images/step_1.png b/deleted/dist-cov/usergrid-portal/archive/images/step_1.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/step_1.png rename to deleted/dist-cov/usergrid-portal/archive/images/step_1.png diff --git a/portal/dist/usergrid-portal/archive/images/step_2.png b/deleted/dist-cov/usergrid-portal/archive/images/step_2.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/step_2.png rename to deleted/dist-cov/usergrid-portal/archive/images/step_2.png diff --git a/portal/dist/usergrid-portal/archive/images/step_3.png b/deleted/dist-cov/usergrid-portal/archive/images/step_3.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/step_3.png rename to deleted/dist-cov/usergrid-portal/archive/images/step_3.png diff --git a/portal/dist/usergrid-portal/archive/images/success.png b/deleted/dist-cov/usergrid-portal/archive/images/success.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/success.png rename to deleted/dist-cov/usergrid-portal/archive/images/success.png diff --git a/portal/dist/usergrid-portal/archive/images/swish_arrow.png b/deleted/dist-cov/usergrid-portal/archive/images/swish_arrow.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/swish_arrow.png rename to deleted/dist-cov/usergrid-portal/archive/images/swish_arrow.png diff --git a/portal/dist/usergrid-portal/archive/images/topbackground.png b/deleted/dist-cov/usergrid-portal/archive/images/topbackground.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/topbackground.png rename to deleted/dist-cov/usergrid-portal/archive/images/topbackground.png diff --git a/portal/dist/usergrid-portal/archive/images/up_arrow.png b/deleted/dist-cov/usergrid-portal/archive/images/up_arrow.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/up_arrow.png rename to deleted/dist-cov/usergrid-portal/archive/images/up_arrow.png diff --git a/portal/dist/usergrid-portal/archive/images/user-photo.png b/deleted/dist-cov/usergrid-portal/archive/images/user-photo.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/user-photo.png rename to deleted/dist-cov/usergrid-portal/archive/images/user-photo.png diff --git a/portal/dist/usergrid-portal/archive/images/user_profile.png b/deleted/dist-cov/usergrid-portal/archive/images/user_profile.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/user_profile.png rename to deleted/dist-cov/usergrid-portal/archive/images/user_profile.png diff --git a/portal/dist/usergrid-portal/archive/images/usergrid_200.png b/deleted/dist-cov/usergrid-portal/archive/images/usergrid_200.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/usergrid_200.png rename to deleted/dist-cov/usergrid-portal/archive/images/usergrid_200.png diff --git a/portal/dist/usergrid-portal/archive/images/usergrid_400.png b/deleted/dist-cov/usergrid-portal/archive/images/usergrid_400.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/usergrid_400.png rename to deleted/dist-cov/usergrid-portal/archive/images/usergrid_400.png diff --git a/portal/dist/usergrid-portal/archive/images/warning.png b/deleted/dist-cov/usergrid-portal/archive/images/warning.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/warning.png rename to deleted/dist-cov/usergrid-portal/archive/images/warning.png diff --git a/portal/dist/usergrid-portal/archive/images/yellow_dot.png b/deleted/dist-cov/usergrid-portal/archive/images/yellow_dot.png similarity index 100% rename from portal/dist/usergrid-portal/archive/images/yellow_dot.png rename to deleted/dist-cov/usergrid-portal/archive/images/yellow_dot.png diff --git a/portal/dist/usergrid-portal/archive/index-stripped2.html b/deleted/dist-cov/usergrid-portal/archive/index-stripped2.html similarity index 100% rename from portal/dist/usergrid-portal/archive/index-stripped2.html rename to deleted/dist-cov/usergrid-portal/archive/index-stripped2.html diff --git a/portal/dist/usergrid-portal/archive/index.html b/deleted/dist-cov/usergrid-portal/archive/index.html similarity index 100% rename from portal/dist/usergrid-portal/archive/index.html rename to deleted/dist-cov/usergrid-portal/archive/index.html diff --git a/portal/dist/usergrid-portal/archive/js/app/app.js b/deleted/dist-cov/usergrid-portal/archive/js/app/app.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/app.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/app.js diff --git a/portal/dist/usergrid-portal/archive/js/app/console.js b/deleted/dist-cov/usergrid-portal/archive/js/app/console.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/console.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/console.js diff --git a/portal/dist/usergrid-portal/archive/js/app/helpers.js b/deleted/dist-cov/usergrid-portal/archive/js/app/helpers.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/helpers.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/helpers.js diff --git a/portal/dist/usergrid-portal/archive/js/app/navigation.js b/deleted/dist-cov/usergrid-portal/archive/js/app/navigation.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/navigation.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/navigation.js diff --git a/portal/dist/usergrid-portal/archive/js/app/pages.js b/deleted/dist-cov/usergrid-portal/archive/js/app/pages.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/pages.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/pages.js diff --git a/portal/dist/usergrid-portal/archive/js/app/params.js b/deleted/dist-cov/usergrid-portal/archive/js/app/params.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/params.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/params.js diff --git a/portal/dist/usergrid-portal/archive/js/app/quickLogin.js b/deleted/dist-cov/usergrid-portal/archive/js/app/quickLogin.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/quickLogin.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/quickLogin.js diff --git a/portal/dist/usergrid-portal/archive/js/app/session.js b/deleted/dist-cov/usergrid-portal/archive/js/app/session.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/session.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/session.js diff --git a/portal/dist/usergrid-portal/archive/js/app/sso.js b/deleted/dist-cov/usergrid-portal/archive/js/app/sso.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/sso.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/sso.js diff --git a/portal/dist/usergrid-portal/archive/js/app/status.js b/deleted/dist-cov/usergrid-portal/archive/js/app/status.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/status.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/status.js diff --git a/portal/dist/usergrid-portal/archive/js/app/ui/collections.entity.js b/deleted/dist-cov/usergrid-portal/archive/js/app/ui/collections.entity.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/ui/collections.entity.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/ui/collections.entity.js diff --git a/portal/dist/usergrid-portal/archive/js/app/ui/collections.user.js b/deleted/dist-cov/usergrid-portal/archive/js/app/ui/collections.user.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/ui/collections.user.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/ui/collections.user.js diff --git a/portal/dist/usergrid-portal/archive/js/app/ui/ui.js b/deleted/dist-cov/usergrid-portal/archive/js/app/ui/ui.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/ui/ui.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/ui/ui.js diff --git a/portal/dist/usergrid-portal/archive/js/app/usergrid.appSDK.js b/deleted/dist-cov/usergrid-portal/archive/js/app/usergrid.appSDK.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/usergrid.appSDK.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/usergrid.appSDK.js diff --git a/portal/dist/usergrid-portal/archive/js/app/usergrid.appSDK.orig.js b/deleted/dist-cov/usergrid-portal/archive/js/app/usergrid.appSDK.orig.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/app/usergrid.appSDK.orig.js rename to deleted/dist-cov/usergrid-portal/archive/js/app/usergrid.appSDK.orig.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/MD5.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/MD5.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/MD5.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/MD5.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/backbone.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/backbone.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/backbone.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/backbone.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/bootstrap.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/bootstrap.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/bootstrap.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/bootstrap.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/date.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/date.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/date.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/date.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery-1.7.2.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery-1.7.2.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery-1.7.2.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery-1.7.2.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery-ui-1.8.18.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery-ui-1.8.18.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery-ui-1.8.18.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery-ui-1.8.18.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery.dataset.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.dataset.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery.dataset.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.dataset.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery.dform-0.1.3.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.dform-0.1.3.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery.dform-0.1.3.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.dform-0.1.3.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery.jsonp-2.3.1.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.jsonp-2.3.1.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery.jsonp-2.3.1.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.jsonp-2.3.1.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery.tmpl.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.tmpl.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery.tmpl.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.tmpl.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery.ui.statusbar.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.ui.statusbar.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery.ui.statusbar.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.ui.statusbar.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/jquery.ui.timepicker.min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.ui.timepicker.min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/jquery.ui.timepicker.min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/jquery.ui.timepicker.min.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/prettify.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/prettify.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/prettify.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/prettify.js diff --git a/portal/dist/usergrid-portal/archive/js/lib/underscore-min.js b/deleted/dist-cov/usergrid-portal/archive/js/lib/underscore-min.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/lib/underscore-min.js rename to deleted/dist-cov/usergrid-portal/archive/js/lib/underscore-min.js diff --git a/portal/dist/usergrid-portal/archive/js/spec/client-tests.js b/deleted/dist-cov/usergrid-portal/archive/js/spec/client-tests.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/spec/client-tests.js rename to deleted/dist-cov/usergrid-portal/archive/js/spec/client-tests.js diff --git a/portal/dist/usergrid-portal/archive/js/spec/index.html b/deleted/dist-cov/usergrid-portal/archive/js/spec/index.html similarity index 100% rename from portal/dist/usergrid-portal/archive/js/spec/index.html rename to deleted/dist-cov/usergrid-portal/archive/js/spec/index.html diff --git a/portal/dist/usergrid-portal/archive/js/spec/qunit-git.css b/deleted/dist-cov/usergrid-portal/archive/js/spec/qunit-git.css similarity index 100% rename from portal/dist/usergrid-portal/archive/js/spec/qunit-git.css rename to deleted/dist-cov/usergrid-portal/archive/js/spec/qunit-git.css diff --git a/portal/dist/usergrid-portal/archive/js/spec/qunit-git.js b/deleted/dist-cov/usergrid-portal/archive/js/spec/qunit-git.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/spec/qunit-git.js rename to deleted/dist-cov/usergrid-portal/archive/js/spec/qunit-git.js diff --git a/portal/dist/usergrid-portal/archive/js/unit-tests/appSDK-tests.js b/deleted/dist-cov/usergrid-portal/archive/js/unit-tests/appSDK-tests.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/unit-tests/appSDK-tests.js rename to deleted/dist-cov/usergrid-portal/archive/js/unit-tests/appSDK-tests.js diff --git a/portal/dist/usergrid-portal/archive/js/unit-tests/ie-jquery-tests.js b/deleted/dist-cov/usergrid-portal/archive/js/unit-tests/ie-jquery-tests.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/unit-tests/ie-jquery-tests.js rename to deleted/dist-cov/usergrid-portal/archive/js/unit-tests/ie-jquery-tests.js diff --git a/portal/dist/usergrid-portal/archive/js/unit-tests/qunit.css b/deleted/dist-cov/usergrid-portal/archive/js/unit-tests/qunit.css similarity index 100% rename from portal/dist/usergrid-portal/archive/js/unit-tests/qunit.css rename to deleted/dist-cov/usergrid-portal/archive/js/unit-tests/qunit.css diff --git a/portal/dist/usergrid-portal/archive/js/unit-tests/qunit.js b/deleted/dist-cov/usergrid-portal/archive/js/unit-tests/qunit.js similarity index 100% rename from portal/dist/usergrid-portal/archive/js/unit-tests/qunit.js rename to deleted/dist-cov/usergrid-portal/archive/js/unit-tests/qunit.js diff --git a/portal/dist/usergrid-portal/archive/loading.html b/deleted/dist-cov/usergrid-portal/archive/loading.html similarity index 100% rename from portal/dist/usergrid-portal/archive/loading.html rename to deleted/dist-cov/usergrid-portal/archive/loading.html diff --git a/portal/dist/usergrid-portal/archive/max/index.html b/deleted/dist-cov/usergrid-portal/archive/max/index.html similarity index 100% rename from portal/dist/usergrid-portal/archive/max/index.html rename to deleted/dist-cov/usergrid-portal/archive/max/index.html diff --git a/portal/dist/usergrid-portal/archive/planned_outage.html b/deleted/dist-cov/usergrid-portal/archive/planned_outage.html similarity index 100% rename from portal/dist/usergrid-portal/archive/planned_outage.html rename to deleted/dist-cov/usergrid-portal/archive/planned_outage.html diff --git a/portal/dist/usergrid-portal/archive/push/index.html b/deleted/dist-cov/usergrid-portal/archive/push/index.html similarity index 100% rename from portal/dist/usergrid-portal/archive/push/index.html rename to deleted/dist-cov/usergrid-portal/archive/push/index.html diff --git a/portal/dist/usergrid-portal/archive/service_down.html b/deleted/dist-cov/usergrid-portal/archive/service_down.html similarity index 100% rename from portal/dist/usergrid-portal/archive/service_down.html rename to deleted/dist-cov/usergrid-portal/archive/service_down.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.activities.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.activities.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.activities.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.activities.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.admins.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.admins.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.admins.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.admins.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.applications.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.applications.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.applications.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.applications.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.collection.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collection.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.collection.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collection.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.collections.query.indexes.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collections.query.indexes.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.collections.query.indexes.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collections.query.indexes.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.collections.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collections.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.collections.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collections.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.collections.user.header.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collections.user.header.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.collections.user.header.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.collections.user.header.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.curl.detail.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.curl.detail.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.curl.detail.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.curl.detail.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.feed.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.feed.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.feed.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.feed.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.groups.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.groups.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.groups.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.groups.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.activities.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.activities.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.activities.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.activities.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.details.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.details.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.details.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.details.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.memberships.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.memberships.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.memberships.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.memberships.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.permissions.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.permissions.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.group.permissions.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.group.permissions.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.notifications.configure.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.notifications.configure.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.notifications.configure.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.notifications.configure.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.role.permissions.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.role.permissions.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.role.permissions.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.role.permissions.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.role.users.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.role.users.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.role.users.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.role.users.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.activities.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.activities.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.activities.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.activities.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.graph.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.graph.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.graph.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.graph.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.memberships.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.memberships.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.memberships.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.memberships.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.permissions.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.permissions.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.permissions.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.permissions.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.profile.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.profile.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.panels.user.profile.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.panels.user.profile.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.role.groups.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.role.groups.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.role.groups.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.role.groups.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.roles.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.roles.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.roles.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.roles.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/apigee.ui.users.table_rows.html b/deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.users.table_rows.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/apigee.ui.users.table_rows.html rename to deleted/dist-cov/usergrid-portal/archive/templates/apigee.ui.users.table_rows.html diff --git a/portal/dist/usergrid-portal/archive/templates/test/modalForm2.html b/deleted/dist-cov/usergrid-portal/archive/templates/test/modalForm2.html similarity index 100% rename from portal/dist/usergrid-portal/archive/templates/test/modalForm2.html rename to deleted/dist-cov/usergrid-portal/archive/templates/test/modalForm2.html diff --git a/portal/dist/usergrid-portal/archive/test/autocomplete.html b/deleted/dist-cov/usergrid-portal/archive/test/autocomplete.html similarity index 100% rename from portal/dist/usergrid-portal/archive/test/autocomplete.html rename to deleted/dist-cov/usergrid-portal/archive/test/autocomplete.html diff --git a/portal/dist/usergrid-portal/archive/test/modalForm.html b/deleted/dist-cov/usergrid-portal/archive/test/modalForm.html similarity index 100% rename from portal/dist/usergrid-portal/archive/test/modalForm.html rename to deleted/dist-cov/usergrid-portal/archive/test/modalForm.html diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/Gruntfile.js b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/Gruntfile.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/Gruntfile.js rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/Gruntfile.js diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/LICENSE b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/LICENSE similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/LICENSE rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/LICENSE diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/bower.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/bower.json diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/build/angular-intro.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/build/angular-intro.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/build/angular-intro.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/build/angular-intro.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/example/app.js b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/example/app.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/example/app.js rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/example/app.js diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/package.json b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/package.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/package.json rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/package.json diff --git a/portal/dist/usergrid-portal/bower_components/angular-intro.js/src/angular-intro.js b/deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/src/angular-intro.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular-intro.js/src/angular-intro.js rename to deleted/dist-cov/usergrid-portal/bower_components/angular-intro.js/src/angular-intro.js diff --git a/portal/dist/usergrid-portal/bower_components/angular/README.md b/deleted/dist-cov/usergrid-portal/bower_components/angular/README.md similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angular/README.md rename to deleted/dist-cov/usergrid-portal/bower_components/angular/README.md diff --git a/portal/dist/usergrid-portal/bower_components/angular/angular-csp.css b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular-csp.css similarity index 89% rename from portal/dist/usergrid-portal/bower_components/angular/angular-csp.css rename to deleted/dist-cov/usergrid-portal/bower_components/angular/angular-csp.css index 2124540259..763f7b9e01 100644 --- a/portal/dist/usergrid-portal/bower_components/angular/angular-csp.css +++ b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular-csp.css @@ -4,7 +4,7 @@ [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak, -.ng-hide:not(.ng-animate) { +.ng-hide { display: none !important; } diff --git a/portal/dist/usergrid-portal/bower_components/angular/angular.js b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.js similarity index 92% rename from portal/dist/usergrid-portal/bower_components/angular/angular.js rename to deleted/dist-cov/usergrid-portal/bower_components/angular/angular.js index 91509b4585..e2199514fa 100644 --- a/portal/dist/usergrid-portal/bower_components/angular/angular.js +++ b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.3.0-build.2812+sha.2d5a849 + * @license AngularJS v1.3.0-build.2607+sha.b2e48e6 * (c) 2010-2014 Google, Inc. http://angularjs.org * License: MIT */ @@ -68,7 +68,7 @@ function minErr(module) { return match; }); - message = message + '\nhttp://errors.angularjs.org/1.3.0-build.2812+sha.2d5a849/' + + message = message + '\nhttp://errors.angularjs.org/1.3.0-build.2607+sha.b2e48e6/' + (module ? module + '/' : '') + code; for (i = 2; i < arguments.length; i++) { message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + @@ -89,10 +89,10 @@ function minErr(module) { -push, -toString, -ngMinErr, + -_angular, -angularModule, -nodeName_, -uid, - -REGEX_STRING_REGEXP, -lowercase, -uppercase, @@ -182,13 +182,11 @@ function minErr(module) { *
*/ -var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/; - /** * @ngdoc function * @name angular.lowercase * @module ng - * @kind function + * @function * * @description Converts the specified string to lowercase. * @param {string} string String to be converted to lowercase. @@ -201,7 +199,7 @@ var hasOwnProperty = Object.prototype.hasOwnProperty; * @ngdoc function * @name angular.uppercase * @module ng - * @kind function + * @function * * @description Converts the specified string to uppercase. * @param {string} string String to be converted to uppercase. @@ -242,6 +240,8 @@ var /** holds major version number for IE or NaN for real browsers */ toString = Object.prototype.toString, ngMinErr = minErr('ng'), + + _angular = window.angular, /** @name angular */ angular = window.angular || (window.angular = {}), angularModule, @@ -283,7 +283,7 @@ function isArrayLike(obj) { * @ngdoc function * @name angular.forEach * @module ng - * @kind function + * @function * * @description * Invokes the `iterator` function once for each item in `obj` collection, which can be either an @@ -297,7 +297,7 @@ function isArrayLike(obj) { ```js var values = {name: 'misko', gender: 'male'}; var log = []; - angular.forEach(values, function(value, key) { + angular.forEach(values, function(value, key){ this.push(key + ': ' + value); }, log); expect(log).toEqual(['name: misko', 'gender: male']); @@ -311,7 +311,7 @@ function isArrayLike(obj) { function forEach(obj, iterator, context) { var key; if (obj) { - if (isFunction(obj)) { + if (isFunction(obj)){ for (key in obj) { // Need to check if hasOwnProperty exists, // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function @@ -412,7 +412,7 @@ function setHashKey(obj, h) { * @ngdoc function * @name angular.extend * @module ng - * @kind function + * @function * * @description * Extends the destination object `dst` by copying all of the properties from the `src` object(s) @@ -424,9 +424,9 @@ function setHashKey(obj, h) { */ function extend(dst) { var h = dst.$$hashKey; - forEach(arguments, function(obj) { + forEach(arguments, function(obj){ if (obj !== dst) { - forEach(obj, function(value, key) { + forEach(obj, function(value, key){ dst[key] = value; }); } @@ -449,7 +449,7 @@ function inherit(parent, extra) { * @ngdoc function * @name angular.noop * @module ng - * @kind function + * @function * * @description * A function that performs no operations. This function can be useful when writing code in the @@ -469,7 +469,7 @@ noop.$inject = []; * @ngdoc function * @name angular.identity * @module ng - * @kind function + * @function * * @description * A function that returns its first argument. This function is useful when writing code in the @@ -491,7 +491,7 @@ function valueFn(value) {return function() {return value;};} * @ngdoc function * @name angular.isUndefined * @module ng - * @kind function + * @function * * @description * Determines if a reference is undefined. @@ -506,7 +506,7 @@ function isUndefined(value){return typeof value === 'undefined';} * @ngdoc function * @name angular.isDefined * @module ng - * @kind function + * @function * * @description * Determines if a reference is defined. @@ -521,7 +521,7 @@ function isDefined(value){return typeof value !== 'undefined';} * @ngdoc function * @name angular.isObject * @module ng - * @kind function + * @function * * @description * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not @@ -537,7 +537,7 @@ function isObject(value){return value != null && typeof value === 'object';} * @ngdoc function * @name angular.isString * @module ng - * @kind function + * @function * * @description * Determines if a reference is a `String`. @@ -552,7 +552,7 @@ function isString(value){return typeof value === 'string';} * @ngdoc function * @name angular.isNumber * @module ng - * @kind function + * @function * * @description * Determines if a reference is a `Number`. @@ -567,7 +567,7 @@ function isNumber(value){return typeof value === 'number';} * @ngdoc function * @name angular.isDate * @module ng - * @kind function + * @function * * @description * Determines if a value is a date. @@ -575,7 +575,7 @@ function isNumber(value){return typeof value === 'number';} * @param {*} value Reference to check. * @returns {boolean} True if `value` is a `Date`. */ -function isDate(value) { +function isDate(value){ return toString.call(value) === '[object Date]'; } @@ -584,7 +584,7 @@ function isDate(value) { * @ngdoc function * @name angular.isArray * @module ng - * @kind function + * @function * * @description * Determines if a reference is an `Array`. @@ -592,20 +592,16 @@ function isDate(value) { * @param {*} value Reference to check. * @returns {boolean} True if `value` is an `Array`. */ -var isArray = (function() { - if (!isFunction(Array.isArray)) { - return function(value) { - return toString.call(value) === '[object Array]'; - }; - } - return Array.isArray; -})(); +function isArray(value) { + return toString.call(value) === '[object Array]'; +} + /** * @ngdoc function * @name angular.isFunction * @module ng - * @kind function + * @function * * @description * Determines if a reference is a `Function`. @@ -679,7 +675,7 @@ var trim = (function() { * @ngdoc function * @name angular.isElement * @module ng - * @kind function + * @function * * @description * Determines if a reference is a DOM element (or wrapped jQuery element). @@ -697,7 +693,7 @@ function isElement(node) { * @param str 'key1,key2,...' * @returns {object} in the form of {key1:true, key2:true, ...} */ -function makeMap(str) { +function makeMap(str){ var obj = {}, items = str.split(","), i; for ( i = 0; i < items.length; i++ ) obj[ items[i] ] = true; @@ -744,7 +740,7 @@ function size(obj, ownPropsOnly) { if (isArray(obj) || isString(obj)) { return obj.length; - } else if (isObject(obj)) { + } else if (isObject(obj)){ for (key in obj) if (!ownPropsOnly || obj.hasOwnProperty(key)) count++; @@ -790,7 +786,7 @@ function isLeafNode (node) { * @ngdoc function * @name angular.copy * @module ng - * @kind function + * @function * * @description * Creates a deep copy of `source`, which should be an object or an array. @@ -843,7 +839,7 @@ function isLeafNode (node) { */ -function copy(source, destination, stackSource, stackDest) { +function copy(source, destination){ if (isWindow(source) || isScope(source)) { throw ngMinErr('cpws', "Can't copy! Making copies of Window or Scope instances is not supported."); @@ -853,82 +849,52 @@ function copy(source, destination, stackSource, stackDest) { destination = source; if (source) { if (isArray(source)) { - destination = copy(source, [], stackSource, stackDest); + destination = copy(source, []); } else if (isDate(source)) { destination = new Date(source.getTime()); } else if (isRegExp(source)) { destination = new RegExp(source.source); } else if (isObject(source)) { - destination = copy(source, {}, stackSource, stackDest); + destination = copy(source, {}); } } } else { if (source === destination) throw ngMinErr('cpi', "Can't copy! Source and destination are identical."); - - stackSource = stackSource || []; - stackDest = stackDest || []; - - if (isObject(source)) { - var index = indexOf(stackSource, source); - if (index !== -1) return stackDest[index]; - - stackSource.push(source); - stackDest.push(destination); - } - - var result; if (isArray(source)) { destination.length = 0; for ( var i = 0; i < source.length; i++) { - result = copy(source[i], null, stackSource, stackDest); - if (isObject(source[i])) { - stackSource.push(source[i]); - stackDest.push(result); - } - destination.push(result); + destination.push(copy(source[i])); } } else { var h = destination.$$hashKey; - forEach(destination, function(value, key) { + forEach(destination, function(value, key){ delete destination[key]; }); for ( var key in source) { - result = copy(source[key], null, stackSource, stackDest); - if (isObject(source[key])) { - stackSource.push(source[key]); - stackDest.push(result); - } - destination[key] = result; + destination[key] = copy(source[key]); } setHashKey(destination,h); } - } return destination; } /** - * Creates a shallow copy of an object, an array or a primitive + * Create a shallow copy of an object */ function shallowCopy(src, dst) { - if (isArray(src)) { - dst = dst || []; + dst = dst || {}; - for ( var i = 0; i < src.length; i++) { - dst[i] = src[i]; - } - } else if (isObject(src)) { - dst = dst || {}; - - for (var key in src) { - if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } + for(var key in src) { + // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src + // so we don't need to worry about using our custom hasOwnProperty here + if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { + dst[key] = src[key]; } } - return dst || src; + return dst; } @@ -936,7 +902,7 @@ function shallowCopy(src, dst) { * @ngdoc function * @name angular.equals * @module ng - * @kind function + * @function * * @description * Determines if two objects or two values are equivalent. Supports value types, regular @@ -948,7 +914,7 @@ function shallowCopy(src, dst) { * * Both objects or values are of the same type and all of their properties are equal by * comparing them with `angular.equals`. * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavaScript, + * * Both values represent the same regular expression (In JavasScript, * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual * representation matches). * @@ -1023,7 +989,7 @@ function sliceArgs(args, startIndex) { * @ngdoc function * @name angular.bind * @module ng - * @kind function + * @function * * @description * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for @@ -1061,7 +1027,7 @@ function bind(self, fn) { function toJsonReplacer(key, value) { var val = value; - if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') { + if (typeof key === 'string' && key.charAt(0) === '$') { val = undefined; } else if (isWindow(value)) { val = '$WINDOW'; @@ -1079,10 +1045,10 @@ function toJsonReplacer(key, value) { * @ngdoc function * @name angular.toJson * @module ng - * @kind function + * @function * * @description - * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be + * Serializes input into a JSON-formatted string. Properties with leading $ characters will be * stripped since angular uses this notation internally. * * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. @@ -1099,7 +1065,7 @@ function toJson(obj, pretty) { * @ngdoc function * @name angular.fromJson * @module ng - * @kind function + * @function * * @description * Deserializes a JSON string. @@ -1176,7 +1142,7 @@ function tryDecodeURIComponent(value) { */ function parseKeyValue(/**string*/keyValue) { var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue) { + forEach((keyValue || "").split('&'), function(keyValue){ if ( keyValue ) { key_value = keyValue.split('='); key = tryDecodeURIComponent(key_value[0]); @@ -1511,8 +1477,8 @@ function bootstrap(element, modules, config) { }]); modules.unshift('ng'); var injector = createInjector(modules, config.strictDi); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function(scope, element, compile, injector) { + injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', + function(scope, element, compile, injector, animate) { scope.$apply(function() { element.data('$injector', injector); compile(element)(scope); @@ -1538,7 +1504,7 @@ function bootstrap(element, modules, config) { } var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator) { +function snake_case(name, separator){ separator = separator || '_'; return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { return (pos ? separator : '') + letter.toLowerCase(); @@ -1546,12 +1512,10 @@ function snake_case(name, separator) { } function bindJQuery() { - var originalCleanData; // bind to jQuery if present; jQuery = window.jQuery; - // Use jQuery if it exists with proper functionality, otherwise default to us. - // Angular 1.2+ requires jQuery 1.7.1+ for on()/off() support. - if (jQuery && jQuery.fn.on) { + // reset to jQuery or default to us. + if (jQuery) { jqLite = jQuery; extend(jQuery.fn, { scope: JQLitePrototype.scope, @@ -1560,25 +1524,14 @@ function bindJQuery() { injector: JQLitePrototype.injector, inheritedData: JQLitePrototype.inheritedData }); - - originalCleanData = jQuery.cleanData; - // Prevent double-proxying. - originalCleanData = originalCleanData.$$original || originalCleanData; - - // All nodes removed from the DOM via various jQuery APIs like .remove() - // are passed through jQuery.cleanData. Monkey-patch this method to fire - // the $destroy event on all removed nodes. - jQuery.cleanData = function(elems) { - for (var i = 0, elem; (elem = elems[i]) != null; i++) { - jQuery(elem).triggerHandler('$destroy'); - } - originalCleanData(elems); - }; - jQuery.cleanData.$$original = originalCleanData; + // Method signature: + // jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) + jqLitePatchJQueryRemove('remove', true, true, false); + jqLitePatchJQueryRemove('empty', false, false, false); + jqLitePatchJQueryRemove('html', false, false, true); } else { jqLite = JQLite; } - angular.element = jqLite; } @@ -1708,7 +1661,7 @@ function setupModuleLoader(window) { * * # Module * - * A module is a collection of services, directives, controllers, filters, and configuration information. + * A module is a collection of services, directives, filters, and configuration information. * `angular.module` is used to configure the {@link auto.$injector $injector}. * * ```js @@ -1763,19 +1716,15 @@ function setupModuleLoader(window) { /** @type {!Array.>} */ var invokeQueue = []; - /** @type {!Array.} */ - var configBlocks = []; - /** @type {!Array.} */ var runBlocks = []; - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); + var config = invokeLater('$injector', 'invoke'); /** @type {angular.Module} */ var moduleInstance = { // Private state _invokeQueue: invokeQueue, - _configBlocks: configBlocks, _runBlocks: runBlocks, /** @@ -1934,8 +1883,6 @@ function setupModuleLoader(window) { * configuration. * @description * Use this method to register work which needs to be performed on module loading. - * For more about how to configure services, see - * {@link providers#providers_provider-recipe Provider Recipe}. */ config: config, @@ -1967,10 +1914,9 @@ function setupModuleLoader(window) { * @param {String=} insertMethod * @returns {angular.Module} */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; + function invokeLater(provider, method, insertMethod) { return function() { - queue[insertMethod || 'push']([provider, method, arguments]); + invokeQueue[insertMethod || 'push']([provider, method, arguments]); return moduleInstance; }; } @@ -2074,7 +2020,7 @@ function setupModuleLoader(window) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.3.0-build.2812+sha.2d5a849', // all of these placeholder strings will be replaced by grunt's + full: '1.3.0-build.2607+sha.b2e48e6', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 3, dot: 0, @@ -2208,8 +2154,7 @@ function publishExternalAPI(angular){ -JQLitePrototype, -addEventListenerFn, -removeEventListenerFn, - -BOOLEAN_ATTR, - -ALIASED_ATTR + -BOOLEAN_ATTR */ ////////////////////////////////// @@ -2220,7 +2165,7 @@ function publishExternalAPI(angular){ * @ngdoc function * @name angular.element * @module ng - * @kind function + * @function * * @description * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. @@ -2303,7 +2248,7 @@ function publishExternalAPI(angular){ */ var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng' + new Date().getTime(), + jqName = JQLite.expando = 'ng-' + new Date().getTime(), jqId = 1, addEventListenerFn = (window.document.addEventListener ? function(element, type, fn) {element.addEventListener(type, fn, false);} @@ -2340,6 +2285,49 @@ function camelCase(name) { replace(MOZ_HACK_REGEXP, 'Moz$1'); } +///////////////////////////////////////////// +// jQuery mutation patch +// +// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a +// $destroy event on all DOM nodes being removed. +// +///////////////////////////////////////////// + +function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { + var originalJqFn = jQuery.fn[name]; + originalJqFn = originalJqFn.$original || originalJqFn; + removePatch.$original = originalJqFn; + jQuery.fn[name] = removePatch; + + function removePatch(param) { + // jshint -W040 + var list = filterElems && param ? [this.filter(param)] : [this], + fireEvent = dispatchThis, + set, setIndex, setLength, + element, childIndex, childLength, children; + + if (!getterIfNoArguments || param != null) { + while(list.length) { + set = list.shift(); + for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { + element = jqLite(set[setIndex]); + if (fireEvent) { + element.triggerHandler('$destroy'); + } else { + fireEvent = !fireEvent; + } + for(childIndex = 0, childLength = (children = element.children()).length; + childIndex < childLength; + childIndex++) { + list.push(jQuery(children[childIndex])); + } + } + } + } + return originalJqFn.apply(this, arguments); + } +} + var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; var HTML_REGEXP = /<|&#?\w+;/; var TAG_NAME_REGEXP = /<([\w:]+)/; @@ -2667,11 +2655,6 @@ var BOOLEAN_ELEMENTS = {}; forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { BOOLEAN_ELEMENTS[uppercase(value)] = true; }); -var ALIASED_ATTR = { - 'ngMinlength' : 'minlength', - 'ngMaxlength' : 'maxlength', - 'ngPattern' : 'pattern' -}; function getBooleanAttrName(element, name) { // check dom last since we will most likely fail on name @@ -2681,11 +2664,6 @@ function getBooleanAttrName(element, name) { return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; } -function getAliasedAttrName(element, name) { - var nodeName = element.nodeName; - return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name]; -} - forEach({ data: jqLiteData, inheritedData: jqLiteInheritedData, @@ -3230,7 +3208,7 @@ HashMap.prototype = { * @ngdoc function * @module ng * @name angular.injector - * @kind function + * @function * * @description * Creates an injector function that can be used for retrieving services as well as for @@ -3257,7 +3235,7 @@ HashMap.prototype = { * * Sometimes you want to get access to the injector of a currently running Angular app * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using the extra `injector()` added + * application has been bootstrapped. You can do this using extra `injector()` added * to JQuery/jqLite elements. See {@link angular.element}. * * *This is fairly rare but could be the case if a third party library is injecting the @@ -3346,7 +3324,7 @@ function annotate(fn, strictDi, name) { /** * @ngdoc service * @name $injector - * @kind function + * @function * * @description * @@ -3389,7 +3367,7 @@ function annotate(fn, strictDi, name) { * minification, and obfuscation tools since these tools change the argument names. * * ## `$inject` Annotation - * By adding an `$inject` property onto a function the injection parameters can be specified. + * By adding a `$inject` property onto a function the injection parameters can be specified. * * ## Inline * As an array of injection names, where the last item in the array is the function to call. @@ -3426,7 +3404,7 @@ function annotate(fn, strictDi, name) { * @name $injector#has * * @description - * Allows the user to query if the particular service exists. + * Allows the user to query if the particular service exist. * * @param {string} Name of the service to query. * @returns {boolean} returns true if injector has given service. @@ -3436,8 +3414,8 @@ function annotate(fn, strictDi, name) { * @ngdoc method * @name $injector#instantiate * @description - * Create a new instance of JS type. The method takes a constructor function, invokes the new - * operator, and supplies all of the arguments to the constructor function as specified by the + * Create a new instance of JS type. The method takes a constructor function invokes the new + * operator and supplies all of the arguments to the constructor function as specified by the * constructor annotation. * * @param {Function} Type Annotated constructor function. @@ -3919,27 +3897,22 @@ function createInjector(modulesToLoad, strictDi) { // Module Loading //////////////////////////////////// function loadModules(modulesToLoad){ - var runBlocks = [], moduleFn, invokeQueue; + var runBlocks = [], moduleFn, invokeQueue, i, ii; forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; loadedModules.put(module, true); - function runInvokeQueue(queue) { - var i, ii; - for(i = 0, ii = queue.length; i < ii; i++) { - var invokeArgs = queue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } - try { if (isString(module)) { moduleFn = angularModule(module); runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - runInvokeQueue(moduleFn._invokeQueue); - runInvokeQueue(moduleFn._configBlocks); + + for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { + var invokeArgs = invokeQueue[i], + provider = providerInjector.get(invokeArgs[0]); + + provider[invokeArgs[1]].apply(provider, invokeArgs[2]); + } } else if (isFunction(module)) { runBlocks.push(providerInjector.invoke(module)); } else if (isArray(module)) { @@ -4063,7 +4036,7 @@ createInjector.$$annotate = annotate; * @requires $rootScope * * @description - * When called, it checks current value of `$location.hash()` and scrolls to the related element, + * When called, it checks current value of `$location.hash()` and scroll to related element, * according to rules specified in * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). * @@ -4265,7 +4238,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#enter - * @kind function + * @function * @description Inserts the element into the DOM either after the `after` element or * as the first child within the `parent` element. Once complete, the done() callback * will be fired (if provided). @@ -4288,7 +4261,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#leave - * @kind function + * @function * @description Removes the element from the DOM. Once complete, the done() callback will be * fired (if provided). * @param {DOMElement} element the element which will be removed from the DOM @@ -4304,7 +4277,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#move - * @kind function + * @function * @description Moves the position of the provided element within the DOM to be placed * either after the `after` element or inside of the `parent` element. Once complete, the * done() callback will be fired (if provided). @@ -4328,7 +4301,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#addClass - * @kind function + * @function * @description Adds the provided className CSS class value to the provided element. Once * complete, the done() callback will be fired (if provided). * @param {DOMElement} element the element which will have the className value @@ -4351,7 +4324,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#removeClass - * @kind function + * @function * @description Removes the provided className CSS class value from the provided element. * Once complete, the done() callback will be fired (if provided). * @param {DOMElement} element the element which will have the className value @@ -4374,10 +4347,10 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#setClass - * @kind function + * @function * @description Adds and/or removes the given CSS classes to and from the element. * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have its CSS classes changed + * @param {DOMElement} element the element which will it's CSS classes changed * removed from it * @param {string} add the CSS classes which will be added to the element * @param {string} remove the CSS class which will be removed from the element @@ -4931,7 +4904,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#put - * @kind function + * @function * * @description * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be @@ -4967,7 +4940,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#get - * @kind function + * @function * * @description * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. @@ -4991,7 +4964,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#remove - * @kind function + * @function * * @description * Removes an entry from the {@link $cacheFactory.Cache Cache} object. @@ -5019,7 +4992,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#removeAll - * @kind function + * @function * * @description * Clears the cache object of any entries. @@ -5035,7 +5008,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#destroy - * @kind function + * @function * * @description * Destroys the {@link $cacheFactory.Cache Cache} object entirely, @@ -5052,7 +5025,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#info - * @kind function + * @function * * @description * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. @@ -5107,7 +5080,7 @@ function $CacheFactoryProvider() { * @name $cacheFactory#info * * @description - * Get information about all the caches that have been created + * Get information about all the of the caches that have been created * * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` */ @@ -5208,7 +5181,7 @@ function $TemplateCacheProvider() { /** * @ngdoc service * @name $compile - * @kind function + * @function * * @description * Compiles an HTML string or DOM into a template and produces a template function, which @@ -5246,6 +5219,7 @@ function $TemplateCacheProvider() { * template: '
', // or // function(tElement, tAttrs) { ... }, * // or * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, + * replace: false, * transclude: false, * restrict: 'A', * scope: false, @@ -5399,19 +5373,6 @@ function $TemplateCacheProvider() { * * `M` - Comment: `` * * - * #### `type` - * String representing the document type used by the markup. This is useful for templates where the root - * node is non-HTML content (such as SVG or MathML). The default value is "html". - * - * * `html` - All root template nodes are HTML, and don't need to be wrapped. Root nodes may also be - * top-level elements such as `` or ``. - * * `svg` - The template contains only SVG content, and must be wrapped in an `` node prior to - * processing. - * * `math` - The template contains only MathML content, and must be wrapped in an `` node prior to - * processing. - * - * If no `type` is specified, then the type is considered to be html. - * * #### `template` * replace the current element with the contents of the HTML. The replacement process * migrates all of the attributes / classes from the old element to the new one. See the @@ -5434,7 +5395,7 @@ function $TemplateCacheProvider() { * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. * * - * #### `replace` ([*DEPRECATED*!], will be removed in next major release) + * #### `replace` * specify where the template should be inserted. Defaults to `false`. * * * `true` - the template will replace the current element. @@ -5461,7 +5422,11 @@ function $TemplateCacheProvider() { * ``` * * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. The compile function takes the following arguments: + * template transformation, it is not used often. Examples that require compile functions are + * directives that transform template DOM, such as {@link + * api/ng.directive:ngRepeat ngRepeat}, or load the contents + * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The + * compile function takes the following arguments. * * * `tElement` - template element - The element where the directive has been declared. It is * safe to do template transformation on the element and child elements only. @@ -5699,7 +5664,7 @@ var $compileMinErr = minErr('$compile'); /** * @ngdoc provider * @name $compileProvider - * @kind function + * @function * * @description */ @@ -5707,9 +5672,8 @@ $CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; function $CompileProvider($provide, $$sanitizeUriProvider) { var hasDirectives = {}, Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/, - ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'); + COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, + CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes // The assumption is that future DOM event attribute names will begin with @@ -5719,7 +5683,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compileProvider#directive - * @kind function + * @function * * @description * Register a new directive with the compiler. @@ -5772,7 +5736,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compileProvider#aHrefSanitizationWhitelist - * @kind function + * @function * * @description * Retrieves or overrides the default regular expression that is used for whitelisting of safe @@ -5802,7 +5766,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compileProvider#imgSrcSanitizationWhitelist - * @kind function + * @function * * @description * Retrieves or overrides the default regular expression that is used for whitelisting of safe @@ -5846,7 +5810,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$addClass - * @kind function + * @function * * @description * Adds the CSS class value specified by the classVal parameter to the element. If animations @@ -5863,7 +5827,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$removeClass - * @kind function + * @function * * @description * Removes the CSS class value specified by the classVal parameter from the element. If @@ -5880,7 +5844,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$updateClass - * @kind function + * @function * * @description * Adds and removes the appropriate CSS class values to the element based on the difference @@ -5916,19 +5880,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { //is set through this function since it may cause $updateClass to //become unstable. - var node = this.$$element[0], - booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(node, key), - observer = key, + var booleanKey = getBooleanAttrName(this.$$element[0], key), normalizedVal, nodeName; if (booleanKey) { this.$$element.prop(key, value); attrName = booleanKey; - } else if(aliasedKey) { - this[aliasedKey] = value; - observer = aliasedKey; } this[key] = value; @@ -5961,7 +5919,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // fire observers var $$observers = this.$$observers; - $$observers && forEach($$observers[observer], function(fn) { + $$observers && forEach($$observers[key], function(fn) { try { fn(value); } catch (e) { @@ -5974,7 +5932,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$observe - * @kind function + * @function * * @description * Observes an interpolated attribute. @@ -6040,7 +5998,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority, ignoreDirective, previousCompileContext); safeAddClass($compileNodes, 'ng-scope'); - return function publicLinkFn(scope, cloneConnectFn, transcludeControllers, parentBoundTranscludeFn){ + return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){ assertArg(scope, 'scope'); // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart // and sometimes changes the structure of the DOM. @@ -6062,7 +6020,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn); + if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode); return $linkNode; }; } @@ -6117,9 +6075,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { !childNodes.length) ? null : compileNodes(childNodes, - nodeLinkFn ? ( - (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement) - && nodeLinkFn.transclude) : transcludeFn); + nodeLinkFn ? nodeLinkFn.transclude : transcludeFn); linkFns.push(nodeLinkFn, childLinkFn); linkFnFound = linkFnFound || nodeLinkFn || childLinkFn; @@ -6130,8 +6086,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // return a linking function if we have found anything, null otherwise return linkFnFound ? compositeLinkFn : null; - function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, $node, childScope, i, ii, n, childBoundTranscludeFn; + function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) { + var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n; // copy nodeList so that linking doesn't break due to live list updates. var nodeListLength = nodeList.length, @@ -6153,32 +6109,23 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } else { childScope = scope; } - - if ( nodeLinkFn.transcludeOnThisElement ) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, nodeLinkFn.transclude, parentBoundTranscludeFn); - - } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) { - childBoundTranscludeFn = parentBoundTranscludeFn; - - } else if (!parentBoundTranscludeFn && transcludeFn) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn); - + childTranscludeFn = nodeLinkFn.transclude; + if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) { + nodeLinkFn(childLinkFn, childScope, node, $rootElement, + createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn) + ); } else { - childBoundTranscludeFn = null; + nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn); } - - nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn); - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn); + childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn); } } } } - function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) { - - var boundTranscludeFn = function(transcludedScope, cloneFn, controllers) { + function createBoundTranscludeFn(scope, transcludeFn) { + return function boundTranscludeFn(transcludedScope, cloneFn, controllers) { var scopeCreated = false; if (!transcludedScope) { @@ -6187,14 +6134,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { scopeCreated = true; } - var clone = transcludeFn(transcludedScope, cloneFn, controllers, previousBoundTranscludeFn); + var clone = transcludeFn(transcludedScope, cloneFn, controllers); if (scopeCreated) { - clone.on('$destroy', function() { transcludedScope.$destroy(); }); + clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy)); } return clone; }; - - return boundTranscludeFn; } /** @@ -6372,7 +6317,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { templateDirective = previousCompileContext.templateDirective, nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, hasTranscludeDirective = false, - hasTemplate = false, hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, $compileNode = templateAttrs.$$element = jqLite(compileNode), directive, @@ -6400,25 +6344,17 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (directiveValue = directive.scope) { + newScopeDirective = newScopeDirective || directive; // skip the check for directives with async templates, we'll check the derived sync // directive when the template arrives if (!directive.templateUrl) { + assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, + $compileNode); if (isObject(directiveValue)) { - // This directive is trying to add an isolated scope. - // Check that there is no scope of any kind already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective, - directive, $compileNode); newIsolateScopeDirective = directive; - } else { - // This directive is trying to add a child scope. - // Check that there is no isolated scope already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); } } - - newScopeDirective = newScopeDirective || directive; } directiveName = directive.name; @@ -6471,7 +6407,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (directive.template) { - hasTemplate = true; assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; @@ -6486,7 +6421,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { if (jqLiteIsTextNode(directiveValue)) { $template = []; } else { - $template = jqLite(wrapTemplate(directive.type, trim(directiveValue))); + $template = jqLite(trim(directiveValue)); } compileNode = $template[0]; @@ -6521,7 +6456,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (directive.templateUrl) { - hasTemplate = true; assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; @@ -6530,7 +6464,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { + templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { controllerDirectives: controllerDirectives, newIsolateScopeDirective: newIsolateScopeDirective, templateDirective: templateDirective, @@ -6558,10 +6492,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; - nodeLinkFn.templateOnThisElement = hasTemplate; - nodeLinkFn.transclude = childTranscludeFn; - + nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn; previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; // might be normal or delayed nodeLinkFn depending on if templateUrl is present @@ -6640,8 +6571,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { isolateScope = scope.$new(true); - if (templateDirective && (templateDirective === newIsolateScopeDirective || - templateDirective === newIsolateScopeDirective.$$originalDirective)) { + if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) { $linkNode.data('$isolateScope', isolateScope) ; } else { $linkNode.data('$isolateScopeNoTemplate', isolateScope); @@ -6705,7 +6635,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { parentSet(scope, parentValue = isolateScope[scopeName]); } } - parentValueWatch.$$unwatch = parentGet.$$unwatch; return lastValue = parentValue; }, null, parentGet.literal); break; @@ -6868,7 +6797,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // reapply the old attributes to the new element forEach(dst, function(value, key) { if (key.charAt(0) != '$') { - if (src[key] && src[key] !== value) { + if (src[key]) { value += (key === 'style' ? ';' : ' ') + src[key]; } dst.$set(key, value, true, srcAttr[key]); @@ -6907,8 +6836,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { }), templateUrl = (isFunction(origAsyncDirective.templateUrl)) ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl, - type = origAsyncDirective.type; + : origAsyncDirective.templateUrl; $compileNode.empty(); @@ -6922,7 +6850,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { if (jqLiteIsTextNode(content)) { $template = []; } else { - $template = jqLite(wrapTemplate(type, trim(content))); + $template = jqLite(trim(content)); } compileNode = $template[0]; @@ -6980,8 +6908,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // Copy in CSS classes from original node safeAddClass(jqLite(linkNode), oldClasses); } - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); + if (afterTemplateNodeLinkFn.transclude) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude); } else { childBoundTranscludeFn = boundTranscludeFn; } @@ -7034,9 +6962,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { compile: valueFn(function textInterpolateLinkFn(scope, node) { var parent = node.parent(), bindings = parent.data('$binding') || []; - // Need to interpolate again in case this is using one-time bindings in multiple clones - // of transcluded templates. - interpolateFn = $interpolate(text); bindings.push(interpolateFn); safeAddClass(parent.data('$binding', bindings), 'ng-binding'); scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { @@ -7048,20 +6973,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } - function wrapTemplate(type, template) { - type = lowercase(type || 'html'); - switch(type) { - case 'svg': - case 'math': - var wrapper = document.createElement('div'); - wrapper.innerHTML = '<'+type+'>'+template+''; - return wrapper.childNodes[0].childNodes; - default: - return template; - } - } - - function getTrustedContext(node, attrNormalizedName) { if (attrNormalizedName == "srcdoc") { return $sce.HTML; @@ -7105,18 +7016,15 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // we need to interpolate again, in case the attribute value has been updated // (e.g. by another directive's compile function) - interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name), - ALL_OR_NOTHING_ATTRS[name]); + interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); // if attribute was updated so that there is no interpolation going on we don't want to // register any observers if (!interpolateFn) return; - // initialize attr object so that it's ready in case we need the value for isolate - // scope initialization, otherwise the value would not be available from isolate - // directive's linking fn during linking phase + // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the + // actual attr value attr[name] = interpolateFn(scope); - ($$observers[name] || ($$observers[name] = [])).$$inter = true; (attr.$$observers && attr.$$observers[name].$$scope || scope). $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { @@ -7223,9 +7131,7 @@ function directiveNormalize(name) { * element attributes. The values reflect current binding state `{{ }}`. The normalization is * needed since all of these are treated as equivalent in Angular: * - * ``` * - * ``` */ /** @@ -7239,7 +7145,7 @@ function directiveNormalize(name) { /** * @ngdoc method * @name $compile.directive.Attributes#$set - * @kind function + * @function * * @description * Set DOM element attribute value. @@ -7557,9 +7463,9 @@ function $HttpProvider() { common: { 'Accept': 'application/json, text/plain, */*' }, - post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) + post: copy(CONTENT_TYPE_APPLICATION_JSON), + put: copy(CONTENT_TYPE_APPLICATION_JSON), + patch: copy(CONTENT_TYPE_APPLICATION_JSON) }, xsrfCookieName: 'XSRF-TOKEN', @@ -7572,6 +7478,12 @@ function $HttpProvider() { */ var interceptorFactories = this.interceptors = []; + /** + * For historical reasons, response interceptors are ordered by the order in which + * they are applied to the response. (This is the opposite of interceptorFactories) + */ + var responseInterceptorFactories = this.responseInterceptors = []; + this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { @@ -7589,6 +7501,27 @@ function $HttpProvider() { ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); }); + forEach(responseInterceptorFactories, function(interceptorFactory, index) { + var responseFn = isString(interceptorFactory) + ? $injector.get(interceptorFactory) + : $injector.invoke(interceptorFactory); + + /** + * Response interceptors go before "around" interceptors (no real reason, just + * had to pick one.) But they are already reversed, so we can't use unshift, hence + * the splice. + */ + reversedInterceptors.splice(index, 0, { + response: function(response) { + return responseFn($q.when(response)); + }, + responseError: function(response) { + return responseFn($q.reject(response)); + } + }); + }); + + /** * @ngdoc service * @kind function @@ -7774,14 +7707,14 @@ function $HttpProvider() { * * There are two kinds of interceptors (and two kinds of rejection interceptors): * - * * `request`: interceptors get called with a http `config` object. The function is free to - * modify the `config` object or create a new one. The function needs to return the `config` - * object directly, or a promise containing the `config` or a new `config` object. + * * `request`: interceptors get called with http `config` object. The function is free to + * modify the `config` or create a new one. The function needs to return the `config` + * directly or as a promise. * * `requestError`: interceptor gets called when a previous interceptor threw an error or * resolved with a rejection. * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` object or create a new one. The function needs to return the `response` - * object directly, or as a promise containing the `response` or a new `response` object. + * modify the `response` or create a new one. The function needs to return the `response` + * directly or as a promise. * * `responseError`: interceptor gets called when a previous interceptor threw an error or * resolved with a rejection. * @@ -7793,7 +7726,7 @@ function $HttpProvider() { * // optional method * 'request': function(config) { * // do something on success - * return config; + * return config || $q.when(config); * }, * * // optional method @@ -7810,7 +7743,7 @@ function $HttpProvider() { * // optional method * 'response': function(response) { * // do something on success - * return response; + * return response || $q.when(response); * }, * * // optional method @@ -7841,6 +7774,51 @@ function $HttpProvider() { * }); * ``` * + * # Response interceptors (DEPRECATED) + * + * Before you start creating interceptors, be sure to understand the + * {@link ng.$q $q and deferred/promise APIs}. + * + * For purposes of global error handling, authentication or any kind of synchronous or + * asynchronous preprocessing of received responses, it is desirable to be able to intercept + * responses for http requests before they are handed over to the application code that + * initiated these requests. The response interceptors leverage the {@link ng.$q + * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. + * + * The interceptors are service factories that are registered with the $httpProvider by + * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and + * injected with dependencies (if specified) and returns the interceptor — a function that + * takes a {@link ng.$q promise} and returns the original or a new promise. + * + * ```js + * // register the interceptor as a service + * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { + * return function(promise) { + * return promise.then(function(response) { + * // do something on success + * return response; + * }, function(response) { + * // do something on error + * if (canRecover(response)) { + * return responseOrNewPromise + * } + * return $q.reject(response); + * }); + * } + * }); + * + * $httpProvider.responseInterceptors.push('myHttpInterceptor'); + * + * + * // register the interceptor via an anonymous factory + * $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) { + * return function(promise) { + * // same as above + * } + * }); + * ``` + * + * * # Security Considerations * * When designing web applications, consider security threats from: @@ -7926,7 +7904,7 @@ function $HttpProvider() { * caching. * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the + * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the * XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5 * for more information. * - **responseType** - `{string}` - see @@ -7964,11 +7942,11 @@ function $HttpProvider() {
http status code: {{status}}
@@ -8320,7 +8298,7 @@ function $HttpProvider() { } else { // serving from cache if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]); + resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]); } else { resolvePromise(cachedResp, 200, {}, 'OK'); } @@ -8609,7 +8587,7 @@ var $interpolateMinErr = minErr('$interpolate'); /** * @ngdoc provider * @name $interpolateProvider - * @kind function + * @function * * @description * @@ -8627,7 +8605,7 @@ var $interpolateMinErr = minErr('$interpolate'); }); - customInterpolationApp.controller('DemoController', function() { + customInterpolationApp.controller('DemoController', function DemoController() { this.label = "This binding is brought you by // interpolation symbols."; }); @@ -8685,18 +8663,12 @@ function $InterpolateProvider() { this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length, - escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'), - escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g'); - - function escape(ch) { - return '\\\\\\' + ch; - } + endSymbolLength = endSymbol.length; /** * @ngdoc service * @name $interpolate - * @kind function + * @function * * @requires $parse * @requires $sce @@ -8715,62 +8687,6 @@ function $InterpolateProvider() { * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); * ``` * - * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is - * `true`, the interpolation function will return `undefined` unless all embedded expressions - * evaluate to a value other than `undefined`. - * - * ```js - * var $interpolate = ...; // injected - * var context = {greeting: 'Hello', name: undefined }; - * - * // default "forgiving" mode - * var exp = $interpolate('{{greeting}} {{name}}!'); - * expect(exp(context)).toEqual('Hello !'); - * - * // "allOrNothing" mode - * exp = $interpolate('{{greeting}} {{name}}!', false, null, true); - * expect(exp(context, true)).toBeUndefined(); - * context.name = 'Angular'; - * expect(exp(context, true)).toEqual('Hello Angular!'); - * ``` - * - * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior. - * - * ####Escaped Interpolation - * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers - * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash). - * It will be rendered as a regular start/end marker, and will not be interpreted as an expression - * or binding. - * - * This enables web-servers to prevent script injection attacks and defacing attacks, to some - * degree, while also enabling code examples to work without relying on the - * {@link ng.directive:ngNonBindable ngNonBindable} directive. - * - * **For security purposes, it is strongly encouraged that web servers escape user-supplied data, - * replacing angle brackets (<, >) with &lt; and &gt; respectively, and replacing all - * interpolation start/end markers with their escaped counterparts.** - * - * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered - * output when the $interpolate service processes the text. So, for HTML elements interpolated - * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter - * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such, - * this is typically useful only when user-data is used in rendering a template from the server, or - * when otherwise untrusted data is used by a directive. - * - * - * - *
- *

{{apptitle}}: \{\{ username = "defaced value"; \}\} - *

- *

{{username}} attempts to inject code which will deface the - * application, but fails to accomplish their task, because the server has correctly - * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash) - * characters.

- *

Instead, the result of the attempted script injection is visible, and can be removed - * from the database by an administrator.

- *
- *
- *
* * @param {string} text The text with markup to interpolate. * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have @@ -8780,56 +8696,43 @@ function $InterpolateProvider() { * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that * provides Strict Contextual Escaping for details. - * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined - * unless all embedded expressions evaluate to a value other than `undefined`. * @returns {function(context)} an interpolation function which is used to compute the * interpolated string. The function has these parameters: * - * - `context`: evaluation context for all expressions embedded in the interpolated text + * * `context`: an object against which any expressions embedded in the strings are evaluated + * against. + * */ - function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) { - allOrNothing = !!allOrNothing; + function $interpolate(text, mustHaveExpression, trustedContext) { var startIndex, endIndex, index = 0, - separators = [], - expressions = [], - parseFns = [], - textLength = text.length, + parts = [], + length = text.length, hasInterpolation = false, - hasText = false, + fn, exp, - concat = [], - lastValuesCache = { values: {}, results: {}}; + concat = []; - while(index < textLength) { + while(index < length) { if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { - if (index !== startIndex) hasText = true; - separators.push(text.substring(index, startIndex)); - exp = text.substring(startIndex + startSymbolLength, endIndex); - expressions.push(exp); - parseFns.push($parse(exp)); + (index != startIndex) && parts.push(text.substring(index, startIndex)); + parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); + fn.exp = exp; index = endIndex + endSymbolLength; hasInterpolation = true; } else { - // we did not find an interpolation, so we have to add the remainder to the separators array - if (index !== textLength) { - hasText = true; - separators.push(text.substring(index)); - } - break; + // we did not find anything, so we have to add the remainder to the parts array + (index != length) && parts.push(text.substring(index)); + index = length; } } - forEach(separators, function(key, i) { - separators[i] = separators[i]. - replace(escapedStartRegexp, startSymbol). - replace(escapedEndRegexp, endSymbol); - }); - - if (separators.length === expressions.length) { - separators.push(''); + if (!(length = parts.length)) { + // we added, nothing, must have been an empty string. + parts.push(''); + length = 1; } // Concatenating expressions makes it hard to reason about whether some combination of @@ -8838,113 +8741,44 @@ function $InterpolateProvider() { // that's used is assigned or constructed by some JS code somewhere that is more testable or // make it obvious that you bound the value to some user controlled value. This helps reduce // the load when auditing for XSS issues. - if (trustedContext && hasInterpolation && (hasText || expressions.length > 1)) { + if (trustedContext && parts.length > 1) { throw $interpolateMinErr('noconcat', "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + "interpolations that concatenate multiple expressions when a trusted value is " + "required. See http://docs.angularjs.org/api/ng.$sce", text); } - if (!mustHaveExpression || hasInterpolation) { - concat.length = separators.length + expressions.length; - - var compute = function(values) { - for(var i = 0, ii = expressions.length; i < ii; i++) { - concat[2*i] = separators[i]; - concat[(2*i)+1] = values[i]; - } - concat[2*ii] = separators[ii]; - return concat.join(''); - }; - - var getValue = function (value) { - if (trustedContext) { - value = $sce.getTrusted(trustedContext, value); - } else { - value = $sce.valueOf(value); - } - - return value; - }; - - var stringify = function (value) { - if (value == null) { // null || undefined - return ''; - } - switch (typeof value) { - case 'string': { - break; - } - case 'number': { - value = '' + value; - break; - } - default: { - value = toJson(value); - } - } - - return value; - }; - - return extend(function interpolationFn(context) { - var scopeId = (context && context.$id) || 'notAScope'; - var lastValues = lastValuesCache.values[scopeId]; - var lastResult = lastValuesCache.results[scopeId]; - var i = 0; - var ii = expressions.length; - var values = new Array(ii); - var val; - var inputsChanged = lastResult === undefined ? true: false; - - - // if we haven't seen this context before, initialize the cache and try to setup - // a cleanup routine that purges the cache when the scope goes away. - if (!lastValues) { - lastValues = []; - inputsChanged = true; - if (context && context.$on) { - context.$on('$destroy', function() { - lastValuesCache.values[scopeId] = null; - lastValuesCache.results[scopeId] = null; - }); - } - } - - - try { - interpolationFn.$$unwatch = true; - for (; i < ii; i++) { - val = getValue(parseFns[i](context)); - if (allOrNothing && isUndefined(val)) { - interpolationFn.$$unwatch = undefined; - return; + if (!mustHaveExpression || hasInterpolation) { + concat.length = length; + fn = function(context) { + try { + for(var i = 0, ii = length, part; i 1; i++) { @@ -10961,6 +10814,18 @@ function setter(obj, path, setValue, fullExp) { obj[key] = propertyObj; } obj = propertyObj; + if (obj.then && options.unwrapPromises) { + promiseWarning(fullExp); + if (!("$$v" in obj)) { + (function(promise) { + promise.then(function(val) { promise.$$v = val; }); } + )(obj); + } + if (obj.$$v === undefined) { + obj.$$v = {}; + } + obj = obj.$$v; + } } key = ensureSafeMemberName(element.shift(), fullExp); obj[key] = setValue; @@ -10974,45 +10839,116 @@ var getterFnCache = {}; * - http://jsperf.com/angularjs-parse-getter/4 * - http://jsperf.com/path-evaluation-simplified/7 */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp) { +function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { ensureSafeMemberName(key0, fullExp); ensureSafeMemberName(key1, fullExp); ensureSafeMemberName(key2, fullExp); ensureSafeMemberName(key3, fullExp); ensureSafeMemberName(key4, fullExp); - return function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; + return !options.unwrapPromises + ? function cspSafeGetter(scope, locals) { + var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - if (pathVal == null) return pathVal; - pathVal = pathVal[key0]; + if (pathVal == null) return pathVal; + pathVal = pathVal[key0]; - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; + if (!key1) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key1]; - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; + if (!key2) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key2]; - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; + if (!key3) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key3]; - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; + if (!key4) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key4]; - return pathVal; - }; -} + return pathVal; + } + : function cspSafePromiseEnabledGetter(scope, locals) { + var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, + promise; + + if (pathVal == null) return pathVal; + + pathVal = pathVal[key0]; + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = val; }); + } + pathVal = pathVal.$$v; + } -function simpleGetterFn1(key0, fullExp) { - ensureSafeMemberName(key0, fullExp); + if (!key1) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key1]; + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = val; }); + } + pathVal = pathVal.$$v; + } - return function simpleGetterFn1(scope, locals) { - if (scope == null) return undefined; - return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; + if (!key2) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key2]; + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = val; }); + } + pathVal = pathVal.$$v; + } + + if (!key3) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key3]; + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = val; }); + } + pathVal = pathVal.$$v; + } + + if (!key4) return pathVal; + if (pathVal == null) return undefined; + pathVal = pathVal[key4]; + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = val; }); + } + pathVal = pathVal.$$v; + } + return pathVal; + }; +} + +function simpleGetterFn1(key0, fullExp) { + ensureSafeMemberName(key0, fullExp); + + return function simpleGetterFn1(scope, locals) { + if (scope == null) return undefined; + return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; }; } @@ -11041,19 +10977,20 @@ function getterFn(path, options, fullExp) { // When we have only 1 or 2 tokens, use optimized special case closures. // http://jsperf.com/angularjs-parse-getter/6 - if (pathKeysLength === 1) { + if (!options.unwrapPromises && pathKeysLength === 1) { fn = simpleGetterFn1(pathKeys[0], fullExp); - } else if (pathKeysLength === 2) { + } else if (!options.unwrapPromises && pathKeysLength === 2) { fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp); } else if (options.csp) { if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp); + fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, + options); } else { fn = function(scope, locals) { var i = 0, val; do { val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp)(scope, locals); + pathKeys[i++], fullExp, options)(scope, locals); locals = undefined; // clear after first iteration scope = val; @@ -11070,15 +11007,28 @@ function getterFn(path, options, fullExp) { // we simply dereference 's' on any .dot notation ? 's' // but if we are first then we check locals first, and if so read it first - : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n'; + : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n' + + (options.unwrapPromises + ? 'if (s && s.then) {\n' + + ' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' + + ' if (!("$$v" in s)) {\n' + + ' p=s;\n' + + ' p.$$v = undefined;\n' + + ' p.then(function(v) {p.$$v=v;});\n' + + '}\n' + + ' s=s.$$v\n' + + '}\n' + : ''); }); code += 'return s;'; /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'k', code); // s=scope, k=locals + var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning /* jshint +W054 */ evaledFnGetter.toString = valueFn(code); - fn = evaledFnGetter; + fn = options.unwrapPromises ? function(scope, locals) { + return evaledFnGetter(scope, locals, promiseWarning); + } : evaledFnGetter; } // Only cache the value if it's not going to mess up the cache object @@ -11135,7 +11085,7 @@ function getterFn(path, options, fullExp) { /** * @ngdoc provider * @name $parseProvider - * @kind function + * @function * * @description * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} @@ -11145,34 +11095,116 @@ function $ParseProvider() { var cache = {}; var $parseOptions = { - csp: false + csp: false, + unwrapPromises: false, + logPromiseWarnings: true + }; + + + /** + * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. + * + * @ngdoc method + * @name $parseProvider#unwrapPromises + * @description + * + * **This feature is deprecated, see deprecation notes below for more info** + * + * If set to true (default is false), $parse will unwrap promises automatically when a promise is + * found at any part of the expression. In other words, if set to true, the expression will always + * result in a non-promise value. + * + * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled, + * the fulfillment value is used in place of the promise while evaluating the expression. + * + * **Deprecation notice** + * + * This is a feature that didn't prove to be wildly useful or popular, primarily because of the + * dichotomy between data access in templates (accessed as raw values) and controller code + * (accessed as promises). + * + * In most code we ended up resolving promises manually in controllers anyway and thus unifying + * the model access there. + * + * Other downsides of automatic promise unwrapping: + * + * - when building components it's often desirable to receive the raw promises + * - adds complexity and slows down expression evaluation + * - makes expression code pre-generation unattractive due to the amount of code that needs to be + * generated + * - makes IDE auto-completion and tool support hard + * + * **Warning Logs** + * + * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a + * promise (to reduce the noise, each expression is logged only once). To disable this logging use + * `$parseProvider.logPromiseWarnings(false)` api. + * + * + * @param {boolean=} value New value. + * @returns {boolean|self} Returns the current setting when used as getter and self if used as + * setter. + */ + this.unwrapPromises = function(value) { + if (isDefined(value)) { + $parseOptions.unwrapPromises = !!value; + return this; + } else { + return $parseOptions.unwrapPromises; + } + }; + + + /** + * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. + * + * @ngdoc method + * @name $parseProvider#logPromiseWarnings + * @description + * + * Controls whether Angular should log a warning on any encounter of a promise in an expression. + * + * The default is set to `true`. + * + * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well. + * + * @param {boolean=} value New value. + * @returns {boolean|self} Returns the current setting when used as getter and self if used as + * setter. + */ + this.logPromiseWarnings = function(value) { + if (isDefined(value)) { + $parseOptions.logPromiseWarnings = value; + return this; + } else { + return $parseOptions.logPromiseWarnings; + } }; - this.$get = ['$filter', '$sniffer', function($filter, $sniffer) { + this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) { $parseOptions.csp = $sniffer.csp; + promiseWarning = function promiseWarningFn(fullExp) { + if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return; + promiseWarningCache[fullExp] = true; + $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' + + 'Automatic unwrapping of promises in Angular expressions is deprecated.'); + }; + return function(exp) { - var parsedExpression, - oneTime; + var parsedExpression; switch (typeof exp) { case 'string': - exp = trim(exp); - - if (exp.charAt(0) === ':' && exp.charAt(1) === ':') { - oneTime = true; - exp = exp.substring(2); - } - if (cache.hasOwnProperty(exp)) { - return oneTime ? oneTimeWrapper(cache[exp]) : cache[exp]; + return cache[exp]; } var lexer = new Lexer($parseOptions); var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp); + parsedExpression = parser.parse(exp, false); if (exp !== 'hasOwnProperty') { // Only cache the value if it's not going to mess up the cache object @@ -11180,11 +11212,7 @@ function $ParseProvider() { cache[exp] = parsedExpression; } - if (parsedExpression.constant) { - parsedExpression.$$unwatch = true; - } - - return oneTime ? oneTimeWrapper(parsedExpression) : parsedExpression; + return parsedExpression; case 'function': return exp; @@ -11192,31 +11220,6 @@ function $ParseProvider() { default: return noop; } - - function oneTimeWrapper(expression) { - var stable = false, - lastValue; - oneTimeParseFn.literal = expression.literal; - oneTimeParseFn.constant = expression.constant; - oneTimeParseFn.assign = expression.assign; - return oneTimeParseFn; - - function oneTimeParseFn(self, locals) { - if (!stable) { - lastValue = expression(self, locals); - oneTimeParseFn.$$unwatch = isDefined(lastValue); - if (oneTimeParseFn.$$unwatch && self && self.$$postDigestQueue) { - self.$$postDigestQueue.push(function () { - // create a copy if the value is defined and it is not a $sce value - if ((stable = isDefined(lastValue)) && !lastValue.$$unwrapTrustedValue) { - lastValue = copy(lastValue, null); - } - }); - } - } - return lastValue; - } - } }; }]; } @@ -11412,7 +11415,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#defer - * @kind function + * @function * * @description * Creates a `Deferred` object which represents a task which will finish in the future. @@ -11569,7 +11572,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#reject - * @kind function + * @function * * @description * Creates a promise that is resolved as rejected with the specified `reason`. This api should be @@ -11629,7 +11632,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#when - * @kind function + * @function * * @description * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. @@ -11701,7 +11704,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#all - * @kind function + * @function * * @description * Combines multiple promises into a single promise that is resolved when all of the input @@ -11792,7 +11795,7 @@ function $$RAFProvider(){ //rAF * * Loop operations are optimized by using while(count--) { ... } * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (unshift) instead of at the end (push) + * items to the array at the beginning (shift) instead of at the end (push) * * Child scopes are created and removed often * - Using an array would be slow since inserts in middle are expensive so we use linked list @@ -11926,7 +11929,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$new - * @kind function + * @function * * @description * Creates a new child {@link ng.$rootScope.Scope scope}. @@ -11958,23 +11961,18 @@ function $RootScopeProvider(){ child.$$asyncQueue = this.$$asyncQueue; child.$$postDigestQueue = this.$$postDigestQueue; } else { - // Only create a child scope class if somebody asks for one, - // but cache it to allow the VM to optimize lookups. - if (!this.$$childScopeClass) { - this.$$childScopeClass = function() { - this.$$watchers = this.$$nextSibling = - this.$$childHead = this.$$childTail = null; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$id = nextUid(); - this.$$childScopeClass = null; - }; - this.$$childScopeClass.prototype = this; - } - child = new this.$$childScopeClass(); + ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges + // the name it does not become random set of chars. This will then show up as class + // name in the web inspector. + ChildScope.prototype = this; + child = new ChildScope(); + child.$id = nextUid(); } child['this'] = child; + child.$$listeners = {}; + child.$$listenerCount = {}; child.$parent = this; + child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null; child.$$prevSibling = this.$$childTail; if (this.$$childHead) { this.$$childTail.$$nextSibling = child; @@ -11988,7 +11986,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$watch - * @kind function + * @function * * @description * Registers a `listener` callback to be executed whenever the `watchExpression` changes. @@ -12000,14 +11998,10 @@ function $RootScopeProvider(){ * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) * - The `listener` is called only when the value from the current `watchExpression` and the * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). Inequality is determined according to reference inequality, - * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) - * via the `!==` Javascript operator, unless `objectEquality == true` - * (see next point) - * - When `objectEquality == true`, inequality of the `watchExpression` is determined - * according to the {@link angular.equals} function. To save the value of the object for - * later comparison, the {@link angular.copy} function is used. This therefore means that - * watching complex objects will have adverse memory and performance implications. + * see below). The inequality is determined according to + * {@link angular.equals} function. To save the value of the object for later comparison, + * the {@link angular.copy} function is used. It also means that watching complex options + * will have adverse memory and performance implications. * - The watch `listener` may change the model, which may trigger other `listener`s to fire. * This is achieved by rerunning the watchers until no changes are detected. The rerun * iteration limit is 10 to prevent an infinite loop deadlock. @@ -12042,16 +12036,12 @@ function $RootScopeProvider(){ expect(scope.counter).toEqual(0); scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); + // no variable change + expect(scope.counter).toEqual(0); scope.name = 'adam'; scope.$digest(); - expect(scope.counter).toEqual(2); + expect(scope.counter).toEqual(1); @@ -12123,6 +12113,14 @@ function $RootScopeProvider(){ watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);}; } + if (typeof watchExp == 'string' && get.constant) { + var originalFn = watcher.fn; + watcher.fn = function(newVal, oldVal, scope) { + originalFn.call(this, newVal, oldVal, scope); + arrayRemove(array, watcher); + }; + } + if (!array) { array = scope.$$watchers = []; } @@ -12130,82 +12128,17 @@ function $RootScopeProvider(){ // the while loop reads in reverse order. array.unshift(watcher); - return function deregisterWatch() { + return function() { arrayRemove(array, watcher); lastDirtyWatch = null; }; }, - /** - * @ngdoc method - * @name $rootScope.Scope#$watchGroup - * @kind function - * - * @description - * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`. - * If any one expression in the collection changes the `listener` is executed. - * - * - The items in the `watchCollection` array are observed via standard $watch operation and are examined on every - * call to $digest() to see if any items changes. - * - The `listener` is called whenever any expression in the `watchExpressions` array changes. - * - * @param {Array.} watchExpressions Array of expressions that will be individually - * watched using {@link ng.$rootScope.Scope#$watch $watch()} - * - * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any - * expression in `watchExpressions` changes - * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * The `scope` refers to the current scope. - * - * @returns {function()} Returns a de-registration function for all listeners. - */ - $watchGroup: function(watchExpressions, listener) { - var oldValues = new Array(watchExpressions.length); - var newValues = new Array(watchExpressions.length); - var deregisterFns = []; - var changeCount = 0; - var self = this; - var unwatchFlags = new Array(watchExpressions.length); - var unwatchCount = watchExpressions.length; - - forEach(watchExpressions, function (expr, i) { - var exprFn = $parse(expr); - deregisterFns.push(self.$watch(exprFn, function (value, oldValue) { - newValues[i] = value; - oldValues[i] = oldValue; - changeCount++; - if (unwatchFlags[i] && !exprFn.$$unwatch) unwatchCount++; - if (!unwatchFlags[i] && exprFn.$$unwatch) unwatchCount--; - unwatchFlags[i] = exprFn.$$unwatch; - })); - }, this); - - deregisterFns.push(self.$watch(watchGroupFn, function () { - listener(newValues, oldValues, self); - if (unwatchCount === 0) { - watchGroupFn.$$unwatch = true; - } else { - watchGroupFn.$$unwatch = false; - } - })); - - return function deregisterWatchGroup() { - forEach(deregisterFns, function (fn) { - fn(); - }); - }; - - function watchGroupFn() {return changeCount;} - }, - /** * @ngdoc method * @name $rootScope.Scope#$watchCollection - * @kind function + * @function * * @description * Shallow watches the properties of an object and fires whenever any of the properties change @@ -12343,7 +12276,6 @@ function $RootScopeProvider(){ } } } - $watchCollectionWatch.$$unwatch = objGetter.$$unwatch; return changeDetected; } @@ -12382,7 +12314,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$digest - * @kind function + * @function * * @description * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and @@ -12396,7 +12328,7 @@ function $RootScopeProvider(){ * {@link ng.directive:ngController controllers} or in * {@link ng.$compileProvider#directive directives}. * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`. + * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`. * * If you want to be notified whenever `$digest()` is called, * you can register a `watchExpression` function with @@ -12417,16 +12349,12 @@ function $RootScopeProvider(){ expect(scope.counter).toEqual(0); scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); + // no variable change + expect(scope.counter).toEqual(0); scope.name = 'adam'; scope.$digest(); - expect(scope.counter).toEqual(2); + expect(scope.counter).toEqual(1); * ``` * */ @@ -12439,7 +12367,6 @@ function $RootScopeProvider(){ dirty, ttl = TTL, next, current, target = this, watchLog = [], - stableWatchesCandidates = [], logIdx, logMsg, asyncTask; beginPhase('$digest'); @@ -12479,7 +12406,7 @@ function $RootScopeProvider(){ && isNaN(value) && isNaN(last)))) { dirty = true; lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value, null) : value; + watch.last = watch.eq ? copy(value) : value; watch.fn(value, ((last === initWatchVal) ? value : last), current); if (ttl < 5) { logIdx = 4 - ttl; @@ -12490,7 +12417,6 @@ function $RootScopeProvider(){ logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last); watchLog[logIdx].push(logMsg); } - if (watch.get.$$unwatch) stableWatchesCandidates.push({watch: watch, array: watchers}); } else if (watch === lastDirtyWatch) { // If the most recently dirty watcher is now clean, short circuit since the remaining watchers // have already been tested. @@ -12537,13 +12463,6 @@ function $RootScopeProvider(){ $exceptionHandler(e); } } - - for (length = stableWatchesCandidates.length - 1; length >= 0; --length) { - var candidate = stableWatchesCandidates[length]; - if (candidate.watch.get.$$unwatch) { - arrayRemove(candidate.array, candidate.watch); - } - } }, @@ -12562,7 +12481,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$destroy - * @kind function + * @function * * @description * Removes the current scope (and all of its children) from the parent scope. Removal implies @@ -12617,13 +12536,13 @@ function $RootScopeProvider(){ // prevent NPEs since these methods have references to properties we nulled out this.$destroy = this.$digest = this.$apply = noop; - this.$on = this.$watch = this.$watchGroup = function() { return noop; }; + this.$on = this.$watch = function() { return noop; }; }, /** * @ngdoc method * @name $rootScope.Scope#$eval - * @kind function + * @function * * @description * Executes the `expression` on the current scope and returns the result. Any exceptions in @@ -12655,7 +12574,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$evalAsync - * @kind function + * @function * * @description * Executes the expression on the current scope at a later point in time. @@ -12702,7 +12621,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$apply - * @kind function + * @function * * @description * `$apply()` is used to execute an expression in angular from outside of the angular @@ -12764,7 +12683,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$on - * @kind function + * @function * * @description * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for @@ -12775,8 +12694,7 @@ function $RootScopeProvider(){ * * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the - * event propagates through the scope hierarchy, this property is set to null. + * - `currentScope` - `{Scope}`: the current scope which is handling the event. * - `name` - `{string}`: name of the event. * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel * further event propagation (available only for events that were `$emit`-ed). @@ -12814,7 +12732,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$emit - * @kind function + * @function * * @description * Dispatches an event `name` upwards through the scope hierarchy notifying the @@ -12870,16 +12788,11 @@ function $RootScopeProvider(){ } } //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) { - event.currentScope = null; - return event; - } + if (stopPropagation) return event; //traverse upwards scope = scope.$parent; } while (scope); - event.currentScope = null; - return event; }, @@ -12887,7 +12800,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$broadcast - * @kind function + * @function * * @description * Dispatches an event `name` downwards to all child scopes (and their children) notifying the @@ -12952,7 +12865,6 @@ function $RootScopeProvider(){ } } - event.currentScope = null; return event; } }; @@ -13136,7 +13048,7 @@ function adjustMatchers(matchers) { /** * @ngdoc service * @name $sceDelegate - * @kind function + * @function * * @description * @@ -13208,7 +13120,7 @@ function $SceDelegateProvider() { /** * @ngdoc method * @name $sceDelegateProvider#resourceUrlWhitelist - * @kind function + * @function * * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value * provided. This must be an array or null. A snapshot of this array is used so further @@ -13237,7 +13149,7 @@ function $SceDelegateProvider() { /** * @ngdoc method * @name $sceDelegateProvider#resourceUrlBlacklist - * @kind function + * @function * * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value * provided. This must be an array or null. A snapshot of this array is used so further @@ -13464,7 +13376,7 @@ function $SceDelegateProvider() { /** * @ngdoc service * @name $sce - * @kind function + * @function * * @description * @@ -13563,7 +13475,7 @@ function $SceDelegateProvider() { * won't work on all browsers. Also, loading templates from `file://` URL does not work on some * browsers. * - * ## This feels like too much overhead + * ## This feels like too much overhead for the developer? * * It's important to remember that SCE only applies to interpolation expressions. * @@ -13590,7 +13502,7 @@ function $SceDelegateProvider() { * * | Context | Notes | * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | + * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | @@ -13614,7 +13526,7 @@ function $SceDelegateProvider() { * - `**`: matches zero or more occurrences of *any* character. As such, it's not * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) Its usage at the very end of the path is ok. (e.g. + * not have been the intention.) It's usage at the very end of the path is ok. (e.g. * http://foo.example.com/templates/**). * - **RegExp** (*see caveat below*) * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax @@ -13735,7 +13647,7 @@ function $SceProvider() { /** * @ngdoc method * @name $sceProvider#enabled - * @kind function + * @function * * @param {boolean=} value If provided, then enables/disables SCE. * @return {boolean} true if SCE is enabled, false otherwise. @@ -13808,12 +13720,12 @@ function $SceProvider() { 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); } - var sce = shallowCopy(SCE_CONTEXTS); + var sce = copy(SCE_CONTEXTS); /** * @ngdoc method * @name $sce#isEnabled - * @kind function + * @function * * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. @@ -13858,9 +13770,7 @@ function $SceProvider() { return parsed; } else { return function sceParseAsTrusted(self, locals) { - var result = sce.getTrusted(type, parsed(self, locals)); - sceParseAsTrusted.$$unwatch = parsed.$$unwatch; - return result; + return sce.getTrusted(type, parsed(self, locals)); }; } }; @@ -14350,7 +14260,7 @@ var originUrl = urlResolve(window.location.href, true); * https://github.com/angular/angular.js/pull/2902 * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ * - * @kind function + * @function * @param {string} url The URL to be parsed. * @description Normalizes and parses a URL. * @returns {object} Returns the normalized URL as a dictionary. @@ -14514,7 +14424,7 @@ function $WindowProvider(){ /** * @ngdoc service * @name $filter - * @kind function + * @function * @description * Filters are used for formatting data displayed to the user. * @@ -14524,24 +14434,7 @@ function $WindowProvider(){ * * @param {String} name Name of the filter function to retrieve * @return {Function} the filter function - * @example - - -
-

{{ originalText }}

-

{{ filteredText }}

-
-
- - - angular.module('filterExample', []) - .controller('MainCtrl', function($scope, $filter) { - $scope.originalText = 'hello'; - $scope.filteredText = $filter('uppercase')($scope.originalText); - }); - -
- */ + */ $FilterProvider.$inject = ['$provide']; function $FilterProvider($provide) { var suffix = 'Filter'; @@ -14601,7 +14494,7 @@ function $FilterProvider($provide) { /** * @ngdoc filter * @name filter - * @kind function + * @function * * @description * Selects a subset of items from `array` and returns it as a new array. @@ -14633,15 +14526,15 @@ function $FilterProvider($provide) { * * Can be one of: * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if the item should be included in filtered result. + * - `function(actual, expected)`: + * The function will be given the object value and the predicate value to compare and + * should return true if the item should be included in filtered result. * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. - * this is essentially strict comparison of expected and actual. + * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. + * this is essentially strict comparison of expected and actual. * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. + * - `false|undefined`: A short hand for a function which will look for a substring match in case + * insensitive way. * * @example @@ -14820,7 +14713,7 @@ function filterFilter() { /** * @ngdoc filter * @name currency - * @kind function + * @function * * @description * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default @@ -14877,7 +14770,7 @@ function currencyFilter($locale) { /** * @ngdoc filter * @name number - * @kind function + * @function * * @description * Formats a number as text. @@ -14962,8 +14855,8 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); } - var pow = Math.pow(10, fractionSize + 1); - number = Math.floor(number * pow + 5) / pow; + var pow = Math.pow(10, fractionSize); + number = Math.round(number * pow) / pow; var fraction = ('' + number).split(DECIMAL_SEP); var whole = fraction[0]; fraction = fraction[1] || ''; @@ -15117,7 +15010,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d /** * @ngdoc filter * @name date - * @kind function + * @function * * @description * Formats `date` to a string based on the requested `format`. @@ -15155,7 +15048,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale * (e.g. Sep 3, 2010 12:05:08 pm) * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale + * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale * (e.g. Friday, September 3, 2010) * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) @@ -15276,7 +15169,7 @@ function dateFilter($locale) { /** * @ngdoc filter * @name json - * @kind function + * @function * * @description * Allows you to convert a JavaScript object into JSON string. @@ -15311,7 +15204,7 @@ function jsonFilter() { /** * @ngdoc filter * @name lowercase - * @kind function + * @function * @description * Converts string to lowercase. * @see angular.lowercase @@ -15322,7 +15215,7 @@ var lowercaseFilter = valueFn(lowercase); /** * @ngdoc filter * @name uppercase - * @kind function + * @function * @description * Converts string to uppercase. * @see angular.uppercase @@ -15332,7 +15225,7 @@ var uppercaseFilter = valueFn(uppercase); /** * @ngdoc filter * @name limitTo - * @kind function + * @function * * @description * Creates a new array or string containing only a specified number of elements. The elements @@ -15445,12 +15338,10 @@ function limitToFilter(){ /** * @ngdoc filter * @name orderBy - * @kind function + * @function * * @description - * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically - * for strings and numerically for numbers. Note: if you notice numbers are not being sorted - * correctly, make sure they are actually being saved as numbers and not strings. + * Orders a specified `array` by the `expression` predicate. * * @param {Array} array The array to sort. * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be @@ -15503,51 +15394,6 @@ function limitToFilter(){ - * - * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the - * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the - * desired parameters. - * - * Example: - * - * @example - - -
- - - - - - - - - - - -
Name - (^)Phone NumberAge
{{friend.name}}{{friend.phone}}{{friend.age}}
-
-
- - - function Ctrl($scope, $filter) { - var orderBy = $filter('orderBy'); - $scope.friends = [ - { name: 'John', phone: '555-1212', age: 10 }, - { name: 'Mary', phone: '555-9876', age: 19 }, - { name: 'Mike', phone: '555-4321', age: 21 }, - { name: 'Adam', phone: '555-5678', age: 35 }, - { name: 'Julie', phone: '555-8765', age: 29 } - ]; - - $scope.order = function(predicate, reverse) { - $scope.friends = orderBy($scope.friends, predicate, reverse); - }; - $scope.order('-age',false); - } - -
*/ orderByFilter.$inject = ['$parse']; function orderByFilter($parse){ @@ -16026,29 +15872,6 @@ forEach(BOOLEAN_ATTR, function(propName, attrName) { }; }); -// aliased input attrs are evaluated -forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) { - ngAttributeAliasDirectives[ngAttr] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - //special case ngPattern when a literal regular expression value - //is used as the expression (this way we don't have to watch anything). - if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") { - var match = attr.ngPattern.match(REGEX_STRING_REGEXP); - if (match) { - attr.$set("ngPattern", new RegExp(match[1], match[2])); - return; - } - } - - scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) { - attr.$set(ngAttr, value); - }); - } - }; - }; -}); // ng-src, ng-srcset, ng-href are interpolated forEach(['src', 'srcset', 'href'], function(attrName) { @@ -16122,7 +15945,7 @@ var nullFormCtrl = { * - `url` * * @description - * `FormController` keeps track of all its controls and nested forms as well as the state of them, + * `FormController` keeps track of all its controls and nested forms as well as state of them, * such as being valid/invalid or dirty/pristine. * * Each {@link ng.directive:form form} directive creates an instance @@ -16158,23 +15981,6 @@ function FormController(element, attrs, $scope, $animate) { $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); } - /** - * @ngdoc method - * @name form.FormController#$commitViewValue - * - * @description - * Commit all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - form.$commitViewValue = function() { - forEach(controls, function(control) { - control.$commitViewValue(); - }); - }; - /** * @ngdoc method * @name form.FormController#$addControl @@ -16387,10 +16193,6 @@ function FormController(element, attrs, $scope, $animate) { * hitting enter in any of the input fields will trigger the click handler on the *first* button or * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) * - * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is - * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * * @param {string=} name Name of the form. If specified, the form controller will be published into * related scope, under this name. * @@ -16486,23 +16288,19 @@ var formDirectiveFactory = function(isNgForm) { // IE 9 is not affected because it doesn't fire a submit event and try to do a full // page reload if the form was destroyed by submission of the form via a click handler // on a button in the form. Looks like an IE9 specific bug. - var handleFormSubmission = function(event) { - scope.$apply(function() { - controller.$commitViewValue(); - }); - + var preventDefaultListener = function(event) { event.preventDefault ? event.preventDefault() : event.returnValue = false; // IE }; - addEventListenerFn(formElement[0], 'submit', handleFormSubmission); + addEventListenerFn(formElement[0], 'submit', preventDefaultListener); // unregister the preventDefault listener so that we don't not leak memory but in a // way that will achieve the prevention of the default action. formElement.on('$destroy', function() { $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', handleFormSubmission); + removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); }, 0, false); }); } @@ -16539,9 +16337,7 @@ var ngFormDirective = formDirectiveFactory(true); -VALID_CLASS, -INVALID_CLASS, -PRISTINE_CLASS, - -DIRTY_CLASS, - -UNTOUCHED_CLASS, - -TOUCHED_CLASS + -DIRTY_CLASS */ var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; @@ -16552,7 +16348,7 @@ var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)$/; var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/; var MONTH_REGEXP = /^(\d{4})-(\d\d)$/; var TIME_REGEXP = /^(\d\d):(\d\d)$/; -var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; +var DEFAULT_REGEXP = /(\b|^)default(\b|$)/; var inputType = { @@ -17416,7 +17212,6 @@ function addNativeHtml5Validators(ctrl, validatorName, element) { function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { var validity = element.prop('validity'); - var placeholder = element[0].placeholder, noevent = {}; // In composition mode, users are still inputing intermediate text buffer, // hold the listener until composition is done. @@ -17439,15 +17234,6 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { var value = element.val(), event = ev && ev.type; - // IE (11 and under) seem to emit an 'input' event if the placeholder value changes. - // We don't want to dirty the value when this happens, so we abort here. Unfortunately, - // IE also sends input events for other non-input-related things, (such as focusing on a - // form control), so this change is not entirely enough to solve this. - if (msie && (ev || noevent).type === 'input' && element[0].placeholder !== placeholder) { - placeholder = element[0].placeholder; - return; - } - // By default we will trim the value // If the attribute ng-trim exists we will avoid trimming // e.g. @@ -17470,69 +17256,82 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { } }; - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; + // Allow adding/overriding bound events + if (ctrl.$options && ctrl.$options.updateOn) { + // bind to user-defined events + element.on(ctrl.$options.updateOn, listener); + } - var deferListener = function(ev) { - if (!timeout) { - timeout = $browser.defer(function() { - listener(ev); - timeout = null; - }); - } - }; + // setup default events if requested + if (!ctrl.$options || ctrl.$options.updateOnDefault) { + // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the + // input event on backspace, delete or cut + if ($sniffer.hasEvent('input')) { + element.on('input', listener); + } else { + var timeout; - element.on('keydown', function(event) { - var key = event.keyCode; + var deferListener = function(ev) { + if (!timeout) { + timeout = $browser.defer(function() { + listener(ev); + timeout = null; + }); + } + }; - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; + element.on('keydown', function(event) { + var key = event.keyCode; - deferListener(event); - }); + // ignore + // command modifiers arrows + if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); + deferListener(event); + }); + + // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it + if ($sniffer.hasEvent('paste')) { + element.on('paste cut', deferListener); + } } - } - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); + // if user paste into input using mouse on older browser + // or form autocomplete on newer browser, we need "change" event to catch it + element.on('change', listener); + } ctrl.$render = function() { element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); }; // pattern validator - if (attr.ngPattern) { - var regexp, patternExp = attr.ngPattern; - attr.$observe('pattern', function(regex) { - if(isString(regex)) { - var match = regex.match(REGEX_STRING_REGEXP); - if(match) { - regex = new RegExp(match[1], match[2]); - } - } - - if (regex && !regex.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp, - regex, startingTag(element)); - } - - regexp = regex || undefined; - }); + var pattern = attr.ngPattern, + patternValidator, + match; - var patternValidator = function(value) { - return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value), value); + if (pattern) { + var validateRegex = function(regexp, value) { + return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); }; + match = pattern.match(/^\/(.*)\/([gim]*)$/); + if (match) { + pattern = new RegExp(match[1], match[2]); + patternValidator = function(value) { + return validateRegex(pattern, value); + }; + } else { + patternValidator = function(value) { + var patternObj = scope.$eval(pattern); + + if (!patternObj || !patternObj.test) { + throw minErr('ngPattern')('noregexp', + 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, + patternObj, startingTag(element)); + } + return validateRegex(patternObj, value); + }; + } ctrl.$formatters.push(patternValidator); ctrl.$parsers.push(patternValidator); @@ -17744,7 +17543,15 @@ function radioInputType(scope, element, attr, ctrl) { } }; - element.on('click', listener); + // Allow adding/overriding bound events + if (ctrl.$options && ctrl.$options.updateOn) { + // bind to user-defined events + element.on(ctrl.$options.updateOn, listener); + } + + if (!ctrl.$options || ctrl.$options.updateOnDefault) { + element.on('click', listener); + } ctrl.$render = function() { var value = attr.value; @@ -17767,7 +17574,15 @@ function checkboxInputType(scope, element, attr, ctrl) { }); }; - element.on('click', listener); + // Allow adding/overriding bound events + if (ctrl.$options && ctrl.$options.updateOn) { + // bind to user-defined events + element.on(ctrl.$options.updateOn, listener); + } + + if (!ctrl.$options || ctrl.$options.updateOnDefault) { + element.on('click', listener); + } ctrl.$render = function() { element[0].checked = ctrl.$viewValue; @@ -17813,7 +17628,6 @@ function checkboxInputType(scope, element, attr, ctrl) { * patterns defined as scope expressions. * @param {string=} ngChange Angular expression to be executed when input changes due to user * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. */ @@ -17943,9 +17757,7 @@ var inputDirective = ['$browser', '$sniffer', '$filter', function($browser, $sni var VALID_CLASS = 'ng-valid', INVALID_CLASS = 'ng-invalid', PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty', - UNTOUCHED_CLASS = 'ng-untouched', - TOUCHED_CLASS = 'ng-touched'; + DIRTY_CLASS = 'ng-dirty'; /** * @ngdoc type @@ -17965,14 +17777,14 @@ var VALID_CLASS = 'ng-valid', * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever the model value changes. Each function is called, in turn, passing the value through to the next. Used to format / convert values for display in the control and validation. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` + * ```js + * function formatter(value) { + * if (value) { + * return value.toUpperCase(); + * } + * } + * ngModel.$formatters.push(formatter); + * ``` * * @property {Array.} $viewChangeListeners Array of functions to execute whenever the * view value has changed. It is called with no arguments, and its return value is ignored. @@ -17980,8 +17792,6 @@ var VALID_CLASS = 'ng-valid', * * @property {Object} $error An object hash with all errors as keys. * - * @property {boolean} $untouched True if control has not lost focus yet. - * @property {boolean} $touched True if control has lost focus. * @property {boolean} $pristine True if user has not interacted with the control yet. * @property {boolean} $dirty True if user has already interacted with the control. * @property {boolean} $valid True if there is no error. @@ -18003,12 +17813,7 @@ var VALID_CLASS = 'ng-valid', * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element * contents be edited in place by the user. This will not work on older browsers. * - * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} - * module to automatically remove "bad" content like inline event listener (e.g. ``). - * However, as we are using `$sce` the model can still decide to to provide unsafe content if it marks - * that content using the `$sce` service. - * - * + * [contenteditable] { border: 1px solid black; @@ -18022,8 +17827,8 @@ var VALID_CLASS = 'ng-valid', - angular.module('customControl', ['ngSanitize']). - directive('contenteditable', ['$sce', function($sce) { + angular.module('customControl', []). + directive('contenteditable', function() { return { restrict: 'A', // only activate on element attribute require: '?ngModel', // get a hold of NgModelController @@ -18032,7 +17837,7 @@ var VALID_CLASS = 'ng-valid', // Specify how UI should be updated ngModel.$render = function() { - element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); + element.html(ngModel.$viewValue || ''); }; // Listen for change events to enable binding @@ -18053,7 +17858,7 @@ var VALID_CLASS = 'ng-valid', } } }; - }]); + });
@@ -18095,8 +17900,6 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ this.$parsers = []; this.$formatters = []; this.$viewChangeListeners = []; - this.$untouched = true; - this.$touched = false; this.$pristine = true; this.$dirty = false; this.$valid = true; @@ -18151,9 +17954,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ // Setup initial state of the control - $element - .addClass(PRISTINE_CLASS) - .addClass(UNTOUCHED_CLASS); + $element.addClass(PRISTINE_CLASS); toggleValidCss(true); // convenience method for easy toggling of classes @@ -18225,54 +18026,22 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ /** * @ngdoc method - * @name ngModel.NgModelController#$setUntouched + * @name ngModel.NgModelController#$cancelUpdate * * @description - * Sets the control to its untouched state. - * - * This method can be called to remove the 'ng-touched' class and set the control to its - * untouched state (ng-untouched class). - */ - this.$setUntouched = function() { - ctrl.$touched = false; - ctrl.$untouched = true; - $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setTouched - * - * @description - * Sets the control to its touched state. - * - * This method can be called to remove the 'ng-untouched' class and set the control to its - * touched state (ng-touched class). - */ - this.$setTouched = function() { - ctrl.$touched = true; - ctrl.$untouched = false; - $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$rollbackViewValue - * - * @description - * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`, + * Cancel an update and reset the input element's value to prevent an update to the `$viewValue`, * which may be caused by a pending debounced event or because the input is waiting for a some * future event. * * If you have an input that uses `ng-model-options` to set up debounced events or events such - * as blur you can have a situation where there is a period when the `$viewValue` - * is out of synch with the ngModel's `$modelValue`. + * as blur you can have a situation where there is a period when the value of the input element + * is out of synch with the ngModel's `$viewValue`. * * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue` * programmatically before these debounced/future events have resolved/occurred, because Angular's * dirty checking mechanism is not able to tell whether the model has actually changed or not. * - * The `$rollbackViewValue()` method should be called before programmatically changing the model of an + * The `$cancelUpdate()` method should be called before programmatically changing the model of an * input which may have such events pending. This is important in order to make sure that the * input field will be updated with the new model value and any pending operations are cancelled. * @@ -18283,7 +18052,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * .controller('CancelUpdateCtrl', function($scope) { * $scope.resetWithCancel = function (e) { * if (e.keyCode == 27) { - * $scope.myForm.myInput1.$rollbackViewValue(); + * $scope.myForm.myInput1.$cancelUpdate(); * $scope.myValue = ''; * } * }; @@ -18302,11 +18071,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ *

Now see what happens if you start typing then press the Escape key

* * - *

With $rollbackViewValue()

+ *

With $cancelUpdate()

*
* myValue: "{{ myValue }}" * - *

Without $rollbackViewValue()

+ *

Without $cancelUpdate()

*
* myValue: "{{ myValue }}" *
@@ -18314,30 +18083,14 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ *
*
*/ - this.$rollbackViewValue = function() { + this.$cancelUpdate = function() { $timeout.cancel(pendingDebounce); - ctrl.$viewValue = ctrl.$$lastCommittedViewValue; ctrl.$render(); }; - /** - * @ngdoc method - * @name ngModel.NgModelController#$commitViewValue - * - * @description - * Commit a pending update to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. this method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - this.$commitViewValue = function() { - var value = ctrl.$viewValue; - $timeout.cancel(pendingDebounce); - if (ctrl.$$lastCommittedViewValue === value) { - return; - } - ctrl.$$lastCommittedViewValue = value; + // update the view value + this.$$realSetViewValue = function(value) { + ctrl.$viewValue = value; // change to dirty if (ctrl.$pristine) { @@ -18382,9 +18135,6 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. * - * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn` - * and the `default` trigger is not listed, all those actions will remain pending until one of the - * `updateOn` events is triggered on the DOM element. * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions} * directive is used with a custom debounce for this particular event. * @@ -18394,35 +18144,17 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * @param {string} trigger Event that triggered the update. */ this.$setViewValue = function(value, trigger) { - ctrl.$viewValue = value; - if (!ctrl.$options || ctrl.$options.updateOnDefault) { - ctrl.$$debounceViewValueCommit(trigger); - } - }; - - this.$$debounceViewValueCommit = function(trigger) { - var debounceDelay = 0, - options = ctrl.$options, - debounce; - - if(options && isDefined(options.debounce)) { - debounce = options.debounce; - if(isNumber(debounce)) { - debounceDelay = debounce; - } else if(isNumber(debounce[trigger])) { - debounceDelay = debounce[trigger]; - } else if (isNumber(debounce['default'])) { - debounceDelay = debounce['default']; - } - } + var debounceDelay = ctrl.$options && (isObject(ctrl.$options.debounce) + ? (ctrl.$options.debounce[trigger] || ctrl.$options.debounce['default'] || 0) + : ctrl.$options.debounce) || 0; $timeout.cancel(pendingDebounce); if (debounceDelay) { pendingDebounce = $timeout(function() { - ctrl.$commitViewValue(); + ctrl.$$realSetViewValue(value); }, debounceDelay); } else { - ctrl.$commitViewValue(); + ctrl.$$realSetViewValue(value); } }; @@ -18442,7 +18174,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ } if (ctrl.$viewValue !== value) { - ctrl.$viewValue = ctrl.$$lastCommittedViewValue = value; + ctrl.$viewValue = value; ctrl.$render(); } } @@ -18563,40 +18295,22 @@ var ngModelDirective = function() { return { require: ['ngModel', '^?form', '^?ngModelOptions'], controller: NgModelController, - link: { - pre: function(scope, element, attr, ctrls) { - // Pass the ng-model-options to the ng-model controller - if (ctrls[2]) { - ctrls[0].$options = ctrls[2].$options; - } - - // notify others, especially parent forms - - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; + link: function(scope, element, attr, ctrls) { + // notify others, especially parent forms - formCtrl.$addControl(modelCtrl); + var modelCtrl = ctrls[0], + formCtrl = ctrls[1] || nullFormCtrl; - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - }, - post: function(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0]; - if (modelCtrl.$options && modelCtrl.$options.updateOn) { - element.on(modelCtrl.$options.updateOn, function(ev) { - scope.$apply(function() { - modelCtrl.$$debounceViewValueCommit(ev && ev.type); - }); - }); - } + formCtrl.$addControl(modelCtrl); - element.on('blur', function(ev) { - scope.$apply(function() { - modelCtrl.$setTouched(); - }); - }); + // Pass the ng-model-options to the ng-model controller + if ( ctrls[2] ) { + modelCtrl.$options = ctrls[2].$options; } + + scope.$on('$destroy', function() { + formCtrl.$removeControl(modelCtrl); + }); } }; }; @@ -18873,19 +18587,15 @@ var ngValueDirective = function() { * takes place when a timer expires; this timer will be reset after another change takes place. * * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might - * be different than the value in the actual model. This means that if you update the model you - * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in + * be different then the value in the actual model. This means that if you update the model you + * should also invoke {@link ngModel.NgModelController `$cancelUpdate`} on the relevant input field in * order to make sure it is synchronized with the model and that any debounced action is canceled. * - * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`} + * The easiest way to reference the control's {@link ngModel.NgModelController `$cancelUpdate`} * method is by making sure the input is placed inside a form that has a `name` attribute. This is * important because `form` controllers are published to the related scope under the name in their * `name` attribute. * - * Any pending changes will take place immediately when an enclosing form is submitted via the - * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * * @param {Object} ngModelOptions options to apply to the current model. Valid keys are: * - `updateOn`: string specifying which event should be the input bound to. You can set several * events using an space delimited list. There is a special event called `default` that @@ -18923,7 +18633,7 @@ var ngValueDirective = function() { $scope.cancel = function (e) { if (e.keyCode == 27) { - $scope.userForm.userName.$rollbackViewValue(); + $scope.userForm.userName.$cancelUpdate(); } }; } @@ -18935,13 +18645,12 @@ var ngValueDirective = function() { it('should allow custom events', function() { input.sendKeys(' hello'); - input.click(); expect(model.getText()).toEqual('say'); other.click(); expect(model.getText()).toEqual('say hello'); }); - it('should $rollbackViewValue when model changes', function() { + it('should $cancelUpdate when model changes', function() { input.sendKeys(' hello'); expect(input.getAttribute('value')).toEqual('say hello'); input.sendKeys(protractor.Key.ESCAPE); @@ -18963,7 +18672,7 @@ var ngValueDirective = function() { -
+
user.name = 
@@ -18981,13 +18690,13 @@ var ngModelOptionsDirective = function() { var that = this; this.$options = $scope.$eval($attrs.ngModelOptions); // Allow adding/overriding bound events - if (this.$options.updateOn !== undefined) { + if (this.$options.updateOn) { this.$options.updateOnDefault = false; // extract "default" pseudo-event from list of events that can trigger a model update - this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() { + this.$options.updateOn = this.$options.updateOn.replace(DEFAULT_REGEXP, function() { that.$options.updateOnDefault = true; return ' '; - })); + }); } else { this.$options.updateOnDefault = true; } @@ -19169,11 +18878,7 @@ var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { element.addClass('ng-binding').data('$binding', attr.ngBindHtml); var parsed = $parse(attr.ngBindHtml); - function getStringValue() { - var value = parsed(scope); - getStringValue.$$unwatch = parsed.$$unwatch; - return (value || '').toString(); - } + function getStringValue() { return (parsed(scope) || '').toString(); } scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { element.html($sce.getTrustedHtml(parsed(scope)) || ''); @@ -19200,7 +18905,7 @@ function classDirective(name, selector) { scope.$watch('$index', function($index, old$index) { // jshint bitwise: false var mod = $index & 1; - if (mod !== (old$index & 1)) { + if (mod !== old$index & 1) { var classes = arrayClasses(scope.$eval(attr[name])); mod === selector ? addClasses(classes) : @@ -19259,7 +18964,7 @@ function classDirective(name, selector) { updateClasses(oldClasses, newClasses); } } - oldVal = shallowCopy(newVal); + oldVal = copy(newVal); } } }; @@ -19287,7 +18992,7 @@ function classDirective(name, selector) { var classes = [], i = 0; forEach(classVal, function(v, k) { if (v) { - classes = classes.concat(k.split(' ')); + classes.push(k); } }); return classes; @@ -19612,7 +19317,7 @@ var ngCloakDirective = ngDirective({ * * MVC components in angular: * - * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties + * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties * are accessed through bindings. * * View — The template (HTML with data bindings) that is rendered into the View. * * Controller — The `ngController` directive specifies a Controller class; the class contains business @@ -19633,186 +19338,165 @@ var ngCloakDirective = ngDirective({ * @example * Here is a simple form for editing user contact information. Adding, removing, clearing, and * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Any changes to the data are automatically reflected - * in the View without the need for a manual update. - * - * Two different declaration styles are included below: - * - * * one binds methods and properties directly onto the controller using `this`: - * `ng-controller="SettingsController1 as settings"` - * * one injects `$scope` into the controller: - * `ng-controller="SettingsController2"` - * - * The second option is more common in the Angular community, and is generally used in boilerplates - * and in this guide. However, there are advantages to binding properties directly to the controller - * and avoiding scope. - * - * * Using `controller as` makes it obvious which controller you are accessing in the template when - * multiple controllers apply to an element. - * * If you are writing your controllers as classes you have easier access to the properties and - * methods, which will appear on the scope, from inside the controller code. - * * Since there is always a `.` in the bindings, you don't have to worry about prototypal - * inheritance masking primitives. - * - * This example demonstrates the `controller as` syntax. - * - * - * - *
- * Name: - * [ greet ]
- * Contact: - *
    - *
  • - * - * - * [ clear - * | X ] - *
  • - *
  • [ add ]
  • - *
- *
- * - * - * function SettingsController1() { - * this.name = "John Smith"; - * this.contacts = [ - * {type: 'phone', value: '408 555 1212'}, - * {type: 'email', value: 'john.smith@example.org'} ]; - * } - * - * SettingsController1.prototype.greet = function() { - * alert(this.name); - * }; - * - * SettingsController1.prototype.addContact = function() { - * this.contacts.push({type: 'email', value: 'yourname@example.org'}); - * }; - * - * SettingsController1.prototype.removeContact = function(contactToRemove) { - * var index = this.contacts.indexOf(contactToRemove); - * this.contacts.splice(index, 1); - * }; - * - * SettingsController1.prototype.clearContact = function(contact) { - * contact.type = 'phone'; - * contact.value = ''; - * }; - * - * - * it('should check controller as', function() { - * var container = element(by.id('ctrl-as-exmpl')); - * expect(container.findElement(by.model('settings.name')) - * .getAttribute('value')).toBe('John Smith'); - * - * var firstRepeat = - * container.findElement(by.repeater('contact in settings.contacts').row(0)); - * var secondRepeat = - * container.findElement(by.repeater('contact in settings.contacts').row(1)); - * - * expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - * .toBe('408 555 1212'); - * - * expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - * .toBe('john.smith@example.org'); - * - * firstRepeat.findElement(by.linkText('clear')).click(); - * - * expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - * .toBe(''); - * - * container.findElement(by.linkText('add')).click(); - * - * expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) - * .findElement(by.model('contact.value')) - * .getAttribute('value')) - * .toBe('yourname@example.org'); - * }); - * - * - * - * This example demonstrates the "attach to `$scope`" style of controller. - * - * - * - *
- * Name: - * [ greet ]
- * Contact: - *
    - *
  • - * - * - * [ clear - * | X ] - *
  • - *
  • [ add ]
  • - *
- *
- *
- * - * function SettingsController2($scope) { - * $scope.name = "John Smith"; - * $scope.contacts = [ - * {type:'phone', value:'408 555 1212'}, - * {type:'email', value:'john.smith@example.org'} ]; - * - * $scope.greet = function() { - * alert($scope.name); - * }; - * - * $scope.addContact = function() { - * $scope.contacts.push({type:'email', value:'yourname@example.org'}); - * }; - * - * $scope.removeContact = function(contactToRemove) { - * var index = $scope.contacts.indexOf(contactToRemove); - * $scope.contacts.splice(index, 1); - * }; - * - * $scope.clearContact = function(contact) { - * contact.type = 'phone'; - * contact.value = ''; - * }; - * } - * - * - * it('should check controller', function() { - * var container = element(by.id('ctrl-exmpl')); - * - * expect(container.findElement(by.model('name')) - * .getAttribute('value')).toBe('John Smith'); - * - * var firstRepeat = - * container.findElement(by.repeater('contact in contacts').row(0)); - * var secondRepeat = - * container.findElement(by.repeater('contact in contacts').row(1)); - * - * expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - * .toBe('408 555 1212'); - * expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - * .toBe('john.smith@example.org'); - * - * firstRepeat.findElement(by.linkText('clear')).click(); - * - * expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - * .toBe(''); - * - * container.findElement(by.linkText('add')).click(); - * - * expect(container.findElement(by.repeater('contact in contacts').row(2)) - * .findElement(by.model('contact.value')) - * .getAttribute('value')) - * .toBe('yourname@example.org'); - * }); - * - *
+ * easily be called from the angular markup. Notice that the scope becomes the `this` for the + * controller's instance. This allows for easy access to the view data from the controller. Also + * notice that any changes to the data are automatically reflected in the View without the need + * for a manual update. The example is shown in two different declaration styles you may use + * according to preference. + + + +
+ Name: + [ greet ]
+ Contact: +
    +
  • + + + [ clear + | X ] +
  • +
  • [ add ]
  • +
+
+
+ + it('should check controller as', function() { + var container = element(by.id('ctrl-as-exmpl')); + + expect(container.findElement(by.model('settings.name')) + .getAttribute('value')).toBe('John Smith'); + + var firstRepeat = + container.findElement(by.repeater('contact in settings.contacts').row(0)); + var secondRepeat = + container.findElement(by.repeater('contact in settings.contacts').row(1)); + + expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) + .toBe('408 555 1212'); + expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) + .toBe('john.smith@example.org'); + + firstRepeat.findElement(by.linkText('clear')).click(); + + expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) + .toBe(''); + + container.findElement(by.linkText('add')).click(); + + expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) + .findElement(by.model('contact.value')) + .getAttribute('value')) + .toBe('yourname@example.org'); + }); + +
+ + + +
+ Name: + [ greet ]
+ Contact: +
    +
  • + + + [ clear + | X ] +
  • +
  • [ add ]
  • +
+
+
+ + it('should check controller', function() { + var container = element(by.id('ctrl-exmpl')); + + expect(container.findElement(by.model('name')) + .getAttribute('value')).toBe('John Smith'); + + var firstRepeat = + container.findElement(by.repeater('contact in contacts').row(0)); + var secondRepeat = + container.findElement(by.repeater('contact in contacts').row(1)); + + expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) + .toBe('408 555 1212'); + expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) + .toBe('john.smith@example.org'); + + firstRepeat.findElement(by.linkText('clear')).click(); + + expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) + .toBe(''); + + container.findElement(by.linkText('add')).click(); + + expect(container.findElement(by.repeater('contact in contacts').row(2)) + .findElement(by.model('contact.value')) + .getAttribute('value')) + .toBe('yourname@example.org'); + }); + +
*/ var ngControllerDirective = [function() { @@ -20127,13 +19811,8 @@ forEach( * @example -

Typing in the input box below updates the key count

- key up count: {{count}} - -

Typing in the input box below updates the keycode

- -

event keyCode: {{ event.keyCode }}

-

event altKey: {{ event.altKey }}

+ + key up count: {{count}}
*/ @@ -20400,12 +20079,12 @@ var ngIfDirective = ['$animate', function($animate) { if (toBoolean(value)) { if (!childScope) { - $transclude(function (clone, newScope) { - childScope = newScope; + childScope = $scope.$new(); + $transclude(childScope, function (clone) { clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); // Note: We only need the first/last node of the cloned nodes. // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when its template arrives. + // by a directive with templateUrl when it's template arrives. block = { clone: clone }; @@ -20593,16 +20272,6 @@ var ngIfDirective = ['$animate', function($animate) { * @description * Emitted every time the ngInclude content is reloaded. */ - - -/** - * @ngdoc event - * @name ng.directive:ngInclude#$includeContentError - * @eventOf ng.directive:ngInclude - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299) - */ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce', function($http, $templateCache, $anchorScroll, $animate, $sce) { return { @@ -20671,10 +20340,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate' currentScope.$emit('$includeContentLoaded'); scope.$eval(onloadExp); }).error(function() { - if (thisChangeId === changeCounter) { - cleanupLastIncludeContent(); - scope.$emit('$includeContentError'); - } + if (thisChangeId === changeCounter) cleanupLastIncludeContent(); }); scope.$emit('$includeContentRequested'); } else { @@ -21009,7 +20675,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise, //check it against pluralization rules in $locale service if (!(value in whens)) value = $locale.pluralCat(value - offset); - return whensExpFns[value](scope); + return whensExpFns[value](scope, element, true); } else { return ''; } @@ -21117,7 +20783,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, * before specifying a tracking expression. * - * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements + * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements * will be associated by item identity in the array. * * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique @@ -21284,6 +20950,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { // lastBlockMap on the next iteration. nextBlockMap = {}, arrayLength, + childScope, key, value, // key/value of iteration trackById, trackByIdFn, @@ -21292,17 +20959,6 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { nextBlockOrder = [], elementsToRemove; - var updateScope = function(scope, index) { - scope[valueIdentifier] = value; - if (keyIdentifier) scope[keyIdentifier] = key; - scope.$index = index; - scope.$first = (index === 0); - scope.$last = (index === (arrayLength - 1)); - scope.$middle = !(scope.$first || scope.$last); - // jshint bitwise: false - scope.$odd = !(scope.$even = (index&1) === 0); - // jshint bitwise: true - }; if (isArrayLike(collection)) { collectionKeys = collection; @@ -21311,9 +20967,9 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { trackByIdFn = trackByIdExpFn || trackByIdObjFn; // if object, extract keys, sort them and use to determine order of iteration over obj props collectionKeys = []; - for (var itemKey in collection) { - if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') { - collectionKeys.push(itemKey); + for (key in collection) { + if (collection.hasOwnProperty(key) && key.charAt(0) != '$') { + collectionKeys.push(key); } } collectionKeys.sort(); @@ -21349,10 +21005,10 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { } // remove existing items - for (var blockKey in lastBlockMap) { + for (key in lastBlockMap) { // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn - if (lastBlockMap.hasOwnProperty(blockKey)) { - block = lastBlockMap[blockKey]; + if (lastBlockMap.hasOwnProperty(key)) { + block = lastBlockMap[key]; elementsToRemove = getBlockElements(block.clone); $animate.leave(elementsToRemove); forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; }); @@ -21370,6 +21026,8 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { if (block.scope) { // if we have already seen this object, then we need to reuse the // associated scope/element + childScope = block.scope; + nextNode = previousNode; do { nextNode = nextNode.nextSibling; @@ -21380,20 +21038,32 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { $animate.move(getBlockElements(block.clone), null, jqLite(previousNode)); } previousNode = getBlockEnd(block); - updateScope(block.scope, index); } else { // new item which we don't know about - $transclude(function(clone, scope) { - block.scope = scope; + childScope = $scope.$new(); + } + + childScope[valueIdentifier] = value; + if (keyIdentifier) childScope[keyIdentifier] = key; + childScope.$index = index; + childScope.$first = (index === 0); + childScope.$last = (index === (arrayLength - 1)); + childScope.$middle = !(childScope.$first || childScope.$last); + // jshint bitwise: false + childScope.$odd = !(childScope.$even = (index&1) === 0); + // jshint bitwise: true + + if (!block.scope) { + $transclude(childScope, function(clone) { clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' '); $animate.enter(clone, null, jqLite(previousNode)); previousNode = clone; + block.scope = childScope; // Note: We only need the first/last node of the cloned nodes. // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when its template arrives. + // by a directive with templateUrl when it's template arrives. block.clone = clone; nextBlockMap[block.id] = block; - updateScope(block.scope, index); }); } } @@ -21434,11 +21104,6 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * on the element causing it to become hidden. When true, the ng-hide CSS class is removed * from the element causing the element not to appear hidden. * - *
- * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):
- * "f" / "0" / "false" / "no" / "n" / "[]" - *
- * * ## Why is !important used? * * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector @@ -21452,21 +21117,26 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * * ### Overriding .ng-hide * - * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change - * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` - * class in CSS: - * + * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by + * restating the styles for the .ng-hide class in CSS: * ```css * .ng-hide { - * /* this is just another form of hiding an element */ + * /* Not to worry, this will override the AngularJS default... * display:block!important; + * + * /* this is just another form of hiding an element */ * position:absolute; * top:-9999px; * left:-9999px; * } * ``` * - * By default you don't need to override in CSS anything and the animations will work around the display style. + * Just remember to include the important flag so the CSS override will function. + * + *
+ * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):
+ * "f" / "0" / "false" / "no" / "n" / "[]" + *
* * ## A note about animations with ngShow * @@ -21483,6 +21153,9 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * /* this is required as of 1.3x to properly * apply all styling in a show/hide animation */ * transition:0s linear all; + * + * /* this must be set as block so the animation is visible */ + * display:block!important; * } * * .my-element.ng-hide-add-active, @@ -21497,9 +21170,6 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * .my-element.ng-hide-remove.ng-hide-remove-active { ... } * ``` * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display - * property to block during animation states--ngAnimate will handle the style toggling automatically for you. - * * @animations * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden @@ -21537,6 +21207,11 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { background:white; } + .animate-show.ng-hide-add, + .animate-show.ng-hide-remove { + display:block!important; + } + .animate-show.ng-hide-add.ng-hide-add-active, .animate-show.ng-hide-remove.ng-hide-remove-active { -webkit-transition:all linear 0.5s; @@ -21593,21 +21268,16 @@ var ngShowDirective = ['$animate', function($animate) { * * ```html * - *
+ *
* * - *
+ *
* ``` * * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute * on the element causing it to become hidden. When false, the ng-hide CSS class is removed * from the element causing the element not to appear hidden. * - *
- * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):
- * "f" / "0" / "false" / "no" / "n" / "[]" - *
- * * ## Why is !important used? * * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector @@ -21621,27 +21291,33 @@ var ngShowDirective = ['$animate', function($animate) { * * ### Overriding .ng-hide * - * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change - * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` - * class in CSS: - * + * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by + * restating the styles for the .ng-hide class in CSS: * ```css * .ng-hide { - * /* this is just another form of hiding an element */ + * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... * display:block!important; + * + * //this is just another form of hiding an element * position:absolute; * top:-9999px; * left:-9999px; * } * ``` * - * By default you don't need to override in CSS anything and the animations will work around the display style. + * Just remember to include the important flag so the CSS override will function. + * + *
+ * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):
+ * "f" / "0" / "false" / "no" / "n" / "[]" + *
* * ## A note about animations with ngHide * * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide` - * CSS class is added and removed for you instead of your own CSS class. + * is true and false. This system works like the animation system present with ngClass, except that + * you must also include the !important flag to override the display property so + * that you can perform an animation when the element is hidden during the time of the animation. * * ```css * // @@ -21649,6 +21325,7 @@ var ngShowDirective = ['$animate', function($animate) { * // * .my-element.ng-hide-add, .my-element.ng-hide-remove { * transition:0.5s linear all; + * display:block!important; * } * * .my-element.ng-hide-add { ... } @@ -21657,9 +21334,6 @@ var ngShowDirective = ['$animate', function($animate) { * .my-element.ng-hide-remove.ng-hide-remove-active { ... } * ``` * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display - * property to block during animation states--ngAnimate will handle the style toggling automatically for you. - * * @animations * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible @@ -21699,6 +21373,11 @@ var ngShowDirective = ['$animate', function($animate) { background:white; } + .animate-hide.ng-hide-add, + .animate-hide.ng-hide-remove { + display:block!important; + } + .animate-hide.ng-hide { line-height:0; opacity:0; @@ -21744,20 +21423,14 @@ var ngHideDirective = ['$animate', function($animate) { * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. * * @element ANY - * @param {expression} ngStyle - * - * {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * Since some CSS style names are not valid keys for an object, they must be quoted. - * See the 'background-color' style in the example below. + * @param {expression} ngStyle {@link guide/expression Expression} which evals to an + * object whose keys are CSS style names and values are corresponding values for those CSS + * keys. * * @example - - +
Sample Text @@ -21773,7 +21446,7 @@ var ngHideDirective = ['$animate', function($animate) { it('should check ng-style', function() { expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=\'set color\']')).click(); + element(by.css('input[value=set]')).click(); expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); element(by.css('input[value=clear]')).click(); expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); @@ -21821,14 +21494,11 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM * * @usage - * - * ``` * * ... * ... * ... * - * ``` * * * @scope @@ -21928,29 +21598,37 @@ var ngSwitchDirective = ['$animate', function($animate) { }], link: function(scope, element, attr, ngSwitchController) { var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes = [], - selectedElements = [], - previousElements = [], + selectedTranscludes, + selectedElements, + previousElements, selectedScopes = []; scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii; - for (i = 0, ii = previousElements.length; i < ii; ++i) { - previousElements[i].remove(); - } - previousElements.length = 0; - - for (i = 0, ii = selectedScopes.length; i < ii; ++i) { - var selected = selectedElements[i]; - selectedScopes[i].$destroy(); - previousElements[i] = selected; - $animate.leave(selected, function() { - previousElements.splice(i, 1); - }); + var i, ii = selectedScopes.length; + if(ii > 0) { + if(previousElements) { + for (i = 0; i < ii; i++) { + previousElements[i].remove(); + } + previousElements = null; + } + + previousElements = []; + for (i= 0; i
@@ -22209,37 +21887,37 @@ var ngOptionsMinErr = minErr('ngOptions');
Color (null not allowed): -
+
Color (null allowed): -
Color grouped by shade: -
- Select bogus.
+ Select bogus.

- Currently selected: {{ {selected_color:myColor} }} + Currently selected: {{ {selected_color:color} }}
+ ng-style="{'background-color':color.name}">
it('should check ng-options', function() { - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red'); - element.all(by.select('myColor')).first().click(); - element.all(by.css('select[ng-model="myColor"] option')).first().click(); - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="myColor"]')).click(); - element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click(); - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null'); + expect(element(by.binding('{selected_color:color}')).getText()).toMatch('red'); + element.all(by.select('color')).first().click(); + element.all(by.css('select[ng-model="color"] option')).first().click(); + expect(element(by.binding('{selected_color:color}')).getText()).toMatch('black'); + element(by.css('.nullable select[ng-model="color"]')).click(); + element.all(by.css('.nullable select[ng-model="color"] option')).first().click(); + expect(element(by.binding('{selected_color:color}')).getText()).toMatch('null'); });
@@ -22394,7 +22072,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { // we need to work of an array, so we need to see if anything was inserted/removed scope.$watch(function selectMultipleWatch() { if (!equals(lastView, ctrl.$viewValue)) { - lastView = shallowCopy(ctrl.$viewValue); + lastView = copy(ctrl.$viewValue); ctrl.$render(); } }); @@ -22732,9 +22410,7 @@ var optionDirective = ['$interpolate', function($interpolate) { if (interpolateFn) { scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { attr.$set('value', newVal); - if (oldVal !== newVal) { - selectCtrl.removeOption(oldVal); - } + if (newVal !== oldVal) selectCtrl.removeOption(oldVal); selectCtrl.addOption(newVal); }); } else { @@ -22772,4 +22448,4 @@ var styleDirective = valueFn({ })(window, document); -!window.angular.$$csp() && window.angular.element(document).find('head').prepend(''); \ No newline at end of file +!angular.$$csp() && angular.element(document).find('head').prepend(''); \ No newline at end of file diff --git a/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js new file mode 100644 index 0000000000..cd416d1876 --- /dev/null +++ b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js @@ -0,0 +1,217 @@ +/* + AngularJS v1.3.0-build.2607+sha.b2e48e6 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(O,V,r){'use strict';function B(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.0-build.2607+sha.b2e48e6/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?I(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, +function(a,b){return"<"+I(b)})}catch(d){return I(c)}}function bc(b){try{return decodeURIComponent(b)}catch(a){}}function cc(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=bc(c[0]),A(d)&&(b=A(c[1])?bc(c[1]):!0,a[d]?L(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function dc(b){var a=[];q(b,function(b,d){L(b)?q(b,function(b){a.push(Aa(d,!0)+(!0===b?"":"="+Aa(b,!0)))}):a.push(Aa(d,!0)+(!0===b?"":"="+Aa(b,!0)))});return a.length?a.join("&"):""}function Bb(b){return Aa(b, +!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Aa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function hd(b,a){var c,d,e=ec.length;b=y(b);for(d=0;d")+ +d[2];for(d=d[0];d--;)c=c.lastChild;f=f.concat(sa.call(c.childNodes,void 0));c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";q(f,function(a){e.appendChild(a)});return e}function M(b){if(b instanceof M)return b;v(b)&&(b=ba(b));if(!(this instanceof M)){if(v(b)&&"<"!=b.charAt(0))throw Ib("nosel");return new M(b)}if(v(b)){var a;a=V;var c;b=(c=Ae.exec(b))?[a.createElement(c[1])]:(c=xe(b,a))?c.childNodes:[]}mc(this,b)}function Jb(b){return b.cloneNode(!0)} +function Ia(b){nc(b);var a=0;for(b=b.childNodes||[];a=U?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ja(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c= +b.$$hashKey():c===r&&(c=b.$$hashKey=eb()):c=b;return a+":"+c}function Xa(b){q(b,this.put,this)}function De(b){return(b=b.toString().replace(uc,"").match(vc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Lb(b,a,c){var d;if("function"==typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw v(c)&&c||(c=b.name||De(b)),Ka("strictdi",c);a=b.toString().replace(uc,"");a=a.match(vc);q(a[1].split(Ee),function(a){a.replace(Fe,function(a,b,c){d.push(c)})})}b.$inject=d}}else L(b)?(a=b.length- +1,Sa(b[a],"fn"),d=b.slice(0,a)):Sa(b,"fn",!0);return d}function Cb(b,a){function c(a){return function(b,c){if(T(b))q(b,Wb(a));else return a(b,c)}}function d(a,b){Ba(a,"service");if(P(b)||L(b))b=n.instantiate(b);if(!b.$get)throw Ka("pget",a);return p[a+l]=b}function e(a,b){return d(a,{$get:b})}function f(a){var b=[],c,d,e,h;q(a,function(a){if(!m.get(a)){m.put(a,!0);try{if(v(a))for(c=Ta(a),b=b.concat(f(c.requires)).concat(c._runBlocks),d=c._invokeQueue,e=0,h=d.length;e 4096 bytes)!"));else{if(l.cookie!==da)for(da=l.cookie,d=da.split("; "),Q={},f=0;fk&&this.remove(n.key),b},get:function(a){if(k< +Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k
").parent()[0])});var f=K(a,b,a,c,d,e);ma(a,"ng-scope");return function(b,c,d){Db(b,"scope");var e=c?La.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var g=e.length;darguments.length&&(b=a,a=r);D&&(c=da);return p(a,b, +c)}var u,J,z,G,R,C,da={},ob;u=c===f?d:Zb(d,new Mb(y(f),d.$attr));J=u.$$element;if(Q){var S=/^\s*([@=&])(\??)\s*(\w*)\s*$/;g=y(f);C=e.$new(!0);ia&&ia===Q.$$originalDirective?g.data("$isolateScope",C):g.data("$isolateScopeNoTemplate",C);ma(g,"ng-isolate-scope");q(Q.scope,function(a,c){var d=a.match(S)||[],f=d[3]||c,g="?"==d[2],d=d[1],l,m,p,n;C.$$isolateBindings[c]=d+f;switch(d){case "@":u.$observe(f,function(a){C[c]=a});u.$$observers[f].$$scope=e;u[f]&&(C[c]=b(u[f])(e));break;case "=":if(g&&!u[f])break; +m=s(u[f]);n=m.literal?za:function(a,b){return a===b};p=m.assign||function(){l=C[c]=m(e);throw ja("nonassign",u[f],Q.name);};l=C[c]=m(e);C.$watch(function(){var a=m(e);n(a,C[c])||(n(a,l)?p(e,a=C[c]):C[c]=a);return l=a},null,m.literal);break;case "&":m=s(u[f]);C[c]=function(a){return m(e,a)};break;default:throw ja("iscp",Q.name,c,a);}})}ob=p&&x;K&&q(K,function(a){var b={$scope:a===Q||a.$$isolateScope?C:e,$element:J,$attrs:u,$transclude:ob},c;R=a.controller;"@"==R&&(R=u[a.name]);c=t(R,b);da[a.name]= +c;D||J.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(z=l.length;gF.priority)break;if(W=F.scope)G=G||F,F.templateUrl||(I("new/isolated scope",Q,F,Z),T(W)&&(Q=F));B=F.name;!F.templateUrl&&F.controller&&(W=F.controller,K=K||{},I("'"+B+"' controller",K[B],F,Z),K[B]=F);if(W=F.transclude)E=!0,F.$$tlb||(I("transclusion",S,F,Z),S=F),"element"==W?(D=!0,u=F.priority, +W=C(c,U,X),Z=d.$$element=y(V.createComment(" "+B+": "+d[B]+" ")),c=Z[0],pb(f,y(sa.call(W,0)),c),Ya=z(W,e,u,g&&g.name,{nonTlbTranscludeDirective:S})):(W=y(Jb(c)).contents(),Z.empty(),Ya=z(W,e));if(F.template)if(I("template",ia,F,Z),ia=F,W=P(F.template)?F.template(Z,d):F.template,W=Y(W),F.replace){g=F;W=Hb.test(W)?y(ba(W)):[];c=W[0];if(1!=W.length||1!==c.nodeType)throw ja("tplrt",B,"");pb(f,Z,c);oa={$attr:{}};W=da(c,[],oa);var $=a.splice(M+1,a.length-(M+1));Q&&wc(W);a=a.concat(W).concat($);A(d,oa); +oa=a.length}else Z.html(W);if(F.templateUrl)I("template",ia,F,Z),ia=F,F.replace&&(g=F),N=w(a.splice(M,a.length-M),Z,d,f,Ya,l,n,{controllerDirectives:K,newIsolateScopeDirective:Q,templateDirective:ia,nonTlbTranscludeDirective:S}),oa=a.length;else if(F.compile)try{O=F.compile(Z,d,Ya),P(O)?x(null,O,U,X):O&&x(O.pre,O.post,U,X)}catch(aa){m(aa,ha(Z))}F.terminal&&(N.terminal=!0,u=Math.max(u,F.priority))}N.scope=G&&!0===G.scope;N.transclude=E&&Ya;p.hasElementTranscludeDirective=D;return N}function wc(a){for(var b= +0,c=a.length;bs.priority)&&-1!=s.restrict.indexOf(f)&&(p&&(s=Yb(s,{$$start:p,$$end:n})),b.push(s),k=s)}catch(H){m(H)}}return k}function A(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(ma(e, +b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function w(a,b,c,d,e,f,g,l){var k=[],m,s,t=b[0],x=a.shift(),H=D({},x,{templateUrl:null,transclude:null,replace:null,$$originalDirective:x}),N=P(x.templateUrl)?x.templateUrl(b,c):x.templateUrl;b.empty();p.get(u.getTrustedResourceUrl(N),{cache:n}).success(function(p){var n,u;p=Y(p);if(x.replace){p=Hb.test(p)? +y(ba(p)):[];n=p[0];if(1!=p.length||1!==n.nodeType)throw ja("tplrt",x.name,N);p={$attr:{}};pb(d,b,n);var z=da(n,[],p);T(x.scope)&&wc(z);a=z.concat(a);A(c,p)}else n=t,b.html(p);a.unshift(H);m=ia(a,n,c,e,b,x,f,g,l);q(d,function(a,c){a==n&&(d[c]=b[0])});for(s=K(b[0].childNodes,e);k.length;){p=k.shift();u=k.shift();var G=k.shift(),R=k.shift(),z=b[0];if(u!==t){var C=u.className;l.hasElementTranscludeDirective&&x.replace||(z=Jb(n));pb(G,y(u),z);ma(y(z),C)}u=m.transclude?Q(p,m.transclude):R;m(s,p,z,d,u)}k= +null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){k?(k.push(b),k.push(c),k.push(d),k.push(e)):m(s,b,c,d,e)}}function E(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:p.reject(b)}var d={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},f=function(a){function b(a){var c;q(a,function(b,d){P(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=D({},a.headers),f,g,c=D({},c.common,c[I(a.method)]);b(c);b(d);a:for(f in c){a=I(f);for(g in d)if(I(g)===a)continue a;d[f]=c[f]}return d}(a);D(d,a);d.headers=f;d.method=Ga(d.method);(a=Nb(d.url)?b.cookies()[d.xsrfCookieName|| +e.xsrfCookieName]:r)&&(f[d.xsrfHeaderName||e.xsrfHeaderName]=a);var g=[function(a){f=a.headers;var b=Bc(a.data,Ac(f),a.transformRequest);E(a.data)&&q(f,function(a,b){"content-type"===I(b)&&delete f[b]});E(a.withCredentials)&&!E(e.withCredentials)&&(a.withCredentials=e.withCredentials);return t(a,b,f).then(c,c)},r],h=p.when(d);for(q(u,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift(); +var k=g.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data,b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function t(b,c,f){function g(a,b,c,e){u&&(200<=a&&300>a?u.put(r,[a,b,zc(c),e]):u.remove(r));l(b,a,c,e);d.$$phase||d.$apply()}function l(a,c,d,e){c=Math.max(c,0);(200<=c&&300>c?n.resolve:n.reject)({data:a,status:c,headers:Ac(d),config:b,statusText:e})}function k(){var a=gb(s.pendingRequests, +b);-1!==a&&s.pendingRequests.splice(a,1)}var n=p.defer(),t=n.promise,u,q,r=H(b.url,b.params);s.pendingRequests.push(b);t.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(u=T(b.cache)?b.cache:T(e.cache)?e.cache:x);if(u)if(q=u.get(r),A(q)){if(q.then)return q.then(k,k),q;L(q)?l(q[1],q[0],ca(q[2]),q[3]):l(q,200,{},"OK")}else u.put(r,t);E(q)&&a(b.method,r,c,g,f,b.timeout,b.withCredentials,b.responseType);return t}function H(a,b){if(!b)return a;var c=[];dd(b,function(a,b){null===a||E(a)|| +(L(a)||(a=[a]),q(a,function(a){T(a)&&(a=ta(a));c.push(Aa(b)+"="+Aa(a))}))});0=U&&(!b.match(/^(get|post|head|put|delete|options)$/i)||!O.XMLHttpRequest))return new O.ActiveXObject("Microsoft.XMLHTTP");if(O.XMLHttpRequest)return new O.XMLHttpRequest;throw B("$httpBackend")("noxhr");}function he(){this.$get=["$browser","$window","$document",function(b,a,c){return Je(b,Ie,b.defer,a.angular.callbacks, +c[0])}]}function Je(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),g=null;f.type="text/javascript";f.src=a;f.async=!0;g=function(a){Va(f,"load",g);Va(f,"error",g);e.body.removeChild(f);f=null;var h=-1,t="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),t=a.type,h="error"===a.type?404:200);c&&c(h,t)};qb(f,"load",g);qb(f,"error",g);e.body.appendChild(f);return g}var g=-1;return function(e,l,k,m,p,n,s,t){function H(){u=g;G&&G();z&&z.abort()}function x(a,d,e,f,g){K&&c.cancel(K); +G=z=null;0===d&&(d=e?200:"file"==ua(l).protocol?404:0);a(1223===d?204:d,e,f,g||"");b.$$completeOutstandingRequest(w)}var u;b.$$incOutstandingRequestCount();l=l||b.url();if("jsonp"==I(e)){var N="_"+(d.counter++).toString(36);d[N]=function(a){d[N].data=a;d[N].called=!0};var G=f(l.replace("JSON_CALLBACK","angular.callbacks."+N),N,function(a,b){x(m,a,d[N].data,"",b);d[N]=w})}else{var z=a(e);z.open(e,l,!0);q(p,function(a,b){A(a)&&z.setRequestHeader(b,a)});z.onreadystatechange=function(){if(z&&4==z.readyState){var a= +null,b=null;u!==g&&(a=z.getAllResponseHeaders(),b="response"in z?z.response:z.responseText);x(m,u||z.status,b,a,z.statusText||"")}};s&&(z.withCredentials=!0);if(t)try{z.responseType=t}catch(r){if("json"!==t)throw r;}z.send(k||null)}if(0=h&&(p.resolve(s),m(n.$$intervalId),delete e[n.$$intervalId]);t||b.$apply()},g);e[n.$$intervalId]= +p;return n}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function nd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"}, +DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a", +shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Dc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=Bb(b[a]);return b.join("/")}function Ec(b,a,c){b=ua(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=Y(b.port)||Ke[b.protocol]||null}function Fc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ua(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=cc(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&& +"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function pa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Za(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Ob(b){return b.substr(0,Za(b).lastIndexOf("/")+1)}function Gc(b,a){this.$$html5=!0;a=a||"";var c=Ob(b);Ec(b,this,b);this.$$parse=function(a){var e=pa(c,a);if(!v(e))throw Pb("ipthprfx",a,c);Fc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=dc(this.$$search),b=this.$$hash?"#"+ +Bb(this.$$hash):"";this.$$url=Dc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=pa(b,d))!==r)return d=e,(e=pa(a,e))!==r?c+(pa("/",e)||e):b+d;if((e=pa(c,d))!==r)return c+e;if(c==d+"/")return c}}function Qb(b,a){var c=Ob(b);Ec(b,this,b);this.$$parse=function(d){var e=pa(b,d)||pa(c,d),e="#"==e.charAt(0)?pa(a,e):this.$$html5?e:"";if(!v(e))throw Pb("ihshprfx",d,a);Fc(e,this,b);d=this.$$path;var f=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b, +""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=dc(this.$$search),e=this.$$hash?"#"+Bb(this.$$hash):"";this.$$url=Dc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Za(b)==Za(a))return a}}function Hc(b,a){this.$$html5=!0;Qb.apply(this,arguments);var c=Ob(b);this.$$rewrite=function(d){var e;if(b==Za(d))return d;if(e=pa(c,d))return b+a+e;if(c===d+"/")return c}}function rb(b){return function(){return this[b]}} +function Ic(b,a){return function(c){if(E(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ie(){var b="",a=!1;this.hashPrefix=function(a){return A(a)?(b=a,this):b};this.html5Mode=function(b){return A(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,l=d.baseHref(),k=d.url();a?(l=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(l||"/"),e=e.history?Gc:Hc):(l=Za(k), +e=Qb);h=new e(l,"#"+b);h.$$parse(h.$$rewrite(k));f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=y(a.target);"a"!==I(b[0].nodeName);)if(b[0]===f[0]||!(b=b.parent())[0])return;var e=b.prop("href");T(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ua(e.animVal).href);var g=h.$$rewrite(e);e&&(!b.attr("target")&&g&&!a.isDefaultPrevented())&&(a.preventDefault(),g!=d.url()&&(h.$$parse(g),c.$apply(),O.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(), +!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart",a,b).defaultPrevented?(h.$$parse(b),d.url(b)):g(b)}),c.$$phase||c.$digest())});var m=0;c.$watch(function(){var a=d.url(),b=h.$$replace;m&&a==h.absUrl()||(m++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),g(a))}));h.$$replace=!1;return m});return h}]}function je(){var b=!0,a=this;this.debugEnabled= +function(a){return A(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||w;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"), +warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function fa(b,a){if("constructor"===b)throw Ca("isecfld",a);return b}function $a(b,a){if(b){if(b.constructor===b)throw Ca("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw Ca("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw Ca("isecdom",a);}return b}function sb(b,a,c,d,e){e=e||{};a=a.split(".");for(var f,g=0;1e?Jc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var g=0,h;do h=Jc(d[g++],d[g++],d[g++],d[g++],d[g++],c,a)(b,f),f=r,b=h;while(ga)for(b in k++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(q--,delete e[b])}else e!==d&&(e=d,k++);return k},function(){p?(p= +!1,b(d,d,c)):b(d,g,c);if(h)if(T(d))if(db(d)){g=Array(d.length);for(var a=0;ar&&(y=4-r,Q[y]||(Q[y]=[]),C=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,C+="; newVal: "+ta(f)+"; oldVal: "+ta(g),Q[y].push(C));else if(d===c){z=!1;break a}}catch(v){n.$$phase=null,e(v)}if(!(h=K.$$childHead||K!==this&&K.$$nextSibling))for(;K!==this&&!(h=K.$$nextSibling);)K=K.$parent}while(K=h);if((z||k.length)&&!r--)throw n.$$phase=null,a("infdig",b,ta(Q));}while(z||k.length);for(n.$$phase=null;m.length;)try{m.shift()()}catch(S){e(S)}}, +$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==n&&(q(this.$$listenerCount,hb(null,m,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail= +this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=w,this.$on=this.$watch=function(){return w})}},$eval:function(a,b){return f(a)(this,b)},$evalAsync:function(a){n.$$phase||n.$$asyncQueue.length||g.defer(function(){n.$$asyncQueue.length&&n.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return l("$apply"),this.$eval(a)}catch(b){e(b)}finally{n.$$phase= +null;try{n.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[gb(c,b)]=null;m(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=[h].concat(sa.call(arguments,1)),l,m;do{d= +f.$$listeners[a]||c;h.currentScope=f;l=0;for(m=d.length;lc.msieDocumentMode)throw wa("iequirks");var e= +ca(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Ea);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,h=e.trustAs;q(ga,function(a,b){var c=I(b);e[Ua("parse_as_"+c)]=function(b){return f(a,b)};e[Ua("get_trusted_"+c)]=function(b){return g(a,b)};e[Ua("trust_as_"+c)]=function(b){return h(a,b)}}); +return e}]}function pe(){this.$get=["$window","$document",function(b,a){var c={},d=Y((/android (\d+)/.exec(I((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g=f.documentMode,h,l=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=f.body&&f.body.style,m=!1,p=!1;if(k){for(var n in k)if(m=l.exec(n)){h=m[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");m=!!("transition"in k||h+"Transition"in k);p=!!("animation"in k||h+"Animation"in k); +!d||m&&p||(m=v(f.body.style.webkitTransition),p=v(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!g||7b;b=Math.abs(b);var g=b+"",h="",l=[],k=!1;if(-1!==g.indexOf("e")){var m=g.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?g="0":(h=g,k=!0)}if(k)0b)&&(h=b.toFixed(e));else{g=(g.split(Uc)[1]||"").length;E(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));g=Math.pow(10,e);b=Math.round(b*g)/g;b=(""+b).split(Uc);g=b[0];b=b[1]||"";var m=0,p=a.lgSize,n=a.gSize;if(g.length>=p+n)for(m=g.length- +p,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return tb(e,a,d)}} +function ub(b,a){return function(c,d){var e=c["get"+b](),f=Ga(a?"SHORT"+b:b);return d[f][e]}}function Vc(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Wc(b){return function(a){var c=Vc(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return tb(a,b)}}function Qc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&& +(f=Y(b[9]+b[10]),g=Y(b[9]+b[11]));h.call(a,Y(b[1]),Y(b[2])-1,Y(b[3]));f=Y(b[4]||0)-f;g=Y(b[5]||0)-g;h=Y(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",g=[],h,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;v(c)&&(c=Ue.test(c)?Y(c):a(c));Ab(c)&&(c=new Date(c));if(!ra(c))return c;for(;e;)(l=Ve.exec(e))?(g=g.concat(sa.call(l,1)),e= +g.pop()):(g.push(e),e=null);q(g,function(a){h=We[a];f+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function Qe(){return function(b){return ta(b,!0)}}function Re(){return function(b,a){if(!L(b)&&!v(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):Y(a);if(v(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0b||37<=b&&40>=b)||m(a)});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l)}d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var p=c.ngPattern;p&&((e=p.match(/^\/(.*)\/([gim]*)$/))?(p=RegExp(e[1],e[2]),e=function(a){return qa(d,"pattern",d.$isEmpty(a)||p.test(a),a)}):e=function(c){var e=b.$eval(p);if(!e||!e.test)throw B("ngPattern")("noregexp",p,e,ha(a));return qa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e)); +if(c.ngMinlength){var n=Y(c.ngMinlength);e=function(a){return qa(d,"minlength",d.$isEmpty(a)||a.length>=n,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var s=Y(c.ngMaxlength);e=function(a){return qa(d,"maxlength",d.$isEmpty(a)||a.length<=s,a)};d.$parsers.push(e);d.$formatters.push(e)}}function zb(b,a){return function(c){var d;return ra(c)?c:v(c)&&(b.lastIndex=0,c=b.exec(c))?(c.shift(),d={yyyy:0,MM:1,dd:1,HH:0,mm:0},q(c,function(b,c){c=c(g.min);h.$setValidity("min",b);return b?a:r},h.$parsers.push(e),h.$formatters.push(e));g.max&&(e=function(a){var b=h.$isEmpty(a)||c(a)<=c(g.max); +h.$setValidity("max",b);return b?a:r},h.$parsers.push(e),h.$formatters.push(e))}}function Tb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dU?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ga(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var ec=["ng-","data-ng-","ng:","x-ng-"],jd=/[A-Z]/g,md={full:"1.3.0-build.2607+sha.b2e48e6",major:1,minor:3,dot:0,codeName:"snapshot"},Wa=M.cache={},jb=M.expando="ng-"+(new Date).getTime(),Be=1,qb=O.document.addEventListener? +function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Va=O.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};M._data=function(b){return this.cache[b[this.expando]]||{}};var ve=/([\:\-\_]+(.))/g,we=/^moz([A-Z])/,Ib=B("jqLite"),Ae=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Hb=/<|&#?\w+;/,ye=/<([\w:]+)/,ze=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th=ea.td;var La=M.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===V.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),M(O).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+ +a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:Ye,sort:[].sort,splice:[].splice},nb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){nb[I(b)]=b});var tc={};q("input select option textarea button form details".split(" "),function(b){tc[Ga(b)]=!0});q({data:pc,inheritedData:mb,scope:function(b){return y(b).data("$scope")||mb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y(b).data("$isolateScope")|| +y(b).data("$isolateScopeNoTemplate")},controller:qc,injector:function(b){return mb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Kb,css:function(b,a,c){a=Ua(a);if(A(c))b.style[a]=c;else{var d;8>=U&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=U&&(d=""===d?r:d);return d}},attr:function(b,a,c){var d=I(a);if(nb[d])if(A(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||w).specified? +d:r;else if(A(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?r:b},prop:function(b,a,c){if(A(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(E(d))return e?b[e]:"";b[e]=d}var a=[];9>U?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(E(a)){if("SELECT"===Ma(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value= +a},html:function(b,a){if(E(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},af={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Sb=function(a){this.options=a};Sb.prototype={constructor:Sb, +lex:function(a){this.text=a;this.index=0;this.ch=r;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<= +a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=A(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Ca("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a, +c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(ab.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c= +this,d=this.expect().text,e=Kc(d,this.options,this.text);return D(function(c,d,h){return e(h||a(c,d))},{assign:function(e,g,h){return sb(a(e,h),d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,f){var g=a(e,f),h=d(e,f),l;if(!g)return r;(g=$a(g[h],c.text))&&(g.then&&c.options.unwrapPromises)&&(l=g,"$$v"in g||(l.$$v=r,l.then(function(a){l.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var h=d(e,g);return $a(a(e,g),c.text)[h]= +f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var h=[],l=c?c(f,g):f,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(tb(Math[0=U&&(c.href||c.name||c.$set("href",""),a.append(V.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===ya.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}),Fb={};q(nb,function(a,c){if("multiple"!=a){var d=na("ng-"+c);Fb[d]=function(){return{priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});q(["src","srcset","href"],function(a){var c= +na("ng-"+a);Fb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===ya.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(a){a&&(f.$set(h,a),U&&g&&e.prop(g,f[h]))})}}}});var xb={$addControl:w,$removeControl:w,$setValidity:w,$setDirty:w,$setPristine:w};Xc.$inject=["$element","$attrs","$scope","$animate"];var Yc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Xc, +compile:function(){return{pre:function(a,e,f,g){if(!f.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};qb(e[0],"submit",h);e.on("$destroy",function(){c(function(){Va(e[0],"submit",h)},0,!1)})}var l=e.parent().controller("form"),k=f.name||f.ngForm;k&&sb(a,k,g,k);if(l)e.on("$destroy",function(){l.$removeControl(g);k&&sb(a,k,r,k);D(g,xb)})}}}}}]},qd=Yc(),Dd=Yc(!0),bf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,cf=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i, +df=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Zc=/^(\d{4})-(\d{2})-(\d{2})$/,$c=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)$/,Ub=/^(\d{4})-W(\d\d)$/,ad=/^(\d{4})-(\d\d)$/,bd=/^(\d\d):(\d\d)$/,ef=/(\b|^)default(\b|$)/,cd={text:bb,date:cb("date",Zc,zb(Zc,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":cb("datetimelocal",$c,zb($c,["yyyy","MM","dd","HH","mm"]),"yyyy-MM-ddTHH:mm"),time:cb("time",bd,zb(bd,["HH","mm"]),"HH:mm"),week:cb("week",Ub,function(a){if(ra(a))return a;if(v(a)){Ub.lastIndex=0;var c=Ub.exec(a); +if(c){a=+c[1];var d=+c[2],c=Vc(a),d=7*(d-1);return new Date(a,0,c.getDate()+d)}}return NaN},"yyyy-Www"),month:cb("month",ad,zb(ad,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){bb(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||df.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return r});Xe(e,"number",c);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return qa(e, +"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return qa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return qa(e,"number",e.$isEmpty(a)||Ab(a),a)})},url:function(a,c,d,e,f,g){bb(a,c,d,e,f,g);a=function(a){return qa(e,"url",e.$isEmpty(a)||bf.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){bb(a,c,d,e,f,g);a=function(a){return qa(e,"email", +e.$isEmpty(a)||cf.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){E(d.name)&&c.attr("name",eb());var f=function(f){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value,f&&f.type)})};if(e.$options&&e.$options.updateOn)c.on(e.$options.updateOn,f);if(!e.$options||e.$options.updateOnDefault)c.on("click",f);e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;v(f)||(f=!0); +v(g)||(g=!1);d=function(d){a.$apply(function(){e.$setViewValue(c[0].checked,d&&d.type)})};if(e.$options&&e.$options.updateOn)c.on(e.$options.updateOn,d);if(!e.$options||e.$options.updateOnDefault)c.on("click",d);e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:w,button:w,submit:w,reset:w,file:w},ic=["$browser","$sniffer","$filter",function(a,c,d){return{restrict:"E", +require:["?ngModel"],link:function(e,f,g,h){h[0]&&(cd[I(g.type)]||cd.text)(e,f,g,h[0],c,a,d)}}}],wb="ng-valid",vb="ng-invalid",Na="ng-pristine",yb="ng-dirty",ff=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout",function(a,c,d,e,f,g,h){function l(a,c){c=c?"-"+ib(c,"-"):"";g.removeClass(e,(a?vb:wb)+c);g.addClass(e,(a?wb:vb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1; +this.$valid=!0;this.$invalid=!1;this.$name=d.name;var k=f(d.ngModel),m=k.assign,p=null,n=this;if(!m)throw B("ngModel")("nonassign",d.ngModel,ha(e));this.$render=w;this.$isEmpty=function(a){return E(a)||""===a||null===a||a!==a};var s=e.inheritedData("$formController")||xb,t=0,r=this.$error={};e.addClass(Na);l(!0);this.$setValidity=function(a,c){r[a]!==!c&&(c?(r[a]&&t--,t||(l(!0),n.$valid=!0,n.$invalid=!1)):(l(!1),n.$invalid=!0,n.$valid=!1,t++),r[a]=!c,l(c,a),s.$setValidity(a,c,n))};this.$setPristine= +function(){n.$dirty=!1;n.$pristine=!0;g.removeClass(e,yb);g.addClass(e,Na)};this.$cancelUpdate=function(){h.cancel(p);n.$render()};this.$$realSetViewValue=function(d){n.$viewValue=d;n.$pristine&&(n.$dirty=!0,n.$pristine=!1,g.removeClass(e,Na),g.addClass(e,yb),s.$setDirty());q(n.$parsers,function(a){d=a(d)});n.$modelValue!==d&&(n.$modelValue=d,m(a,d),q(n.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};this.$setViewValue=function(a,c){var d=n.$options&&(T(n.$options.debounce)?n.$options.debounce[c]|| +n.$options.debounce["default"]||0:n.$options.debounce)||0;h.cancel(p);d?p=h(function(){n.$$realSetViewValue(a)},d):n.$$realSetViewValue(a)};a.$watch(function(){var c=k(a);if(n.$modelValue!==c){var d=n.$formatters,e=d.length;for(n.$modelValue=c;e--;)c=d[e](c);n.$viewValue!==c&&(n.$viewValue=c,n.$render())}return c})}],Sd=function(){return{require:["ngModel","^?form","^?ngModelOptions"],controller:ff,link:function(a,c,d,e){var f=e[0],g=e[1]||xb;g.$addControl(f);e[2]&&(f.$options=e[2].$options);a.$on("$destroy", +function(){g.$removeControl(f)})}}},Ud=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),jc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Td=function(){return{require:"ngModel",link:function(a, +c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!E(a)){var c=[];a&&q(a.split(f),function(a){a&&c.push(ba(a))});return c}});e.$formatters.push(function(a){return L(a)?a.join(", "):r});e.$isEmpty=function(a){return!a||!a.length}}}},gf=/^(true|false|\d+)$/,Vd=function(){return{priority:100,compile:function(a,c){return gf.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value", +a)})}}}},Wd=function(){return{controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn?(this.$options.updateOnDefault=!1,this.$options.updateOn=this.$options.updateOn.replace(ef,function(){d.$options.updateOnDefault=!0;return" "})):this.$options.updateOnDefault=!0}]}},vd=xa(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==r?"":a)})}),xd=["$interpolate",function(a){return function(c, +d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],wd=["$sce","$parse",function(a,c){return function(d,e,f){e.addClass("ng-binding").data("$binding",f.ngBindHtml);var g=c(f.ngBindHtml);d.$watch(function(){return(g(d)||"").toString()},function(c){e.html(a.getTrustedHtml(g(d))||"")})}}],yd=Tb("",!0),Ad=Tb("Odd",0),zd=Tb("Even",1),Bd=xa({compile:function(a,c){c.$set("ngCloak",r);a.removeClass("ng-cloak")}}),Cd=[function(){return{scope:!0, +controller:"@",priority:500}}],kc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=na("ng-"+a);kc[c]=["$parse",function(d){return{compile:function(e,f){var g=d(f[c]);return function(c,d,e){d.on(I(a),function(a){c.$apply(function(){g(c,{$event:a})})})}}}}]});var Fd=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c, +d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(f){Qa(f)?l||(l=c.$new(),g(l,function(c){c[c.length++]=V.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=Eb(h.clone),a.leave(k,function(){k=null}),h=null))})}}}],Gd=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ra.noop,compile:function(g,h){var l=h.ngInclude|| +h.src,k=h.onload||"",m=h.autoscroll;return function(g,h,q,t,r){var x=0,u,y,G,z=function(){y&&(y.remove(),y=null);u&&(u.$destroy(),u=null);G&&(e.leave(G,function(){y=null}),y=G,G=null)};g.$watch(f.parseAsResourceUrl(l),function(f){var l=function(){!A(m)||m&&!g.$eval(m)||d()},q=++x;f?(a.get(f,{cache:c}).success(function(a){if(q===x){var c=g.$new();t.template=a;a=r(c,function(a){z();e.enter(a,null,h,l)});u=c;G=a;u.$emit("$includeContentLoaded");g.$eval(k)}}).error(function(){q===x&&z()}),g.$emit("$includeContentRequested")): +(z(),t.template=null)})}}}}],Xd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],Hd=xa({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Id=xa({terminal:!0,priority:1E3}),Jd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var h=g.count,l=g.$attr.when&&f.attr(g.$attr.when),k=g.offset||0,m=e.$eval(l)||{},p={},n=c.startSymbol(), +s=c.endSymbol(),r=/^when(Minus)?(.+)$/;q(g,function(a,c){r.test(c)&&(m[I(c.replace("when","").replace("Minus","-"))]=f.attr(g.$attr[c]))});q(m,function(a,e){p[e]=c(a.replace(d,n+h+"-"+k+s))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in m||(c=a.pluralCat(c-k));return p[c](e,f,!0)},function(a){f.text(a)})}}}],Kd=["$parse","$animate",function(a,c){var d=B("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,g,h,l){var k=g.ngRepeat, +m=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),p,n,s,r,H,x,u={$id:Ja};if(!m)throw d("iexp",k);g=m[1];h=m[2];(m=m[3])?(p=a(m),n=function(a,c,d){x&&(u[x]=a);u[H]=c;u.$index=d;return p(e,u)}):(s=function(a,c){return Ja(c)},r=function(a){return a});m=g.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!m)throw d("iidexp",g);H=m[3]||m[1];x=m[2];var A={};e.$watchCollection(h,function(a){var g,h,m=f[0],p,u={},C,R,v,w,S,B,D=[];if(db(a))S=a,p=n||s;else{p=n||r;S=[]; +for(v in a)a.hasOwnProperty(v)&&"$"!=v.charAt(0)&&S.push(v);S.sort()}C=S.length;h=D.length=S.length;for(g=0;gC;)z.pop().element.remove()}for(;x.length>J;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw hf("iexp",t,ha(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q=c(k[2]?k[1]:m),y=c(k[7]), +w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];v&&(a(v)(e),v.removeClass("ng-scope"),v.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=y(e)||[],d={},h,k,l,p,t,u,v;if(s)for(k=[],p=0,u=x.length;p@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}'); +//# sourceMappingURL=angular.min.js.map diff --git a/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js.gzip b/deleted/dist-cov/usergrid-portal/bower_components/angular/angular.min.js.gzip new file mode 100644 index 0000000000000000000000000000000000000000..ba57627582a69896d9671eee45e72edb85391567 GIT binary patch literal 39855 zcmV(%K;pk2iwFSx2vAc11EgAeSK~Oc|DR8h_;6W!Vod0rJ9}5gljYUZ%+d|h(9G_J zOdnZR9*tuM+kvJb-~Ikd@Lu;{u+=$CCd-&-zg~47_PsxQ z{oQamizDyNPyN62@+tSiH}c2-kw0y9Y~gg?^!NL_`1!H(OPWq%>2}T%;dQ1(v0!_9 zT%-DuducY=>YUGnOmfLO@6WEce%RZx$IC<%vox_U+#5G@p8vGWWhXDPnJE6`S06h^ zcIZ53vRGzGr=H1D;KmbD0$Rus?Ez%L8j@_3UsE_AG`!%jxl+HL3`bS(awG z*P?6h-|cd*Lbg{T^T%msi(uau2ldikER#tw^+m7efTEtg9|U4x4KQT~bF2lBh~0g( z0;?wzkw)^<$Ft*fzDN_yx2Rd#`i* zJiN_suSP#?@3|n8S<57n<5?o3@1QgQn3XGpR(B)huU8izJPk1$KiTFthqZcsDWg+j zvdx{QX6rrd?DP-t!*};Pv!oL?wA|aF%Uz)rDDpv6=-}s)$RXiI z3f{36Sz4ro4OpX>7u(XL>7JGFdHEsqraZrROfIu@A+zFXXQ#V9WJeBY<(}YiYzsFW zMk6KRCX?+jto^mnW*{Pe|Ah>txo=pVT@QRz7)}Zf42Q}9sQoxO?7#rI_9N4rz zs}z92w;LrxEvF&Qnm!5N!6_8Z#WJ6wSs~+Io@RyZthO4(h$?9iHYJfjE#yjUO&&zm z*5umOhH?Zt@mph$8d84`H<=8zOo-_%)s&&#EFK1Tyj;=ce&_>!ch~0_9fl)MOnG(; zT|6x8zC()h-+zJjl{(x}FoAVwxxn!yoh3F-B0>GNPf+FOzNH1ynxs#(H_p=eak+-g zd;5-wX@&MO$)~e13`XCow{3#doBBscY;~UbAoRAkA)D#n1Zrq#xU+-L?iz<-3j)4!R*qki(I`_R_ zCD@6b$j6R-VjE6iq~t9tooEopNJML$NvE>|kn014RSbGO?A_F|ZzP z1nq7Dy*Ab-1KB0UT50%2iefYJ2LpL&y*CqK9E8_4(g4g19#})YbmxQ@azyY?<;e>T z-kxumaF}KM>AN#7jTwf=3$|X9GY&Uk|0pM?Ul-p+f6@{!nbIf~N^z+jr-Bn0wRsF1 zMU7k*P&=7D@Ypa2QG=&zcj2nKw)R0EVDrh|L*o_-Pf=vbWX}>9c!T<=)oaac}$HuCuVLCUjE!w0!3d&nxIr;TsTp6Bv0LRj=ESZ4$6pd$~&;)Zi`BU=M znz+hVzus%*dq4zjS9`%{n$fas zrc5BN(mZlZSv9OI{U(QJ3>3m>q)Z!0c(o$L;A;qnr^p*{1>_D99;s7>0kT_km>|1} zEUssBX*&*6N{+8uukkHUmzj_bBYOaBC8B3owN1SKS7qZV0D4|ElGo(E4nhRPVQtg# z5z3V*HwHt~9@+<#O&rjQvSHzGjgYmV%Cpk<>i{pnsVQ5$iScNH_8R0ojCosHoRuAL zRa7R-Sgx^#!m0Ft2UZn|6P-}>G@j6@*Do&!w-?TJc60L!yqDu>xmdT7@ zm24$Ivmp`bf*bTPci0u=LB&hg;M4xUVkbN*$GiZA+gB| z5tK?%>Ms_7sKNNilz#V8E41e3cNii_^}&xC8&~WTnl<_MA_>j-Yh@Fya$-*8}EK8v!^Q@XHlfIuH9W5v#nt=*%dkb z331`|*N7KT*ECzCNH?ZAsDF)OxS3| zKm=PEQ%Z}bwf+0qhm(unEe1uuA&a2~PcDu>y+8eMt%mK*2Y{?3!CoC-T%I-|v1kY^ zxEVrjj@bqoTT607cM`dLV0AhcBQs`5p9>?(pfF4)$SQ>Zg*x?;A&wIR zZ~9~pE4IU&o*|C!A^X91+ZtQSkRsaG|HmBWsB9-`)hPcDDKLVOVwk$$MBI(qDr&+2 zyK_7drwN&=B71rcJvm?C@H#6&JS7*r((-(=t%GRx@U!KRKFEXuBX3&F<8o%X$e&eE z(I3@$`rr({2D&^~`1by=4~BpIJnH@I>^Z~zQB$_~!?KHlz*dd{9(rv~t=P3(7I z_0CA;D&nG=_q2wgiJ_85Qn#>0Yg@F6Hw{7AnHcs&l60RM~F=7Sq zQE6USeGc$B3P6JZ9~}2kSwe{O5Ci)oXP~~I!Mc5ATL);e#WC=GWmRxTHdn_Ao*Pz0@JMBe&akdUluUC*i=d7?q|D>9BOkWUT18|DR!- z{JypyIwjqqQk2zDePrh43d0sqGz#%wZ+_aF%v_ph4F35<4F;{jH%Dr)XJ);Jt;62g zP-zQI6hHPAiodlNJ5+Ru_2oA2kzzrI9ENN}Np}`53z@f$ZCCE>Oozxpfpvs!YlNW(hq#nv z8$lpI?1`sq=O?p3mk|Oeopdcdx*H*haybUZgW-6Dh(u+ZP1Y)^to2%@3N{6h4#LP2 z`?7Aqn z2*Z^?Fbk2i(OKI9Mr0PNFVzOA&6642T#F_o^6G#SZQDAKGCAeZDY8v0*f5!MI+cp* zI{k-{*!$zdFP~3N-=2Q_d~|VfeRciu@Upu{jJ`nFDm~~*VP7cKsEtAd|Ez}s{jb(I zNw)+3M>=6S#BhWyf)jiZnCkW&uR&he2WrD}&de0l`fSxHm)0CuuE0O^m$M9E-KN6z6|e9hbUfF& zbqJlT;;vmdW*>`DeF|_0t%?q>3xRHDf<9dXnOSHP$WiPK9xh3girFCNLW8ji%GpHL zQIken?L10_%f@y?9;xdFs>2wuw=mgLm!U&tLCd(rvy3tZvc!~U4T+PB55xB4S6K0a%`J#4Mk5e2!Ta}$_c2ZHJq2(@WXgM-Z7_2xAC=(Ep z7uENFuyJ);**dCw&u7VLmIY1o<>jc+>vLBt5DGtfkpfY4A{vl$mdI3nN4seK4qMLS&dGWtLu-y2X&xmN;#V>>+{GiC<%n z7ONFWW?a$>#Y|GrX#r&=&yh>jPIqe_ge?naX&VbcEQ06Hy7SvoE+rH0=WLlA#i_W< zS>%=nIcH;+IKiY_8vTqB#@Yi|)iA~7oECXn11LxFJ(t!(~OM3nMj|<%K4B78m7~baOKpmMO9{j!V#{yBRzJ z=TrrxgjNpA0Ik1k)Z^KN&0TPxnf|nn5G%14(^Lu$TnifuEVg)Jg1b25$RgQ^3n?R)W#2HQJuG{2%d1Xy?^b%ljzc#|(*=8U!x`pH zL$^qO&B5RT0Z^9CRhtVJ`%8*h@x)HKJIg;+Nj^J8@1$%WqOA*V>;cWUCDH5>9c{1K zHJTsPB?&tW(Js9|lMy=VZiAh>4>HSX-kb)hsLL|$#^k{SJQzE3mq?X$`xjVe9>*ak z-F_D7lI|KX`a(iMkVNy~7sSDYeeV z?5+Brh$qhikjyz1?*aF zatg;L*{9m1M(m4Fl$pI7W%_PvEY&){L+Yk%8%F%2{pD?F_U@1xY_)WWCt{jrSAzJ> z{u#NIS!Dl0JA@m78D`sP3mkpMe>YAjqh z9<&yz(h@1lK1@0rqobYzP0Gd*&L)|pDf-nFA)Bergnhw(RoG*9Xw}I9i_yDhbNuFT zD~bMp0*#)~f+_Wr*?0_M7HAixz8=#K**%TS<}$@8$FebnLZJPLOp^|@8OgDl`G~yWefn*C-z-@CQik6Y zv^STdRfHwgb>Lt~-oewX$EOk7QX^Cx;O?C}cNcEr=5C>4x=3FNbrHZ(Q0mL7{-L^e zf%J5)=D72qk4WLJ`aVBc_;W<51ePGvyc^C(jvEgW4+ecQky)t+uuc*3p)7^lXK~Pt z-5iLLz%GKs6Nn$9Od{NID!lnY;^)9Cwa5@Mk!p?PR7AI?u`>F zpp1jDx1EBLS;FI&moYY0cZ0EC!3DBm?pL{94dR}FwJhXGspxMrKB52M#+XWcVBot@ zr+akwB?9COp9c}<^cscx2DLfZ-v9YvZ~M*9$mO=8;hRxe#fm5wh<0~<2b6j+ z#f2i$Ctj`HRtPPc4=_Nv`;g9}PT!%rgM?mX)jZ*mLm|_Rtp%2~($AXeD|EHvN?F@$NI-#o2BL=Wi1D%1% zel{Gf=0fYc`L^QMuw`-7^?_n^w{O1YI#Y%zp|#5geSM`4q1s@zh%W3j_w^hnkY*wq zG?q+7V}7t zXs@dyRjsZj3-)?fC-8?jFHmgmh0!(CQOa!;KRkH}8^OkzOhK ze@2V{Z}!gvMV!C8uU@dc<}uyU^#a{i^_}nWi>myMH0Gk&m7~j3_4BVTRI_?iQog(x z&?)6>Pp`Q794RdQ6uqc1*0~ogrJEBot!*$%J!v))6=IRuGf1tAq-6>IuWOgF+8e1i zYPLm}w-gc(sXUu8pt)AMbYBr~bxDLJXXfCFR zo`^2SVXw&Uzr5^|m?DERn65N0OpavgUb7+r{=*e5-vPfN*8GMbv#WOGhi1g!P@pnT zAEb8Z<~M_XdCMjza6;{%sCu^1LAYCpVe=4hw6kNpGdMQmxu*IiC4NB$j5O8)m+`g znaMLz#s)7hH_D#E!Fgrycd3b#Q5kEDgROPS{eQoebwnV=AD3aDv+_3q?5}W=^Z%vo zTD#jelI(Z=3JS-E0m2q7ZFVyWpf<;rEyG96=C`1lU%j(ycu#7LU z**KZc_`;6)q?Mw{d}~X(%RELDOQTEvBFi$-JR)D=#JOj6|Df26m|AhEi7l;#7#3!>N&u5Ah&9aUQxl zG@JAtL{-D@jhDkZX3UU^FyNG6e3P!pMf2_Pnol4$4qi|={bvRu69so*QriSr?l8YzgRBK2XyHL ztJP{-&^A+KYSW(v<*&u)LS^G)*ATPpSyUD$>BOOC6-26WxCgDeis6yHWTDsw2EYIU zKxIAkgDs@zFfHe>Y>X5uo#%r+n+B^cJW<2P#h`Ss+4)aw0e1zlEepL_=46lo=JsTl zG(Z(98ZHu#6KSCZM_a2O0gW+U0V9WbM;5)MnoIF1dkl zSp`Ykq#8+A>CQH-`k_}92oeVUC&aZ=4!fe#vQwWJ0sKK}-^ogVgOF{S=i?c=@-7lI z+*(ksWJnuS)*5=78Hk*Fxe6sC_Cj8s9`Id5=~U6c0hrT>d-)|qShkD|`3nuMfGf|bF=v!o0PARmtY zCvrJyo7s_>I}ujZ)gGAVlj$apSdnZJ1y*taRHq1P}Ajz%WLtcI||pT)34Z{toS+m=!c{(?cWnGuM!-I zr;|MB7hu`M*4gFtNv#-hANcOma9Tb9GYNWRUtW;TD0LeCjP%4)mhoiVA=(dJ;{ALE zuA1~!2stf?CQ>fZ&*ROPM*ut6+kVz+p(PS={q7@T-IwFduL^08di$jE3U=t)KQ+)W z?)C!&+ML=5ljH;Knd7`x+Z%U|j4bzHe_u?z;9(u+5~^A*Npb8=)2=w7ZKj-NQCI*m zqt}dALfRb3TMSedhe@JLT{}VVoOA+kVFgy#CIu4XDG{b;?Afv=&qq5 zD0+8bs`&1R2eSTLoG7TcgRwaEJER1;Pt-!(85l#6s!{`|PKaL3Oa27i7_V%g`#+v% zV#oQx(UU*oGXc&)LcR7l|2!Qk077jEVDg;vj~ScC=_oMVY5Ns3M$%?HDGBqgm}{v@ zRnNE_chg#N0F=(*?iz(#*0T?`^Vk$ z`ycgz8;+WXD@f-gl(Yy(vTD!usPT9_9`sY2#!KBJVGMpx(E@TRr=6iLF4H0oCn>w& zWiSb6J?XTLT27EYOkn-VPrbQl>>o7F!n|?t>p%7z`};oszj1Q$$?qesEelVaxfUF&P&{KN>zZfSM&%(-==1 z$H-V(|FN91C8i$MuzOJQzq)tM3mh{ zGGV9=y9j0ZkQB7ULureakk3_cRXQO_Mo+<=sXQ6$D;?Btl#V+9h;2}kQFiGX{~jFfZ0|+Hy-2ox~kM4^V6- z0CUTniGo(q3*d&y1;5Z+0N=0lHF^+adwXRsUJi$LE-aQV03;rZ6VT%Dy3pdPfVy3D zBztnGmd%_P5Yg!Rd3U@ey_RXDCl&?Zff*ZuWwK#_Y?V6Mr1ElDzWoRnk3MX%(zUpl(y2`v!Y$hu0@YoAJkb=|6nF`- z)+UR4z}aB>nM5gm>akO8+8-lpURIYRZ|DWfN7{^&{fcHHUu71oXS>)^iRnK%-();@dQwxXxiQ3G)|+ z&-uskG*-d&5d2svDc_an+^tY|EEq8d$+NwJ=c96-Sbf6o=HxY}ETj>$op+(a&S_5t zE%RDtDP(}5GszhkZdYMFa+-zwup8tw4Bc4-U)8rBsJZ?s(EP=@Lum>SP6LQfX(bxLnm<+=_bUCd>#4+;$H9vaE=t6#7AYq?aEP^k>3y9k>GLzUI|t`Z~3dPr_Q)Qn1zSfY|`pJa;=_C z>SAXgIT%CyWu&0ayO<~{XAK1NFe#fw#r`?G+?}p9S3a@1p^okdnt9T-mdoyPInZ$? zgLv&^em$}MsumWoL}o=q@Ik0}yIDez(z9n(`+%WfBSrc{KC;J4*u!8Dl%j{%u|ZmT zR%qJ_K!=95Gu43s8iO-I419 z1Hn+*+2LmY1KvKv&K_2f_8C*iLb=3t55y@ZWJI)HC{_CNa{0@lq<=?bK&NrP+fRvK zO^8-lg40@rE@{wT6xKW^y4ayr?nh)8D6`l7nYy?KTU|NK^2$ZxUeChmZ22ZnJarN& zRVU?T%i-q^@!$tJp&m`js`f=mD|`RtwVX6318cJN_0OKC`?fY+!2sKT5`Y275fFhR zof#h#F)dEcC_uc#qF-o9MCJl7fxv-{G}$DOPCW$8tPK7@N8y`I$KeC3*l$dRw*pv) zUf^+$h6sxbUEPsdyRyv)uYZDG!)du{SVN_2wT1xdY0yZZ^Ibt6Kl!hqPgjzx_VyQF zBLs-c>z-I8%Pt*MUAoxPCF*g>tLNa=kvg06&DO&jkLpp;TSf)yQ>#K~$QE3+e$O!V zWUNz^m1X@e1h|NYkh<-txafhDp$%BvsH53T$zol53}8*Vw}%w|($}|^Nvv~*_YYHz zTG&W##FN^=wH%xr8Ch z)U-iKrH}DHUaTMJ#cLZ92by}pYsT#*7Rrg6+=*3SX)eyhlQyl#eH6lt^x`zv0Oe9LyQD4vGoJc_D^D<$m4qYqb-@W~(Y~FkBU8m#W_U_w{_$8Y? zldRPp5jSIb4L02mo6SCs4Y;B@%UmksQRrmm5DkmC9C76NTi;xc%cN11fexRsVx!9# zUH(t^N~u6=X(Ed4mGHZ3kCQvPL>WKb6HyQuF%2R6365!Ey|mSp+&-#y1rkPyC$U>M zX?088Akiv;^H0a82^>d2Sfp#YNk{rj-2hXpi%bimM!Mw=69LcZme!VwMlS9=SkSiQ zaHQiSHG(LW->X+UBUz~OBw$Hnqzy6+hn=Tz%?DZXI)tj>Ase+xPWCgXZnhhZJ20ZA zgK972<6M<>1R4@o>cEm<71-sEwnVa(r;J~t8z>A946cV>XF}FW$TfJrnj=Hjq%p0O znrntspNppBR|Dsdw>Z>CXn?G3^`XWa`_;huMNF2o8jeaNTCKd*ID(V%Avj0&#`zX( z#zL){&lHZ6!Rx%UbL1n-Ri~ey3EpCbKNpq`>yM+Ah=Y$%SPUx)h>E2ANM!I)&Tm6? zVi0oaX6{FrbxBx0lsj?odbvESY)$o|Zg2vWYE}QTV28Qt{B8XWSzxeEGi`r8RrXhQ z_{3+7Kx;W6Jv6%)C+22W(`=qnnVPt%UQ$tFV8oe973SDmjND_<3*9qf zoMaUTSBToQO9zKJjkJ37c?y%q%_K1doUjQbc-80E2@jlq}^I2&E|2< z8_I1~4`_AHv4(t?iiW(}rZMhd{()R_%KO07>&*jU40aMqi zf@}I(IC|2F7u|w#otntf4u@G;f9(&i;#=Oa|Z>6jQ6kQ`IM$s zl~-FW0CJJuR>28J^g}fnMBT^YMt-o%cB*UlE9qH&bx%cqr^Ob>r9ta0GI>nIRVH5F zc%4U=%%>ZV4|I*?4YHi6^@Ck`qse%=gtINKEdEMZ%qBxJf@urDFy^WI3JyzqV8I;T zCp(NxhGNErTperJ*@h7L2F00PnXt>O`pX!{^XyFzvE8+ zmDu1+K6T~0WK`oQWk%?6846*x{a%`TPylt$6Cd37UgtppXx{V2@ZXaJci$sfN6^3H zV#bfllUPD9=`aMB{z_c>*f_<2>$y;42wj@tTAA{%aMBN9M z*1nf-n$6$C;D6z@@^z{9Tv~tqfYU6hKW(vtWI8i9(P11!I4K*XA&kD?#z+u1*ip;)(V5o9pSvk9h_@- zs~_J>x4Q0BmtgGbL_W_qy`UOW4UAHcMEw?^AwI8|_CFp-S6_7WZ;J<^YsERx-D>2} zd)El0s}7&<0+;~Yj)cWsI~4Gn9ZFCh8Rc{ZnjLWim9_c+o~aKLIaMf)2eGgi9Q&1p zrB3s`=4|R_i{a@%tibO+xDPdE*{R)fSjw+G3d|wPw39*ib3QMAIxk4y_?W7L|MBUi zM{JT0iXqx;7xOqyi=wiJCTg^~n3MhWJKVIi%^oUoH8G-U;&padR!x+w%H^bzRg;>m z%D*G49+c?5q<-5%Y63Sv1ScxG^8}HVLu65hK2d*^w#9Pk33BPFltv+>QB1{@{K@5v zwjax&iG5h-DcR_foo6{MbxJKg=*3}n%fDuX;ufVc{qR$^W2+DuC&+mGG865RQHEKoms^I}`$;K#SoqI{D^~-cdWQy-jg;dC4nUb=R z$ax0T@<6Evv6X%&R6zKy4YLZr2ZaD2oX9yElf8?cYO6A5HqG*J=2!roixwbqB%~uN zsMu-i78WEhijaWwZ%@zKh{v(L?FjoDnSR`UM<*QQ$tYW))WeoR0MzSR&JNE{Kb^fk z{PWY<2OD9hsuPY<0YDyVWDhZX6M0Nh_2-8l4qsp3j$3OD^sE?gW(NZc^MP!2*kBH> z2CinhMcJ%Wv9~o0Ai%Aat zj}`jJ6$}*R!2reZjI`GDB&{lkBxr>49)_6I0)fCLF3g;TXk`yB3`S5iU_lX{UzVLH zqLoV*%_h)Y22t58cJ?)~*tg&7hiuVE?+#w}V}3cg9CQM0o>u}&TJj|kiec%%lGWLA zGZrur*e-ym^duTrm{f40fZcp~*D7u&$tWLpqTIR(^GLMUbO&R*!%Txl9ytFXd6eNL zs3^PWt_JTx){sH8GmX>{S?DpWhxU?gg-@>PpVXG0>k(h|xoQ+34 zb=ap~cvNx8GfTHn8$R`dz`0pNqInN*C6h-xGoRX@p#TM=dww@e$M7f{1I~dq7M<{W zS4F^KU>He%Oxd@vBG|fcK;Za7?I0^ozIVx!DCLlk^uJ)`UYr-SG+(TjKQ3A z2iXgIFSVqhCk~yGX6a?G<3Ub!JzCJY5oW}b?`g=PSnA@;1 zuBBPc0>0LDX08$|t(|Twel2;e6n33iQ$&?(O$B?lCeT);k@vOOM1E0mh@d&zKnN4* z3w1SG2~<=>COjmf+Jsqj46#6JOsqh3!Whm|h5Up(0Q(iNpE^R`XW*X(S%3 z2k|f~RhTART|QntT>f$O(D8P$axbrzSDg-9C-@oicvqdPN=j)!ne5c*>}5SW37>%v(vn~V_@{nCgDsc|BJ zR8BO7+8`MO$d}R`JZ&WAnsO!pYp`t;JHAy3yVqKEnEm}i7`Uk*t8a-B>cHAfg;=dT zeKi=TD^Fv1Px1+fAn6}CK_(}%vV-g`YQIHE%`0JXk(=oV{|>v^MkHtjUT3yyg0 zd9MITM5Mhx1synPeMO4YLfyEF3RmC?3rzYvC@bXUAr5X2YHf|pq#pSznL>Uf=DsLF zT$>^!ezkhwujYYCjgeR~>7ob!tt|CY)yoUviz1Yv>Miws^J#Fe=A`cN2 z88HVPFIXta3d|D+(p$N}`rF!?5HU+blB)<^HX^c-KxRgFoB4Y*oLp}v>dj(UzR$)3 zVhu-f2lZUBMJK-a=pfUl;sK*6$+#=2d=A9&ps+==eQoqsrtYi-agYU&0X8p$x)UE? zd#aT1iN7zlLck5N&p1sFVBk-tn9D8m8-q0Ar4i{QdlMa1$VxMhZ5fvxo>Vm%p+ zpMT)q2t>6TZipiPZcMZMoA3i=iU;lu_?8=pMu>8_VdMN8*x(2B$fptXfs}pv-jP}; zHG6mqyFt8SSGC)p(o87n%pkf;LZ+mvdyJpzCCfUrH84p>THJ2a?J8zcnCG?*m$Rzi z*^iHh>~h**z%eG88FG9T=;%Vh=gli}ZbZZsFb@ZuzGRiLVQBFRakx8dfUntv*zsce z7a$I2Gc&O~ErMTomt?N=CG`A-@MNu;tuFKq$!@k1k;)5fT)^cj3agQ=Jo!?%P%|Bv zK@Y0?*NHDOSMKnr%CGFLPi2?15MF@Rq`oNdsjmIaD1N8r(N-#wKBk z(n@?pP5rVjs?4X|VZXhOcO2|n*&nP~|~bA;Sl08`E4 zVhS}MW;V-uT*w#+fX~IokeWcifFDL_kNB8JD)3Q!-lGWqGxN4~ui-#;+WM{i;fQ9I zA}+LrN%3{#v?bzv|0cpVxla2!n~rDW?wsGcxcDfPE44x@WmKPqMz~-T`Yc_z?Li7- zMRKjN{1!7{AT*4dtTh0MH3xpi^gS+U|KKee(ti<)uBD?!`3(*zYvaTFRLkd&1J|JQ_8xg!+E zr5B1@rV9ilPb(egcNOSukj$c10bRATPlu7S81+ZvuOkQ6x2`A;#~Qbb4rZbVxgUV) zO#9jck^@=K5~rESNmP$ajMU5Vi@g^CZSyR^$lM-n?91>bt+ZO))>>Uvzl2(DBxvNF z{hBDF@CUZjsx=@-G)Wdw8NS=zen-^W{r2{KD@oyFWgYgnA|#&(5BMG^I|AFqeNXh= zyGTM#v2uZ#{353B3Y_jWD?b;BJCK-@*?7R8O&^`O`_G>vCU;JmUj(vvMnvWShfgDV zxnHFZ2y?q$N#y+LG>M6kfzO&v&!8KB{{xX>mnT)5 zdn7Q;7$y8rjz936q)i53fplyF1YZC1^}&Y^uMS?nrxjOQJuRns;`t{lXUi=-VSQZ} z@Ul|bn6FDg5TR^c_|u@Z8?02ZU~E$l27@24yG^|D85?M2y59ia?~N`5Qlmn z-)rh5Fqa@Zy%0UIcznFq1UmJLxk~`LvTnL7h54TtY9!`?1XiQ3yhPn>aJ{U-t78r z)D#oH!G7Pg&0TiFm+VwASq9QRsmaa3}Ow(Qd?7c+w!!9a-s#KWUbp7rQgY zQ<_WXYYWI~2FG?^KA6!E+(!0edYy)Za?GIKj&7-Sqb9d!&kIoM(fU&HMs!5v%26~o zVKZEr6(Y@}XrCw2aC>|IrOqQJ%IgdVurMB@{u7RNG-qy&6^Yb_ANf^A7n9PMzQXeL z$S<|g>l)1aGMdBDkF_ABh(0qUp2V2x(PAmRpb);rrwB0PODeqtmCnE{juRMgW2wI= zxyU(?TBtJ?Ft;s3-F!h@Ydq{8c>D%Fn`M=d82UX66yEbWG}TfLLzjMO-VrS}_h(Cm z7bE9N&sa!w*RKULv6qx(&D1w*#RRpriIHxN6sib64KZ|6r-F ze}Nfvg-F?crBmJHsV`Y6N#V#@iUv!+n?Hr}rm(kj zqTxn6i<#q}d}_ZsJo^)7WCs`L!NZ%w*T?OH4}YE?ehi$JCGjsMW!~PZw{eNfzw+!{nB)zK0s&w=%_g0B{Pd&!G+#k=Z}s>EAUOUHlx>Fn(AunrNrq=_yzT5bDF)HZa;BMn!QPMWG zaZX210q?Ml(`-J*?+MZ2obaZ|_`JH5uwIZ+x@x~R8E6^F7=5DLNTcoVNx z-Z*G~Y}3SW4%#$RKDM2XKP>X=#V~N%?e<3QZ`^J4g5fZj%{CH5e(n(!P8)T5H{ZPz zkC5J_eSzcoI*0V`Y3wVi~sYlVL|0X@P5VHw$y;8iNZ?isjz zaUSj3A*K$s?llF=kqWQStu4iPM5*RMI2|#aU@bsD>?+53=~JWMUCK!pL;$=mF3np~ z;cIGqyAmgk+9QOE%5{Ll<)uh(ra%F#Gz%c6Kzh%MPiM!kiQAzLBc=tO{kx2_-9i>L z%@i10iH3UFC%RCli_&KWR$!E6P?qzxNCz zVv^{%WDMlx)OomEj`4Y{ z%A^U@+_!_tN^2fzj0Kbb|AuHGVG}V&%0jt%&Bz3B%41;6ELT$M@WHt@%#)LX7%}y& zH2yJlaAcSou!hJ^NOw!pW%A7ULn+EJcw{u#21(5zM>w&hXbi$`pSj7M?Sbm^Y@#0S1rLCc|;n5i{&BS%x4w%5_iDHGowv)%#>&BRvwTr<(L`srysP1jj^=@hniO*=M% z-f=bdqiwt-g7E1U$d^O;8zEX{ZE{r5F)ailOFRPM$mYIy6Jt+AYxnwg9b0k0ps01> z2#)~*#s3Yw<&*M}3TJ3Z%q@&*WRViwv zm=b_lY{RKAFIRB+7i>SO&BV@seRm)bL31Iv=&%L2CCA`RlBl+#1?bRUlYz$(29!05 z-5G_jZr@C$=c)J<#C9$D>+8W0T~82G)i{eZ(&eTaYJ|1YU0(v{SFz^)sZzsSI^FKh z4?n(mzW3u!wJ3+Nn?u?d>G8J_NYs&8GjPN^_}Y-1Hm*zuRy zTQ`YN=95+eP#5WMP)!97dIhI|_p(0h-JPwYWtVGMx z&%M|Y%5cO?u7=E$?*!Jb@KZkfAR_hEva81&_cH{l?FbPYO_QKT z#ZeA^vIbn3Sa2u_MN5;4(YRYR9Pb)dQA9+WF4zJU{I3$OGk#T(bqBc}_0lqw-ZF)x zGR&b>*1Dobj^xISxjZ15O=uk2#RtW7E@Oo&>ElWkC5LEwO#4d?zB7h-)|=r5vR93o+xhrm7xcYgNm{AT!+}RMR}0pvDJhC4Mvco6BEN zXj);u@?~auT7V6VTD#&>LKNg6DE%RZT`V|_Ez%DW)KjQv`mzVnUtQB*eHhjx#R_sY(EN>QBy(Tu|)!&nu z@5v&!z_wVgt_U(z7gpMrQTyN&X#>sMZbD}@k2NDEJxfuX^jNocd$?(8&vkZGU)jn8 zWC}x$)gLvUn`hZ<;&r1Rekx+xPIDNeGBBtB357>pe)*!qkdctxKNmn=^Wv= z;REmg-4Dv)*ZnT71)MSh`nY^q*p}AXxTTC7wlfHca;svhh!{+A2+L;V(AUg1qKG@) zQ!(KdL`TwLTjW&0EP|O&?980tnd|nkVpsazdDcvu&m7N-`@zh6<~5&P{x54^y4|*s zwEbUKAz?H!U_un>IGF?x#N#;5#N#!wosDAhHWn@;ZXzjp5qa-lJ=H4~$;p{-CKiE4 zqr1^dbyaoMQz~gd@84_Hy0Uj~GTf(XkB;`&(%yIf=6t@te2=0s2XDOZabWl0WE6Vm z=Z9UA$*CSHbRPvA_)INuD7p?*5y=`)m!JmwN$EQ%u}ng)=@rhHTmu{Be7>VhYlL1s zyylyGtmjf&{wNu>JZ%selUTyC{`a~t>YmWMfEnd`wm7q=`W&AHCUUi2D088D7}?VA z8eFP^aT_MI`0NzRl;zAYd9IQv#VZd9pQivO6zd?dJNM8rM6dX>-q4JWV0}_*BT|U_ zRkyzorwfc*0EbD5rkwk(uqc(B2M0!xRC%OIuGe~3=?%GU`Sphtd2BeDZfe>pcJ$nH z$eN5?f|XB1g#HqJNy^+>y`rO|gXcAzG*%)%&oDG3Sr#hvUSEo_gMC%R{%}Fl7n7T& z?SAoLxgv24Blmv{Q2l@HeFWj15#ych%N|@(jr$}oDuanN-hCvM9nSldyxz|Xy3L@$ zX~QkMM#POGRlyi5V;6&FtgK+7rr79?auxem!3*ULT)^ns$BjTdCeSnv%Cbh7<%4eH zB<6!axPm!>N)*7avGIwFf>#6hs)YBulFT%_+nS|r*HwyyXQtfCvWh2lRU0zgvRmm( zy)Wy8%(d@u9F3i1C@hqLNJV-aslXvdcahv^7nO<*aiqn~Q9Me(OAMtZNjnClt{TQ1 zB8RZ0%57wp^fZ?!f(d48c%dASKy(CXk%0FF@M1z~fD)DYGi^&Vmgf1==;p4L-rYRf zyQq1EZJtJ3NvV1HfTXYo17CvJglY{$H)wHb3l7J!!dX%+e?W% z!K7A-i9&uE+uIaD2rE*m??Z_c)XEtKy#NM4j?8dw|*DKw8%8YSp^okKpMrO3q}colxH@2^VkVmH|C(ydgUA)y#_QB zSc=}Lvfn!|p_X0P@ZtCjlov#MDp##X8s5tBR;RhdT$jiJ;)hM=F#@d?s@0-8WlOzU zS{Js1Gv#Vi>shL@Y~C+-d@ia!BB`AmvAY0ZKZym91x^U= zv2{!i8J)#Z#X6s$(r(x&Fe)^y8HMjl?HNl`eTAXOs~dok)deLBqb6N|U**+g7n2?l z=xO#wys}&pQ7vK?^k#Bd+f{9f$e?=8nu&ucVHxz6)kdflU8aFF>Fe_kSTr!z4vnj# zKjer*$jEWnf}k=j8(#SVv!|YIt|`w4IlJuO%R+Pm&bXyOrvWGJqHxTQsQ5l<@0*uFiISse0hS9w0 z=8w(fn$Q=fzO@#?`J6KIkO#Kf=7SIB05hQOoybVWuw_+TSCUxS4u_Ib!do$!+79Y_ z`0EW+7IdR?{B@{9ronfoYm7#~0RMPZToo2u;}Fh(-*IPGpCHauJSf}v;_yXGMcB44;t3cxsQGo=j=H$XTgDu{Mw^-m9*bUTw8h6RK^9KEL3EJvvV#_hsSx7+ujr@Pw&9>s88 zLW;y}A2S(dKv^mIYsVTeuZ27|6!VP^Pl_^{3z|w`AvrN*khSjxvy!x^X^XFY9AoJX zji>qO7KA*MpgwY^JM%Fx#5m6#*nS~EOUFs~)Hv4cT`+DbC_y-bz&)4o+=*wpOggS5 zR)cXwo?yp{l{Ah1ehUVLesdtsFfJ+pk7sNmGounUOdVBvL9%QptcvSxSAC5Al;+As4zJo+ugi;S)WO7ZwKo!npI=9mEj*^^VDkalWwI|3K@rXp91}Z+g zg=UAB;iqs#8`ZP$N6hb!;p6b9c#7btoXOKGDb5!+pRmWH$So8IJ2eCJ&ES;g9`~ScmulRSO>{uhFy* zBm;UxzxUalnr>BOc6seM2S%I{K5ivm448wT#S|}XP<@M%7Sr4&jRLMu>VzH#fr*xq zL+}aYxH3#K%yQ-MTsI8QH9PMfs6jEC*>?L39=|jrj*gy{w?0YaV*6ab?B{YGbO7R@ft&7dnxe^W>FHdW{ZqXU$5x zL|uu{f(?S9Z)I4v+bkZpv#S+)iyNK{C=cDj}%z{&c__4lZ28{tG>Y z=9qYM6VF=VU`?qh;gne188JV6W+uZQ4wGSJ4;?!8AferNDx;y9RReI&Kf}hs;77N2 z_wa9YH*hFF)7`|$67!kID7e(MSuA1L%OlVq#ADUt7q-X8rxzOZI|t&o?D27_$47xR zG^P%&_V^e*KBgYuyO3Q@Tx6+!y>wu(TjGl{!}ny3d{O4`MY6~;Uz8zDjj2&|N`#!b zROwh00Z0G2$SbJF0J>WDw!_VGJEPrfv)FEm=@!^RLBue~)m(VAO{a@Ah_;LoHkpZ0 zaekr@%?12v-iY~RGx@}e@|W?1N~G@iJ3dB}8A8Q;rkKCzbyVK~U26@kJIQ+@N~N{e z!MpAD>(k_2z_D4ba74p?DWL~j1Cj#{h6>EA&^8R-)qE|6MdY>ihE^TuC?H>HJTye3 z8A=0etuVH6&FSJ8DhA_UbpQT+Pn$Bo2Os-B6RVuDiqa%?O`wkb;Jkl6xY@OO_uGf( ze{93(AEyWB=dM+h1LFUo^R-N;3+DkP+^7G%&}-kXBvV@dkLaY`JBkPQtyTI@#pub0 zrSJX0<|c<8%K^jGwX$<^DDMEy7(1UelYCJLVeO@ZB2EkV5lisZi0R6VpS!mijC^4Z zWZpb}^5^4MFW)}-_3fKvBowG^UyjHi6h`m7va#5jXK(Wvz)L<~t)2rog?&q%c~P6g z4RP8<^0EYqUiG4DfRe8HhRCmL;Dw|WkixT(p`q$agoHhYWOF0CuznUN!X`<>;4~C) zYh`d@b&D_taDS@|N8sJr9#2@85Xmt6|r_}NnZ+2dZJ~l8E}&WLy#y64+>KRtJE|5JMC#=Angc|#92@t^dekD3G2)a;Up zd_ofx8MSTZQVWJ#{-FH6to5)7r~|x@9tSvtv7qS%JyA3oS}gRHm@D zV%qp}r{dgt-O7%xeP4#}%k1|N_03(Ur=cm~mWiUBb}L=4Arh|uxa}e~tB=B*S3H_+Hwd4SFwA=yq@^{kezIk&y%*Nb54p6nY_$OkXElT3Dv0QiUy4 zG#1)*3pJhS4AXpF5Mwk&SU>0U;+^ddOk@2jpKCX*l~Aql#-K2zf#``_MgSokO7K9g z$DGDnlU{On(^w+02M4zww3>rd$2xPJ72g%pV#EQAodsp$0fPOSttZ9N(bs44N(cLb zhqF8HIZpcpLbgdNvzG~f1Y^baWc{Steiu^<2>86BlU!fLE~J>$NUEFI($rjE#R&Cn zODVnED8Hw>&=&KA+sK{s$Tg0&c3A96ZkExMHoO%g80Y4^rkA_K$QrMdfYDNbl0hr3 zxKO~4s#?QQsnI0PnXdutuV}>m1vGqI^xsk6b1{F4^`BlV3kFRLAOoM$P9XDBRex?| zUAMn7D!szl@2p}h^TW_vf4)1bmv`8GG=sqE4~2F=`OWuF#5`XuCi%X9p0|P%x#pkx zaCQ^d6Pm({6+F{|_SL#rJsLsw=6I1ozdL}-!pXOb4@Ge@kpV&OdW}Rl!4BRxZ1-iH z^f2WC!G@?sFBYG+($r)7YCBs8elOvWPQeL@!$Ss2Mc6zBOywZI;S7@c5~PV1)`gWG z=X_KH@-|DR@~h@V#Ky@CF;sz9Z!l!K*w^1JiS$1fz%yu#Ev$(mc+#29`-PkKYAG_> zkk}LG=*W}p^$<7q-~eMP=IaT%Te%92Ti)Ap8Y0>vtI!rKHs_;K5{>!+ZC zUHk60E29`&ct9P|n8lPDXq&+sg%%JUz`I@DY`6BBIb6mA-EJSA5ode?(Yk6*3$ur-jmHOv-y|gK$i~RQdm_V(86L6^Tx zj@`7n+fv&>m$+;;zHwKh+!9RL1;?v0Zi;&rYjBoa7_7mii!&(d>P~1BE{y3|;Tx+) z8iWgLX(r(uwGz=p!+__SG8ucC4|dBkcHo$%xtk#w$HV@3kX%@gbxDSAumx4o1D(wR z)@@EX7|UVLANEVBjo5)UZbvC=sCq)1W|f`>CEUOg3B3{}d$<_5;lIK`81dvL>D8uC zP!l24rpd1gEaJ8-nxDpfBr}H^Y>e&=VzRxo@^N%{f=Elzp67*tFvI)w6G}v#=vRgM z)zcUD%|Fh2@>RS^>k@AQbw~a<`Tk+EDU38#2}du35gQswKcU7RizIT{uT98hHW9g6 z_SVrsyi6rB9CQsmbT)CUC1XYjV8+K>0W^v9m{gw%NXd>m zFyV;P*|^9q%2AmtZf=~~D2b_*R1RQ1VKJKwP6k}Qtj~?ItDwyP1;Y$xBRH13DZV~gl zmNyD24p>4vVCim;T>nt@~hgh>MwQsP<6EJ<(-*J zvJwH?8IMcLX%glZbRn0MuwF!LiYPmI(ZKEgr#=$N-pwKO%H{7j5k=*fmS7n?<5p^6 zpamN{sq@FW>%>0y6aYrD2w@9g`Xty+2_ZN}iU+QFwwd!x^}OQXmhN&aausVk9vK@p z30|R*Dn^D5_^_wQWufE1MlW+nj-#7R+hq{n+9@DgC_XVE3fnIBt)cI4*=f725q{Zi ztZmSL>DoaC4j;Ix?5j@a(ZiDw;z`*C{`9vScuPAtwDPSDDb@KlbAd#R(u<_`gUR~) z$s9OVDT!=vEj?DCm&2rUmd2@!GbPfsKD`|!X$uSjVB4nb)ThKN4*oQ<=LFDIDtEP! z4z%L;&-3&4pcNGUaW9ZUWdP_U@0h08tp9*!;;jG0;H+qMfm+`2B9g2|sH4ML{EMJ- z3eYVaNgN$@&)9;FW(pCv?c&2IyJ#M8=gZR2Z$v+&A&G zL|dUOhiqx0fR;H(EazD+-uqnyC)J&^g14)m-X8@gqu9`5Q#HK@1T!3ts8(oVaxB-~RMD88 zXe(%H(U$1dK|IwnC5j z{VR27rm;U(g#>+YC80TmqGd!8Zlr$zSKiS~R3~JN3|j184|*Ih;N9EDy73Vw=sTjH zrCdKOu2yTAg)if@|IGmBctapm({+m|NN0d^AA8>&Fg~1O7m*It8-5=Qg5xeGTUmSub?Z%6T%Z@=Q(GGXgJ`QkonJHMYU1PR-nw%4Mp|KhBOU#RPr=Dexd zoP`pD5N|xcdAJLXdvtN0n_s^dy){=+uj%r<&6`Bf!~gx?w|>8MJP71toehr;Pijk# z(Ol%1097Ab6(Wi=n3iWT(ur=-imw9Q(~_Vi8eh{ev#{{4kSfe9=>0~2BIu`s_))5# zn|Y8)oA85`aAQGBnn|S6pC&&S8gQ4sXaveywknyjHA#`|jfm_mVLa2_?BV<$_qO*A`5fLogTHqVDfhgRkn1dsMybx8jY3(1 zjoRUPZjl466nJ!Wa9t7xMe=k$1ZVP*=%V31UNQ>|>8@ukqu+c9#O4+tdI-STBO=b$ zFdYs~uWlfqD9hT&V0*J=R}qUd{j6sZ=_7G^oVsV=<_^I(M9-IQ{fyseUTO&rO7EKR z8h?Ln2?tTmG0HIg^`@CphI>_2pev*P2)#+q>E4nrFN>{?@xicU%co?3(1_ng{Q|J; zo+AQg3R|%xMly(7DFtpIkQO@BcWLjq8+C&yJI(oOCkGwzA}!dIh_mE57FHI)nJi0& zxf?Ux>=FlEY9!)L3OVFL8mD+IXpF5CM~nNooDyV7H7R5$JqJ!7Vdm9j$}2uWBOJ9G z<)B{{lI>X!$tocPmSBe%zPr!m&!vtP79z-Ry)Y!9A_i}4WlLCu>4?0r3Nyz&#Ni@v zTeTJ=?6QcOxgx4z5AuPpPvAQY4rSDz>H?;4fxDJJFiO9Qd7UOV)5-h-aUt0sA3d3E z5_?JG@aVB;tVP&K-W2s~)~MfR_Ki5H9*tLP0wYbj;H8@DxP4QxCQ&3LZst0T-lst; z1B$K4bLYwXG`i*|O53cAHZ5#0MtHM=kJZZe5GvZEY4agPx5Is^eJG;|->{h_5!Ln~ z)Rr`5q0S4j!>EwB=~LE)Y{G6~`fBW|l_9B5lzBbqiGkq=cLHWX^!a$e$t z7^6?u$+Y!MtIE;#A+an!;{zwKj|dMsGQ!;V!oLVr-A<00Yn_~{Q-wp922jv_5AAFQ zqhD>i?Zc=MzYGcNbZ}Ve;2=anAQ$M#5COBw?E~UPI1IF)NF|~`Ui!-1?EoQ;*_}#G zUuj{<#pb*`;pF8XbejwB0&r5PDzdQ-@jp(E7S?W-jYLSD@S?wW=N;Z&iGnnxUXy_!wgj&momXD1(D>+|YB7O(D5 zqyaO$2xlcK3usVSD%1{T;lB}INMAyLn#mF`ijO%0(bkxuG}#kvdir>g7x6b;X+7t6 zzhs@*H)nM7#lKDgqxZ0LmO#BXW9*Q)(*C7bZwk|XzT4064YOdUW|KU@r;pm@*gocY zv2w|WoGA2YvVJmK0zu801py$bO9|2n2T}6oqt{}yDOU4%N%IK7Ele!t^Ao>)KcK(; z(PTEb9~_=QP+BI+W)~qz!h&O`m(42Gs=UO$K_A1V!_>^Q4Q%I9igAL2E(DQNLZ(?G z1&ih{)v_dFA%(xdgkm9|@ygZ$jMI)}3ya_~15ct(#?% z?`)RNb!)Rull9+gmZis^Zqu8oy+scj3-2V4DDgkFA*489XDS8w4D&Lxu+_=UNBUpX z317U3NLI<|&ksK!2H-3rUi#7%YMATE41*6XWnYl=Ge}w--oU66@;1t(u6Xg{c#jHg z=WyWt;RpINn*~AiQoMA&FH7wPThl};{mfJbbWKw?g(D0!Z=RAT8aqqeh}z@w_Q$e+ zsI6j!oZO$ujW9!T{fWiZS#cCPa13o(?(P0N%2%7AySgjM%ae0!# zT>dP{e14_YGAtU;L03t8f;g41+IKL9YMP1M67k`$x8zi|M0}t%Uu%l^@V_+0JtI=9 zB29>}G2aJWxGcBt9ZGws;&!|KvXdM@1R|yLC>@R(sgwjM9FfA9d1lZ3l(}(1ds%-r z2q2+N=2r#O17;-~g^4ROYE_cb2VA>Ro19>b63{{z3o;ppp=5wd`x&@M#klVrt6r

t3q(@Pr;b>we|4$%dQIqu@w z)W1Z5Xv(G5&1EHlWdv>!&oAtAQ~4;o45AF$baM}$aW_jc)<*Ct90VE(g)(MP500fy zpRh=25nUGubc6*_8j}lusCWdt!#+M{Z7quN*W=3j)~@ADoWZB&BORw_JL> z2UrFHU9s%p(Cy(7>xWIJjg646pY9mHall{uw8_|xO|L3SyeQp;FA%Z}CIyaTOxY76 z{I|HXK*wqp1-=VEhChgK4W}llkPUx>sSnTD@S~_#r@aKi*NlobM=X<{D4!05L`<)_ z=8zI^MfgI57gU4S@j~@)5WizvW|(eP44I8Na-#urEYUOGfd`O9P-_ro9s%~^{nd5! zcS;N5_ibhDg@yh^xOYsGN^n%FGi3+3eL@0QZ|{z7r{~+3peZIbbQa%LW zG-YgtCXX!) z(x1L={06sPa~YN5hDkZ2pbd%U%rQ*@P{Lz*IUgZx^9Q~gg#XQx6Sg5g8HF?A;1Fv! z^1AIW+MVO{YBJ5+55DUBtF<1BcKV=r_;v9WNk`(piy{UZz{(t>TQ901*IhN|MN`f3 zi}s%wq$Ya8){@+b{j@KAb7UV5*j+#l_H~iKx+FS3KL2yj^4kHK&qfH@tVcE&u?wKf9W4Cd+A&c>2mayBF?xrzbMQnFlP6LgaYM zJKezN=Zxm}>4~}=gfK1cKQIqZ>3+0YTrFibbLYIVS(RScz+*ra%9n0ds`!g)*3->O zWnY~&yz{5F1?zW+#?XI*U0jGZeLc4%k=N7{NaeSYv>5`-gf4W8`C4#BevV$?H^zJ` z-S?hj0XpD=G*tP=5>;^y`bi|C9VLTC8Bl*aeeM*qRtIKy7SQ8787aYebeBr+e`013=kU}d?Z*f(0EXANobOVR?Q0%Gawf2N% zQN2D$sO0BDV(41lfT&M#*+f4(r%BqAK}s3cOkK**1@ZtB)_tKm0qumSF#4?sanuxH z>xKci1RLO6zS@QJRGLnknYu5hXp!%;1t0z9lQlb~?V|@@&8HvtSM0(@DYO~POR>}4 zme12ZT(1TQD8<9N$y8mu#8gH5a@Op_y%cM5KfT&)aNtSO&pyb`WV*h!icQwXwiFDc zGWF8GVIYBJ7Eb2l0`VU6?~pJ{Ly7s)(6az^(@ghTg12tBv((oIPcLbU*lyDhM&A+` z)HsI7?C5s)$>%C5l|psx-S+V1;%z}Qm<8iqXivYQOMIWSKX0lGjSn3Y^#E}BAouWX zC=qwN6IizgfY}ho$gF7ejD(f-y0#&R4E z-d-N93`&~r#&R1n3!|2zH1o_DUL@sodgnn9YUga~pp-)sENi`Ds~h|J3yhLFS)t5M5hPRbD9?-Wo8&tK!2rJ0M?{B&XaTVvZ>4W}{|ib$ zajbau;Id3vWHQ>Lh_ik29Po6({{MKXh6g~}4+nVNC zO$d>YRPAHy$`P5Si*WRn^13`7fsPZ6b5swE^{r)F3`Ue$rxSi@r+$+?L91;uyRGHs zE$$|8<*~)m=}25|K*4}Wt>et%KxVC0@KpFYLcPV#>j~9YKwTBBvR%cC)Y)?}D;y<@ z9&ZV2k|Ibu3`-s)iM6vq>a$e-US>T(YZDIo%2NlUz*wY7CoWE%Z7VLM3JEX*%Pf%L z#A&(!7{I_+4y9GReK@4aGPK4xNZ#=wKz_m!~P1aIqR`C-PA;MP`q|k0>!5tAsIoC<0}7yDep56p8>5B}*CU#m9vYBWg4= zZ`^ltec(7kxE&~oWCOj~f+T35F9FvwhrJ#WriHi$3zloU@}H$MEA}%n!Qq`rm|@4& zewweY%Zo@ zJ$vaFu*18hfk#KTK7ze^_p6}nfh4JKrqG$-5$d!tP_PQ3?ui1>kQ_*!F-Gjhc5Wm) zngasZG0>^kG#opqZtKQbFf9aok-ug9Ew-da<(Q~Aeq=s2gEnN$L|~^BgO@4K%yAIv z7Rkx58yclAF%gU5Fj{0Zql?nlgO~_J5m$%b_JC!7$cK~k9_!m;eK`zvCU4Hn4C_38 znQX>U!{mTzpWCHRnN_)Dq5TEU?Oc_3-YeRGxL9qzEoeY6_w%+3kQEhL$MP72)<+mA zK!f26bs*VVL<+T)2!}YAx*xM{PdL*qb5y`aU(PHaR%;_>Mq54Aa}N8Etquw-Vu+T+ zpjR;$Zs`d)g1AlUmJ?9CEKcedw~%R|vx!m-<*v8NEoHLYbr}U9BlV46)pr$dstgMdzDK z)*zKhC@PbXCLE(vY6WsMO+!ax99^U&l8#1Gbz5C-8Q`w6Mq-|6VxGrO7<)P8ADn?S@7u%$#eFL9QV*%AD?ig@dxb#LCO&WEhuYy=7BSyZ_K=tR|xo zaa}(z zYA!?S9?5V`%pb*0liDc_kE;rzJ)rdbYF^JV91;!v)r|^qv%K0=2ALc3AFOhOs^$m= z4K&ut)kr2Rq-9?uGGDArFJv;{&3SGwe`hNe9bANFE+y^!yT?f!D1}C%d zNs*j{C*k*n!cF`Wj(2Zbz2Lkn_54>(XZyn!SIKVWV9 zANcs=&jCZAs_Won5%22cW|i+pAp3a z%xd&?CuF$Q=;6aJ!XYI*=s+C$)6kfVtEuAN4wZ`)`0IXmaCF2u06*gA1rF-o z{q*!P3}xpyh05jWtd9uT+b!RzHzbgXkEqz}JuFutKvO8~OHOkPDtObea4zyI^erT5 zfVRj~Tv7@ns;GQ)i4;kr3dk5L>6QV9LFvFb1k*N?{Fj zqH-_FBBVcmH_`?*rH4tzU90tpZ|fO^d?<%rmx^~v{|kki+^3Bb zpp^U6WIp?B$!E6U&o|@LHskE`xzB8F;>tdk`{>BzCSv-z+;G&FUHGN} z{#YFnkX#o{4dfb;^25*j;&M73F56!Wz< zJIa&Z4irZ(a)tP+in05L%CFpd_2cc< zl+*U~hFs3IEQ$;G`I{Ql!&=c#VYFpRw)thcilgx!_{%pTJGOW?67jY(U_GYOYklWh z!$W|5K)yDxwUXm5pV@E+888&Ys;{=n_YifkKWK+>)YBcMN|w<@`1QzkZ@9;2Y3f5l zR2SK{NBz+0DEfxJ=l0@m5QT8;4oexJa@G;*bO(jbJ2Hp1akourwW^=Pu;l9{Ovp@6 z-;`d^HoZH0uA8W=EoVT(BFUZm2f(j*CHgAoAROT?hm$P*7K3=)^Z!EEanBXua2}0! zr4LEI2%^znFCs?~qe>AEf@t{Hi_qgo1r4i%*bk%9AhwQq%=X;c^vM&mSM0Oqd++AO zho!W(fPQKpOOr&|VzuvuZvD2HZm@HygKAVcYB+xjY!VuD8pl#Mrl+_b^Ib^a@fWkp zs-X*{fi6b@h4FE>Boxb5iyCF>-9e99f}tHlO*b0a<#lKi1X$ZQw7m&rwG+81`@SbF zqe1QU)y7=S&DFKJy6SX9hwo52)10P)g=)tqv;*GLbiap$-&Mk&y2L|M*pm;-SIc50 zO6D83$YcFROI?(SC^XJ?4%PNN)*srwjI#vi{5@~I@3o+W@mfwtd;5KL&m&=d>roWU zks|83mWBg=46H#C(N-&u{Z-71fcLhPyks?Cq7*{tN}P7xy=!Tsjk|U&-nNKFC-#eV zALT(HT1jqAQB+hcNvilgK9V#`))^A`S(uj{O6g{S<7!de-JtW{<8qCdC(LG3Df6JQ zP-2zph0;VQi1BPJQ%Yq@YOBzer_yD4pC}AV%$}kgimva({iN%17A4}BNt!1lp@Zl3 zyg^zLFjEiBp4>d}@(>Z@pF86pDnF*r%!AMKEj$5|v6%sqJ8(D=)seKXsjTeD|P_*qA>r5<*{r>s+mDd_! zBPerD55v5bC?|*EYB76E9{{&zpS3MdX#tKx*gXVMp3uS(LqM$b^42iQTO-*+ni6{F z=lprW5NaHre(+jq_kKmsJ?qSKQwCRM`;sxGSQlGbyIO0_Zbxr!vdL7;w zQK^|?RlF&RLdA<#1LqfO<&pH_hu2qEFQ5J6EN3>0wkqs~RtlQ+;%;(-)4{Qx59z`g z)j70MSI_ieG0EPbl@`c@55ubVALOYo(`oA26MWgCq;_Aj`7Dgu!*41QxX-bi@>rNE z1gW&lNWWg=CzhW?e&C|#(-R71stU7j)XUJFH%eN?)`ddTBv|b?&jM}oODo)o^u^~4 zL6NIdnDv#KwpVqZEU)(I#v4`j6-p)_ZB$*Zs9Ir}MVNV&Ww`{{VxT_t-K1Hmd0F#_ zt!pu4zNlo`j1p(P4>~-MF3Ry*hy+&5>=}~9jJxBQf0_yZ*s0`w9F9}@b>gJn9sa4r zIaPsK-IAo6Og*j^lBTcB<0~cP&>{5*7CBJ zEIx7uzK}Xbf$c0idQTeDA(PH`tH^%gOhjaI@NnWhpP1DFtt|Q4sb0?4bC%o>yru^$CYQQh ziomw~twxn%-+urS-b`@^f$k{xn+I|3K${%x5zzM1+)pWYtEvrhw!pILmV$`cVwNty zQP8hI!;;^XbOWRJb03AMlmR{Q6IUpqhw&}aQCAH&QqL1M@oq_$9nC3}5z49(4nvRkS7pmrHgX@%NnR2=A9+Gs zauOxU@MZ`%sLFhN<6$qB_gH!Bv?>p^JQH@g>};4+9%u{t^wAKGI66Cpyfi$9(ri5_ zhGH~!F5G7i(_K8ChJ`eHtl z?NH1`>Fb^B>!ta){E?djOkSC~U$G>_%D-}lm_XF@6pLrc*2S~3TBH5$viYwMh!yI1C{W| zW`5lB7AgC?k>6(zU=am73F8#_1o~kH;m72kKL|J40`H8%KD_BZfR?VmUi+g1x(VlM z#NRr=Qt~L;1VCKx<0i{?zfzbz_!-KXFJ!!*y-sdcnP$3?1oz3bzFmP?4ThuCo#sgA)GMQo^`Gx=lr$19n(68TAU%!3n6!0-H+!0q zBGY}YZQbX(!*2oLFk*0|5zeo+NG2nd>UO*fq*!w^2(LvwI@Z7R;vi^V`vaJK0{{RH z+E4NCOZ@w)W6OD9qJfu2VYQ+>j#D{s-k$~Bc~HRjMpY2Kotm)TGqLuuohBb;%gwp% z!0-Y!AY*)9rBrtmN2UJ^ylCnEcGJ}hBv{$Z&A7aKKP;!sACc2$i=0GL2hpr3h>W@l zL*5lY(`l8J0=~aa@0y8_0yonQm}MPtf4;OgpO!Y`xQL=3*^0i#Zi-0JZ>8;PfOB@J z6?3NK;8CW~tJ+ra%Tn+qfE3h9oDLT;Tn_tDc#ku;O%IN+AJ9>D2j$3Bo;HUO2V73PKW3_)ouh>CH5;PujqQeQ!@RO#G zASZ;PB87lLu2O0UiKOKQ@GA@XYBZu*Oox9Ns5AQGf&(4 zo)f$$+&HGhub`oq6RfF=UK zkAK{3|8{qgoDar}=-0E=qfR4OQ{W?h@TjwX^eA}zh=a}=>$}GKqOndI>+{BX&{&Tf z>qTQ7t$$sw8bJUj_b2KtpNiQ(ewQ?MpR|75-h8i8kV(D_)EmBd5e2O)w{Ng_u)I7= z@Qwu%ct(}4ef$e`qJb!4?sDsOtRd!OMtd~Gp(IXa&P@8I2cJ&I(t}@~)qBHRFVM^* z64l-wUEBhD=-k{P=AbyQXL?32^x87|*ROthA)LUe-o@;|lDgCUBnE$*vqq}0$Eh^= zwke^lSkQyXT)1{!*kcB@@OzBs>K;fFu<%WwzSBT5lWyUN8J`R{Fi1NFjxY%);HdYkAjQY_Ch|{F>DvwF=A#@)K7EK;gSpvdRO=byjO)EU z7@O)^0l^c))+l%&KcfP51!yPpDCUUbIW@G~uIZgLeZ5b@f5xO@KIdOdhut2IJoRp7 zYn)}`e~X}rbB{oPYu+EKqs_b3<8OmwoR19rX8UmeYnou__Q@J}r`Om?Ar}3?RN|*k-gZw6V zy!&LRYDrI@&3w1Ne#Z&Yq(%QI;DG+q$Sx-}f3?Z9@cT6XrN_I4$DrDhA5F8>lplKa zZP$AB=PWo%N-U3dLkppWw4W|yYaI0L)uX&9vAsA;j%MVy1`FI_P4Us69+*~6H>`wVn(C-)#W@c6_X+4h1h z9+eQicW0Ue+vOFu~9{VQd6kNDYym_4J!WWEC5K{&Vqo5 z7jy8k}srs(lw+Eo6>>L?X51_LL@-xuuWV@q?O{pcbD8|w7 ze~>4RhD?D%w&FjVt$CCTrxiX6XH?m&?PDpF6>bl=BoE+P7TLZ@vy6eBt5F)U16`(H zNelEVni5C#0Co*GGSr+9jO1J_X$2Pxn+6pRRL{`h&d0~7C3MVmY+$%^w%h-&9-+u>0eBfbVOF7YvO4q_TYY?51l3Lm)Orh{dQ=Gkk!$^ zya$Cm*1W)*j#@Ey!#;Z$dFq4QX{Iqxy^8qW@OF9XPF`SAFDgP0#msD^^fpep>NVty zV@X-ol`MEzMwP0voUEa-M2fJD?62=&{HHG2Uq1)PC|teYDzK9)|BvnFqC+XuX(Y?lix7}g7Dg@^aggI_W(jI`#hdU@&2^<1f<@}O4*B7T$q(h7EsTM% z#oJMbGO)uabH_ez_x5h~_Z3$BISMtg=m94VJs{aI^vY4-1Rq)-9I2Z|BT#b&Y>m~3 z(Z1B8L|CULfq{r|==EyWI5@Ey#Kdhb#a0gLJ*RQMin8cqV8)Ez@E7D`r8oGEODY;?fL+jG32pH^+EN z!pH|K8d=#^Qy`kyUg{7hGt5cOQ``VqVh&P!`hJI8|057i-^jV$G-i z8$Z82NYd_#PVbV@JAikWqjDWFJXx`*vWi?rg z+$W$3?JB8QAkC*yGukQdw_{n0qYEAQT7=5T_t{chuUA_1b+outoQXj$hq0`l{E)bI4G4HCoeq|2>{o(>vPgbhbTeDLjCCdx8CAVp1!!Kw(tW2iD%s1)FyPRI2 z{vAIc*IYZPBs$8V zIoQs8tht(>M`XJ(`Kd!y$P0<;%|q>Qdu`R6#zmI-6T@n#$zo73s6H&iYhptnR5RD8 zJfT@vc@Ju~&;ZUdMk@vijR4PRSg(3Pah2Y%kMnAkjSsr{TpJ!VTgQ>bG|-&Ox7&4y z9a0x|%w{Y7ThyT#hIaJ zx=AnlqJXc9Z}QR8yyb|s5M|Bm5UHQ5N@ER4w$82f>#A9Zl|7lUGN2Hh?fAeQ@&fn0 z%yQGm6t-D(tnpO75LO3gR6%La?m^p`Q*&4)ukLM(d)xzWZ#pEv4@r0%`R*XZJBUWp zfDHrGM)1>TvC-n6Xf%s2`X$!!m^@18qTq<$MqMeTZS#PG1DrbxGV-qRpSmH zL!FT&msGaXbdrXDA#nJWA1;9`PG-ZF8Gb^AK8P6m~^RSs8#lv;ud52xq0j9 za-H9dM+P}O_TA8=LhsPd=6yb+4%#V0fZ|)Oa99&h58&$Ji_5`$Ni!YC%3sQ-Qq;R7 zeAD$knG{as<~6ne==P)Bf^3K#DV}kQy00EZ%$7Tt+@{gBr{-umwyFz>#Qcos(o+(0 zxrYlo2x-kVtFL?CdMX>p{(5+bj9(iL6JAQGC*6@;FxEDBf8}a9t7qujb%V|=7sy#X zhv}~8INo(l9gJU!fc~@JR9%)j>b+^aT-3XxB~2UC*&RrK>p})xiR_!LCfmE%*D-dn z+vVn!Sc6?b&ekq=;`f+PpxluJk_?MXVA?2j)$$q{&Z^w+@(ySd$i{m3?dYxM@3<$F zIV`h2Ool=IK&fc42wtNDphL;Q5kOrFbx%U&ZJ_g;gdV*UBqQ zRf}(@Cstj4RjA9#nzwrGC6J$|v$EE~OIfn@J%FGm90^%{gM-C9Cdmz``GVw$5hBNQ z3m%#Um!;I=LBac8-OzBuQG#N4sqWMZ_0iTJ?nu~odF9+`pNu61FYU@%>IW}ykV{v` z3%fe*Om*CaFVqWpdjosNC^_7pPZpQC1ED_(oYpEOx8mG6@yDP#Vxo7^O>m!JOn)CX z8n><9v5e$?Pu(+>8~hy)7E3t*ThMCXhhcb|6Q)XcXx$u`HWEgyD4Z9ZP(I>>afUR@ zD`f-lmXnOgG<`weket#n1~;14xx!qAF08&t-a!%?9PkpAJ<@Qt_Vzx)QAzc;M0QEG zL5j)B!=YaPBTiZ885e2G0HuE64q%{PtA?g+4S63e*|I`(11#DhS-(hRF70I*p_xt7 zQ^=|I01&>&)49x$d6)TXh0?vvg+&M%EYtJlWOyTPKkB7KY_ZcA$8sN7V}-FGWE?!NQ0Ybvl3 zk?H$@I!I6|=`i84_Jh_r7mnr}l=xOkj2bzSO$BMcrA;*FFdfvLiOEo?lAhc2?e54Q5lf7MUC;X7( zHSg_R$@leH81E9L#pjjZ0i`@KGdW7SD9i>n}b7M`?M9i_pS`FctJLJ|W-9X`vzbe0t# zOYOY(pBGn~BH{R@Hg?jE4u%Pu8IAK)kI8Zd@Aqr93R;}P{Sb)gElzajXp>3wBq(JU z67`Yc4_L4z?em$@K4Y!!^sz(GcXM;FyZh?Jzb?-%UjKCVoGBjFGs&K%JfR02vZyV| z8;Re$@@~~c;H_sNN`PYQ18JOkom@(;+V+iw7mB8(GZ5TghWfHK3&*WwTAzh8hh;>L zugv!LW==VRmM%NB;hk`X^*vS(ZK1FtbVuDE{m{Jrte77;fP9JhO_Z%mj0UR~28c@x z5Y$vJ&B)NlCA05@00ZG$c)5kZ+Bn@m!u@!dB%?Ik@y)C2wSJ2unkI=ngWbll`2D@3 z00m+}tk)y|(yhUE^clvFjKna2uEq9=U5(HPA~FeumqvzA5J@m-rq5`~ISH3~;`xVb zLDnipxuW&zn0i-(>B^-gYX2B9kfOD=;59w7@Zxo7MuwR^z)>5$%5nB7Gxp&;oKsZQ zdB{?2I@zhp!$swKoU^#b9GnFT3OE$We%^aODLji0Vp9JT#j80jUZIW|5NE>*L7-lJ z(tLLnKT9dTV%U4fpv#wBEyYI8fJKWG{3Dy9Uq+@w%al=LTOPx{TgRLh+-9be61^SG z;-nbp;eu)l3lryZPiw6$Em;j?v78{POt$3j6|X+K91D!?)c*! zg+<%Rd8fACGk8Jd_?Ba10!xt#VYKmu-`hgR>kUhO#sq$Og$r9!I0Xfdc#2#vg6L(3 zDAWs%gVVH+NN#-}2Yr@kNpOg39PTyM`LB!IVz^6gg1d>d>BO?IK1J0#X;aH;LZ2s1 zm}kUrz;ixi*7(!sZ?v}Ypvd>kSEBxQ6J~$!>&RM1Ju28?{{WJCUq0}RqA)%1T%Tj~ zT07#px$0OT=jH2{!>Me$Zf6>G%)x>)%Q{f#wz{)#Y7@}5Y^AaXcfIt)6r_%);f!mtJ~ z3vC-t6hfQYaS*h$K@@$hmakt!kSlho=BbY>V*ia~)`8oB_8%SYfc4pCIBrFoZ@lrbDR`HFf&}Qi%S7IY?$*s4JhD95G!MnUI zx@ZlVBlr-Xclaera|^T{tWHi|g%u-z)N?a{y*}e@5Hi~>>teVKvSzn8>C39u?(;b< zd@E>smvKxnh#gY`sCQT*7IIyDJ`*QGbbBCJ z2QSscGW9*p=mjl)Xb897fY$|2K7N~k9C*{13Q9S8q!`9}7t zK3^+(Y~ZsuGFxSYc_jWuuAx$1!N@*^f9mC9@}zIF)hp6jB#v!|G!@a-ow{%emYHjF znd6Lw0p9f5r)Ovf?Ko`$ScI-m&ehe)Nk>_n^%Ij0Up)$XlyRJ5F15QcPALJIjiEH< zaZI7J$Lw8JFC)@|)(2JoGQO0{D7=(6hTM#5q{=iwT!~&Ws`a+j8$BJ(=w0ej(iu2R z7cA0E6IT=nsGYc@14CZ2$Qutej+c-@Ug}T%^i*s#@t?N^gLfcoiH$K@M!{p{7usgjC&W5ODhpmnT)Rj+(HoH;#LKbCYmKxqUBw%iREl?C z*G+=u0eFP|(~g{wlbj$vSz#-4yKx!A@C^k{ZJGpASzyHSLKf!m@B&7|c*ub9L~w%E zMEMe7ez=Wv8}9i4G6D|cFYkFwiX~=PIld$^&3&=v4Q{OJAoh6bUT*Am2COof+OnYG z*#H5xoOHLAOUO9<0$tOTo|5Jj7Pt`uOSrN&p!(p7OuQhvdrMLaQ=xw_y} zz4?B#kMFBlcGY(0oz?Q_c$ibe?$cc#MynbObtfDeQCCBRQGzA@&B*Q2h)&@7xKi`j z;^cips(~8k(nIy&Zlp%-sTo&4kdr%~4fo~}larH)Q;_3yUwt`a(L^R<6gzo+$BMDj zkpXCj>NLQlrr4skIB{Av3Cxk7U`Qs?`yEB>6gjl=xEl28kY65WnK^^m^QH+r_@)@l zo7b~h1^EVLj6S+%#Sk5qhQWsySFbN$Uqp>}^D%j?Z6MI6q2FpuW^;_7Gnh7J(`48L zRW1yF9mqG$&u?#r^IMQYZso57eh!J~HB!R`U+KLvK3>pd{KKUB_rB@l)xh(#!A($Z zdP86H+L3615X<5R-RX>%eJdf!#)LL)lZ~SUt)&+UXi!{6f zWfwRIqwspQRcoAvfASHAREA%;0>x^!;^{1*n6ykB8?rxolq^crS51O0KeTzZR+d2x z0kc+z$E^i!J~Sw#g|gnEgS6*Aqh0|Muo1j}_se(B0@0g(`uH&-9A}^R45Sk-ah`wY z-LJiyrn%%zmrSX+Lvojn7iBTHji$gD8^_}bM)SpB4O^-UarHLKbumkFv28t}=01PS r#L<%{-!v51>Ni;I$J0;muU<*heVCig&kK-%%A","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formElement","action","preventDefaultListener","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","DEFAULT_REGEXP","inputType","weekParser","isoWeek","week","addDays","numberInputType","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","NgModelController","$modelValue","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","pendingDebounce","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","$cancelUpdate","this.$cancelUpdate","$$realSetViewValue","this.$$realSetViewValue","this.$setViewValue","debounceDelay","debounce","ngModelWatch","formatters","modelCtrl","formCtrl","ngChange","required","ngList","viewValue","CONSTANT_VALUE_REGEXP","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","$attrs","that","ngModelOptions","ngBind","ngBindWatchAction","ngBindTemplate","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","$transclude","previousElements","ngIf","ngIfWatchAction","$anchorScroll","srcExp","ngInclude","onloadExp","onload","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","$compile","ngInit","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","$first","$last","$middle","$odd","$even","ngShow","ngShowWatchAction","ngHide","ngHideWatchAction","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhen","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"] +} diff --git a/portal/dist/usergrid-portal/bower_components/angular/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/angular/bower.json similarity index 62% rename from portal/dist/usergrid-portal/bower_components/angular/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/angular/bower.json index 5df52afef6..877c8cc5af 100644 --- a/portal/dist/usergrid-portal/bower_components/angular/bower.json +++ b/deleted/dist-cov/usergrid-portal/bower_components/angular/bower.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.3.0-build.2812+sha.2d5a849", + "version": "1.3.0-build.2607+sha.b2e48e6", "main": "./angular.js", "dependencies": { } diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/Gruntfile.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/Gruntfile.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/Gruntfile.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/Gruntfile.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/LICENSE b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/LICENSE similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/LICENSE rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/LICENSE diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/README.md b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/README.md similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/README.md rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/README.md diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/bower.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/bower.json diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-chartbeat.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-chartbeat.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-chartbeat.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-chartbeat.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-ga-cordova.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-ga-cordova.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-ga-cordova.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-ga-cordova.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-ga.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-ga.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-ga.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-ga.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-google-analytics.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-google-analytics.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-google-analytics.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-google-analytics.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-kissmetrics.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-kissmetrics.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-kissmetrics.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-kissmetrics.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-mixpanel.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-mixpanel.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-mixpanel.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-mixpanel.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-scroll.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-scroll.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-scroll.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-scroll.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-segmentio.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-segmentio.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics-segmentio.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics-segmentio.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics.min.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/dist/angulartics.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/dist/angulartics.min.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/karma.conf.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/karma.conf.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/karma.conf.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/karma.conf.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/package.json b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/package.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/package.json rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/package.json diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/chartbeat.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/chartbeat.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/chartbeat.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/chartbeat.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/google-analytics.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/google-analytics.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/google-analytics.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/google-analytics.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/kissmetrics.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/kissmetrics.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/kissmetrics.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/kissmetrics.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/mixpanel.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/mixpanel.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/mixpanel.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/mixpanel.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/a.tpl.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/a.tpl.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/a.tpl.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/a.tpl.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/b.tpl.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/b.tpl.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/b.tpl.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/b.tpl.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/c.tpl.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/c.tpl.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/c.tpl.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/c.tpl.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/root.tpl.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/root.tpl.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/partials/root.tpl.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/partials/root.tpl.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/scroll.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/scroll.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/scroll.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/scroll.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/samples/segmentio.html b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/segmentio.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/samples/segmentio.html rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/samples/segmentio.html diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-chartbeat.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-chartbeat.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-chartbeat.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-chartbeat.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-ga-cordova.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-ga-cordova.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-ga-cordova.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-ga-cordova.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-ga.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-ga.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-ga.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-ga.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-kissmetrics.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-kissmetrics.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-kissmetrics.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-kissmetrics.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-mixpanel.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-mixpanel.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-mixpanel.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-mixpanel.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-scroll.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-scroll.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-scroll.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-scroll.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-segmentio.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-segmentio.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics-segmentio.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics-segmentio.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/src/angulartics.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/src/angulartics.js diff --git a/portal/dist/usergrid-portal/bower_components/angularitics/test/angularticsSpec.js b/deleted/dist-cov/usergrid-portal/bower_components/angularitics/test/angularticsSpec.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/angularitics/test/angularticsSpec.js rename to deleted/dist-cov/usergrid-portal/bower_components/angularitics/test/angularticsSpec.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/apigee.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/apigee.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/apigee.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/apigee.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/apigee.min.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/apigee.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/apigee.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/apigee.min.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/bower.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/bower.json diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/books/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/books/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/books/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/books/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/apigee.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/apigee.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/apigee.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/apigee.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/jquery.mobile.icons.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/jquery.mobile.icons.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/jquery.mobile.icons.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/jquery.mobile.icons.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/theme.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/theme.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/theme.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/css/theme.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/js/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/js/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/collections/js/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/collections/js/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/jquery.mobile.icons.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/jquery.mobile.icons.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/jquery.mobile.icons.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/jquery.mobile.icons.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/theme.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/theme.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/theme.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/css/theme.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/js/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/js/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/entities/js/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/entities/js/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/jquery.mobile.icons.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/jquery.mobile.icons.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/jquery.mobile.icons.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/jquery.mobile.icons.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/theme.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/theme.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/theme.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/css/theme.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/js/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/js/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/js/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/geolocation/js/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/messagee/app.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/messagee/app.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/messagee/app.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/messagee/app.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/messagee/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/messagee/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/messagee/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/messagee/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/messagee/usergrid.validation.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/messagee/usergrid.validation.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/messagee/usergrid.validation.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/messagee/usergrid.validation.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/monitoring/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/monitoring/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/monitoring/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/monitoring/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/AndroidManifest.xml b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/AndroidManifest.xml similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/AndroidManifest.xml rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/AndroidManifest.xml diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/ant.properties b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/ant.properties similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/ant.properties rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/ant.properties diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/PushNotification.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/PushNotification.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/PushNotification.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/PushNotification.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/cordova-2.7.0.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/cordova-2.7.0.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/cordova-2.7.0.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/cordova-2.7.0.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/css/index.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/css/index.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/css/index.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/css/index.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/cordova.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/cordova.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/cordova.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/cordova.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/logo.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/logo.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/logo.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/img/logo.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/js/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/js/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/js/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/js/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/main.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/main.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/main.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/main.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/master.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/master.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/master.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/master.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-landscape.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-landscape.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-landscape.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-landscape.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-portrait.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-portrait.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-portrait.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-hdpi-portrait.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-landscape.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-landscape.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-landscape.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-landscape.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-portrait.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-portrait.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-portrait.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-ldpi-portrait.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-landscape.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-landscape.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-landscape.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-landscape.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-portrait.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-portrait.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-portrait.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-mdpi-portrait.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-landscape.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-landscape.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-landscape.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-landscape.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-portrait.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-portrait.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-portrait.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/res/screen/android/screen-xhdpi-portrait.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/helper.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/helper.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/helper.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/helper.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/MIT.LICENSE b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/MIT.LICENSE similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/MIT.LICENSE rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/MIT.LICENSE diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine-html.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine-html.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine-html.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine-html.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/assets/www/spec/lib/jasmine-1.2.0/jasmine.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/build.xml b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/build.xml similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/build.xml rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/build.xml diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/appinfo.jar b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/appinfo.jar similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/appinfo.jar rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/appinfo.jar diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/build b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/build similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/build rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/build diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/clean b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/clean similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/clean rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/clean diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/cordova b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/cordova similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/cordova rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/cordova diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/log b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/log similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/log rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/log diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/release b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/release similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/release rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/release diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/run b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/run similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/run rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/cordova/run diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/android-support-v13.jar b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/android-support-v13.jar similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/android-support-v13.jar rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/android-support-v13.jar diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/cordova-2.7.0.jar b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/cordova-2.7.0.jar similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/cordova-2.7.0.jar rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/cordova-2.7.0.jar diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/gcm.jar b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/gcm.jar similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/gcm.jar rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/libs/gcm.jar diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/proguard-project.txt b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/proguard-project.txt similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/proguard-project.txt rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/proguard-project.txt diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/project.properties b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/project.properties similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/project.properties rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/project.properties diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/ic_launcher.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/ic_launcher.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/ic_launcher.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/ic_launcher.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/icon.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/icon.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/icon.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-hdpi/icon.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/ic_launcher.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/ic_launcher.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/ic_launcher.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/ic_launcher.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/icon.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/icon.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/icon.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-ldpi/icon.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/ic_launcher.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/ic_launcher.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/ic_launcher.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/ic_launcher.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/icon.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/icon.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/icon.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-mdpi/icon.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/ic_launcher.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/ic_launcher.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/ic_launcher.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/ic_launcher.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/icon.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/icon.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/icon.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable-xhdpi/icon.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable/icon.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable/icon.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable/icon.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/drawable/icon.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/layout/main.xml b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/layout/main.xml similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/layout/main.xml rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/layout/main.xml diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/values/strings.xml b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/values/strings.xml similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/values/strings.xml rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/values/strings.xml diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/xml/config.xml b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/xml/config.xml similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/xml/config.xml rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/res/xml/config.xml diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/CordovaGCMBroadcastReceiver.java b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/CordovaGCMBroadcastReceiver.java similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/CordovaGCMBroadcastReceiver.java rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/CordovaGCMBroadcastReceiver.java diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/GCMIntentService.java b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/GCMIntentService.java similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/GCMIntentService.java rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/GCMIntentService.java diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushHandlerActivity.java b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushHandlerActivity.java similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushHandlerActivity.java rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushHandlerActivity.java diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushPlugin.java b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushPlugin.java similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushPlugin.java rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/com/plugin/gcm/PushPlugin.java diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/me/mdob/android/androidpush.java b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/me/mdob/android/androidpush.java similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/me/mdob/android/androidpush.java rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/android/src/me/mdob/android/androidpush.java diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDV.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDV.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDV.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDV.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAccelerometer.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAvailability.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAvailability.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAvailability.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVAvailability.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVBattery.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCamera.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCapture.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegate.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegate.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegate.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegate.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandDelegateImpl.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVCommandQueue.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConfigParser.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVConnection.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContact.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVContacts.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebug.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebug.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebug.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebug.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDebugConsole.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVDevice.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVEcho.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVExif.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVExif.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVExif.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVExif.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFile.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVFileTransfer.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVGlobalization.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInAppBrowser.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVInvokedUrlCommand.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJSON.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVJpegHeaderWriter.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocalStorage.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLocation.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVLogger.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVNotification.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPlugin.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVPluginResult.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVReachability.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVScreenOrientationDelegate.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVScreenOrientationDelegate.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVScreenOrientationDelegate.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVScreenOrientationDelegate.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSound.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVSplashScreen.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVURLProtocol.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVUserAgentUtil.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVViewController.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWebViewDelegate.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/CDVWhitelist.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSArray+Comparisons.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSData+Base64.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSDictionary+Extensions.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/NSMutableArray+QueueAdditions.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/UIDevice+Extensions.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDV.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDV.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDV.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDV.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/0.9.6/CDVPlugin.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDV.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDV.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDV.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDV.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDVPlugin.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDVPlugin.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDVPlugin.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/1.5.0/CDVPlugin.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/README.txt b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/README.txt similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/README.txt rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/Classes/compatibility/README.txt diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib_Prefix.pch b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib_Prefix.pch similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib_Prefix.pch rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/CordovaLib_Prefix.pch diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/VERSION b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/VERSION similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/VERSION rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/CordovaLib/VERSION diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/build b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/build similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/build rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/build diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/emulate b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/emulate similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/emulate rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/emulate diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/log b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/log similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/log rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/log diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/release b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/release similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/release rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/release diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/run b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/run similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/run rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/cordova/run diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush.xcodeproj/project.pbxproj b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush.xcodeproj/project.pbxproj similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush.xcodeproj/project.pbxproj rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush.xcodeproj/project.pbxproj diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/AppDelegate.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.xib b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.xib similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.xib rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Classes/MainViewController.xib diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/AppDelegate+notification.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.h b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.h similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.h rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.h diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/PushPlugin.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/README b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/README similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/README rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Plugins/README diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/controls_bg~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone-568h@2x~iphone.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone-568h@2x~iphone.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone-568h@2x~iphone.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone-568h@2x~iphone.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/microphone~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/record_button~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/recording_bg~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/Capture.bundle/stop_button~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/de.lproj/Localizable.strings b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/de.lproj/Localizable.strings similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/de.lproj/Localizable.strings rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/de.lproj/Localizable.strings diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/en.lproj/Localizable.strings b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/en.lproj/Localizable.strings similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/en.lproj/Localizable.strings rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/en.lproj/Localizable.strings diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/es.lproj/Localizable.strings b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/es.lproj/Localizable.strings similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/es.lproj/Localizable.strings rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/es.lproj/Localizable.strings diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon-72@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon@2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon@2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon@2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/icons/icon@2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/se.lproj/Localizable.strings b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/se.lproj/Localizable.strings similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/se.lproj/Localizable.strings rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/se.lproj/Localizable.strings diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-568h@2x~iphone.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-568h@2x~iphone.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-568h@2x~iphone.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-568h@2x~iphone.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Landscape~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait@2x~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait@2x~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait@2x~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait@2x~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait~ipad.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait~ipad.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait~ipad.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default-Portrait~ipad.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default@2x~iphone.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default@2x~iphone.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default@2x~iphone.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default@2x~iphone.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default~iphone.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default~iphone.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default~iphone.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/Resources/splash/Default~iphone.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/config.xml b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/config.xml similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/config.xml rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/config.xml diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Info.plist b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Info.plist similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Info.plist rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Info.plist diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Prefix.pch b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Prefix.pch similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Prefix.pch rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/iospush-Prefix.pch diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/main.m b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/main.m similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/main.m rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/iospush/main.m diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/PushNotification.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/PushNotification.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/PushNotification.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/PushNotification.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/cordova-2.6.0.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/cordova-2.6.0.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/cordova-2.6.0.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/cordova-2.6.0.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/css/index.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/css/index.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/css/index.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/css/index.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/img/logo.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/img/logo.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/img/logo.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/img/logo.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/js/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/js/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/js/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/js/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape-2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape-2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape-2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape-2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-landscape.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait-2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait-2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait-2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait-2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-ipad-portrait.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape-2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape-2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape-2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape-2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-landscape.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait-2x.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait-2x.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait-2x.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait-2x.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/res/screen/ios/screen-iphone-portrait.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/helper.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/helper.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/helper.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/helper.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/MIT.LICENSE b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/MIT.LICENSE similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/MIT.LICENSE rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/MIT.LICENSE diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine-html.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine-html.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine-html.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine-html.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/push/ios/www/spec/lib/jasmine-1.2.0/jasmine.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/readmeSample/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/readmeSample/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/readmeSample/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/readmeSample/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/README.txt b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/README.txt similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/README.txt rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/README.txt diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/codiqa.ext.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/codiqa.ext.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/codiqa.ext.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/codiqa.ext.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/ajax-loader.gif b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/ajax-loader.gif similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/ajax-loader.gif rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/ajax-loader.gif diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-black.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-black.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-black.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-black.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-white.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-white.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-white.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-18-white.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-black.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-black.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-black.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-black.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-white.png b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-white.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-white.png rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/images/icons-36-white.png diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/jquery.mobile-1.3.1.min.css b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/jquery.mobile-1.3.1.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/jquery.mobile-1.3.1.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/css/jquery.mobile-1.3.1.min.css diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/index.html b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/index.html diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/codiqa.ext.min.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/codiqa.ext.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/codiqa.ext.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/codiqa.ext.min.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/index.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/index.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/index.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/index.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery-1.9.1.min.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery-1.9.1.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery-1.9.1.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery-1.9.1.min.js diff --git a/portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery.mobile-1.3.1.min.js b/deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery.mobile-1.3.1.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery.mobile-1.3.1.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/apigee-sdk/samples/usersAndGroups/js/jquery.mobile-1.3.1.min.js diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/BUILD/BUILD.js b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/BUILD/BUILD.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/BUILD/BUILD.js rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/BUILD/BUILD.js diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/Makefile b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/Makefile similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/Makefile rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/Makefile diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/README.md b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/README.md similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/README.md rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/README.md diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/bower.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/bower.json diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/component.json b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/component.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/component.json rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/component.json diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/RTL/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/RTL/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/RTL/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/RTL/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap-responsive.min.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap-responsive.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap-responsive.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap-responsive.min.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap.min.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/css/bootstrap.min.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/assets/css/demo.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/css/demo.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/assets/css/demo.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/css/demo.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings-white.png b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings-white.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings-white.png rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings-white.png diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings.png b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings.png similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings.png rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/assets/img/glyphicons-halflings.png diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/custom-class/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/custom-class/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/custom-class/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/custom-class/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/hello-world/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/hello-world/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/hello-world/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/hello-world/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/hello-world/withoutBullets.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/hello-world/withoutBullets.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/hello-world/withoutBullets.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/hello-world/withoutBullets.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/hello-world/withoutButtons.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/hello-world/withoutButtons.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/hello-world/withoutButtons.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/hello-world/withoutButtons.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/html-tooltip/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/html-tooltip/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/html-tooltip/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/html-tooltip/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/multi-page/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/multi-page/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/multi-page/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/multi-page/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/multi-page/second.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/multi-page/second.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/multi-page/second.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/multi-page/second.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/example/programmatic/index.html b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/programmatic/index.html similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/example/programmatic/index.html rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/example/programmatic/index.html diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/intro.js b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/intro.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/intro.js rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/intro.js diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/introjs-rtl.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/introjs-rtl.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/introjs-rtl.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/introjs-rtl.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/introjs.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/introjs.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/introjs.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/introjs.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/minified/intro.min.js b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/minified/intro.min.js similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/minified/intro.min.js rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/minified/intro.min.js diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/minified/introjs-rtl.min.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/minified/introjs-rtl.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/minified/introjs-rtl.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/minified/introjs-rtl.min.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/minified/introjs.min.css b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/minified/introjs.min.css similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/minified/introjs.min.css rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/minified/introjs.min.css diff --git a/portal/dist/usergrid-portal/bower_components/intro.js/package.json b/deleted/dist-cov/usergrid-portal/bower_components/intro.js/package.json similarity index 100% rename from portal/dist/usergrid-portal/bower_components/intro.js/package.json rename to deleted/dist-cov/usergrid-portal/bower_components/intro.js/package.json diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md similarity index 81% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md index 53b206a5ab..d6c5c99028 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/CHANGELOG.md @@ -1,15 +1,5 @@ # Changelog -## v2.0.5 - -- Allow sticky users to define which direction the stuck class shold be applied. (Issue #192) -- Fix bug where short content on a large screen could cause the infinite shortcut to stall after the first page load. (Issue #207) -- Make `unsticky` safe to use on any element. Previously it would unwrap the parent even if the element had never had `sticky` called on it or already had `unsticky` called previously. (Issue #225) -- Fix bug that would cause handlers to be overwritten when trying to reuse an options object. (Issue #253) -- Remove "More" link when infinite shortcut reaches last page. (Issue #260) -- Fix use of `this` instead of `window`, causing Browserify to fail. (Issue #262) -- Stop using deprecated jQuery `load` method. (Issue #283) - ## v2.0.4 - Fix enable, disable, and destroys calls not chaining the jQuery object. (Issue #244) (Thanks [@robharper](https://github.com/robharper)) diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/README.markdown b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/README.markdown similarity index 100% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/README.markdown rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/README.markdown diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/bower.json similarity index 94% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/bower.json index 340f185ee6..16a133113b 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/bower.json +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/bower.json @@ -1,6 +1,6 @@ { "name": "jquery-waypoints", - "version": "2.0.5", + "version": "2.0.4", "main": "waypoints.js", "description": "A jQuery plugin that makes it easy to execute a function whenever you scroll to an element.", "ignore": [ diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/licenses.txt b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/licenses.txt similarity index 100% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/licenses.txt rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/licenses.txt diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/package.json b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/package.json similarity index 95% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/package.json rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/package.json index e184938a5d..f62b20f1cf 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/package.json +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/package.json @@ -1,6 +1,6 @@ { "name": "jquery-waypoints", - "version": "2.0.5", + "version": "2.0.4", "author": "Caleb Troughton ", "description": "A jQuery plugin that makes it easy to execute a function whenever you scroll to an element.", "repository": { diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js similarity index 50% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js index 9b5b3f4292..7c597225f9 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.js @@ -1,8 +1,8 @@ // Generated by CoffeeScript 1.6.2 /* -Infinite Scroll Shortcut for jQuery Waypoints - v2.0.5 +Infinite Scroll Shortcut for jQuery Waypoints - v2.0.4 Copyright (c) 2011-2014 Caleb Troughton -Licensed under the MIT license. +Dual licensed under the MIT license and GPL license. https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt */ @@ -14,7 +14,7 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt } else { return factory(root.jQuery); } - })(window, function($) { + })(this, function($) { var defaults; defaults = { @@ -27,43 +27,40 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt onAfterPageLoad: $.noop }; return $.waypoints('extendFn', 'infinite', function(options) { - var $container, opts; + var $container; - opts = $.extend({}, $.fn.waypoint.defaults, defaults, options); - if ($(opts.more).length === 0) { + options = $.extend({}, $.fn.waypoint.defaults, defaults, options); + if ($(options.more).length === 0) { return this; } - $container = opts.container === 'auto' ? this : $(opts.container); - opts.handler = function(direction) { + $container = options.container === 'auto' ? this : $(options.container); + options.handler = function(direction) { var $this; if (direction === 'down' || direction === 'right') { $this = $(this); - opts.onBeforePageLoad(); - $this.waypoint('destroy'); - $container.addClass(opts.loadingClass); - return $.get($(opts.more).attr('href'), function(data) { - var $data, $more, $newMore, fn; + options.onBeforePageLoad(); + $this.waypoint('disable'); + $container.addClass(options.loadingClass); + return $.get($(options.more).attr('href'), function(data) { + var $data, $more, $newMore; $data = $($.parseHTML(data)); - $more = $(opts.more); - $newMore = $data.find(opts.more); - $container.append($data.find(opts.items)); - $container.removeClass(opts.loadingClass); + $more = $(options.more); + $newMore = $data.find(options.more); + $container.append($data.find(options.items)); + $container.removeClass(options.loadingClass); if ($newMore.length) { $more.replaceWith($newMore); - fn = function() { - return $this.waypoint(opts); - }; - setTimeout(fn, 0); + $this.waypoint('enable'); } else { - $more.remove(); + $this.waypoint('destroy'); } - return opts.onAfterPageLoad(); + return options.onAfterPageLoad(); }); } }; - return this.waypoint(opts); + return this.waypoint(options); }); }); diff --git a/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.min.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.min.js new file mode 100644 index 0000000000..70785d0718 --- /dev/null +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/infinite-scroll/waypoints-infinite.min.js @@ -0,0 +1,8 @@ +// Generated by CoffeeScript 1.6.2 +/* +Infinite Scroll Shortcut for jQuery Waypoints - v2.0.4 +Copyright (c) 2011-2014 Caleb Troughton +Dual licensed under the MIT license and GPL license. +https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt +*/ +(function(){(function(n,e){if(typeof define==="function"&&define.amd){return define(["jquery","waypoints"],e)}else{return e(n.jQuery)}})(this,function(n){var e;e={container:"auto",items:".infinite-item",more:".infinite-more-link",offset:"bottom-in-view",loadingClass:"infinite-loading",onBeforePageLoad:n.noop,onAfterPageLoad:n.noop};return n.waypoints("extendFn","infinite",function(i){var t;i=n.extend({},n.fn.waypoint.defaults,e,i);if(n(i.more).length===0){return this}t=i.container==="auto"?this:n(i.container);i.handler=function(e){var o;if(e==="down"||e==="right"){o=n(this);i.onBeforePageLoad();o.waypoint("disable");t.addClass(i.loadingClass);return n.get(n(i.more).attr("href"),function(e){var a,r,f;a=n(n.parseHTML(e));r=n(i.more);f=a.find(i.more);t.append(a.find(i.items));t.removeClass(i.loadingClass);if(f.length){r.replaceWith(f);o.waypoint("enable")}else{o.waypoint("destroy")}return i.onAfterPageLoad()})}};return this.waypoint(i)})})}).call(this); \ No newline at end of file diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js similarity index 73% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js index 1befd723fd..ceda329ad5 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.js @@ -1,8 +1,8 @@ // Generated by CoffeeScript 1.6.2 /* -Sticky Elements Shortcut for jQuery Waypoints - v2.0.5 +Sticky Elements Shortcut for jQuery Waypoints - v2.0.4 Copyright (c) 2011-2014 Caleb Troughton -Licensed under the MIT license. +Dual licensed under the MIT license and GPL license. https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt */ @@ -14,20 +14,16 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt } else { return factory(root.jQuery); } - })(window, function($) { + })(this, function($) { var defaults, wrap; defaults = { wrapper: '

', - stuckClass: 'stuck', - direction: 'down right' + stuckClass: 'stuck' }; wrap = function($elements, options) { - var $parent; - $elements.wrap(options.wrapper); - $parent = $elements.parent(); - return $parent.data('isWaypointStickyWrapper', true); + return $elements.parent(); }; $.waypoints('extendFn', 'sticky', function(opt) { var $wrap, options, originalHandler; @@ -39,7 +35,7 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt var $sticky, shouldBeStuck; $sticky = $(this).children(':first'); - shouldBeStuck = options.direction.indexOf(direction) !== -1; + shouldBeStuck = direction === 'down' || direction === 'right'; $sticky.toggleClass(options.stuckClass, shouldBeStuck); $wrap.height(shouldBeStuck ? $sticky.outerHeight() : ''); if (originalHandler != null) { @@ -50,13 +46,7 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt return this.data('stuckClass', options.stuckClass); }); return $.waypoints('extendFn', 'unsticky', function() { - var $parent; - - $parent = this.parent(); - if (!$parent.data('isWaypointStickyWrapper')) { - return this; - } - $parent.waypoint('destroy'); + this.parent().waypoint('destroy'); this.unwrap(); return this.removeClass(this.data('stuckClass')); }); diff --git a/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.min.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.min.js new file mode 100644 index 0000000000..3962802c26 --- /dev/null +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/shortcuts/sticky-elements/waypoints-sticky.min.js @@ -0,0 +1,8 @@ +// Generated by CoffeeScript 1.6.2 +/* +Sticky Elements Shortcut for jQuery Waypoints - v2.0.4 +Copyright (c) 2011-2014 Caleb Troughton +Dual licensed under the MIT license and GPL license. +https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt +*/ +(function(){(function(t,n){if(typeof define==="function"&&define.amd){return define(["jquery","waypoints"],n)}else{return n(t.jQuery)}})(this,function(t){var n,s;n={wrapper:'
',stuckClass:"stuck"};s=function(t,n){t.wrap(n.wrapper);return t.parent()};t.waypoints("extendFn","sticky",function(e){var i,r,a;r=t.extend({},t.fn.waypoint.defaults,n,e);i=s(this,r);a=r.handler;r.handler=function(n){var s,e;s=t(this).children(":first");e=n==="down"||n==="right";s.toggleClass(r.stuckClass,e);i.height(e?s.outerHeight():"");if(a!=null){return a.call(this,n)}};i.waypoint(r);return this.data("stuckClass",r.stuckClass)});return t.waypoints("extendFn","unsticky",function(){this.parent().waypoint("destroy");this.unwrap();return this.removeClass(this.data("stuckClass"))})})}).call(this); \ No newline at end of file diff --git a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/waypoints.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.js similarity index 98% rename from portal/dist/usergrid-portal/bower_components/jquery-waypoints/waypoints.js rename to deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.js index 4f9a33b23f..2987f8711c 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery-waypoints/waypoints.js +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.js @@ -1,8 +1,8 @@ // Generated by CoffeeScript 1.6.2 -/*! -jQuery Waypoints - v2.0.5 +/* +jQuery Waypoints - v2.0.4 Copyright (c) 2011-2014 Caleb Troughton -Licensed under the MIT license. +Dual licensed under the MIT license and GPL license. https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt */ @@ -19,7 +19,7 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt } else { return factory(root.jQuery, root); } - })(window, function($, window) { + })(this, function($, window) { var $w, Context, Waypoint, allWaypoints, contextCounter, contextKey, contexts, isTouch, jQMethods, methods, resizeEvent, scrollEvent, waypointCounter, waypointKey, wp, wps; $w = $(window); @@ -207,6 +207,7 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt function Waypoint($element, context, options) { var idList, _ref; + options = $.extend({}, $.fn[wp].defaults, options); if (options.offset === 'bottom-in-view') { options.offset = function() { var contextHeight; @@ -281,7 +282,9 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt init: function(f, options) { var _ref; - options = $.extend({}, $.fn[wp].defaults, options); + if (options == null) { + options = {}; + } if ((_ref = options.handler) == null) { options.handler = f; } @@ -509,7 +512,7 @@ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt resizeThrottle: 100, scrollThrottle: 30 }; - return $w.on('load.waypoints', function() { + return $w.load(function() { return $[wps]('refresh'); }); }); diff --git a/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.min.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.min.js new file mode 100644 index 0000000000..8281ad7f40 --- /dev/null +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery-waypoints/waypoints.min.js @@ -0,0 +1,8 @@ +// Generated by CoffeeScript 1.6.2 +/* +jQuery Waypoints - v2.0.4 +Copyright (c) 2011-2014 Caleb Troughton +Dual licensed under the MIT license and GPL license. +https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt +*/ +(function(){var t=[].indexOf||function(t){for(var e=0,n=this.length;e=0;s={horizontal:{},vertical:{}};f=1;c={};u="waypoints-context-id";p="resize.waypoints";y="scroll.waypoints";v=1;w="waypoints-waypoint-ids";g="waypoint";m="waypoints";o=function(){function t(t){var e=this;this.$element=t;this.element=t[0];this.didResize=false;this.didScroll=false;this.id="context"+f++;this.oldScroll={x:t.scrollLeft(),y:t.scrollTop()};this.waypoints={horizontal:{},vertical:{}};this.element[u]=this.id;c[this.id]=this;t.bind(y,function(){var t;if(!(e.didScroll||a)){e.didScroll=true;t=function(){e.doScroll();return e.didScroll=false};return r.setTimeout(t,n[m].settings.scrollThrottle)}});t.bind(p,function(){var t;if(!e.didResize){e.didResize=true;t=function(){n[m]("refresh");return e.didResize=false};return r.setTimeout(t,n[m].settings.resizeThrottle)}})}t.prototype.doScroll=function(){var t,e=this;t={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};if(a&&(!t.vertical.oldScroll||!t.vertical.newScroll)){n[m]("refresh")}n.each(t,function(t,r){var i,o,l;l=[];o=r.newScroll>r.oldScroll;i=o?r.forward:r.backward;n.each(e.waypoints[t],function(t,e){var n,i;if(r.oldScroll<(n=e.offset)&&n<=r.newScroll){return l.push(e)}else if(r.newScroll<(i=e.offset)&&i<=r.oldScroll){return l.push(e)}});l.sort(function(t,e){return t.offset-e.offset});if(!o){l.reverse()}return n.each(l,function(t,e){if(e.options.continuous||t===l.length-1){return e.trigger([i])}})});return this.oldScroll={x:t.horizontal.newScroll,y:t.vertical.newScroll}};t.prototype.refresh=function(){var t,e,r,i=this;r=n.isWindow(this.element);e=this.$element.offset();this.doScroll();t={horizontal:{contextOffset:r?0:e.left,contextScroll:r?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:r?0:e.top,contextScroll:r?0:this.oldScroll.y,contextDimension:r?n[m]("viewportHeight"):this.$element.height(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};return n.each(t,function(t,e){return n.each(i.waypoints[t],function(t,r){var i,o,l,s,f;i=r.options.offset;l=r.offset;o=n.isWindow(r.element)?0:r.$element.offset()[e.offsetProp];if(n.isFunction(i)){i=i.apply(r.element)}else if(typeof i==="string"){i=parseFloat(i);if(r.options.offset.indexOf("%")>-1){i=Math.ceil(e.contextDimension*i/100)}}r.offset=o-e.contextOffset+e.contextScroll-i;if(r.options.onlyOnScroll&&l!=null||!r.enabled){return}if(l!==null&&l<(s=e.oldScroll)&&s<=r.offset){return r.trigger([e.backward])}else if(l!==null&&l>(f=e.oldScroll)&&f>=r.offset){return r.trigger([e.forward])}else if(l===null&&e.oldScroll>=r.offset){return r.trigger([e.forward])}})})};t.prototype.checkEmpty=function(){if(n.isEmptyObject(this.waypoints.horizontal)&&n.isEmptyObject(this.waypoints.vertical)){this.$element.unbind([p,y].join(" "));return delete c[this.id]}};return t}();l=function(){function t(t,e,r){var i,o;r=n.extend({},n.fn[g].defaults,r);if(r.offset==="bottom-in-view"){r.offset=function(){var t;t=n[m]("viewportHeight");if(!n.isWindow(e.element)){t=e.$element.height()}return t-n(this).outerHeight()}}this.$element=t;this.element=t[0];this.axis=r.horizontal?"horizontal":"vertical";this.callback=r.handler;this.context=e;this.enabled=r.enabled;this.id="waypoints"+v++;this.offset=null;this.options=r;e.waypoints[this.axis][this.id]=this;s[this.axis][this.id]=this;i=(o=this.element[w])!=null?o:[];i.push(this.id);this.element[w]=i}t.prototype.trigger=function(t){if(!this.enabled){return}if(this.callback!=null){this.callback.apply(this.element,t)}if(this.options.triggerOnce){return this.destroy()}};t.prototype.disable=function(){return this.enabled=false};t.prototype.enable=function(){this.context.refresh();return this.enabled=true};t.prototype.destroy=function(){delete s[this.axis][this.id];delete this.context.waypoints[this.axis][this.id];return this.context.checkEmpty()};t.getWaypointsByElement=function(t){var e,r;r=t[w];if(!r){return[]}e=n.extend({},s.horizontal,s.vertical);return n.map(r,function(t){return e[t]})};return t}();d={init:function(t,e){var r;if(e==null){e={}}if((r=e.handler)==null){e.handler=t}this.each(function(){var t,r,i,s;t=n(this);i=(s=e.context)!=null?s:n.fn[g].defaults.context;if(!n.isWindow(i)){i=t.closest(i)}i=n(i);r=c[i[0][u]];if(!r){r=new o(i)}return new l(t,r,e)});n[m]("refresh");return this},disable:function(){return d._invoke.call(this,"disable")},enable:function(){return d._invoke.call(this,"enable")},destroy:function(){return d._invoke.call(this,"destroy")},prev:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e>0){return t.push(n[e-1])}})},next:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(et.oldScroll.y})},left:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset<=t.oldScroll.x})},right:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset>t.oldScroll.x})},enable:function(){return h._invoke("enable")},disable:function(){return h._invoke("disable")},destroy:function(){return h._invoke("destroy")},extendFn:function(t,e){return d[t]=e},_invoke:function(t){var e;e=n.extend({},s.vertical,s.horizontal);return n.each(e,function(e,n){n[t]();return true})},_filter:function(t,e,r){var i,o;i=c[n(t)[0][u]];if(!i){return[]}o=[];n.each(i.waypoints[e],function(t,e){if(r(i,e)){return o.push(e)}});o.sort(function(t,e){return t.offset-e.offset});return n.map(o,function(t){return t.element})}};n[m]=function(){var t,n;n=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(h[n]){return h[n].apply(null,t)}else{return h.aggregate.call(null,n)}};n[m].settings={resizeThrottle:100,scrollThrottle:30};return i.load(function(){return n[m]("refresh")})})}).call(this); \ No newline at end of file diff --git a/portal/dist/usergrid-portal/bower_components/jquery/MIT-LICENSE.txt b/deleted/dist-cov/usergrid-portal/bower_components/jquery/MIT-LICENSE.txt similarity index 100% rename from portal/dist/usergrid-portal/bower_components/jquery/MIT-LICENSE.txt rename to deleted/dist-cov/usergrid-portal/bower_components/jquery/MIT-LICENSE.txt diff --git a/portal/dist/usergrid-portal/bower_components/jquery/bower.json b/deleted/dist-cov/usergrid-portal/bower_components/jquery/bower.json similarity index 87% rename from portal/dist/usergrid-portal/bower_components/jquery/bower.json rename to deleted/dist-cov/usergrid-portal/bower_components/jquery/bower.json index c66a7506b4..f5f72c7983 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery/bower.json +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery/bower.json @@ -1,6 +1,6 @@ { "name": "jquery", - "version": "2.1.1", + "version": "2.1.1-beta1", "main": "dist/jquery.js", "license": "MIT", "ignore": [ @@ -14,7 +14,7 @@ "package.json" ], "devDependencies": { - "sizzle": "1.10.19", + "sizzle": "1.10.18", "requirejs": "2.1.10", "qunit": "1.14.0", "sinon": "1.8.1" diff --git a/portal/dist/usergrid-portal/bower_components/jquery/dist/jquery.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.js similarity index 99% rename from portal/dist/usergrid-portal/bower_components/jquery/dist/jquery.js rename to deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.js index 9f7b3d3895..1194199ac8 100644 --- a/portal/dist/usergrid-portal/bower_components/jquery/dist/jquery.js +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v2.1.1 + * jQuery JavaScript Library v2.1.1-beta1 * http://jquery.com/ * * Includes Sizzle.js @@ -9,7 +9,7 @@ * Released under the MIT license * http://jquery.org/license * - * Date: 2014-05-01T17:11Z + * Date: 2014-03-24T17:01Z */ (function( global, factory ) { @@ -67,7 +67,7 @@ var // Use the correct document accordingly with window argument (sandbox) document = window.document, - version = "2.1.1", + version = "2.1.1-beta1", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -548,14 +548,14 @@ function isArraylike( obj ) { } var Sizzle = /*! - * Sizzle CSS Selector Engine v1.10.19 + * Sizzle CSS Selector Engine v1.10.18 * http://sizzlejs.com/ * * Copyright 2013 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * - * Date: 2014-04-18 + * Date: 2014-02-05 */ (function( window ) { @@ -564,7 +564,6 @@ var i, Expr, getText, isXML, - tokenize, compile, select, outermostContext, @@ -633,23 +632,17 @@ var i, // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), @@ -1090,7 +1083,7 @@ setDocument = Sizzle.setDocument = function( node ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 - return m && m.parentNode ? [ m ] : []; + return m && m.parentNode ? [m] : []; } }; Expr.filter["ID"] = function( id ) { @@ -1170,13 +1163,11 @@ setDocument = Sizzle.setDocument = function( node ) { // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; + div.innerHTML = ""; - // Support: IE8, Opera 11-12.16 + // Support: IE8, Opera 10-12 // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowclip^='']").length ) { + if ( div.querySelectorAll("[t^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } @@ -1219,8 +1210,7 @@ setDocument = Sizzle.setDocument = function( node ) { }); } - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { @@ -1401,7 +1391,7 @@ Sizzle.matchesSelector = function( elem, expr ) { } catch(e) {} } - return Sizzle( expr, document, null, [ elem ] ).length > 0; + return Sizzle( expr, document, null, [elem] ).length > 0; }; Sizzle.contains = function( context, elem ) { @@ -1530,7 +1520,7 @@ Expr = Sizzle.selectors = { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; @@ -1573,15 +1563,15 @@ Expr = Sizzle.selectors = { "PSEUDO": function( match ) { var excess, - unquoted = !match[6] && match[2]; + unquoted = !match[5] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && @@ -1986,7 +1976,7 @@ function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { +function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; @@ -2051,7 +2041,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); -}; +} function toSelector( tokens ) { var i = 0, @@ -3765,15 +3755,11 @@ jQuery.fn.extend({ if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { i = attrs.length; while ( i-- ) { + name = attrs[ i ].name; - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); } } data_priv.set( elem, "hasDataAttrs", true ); @@ -6013,7 +5999,7 @@ jQuery.each([ "height", "width" ], function( i, name ) { if ( computed ) { // certain elements can have dimension info if we invisibly show them // however, it must have a current display style that would benefit from this - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? + return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ? jQuery.swap( elem, cssShow, function() { return getWidthOrHeight( elem, name, extra ); }) : @@ -6334,7 +6320,7 @@ function createTween( value, prop, animation ) { function defaultPrefilter( elem, props, opts ) { /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + var prop, value, toggle, tween, hooks, oldfire, display, anim = this, orig = {}, style = elem.style, @@ -6378,12 +6364,10 @@ function defaultPrefilter( elem, props, opts ) { // Set display property to inline-block for height/width // animations on inline elements that are having width/height animated display = jQuery.css( elem, "display" ); - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { style.display = "inline-block"; } } diff --git a/deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.min.js b/deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.min.js new file mode 100644 index 0000000000..237434e02d --- /dev/null +++ b/deleted/dist-cov/usergrid-portal/bower_components/jquery/dist/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v2.1.1-beta1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1-beta1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t="sizzle"+-new Date,u=a.document,v=0,w=0,x=fb(),y=fb(),z=fb(),A=function(a,b){return a===b&&(k=!0),0},B="undefined",C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=E.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")"+L+"*(?:([*^$|!~]?=)"+L+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+N+")|)|)"+L+"*\\]",P=":("+M+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+O.replace(3,8)+")*)|.*)\\)|)",Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(P),V=new RegExp("^"+N+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,ab=/'|\\/g,bb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),cb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{H.apply(E=I.call(u.childNodes),u.childNodes),E[u.childNodes.length].nodeType}catch(db){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function eb(a,b,d,e){var f,g,i,j,k,n,q,r,v,w;if((b?b.ownerDocument||b:u)!==m&&l(b),b=b||m,d=d||[],!a||"string"!=typeof a)return d;if(1!==(j=b.nodeType)&&9!==j)return[];if(o&&!e){if(f=$.exec(a))if(i=f[1]){if(9===j){if(g=b.getElementById(i),!g||!g.parentNode)return d;if(g.id===i)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(i))&&s(b,g)&&g.id===i)return d.push(g),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((i=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(i)),d}if(c.qsa&&(!p||!p.test(a))){if(r=q=t,v=b,w=9===j&&a,1===j&&"object"!==b.nodeName.toLowerCase()){n=pb(a),(q=b.getAttribute("id"))?r=q.replace(ab,"\\$&"):b.setAttribute("id",r),r="[id='"+r+"'] ",k=n.length;while(k--)n[k]=r+qb(n[k]);v=_.test(a)&&nb(b.parentNode)||b,w=n.join(",")}if(w)try{return H.apply(d,v.querySelectorAll(w)),d}catch(x){}finally{q||b.removeAttribute("id")}}}return h(a.replace(Q,"$1"),b,d,e)}function fb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function gb(a){return a[t]=!0,a}function hb(a){var b=m.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ib(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function jb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function mb(a){return gb(function(b){return b=+b,gb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function nb(a){return a&&typeof a.getElementsByTagName!==B&&a}c=eb.support={},f=eb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},l=eb.setDocument=function(a){var b,e=a?a.ownerDocument||a:u,g=e.defaultView;return e!==m&&9===e.nodeType&&e.documentElement?(m=e,n=e.documentElement,o=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){l()},!1):g.attachEvent&&g.attachEvent("onunload",function(){l()})),c.attributes=hb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=hb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(e.getElementsByClassName)&&hb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=hb(function(a){return n.appendChild(a).id=t,!e.getElementsByName||!e.getElementsByName(t).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==B&&o){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(bb,cb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(bb,cb);return function(a){var c=typeof a.getAttributeNode!==B&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==B?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==B&&o?b.getElementsByClassName(a):void 0},q=[],p=[],(c.qsa=Z.test(e.querySelectorAll))&&(hb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&p.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||p.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll(":checked").length||p.push(":checked")}),hb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&p.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||p.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),p.push(",.*:")})),(c.matchesSelector=Z.test(r=n.webkitMatchesSelector||n.mozMatchesSelector||n.oMatchesSelector||n.msMatchesSelector))&&hb(function(a){c.disconnectedMatch=r.call(a,"div"),r.call(a,"[s!='']:x"),q.push("!=",P)}),p=p.length&&new RegExp(p.join("|")),q=q.length&&new RegExp(q.join("|")),b=Z.test(n.compareDocumentPosition),s=b||Z.test(n.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},A=b?function(a,b){if(a===b)return k=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===u&&s(u,a)?-1:b===e||b.ownerDocument===u&&s(u,b)?1:j?J.call(j,a)-J.call(j,b):0:4&d?-1:1)}:function(a,b){if(a===b)return k=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:j?J.call(j,a)-J.call(j,b):0;if(f===g)return jb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?jb(h[d],i[d]):h[d]===u?-1:i[d]===u?1:0},e):m},eb.matches=function(a,b){return eb(a,null,null,b)},eb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==m&&l(a),b=b.replace(T,"='$1']"),!(!c.matchesSelector||!o||q&&q.test(b)||p&&p.test(b)))try{var d=r.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return eb(b,m,null,[a]).length>0},eb.contains=function(a,b){return(a.ownerDocument||a)!==m&&l(a),s(a,b)},eb.attr=function(a,b){(a.ownerDocument||a)!==m&&l(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!o):void 0;return void 0!==f?f:c.attributes||!o?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},eb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},eb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(k=!c.detectDuplicates,j=!c.sortStable&&a.slice(0),a.sort(A),k){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return j=null,a},e=eb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=eb.selectors={cacheLength:50,createPseudo:gb,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(bb,cb),a[3]=(a[4]||a[5]||"").replace(bb,cb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||eb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&eb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return W.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&U.test(c)&&(b=pb(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(bb,cb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=x[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&x(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==B&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=eb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[t]||(q[t]={}),j=k[a]||[],n=j[0]===v&&j[1],m=j[0]===v&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[v,n,m];break}}else if(s&&(j=(b[t]||(b[t]={}))[a])&&j[0]===v)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[t]||(l[t]={}))[a]=[v,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||eb.error("unsupported pseudo: "+a);return e[t]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?gb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:gb(function(a){var b=[],c=[],d=g(a.replace(Q,"$1"));return d[t]?gb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:gb(function(a){return function(b){return eb(a,b).length>0}}),contains:gb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:gb(function(a){return V.test(a||"")||eb.error("unsupported lang: "+a),a=a.replace(bb,cb).toLowerCase(),function(b){var c;do if(c=o?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===n},focus:function(a){return a===m.activeElement&&(!m.hasFocus||m.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:mb(function(){return[0]}),last:mb(function(a,b){return[b-1]}),eq:mb(function(a,b,c){return[0>c?c+b:c]}),even:mb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:mb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:mb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:mb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=w++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[v,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[t]||(b[t]={}),(h=i[d])&&h[0]===v&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)eb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[t]&&(d=vb(d)),e&&!e[t]&&(e=vb(e,f)),gb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],j=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return J.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==i)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[t]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return vb(j>1&&sb(m),j>1&&qb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(Q,"$1"),c,e>j&&wb(a.slice(j,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,j,k){var l,n,o,p=0,q="0",r=f&&[],s=[],t=i,u=f||e&&d.find.TAG("*",k),w=v+=null==t?1:Math.random()||.1,x=u.length;for(k&&(i=g!==m&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){n=0;while(o=a[n++])if(o(l,g,h)){j.push(l);break}k&&(v=w)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(j));s=ub(s)}H.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&eb.uniqueSort(j)}return k&&(v=w,i=t),r};return c?gb(f):f}return g=eb.compile=function(a,b){var c,d=[],e=[],f=z[a+" "];if(!f){b||(b=pb(a)),c=b.length;while(c--)f=wb(b[c]),f[t]?d.push(f):e.push(f);f=z(a,xb(e,d)),f.selector=a}return f},h=eb.select=function(a,b,e,f){var h,i,j,k,l,m="function"==typeof a&&a,n=!f&&pb(a=m.selector||a);if(e=e||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&o&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(bb,cb),b)||[])[0],!b)return e;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}h=W.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(bb,cb),_.test(i[0].type)&&nb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&qb(i),!a)return H.apply(e,f),e;break}}}return(m||g(a,n))(f,b,!o,e,_.test(a)&&nb(b.parentNode)||b),e},c.sortStable=t.split("").sort(A).join("")===t,c.detectDuplicates=!!k,l(),c.sortDetached=hb(function(a){return 1&a.compareDocumentPosition(m.createElement("div"))}),hb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ib("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&hb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ib("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),hb(function(a){return null==a.getAttribute("disabled")})||ib(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),eb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b) +}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n(" - - -
- -
-
- -
- -
-
-
-
- -

Hover your cursor over the '(?)' icons to get helpful tips and information.

-
- - - - - -
- {{alert.msg}} -
- - - -
- -
-
-

© Apigee 2014

-
-
-
-
-
- - - - - - - - - - - diff --git a/portal/dist/usergrid-portal/index-template.html b/portal/dist/usergrid-portal/index-template.html deleted file mode 100644 index ba1986730f..0000000000 --- a/portal/dist/usergrid-portal/index-template.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - Apigee App Services - - - - - - - - - - - - - - - - - -
- -
-
- -
- -
-
-
-
- -

Hover your cursor over the '(?)' icons to get helpful tips and information.

-
- - - - - -
- {{alert.msg}} -
- - - -
- -
-
-

© Apigee 2014

-
-
-
-
-
- - - - - - - - - - - diff --git a/portal/dist/usergrid-portal/js/usergrid.min.js b/portal/dist/usergrid-portal/js/usergrid.min.js deleted file mode 100644 index 5d26556ee9..0000000000 --- a/portal/dist/usergrid-portal/js/usergrid.min.js +++ /dev/null @@ -1,25 +0,0 @@ - /** - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ - - /*! usergrid@2.0.16 */ -!function(exports,global){function renderChart(chartsDefaults,chartdata){var newSettings={};$.extend(!0,newSettings,chartsDefaults,chartdata);new Highcharts.Chart(newSettings)}function menuBindClick(scope,lElement,cevent,menuContext){var currentSelection=angular.element(cevent.srcElement).parent(),previousSelection=scope[menuContext];previousSelection!==currentSelection&&(previousSelection&&angular.element(previousSelection).removeClass("active"),scope[menuContext]=currentSelection,scope.$apply(function(){currentSelection.addClass("active")}))}global["true"]=exports;var polyfills=function(window,Object){window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){window.setTimeout(callback,1e3/60)}}(),Object.defineProperty(Object.prototype,"clone",{enumerable:!1,writable:!0,value:function(){var i,newObj=this instanceof Array?[]:{};for(i in this)"clone"!==i&&(newObj[i]=this[i]&&"object"==typeof this[i]?this[i].clone():this[i]);return newObj}}),Object.defineProperty(Object.prototype,"stringifyJSON",{enumerable:!1,writable:!0,value:function(){return JSON.stringify(this,null," ")}})};polyfills(window,Object);var global=global||this,AppServices=AppServices||{};global.AppServices=global.AppServices||AppServices,AppServices.Constants=angular.module("appservices.constants",[]),AppServices.Services=angular.module("appservices.services",[]),AppServices.Controllers=angular.module("appservices.controllers",[]),AppServices.Filters=angular.module("appservices.filters",[]),AppServices.Directives=angular.module("appservices.directives",[]),AppServices.Performance=angular.module("appservices.performance",[]),AppServices.MAX=angular.module("appservices.max",[]),angular.module("appservices",["ngRoute","ngResource","ngSanitize","ui.bootstrap","angulartics","angulartics.google.analytics","appservices.filters","appservices.services","appservices.directives","appservices.constants","appservices.controllers","appservices.max","angular-intro"]).config(["$routeProvider","$locationProvider","$sceDelegateProvider","$analyticsProvider","$httpProvider",function($routeProvider,$locationProvider,$sceDelegateProvider,$analyticsProvider,$httpProvider){$routeProvider.when("/org-overview",{templateUrl:"org-overview/org-overview.html",controller:"OrgOverviewCtrl"}).when("/login",{templateUrl:"login/login.html",controller:"LoginCtrl"}).when("/login/loading",{templateUrl:"login/loading.html",controller:"LoginCtrl"}).when("/app-overview/summary",{templateUrl:"app-overview/app-overview.html",controller:"AppOverviewCtrl"}).when("/getting-started/setup",{templateUrl:"app-overview/getting-started.html",controller:"GettingStartedCtrl"}).when("/forgot-password",{templateUrl:"login/forgot-password.html",controller:"ForgotPasswordCtrl"}).when("/register",{templateUrl:"login/register.html",controller:"RegisterCtrl"}).when("/users",{templateUrl:"users/users.html",controller:"UsersCtrl"}).when("/users/profile",{templateUrl:"users/users-profile.html",controller:"UsersProfileCtrl"}).when("/users/groups",{templateUrl:"users/users-groups.html",controller:"UsersGroupsCtrl"}).when("/users/activities",{templateUrl:"users/users-activities.html",controller:"UsersActivitiesCtrl"}).when("/users/feed",{templateUrl:"users/users-feed.html",controller:"UsersFeedCtrl"}).when("/users/graph",{templateUrl:"users/users-graph.html",controller:"UsersGraphCtrl"}).when("/users/roles",{templateUrl:"users/users-roles.html",controller:"UsersRolesCtrl"}).when("/groups",{templateUrl:"groups/groups.html",controller:"GroupsCtrl"}).when("/groups/details",{templateUrl:"groups/groups-details.html",controller:"GroupsDetailsCtrl"}).when("/groups/members",{templateUrl:"groups/groups-members.html",controller:"GroupsMembersCtrl"}).when("/groups/activities",{templateUrl:"groups/groups-activities.html",controller:"GroupsActivitiesCtrl"}).when("/groups/roles",{templateUrl:"groups/groups-roles.html",controller:"GroupsRolesCtrl"}).when("/roles",{templateUrl:"roles/roles.html",controller:"RolesCtrl"}).when("/roles/settings",{templateUrl:"roles/roles-settings.html",controller:"RolesSettingsCtrl"}).when("/roles/users",{templateUrl:"roles/roles-users.html",controller:"RolesUsersCtrl"}).when("/roles/groups",{templateUrl:"roles/roles-groups.html",controller:"RolesGroupsCtrl"}).when("/data",{templateUrl:"data/data.html",controller:"DataCtrl"}).when("/data/entity",{templateUrl:"data/entity.html",controller:"EntityCtrl"}).when("/data/shell",{templateUrl:"data/shell.html",controller:"ShellCtrl"}).when("/organizations",{templateUrl:"profile/organizations.html",controller:"OrgCtrl"}).when("/profile",{templateUrl:"profile/profile.html",controller:"ProfileCtrl"}).when("/activities",{templateUrl:"activities/activities.html",controller:"ActivitiesCtrl"}).when("/shell",{templateUrl:"shell/shell.html",controller:"ShellCtrl"}).when("/logout",{templateUrl:"login/logout.html",controller:"LogoutCtrl"}).otherwise({redirectTo:"/org-overview"}),$locationProvider.html5Mode(!1).hashPrefix("!"),$sceDelegateProvider.resourceUrlWhitelist(["self","http://apigee-internal-prod.jupiter.apigee.net/**","http://apigee-internal-prod.mars.apigee.net/**","https://appservices.apigee.com/**","https://api.usergrid.com/**"]),$analyticsProvider.virtualPageviews(!1),$analyticsProvider.firstPageview(!1),$httpProvider.defaults.useXDomain=!0}]),AppServices.Controllers.controller("ActivitiesCtrl",["ug","$scope","$rootScope","$location","$route",function(ug,$scope,$rootScope){$scope.$on("app-activities-received",function(evt,data){$scope.activities=data,$scope.$apply()}),$scope.$on("app-activities-error",function(){$rootScope.$broadcast("alert","error","Application failed to retreive activities data.")}),ug.getActivities()}]),AppServices.Controllers.controller("AppOverviewCtrl",["ug","charts","$scope","$rootScope","$log",function(ug,charts,$scope,$rootScope,$log){var createGradient=function(color1,color2){var perShapeGradient={x1:0,y1:0,x2:0,y2:1};return{linearGradient:perShapeGradient,stops:[[0,color1],[1,color2]]}};$scope.appOverview={},$scope.collections=[],$scope.graph="",$scope.$on("top-collections-received",function(event,collections){var dataDescription={bar1:{labels:["Total"],dataAttr:["title","count"],colors:[createGradient("rgba(36,151,212,0.6)","rgba(119,198,240,0.6)")],borderColor:"#1b97d1"}};$scope.collections=collections;var arr=[];for(var i in collections)collections.hasOwnProperty(i)&&arr.push(collections[i]);$scope.appOverview={},$rootScope.chartTemplate?($scope.appOverview.chart=angular.copy($rootScope.chartTemplate.pareto),$scope.appOverview.chart=charts.convertParetoChart(arr,$scope.appOverview.chart,dataDescription.bar1,"1h","NOW"),$scope.applyScope()):ug.httpGet(null,"js/charts/highcharts.json").then(function(success){$rootScope.chartTemplate=success,$scope.appOverview.chart=angular.copy($rootScope.chartTemplate.pareto),$scope.appOverview.chart=charts.convertParetoChart(arr,$scope.appOverview.chart,dataDescription.bar1,"1h","NOW"),$scope.applyScope()},function(fail){$log.error("Problem getting chart template",fail)})}),$scope.$on("app-initialized",function(){ug.getTopCollections()}),$rootScope.activeUI&&ug.getTopCollections()}]),AppServices.Controllers.controller("GettingStartedCtrl",["ug","$scope","$rootScope","$location","$timeout","$anchorScroll",function(ug,$scope,$rootScope,$location,$timeout,$anchorScroll){$scope.collections=[],$scope.graph="",$scope.clientID="",$scope.clientSecret="";$scope.regenerateCredentialsDialog=function(modalId){$scope.orgAPICredentials={client_id:"regenerating...",client_secret:"regenerating..."},ug.regenerateAppCredentials(),$scope.hideModal(modalId)},$scope.$on("app-creds-updated",function(event,credentials){credentials?($scope.clientID=credentials.client_id,$scope.clientSecret=credentials.client_secret,$scope.$$phase||$scope.$apply()):setTimeout(function(){ug.getAppCredentials()},5e3)}),ug.getAppCredentials(),$scope.contentTitle,$scope.showSDKDetail=function(name){var introContainer=document.getElementById("intro-container");if("nocontent"===name)return introContainer.style.height="0",!0;introContainer.style.opacity=.1,introContainer.style.height="0";var timeout=0;$scope.contentTitle&&(timeout=500),$timeout(function(){introContainer.style.height="1000px",introContainer.style.opacity=1},timeout),$scope.optionName=name,$scope.contentTitle=name,$scope.sdkLink="http://apigee.com/docs/content/"+name+"-sdk-redirect",$scope.docsLink="http://apigee.com/docs/app-services/content/installing-apigee-sdk-"+name,$scope.getIncludeURL=function(){return"app-overview/doc-includes/"+$scope.optionName+".html"}},$scope.scrollToElement=function(elem){return $location.hash(elem),$anchorScroll(),!1}}]),AppServices.Controllers.controller("ChartCtrl",["$scope","$location",function(){}]),AppServices.Directives.directive("chart",function(){return{restrict:"E",scope:{chartdata:"=chartdata"},template:"
",replace:!0,controller:function(){},link:function(scope,element,attrs){scope.$watch("chartdata",function(chartdata){if(chartdata){var chartsDefaults={chart:{renderTo:element[0],type:attrs.type||null,height:attrs.height||null,width:attrs.width||null,reflow:!0,animation:!1,zoomType:"x"}};if("pie"===attrs.type&&(chartsDefaults.chart.margin=[0,0,0,0],chartsDefaults.chart.spacingLeft=0,chartsDefaults.chart.spacingRight=0,chartsDefaults.chart.spacingTop=0,chartsDefaults.chart.spacingBottom=0,attrs.titleimage&&(chartdata.title.text=''),attrs.titleicon&&(chartdata.title.text=''+attrs.titleicon+""),attrs.titlecolor&&(chartdata.title.style.color=attrs.titlecolor),attrs.titleimagetop&&(chartdata.title.style.marginTop=attrs.titleimagetop),attrs.titleimageleft&&(chartdata.title.style.marginLeft=attrs.titleimageleft)),"line"===attrs.type&&(chartsDefaults.chart.marginTop=30,chartsDefaults.chart.spacingTop=50),"column"===attrs.type&&(chartsDefaults.chart.marginBottom=80),"area"===attrs.type&&(chartsDefaults.chart.spacingLeft=0,chartsDefaults.chart.spacingRight=0,chartsDefaults.chart.marginLeft=0,chartsDefaults.chart.marginRight=0),Highcharts.setOptions({global:{useUTC:!1},chart:{style:{fontFamily:"marquette-light, Helvetica, Arial, sans-serif"}}}),"line"===attrs.type){var xAxis1=chartdata.xAxis[0];xAxis1.labels.formatter||(xAxis1.labels.formatter=new Function(attrs.xaxislabel)),xAxis1.labels.step||(xAxis1.labels.step=attrs.xaxisstep)}chartdata.tooltip&&"string"==typeof chartdata.tooltip.formatter&&(chartdata.tooltip.formatter=new Function(chartdata.tooltip.formatter)),renderChart(chartsDefaults,chartdata)}},!0)}}}),AppServices.Services.factory("charts",function(){function sortJsonArrayByProperty(objArray,prop){if(arguments.length<2)throw new Error("sortJsonArrayByProp requires 2 arguments");var direct=arguments.length>2?arguments[2]:1;if(objArray&&objArray.constructor===Array){var propPath=prop.constructor===Array?prop:prop.split(".");objArray.sort(function(a,b){for(var p in propPath)a[propPath[p]]&&b[propPath[p]]&&(a=a[propPath[p]],b=b[propPath[p]]);return a=a.match(/^\d+$/)?+a:a,b=b.match(/^\d+$/)?+b:b,b>a?-1*direct:a>b?1*direct:0})}}var lineChart,areaChart,paretoChart,pieChart,xaxis,seriesIndex;return{convertLineChart:function(chartData,chartTemplate,dataDescription,settings,currentCompare){function plotData(counter,dPLength,dataPoints,dataAttrs,detailedView){for(var i=0;dPLength>i;i++)for(var dp=dataPoints[i],localCounter=counter,j=0;ji;i++){var dp=dataPoints[i];xaxis.categories.push(dp.timestamp)}if(chartData.length>1)for(var l=0;l0?seriesIndex:0);i++){var yAxisIndex=dataDescription.multiAxis?steadyCounter:0;lineChart.series[i]={},lineChart.series[i].data=[],lineChart.series[i].name=label+dataDescription.labels[steadyCounter],lineChart.series[i].yAxis=yAxisIndex,lineChart.series[i].type="line",lineChart.series[i].color=dataDescription.colors[i],lineChart.series[i].dashStyle="solid",lineChart.yAxis[yAxisIndex].title.text=dataDescription.yAxisLabels[dataDescription.yAxisLabels>1?steadyCounter:0],steadyCounter++}plotData(seriesIndex,dPLength,dataPoints,dataDescription.dataAttr,!1)}return lineChart},convertAreaChart:function(chartData,chartTemplate,dataDescription,settings,currentCompare){function plotData(counter,dPLength,dataPoints,dataAttrs,detailedView){for(var i=0;dPLength>i;i++)for(var dp=dataPoints[i],localCounter=counter,j=0;ji;i++){var dp=dataPoints[i];xaxis.categories.push(dp.timestamp)}if(chartData.length>1)for(var l=0;l0?seriesIndex:0);i++){var yAxisIndex=dataDescription.multiAxis?steadyCounter:0;areaChart.series[i]={},areaChart.series[i].data=[],areaChart.series[i].fillColor=dataDescription.areaColors[i],areaChart.series[i].name=label+dataDescription.labels[steadyCounter],areaChart.series[i].yAxis=yAxisIndex,areaChart.series[i].type="area",areaChart.series[i].pointInterval=1,areaChart.series[i].color=dataDescription.colors[i],areaChart.series[i].dashStyle="solid",areaChart.yAxis[yAxisIndex].title.text=dataDescription.yAxisLabels[dataDescription.yAxisLabels>1?steadyCounter:0],steadyCounter++}plotData(seriesIndex,dPLength,dataPoints,dataDescription.dataAttr,!1)}return areaChart},convertParetoChart:function(chartData,chartTemplate,dataDescription,settings,currentCompare){function getPreviousData(){for(var i=0;if;f++)paretoChart.series[f]||(paretoChart.series[f]={data:[]}),paretoChart.series[f].data.push(bar[dataDescription.dataAttr[1][steadyCounter]]),paretoChart.series[f].name=""!==label?label+" "+dataDescription.labels[steadyCounter]:dataDescription.labels[steadyCounter],paretoChart.series[f].color=dataDescription.colors[f],paretoChart.series[f].stack=label,steadyCounter++}paretoChart=chartTemplate,"undefined"==typeof chartData&&(chartData=[]);var label,cdLength=chartData.length,compare=!1,allParetoOptions=[],stackedBar=!1;if(seriesIndex=0,"object"==typeof dataDescription.dataAttr[1]&&(stackedBar=!0),"YESTERDAY"===currentCompare?(label="Yesterday ",compare=!0,stackedBar&&(seriesIndex=dataDescription.dataAttr[1].length),getPreviousData()):"LAST_WEEK"===currentCompare?(label="Last Week ",compare=!0,stackedBar&&(seriesIndex=dataDescription.dataAttr[1].length),seriesIndex=getPreviousData()):(compare=!1,label="",paretoChart.xAxis.categories=[],paretoChart.series=[],paretoChart.series[0]={},paretoChart.series[0].data=[],paretoChart.legend.enabled=!1),paretoChart.plotOptions.series.borderColor=dataDescription.borderColor,compare&&!stackedBar){paretoChart.series[1]={},paretoChart.series[1].data=[];for(var i=0;ii;i++){var bar=chartData[i];if(compare){var newLabel=bar[dataDescription.dataAttr[0]],newValue=bar[dataDescription.dataAttr[1]],previousIndex=allParetoOptions.indexOf(newLabel);previousIndex>-1&&("object"==typeof dataDescription.dataAttr[1]?createStackedBar(dataDescription,paretoChart,paretoChart.series.length):(paretoChart.series[1].data[previousIndex]=newValue,paretoChart.series[1].name=""!==label?label+" "+dataDescription.labels[0]:dataDescription.labels[0],paretoChart.series[1].color=dataDescription.colors[1]))}else paretoChart.xAxis.categories.push(bar[dataDescription.dataAttr[0]]),"object"==typeof dataDescription.dataAttr[1]?createStackedBar(dataDescription,paretoChart,paretoChart.series.length):(paretoChart.series[0].data.push(bar[dataDescription.dataAttr[1]]),paretoChart.series[0].name=dataDescription.labels[0],paretoChart.series[0].color=dataDescription.colors[0])}return paretoChart},convertPieChart:function(chartData,chartTemplate,dataDescription,settings,currentCompare){var label,cdLength=chartData.length,compare=!1;pieChart=chartTemplate,"YESTERDAY"===currentCompare?(label="Yesterday ",compare=!1):"LAST_WEEK"===currentCompare?(label="Last Week ",compare=!1):(compare=!1,pieChart.series[0].data=[],pieChart.series[0].dataLabels&&"string"==typeof pieChart.series[0].dataLabels.formatter&&(pieChart.series[0].dataLabels.formatter=new Function(pieChart.series[0].dataLabels.formatter))),pieChart.plotOptions.pie.borderColor=dataDescription.borderColor,compare&&(pieChart.series[1].data=[],pieChart.series[1].dataLabels&&"string"==typeof pieChart.series[1].dataLabels.formatter&&(pieChart.series[1].dataLabels.formatter=new Function(pieChart.series[1].dataLabels.formatter)));for(var tempArray=[],i=0;cdLength>i;i++){var pie=chartData[i];tempArray.push({name:pie[dataDescription.dataAttr[0]],y:pie[dataDescription.dataAttr[1]],color:""})}sortJsonArrayByProperty(tempArray,"name");for(var i=0;i
',replace:!0,transclude:!0,link:function(scope,lElement,attrs){scope.direction=attrs.direction;var runScroll=!0,windowEl=angular.element($window);windowEl.on("scroll",function(){runScroll&&(lElement.addClass("fade-out"),$timeout(function(){lElement.addClass("hide")},1e3),runScroll=!1)})}}}]),AppServices.Directives.directive("bsmodal",["$rootScope",function($rootScope){return{restrict:"ECA",scope:{title:"@title",buttonid:"=buttonid",footertext:"=footertext",closelabel:"=closelabel"},transclude:!0,templateUrl:"dialogs/modal.html",replace:!0,link:function(scope,lElement,attrs,parentCtrl){scope.title=attrs.title,scope.footertext=attrs.footertext,scope.closelabel=attrs.closelabel,scope.close=attrs.close,scope.extrabutton=attrs.extrabutton,scope.extrabuttonlabel=attrs.extrabuttonlabel,scope.buttonId=attrs.buttonid,scope.closeDelegate=function(attr){scope.$parent[attr](attrs.id,scope)},scope.extraDelegate=function(attr){scope.dialogForm.$valid?(console.log(parentCtrl),scope.$parent[attr](attrs.id)):$rootScope.$broadcast("alert","error","Please check your form input and resubmit.")}}}}]),AppServices.Controllers.controller("AlertCtrl",["$scope","$rootScope","$timeout",function($scope,$rootScope,$timeout){$scope.alertDisplay="none",$scope.alerts=[],$scope.$on("alert",function(event,type,message,permanent){$scope.addAlert(type,message,permanent)}),$scope.$on("clear-alerts",function(){$scope.alerts=[]}),$scope.addAlert=function(type,message,permanent){$scope.alertDisplay="block",$scope.alerts.push({type:type,msg:message}),$scope.applyScope(),permanent||$timeout(function(){$scope.alerts.shift()},5e3)},$scope.closeAlert=function(index){$scope.alerts.splice(index,1)}}]),AppServices.Directives.directive("alerti",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"ECA",scope:{type:"=type",closeable:"@closeable",index:"&index"},template:'
💥 👍
',replace:!0,transclude:!0,link:function(scope,lElement,attrs){$timeout(function(){lElement.addClass("fade-out")},4e3),lElement.click(function(){attrs.index&&scope.$parent.closeAlert(attrs.index)}),setTimeout(function(){lElement.addClass("alert-animate")},10)}}}]),AppServices.Directives.directive("appswitcher",["$rootScope",function(){return{restrict:"ECA",scope:"=",templateUrl:"global/appswitcher-template.html",replace:!0,transclude:!0,link:function(){function globalNavDetail(){$("#globalNavDetail > div").removeClass(classNameOpen),$("#globalNavDetailApiPlatform").addClass(classNameOpen)}var classNameOpen="open";$("ul.nav li.dropdownContainingSubmenu").hover(function(){$(this).addClass(classNameOpen)},function(){$(this).removeClass(classNameOpen)}),$("#globalNav > a").mouseover(globalNavDetail),$("#globalNavDetail").mouseover(globalNavDetail),$("#globalNavSubmenuContainer ul li").mouseover(function(){$("#globalNavDetail > div").removeClass(classNameOpen),$("#"+this.getAttribute("data-globalNavDetail")).addClass(classNameOpen) -})}}}]),AppServices.Services.factory("help",function($rootScope,$http,$location,$analytics){$rootScope.help={},$rootScope.help.helpButtonStatus="Enable Help",$rootScope.help.helpTooltipsEnabled=!1,$rootScope.help.clicked=!1,$rootScope.help.showHelpButtons=!1,$rootScope.help.introjs_shouldLaunch=!1,$rootScope.help.showTabsId="invisible",$rootScope.help.showJsonId="invisible";var helpStartTime,introjs_step,getHelpJson=function(path){return $http.get("https://s3.amazonaws.com/sdk.apigee.com/portal_help"+path+"/helpJson.json")},getHelpStatus=function(helpType){var status;return"tour"==helpType?(status=localStorage.getItem("ftu_tour"),localStorage.setItem("ftu_tour","false")):"tooltips"==helpType&&(status=localStorage.getItem("ftu_tooltips"),localStorage.setItem("ftu_tooltips","false")),status};$rootScope.help.sendTooltipGA=function(tooltipName){$analytics.eventTrack("tooltip - "+$rootScope.currentPath,{category:"App Services",label:tooltipName})},$rootScope.help.toggleTooltips=function(){0==$rootScope.help.helpTooltipsEnabled?($rootScope.help.helpButtonStatus="Disable Help",$rootScope.help.helpTooltipsEnabled=!0,$rootScope.$broadcast("tooltips-enabled"),showHelpModal("tooltips")):($rootScope.help.helpButtonStatus="Enable Help",$rootScope.help.helpTooltipsEnabled=!1,$rootScope.$broadcast("tooltips-disabled"))},$rootScope.$on("users-received",function(event,users){users._list.length>0?($rootScope.help.showTabsId="intro-information-tabs",$rootScope.help.showJsonId="intro-json-object"):($rootScope.help.showTabsId="invisible",$rootScope.help.showJsonId="invisible")}),$rootScope.$on("groups-received",function(event,groups){groups._list.length>0?($rootScope.help.showTabsId="intro-information-tabs",$rootScope.help.showJsonId="intro-json-object"):($rootScope.help.showTabsId="invisible",$rootScope.help.showJsonId="invisible")}),$rootScope.$on("$routeChangeSuccess",function(event,current){var path=current.$$route?current.$$route.originalPath:null;"/org-overview"===path||path&&path.indexOf("/performance")>=0||"/users"===path||"/groups"===path||"/roles"===path||"/data"===path?($rootScope.help.showHelpButtons=!0,getHelpJson(path).success(function(json){var helpJson=json;setHelpStrings(helpJson),showHelpModal("tour")})):$rootScope.help.showHelpButtons=!1});var showHelpModal=function(helpType){var shouldHelp=location.search.indexOf("noHelp")<=0;"tour"!=helpType||getHelpStatus(helpType)?"tooltips"!=helpType||getHelpStatus(helpType)||shouldHelp&&$rootScope.showModal("tooltips"):shouldHelp&&$rootScope.showModal("introjs")},setHelpStrings=function(helpJson){$rootScope.help.IntroOptions.steps=helpJson.introjs,angular.forEach(helpJson.tooltip,function(value,binding){$rootScope[binding]=value}),$rootScope.help.tooltip=helpJson.tooltip,$rootScope.$broadcast("helpJsonLoaded")};$rootScope.help.IntroOptions={steps:[],showStepNumbers:!1,exitOnOverlayClick:!0,exitOnEsc:!0,nextLabel:"Next",prevLabel:"Back",skipLabel:"Exit",doneLabel:"Done"},$rootScope.help.introjs_StartEvent=function(){helpStartTime=Date.now(),introjs_step=1},$rootScope.help.introjs_ExitEvent=function(){var introjs_time=Math.round((Date.now()-helpStartTime)/1e3);$analytics.eventTrack("introjs timing - "+$rootScope.currentPath,{category:"App Services",label:introjs_time+"s"}),$analytics.eventTrack("introjs exit - "+$rootScope.currentPath,{category:"App Services",label:"step"+introjs_step})},$rootScope.help.introjs_CompleteEvent=function(){switch($rootScope.currentPath){case"/performance/app-usage":introjs_PageTransitionEvent("/performance/errors-crashes");break;case"/performance/errors-crashes":introjs_PageTransitionEvent("/performance/api-perf");break;case"/users":introjs_PageTransitionEvent("/groups");break;case"/groups":introjs_PageTransitionEvent("/roles")}};var introjs_PageTransitionEvent=function(url){$location.url(url),$rootScope.help.introjs_shouldLaunch=!0,$rootScope.$apply()};$rootScope.help.introjs_ChangeEvent=function(){introjs_step++}}),AppServices.Directives.directive("insecureBanner",["$rootScope","ug",function($rootScope,ug){return{restrict:"E",transclude:!0,templateUrl:"global/insecure-banner.html",link:function(scope){scope.securityWarning=!1,scope.$on("roles-received",function(evt,roles){scope.securityWarning=!1,roles&&roles._list&&roles._list.forEach(function(roleHolder){var role=roleHolder._data;"GUEST"===role.name.toUpperCase()&&roleHolder.getPermissions(function(err){err||roleHolder.permissions&&roleHolder.permissions.forEach(function(permission){permission.path.indexOf("/**")>=0&&(scope.securityWarning=!0,scope.applyScope())})})})});var initialized=!1;scope.$on("app-initialized",function(){!initialized&&ug.getRoles(),initialized=!0}),scope.$on("app-changed",function(){scope.securityWarning=!1,ug.getRoles()})}}}]),AppServices.Constants.constant("configuration",{ITEMS_URL:"global/temp.json"}),AppServices.Controllers.controller("PageCtrl",["ug","help","utility","$scope","$rootScope","$location","$routeParams","$q","$route","$log","$analytics","$sce",function(ug,help,utility,$scope,$rootScope,$location,$routeParams,$q,$route,$log,$analytics,$sce){var initScopeVariables=function(){for(var menuItems=Usergrid.options.menuItems,i=0;i5)return void $rootScope.$broadcast("alert","error","There is an issue with authentication. Please contact support.");console.error("Failed to login via sso "+authenticateAttempts),sessionStorage.setItem("authenticateAttempts",authenticateAttempts),window.location=$rootScope.urls().LOGIN_URL+"?callback="+encodeURIComponent($location.absUrl().split("?")[0])}else notRegistration()&&(ug.logout(),$location.path("/login"),$scope.applyScope())}),$scope.$on("loginSuccessful",function(){$rootScope.activeUI=!0}),$scope.$on("app-changed",function(args,oldVal,newVal,preventReload){newVal===oldVal||preventReload||$route.reload()}),$scope.$on("org-changed",function(){ug.getApplications(),$route.reload()}),$scope.$on("app-settings-received",function(){}),$scope.$on("request-times-slow",function(){$rootScope.$broadcast("alert","info","We are experiencing performance issues on our server. Please click Get Help for support if this continues.")});var lastPage="";$scope.$on("$routeChangeSuccess",function(){verifyUser(),$scope.showDemoBar="/performance"===$location.path().slice(0,"/performance".length),$scope.showDemoBar||($rootScope.demoData=!1),setTimeout(function(){lastPage=""},50);var path=window.location.pathname.replace("index-debug.html","");""===lastPage&&$analytics.pageTrack((path+$location.path()).replace("//","/")),lastPage=$location.path()}),$scope.$on("applications-received",function(event,applications){$scope.applications=applications,$scope.hasApplications=Object.keys(applications).length>0}),ug.getAppSettings(),$rootScope.startFirstTimeUser=function(){$rootScope.hideModal("introjs"),$rootScope.help.introjs_StartEvent(),$scope.startHelp()},$scope.$on("helpJsonLoaded",function(){1==$rootScope.help.introjs_shouldLaunch&&($rootScope.help.introjs_StartEvent(),$scope.startHelp(),$rootScope.help.introjs_shouldLaunch=!1)})}]),AppServices.Directives.directive("pageTitle",["$rootScope","ug",function($rootScope){return{restrict:"E",transclude:!0,templateUrl:"global/page-title.html",link:function(scope,lElement,attrs){scope.title=attrs.title,scope.icon=attrs.icon,scope.showHelp=function(){$("#need-help").modal("show")},scope.sendHelp=function(){data.jsonp_raw("apigeeuihelpemail","",{useremail:$rootScope.userEmail}).then(function(){$rootScope.$broadcast("alert","success","Email sent. Our team will be in touch with you shortly.")},function(){$rootScope.$broadcast("alert","error","Problem Sending Email. Try sending an email to mobile@apigee.com.")}),$("#need-help").modal("hide")}}}}]),AppServices.Services.factory("ug",function(configuration,$rootScope,utility,$q,$http,$resource,$log,$analytics,$location){function reportError(data,config){try{$analytics.eventTrack("error",{category:"App Services",label:data+":"+config.url+":"+(sessionStorage.apigee_uuid||"na")})}catch(e){console.log(e)}}var requestTimes=[],running=!1,currentRequests={},getAccessToken=function(){return sessionStorage.getItem("accessToken")};return{get:function(prop,isObject){return isObject?this.client().getObject(prop):this.client().get(prop)},set:function(prop,value){this.client().set(prop,value)},getUrls:function(qs){var host=$location.host(),BASE_URL="",DATA_URL="",use_sso=!1;switch(!0){case"appservices.apigee.com"===host&&location.pathname.indexOf("/dit")>=0:BASE_URL="https://accounts.jupiter.apigee.net",DATA_URL="https://apigee-internal-prod.jupiter.apigee.net",use_sso=!0;break;case"appservices.apigee.com"===host&&location.pathname.indexOf("/mars")>=0:BASE_URL="https://accounts.mars.apigee.net",DATA_URL="https://apigee-internal-prod.mars.apigee.net",use_sso=!0;break;case"appservices.apigee.com"===host:DATA_URL=Usergrid.overrideUrl;break;case"apigee.com"===host:BASE_URL="https://accounts.apigee.com",DATA_URL="https://api.usergrid.com",use_sso=!0;break;case"usergrid.dev"===host:DATA_URL="https://api.usergrid.com";break;default:DATA_URL=Usergrid.overrideUrl}return DATA_URL=qs.api_url||DATA_URL,DATA_URL=DATA_URL.lastIndexOf("/")===DATA_URL.length-1?DATA_URL.substring(0,DATA_URL.length-1):DATA_URL,{DATA_URL:DATA_URL,LOGIN_URL:BASE_URL+"/accounts/sign_in",PROFILE_URL:BASE_URL+"/accounts/my_account",LOGOUT_URL:BASE_URL+"/accounts/sign_out",apiUrl:DATA_URL,use_sso:use_sso}},orgLogin:function(username,password){var self=this;this.client().set("email",username),this.client().set("token",null),this.client().orgLogin(username,password,function(err,data,user,organizations,applications){err?$rootScope.$broadcast("loginFailed",err,data):self.initializeCurrentUser(function(){$rootScope.$broadcast("loginSuccesful",user,organizations,applications)})})},checkAuthentication:function(force){var ug=this,client=ug.client(),initialize=function(){ug.initializeCurrentUser(function(){$rootScope.userEmail=client.get("email"),$rootScope.organizations=client.getObject("organizations"),$rootScope.applications=client.getObject("applications"),$rootScope.currentOrg=client.get("orgName"),$rootScope.currentApp=client.get("appName");var key,size=0;for(key in $rootScope.applications)$rootScope.applications.hasOwnProperty(key)&&size++;$rootScope.$broadcast("checkAuthentication-success",client.getObject("organizations"),client.getObject("applications"),client.get("orgName"),client.get("appName"),client.get("email"))})},isAuthenticated=function(){var authenticated=null!==client.get("token")&&null!==client.get("organizations");return authenticated&&initialize(),authenticated};if(!isAuthenticated()||force){if(!client.get("token"))return $rootScope.$broadcast("checkAuthentication-error","no token",{},client.get("email"));this.client().reAuthenticateLite(function(err){var missingData=err||!client.get("orgName")||!client.get("appName")||!client.getObject("organizations")||!client.getObject("applications"),email=client.get("email");err||missingData?$rootScope.$broadcast("checkAuthentication-error",err,missingData,email):initialize()})}},reAuthenticate:function(email,eventOveride){var ug=this;this.client().reAuthenticate(email,function(err,data,user,organizations,applications){err||($rootScope.currentUser=user),err||($rootScope.userEmail=user.get("email"),$rootScope.organizations=organizations,$rootScope.applications=applications,$rootScope.currentOrg=ug.get("orgName"),$rootScope.currentApp=ug.get("appName"),$rootScope.currentUser=user._data,$rootScope.currentUser.profileImg=utility.get_gravatar($rootScope.currentUser.email)),$rootScope.$broadcast((eventOveride||"reAuthenticate")+"-"+(err?"error":"success"),err,data,user,organizations,applications)})},logoutCallback:function(){$rootScope.$broadcast("userNotAuthenticated")},logout:function(){$rootScope.activeUI=!1,$rootScope.userEmail="user@apigee.com",$rootScope.organizations={noOrg:{name:"No Orgs Found"}},$rootScope.applications={noApp:{name:"No Apps Found"}},$rootScope.currentOrg="No Org Found",$rootScope.currentApp="No App Found",sessionStorage.setItem("accessToken",null),sessionStorage.setItem("userUUID",null),sessionStorage.setItem("userEmail",null),this.client().logout(),this._client=null},client:function(){var options={buildCurl:!0,logging:!0};return Usergrid.options&&Usergrid.options.client&&(options.keys=Usergrid.options.client),this._client=this._client||new Usergrid.Client(options,$rootScope.urls().DATA_URL),this._client},setClientProperty:function(key,value){this.client().set(key,value)},getTopCollections:function(){var options={method:"GET",endpoint:""};this.client().request(options,function(err,data){if(err)$rootScope.$broadcast("alert","error","error getting collections");else{var collections=data.entities[0].metadata.collections;$rootScope.$broadcast("top-collections-received",collections)}})},createCollection:function(collectionName){var collections={};collections[collectionName]={};var metadata={metadata:{collections:collections}},options={method:"PUT",body:metadata,endpoint:""};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error creating collection"):$rootScope.$broadcast("collection-created",collections)})},getApplications:function(){this.client().getApplications(function(err,applications){err?applications&&console.error(applications):$rootScope.$broadcast("applications-received",applications)})},getAdministrators:function(){this.client().getAdministrators(function(err,administrators){err&&$rootScope.$broadcast("alert","error","error getting administrators"),$rootScope.$broadcast("administrators-received",administrators)})},createApplication:function(appName){this.client().createApplication(appName,function(err,applications){err?$rootScope.$broadcast("alert","error","error creating application"):($rootScope.$broadcast("applications-created",applications,appName),$rootScope.$broadcast("applications-received",applications))})},createAdministrator:function(adminName){this.client().createAdministrator(adminName,function(err,administrators){err&&$rootScope.$broadcast("alert","error","error creating administrator"),$rootScope.$broadcast("administrators-received",administrators)})},getFeed:function(){var options={method:"GET",endpoint:"management/organizations/"+this.client().get("orgName")+"/feed",mQuery:!0};this.client().request(options,function(err,data){if(err)$rootScope.$broadcast("alert","error","error getting feed");else{var feedData=data.entities,feed=[],i=0;for(i=0;i");title=title.substring(n+1,title.length),n=title.indexOf(">"),title=title.substring(n+1,title.length),feedData[i].actor&&(title=feedData[i].actor.displayName+" "+title),feed.push({date:date,title:title})}0===i&&feed.push({date:"",title:"No Activities found."}),$rootScope.$broadcast("feed-received",feed)}})},createGroup:function(path,title){var options={path:path,title:title},self=this;this.groupsCollection.addEntity(options,function(err){err?$rootScope.$broadcast("groups-create-error",err):($rootScope.$broadcast("groups-create-success",self.groupsCollection),$rootScope.$broadcast("groups-received",self.groupsCollection))})},createRole:function(name,title){var options={name:name,title:title},self=this;this.rolesCollection.addEntity(options,function(err){err?$rootScope.$broadcast("alert","error","error creating role"):$rootScope.$broadcast("roles-received",self.rolesCollection)})},createUser:function(username,name,email,password){var options={username:username,name:name,email:email,password:password},self=this;this.usersCollection.addEntity(options,function(err,data){err?"string"==typeof data?$rootScope.$broadcast("alert","error","error: "+data):$rootScope.$broadcast("alert","error","error creating user. the email address might already exist."):($rootScope.$broadcast("users-create-success",self.usersCollection),$rootScope.$broadcast("users-received",self.usersCollection))})},getCollection:function(type,path,orderBy,query,limit){var options={type:path,qs:{}};query&&(options.qs.ql=query),options.qs.ql=options.qs.ql?options.qs.ql+" order by "+(orderBy||"created desc"):" order by "+(orderBy||"created desc"),limit&&(options.qs.limit=limit),this.client().createCollection(options,function(err,collection,data){err?($rootScope.$broadcast("alert","error","error getting "+collection._type+": "+data.error_description),$rootScope.$broadcast(type+"-error",collection)):$rootScope.$broadcast(type+"-received",collection),$rootScope.$$phase||$rootScope.$apply()})},runDataQuery:function(queryPath,searchString,queryLimit){this.getCollection("query",queryPath,null,searchString,queryLimit)},runDataPOSTQuery:function(queryPath,body){var self=this,options={method:"POST",endpoint:queryPath,body:body};this.client().request(options,function(err,data){if(err)$rootScope.$broadcast("alert","error","error: "+data.error_description),$rootScope.$broadcast("error-running-query",data);else{var queryPath=data.path;self.getCollection("query",queryPath,null,"order by modified DESC",null)}})},runDataPutQuery:function(queryPath,searchString,queryLimit,body){var self=this,options={method:"PUT",endpoint:queryPath,body:body};searchString&&(options.qs.ql=searchString),queryLimit&&(options.qs.queryLimit=queryLimit),this.client().request(options,function(err,data){if(err)$rootScope.$broadcast("alert","error","error: "+data.error_description);else{var queryPath=data.path;self.getCollection("query",queryPath,null,"order by modified DESC",null)}})},runDataDeleteQuery:function(queryPath,searchString,queryLimit){var self=this,options={method:"DELETE",endpoint:queryPath};searchString&&(options.qs.ql=searchString),queryLimit&&(options.qs.queryLimit=queryLimit),this.client().request(options,function(err,data){if(err)$rootScope.$broadcast("alert","error","error: "+data.error_description);else{var queryPath=data.path;self.getCollection("query",queryPath,null,"order by modified DESC",null)}})},getUsers:function(){this.getCollection("users","users","username");var self=this;$rootScope.$on("users-received",function(evt,users){self.usersCollection=users})},getGroups:function(){this.getCollection("groups","groups","title");var self=this;$rootScope.$on("groups-received",function(event,roles){self.groupsCollection=roles})},getRoles:function(){this.getCollection("roles","roles","name");var self=this;$rootScope.$on("roles-received",function(event,roles){self.rolesCollection=roles})},getNotifiers:function(){var query="",limit="100",self=this;this.getCollection("notifiers","notifiers","created",query,limit),$rootScope.$on("notifiers-received",function(event,notifiers){self.notifiersCollection=notifiers})},getNotificationHistory:function(type){var query=null;type&&(query="select * where state = '"+type+"'"),this.getCollection("notifications","notifications","created desc",query);var self=this;$rootScope.$on("notifications-received",function(event,notifications){self.notificationCollection=notifications})},getNotificationReceipts:function(uuid){this.getCollection("receipts","notifications/"+uuid+"/receipts");var self=this;$rootScope.$on("receipts-received",function(event,receipts){self.receiptsCollection=receipts})},getIndexes:function(path){var options={method:"GET",endpoint:path.split("/").concat("indexes").filter(function(bit){return bit&&bit.length}).join("/")};this.client().request(options,function(err,data){err?$rootScope.$broadcast("alert","error","Problem getting indexes: "+data.error):$rootScope.$broadcast("indexes-received",data.data)})},sendNotification:function(path,body){var options={method:"POST",endpoint:path,body:body};this.client().request(options,function(err,data){err?$rootScope.$broadcast("alert","error","Problem creating notification: "+data.error):$rootScope.$broadcast("send-notification-complete")})},getRolesUsers:function(username){var options={type:"roles/users/"+username,qs:{ql:"order by username"}};this.client().createCollection(options,function(err,users){err?$rootScope.$broadcast("alert","error","error getting users"):$rootScope.$broadcast("users-received",users)})},getTypeAheadData:function(type,searchString,searchBy,orderBy){var search="",qs={limit:100};searchString&&(search="select * where "+searchBy+" = '"+searchString+"'"),orderBy&&(search=search+" order by "+orderBy),search&&(qs.ql=search);var options={method:"GET",endpoint:type,qs:qs};this.client().request(options,function(err,data){if(err)$rootScope.$broadcast("alert","error","error getting "+type);else{var entities=data.entities;$rootScope.$broadcast(type+"-typeahead-received",entities)}})},getUsersTypeAhead:function(searchString){this.getTypeAheadData("users",searchString,"username","username")},getGroupsTypeAhead:function(searchString){this.getTypeAheadData("groups",searchString,"path","path")},getRolesTypeAhead:function(searchString){this.getTypeAheadData("roles",searchString,"name","name")},getGroupsForUser:function(user){var options={type:"users/"+user+"/groups"};this.client().createCollection(options,function(err,groups){err?$rootScope.$broadcast("alert","error","error getting groups"):$rootScope.$broadcast("user-groups-received",groups)})},addUserToGroup:function(user,group){var options={type:"users/"+user+"/groups/"+group};this.client().createEntity(options,function(err){err?$rootScope.$broadcast("alert","error","error adding user to group"):$rootScope.$broadcast("user-added-to-group-received")})},addUserToRole:function(user,role){var options={method:"POST",endpoint:"roles/"+role+"/users/"+user};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error adding user to role"):$rootScope.$broadcast("role-update-received")})},addGroupToRole:function(group,role){var options={method:"POST",endpoint:"roles/"+role+"/groups/"+group};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error adding group to role"):$rootScope.$broadcast("role-update-received")})},followUser:function(user){var username=$rootScope.selectedUser.get("uuid"),options={method:"POST",endpoint:"users/"+username+"/following/users/"+user};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error following user"):$rootScope.$broadcast("follow-user-received")})},newPermission:function(permission,type,entity){var options={method:"POST",endpoint:type+"/"+entity+"/permissions",body:{permission:permission}};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error adding permission"):$rootScope.$broadcast("permission-update-received")})},newUserPermission:function(permission,username){this.newPermission(permission,"users",username)},newGroupPermission:function(permission,path){this.newPermission(permission,"groups",path)},newRolePermission:function(permission,name){this.newPermission(permission,"roles",name)},deletePermission:function(permission,type,entity){var options={method:"DELETE",endpoint:type+"/"+entity+"/permissions",qs:{permission:permission}};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error deleting permission"):$rootScope.$broadcast("permission-update-received")})},deleteUserPermission:function(permission,user){this.deletePermission(permission,"users",user)},deleteGroupPermission:function(permission,group){this.deletePermission(permission,"groups",group)},deleteRolePermission:function(permission,rolename){this.deletePermission(permission,"roles",rolename)},removeUserFromRole:function(user,role){var options={method:"DELETE",endpoint:"roles/"+role+"/users/"+user};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error removing user from role"):$rootScope.$broadcast("role-update-received")})},removeUserFromGroup:function(group,role){var options={method:"DELETE",endpoint:"roles/"+role+"/groups/"+group};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error removing role from the group"):$rootScope.$broadcast("role-update-received")})},createAndroidNotifier:function(name,APIkey){var options={method:"POST",endpoint:"notifiers",body:{apiKey:APIkey,name:name,provider:"google"}};this.client().request(options,function(err,data){err?(console.error(data),$rootScope.$broadcast("alert","error","error creating notifier ")):($rootScope.$broadcast("alert","success","New notifier created successfully."),$rootScope.$broadcast("notifier-update"))})},createAppleNotifier:function(file,name,environment,certificatePassword){var provider="apple",formData=new FormData;formData.append("p12Certificate",file),formData.append("name",name),formData.append("provider",provider),formData.append("environment",environment),formData.append("certificatePassword",certificatePassword||"");var options={method:"POST",endpoint:"notifiers",formData:formData};this.client().request(options,function(err,data){err?(console.error(data),$rootScope.$broadcast("alert","error",data.error_description||"error creating notifier")):($rootScope.$broadcast("alert","success","New notifier created successfully."),$rootScope.$broadcast("notifier-update"))})},deleteNotifier:function(name){var options={method:"DELETE",endpoint:"notifiers/"+name};this.client().request(options,function(err){err?$rootScope.$broadcast("alert","error","error deleting notifier"):$rootScope.$broadcast("notifier-update")})},initializeCurrentUser:function(callback){if(callback=callback||function(){},$rootScope.currentUser&&!$rootScope.currentUser.reset)return callback($rootScope.currentUser),$rootScope.$broadcast("current-user-initialized","");var options={method:"GET",endpoint:"management/users/"+this.client().get("email"),mQuery:!0};this.client().request(options,function(err,data){err?$rootScope.$broadcast("alert","error","Error getting user info"):($rootScope.currentUser=data.data,$rootScope.currentUser.profileImg=utility.get_gravatar($rootScope.currentUser.email),$rootScope.userEmail=$rootScope.currentUser.email,callback($rootScope.currentUser),$rootScope.$broadcast("current-user-initialized",$rootScope.currentUser)) -})},updateUser:function(user){var body={};body.username=user.username,body.name=user.name,body.email=user.email;var options={method:"PUT",endpoint:"management/users/"+user.uuid+"/",mQuery:!0,body:body},self=this;this.client().request(options,function(err,data){return self.client().set("email",user.email),self.client().set("username",user.username),err?$rootScope.$broadcast("user-update-error",data):($rootScope.currentUser.reset=!0,void self.initializeCurrentUser(function(){$rootScope.$broadcast("user-update-success",$rootScope.currentUser)}))})},resetUserPassword:function(user){var body={};body.oldpassword=user.oldPassword,body.newpassword=user.newPassword,body.username=user.username;var options={method:"PUT",endpoint:"management/users/"+user.uuid+"/",body:body,mQuery:!0};this.client().request(options,function(err){return err?$rootScope.$broadcast("alert","error","Error resetting password"):($rootScope.currentUser.oldPassword="",$rootScope.currentUser.newPassword="",void $rootScope.$broadcast("user-reset-password-success",$rootScope.currentUser))})},getOrgCredentials:function(){var options={method:"GET",endpoint:"management/organizations/"+this.client().get("orgName")+"/credentials",mQuery:!0};this.client().request(options,function(err,data){err&&data.credentials?$rootScope.$broadcast("alert","error","Error getting credentials"):$rootScope.$broadcast("org-creds-updated",data.credentials)})},regenerateOrgCredentials:function(){var options={method:"POST",endpoint:"management/organizations/"+this.client().get("orgName")+"/credentials",mQuery:!0};this.client().request(options,function(err,data){err&&data.credentials?$rootScope.$broadcast("alert","error","Error regenerating credentials"):($rootScope.$broadcast("alert","success","Regeneration of credentials complete."),$rootScope.$broadcast("org-creds-updated",data.credentials))})},getAppCredentials:function(){var options={method:"GET",endpoint:"credentials"};this.client().request(options,function(err,data){err&&data.credentials?$rootScope.$broadcast("alert","error","Error getting credentials"):$rootScope.$broadcast("app-creds-updated",data.credentials)})},regenerateAppCredentials:function(){var options={method:"POST",endpoint:"credentials"};this.client().request(options,function(err,data){err&&data.credentials?$rootScope.$broadcast("alert","error","Error regenerating credentials"):($rootScope.$broadcast("alert","success","Regeneration of credentials complete."),$rootScope.$broadcast("app-creds-updated",data.credentials))})},signUpUser:function(orgName,userName,name,email,password){var formData={organization:orgName,username:userName,name:name,email:email,password:password},options={method:"POST",endpoint:"management/organizations",body:formData,mQuery:!0},client=this.client();client.request(options,function(err,data){err?$rootScope.$broadcast("register-error",data):$rootScope.$broadcast("register-success",data)})},resendActivationLink:function(id){var options={method:"GET",endpoint:"management/users/"+id+"/reactivate",mQuery:!0};this.client().request(options,function(err,data){err?$rootScope.$broadcast("resend-activate-error",data):$rootScope.$broadcast("resend-activate-success",data)})},getAppSettings:function(){$rootScope.$broadcast("app-settings-received",{})},getActivities:function(){this.client().request({method:"GET",endpoint:"activities",qs:{limit:200}},function(err,data){if(err)return $rootScope.$broadcast("app-activities-error",data);var entities=data.entities;entities.forEach(function(entity){entity.actor.picture?(entity.actor.picture=entity.actor.picture.replace(/^http:\/\/www.gravatar/i,"https://secure.gravatar"),entity.actor.picture=~entity.actor.picture.indexOf("http")?entity.actor.picture:"https://apigee.com/usergrid/img/user_profile.png"):entity.actor.picture=window.location.protocol+"//"+window.location.host+window.location.pathname+"img/user_profile.png"}),$rootScope.$broadcast("app-activities-received",data.entities)})},getEntityActivities:function(entity,isFeed){var route=isFeed?"feed":"activities",endpoint=entity.get("type")+"/"+entity.get("uuid")+"/"+route,options={method:"GET",endpoint:endpoint,qs:{limit:200}};this.client().request(options,function(err,data){err&&$rootScope.$broadcast(entity.get("type")+"-"+route+"-error",data),data.entities.forEach(function(entityInstance){entityInstance.createdDate=new Date(entityInstance.created).toUTCString()}),$rootScope.$broadcast(entity.get("type")+"-"+route+"-received",data.entities)})},addUserActivity:function(user,content){var options={actor:{displayName:user.get("username"),uuid:user.get("uuid"),username:user.get("username")},verb:"post",content:content};this.client().createUserActivity(user.get("username"),options,function(err,activity){err?$rootScope.$broadcast("user-activity-add-error",err):$rootScope.$broadcast("user-activity-add-success",activity)})},runShellQuery:function(method,path,payload){var path=path.replace(/^\//,""),options={method:method,endpoint:path};payload&&(options.body=payload),this.client().request(options,function(err,data){err?$rootScope.$broadcast("shell-error",data):$rootScope.$broadcast("shell-success",data)})},addOrganization:function(user,orgName){var options={method:"POST",endpoint:"management/users/"+user.uuid+"/organizations",body:{organization:orgName},mQuery:!0},client=this.client();client.request(options,function(err,data){err?$rootScope.$broadcast("user-add-org-error",data):$rootScope.$broadcast("user-add-org-success",$rootScope.organizations)})},leaveOrganization:function(user,org){var options={method:"DELETE",endpoint:"management/users/"+user.uuid+"/organizations/"+org.uuid,mQuery:!0};this.client().request(options,function(err,data){err?$rootScope.$broadcast("user-leave-org-error",data):(delete $rootScope.organizations[org.name],$rootScope.$broadcast("user-leave-org-success",$rootScope.organizations))})},httpGet:function(id,url){var deferred;return deferred=$q.defer(),$http.get(url||configuration.ITEMS_URL).success(function(data){var result;id?angular.forEach(data,function(obj){obj.id===id&&(result=obj)}):result=data,deferred.resolve(result)}).error(function(data,status,headers,config){$log.error(data,status,headers,config),reportError(data,config),deferred.reject(data)}),deferred.promise},jsonp:function(objectType,criteriaId,params,successCallback){params||(params={}),params.demoApp=$rootScope.demoData,params.access_token=getAccessToken(),params.callback="JSON_CALLBACK";var uri=$rootScope.urls().DATA_URL+"/"+$rootScope.currentOrg+"/"+$rootScope.currentApp+"/apm/"+objectType+"/"+criteriaId;return this.jsonpRaw(objectType,criteriaId,params,uri,successCallback)},jsonpSimple:function(objectType,appId,params){var uri=$rootScope.urls().DATA_URL+"/"+$rootScope.currentOrg+"/"+$rootScope.currentApp+"/apm/"+objectType+"/"+appId;return this.jsonpRaw(objectType,appId,params,uri)},calculateAverageRequestTimes:function(){if(!running){var self=this;running=!0,setTimeout(function(){running=!1;var length=requestTimes.length<10?requestTimes.length:10,sum=requestTimes.slice(0,length).reduce(function(a,b){return a+b}),avg=sum/length;self.averageRequestTimes=avg/1e3,self.averageRequestTimes>5&&$rootScope.$broadcast("request-times-slow",self.averageRequestTimes)},3e3)}},jsonpRaw:function(objectType,appId,params,uri,successCallback){"function"!=typeof successCallback&&(successCallback=null),uri=uri||$rootScope.urls().DATA_URL+"/"+$rootScope.currentOrg+"/"+$rootScope.currentApp+"/"+objectType,params||(params={});var start=(new Date).getTime(),self=this;params.access_token=getAccessToken(),params.callback="JSON_CALLBACK";var deferred=$q.defer(),diff=function(){currentRequests[uri]--,requestTimes.splice(0,0,(new Date).getTime()-start),self.calculateAverageRequestTimes()};successCallback&&$rootScope.$broadcast("ajax_loading",objectType);var reqCount=currentRequests[uri]||0;return self.averageRequestTimes>5&&reqCount>1?(setTimeout(function(){deferred.reject(new Error("query in progress"))},50),deferred):(currentRequests[uri]=(currentRequests[uri]||0)+1,$http.jsonp(uri,{params:params}).success(function(data,status,headers,config){diff(),successCallback&&(successCallback(data,status,headers,config),$rootScope.$broadcast("ajax_finished",objectType)),deferred.resolve(data)}).error(function(data,status,headers,config){diff(),$log.error("ERROR: Could not get jsonp data. "+uri),reportError(data,config),deferred.reject(data)}),deferred.promise)},resource:function(params,isArray){return $resource($rootScope.urls().DATA_URL+"/:orgname/:appname/:username/:endpoint",{},{get:{method:"JSONP",isArray:isArray,params:params},login:{method:"GET",url:$rootScope.urls().DATA_URL+"/management/token",isArray:!1,params:params},save:{url:$rootScope.urls().DATA_URL+"/"+params.orgname+"/"+params.appname,method:"PUT",isArray:!1,params:params}})},httpPost:function(url,callback,payload,headers){var accessToken=getAccessToken();payload?payload.access_token=accessToken:payload={access_token:accessToken},headers||(headers={Bearer:accessToken}),$http({method:"POST",url:url,data:payload,headers:headers}).success(function(data){callback(data)}).error(function(data,status,headers,config){reportError(data,config),callback(data)})}}}),AppServices.Directives.directive("ngFocus",["$parse",function($parse){return function(scope,element,attr){var fn=$parse(attr.ngFocus);element.bind("focus",function(event){scope.$apply(function(){fn(scope,{$event:event})})})}}]),AppServices.Directives.directive("ngBlur",["$parse",function($parse){return function(scope,element,attr){var fn=$parse(attr.ngBlur);element.bind("blur",function(event){scope.$apply(function(){fn(scope,{$event:event})})})}}]),AppServices.Services.factory("utility",function(){return{keys:function(o){var a=[];for(var propertyName in o)a.push(propertyName);return a},get_gravatar:function(email,size){try{var size=size||50;return email.length?"https://secure.gravatar.com/avatar/"+MD5(email)+"?s="+size:"https://apigee.com/usergrid/img/user_profile.png"}catch(e){return"https://apigee.com/usergrid/img/user_profile.png"}},get_qs_params:function(){var queryParams={};if(window.location.search)for(var params=window.location.search.slice(1).split("&"),i=0;i'+title+"
";$("#"+id).after(validatorElem),element.addClass("has-error")}},firing=!1;element.bind("blur",function(){validate(scope,element,attrs,ctrl)}).bind("input",function(){firing||(firing=!0,setTimeout(function(){validate(scope,element,attrs,ctrl),firing=!1},500))})}}}]),AppServices.Controllers.controller("GroupsActivitiesCtrl",["ug","$scope","$rootScope","$location",function(ug,$scope,$rootScope,$location){return $scope.activitiesSelected="active",$rootScope.selectedGroup?($rootScope.selectedGroup.activities=[],void $rootScope.selectedGroup.getActivities(function(err){err||$rootScope.$$phase||$rootScope.$apply()})):void $location.path("/groups")}]),AppServices.Controllers.controller("GroupsCtrl",["ug","$scope","$rootScope","$location","$route",function(ug,$scope,$rootScope,$location,$route){$scope.groupsCollection={},$rootScope.selectedGroup={},$scope.previous_display="none",$scope.next_display="none",$scope.hasGroups=!1,$scope.newGroup={path:"",title:""},ug.getGroups(),$scope.currentGroupsPage={},$scope.selectGroupPage=function(route){$scope.currentGroupsPage.template=$route.routes[route].templateUrl,$scope.currentGroupsPage.route=route},$scope.newGroupDialog=function(modalId){$scope.newGroup.path&&$scope.newGroup.title?(ug.createGroup($scope.removeFirstSlash($scope.newGroup.path),$scope.newGroup.title),$scope.hideModal(modalId),$scope.newGroup={path:"",title:""}):$rootScope.$broadcast("alert","error","Missing required information.")},$scope.deleteGroupsDialog=function(modalId){$scope.deleteEntities($scope.groupsCollection,"group-deleted","error deleting group"),$scope.hideModal(modalId),$scope.newGroup={path:"",title:""}},$scope.$on("group-deleted",function(){$rootScope.$broadcast("alert","success","Group deleted successfully.")}),$scope.$on("group-deleted-error",function(){ug.getGroups()}),$scope.$on("groups-create-success",function(){$rootScope.$broadcast("alert","success","Group created successfully.")}),$scope.$on("groups-create-error",function(){$rootScope.$broadcast("alert","error","Error creating group. Make sure you don't have spaces in the path.")}),$scope.$on("groups-received",function(event,groups){$scope.groupBoxesSelected=!1,$scope.groupsCollection=groups,$scope.newGroup.path="",$scope.newGroup.title="",!(groups._list.length>0)||$rootScope.selectedGroup._data&&groups._list.some(function(group){return $rootScope.selectedGroup._data.uuid===group._data.uuid})||$scope.selectGroup(groups._list[0]._data.uuid),$scope.hasGroups=groups._list.length>0,$scope.received=!0,$scope.checkNextPrev(),$scope.applyScope()}),$scope.resetNextPrev=function(){$scope.previous_display="none",$scope.next_display="none"},$scope.checkNextPrev=function(){$scope.resetNextPrev(),$scope.groupsCollection.hasPreviousPage()&&($scope.previous_display="block"),$scope.groupsCollection.hasNextPage()&&($scope.next_display="block")},$scope.selectGroup=function(uuid){$rootScope.selectedGroup=$scope.groupsCollection.getEntityByUUID(uuid),$scope.currentGroupsPage.template="groups/groups-details.html",$scope.currentGroupsPage.route="/groups/details",$rootScope.$broadcast("group-selection-changed",$rootScope.selectedGroup)},$scope.getPrevious=function(){$scope.groupsCollection.getPreviousPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting previous page of groups"),$scope.checkNextPrev(),$scope.applyScope()})},$scope.getNext=function(){$scope.groupsCollection.getNextPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting next page of groups"),$scope.checkNextPrev(),$scope.applyScope()})},$scope.$on("group-deleted",function(){$route.reload(),$scope.master=""})}]),AppServices.Controllers.controller("GroupsDetailsCtrl",["ug","$scope","$rootScope","$location",function(ug,$scope,$rootScope,$location){var selectedGroup=$rootScope.selectedGroup.clone();return $scope.detailsSelected="active",$scope.json=selectedGroup._json||selectedGroup._data.stringifyJSON(),$scope.group=selectedGroup._data,$scope.group.path=0!=$scope.group.path.indexOf("/")?"/"+$scope.group.path:$scope.group.path,$scope.group.title=$scope.group.title,$rootScope.selectedGroup?($scope.$on("group-selection-changed",function(evt,selectedGroup){$scope.group.path=0!=selectedGroup._data.path.indexOf("/")?"/"+selectedGroup._data.path:selectedGroup._data.path,$scope.group.title=selectedGroup._data.title,$scope.detailsSelected="active",$scope.json=selectedGroup._json||selectedGroup._data.stringifyJSON()}),void($rootScope.saveSelectedGroup=function(){$rootScope.selectedGroup._data.title=$scope.group.title,$rootScope.selectedGroup._data.path=$scope.removeFirstSlash($scope.group.path),$rootScope.selectedGroup.save(function(err){err?$rootScope.$broadcast("alert","error","error saving group"):$rootScope.$broadcast("alert","success","group saved")})})):void $location.path("/groups")}]),AppServices.Controllers.controller("GroupsMembersCtrl",["ug","$scope","$rootScope","$location",function(ug,$scope,$rootScope,$location){return $scope.membersSelected="active",$scope.previous_display="none",$scope.next_display="none",$scope.user="",$scope.master="",$scope.hasMembers=!1,ug.getUsersTypeAhead(),$scope.usersTypeaheadValues=[],$scope.$on("users-typeahead-received",function(event,users){$scope.usersTypeaheadValues=users,$scope.applyScope()}),$scope.addGroupToUserDialog=function(modalId){if($scope.user){var path=$rootScope.selectedGroup.get("path");ug.addUserToGroup($scope.user.uuid,path),$scope.user="",$scope.hideModal(modalId)}else $rootScope.$broadcast("alert","error","Please select a user.")},$scope.removeUsersFromGroupDialog=function(modalId){$scope.deleteEntities($scope.groupsCollection.users,"group-update-received","Error removing user from group"),$scope.hideModal(modalId)},$scope.get=function(){if($rootScope.selectedGroup.get){var options={type:"groups/"+$rootScope.selectedGroup.get("path")+"/users"};$scope.groupsCollection.addCollection("users",options,function(err){$scope.groupMembersSelected=!1,err?$rootScope.$broadcast("alert","error","error getting users for group"):($scope.hasMembers=$scope.groupsCollection.users._list.length>0,$scope.checkNextPrev(),$scope.applyScope())})}},$scope.resetNextPrev=function(){$scope.previous_display="none",$scope.next_display="none"},$scope.checkNextPrev=function(){$scope.resetNextPrev(),$scope.groupsCollection.users.hasPreviousPage()&&($scope.previous_display="block"),$scope.groupsCollection.users.hasNextPage()&&($scope.next_display="block")},$rootScope.selectedGroup?($scope.get(),$scope.getPrevious=function(){$scope.groupsCollection.users.getPreviousPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting previous page of users"),$scope.checkNextPrev(),$rootScope.$$phase||$rootScope.$apply()})},$scope.getNext=function(){$scope.groupsCollection.users.getNextPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting next page of users"),$scope.checkNextPrev(),$rootScope.$$phase||$rootScope.$apply()})},$scope.$on("group-update-received",function(){$scope.get()}),void $scope.$on("user-added-to-group-received",function(){$scope.get()})):void $location.path("/groups")}]),AppServices.Controllers.controller("GroupsRolesCtrl",["ug","$scope","$rootScope","$location",function(ug,$scope,$rootScope,$location){return $scope.rolesSelected="active",$scope.roles_previous_display="none",$scope.roles_next_display="none",$scope.name="",$scope.master="",$scope.hasRoles=!1,$scope.hasPermissions=!1,$scope.permissions={},$scope.addGroupToRoleDialog=function(modalId){if($scope.name){var path=$rootScope.selectedGroup.get("path");ug.addGroupToRole(path,$scope.name),$scope.hideModal(modalId),$scope.name=""}else $rootScope.$broadcast("alert","error","You must specify a role name.")},$scope.leaveRoleDialog=function(modalId){for(var path=$rootScope.selectedGroup.get("path"),roles=$scope.groupsCollection.roles._list,i=0;i0,$scope.checkNextPrevRoles(),$scope.applyScope())})},$scope.getPermissions=function(){$rootScope.selectedGroup.permissions=[],$rootScope.selectedGroup.getPermissions(function(err){$scope.groupPermissionsSelected=!1,$scope.hasPermissions=$scope.selectedGroup.permissions.length,err||$scope.applyScope()})},$scope.getPreviousRoles=function(){$scope.groupsCollection.roles.getPreviousPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting previous page of roles"),$scope.checkNextPrevRoles(),$scope.applyScope()})},$scope.getNextRoles=function(){$scope.groupsCollection.roles.getNextPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting next page of roles"),$scope.checkNextPrevRoles(),$scope.applyScope()})},$scope.getPreviousPermissions=function(){$scope.groupsCollection.permissions.getPreviousPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting previous page of permissions"),$scope.checkNextPrevPermissions(),$scope.applyScope()})},$scope.getNextPermissions=function(){$scope.groupsCollection.permissions.getNextPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting next page of permissions"),$scope.checkNextPrevPermissions(),$scope.applyScope()})},$scope.$on("role-update-received",function(){$scope.getRoles()}),$scope.$on("permission-update-received",function(){$scope.getPermissions()}),$scope.$on("groups-received",function(evt,data){$scope.groupsCollection=data,$scope.getRoles(),$scope.getPermissions()}),$rootScope.selectedGroup?(ug.getRolesTypeAhead(),void ug.getGroups()):void $location.path("/groups")}]),AppServices.Controllers.controller("ForgotPasswordCtrl",["ug","$scope","$rootScope","$location","$sce","utility",function(ug,$scope,$rootScope,$location,$sce){$rootScope.activeUI&&$location.path("/"),$scope.forgotPWiframeURL=$sce.trustAsResourceUrl($scope.apiUrl+"/management/users/resetpw")}]),AppServices.Controllers.controller("LoginCtrl",["ug","$scope","$rootScope","$routeParams","$location","utility",function(ug,$scope,$rootScope,$routeParams,$location){$scope.loading=!1,$scope.login={},$scope.activation={},$scope.requiresDeveloperKey=$scope.options.client.requiresDeveloperKey||!1,!$scope.requiresDeveloperKey&&$scope.options.client.apiKey&&ug.setClientProperty("developerkey",$scope.options.client.apiKey),$rootScope.gotoForgotPasswordPage=function(){$location.path("/forgot-password")},$rootScope.gotoSignUp=function(){$location.path("/register")},$scope.login=function(){var username=$scope.login.username,password=$scope.login.password;$scope.loginMessage="",$scope.loading=!0,$scope.requiresDeveloperKey&&ug.setClientProperty("developerkey",$scope.login.developerkey),ug.orgLogin(username,password)},$scope.$on("loginFailed",function(){$scope.loading=!1,ug.setClientProperty("developerkey",null),$scope.loginMessage="Error: the username / password combination was not valid",$scope.applyScope()}),$scope.logout=function(){ug.logout(),ug.setClientProperty("developerkey",null),$scope.use_sso?window.location=$rootScope.urls().LOGOUT_URL+"?redirect=no&callback="+encodeURIComponent($location.absUrl().split("?")[0]):($location.path("/login"),$scope.applyScope())},$rootScope.$on("userNotAuthenticated",function(){"/forgot-password"!==$location.path()&&($location.path("/login"),$scope.logout()),$scope.applyScope()}),$scope.$on("loginSuccesful",function(){$scope.loading=!1,$scope.login={},$location.path("/login"===$rootScope.currentPath||"/login/loading"===$rootScope.currentPath||"undefined"==typeof $rootScope.currentPath?"/org-overview":$rootScope.currentPath),$scope.applyScope()}),$scope.resendActivationLink=function(modalId){var id=$scope.activation.id;ug.resendActivationLink(id),$scope.activation={},$scope.hideModal(modalId)},$scope.$on("resend-activate-success",function(){$scope.activationId="",$scope.$apply(),$rootScope.$broadcast("alert","success","Activation link sent successfully.")}),$scope.$on("resend-activate-error",function(){$rootScope.$broadcast("alert","error","Activation link failed to send.")})}]),AppServices.Controllers.controller("LogoutCtrl",["ug","$scope","$rootScope","$routeParams","$location","utility",function(ug,$scope,$rootScope,$routeParams,$location){ug.logout(),$scope.use_sso?window.location=$rootScope.urls().LOGOUT_URL+"?callback="+encodeURIComponent($location.absUrl().split("?")[0]):($location.path("/login"),$scope.applyScope())}]),AppServices.Controllers.controller("RegisterCtrl",["ug","$scope","$rootScope","$routeParams","$location","utility",function(ug,$scope,$rootScope,$routeParams,$location){$rootScope.activeUI&&$location.path("/");var init=function(){$scope.registeredUser={}};init(),$scope.cancel=function(){$location.path("/")},$scope.register=function(){var user=$scope.registeredUser.clone();user.password===user.confirmPassword?ug.signUpUser(user.orgName,user.userName,user.name,user.email,user.password):$rootScope.$broadcast("alert","error","Passwords do not match."+name)},$scope.$on("register-error",function(event,data){$scope.signUpSuccess=!1,$rootScope.$broadcast("alert","error","Error registering: "+(data&&data.error_description?data.error_description:name))}),$scope.$on("register-success",function(){$scope.registeredUser={},$scope.signUpSuccess=!0,init(),$scope.$apply()})}]),AppServices.Directives.directive("menu",["$location","$rootScope","$log",function($location,$rootScope,$log){return{link:function(scope,lElement,attrs){function setActiveElement(ele,locationPath,$rootScope,isParentClick){if(ele){ele.removeClass("active");var menuItem,parentMenuItem,newActiveElement=ele.parent().find('a[href*="#!'+locationPath+'"]');if(0===newActiveElement.length)parentMenuItem=ele;else{menuItem=newActiveElement.parent(),menuItem.hasClass("option")?parentMenuItem=menuItem[0]:1===menuItem.size()?(parentMenuItem=newActiveElement.parent().parent().parent(),parentMenuItem.addClass("active")):(parentMenuItem=menuItem[0],menuItem=menuItem[1]);try{var menuItemCompare=parentMenuItem[0]||parentMenuItem;ele[0]!==menuItemCompare&&isParentClick&&ele.find("ul")[0]&&(ele.find("ul")[0].style.height=0);var subMenuSizer=angular.element(parentMenuItem).find(".nav-list")[0];if(subMenuSizer){var heightChecker,clientHeight=subMenuSizer.getAttribute("data-height"),heightCounter=1;clientHeight||heightChecker?(menuItem.addClass("active"),subMenuSizer.style.height=clientHeight+"px"):heightChecker=setInterval(function(){var tempHeight=subMenuSizer.getAttribute("data-height")||subMenuSizer.clientHeight;heightCounter=subMenuSizer.clientHeight,0===heightCounter&&(heightCounter=1),"string"==typeof tempHeight&&(tempHeight=parseInt(tempHeight,10)),tempHeight>0&&heightCounter===tempHeight&&(subMenuSizer.setAttribute("data-height",tempHeight),menuItem.addClass("active"),subMenuSizer.style.height=tempHeight+"px",clearInterval(heightChecker)),heightCounter=tempHeight},20),$rootScope.menuExecute=!0}else menuItem.addClass("active")}catch(e){$log.error("Problem calculating size of menu",e)}}return{menuitem:menuItem,parentMenuItem:parentMenuItem}}}function setupMenuState(){if(menuContext=attrs.menu,parentMenuItems=lElement.find("li.option"),0!==lElement.find("li.option.active").length&&($rootScope[menuContext+"Parent"]=lElement.find("li.option.active")),activeParentElement=$rootScope[menuContext+"Parent"]||null,activeParentElement&&(activeParentElement=angular.element(activeParentElement)),menuItems=lElement.find("li.option li"),locationPath=$location.path(),activeParentElement&&(activeMenuElement=angular.element(activeParentElement),activeMenuElement=activeMenuElement.find("li.active"),activeMenuElement.removeClass("active"),activeParentElement.find("a")[0])){subMenuContext=activeParentElement.find("a")[0].href.split("#!")[1];var tempMenuContext=subMenuContext.split("/");subMenuContext="/"+tempMenuContext[1],tempMenuContext.length>2&&(subMenuContext+="/"+tempMenuContext[2])}var activeElements;""!==locationPath&&-1===locationPath.indexOf(subMenuContext)?(activeElements=setActiveElement(activeParentElement,locationPath,scope),activeElements&&($rootScope[menuContext+"Parent"]=activeElements.parentMenuItem,$rootScope[menuContext+"Menu"]=activeElements.menuitem)):setActiveElement(activeParentElement,subMenuContext,scope)}var menuContext,parentMenuItems,activeParentElement,menuItems,activeMenuElement,locationPath,subMenuContext,bound=!1;setTimeout(setupMenuState,500),scope.$on("$routeChangeSuccess",function(){setTimeout(function(){setupMenuState(),bound||(bound=!0,parentMenuItems.bind("click",function(cevent){var previousParentSelection=angular.element($rootScope[menuContext+"Parent"]),targetPath=angular.element(cevent.currentTarget).find("> a")[0].href.split("#!")[1];previousParentSelection.find(".nav > li").removeClass("active");var activeElements=setActiveElement(previousParentSelection,targetPath,scope,!0);$rootScope[menuContext+"Parent"]=activeElements.parentMenuItem,$rootScope[menuContext+"Menu"]=activeElements.menuitem,scope.$broadcast("menu-selection")}),menuItems.bind("click",function(cevent){var previousMenuSelection=$rootScope[menuContext+"Menu"],targetElement=cevent.currentTarget;previousMenuSelection!==targetElement&&(previousMenuSelection?angular.element(previousMenuSelection).removeClass("active"):activeMenuElement.removeClass("active"),scope.$apply(function(){angular.element($rootScope[menuContext]).addClass("active")}),$rootScope[menuContext+"Menu"]=targetElement,angular.element($rootScope[menuContext+"Parent"]).find("a")[0].setAttribute("href",angular.element(cevent.currentTarget).find("a")[0].href))}))},500)})}}}]),AppServices.Directives.directive("timeFilter",["$location","$routeParams","$rootScope",function($location,$routeParams,$rootScope){return{restrict:"A",transclude:!0,template:'
  • {{time.label}}
  • ',link:function(scope,lElement,attrs){var menuContext=attrs.filter;scope.changeTimeFilter=function(newTime){$rootScope.selectedtimefilter=newTime,$routeParams.timeFilter=newTime.value},lElement.bind("click",function(cevent){menuBindClick(scope,lElement,cevent,menuContext)})}}}]),AppServices.Directives.directive("chartFilter",["$location","$routeParams","$rootScope",function($location,$routeParams,$rootScope){return{restrict:"ACE",scope:"=",template:'
  • {{chart.chartName}}
  • ',link:function(scope,lElement,attrs){var menuContext=attrs.filter;scope.changeChart=function(newChart){$rootScope.selectedChartCriteria=newChart,$routeParams.currentCompare="NOW",$routeParams[newChart.type+"ChartFilter"]=newChart.chartCriteriaId},lElement.bind("click",function(cevent){menuBindClick(scope,lElement,cevent,menuContext)})}}}]),AppServices.Directives.directive("orgMenu",["$location","$routeParams","$rootScope","ug",function($location,$routeParams,$rootScope,ug){return{restrict:"ACE",scope:"=",replace:!0,templateUrl:"menus/orgMenu.html",link:function(scope){scope.orgChange=function(orgName){var oldOrg=ug.get("orgName");ug.set("orgName",orgName),$rootScope.currentOrg=orgName,$location.path("/org-overview"),$rootScope.$broadcast("org-changed",oldOrg,orgName)},scope.$on("change-org",function(args,org){scope.orgChange(org)})}}}]),AppServices.Directives.directive("appMenu",["$location","$routeParams","$rootScope","ug",function($location,$routeParams,$rootScope,ug){return{restrict:"ACE",scope:"=",replace:!0,templateUrl:"menus/appMenu.html",link:function(scope){scope.myApp={}; -var bindApplications=function(applications){scope.applications=applications;var key,size=0;for(key in applications)applications.hasOwnProperty(key)&&size++;scope.hasApplications=Object.keys(applications).length>0,scope.myApp.currentApp||($rootScope.currentApp=scope.myApp.currentApp=ug.get("appName"));var hasApplications=Object.keys(applications).length>0;applications[scope.myApp.currentApp]||($rootScope.currentApp=scope.myApp.currentApp=hasApplications?applications[Object.keys(applications)[0]].name:""),setTimeout(function(){scope.hasApplications?scope.hideModal("newApplication"):scope.showModal("newApplication")},1e3)};scope.appChange=function(newApp){var oldApp=scope.myApp.currentApp;ug.set("appName",newApp),$rootScope.currentApp=scope.myApp.currentApp=newApp,$rootScope.$broadcast("app-changed",oldApp,newApp)},scope.$on("app-initialized",function(){bindApplications(scope.applications),scope.applyScope()}),scope.$on("applications-received",function(event,applications){bindApplications(applications),scope.applyScope()}),scope.$on("applications-created",function(evt,applications,name){$rootScope.$broadcast("alert","info",'New application "'+scope.newApp.name+'" created!'),scope.appChange(name),$location.path("/getting-started/setup"),scope.newApp.name=""}),scope.newApplicationDialog=function(modalId){var createNewApp=function(){var found=!1;if(scope.applications)for(var app in scope.applications)if(app===scope.newApp.name.toLowerCase()){found=!0;break}return scope.newApp.name&&!found?ug.createApplication(scope.newApp.name):$rootScope.$broadcast("alert","error",found?"Application already exists.":"You must specify a name."),found};scope.hasCreateApplicationError=createNewApp(),scope.hasCreateApplicationError||scope.applyScope(),scope.hideModal(modalId)},scope.applications&&bindApplications(scope.applications)}}}]),AppServices.Controllers.controller("OrgOverviewCtrl",["ug","help","$scope","$rootScope","$routeParams","$location",function(ug,help,$scope,$rootScope){var init=function(oldOrg){var orgName=$scope.currentOrg,orgUUID="";return orgName&&$scope.organizations[orgName]?(orgUUID=$scope.organizations[orgName].uuid,$scope.currentOrganization={name:orgName,uuid:orgUUID},$scope.applications=[{name:"...",uuid:"..."}],$scope.orgAdministrators=[],$scope.activities=[],$scope.orgAPICredentials={client_id:"...",client_secret:"..."},$scope.admin={},$scope.newApp={},ug.getApplications(),ug.getOrgCredentials(),ug.getAdministrators(),void ug.getFeed()):(console.error("Your current user is not authenticated for this organization."),void setTimeout(function(){$rootScope.$broadcast("change-org",oldOrg||$scope.organizations[Object.keys($scope.organizations)[0]].name)},1e3))};$scope.$on("org-changed",function(args,oldOrg){init(oldOrg)}),$scope.$on("app-initialized",function(){init()}),$scope.regenerateCredentialsDialog=function(modalId){$scope.orgAPICredentials={client_id:"regenerating...",client_secret:"regenerating..."},ug.regenerateOrgCredentials(),$scope.hideModal(modalId)},$scope.newAdministratorDialog=function(modalId){$scope.admin.email?(ug.createAdministrator($scope.admin.email),$scope.hideModal(modalId),$rootScope.$broadcast("alert","success","Administrator created successfully.")):$rootScope.$broadcast("alert","error","You must specify an email address.")},$scope.$on("applications-received",function(event,applications){$scope.applications=applications,$scope.applyScope()}),$scope.$on("administrators-received",function(event,administrators){$scope.orgAdministrators=administrators,$scope.applyScope()}),$scope.$on("org-creds-updated",function(event,credentials){$scope.orgAPICredentials=credentials,$scope.applyScope()}),$scope.$on("feed-received",function(event,feed){$scope.activities=feed,$scope.applyScope()}),$scope.activeUI&&init()}]),AppServices.Controllers.controller("AccountCtrl",["$scope","$rootScope","ug","utility","$route",function($scope,$rootScope,ug,utility,$route){$scope.currentAccountPage={};var route=$scope.use_sso?"/profile/organizations":"/profile/profile";$scope.currentAccountPage.template=$route.routes[route].templateUrl,$scope.currentAccountPage.route=route,$scope.applyScope(),$scope.selectAccountPage=function(route){$scope.currentAccountPage.template=$route.routes[route].templateUrl,$scope.currentAccountPage.route=route}}]),AppServices.Controllers.controller("OrgCtrl",["$scope","$rootScope","ug","utility",function($scope,$rootScope,ug){$scope.org={},$scope.currentOrgPage={};var createOrgsArray=function(){var orgs=[];for(var org in $scope.organizations)orgs.push($scope.organizations[org]);$scope.orgs=orgs,$scope.selectOrganization(orgs[0])};$scope.selectOrganization=function(org){org.usersArray=[];for(var user in org.users)org.usersArray.push(org.users[user]);org.applicationsArray=[];for(var app in org.applications)org.applicationsArray.push({name:app.replace(org.name+"/",""),uuid:org.applications[app]});return $scope.selectedOrg=org,$scope.applyScope(),!1},$scope.addOrganization=function(modalId){$scope.hideModal(modalId),ug.addOrganization($rootScope.currentUser,$scope.org.name)},$scope.$on("user-add-org-success",function(){$scope.org={},$scope.applyScope(),ug.reAuthenticate($rootScope.userEmail,"org-reauthenticate"),$rootScope.$broadcast("alert","success","successfully added the new organization.")}),$scope.$on("user-add-org-error",function(){$rootScope.$broadcast("alert","error","An error occurred attempting to add the organization.")}),$scope.$on("org-reauthenticate-success",function(){createOrgsArray(),$scope.applyScope()}),$scope.doesOrgHaveUsers=function(org){var test=org.usersArray.length>1;return test},$scope.leaveOrganization=function(org){ug.leaveOrganization($rootScope.currentUser,org)},$scope.$on("user-leave-org-success",function(){ug.reAuthenticate($rootScope.userEmail,"org-reauthenticate"),$rootScope.$broadcast("alert","success","User has left the selected organization(s).")}),$scope.$on("user-leave-org-error",function(){$rootScope.$broadcast("alert","error","An error occurred attempting to leave the selected organization(s).")}),createOrgsArray()}]),AppServices.Controllers.controller("ProfileCtrl",["$scope","$rootScope","ug","utility",function($scope,$rootScope,ug){$scope.loading=!1,$scope.saveUserInfo=function(){$scope.loading=!0,ug.updateUser($scope.user)},$scope.$on("user-update-error",function(){$scope.loading=!1,$rootScope.$broadcast("alert","error","Error updating user info")}),$scope.$on("user-update-success",function(){$scope.loading=!1,$rootScope.$broadcast("alert","success","Profile information updated successfully!"),$scope.user.oldPassword&&"undefined"!=$scope.user.newPassword&&ug.resetUserPassword($scope.user)}),$scope.$on("user-reset-password-success",function(){$rootScope.$broadcast("alert","success","Password updated successfully!"),$scope.user=$rootScope.currentUser.clone()}),$scope.$on("app-initialized",function(){$scope.user=$rootScope.currentUser.clone()}),$rootScope.activeUI&&($scope.user=$rootScope.currentUser.clone(),$scope.applyScope())}]),AppServices.Controllers.controller("RolesCtrl",["ug","$scope","$rootScope","$location","$route",function(ug,$scope,$rootScope,$location,$route){$scope.rolesCollection={},$rootScope.selectedRole={},$scope.previous_display="none",$scope.next_display="none",$scope.roles_check_all="",$scope.rolename="",$scope.hasRoles=!1,$scope.newrole={},$scope.currentRolesPage={},$scope.selectRolePage=function(route){$scope.currentRolesPage.template=$route.routes[route].templateUrl,$scope.currentRolesPage.route=route},ug.getRoles(),$scope.newRoleDialog=function(modalId){$scope.newRole.name?(ug.createRole($scope.newRole.name,$scope.newRole.title),$rootScope.$broadcast("alert","success","Role created successfully."),$scope.hideModal(modalId),$scope.newRole={}):$rootScope.$broadcast("alert","error","You must specify a role name.")},$scope.deleteRoleDialog=function(modalId){$scope.deleteEntities($scope.rolesCollection,"role-deleted","error deleting role"),$scope.hideModal(modalId)},$scope.$on("role-deleted",function(){$rootScope.$broadcast("alert","success","Role deleted successfully."),$scope.master="",$scope.newRole={}}),$scope.$on("role-deleted-error",function(){ug.getRoles()}),$scope.$on("roles-received",function(event,roles){$scope.rolesSelected=!1,$scope.rolesCollection=roles,$scope.newRole={},roles._list.length>0&&($scope.hasRoles=!0,$scope.selectRole(roles._list[0]._data.uuid)),$scope.checkNextPrev(),$scope.applyScope()}),$scope.resetNextPrev=function(){$scope.previous_display="none",$scope.next_display="none"},$scope.checkNextPrev=function(){$scope.resetNextPrev(),$scope.rolesCollection.hasPreviousPage()&&($scope.previous_display="block"),$scope.rolesCollection.hasNextPage()&&($scope.next_display="block")},$scope.selectRole=function(uuid){$rootScope.selectedRole=$scope.rolesCollection.getEntityByUUID(uuid),$scope.currentRolesPage.template="roles/roles-settings.html",$scope.currentRolesPage.route="/roles/settings",$rootScope.$broadcast("role-selection-changed",$rootScope.selectedRole)},$scope.getPrevious=function(){$scope.rolesCollection.getPreviousPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting previous page of roles"),$scope.checkNextPrev(),$scope.applyScope()})},$scope.getNext=function(){$scope.rolesCollection.getNextPage(function(err){err&&$rootScope.$broadcast("alert","error","error getting next page of roles"),$scope.checkNextPrev(),$scope.applyScope()})}}]),AppServices.Controllers.controller("RolesGroupsCtrl",["ug","$scope","$rootScope","$location",function(ug,$scope,$rootScope,$location){return $scope.groupsSelected="active",$scope.previous_display="none",$scope.next_display="none",$scope.path="",$scope.hasGroups=!1,ug.getGroupsTypeAhead(),$scope.groupsTypeaheadValues=[],$scope.$on("groups-typeahead-received",function(event,groups){$scope.groupsTypeaheadValues=groups,$scope.applyScope()}),$scope.addRoleToGroupDialog=function(modalId){if($scope.path){var name=$rootScope.selectedRole._data.uuid;ug.addGroupToRole($scope.path,name),$scope.hideModal(modalId),$scope.path="",$scope.title=""}else $rootScope.$broadcast("alert","error","You must specify a group.")},$scope.setRoleModal=function(group){$scope.path=group.path,$scope.title=group.title},$scope.removeGroupFromRoleDialog=function(modalId){for(var roleName=$rootScope.selectedRole._data.uuid,groups=$scope.rolesCollection.groups._list,i=0;ipayload_start){var json=path.substring(payload_start,i).trim();payload=JSON.parse(json)}break}i++}else{i++;for(var segment_start=i;isegment_start){var segment=path.substring(segment_start,i);segments.push(segment)}}else{var bracket_start=i;i++;for(var bracket_count=1;i0;)c=path.charAt(i),"{"==c?bracket_count++:"}"==c&&bracket_count--,i++;if(i>bracket_start){var segment=path.substring(bracket_start,i);segments.push(JSON.parse(segment))}}}var newPath="";for(i=0;i1&&tail.push(item[0]+"="+encodeURIComponent(item[1]))}else for(var key in params)if(params.hasOwnProperty(key)){var value=params[key];if(value instanceof Array)for(i in value){var item=value[i];tail.push(key+"="+encodeURIComponent(item))}else tail.push(key+"="+encodeURIComponent(value))}return tail.join("&")}$scope.shell={input:"",output:""},$scope.submitCommand=function(){$scope.shell.input&&$scope.shell.input.length&&handleShellCommand($scope.shell.input)};var handleShellCommand=function(s){var path="",params="",shouldScroll=!1,hasMatchLength=function(expression){var res=s.match(expression);return res&&res.length>0};try{switch(!0){case hasMatchLength(/^\s*\//):path=encodePathString(s),printLnToShell(path),ug.runShellQuery("GET",path,null);break;case hasMatchLength(/^\s*get\s*\//i):path=encodePathString(s.substring(4)),printLnToShell(path),ug.runShellQuery("GET",path,null);break;case hasMatchLength(/^\s*put\s*\//i):params=encodePathString(s.substring(4),!0),printLnToShell(params.path),ug.runShellQuery("PUT",params.path,params.payload);break;case hasMatchLength(/^\s*post\s*\//i):params=encodePathString(s.substring(5),!0),printLnToShell(params.path),ug.runShellQuery("POST",params.path,params.payload);break;case hasMatchLength(/^\s*delete\s*\//i):path=encodePathString(s.substring(7)),printLnToShell(path),ug.runShellQuery("DELETE",path,null);break;case hasMatchLength(/^\s*clear|cls\s*/i):$scope.shell.output="",shouldScroll=!0;break;case hasMatchLength(/(^\s*help\s*|\?{1,2})/i):shouldScroll=!0,printLnToShell("/<path> - API get request"),printLnToShell("get /<path> - API get request"),printLnToShell("put /<path> {<json>} - API put request"),printLnToShell("post /<path> {<json>} - API post request"),printLnToShell("delete /<path> - API delete request"),printLnToShell("cls, clear - clear the screen"),printLnToShell("help - show this help");break;case""===s:shouldScroll=!0,printLnToShell("ok");break;default:shouldScroll=!0,printLnToShell("syntax error!")}}catch(e){$log.error(e),printLnToShell("syntax error!")}shouldScroll&&scroll()},printLnToShell=function(s){s||(s=" "),$scope.shell.outputhidden=s;var html='
    '+s+"
    ";html+=" ";var trustedHtml=$sce.trustAsHtml(html);$scope.shell.output+=trustedHtml.toString()};$scope.$on("shell-success",function(evt,data){printLnToShell(JSON.stringify(data,null," ")),scroll()}),$scope.$on("shell-error",function(evt,data){printLnToShell(JSON.stringify(data,null," ")),scroll()});var scroll=function(){$scope.shell.output+="
    ",$scope.applyScope(),setTimeout(function(){var myshell=$("#shell-output");myshell.animate({scrollTop:myshell[0].scrollHeight},800)},200)}}]),angular.module("appservices").run(["$templateCache",function($templateCache){"use strict";$templateCache.put("activities/activities.html",'
    \n
    \n
    \n

    📱 Activities

    \n
    \n
    \n\n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    DateUserContentVerbUUID
    {{formatDate(activity.created)}} \n {{activity.actor.displayName}}{{activity.content}}{{activity.verb}}{{activity.uuid}}
    \n
    \n
    '),$templateCache.put("app-overview/app-overview.html",'
    \n
    \n\n \n
    \n

    {{currentApp}}

    \n
    \n
    \n\n
    \n \n
    \n\n
    \n \n \n \n \n \n \n \n \n \n
    PathTitle
    {{v.title}}{{v.count}}
    \n
    \n\n
    \n
    '),$templateCache.put("app-overview/doc-includes/android.html",'

    1. Integrate the SDK into your project

    \n

    You can integrate Apigee features into your app by including the SDK in your project.  You can do one of the following:

    \n\n\n\n
    \n
    \n \n

    If you\'ve already got an Android project, you can integrate the Apigee SDK into your project as you normally would:

    \n
    \n Details \n
    \n
    \n

    Add apigee-android-<version>.jar to your class path by doing the following:

    \n \n

    Android 4.0 (or later) projects

    \n

    Copy the jar file into the /libs folder in your project.

    \n \n

    Android 3.0 (or earlier) projects

    \n
      \n
    1. In the Eclipse Package Explorer, select your application\'s project folder.
    2. \n
    3. Click the File > Properties menu.
    4. \n
    5. In the Java Build Path section, click the Libraries tab, click Add External JARs.
    6. \n
    7. Browse to apigee-android-<version>.jar, then click Open.
    8. \n
    9. Order the apigee-android-<version>.jar at the top of the class path:\n
        \n
      1. In the Eclipse Package Explorer, select your application\'s project folder.
      2. \n
      3. Click the File > Properties menu.
      4. \n
      5. In the properties dialog, in the Java Build Path section, click the Order and Export tab.
      6. \n
      7. \n

        IMPORTANT: Select the checkbox for apigee-android-<version>.jar, then click the Top button.

        \n
      8. \n
      \n
    10. \n
    \n
    \n

    Applications using Ant

    \n

    If you are using Ant to build your application, you must also copy apigee-android-<version>.jar to the /libs folder in your application.

    \n
    \n
    \n
    \n
    \n \n

    If you don\'t have a project yet, you can begin by using the project template included with the SDK. The template includes support for SDK features.

    \n
      \n
    • Locate the project template in the expanded SDK. It should be at the following location:\n
      <sdk_root>/new-project-template
      \n
    • \n
    \n
    \n
    \n

    2. Update permissions in AndroidManifest.xml

    \n

    Add the following Internet permissions to your application\'s AndroidManifest.xml file if they have not already been added. Note that with the exception of INTERNET, enabling all other permissions are optional.

    \n
    \n<uses-permission android:name="android.permission.INTERNET" />\n<uses-permission android:name="android.permission.READ_PHONE_STATE" />\n<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />\n<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />\n<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />\n
    \n

    3. Initialize the SDK

    \n

    To initialize the App Services SDK, you must instantiate the ApigeeClient class. There are multiple ways to handle this step, but we recommend that you do the following:

    \n
      \n
    1. Subclass the Application class, and add an instance variable for the ApigeeClient to it, along with getter and setter methods.\n
      \npublic class YourApplication extends Application\n{\n        \n        private ApigeeClient apigeeClient;\n        \n        public YourApplication()\n        {\n                this.apigeeClient = null;\n        }\n        \n        public ApigeeClient getApigeeClient()\n        {\n                return this.apigeeClient;\n        }\n        \n        public void setApigeeClient(ApigeeClient apigeeClient)\n        {\n                this.apigeeClient = apigeeClient;\n        }\n}			\n		
      \n
    2. \n
    3. Declare the Application subclass in your AndroidManifest.xml. For example:\n
      \n<application>\n    android:allowBackup="true"\n    android:icon="@drawable/ic_launcher"\n    android:label="@string/app_name"\n    android:name=".YourApplication"\n	…\n</application>			\n		
      \n
    4. \n
    5. Instantiate the ApigeeClient class in the onCreate method of your first Activity class:\n
      \nimport com.apigee.sdk.ApigeeClient;\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);		\n	\n	String ORGNAME = "{{currentOrg}}";\n	String APPNAME = "{{currentApp}}";\n	\n	ApigeeClient apigeeClient = new ApigeeClient(ORGNAME,APPNAME,this.getBaseContext());\n\n	// hold onto the ApigeeClient instance in our application object.\n	YourApplication yourApp = (YourApplication) getApplication;\n	yourApp.setApigeeClient(apigeeClient);			\n}\n		
      \n

      This will make the instance of ApigeeClient available to your Application class.

      \n
    6. \n
    \n

    4. Import additional SDK classes

    \n

    The following classes will enable you to call common SDK methods:

    \n
    \nimport com.apigee.sdk.data.client.DataClient; //App Services data methods\nimport com.apigee.sdk.apm.android.MonitoringClient; //App Monitoring methods\nimport com.apigee.sdk.data.client.callbacks.ApiResponseCallback; //API response handling\nimport com.apigee.sdk.data.client.response.ApiResponse; //API response object\n
    \n \n

    5. Verify SDK installation

    \n\n

    Once initialized, App Services will also automatically instantiate the MonitoringClient class and begin logging usage, crash and error metrics for your app.

    \n

    screenshot of data in admin portal

    \n

    To verify that the SDK has been properly initialized, run your app, then go to \'Monitoring\' > \'App Usage\' in the App Services admin portal to verify that data is being sent.

    \n
    It may take up to two minutes for data to appear in the admin portal after you run your app.
    \n\n

    Installation complete! Try these next steps

    \n
      \n
    • \n

      Call additional SDK methods in your code

      \n

      The DataClient and MonitoringClient classes are also automatically instantiated for you, and accessible with the following accessors:

      \n
        \n
      • \n
        DataClient dataClient = apigeeClient.getDataClient();
        \n

        Use this object to access the data methods of the App Services SDK, including those for push notifications, data store, and geolocation.

        \n
      • \n
      • \n
        MonitoringClient monitoringClient = apigeeClient.getMonitoringClient();
        \n

        Use this object to access the app configuration and monitoring methods of the App Services SDK, including advanced logging, and A/B testing.

        \n
      • \n
      \n
    • \n
    • \n

      Add App Services features to your app

      \n

      With App Services you can quickly add valuable features to your mobile or web app, including push notifications, a custom data store, geolocation and more. Check out these links to get started with a few of our most popular features:

      \n
        \n
      • Push notifications: Send offers, alerts and other messages directly to user devices to dramatically increase engagement. With App Services you can send 10 million push notification per month for free!
      • \n
      • App Monitoring: When you initialize the App Services SDK, a suite of valuable, customizable application monitoring features are automatically enabled that deliver the data you need to fine tune performance, analyze issues, and improve user experience.\n \n
      • \n
      • Geolocation: Target users or return result sets based on user location to keep your app highly-relevant.
      • \n
      • Data storage: Store all your application data on our high-availability infrastructure, and never worry about dealing with a database ever again.
      • \n
      • User management and authentication: Every app needs users. Use App Services to easily implement user registration, as well as OAuth 2.0-compliant login and authentication.
      • \n
      \n
    • \n
    • \n

      Check out the sample apps

      \n

      The SDK includes samples that illustrate Apigee features. You\'ll find the samples in the following location in your SDK download:

      \n
      \napigee-android-sdk-<version>\n	...\n	/samples\n		
      \n \n
      \n

      The samples include the following:

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      SampleDescription
      booksAn app for storing a list of books that shows Apigee database operations such as reading, creating, and deleting.
      messageeAn app for sending and receiving messages that shows Apigee database operations (reading, creating).
      pushAn app that uses the push feature to send notifications to the devices of users who have subscribed for them.
      \n
      \n
    • \n
    \n'),$templateCache.put("app-overview/doc-includes/ios.html",'

    1. Integrate ApigeeiOSSDK.framework

    \n\n\n
    \n
    \n

    If you\'ve already got an Xcode iOS project, add it into your project as you normally would.

    \n \n
    \n
      \n
    1. \n

      Locate the SDK framework file so you can add it to your project. For example, you\'ll find the file at the following path:

      \n
      \n<sdk_root>/bin/ApigeeiOSSDK.framework
      \n
    2. \n
    3. In the Project Navigator, click on your project file, and then the Build Phases tab. Expand Link Binary With Libraries.
    4. \n
    5. Link the Apigee iOS SDK into your project.\n
        \n
      • Drag ApigeeiOSSDK.framework into the Frameworks group created by Xcode.
      • \n
      \n

      OR

      \n
        \n
      1. At the bottom of the Link Binary With Libraries group, click the + button. Then click Add Other.
      2. \n
      3. Navigate to the directory that contains ApigeeiOSSDK.framework, and choose the ApigeeiOSSDK.framework folder.
      4. \n
      \n
    6. \n
    \n
    \n
    \n
    \n

    If you\'re starting with a clean slate (you don\'t have a project yet), you can begin by using the project template included with the SDK. The template includes support for SDK features.

    \n
      \n
    1. \n

      Locate the project template in the expanded SDK. It should be at the following location:

      \n
      \n<sdk_root>/new-project-template
      \n
    2. \n
    3. In the project template directory, open the project file: Apigee App Services iOS Template.xcodeproj.
    4. \n
    5. Get acquainted with the template by looking at its readme file.
    6. \n
    \n
    \n
    \n

    2. Add required iOS frameworks

    \n

    Ensure that the following iOS frameworks are part of your project. To add them, under the Link Binary With Libraries group, click the + button, type the name of the framework you want to add, select the framework found by Xcode, then click Add.

    \n
      \n
    • QuartzCore.framework
    • \n
    • CoreLocation.framework
    • \n
    • CoreTelephony.framework 
    • \n
    • Security.framework
    • \n
    • SystemConfiguration.framework
    • \n
    • UIKit.framework
    • \n
    \n

    3. Update \'Other Linker Flags\'

    \n

    In the Build Settings panel, add the following under Other Linker Flags:

    \n
    \n-ObjC -all_load
    \n

    Confirm that flags are set for both DEBUG and RELEASE.

    \n

    4. Initialize the SDK

    \n

    The ApigeeClient class initializes the App Services SDK. To do this you will need your organization name and application name, which are available in the Getting Started tab of the App Service admin portal, under Mobile SDK Keys.

    \n
      \n
    1. Import the SDK\n

      Add the following to your source code to import the SDK:

      \n
      \n#import <ApigeeiOSSDK/Apigee.h>
      \n
    2. \n
    3. \n

      Declare the following properties in AppDelegate.h:

      \n
      \n@property (strong, nonatomic) ApigeeClient *apigeeClient; \n@property (strong, nonatomic) ApigeeMonitoringClient *monitoringClient;\n@property (strong, nonatomic) ApigeeDataClient *dataClient;	\n		
      \n
    4. \n
    5. \n

      Instantiate the ApigeeClient class inside the didFinishLaunching method of AppDelegate.m:

      \n
      \n//Replace \'AppDelegate\' with the name of your app delegate class to instantiate it\nAppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];\n\n//Sepcify your App Services organization and application names\nNSString *orgName = @"{{currentOrg}}";\nNSString *appName = @"{{currentApp}}";\n\n//Instantiate ApigeeClient to initialize the SDK\nappDelegate.apigeeClient = [[ApigeeClient alloc]\n                            initWithOrganizationId:orgName\n                            applicationId:appName];\n                            \n//Retrieve instances of ApigeeClient.monitoringClient and ApigeeClient.dataClient\nself.monitoringClient = [appDelegate.apigeeClient monitoringClient]; \nself.dataClient = [appDelegate.apigeeClient dataClient]; \n		
      \n
    6. \n
    \n\n

    5. Verify SDK installation

    \n\n

    Once initialized, App Services will also automatically instantiate the ApigeeMonitoringClient class and begin logging usage, crash and error metrics for your app.

    \n\n

    To verify that the SDK has been properly initialized, run your app, then go to \'Monitoring\' > \'App Usage\' in the App Services admin portal to verify that data is being sent.

    \n

    screenshot of data in admin portal

    \n
    It may take up to two minutes for data to appear in the admin portal after you run your app.
    \n\n

    Installation complete! Try these next steps

    \n
      \n
    • \n

      Call additional SDK methods in your code

      \n

      Create an instance of the AppDelegate class, then use appDelegate.dataClient or appDelegate.monitoringClient to call SDK methods:

      \n \n
      \n
        \n
      • appDelegate.dataClient: Used to access the data methods of the App Services SDK, including those for push notifications, data store, and geolocation.
      • \n
      • appDelegate.monitoringClient: Used to access the app configuration and monitoring methods of the App Services SDK, including advanced logging, and A/B testing.
      • \n
      \n

      Example

      \n

      For example, you could create a new entity with the following:

      \n
      \nAppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];\nApigeeClientResponse *response = [appDelegate.dataClient createEntity:entity];\n			
      \n
      \n\n
    • \n
    • \n

      Add App Services features to your app

      \n

      With App Services you can quickly add valuable features to your mobile or web app, including push notifications, a custom data store, geolocation and more. Check out these links to get started with a few of our most popular features:

      \n
        \n
      • Push notifications: Send offers, alerts and other messages directly to user devices to dramatically increase engagement. With App Services you can send 10 million push notification per month for free!
      • \n
      • Geolocation: Target users or return result sets based on user location to keep your app highly-relevant.
      • \n
      • Data storage: Store all your application data on our high-availability infrastructure, and never worry about dealing with a database ever again.
      • \n
      • User management and authentication: Every app needs users. Use App Services to easily implement user registration, as well as OAuth 2.0-compliant login and authentication.
      • \n
      \n
    • \n
    • \n

      Check out the sample apps

      \n

      The SDK includes samples that illustrate Apigee features. To look at them, open the .xcodeproj file for each in Xcode. To get a sample app running, open its project file, then follow the steps described in the section, Add the SDK to an existing project.

      \n

      You\'ll find the samples in the following location in your SDK download:

      \n
      \napigee-ios-sdk-<version>\n    ...\n    /samples\n		
      \n \n
      \n

      The samples include the following:

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      SampleDescription
      booksAn app for storing a list of books that shows Apigee database operations such as reading, creating, and deleting.
      messageeAn app for sending and receiving messages that shows Apigee database operations (reading, creating).
      pushAn app that uses the push feature to send notifications to the devices of users who have subscribed for them.
      \n
      \n

       

      \n
    • \n
    \n'),$templateCache.put("app-overview/doc-includes/javascript.html",'

    1. Import the SDK into your HTML

    \n

    To enable support for Apigee-related functions in your HTML, you\'ll need to include apigee.js in your app. To do this, add the following to the head block of your HTML:

    \n
    \n<script type="text/javascript" src="path/to/js/sdk/apigee.js"></script>\n
    \n

    2. Instantiate Apigee.Client

    \n

    Apigee.Client initializes the App Services SDK, and gives you access to all of the App Services SDK methods.

    \n

    You will need to pass a JSON object with the UUID or name for your App Services organization and application when you instantiate it.

    \n
    \n//Apigee account credentials, available in the App Services admin portal \nvar client_creds = {\n        orgName:\'{{currentOrg}}\',\n        appName:\'{{currentApp}}\'\n    }\n\n//Initializes the SDK. Also instantiates Apigee.MonitoringClient\nvar dataClient = new Apigee.Client(client_creds);  \n
    \n\n

    3. Verify SDK installation

    \n\n

    Once initialized, App Services will also automatically instantiate Apigee.MonitoringClient and begin logging usage, crash and error metrics for your app.

    \n\n

    To verify that the SDK has been properly initialized, run your app, then go to \'Monitoring\' > \'App Usage\' in the App Services admin portal to verify that data is being sent.

    \n

    screenshot of data in admin portal

    \n
    It may take up to two minutes for data to appear in the admin portal after you run your app.
    \n\n

    Installation complete! Try these next steps

    \n
      \n
    • \n

      Call additional SDK methods in your code

      \n

      Use dataClient or dataClient.monitor to call SDK methods:

      \n \n
      \n
        \n
      • dataClient: Used to access the data methods of the App Services SDK, including those for push notifications, data store, and geolocation.
      • \n
      • dataClient.monitor: Used to access the app configuration and monitoring methods of the App Services SDK, including advanced logging, and A/B testing.
      • \n
      \n
      \n
    • \n
    • \n

      Add App Services features to your app

      \n

      With App Services you can quickly add valuable features to your mobile or web app, including push notifications, a custom data store, geolocation and more. Check out these links to get started with a few of our most popular features:

      \n
        \n
      • Push notifications: Send offers, alerts and other messages directly to user devices to dramatically increase engagement. With App Services you can send 10 million push notification per month for free!
      • \n
      • Geolocation: Keep your app highly-relevant by targeting users or returning result sets based on user location.
      • \n
      • Data storage: Store all your application data on our high-availability infrastructure, and never worry about dealing with a database ever again.
      • \n
      • User management and authentication: Every app needs users. Use App Services to easily implement registration, login and OAuth 2.0-compliant authentication.
      • \n
      \n
    • \n
    • \n

      Check out the sample apps

      \n

      The SDK includes samples that illustrate Apigee features. To look at them, open the .xcodeproj file for each in Xcode. You\'ll find the samples in the following location in your SDK download:

      \n
      \napigee-javascript-sdk-master\n    ...\n    /samples		\n		
      \n \n
      \n

      The samples include the following:

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      SampleDescription
      booksSample.htmlAn app for storing a list of books that shows Apigee database operations such as reading, creating, and deleting.
      messageeAn app for sending and receiving messages that shows Apigee database operations (reading, creating).
      monitoringSample.htmlShows basic configuration and initialization of the HTML5 app monitoring functionality. Works in browser, PhoneGap, Appcelerator, and Trigger.io.
      readmeSample.htmlA simple app for reading data from an Apigee database.
      \n
      \n
    • \n
    \n'),$templateCache.put("app-overview/doc-includes/net.html",""),$templateCache.put("app-overview/doc-includes/node.html",""),$templateCache.put("app-overview/doc-includes/ruby.html",""),$templateCache.put("app-overview/getting-started.html",'
    \n\n \n Are you sure you want to regenerate the credentials?\n \n\n \n\n
    \n\n\n\n\n
    \n\n

    Install the SDK for app {{currentApp}}

    \n

    Click on a platform icon below to view SDK installation instructions for that platform.

    \n
      \n \n \n \n\n\n
    • \n
    • \n
    • \n
    • \n
    • \n
    • \n
    \n\n
    \n\n
    \n
    \n\n
    \n\n \n Download SDK\n \n \n More Docs\n \n

    📕{{contentTitle}}

    \n\n
    \n
    \n\n
    \n
    \n\n
    \n

    Mobile sdk keys

    \n

    For mobile SDK initialization.

    \n
    \n
    Org Name
    \n
    {{currentOrg}}
    \n
    App Name
    \n
    {{currentApp}}
    \n
    \n

    Server app credentials

    \n

    For authenticating from a server side app (i.e. Ruby, .NET, etc.)

    \n
    \n
    Client ID
    \n
    {{clientID}}
    \n
    Client Secret
    \n
    {{clientSecret}}
    \n
    \n  \n
    \n
     
    \n\n
    \n Regenerate\n
    \n
    \n
    \n\n
    \n\n
    \n
    '),$templateCache.put("data/data.html",'
    \n\n \n
    \n
    \n \n
    \n \n

    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n\n
    \n
    \n \n (?)\n \n\n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n CREATE    \n READ    \n UPDATE    \n DELETE (?)\n
    \n
    \n\n
    \n Path \n
    \n \n (?)\n
    \n
    \n \n
    \n Query\n
    \n \n (?)\n
    \n \n \n \n \n
    \n
    \n
    \n\n\n
    \n \n
    \n
    \n \n
    \n
    \n
    \n\n
    \n \n
    \n \n
    \n Validate JSON\n (?)\n
    \n
    \n
    \n
    \n \n (?)\n
    \n
    \n
    \n
    \n'+"
    \n
    \n
    \n
    \n
    \n\n
    \n\n
    \n
    \n\n
    \n\n"),$templateCache.put("data/display-generic.html",'\n\n\n
    \n
    \n
    \n
    \n
    \n\n\n (?)\n \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n
    NameUUID
    \n \n {{entity._data.name}}{{entity._data.uuid}}{{entitySelected[$index] ? \'Hide\' : \'View\'}} Details
    \n\n\n

    Entity Detail

    \n\n\n
      \n
    • \n {{k}} :\n \n \n
        \n
      • {{k2}} :\n\n \n
          \n
        • {{k3}} :{{v3}}
        • \n
        \n \n {{v2}}\n \n
        \n
      • \n
      \n \n {{v}}\n \n
      \n
    • \n
    \n\n
    \n

    Edit Entity (?)

    \n
    \n \n
    \n Validate JSON\n
    \n
    \n
    No data found
    \n
    \n \n \n
    \n\n'),$templateCache.put("data/display-groups.html",""),$templateCache.put("data/display-roles.html","roles---------------------------------"),$templateCache.put("data/display-users.html",'\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n  UsernameDisplay NameUUID 
    \n \n \n \n \n 10\n #"><img src=x onerror=prompt(1);> bf9a95da-d508-11e2-bf44-236d2eee13a7 \n Details\n
    '),$templateCache.put("data/entity.html",'
    \n\n

    Entity Detail

    \n \n
    \n
    \n Path \n
    \n {{entityType}}/{{entityUUID}}\n
    \n
    \n\n
    \n \n
    \n \n
    \n Validate JSON\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n\n
    \n\n'),$templateCache.put("dialogs/modal.html",' \n'),$templateCache.put("global/appswitcher-template.html",''),$templateCache.put("global/insecure-banner.html",'
    \n
    \n
    \n Warning: This application has "sandbox" permissions and is not production ready. Please go to our security documentation to find out more.\n
    \n
    \n
    '),$templateCache.put("global/page-title.html",'
    \n
    \n
    \n

    {{icon}}{{title}} (need help?)

    \n
    \n
    \n \n

    Do you want to contact support? Support will get in touch with you as soon as possible.

    \n
    \n
    \n\n'),$templateCache.put("groups/groups-activities.html",'
    \n\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    DateContentVerbUUID
    {{activity.createdDate}}{{activity.content}}{{activity.verb}}{{activity.uuid}}
    \n
    \n\n\n
    '),$templateCache.put("groups/groups-details.html",'
    \n\n
    \n
    \n
    \n

    Group Information

    \n \n \n (?)\n
    \n \n \n (?)\n
    \n
    \n
    \n\n
    \n \n
    \n\n
    \n

    JSON Group Object (?)

    \n
    {{json}}
    \n
    \n
    \n
    \n\n\n
    '),$templateCache.put("groups/groups-members.html",'
    \n\n\n \n

    Are you sure you want to remove the users from the seleted group(s)?

    \n
    \n\n \n \n \n\n\n
    \n (?)\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    UsernameDisplay Name
    \n \n {{user.get(\'username\')}}{{user.get(\'name\')}}
    \n
    \n \n \n
    \n
    '),$templateCache.put("groups/groups-roles.html",'
    \n\n \n \n \n\n \n

    Are you sure you want to remove the group from the role(s)?

    \n
    \n\n\n
    \n (?)\n \n \n
    \n

    Roles (?)

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Role NameRole title
    \n \n {{role._data.name}}{{role._data.title}}
    \n
    \n \n \n
    \n\n\n \n

    Are you sure you want to delete the permission(s)?

    \n
    \n\n\n \n

    Path: (?)

    \n
    \n GET (?)\n
    \n
    \n POST\n
    \n
    \n PUT\n
    \n
    \n DELETE\n
    \n
    \n\n\n
    \n (?)\n \n \n
    \n

    Permissions (?)\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    PathGETPOSTPUTDELETE
    \n \n {{permission.path}}{{permission.operations.get}}{{permission.operations.post}}{{permission.operations.put}}{{permission.operations.delete}}
    \n\n
    '),$templateCache.put("groups/groups-tabs.html",'
    \n\n
    \n\n
    \n
    \n

    👥 Groups

    \n
    \n
    \n\n
    \n\n \n\n
    \n
    \n
    Group Path: {{selectedGroup.get(\'path\')}}
    \n
    Group Title: {{selectedGroup.get(\'title\')}}
    \n
    \n
    \n
    \n
    \n
    \n'),$templateCache.put("groups/groups.html",'
    \n\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n (?)\n
    \n
    \n
    \n \n
    \n \n (?)\n
    \n
    \n
    \n
    \n\n \n

    Are you sure you want to delete the group(s)?

    \n
    \n\n\n
    \n
    \n
    \n \n \n \n (?)\n
    \n \n\n\n
    \n \n \n
    \n
    \n\n
    \n \n \n\n
    \n
    \n'),$templateCache.put("login/forgot-password.html",' - -
    -
    -
    - - - - - - -
    -
    - - -
    - - - -
    - -
    -

    Account Settings

    -
    -
    -
    -
    Personal Account
    -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    - Leave blank any of the following to keep the current password unchanged -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    Organizations -
    - Add -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    - - -
    - App Users -
    -
    - - - - Delete - Create new user - - - -
    -
    - - -
    - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - -
    - - -
    - - - - - - - -
    - - - -
    - -
    - -
    - App Groups -
    -
    - - - - Delete - Create new group - -
    -
    - - -
    - -
    -
    -
    -
    - -
    -
    - - -
    - - - - - -
    -
    - -
    - -
    - App Roles -
    -
    - - Delete - Add Role - - -
    -
    - - -
    - -
    -
    -
    -
    - - -
    -
    - - - - -
    -
    -
    Role
    -
    - -
    -

    ...

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -
    - - - - - - - - -
    -
    -
    - -
    - - Compose Push Notification -
    -
    -
    - Notifier and Recipients -
    - Choose the Notifier (a configured notification service) to connect with for this push notification. Only users - with devices registered with this notifier will receive the push notification. If a group is selected, only the users - in the selected goup, with devices registered with this notifier, will receive the push notification. - - - - -
    - All Users - User(s) - Groups -
    - -
    - - -
    - -
    -
    - Notifier Message -
    - Edit the "alert" message in the JSON payload. - -
    - Reset Payload - Validate JSON - Validate your JSON! -
    -
    -
    - Delivery -
    - Select whether to schedule this push notification for immediate delivery or at a future date and time. - -
    - Now - Schedule for later -
    - -
    -
    -
    - Push Notification API Preview -
    - Review the API call and payload that will be sent to the App Services Push Notification Scheduler. - Advanced users can also send this command via UGC (Usergrid Command Line). - -
    - POST users/ -
    -
    - Schedule Notification -
    -
    -
    - - - - - -
    -
    - Notification History -
    -
    - -
    - -
     
    -
    - No Notifications found. -
    - - -
    - -
    -
    - Notification Receipts - <- Return to All Notifications -
    -
    - -
    - -
     
    -
    - No Notifications found. -
    - - - -
    - - - -
    - - Configuration - -
    - - - -
    -
    - Apple Push Notification Service -
    - A Notifier allows App Services to connect to and deliver a message to a communication provider such as - Apple's APNs. Upload Development and Production Certificates (.p12) to set up a bridge between your app - and APNs for push notifications on iOS devices. - - -
    - Before you get started: view our - getting started page - for more info on how to retrieve .p12 certificates from the Apple Developer Connection website. - -
    -
    - -
    -
    - -
    - The notifier name is used as the key for push data. Give this a name that describes the certificate being uploaded. -
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    - -
    -
    - -
    - Only applicable if your certificate is password protected -
    -
    - - - Create Notifier -
    - -
    -
    -
    - - - - -
    - - - -
    -
    - Getting Started with Push Notifications -
    - Before you can send a notification, you must follow these three steps to enable push notifications for your app. -
    - ADD LINK!! Learn more in our docs -
    - - - -
    - Set up Push Notifications for Apple iOS -
    -
    - -
    - Retrieve your APNs .p12 certificate(s) from the Apple Developer Connection website -
    -
    - -
    - -
    -
    - -
    - Add the certificates to set up your notifiers. -
    -
    - - -
    - -
    -
    - -
    - Compose and schedule a push notification. -
    -
    - -

    - -
    - -
    - - -
    - - -
    -
    - - - - - - - -
    -
    - Data Explorer -
    - -
    -
    -
    -
    - - - - GET     - POST     - PUT     - DELETE -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    -
    - -
    - - - - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - - - - - - -
    -
    - -
    -
    -
     
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - diff --git a/deleted/archive/index.html b/deleted/archive/index.html deleted file mode 100644 index 72f5780304..0000000000 --- a/deleted/archive/index.html +++ /dev/null @@ -1,1932 +0,0 @@ - - - - - - Apigee App Services Admin Portal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - Whoops! We encounterd an error connecting to the API. Press refresh to try loading the Admin Portal again. - -
    -
    -
    -
    -
    -
    - ERROR: Your details were incorrect.
    -
    -
    -
    Login
    -
    -
    - -
    - -
    - -
    -
    - -
    - - -
    -
    -
    -
    - - Remember me -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - We're holding a seat for you! -

    -

    Thanks for signing up for a spot on our private beta. We will send you an email as soon as we're ready for you!

    -

    In the mean time, you can stay up to date with App Services on our Google Group.

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    Register
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - - - - - - - - - -
    -
    - - -
    - - - -
    - -
    -

    Account Settings

    -
    -
    -
    -
    Personal Account
    -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    - Leave blank any of the following to keep the current password unchanged -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    Organizations -
    - Add -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    - - -
    - App Users -
    -
    - - - - Delete - Create new user - - - -
    -
    - - -
    - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - -
    - - -
    - - - - - - - -
    - - - -
    - -
    - -
    - App Groups -
    -
    - - - - Delete - Create new group - -
    -
    - - -
    - -
    -
    -
    -
    - -
    -
    - - -
    - - - - - -
    -
    - -
    - -
    - App Roles -
    -
    - - Delete - Add Role - - -
    -
    - - -
    - -
    -
    -
    -
    - - -
    -
    - - - - -
    -
    -
    Role
    -
    - -
    -

    ...

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -
    - - - - - - - - -
    -
    -
    - -
    - - Compose Push Notification -
    -
    -
    - Notifier and Recipients -
    - Choose the Notifier (a configured notification service) to connect with for this push notification. Only users - with devices registered with this notifier will receive the push notification. If a group is selected, only the users - in the selected goup, with devices registered with this notifier, will receive the push notification. - - - - -
    - All Devices - Devices - Users - Groups -
    - -
    - - -
    - -
    -
    - Notifier Message -
    - Edit the "alert" message in the JSON payload. -
    -
    - -
    - Learn more about messages in our docs -
    -
    -
    - Reset Payload - Validate JSON - Validate your JSON! -
    -
    -
    - Delivery -
    - Select whether to schedule this push notification for immediate delivery or at a future date and time. - -
    - Now - Schedule for later -
    - -
    -
    -
    - Push Notification API Preview -
    - Review the API call and payload that will be sent to the App Services Push Notification Scheduler. - Advanced users can also send this command via UGC (Usergrid Command Line). - -
    - POST users/ -
    -
    - Schedule Notification -
    -
    -
    - - - - - -
    -
    - Notification History -
    -
    - -
    - -
     
    -
    - No Notifications found. -
    - - -
    - -
    -
    - Notification Receipts - <- Return to All Notifications -
    -
    - -
    - -
     
    -
    - No Notifications found. -
    - - - -
    - - - -
    - - Configuration - -
    - - - -
    -
    - Apple Push Notification Service -
    - A Notifier allows App Services to connect to and deliver a message to a communication provider such as - Apple's APNs. Upload Development and Production Certificates (.p12) to set up a bridge between your app - and APNs for push notifications on iOS devices. - - -
    - For more help: view our - getting started page - for more info on how to generate and download an iOS .p12 certificate at the Apple Developer Connection website. - -
    -
    - -
    -
    - -
    - The notifier name is used as the key for push data. Give this a name that describes the certificate being uploaded. -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    - Only applicable if your certificate is password protected -
    -
    - - - Create Notifier -
    - -
    -
    -
    - - - - -
    - - - -
    -
    - Getting Started with Push Notifications -
    - Before you can send a notification, you must follow these three steps to enable push notifications for your app. -
    - Learn more in our docs -
    - - - -
    - Set up Push Notifications for Apple iOS -
    -
    - -
    - Follow the process to generate and download an iOS .p12 certificate at the Apple Developer Connection website. -
    -
    - -
    - -
    -
    - -
    - Add the certificates to set up your notifiers. -
    -
    - - -
    - -
    -
    - -
    - Compose and schedule a push notification. -
    -
    - -

    - -
    - -
    - - -
    - - -
    -
    - - - - - - - -
    -
    - Data Explorer -
    - -
    -
    -
    -
    - - - - GET     - POST     - PUT     - DELETE -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    -
    - -
    - - - - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - - - - - - -
    -
    - -
    -
    -
     
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - diff --git a/deleted/archive/js/app/app.js b/deleted/archive/js/app/app.js deleted file mode 100644 index 2b689638b5..0000000000 --- a/deleted/archive/js/app/app.js +++ /dev/null @@ -1,131 +0,0 @@ -Usergrid.organizations = new Usergrid.Organization(); - -var Pages = new ApigeePages(); - - - -$(document).ready(function () { - - var query_params = Usergrid.Params.queryParams; - if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/dit') >= 0){ - //DIT - Usergrid.ApiClient.setApiUrl('http://apigee-internal-prod.jupiter.apigee.net/'); - }else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/mars') >= 0 ){ - //staging - Usergrid.ApiClient.setApiUrl('http://apigee-internal-prod.mars.apigee.net/'); - } else if (Usergrid.apiUrl) { - Usergrid.ApiClient.setApiUrl(Usergrid.apiUrl); - } - - - Pages.resetPasswordUrl = Usergrid.ApiClient.getResetPasswordUrl(); - - initCore(); - initUI(query_params); - startApp(); - - function initCore() { - prepareLocalStorage(); - parseParams(); - } - - function initUI(query_params) { - apigee_console_app(Pages, query_params); - initMenu(); - StatusBar.Init('#statusbar-placeholder'); - toggleableSections(); - } - - function startApp() { - - if (!Usergrid.userSession.loggedIn()) { - // test to see if the Portal is running on apigee, if so, send to SSO, if not, fall through to login screen - if (Usergrid.SSO.usingSSO()) { - Pages.clearPage(); - Usergrid.SSO.sendToSSOLoginPage(); - } else if (query_params.goto_signup) { - Pages.ShowPage("signup"); - } else { - Usergrid.console.showLoginForNonSSO(); - } - } else { - Usergrid.console.autoLogin( - function () { - Usergrid.console.loginOk(); - }, - function () { - Usergrid.console.logout(); - } - ); - } - } - - function initMenu() { - $('.navbar .dropdown-toggle').dropdown(); - $('#sidebar-menu .dropdown-toggle').dropdown(); - $('#logout-link').click(Usergrid.console.logout); - $('#hideBanner').click(Pages.hideBanner); - - var publicMenu = $('#publicMenu'); - var privateMenu = $('.privateMenu'); - - Pages.AddPage({name:'login', menu:publicMenu}); - Pages.AddPage({name:'message', menu:publicMenu}); - Pages.AddPage({name:'signup', menu:publicMenu}); - Pages.AddPage({name:'forgot-password', menu:publicMenu}); - Pages.AddPage({name:'post-signup', menu:publicMenu}); - Pages.AddPage({name:'console', menu:privateMenu, initFunction:initConsole, showFunction: function() { - if(!Backbone.History.started){ - Backbone.history.start(); - } - }}); - } - - - function initConsole() { - //Pages.AddPanel(pageName,linkSelector,boxSelector,initfunc,showfunc,buttonHandlerFunction); - Pages.AddPanel('organization', '.go-home', null,null, null, Usergrid.console.pageSelectHome,null); - Pages.AddPanel('console', null, null, null, null, null, null); - Pages.AddPanel('dashboard', null, null, null, null, Usergrid.console.pageSelectApplication,null); - Pages.AddPanel('user', "#users-sublink", "#users-sublink", null, null, null, function() {}); - Pages.AddPanel('users', null, "#users-sublink", null, null, Usergrid.console.pageSelectUsers, null); - Pages.AddPanel('group', null, "#groups-sublink", null, null, null, function() {}); - Pages.AddPanel('groups', null, null, null, null, Usergrid.console.pageSelectGroups, null); - Pages.AddPanel('roles', null, null, null, null, Usergrid.console.pageSelectRoles, null); - Pages.AddPanel('activities', null, null, null, null, Usergrid.console.pageSelectActivities, null); - Pages.AddPanel('notifications', null, null, null, null, Usergrid.console.pageSelectNotifcations, null); - Pages.AddPanel('setupNeeded', null, null, null, null, Usergrid.console.pageSelectNotifcations, null); - Pages.AddPanel('sendNotification', null, "#sendNotification-sublink", null, null, null, null); - Pages.AddPanel('messageHistory', null, "#messageHistory-sublink", null, null, null, null); - Pages.AddPanel('notificationsReceipt', null, null, null, null, null, null); - Pages.AddPanel('configuration', null, "#configuration-sublink", null, null, null, null); - Pages.AddPanel('getStarted', null, "#getStarted-sublink", null, null, null, null); - Pages.AddPanel('collections', "#collections-link", null, null, null, Usergrid.console.pageSelectCollections, null); - Pages.AddPanel('analytics', null, null, null, null, Usergrid.console.pageSelectAnalytics, null); - Pages.AddPanel('properties', null, null, null, null, Usergrid.console.pageSelectProperties, null); - Pages.AddPanel('shell', null, null, null, null, Usergrid.console.pageSelectShell, null); - Pages.AddPanel('account', "#account-link", null, null, null, null, accountRedirect); - //$("#sidebar-menu > ul > li > a").click(Pages.ShowPanel); - - } - - function accountRedirect(e) { - e.preventDefault(); - Usergrid.console.requestAccountSettings(Backbone.history.getHash(window)); - } - - function initCenterPanels(){ - $(window).resize(centerPanels); - $(window).resize(); - } - - function centerPanels(){ - var panels = $("#console-page"); - var freeSpace = $(window).width() - panels.width(); - console.log("window: " + $(window).width() + " Panels:" + panels.width()); - console.log("free space: "+freeSpace); - panels.css('margin-left',function(){return freeSpace / 2;}); - } - - console.log('---+++', window) -}); diff --git a/deleted/archive/js/app/console.js b/deleted/archive/js/app/console.js deleted file mode 100644 index cb6da03579..0000000000 --- a/deleted/archive/js/app/console.js +++ /dev/null @@ -1,5397 +0,0 @@ -function apigee_console_app(Pages, query_params) { - //This code block *WILL NOT* load before the document is complete - window.Usergrid = window.Usergrid || {}; - Usergrid.console = Usergrid.console || {}; - - // for running Apigee App Services as a local server - var LOCAL_STANDALONE_API_URL = "http://localhost/usergrid"; - var LOCAL_TOMCAT_API_URL = "http://localhost:8080/ROOT"; - var LOCAL_API_URL = LOCAL_STANDALONE_API_URL; - var PUBLIC_API_URL = "https://api.usergrid.com/"; - var FORCE_PUBLIC_API = true; // Always use public API - if (!FORCE_PUBLIC_API && (document.domain.substring(0,9) == "localhost")) { - Usergrid.ApiClient.setApiUrl(LOCAL_API_URL); - } - - String.prototype.endsWith = function (s) { - return (this.length >= s.length && this.substr(this.length - s.length) == s); - }; - - if (query_params.api_url) { - if (!query_params.api_url.endsWith('/')) { - query_params.api_url += '/'; - } - Usergrid.ApiClient.setApiUrl(query_params.api_url); - } else { - if(window.location.host === 'localhost'){ - //local = DIT - Usergrid.ApiClient.setApiUrl('http://apigee-internal-prod.jupiter.apigee.net/'); - }if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/dit') >= 0){ - //DIT - Usergrid.ApiClient.setApiUrl('http://apigee-internal-prod.jupiter.apigee.net/'); - }else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/mars') >= 0 ){ - //staging - Usergrid.ApiClient.setApiUrl('http://apigee-internal-prod.mars.apigee.net/'); - } - } - //Display message page in case there is a a timeout to the API - Usergrid.ApiClient.setCallTimeoutCallback(function(){ - showMessagePage(); - }); - - var HIDE_CONSOLE = query_params.hide_console || ""; - - if (HIDE_CONSOLE.indexOf("true") >= 0) { - $('#sidebar-menu ul li a[href="#console"]').hide(); - } - - var OFFLINE = false; - var OFFLINE_PAGE = "#query-page"; - - var self = this; - - var emailRegex = new RegExp("^(([0-9a-zA-Z]+[_\+.-]?)+@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$"); - var emailAllowedCharsMessage = 'eg. example@apigee.com'; - - var passwordRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?<>;:.,'\"~*=+_\[\\](){}/\\ |-])+$"); - var passwordAllowedCharsMessage = 'This field only allows: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . < > / ? !'; - var passwordMismatchMessage = 'Password must match'; - - var usernameRegex = new RegExp("^([0-9a-zA-Z\.\_-])+$"); - var usernameAllowedCharsMessage = 'This field only allows : A-Z, a-z, 0-9, dot, underscore and dash'; - - var organizationNameRegex = new RegExp ("^([0-9a-zA-Z.-])+$"); - var organizationNameAllowedCharsMessage = 'This field only allows : A-Z, a-z, 0-9, dot, and dash'; - - //Regex declared differently from al the others because of the use of ". Functions exacly as if it was called from new RegExp - var nameRegex = /[0-9a-zA-ZáéíóúÁÉÍÓÚÑñ@#$%\^&!\?;:\.,'\"~\*-=\+_\(\)\[\]\{\}\|\/\\]+/; - var nameAllowedCharsMessage = "This field only allows: A-Z, a-z, áéíóúÁÉÍÓÚÑñ, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' \" , . / ? !"; - - var titleRegex = new RegExp("[a-zA-Z0-9.!-?]+[\/]?"); - var titleAllowedCharsMessage = 'Title field only allows : space, A-Z, a-z, 0-9, dot, dash, /, !, and ?'; - - var alphaNumRegex = new RegExp("[0-9a-zA-Z]+"); - var alphaNumAllowedCharsMessage = 'Collection name only allows : a-z A-Z 0-9'; - - var pathRegex = new RegExp("^[^\/]*([a-zA-Z0-9\.-]+[\/]{0,1})+[^\/]$"); - var pathAllowedCharsMessage = 'Path only allows : /, a-z, 0-9, dot, and dash, paths of the format: /path, path/, or path//path are not allowed'; - - var roleRegex = new RegExp("^([0-9a-zA-Z./-])+$"); - var roleAllowedCharsMessage = 'Role only allows : /, a-z, 0-9, dot, and dash'; - - var intRegex = new RegExp("^([0-9])+$"); - - var applications = {}; - var applications_by_id = {}; - - var current_application_id = ""; - var current_application_name = {}; - var applicationData = {}; - - var query_entities = null; - var query_entities_by_id = null; - - var query_history = []; - - var indexes = []; - var backgroundGraphColor = '#ffffff'; - - String.prototype.startsWith = function(s) { - return this.lastIndexOf(s, 0) === 0; - }; - - String.prototype.endsWith = function(s) { - return this.length >= s.length - && this.substr(this.length - s.length) == s; - }; - - $("#fixme").click(function(e){ - e.preventDefault(); - $('#application-panel-buttons').css('position', 'relative'); - }); - - function clearBackgroundImage(){ - $('body').css({'background-image' : 'none'}); - } - Usergrid.console.clearBackgroundImage = clearBackgroundImage; - function setColumnBackgroundImage(){ -// $('body').css({background : 'url(images/background_one_col.png) repeat-y'}); - } - Usergrid.console.setColumnBackgroundImage = setColumnBackgroundImage; - - function initOrganizationVars() { - applications = {}; - applications_by_id = {}; - - current_application_id = ""; - current_application_name = ""; - - query_entities = null; - query_entities_by_id = null; - - query_history = []; - - indexes = []; - } - - function keys(o) { - var a = []; - for (var propertyName in o) { - a.push(propertyName); - } - return a; - } - - $('#api-activity').ajaxStart( function() { - $(this).show(); - }); - - $('#api-activity').ajaxComplete( function() { - $(this).hide(); - }); - - function showPanel(page) { - var p = $(page); - $("#console-panels").children().each(function() { - if ($(this).attr("id") == p.attr("id")) { - $(this).show(); - } else { - $(this).hide(); - } - }); - } - - function initConsoleFrame(){ - $("#console-panel iframe").attr("src", url); - } - - function getAccessTokenURL(){ - var bearerToken = Usergrid.ApiClient.getToken(); - var app_name = Usergrid.ApiClient.getApplicationName(); - if (typeof app_name != 'string') { - app_name = ''; - } - var org_name = Usergrid.ApiClient.getOrganizationName(); - if (typeof org_name != 'string') { - org_name = ''; - } - var bearerTokenJson = JSON.stringify( - [{ - "type":"custom_token", - "name":"Authorization", - "value":"Bearer " + bearerToken, - "style":"header" - }, { - "type":"custom_token", - "name":"app_name", - "value":app_name, - "style":"template" - }, { - "type":"custom_token", - "name":"org_name", - "value":org_name, - "style":"template" - }] - ); - var bearerTokenString = encodeURIComponent(bearerTokenJson); - var url = 'https://apigee.com/apigeedev/console/usergrid?v=2&embedded=true&auth=' + bearerTokenString; - return url; - } - Usergrid.console.getAccessTokenURL = getAccessTokenURL; - - function showPanelContent(panelDiv, contentDiv) { - var cdiv = $(contentDiv); - $(panelDiv).children(".panel-content").each(function() { - var el = $(this); - if (el.attr("id") == cdiv.attr("id")) { - el.show(); - } else { - el.hide(); - } - }); - } - - function selectTabButton(link) { - var tab = $(link).parent(); - tab.parent().find("li.active").removeClass('active'); - tab.addClass('active'); - } - - function selectPillButton(link) { - var tab = $(link); - tab.parent().find("a.active").removeClass('active'); - tab.addClass('active'); - } - function selectFirstTabButton(bar){ - selectTabButton($(bar).find("li:first-child a")); - } - - function setNavApplicationText() { - var name = Usergrid.ApiClient.getApplicationName(); - if(!name) { - name = "Select an Application"; - } - $('#current-app-name').html('
    ' + name + '
    '); - // $('.thingy span.title span.app_title').text(" " + name); - $('#nav-app-name').html(name); - } - - function escapeMe(obj) { - for (var property in obj) { - if (obj.hasOwnProperty(property)){ - if (obj[property] && obj[property].constructor == Object || obj[property] instanceof Array) { - var prop = encodeURIComponent(property); - var value = obj[property]; - delete obj[property]; - obj[prop] = value; - escapeMe(obj[prop]); - } - else { - if (property === 'picture') continue; - var prop = escapeString(property); - var value = escapeString(obj[property]); - delete obj[property]; - obj[prop] = value; - if (property === 'created' || property === 'modified') { - try { - obj[property] = parseInt(obj[property]); - }catch(e){} - } - } - } - } - return obj; - } - - function escapeString(str) { - return String(str) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(//g, '>'); - } - - /******************************************************************* - * - * Collections - * - ******************************************************************/ - - function pageSelectCollections() { - hideModal(' #collections-messages') - getCollections(); - } - window.Usergrid.console.pageSelectCollections = pageSelectCollections; - - function getCollections() { - //clear out the table before we start - var output = $('#collections-table'); - output.empty(); - hideCurlCommand('collections'); - var section =$('#application-collections'); - section.empty().html('
    Loading...
    '); - - var queryObj = new Usergrid.Query("GET",'', null, null, getCollectionsCallback, - function() { alertModal("Error", "There was an error getting the collections"); } - ); - - runAppQuery(queryObj); - return false; - } - - function compare(a,b) { - if (a.name < b.name) - return -1; - if (a.name > b.name) - return 1; - return 0; - } - - function getCollectionsCallback(response) { - //response = escapeMe(response); - - $('#collections-pagination').hide(); - $('#collections-next').hide(); - $('#collections-previous').hide(); - showEntitySelectButton(); - if (response.entities && response.entities[0] && response.entities[0].metadata && response.entities[0].metadata.collections) { - applicationData.Collections = response.entities[0].metadata.collections; - updateApplicationDashboard(); - updateQueryAutocompleteCollections(); - } - - var data = response.entities[0].metadata.collections; - var output = $('#collections-table'); - - var elements = []; - for (var key in data) { - if (data.hasOwnProperty(key)) { - elements.push(data[key]) - } - } - var currentPath = $("#query-path").val(); - elements.sort(compare) - var r = {}; - if ($.isEmptyObject(data)) { - output.replaceWith('
    No collections found.
    '); - } else { - output.replaceWith('
    '); - var leftMenuContent = ''; - $('#left-collections-content').html(leftMenuContent); - } - showCurlCommand('collections', this.getCurl(), this.getToken()); - } - - /******************************************************************* - * - * Query Explorer - * - ******************************************************************/ - - function pageOpenQueryExplorer(collection) { - - collection = collection || ""; - showPanel("#collections-panel"); - hideMoreQueryOptions(); - //reset the form fields - $("#query-path").val(""); - $("#query-source").val(""); - $("#query-ql").val(""); - showQueryCollectionView(); - query_history = []; - //Prepare Collection Index Dropdown Menu - requestIndexes(collection); - //bind events for previous and next buttons - bindPagingEvents('query-response'); - //clear out the table before we start - var output = $('#query-response-table'); - output.empty(); - //if a collection was provided, go ahead and get the default data - if (collection) { - getCollection('GET', collection); - } - } - window.Usergrid.console.pageOpenQueryExplorer = pageOpenQueryExplorer; - - $("#query-help").click(function(e){ - e.preventDefault(); - $('#queryHelpModal').modal('show'); - }); - $("#query-method-help").click(function(e){ - e.preventDefault(); - $('#queryMethodHelpModal').modal('show'); - }); - $("#query-path-help").click(function(e){ - e.preventDefault(); - $('#queryPathHelpModal').modal('show'); - }); - $("#query-limit-help").click(function(e){ - e.preventDefault(); - $('#queryLimitHelpModal').modal('show'); - }); - $("#query-json-help").click(function(e){ - e.preventDefault(); - $('#queryJsonHelpModal').modal('show'); - }); - - - //change contexts for REST operations - $("#button-query-get").click(function(){ - $("#query-json-box").hide(); - $("#query-query-box").show(); - $("#query-limit-box").show(); - }); - - $("#button-query-post").click(function(){ - $("#query-json-box").show(); - $("#query-query-box").hide(); - $("#query-limit-box").hide(); - }); - - $("#button-query-put").click(function(){ - $("#query-json-box").show(); - $("#query-query-box").show(); - $("#query-limit-box").hide(); - }); - - $("#button-query-delete").click(function(){ - $("#query-json-box").hide(); - $("#query-query-box").show(); - $("#query-limit-box").hide(); - }); - - $("#data-explorer-link").click(function(){ - $('#data-explorer').show(); - $('#query-path').val(''); - $("#query-response-area").hide(); - }); - - var queryPath = ''; - function runCollectionQuery(){ - var method; - - - //Select method to use - if($('#button-query-get').prop('checked') ){ - method = 'GET'; - } else if($('#button-query-post').prop('checked')){ - method = 'POST'; - } else if($('#button-query-put').prop('checked')){ - method = 'PUT'; - } else if($('#button-query-delete').prop('checked')){ - method = 'DELETE'; - } else { - alertModal("Notice", "Please select a method."); - return; - } - - - //If jsonBody is empty fill it with empty brackets - if($('#query-source').val() === '') { - $("#query-source").val('{"name":"value"}'); - } - getCollection(method); - } - - window.Usergrid.console.getCollection = getCollection; - - function getCollection(method, path){ - $("#data-explorer-status").html('Working...'); - $("#data-explorer-status").show(); - - //get the data to run the query - if(!path){ - var path = $("#query-path").val(); - } - var path=path.replace("//","/"); - if(method.toUpperCase() !== 'GET' && method.toUpperCase() !== 'DELETE'){ - var data = $("#query-source").val(); - try{ - validateJson(); - StatusBar.hideAlert(); - data = JSON.parse(data); - } catch (e) { - alertModal("Error", "There is a problem with your JSON."); - return false; - } - } - - var params = {}; - var ql = $("#query-ql").val(); - params.ql = ql; - if(method.toUpperCase() === 'GET'){ - var limit = $("#query-limit").val(); - params.limit = limit; - } - - queryPath = path; - - queryObj = new Usergrid.Query(method, path, data, params, getCollectionCallback, function(response) { alertModal("Error", response) }); - runAppQuery(queryObj); - } - - function getCollectionCallback(response) { - response = escapeMe(response); - setTimeout(function(){$("#data-explorer-status").hide();},3000); - $('body').scrollTop(0); - hidePagination('query-response'); - $('#query-response-area').show(); - if (response.action == 'post') { - pageSelectCollections(); - } - - - $("#data-explorer-status").html('API call completed'); - - var path = response.path || ""; - path = "" + path.match(/[^?]*/); - var path_no_slashes = ""; - try { - path_no_slashes = response.path.replace(/\//g,''); - } catch(e) {} - - $("#collections-link-buttons li").removeClass('active'); - $("#collections-link-button-"+path_no_slashes).addClass('active'); - - if(response.action === ("delete")){ - getCollection("GET", path); - return; - } - - var slashes = (queryPath.split("/").length -1) - if (!slashes && queryPath.length > 0) { - queryPath = "/" + queryPath; - } - $('#query-path').val(queryPath); - - $("#collection-type-field").html(response.path); - var output = $('#query-response-table'); - if (response.entities) { - if (response.entities.length == 1 && slashes > 1){ - generateBackToCollectionButton(response.path); - } else { - $('#back-to-collection').hide(); - } - if (response.entities.length < 1) { - output.replaceWith('
    No entities found
    '); - } else { - //Inform the user of a valid query - - var entity_type = response.entities [0].type; - - var table = '' + - ''; - if (entity_type === 'user') { - table += ''+ - ''+ - ''; - } else if (entity_type === 'group') { - table += ''+ - ''; - } else if (entity_type === 'role') { - table += ''+ - ''; - } else { - table += ''; - } - table += ''; - table += '' + - '
     UsernameDisplay NamePathTitleTitleRolenameNameUUID 
    '; - output.replaceWith(table); - var this_data = {} - this_data.path = response.path; - for (i = 0; i < response.entities.length; i++) { - this_data.r = response.entities [i]; - //next get a table view of the object - this_data.content = buildContentArea(response.entities [i]); - - - //get a json representation of the object - this_data.json = JSON.stringify(response.entities [i], null, 2); - - if (this_data.type === 'user') { - if (!this_data.r.picture) { - this_data.r.picture = window.location.protocol+ "//" + window.location.host + window.location.pathname + "images/user-photo.png" - } else { - this_data.r.picture = get_replacementGravatar(this_data.r.picture); - } - } else { - if (!this_data.r.name) { - this_data.r.name = '[No value set]'; - } - } - $.tmpl('apigee.ui.collection.table_rows.html', this_data).appendTo('#query-response-table'); - } - - } - } else if (response.list) { - - var query = response.params.ql[0]; - query = query.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); - query = query.substr(6, query.length); - query = query.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); - query = query.substring(0, query.indexOf("where")); - var params = query.split(","); - - var table = ''; - - for (i = 0; i < params.length; i++) { - table +=''; - } - for (i = 0; i < response.list.length; i++) { - var list = response.list[i]; - table += ''; - for (j = 0; j < list.length; j++) { - var value = list[j]; - if (!value) { value = '[no value]'; } - table +=''; - } - table += ''; - } - - table += '
    '+params[i].replace(/^\s\s*/, '').replace(/\s\s*$/, '')+'
    '+value+'
    '; - output.replaceWith(table); - - } else { - output.replaceWith('
    No entities found
    '); - } - - showPagination('query-response'); - } - - - function buildContentArea(obj2) { - function getProperties(obj, keyType){ - var output = ''; - for (var property in obj) { - if (property == 'metadata') { keyType = 'metadata'; } - else if (property == 'collections') { keyType = 'collections'; } - else { keyType = ''; } - - output += ''; - if (obj.hasOwnProperty(property)){ - if (obj[property] && obj[property].constructor == Object || obj[property] instanceof Array) { - - var prop = (obj[property] instanceof Array)?property:''; - //console.log('**Object -> '+property+': '); - output += ''+prop+''; - output += getProperties(obj[property], keyType); - output += '
    '; - } - else { - //console.log(property + " " + obj[property]); - if (keyType == 'metadata' || keyType == 'collections') { - var link = ''+obj[property]+''; - output += ''+property+''+link+''; - } else { - var htmlescaped = htmlEscape(obj[property]); - output += ''+property+''+htmlescaped+''; - } - } - } - output += ''; - } - return output; - } - var output = getProperties(obj2, ''); - return '' + output + '
    '; - } - function htmlEscape(str) { - return String(str) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(//g, '>'); - } - - - - - function activateQueryRowJSONButton() { - $("#button-query-show-row-JSON").removeClass('disabled').addClass('active'); - $("#button-query-show-row-content").removeClass('active').addClass('disabled'); - } - window.Usergrid.console.activateQueryRowJSONButton = activateQueryRowJSONButton; - - function activateQueryRowContentButton() { - $("#button-query-show-row-JSON").removeClass('active').addClass('disabled'); - $("#button-query-show-row-content").removeClass('disabled').addClass('active'); - } - window.Usergrid.console.activateQueryRowContentButton = activateQueryRowContentButton; - - function showQueryCollectionView() { - $('#query-collection-info').show(); - $('#query-detail-info').hide(); - $('#query-ql-box').show(); - $('#back-to-collection').hide(); - } - - - - function generateBackToCollectionButton(returnPath) { - var backButton = $('#back-to-collection'); - if(backButton.attr('onclick')){ - backButton.removeAttr('onclick'); - } - backButton.attr('onclick',"Usergrid.console.getCollection('GET','" + returnPath+ "')"); - $('#back-to-collection').show(); - } - - $.fn.loadEntityCollectionsListWidget = function() { - this.each(function() { - var entityType = $(this).dataset('entity-type'); - var entityUIPlugin = "apigee_collections_" + entityType + "_list_item"; - if (!$(this)[entityUIPlugin]) { - entityUIPlugin = "apigee_collections_entity_list_item"; - } - $(this)[entityUIPlugin](); - }); - }; - - $.fn.loadEntityCollectionsDetailWidget = function() { - this.each(function() { - var entityType = $(this).dataset('entity-type'); - var entityUIPlugin = "apigee_collections_" + entityType + "_detail"; - if (!$(this)[entityUIPlugin]) { - entityUIPlugin = "apigee_collections_entity_detail"; - } - $(this)[entityUIPlugin](); - }); - if (this.length === 1 ){ - hideEntityCheckboxes(); - hideEntitySelectButton(); - } - }; - - function hideEntityCheckboxes(){ - $(".listItem").hide(); - $(".listItem").attr('checked', true); - } - - function hideEntitySelectButton(){ - $("#selectAllCollections").hide(); - } - function showEntitySelectButton(){ - $("#selectAllCollections").show(); - } - - function getQueryResultEntity(id) { - if (query_entities_by_id) { - return query_entities_by_id[id]; - } - return null; - } - window.Usergrid.console.getQueryResultEntity = getQueryResultEntity; - - function showQueryStatus(s, _type) { - StatusBar.showAlert(s, _type); - } - - function expandQueryInput() { - $('#query-source').height(150); - $('#button-query-shrink').show(); - $('#button-query-expand').hide(); - return false; - } - - function shrinkQueryInput() { - $('#query-source').height(60); - $('#button-query-shrink').hide(); - $('#button-query-expand').show(); - return false; - } - - InitQueryPanel(); - function InitQueryPanel(){ - $('#query-source').focus(function(){ - expandQueryInput(); - prepareQueryInput(this); - }); - //$('#query-source').keyup(function(){activateJSONValidator('#button-query-validate', '#query-source');}) - $('#button-query-validate').click(function() {validateJson();return false;}); - $('#button-query-shrink').click(shrinkQueryInput); - $('#button-query-expand').click(expandQueryInput); - - $('#button-query').click(function(){runCollectionQuery(); return false;}); - - } - - function prepareQueryInput(selector) { - var queryInput = $(selector); - if( queryInput.val() === ""){ - queryInput.val("{\n\n}"); - } - } - - function activateJSONValidator(valButton, jsonArea) { - var validatorButton = $(valButton); - var textArea = $(jsonArea) - if(validatorButton.hasClass('disabled')){ - validatorButton.removeClass('disabled'); - validatorButton.click(function() {validateJson();return false;}); - } else if(textArea.val() === "") { - validatorButton.addClass('disabled'); - validatorButton.unbind('click'); - } - } - - function showMoreQueryOptions() { - $('.query-more-options').show(); - $('.query-less-options').hide(); - $('#query-ql').val(""); - $('#query-source').val("{ }"); - } - - function hideMoreQueryOptions() { - $('.query-more-options').hide(); - $('.query-less-options').show(); - $('#query-ql').val(""); - $('#query-source').val(""); - } - - function toggleMoreQueryOptions() { - $('.query-more-options').toggle(); - $('.query-less-options').toggle(); - $('#query-ql').val(""); - $('#query-source').val(""); - } - - $('#button-query-more-options').click(function() { - toggleMoreQueryOptions(); - return false; - }); - - $('#button-query-less-options').click(function() { - toggleMoreQueryOptions(); - return false; - }); - - $('#query-source').keydown(function(e) { - var key = e.keyCode || e.which; - - if ((key == 9 || key ===13)) { - e.preventDefault(); - //Get cursor position - var start = this.selectionStart; - var end = this.selectionEnd; - var field = $(this); - var value = field.val(); - //insert Text and indentation - field.val(value.substring(0, start) + '\r ' + value.substring(end)); - //return cursor to its position - this.selectionStart = this.selectionEnd = start + 1; - } - }); - - function validateJson() { - try { - var result = JSON.parse($('#query-source').val()); - if (result) { - showQueryStatus('JSON is valid!'); - $('#query-source').val(JSON.stringify(result, null, " ")); - return result; - } - } catch(e) { - showQueryStatus(e.toString(), "error"); - } - return false; - }; - - window.Usergrid.console.doChildClick = function(event) { - var path = new String($('#query-path').val()); - if (!path.endsWith("/")) { - path += "/"; - } - path += event.target.innerText; - $('#query-path').val(path); - }; - - var queryQl = $('#query-ql'); - queryQl.typeahead({source:indexes}); - - function doBuildIndexMenu() { - queryQl.data('typeahead').source = indexes; - } - - $('#delete-entity-link').click(deleteEntity); - - function deleteEntity(e) { - e.preventDefault(); - var items = $('#query-response-table input[class=listItem]:checked'); - if(!items.length){ - alertModal("Please, first select the entities you want to delete."); - return; - } - var itemsCount = items.size(); - confirmDelete(function(){ - items.each(function() { - var path = $(this).attr('name'); - runAppQuery(new Usergrid.Query("DELETE", path, null, null, - function(request) { - itemsCount--; - if(itemsCount==0){ - $("#query-path").val(request.path); - getCollection('GET'); - }}, - function() { alertModal("Unable to delete: " + path); } - )); - }); - }); - } - - function requestIndexes(path){ - var data = {}; - runAppQuery(new Usergrid.Query("GET", path + "/indexes", null, null, - function(response) { - if(response && response.data) { - data = response; - } - buildIndexDropdown('query-collections-indexes-list', data); - - })); - } - - function buildIndexDropdown(menuId, indexes) { - var menu = $("#" + menuId); - menu.empty(); - $.tmpl('apigee.ui.collections.query.indexes.html', indexes).appendTo(menu); - } - - function appendToCollectionsQuery(message){ - var queryTextArea = $("#query-ql"); - queryTextArea.val(queryTextArea.val()+ " " + message ); - } - window.Usergrid.console.appendToCollectionsQuery = appendToCollectionsQuery; - - /******************************************************************* - * - * Organization Home - * - ******************************************************************/ - - - function pageSelectHome() { - - requestAdmins(); - displayOrganizationName(Usergrid.ApiClient.getOrganizationName()); - requestOrganizationCredentials(); - requestAdminFeed(); - } - window.Usergrid.console.pageSelectHome = pageSelectHome; - - - function displayApplications(response) { - applications = {}; - applications_by_id = {}; - var appMenu = $('.applications-menu'); - var appList = $('table#organization-applications-table'); - appMenu.empty(); - appList.empty(); - - if (response.data) { - applications = response.data; - var count = 0; - var applicationNames = keys(applications).sort(); - var data = []; - var appMenuTmpl = $('
  • ${name}
  • '); - - for (var i in applicationNames) { - var name = applicationNames[i]; - var uuid = applications[name]; - data.push({uuid:uuid, name:name.split("/")[1]}); - count++; - applications_by_id[uuid] = name.split("/")[1]; - } - - if (count) { - $.tmpl('apigee.ui.applications.table_rows.html', data).appendTo(appList); - appMenuTmpl.tmpl(data).appendTo(appMenu); - appMenuTmpl.tmpl(data) - appMenu.find("a").click(function selectApp(e) { - var link = $(this); - pageSelect(link.tmplItem().data.name); - Usergrid.Navigation.router.navigateTo('dashboard'); - }); - - appList.find("a").click(function selectApp(e) { - e.preventDefault(); - var link = $(this); - pageSelect(link.tmplItem().data.name); - Usergrid.Navigation.router.navigateTo('dashboard'); - }); - enableApplicationPanelButtons(); - } - appMenu.append('
  • '); - appMenu.append('
  • + New Application
  • '); - } - - if(appList.is(":empty")){ - appList.html('
    No applications created.
    '); - appMenu.html('
  • --No Apps--
  • '); - forceNewApp(); - } - - var appName = Usergrid.ApiClient.getApplicationName(); - if (!appName) { - selectFirstApp(); - } else { - setNavApplicationText(); - } - } - - function requestApplications() { - var sectionApps = $('#organization-applications-table'); - sectionApps.empty().html('
    Loading...
    '); - runManagementQuery(new Usergrid.Query("GET","organizations/" + Usergrid.ApiClient.getOrganizationName() + "/applications", null, null, - displayApplications, - function() { - sectionApps.html('
    Unable to retrieve application list.
    '); - } - )); - } - Usergrid.console.requestApplications = requestApplications; - - function selectFirstApp() { - //get the currently specified app name - var appName = Usergrid.ApiClient.getApplicationName(); - //and make sure we it is in one of the current orgs - var app = Usergrid.organizations.getItemByName(appName); - if(appName && app) { - Usergrid.ApiClient.setApplicationName(appName); - pageSelect(appName); - } else { - //we need to select an app, so get the current org name - var orgName = Usergrid.ApiClient.getOrganizationName(); - //get a reference to the org object by using the name - var org = Usergrid.organizations.getItemByName(orgName); - //get a handle to the first app in the org - app = org.getFirstItem(); - //store the new app in the client - Usergrid.ApiClient.setApplicationName(app.getName()); - pageSelect(app.getName()); - } - setNavApplicationText(); - } - - function displayAdmins(response) { - var sectionAdmins = $('#organization-admins-table'); - sectionAdmins.empty(); - if (response.data) { - var admins = response.data; - admins = admins.sort(); - for (var i in admins) { - var admin = admins[i]; - admin.gravatar = get_gravatar(admin.email, 20); - $.tmpl('apigee.ui.admins.table_rows.html', admin).appendTo(sectionAdmins); - } - } - if(sectionAdmins.is(':empty')){ - sectionAdmins.html('
    No organization administrators.
    '); - } - } - - function requestAdmins() { - var sectionAdmins =$('#organization-admins-table'); - sectionAdmins.empty().html('
    Loading...
    '); - runManagementQuery(new Usergrid.Query("GET","organizations/" + Usergrid.ApiClient.getOrganizationName() + "/users", null, null, - displayAdmins, - function() {sectionAdmins.html('
    Unable to retrieve admin list
    '); - })); - } - - $(document).on('click', '.toggleableSP', function() { - $(this).parent().find('.toggleableSP').toggle(); - return false - }); - - function get_gravatar(email, size) { - var size = size || 50; - return 'https://secure.gravatar.com/avatar/' + MD5(email) + '?s=' + size + encodeURI("&d=https://apigee.com/usergrid/img/user_profile.png"); - } - - function get_replacementGravatar(picture) { - picture = picture.replace(/^http:\/\/www.gravatar/i, 'https://secure.gravatar'); - //note: changing this to use the image on apigee.com - since the gravatar default won't work on any non-public domains such as localhost - //this_data.picture = this_data.picture + encodeURI("?d="+window.location.protocol+"//" + window.location.host + window.location.pathname + "images/user_profile.png"); - picture = picture + encodeURI("?d=https://apigee.com/usergrid/img/user_profile.png"); - return picture; - } - - function displayAdminFeed(response) { - - var sectionActivities = $('#organization-feed-table'); - sectionActivities.empty(); - - if (response.entities && (response.entities.length > 0)) { - var activities = response.entities; - for (var i in activities) { - var activity = activities[i]; - - // Next part is a hack. The API should return the email and title cleanly. - var title_tmp = $("", {html: activity.title}); - activity.actor.email = title_tmp.find('a').attr('mailto'); - title_tmp.find('a').remove(); - activity.title = title_tmp.text(); - // hack ends here - - activity.actor.gravatar = get_gravatar(activity.actor.email, 20); - $.tmpl('apigee.ui.feed.table_rows.html', activity).appendTo(sectionActivities); - } - } - - if (sectionActivities.is(":empty")) { - sectionActivities.html('
    No activities.
    '); - } - } - - function requestAdminFeed() { - var section =$('#organization-activities'); - section.empty().html('
    Loading...
    '); - runManagementQuery(new Usergrid.Query("GET","orgs/" + Usergrid.ApiClient.getOrganizationName() + "/feed", null, null, displayAdminFeed, - function() { section.html('
    Unable to retrieve feed.
    '); })); - } - window.Usergrid.console.requestAdminFeed = requestAdminFeed; - - var organization_keys = { }; - - function requestOrganizationCredentials() { - $('#organization-panel-key').html('
    Loading...
    '); - $('#organization-panel-secret').html('
    Loading...
    '); - runManagementQuery(new Usergrid.Query("GET",'organizations/'+ Usergrid.ApiClient.getOrganizationName() + "/credentials", null, null, - function(response) { - $('#organization-panel-key').html(response.credentials.client_id); - $('#organization-panel-secret').html(response.credentials.client_secret); - organization_keys = {client_id : response.credentials.client_id, client_secret : response.credentials.client_secret}; - }, - function() { - $('#organization-panel-key').html('
    Unable to load...
    '); - $('#organization-panel-secret').html('
    Unable to load...
    '); - })); - } - - function newOrganizationCredentials() { - $('#organization-panel-key').html('
    Loading...
    '); - $('#organization-panel-secret').html('
    Loading...
    '); - runManagementQuery(new Usergrid.Query("POST",'organizations/' + Usergrid.ApiClient.getOrganizationName() + "/credentials",null, null, - function(response) { - $('#organization-panel-key').html(response.credentials.client_id); - $('#organization-panel-secret').html(response.credentials.client_secret); - organization_keys = {client_id : response.credentials.client_id, client_secret : response.credentials.client_secret}; - }, - function() { - $('#organization-panel-key').html('
    Unable to load...
    '); - $('#organization-panel-secret').html('
    Unable to load...
    '); - } - )); - } - window.Usergrid.console.newOrganizationCredentials = newOrganizationCredentials; - - function updateTips(t) { - tips.text(t).addClass('ui-state-highlight'); - setTimeout(function() { - tips.removeClass('ui-state-highlight', 1500); - }, - 500); - } - - function checkLength(o, n, min, max) { - if (o.val().length > max || o.val().length < min) { - o.addClass('ui-state-error'); - updateTips("Length of " + n + " must be between " + min - + " and " + max + "."); - return false; - } else { - return true; - } - } - - function checkRegexp(o, regexp, n) { - if (! (regexp.test(o.val()))) { - o.addClass('ui-state-error'); - updateTips(n); - return false; - } else { - return true; - } - } - - function checkTrue(o, t, n) { - if (!t) { - o.addClass('ui-state-error'); - updateTips(n); - } - return t; - } - - var tips = $('.validateTips'); - - /******************************************************************* - * - * Modals - * - ******************************************************************/ - - function alertModal(header,message) { - $('#alertModal h4').text(header); - $('#alertModal p').text(message); - $('#alertModal').modal('show'); - } - - //use like: alertBanner("Oh no!", "Say it isn't so!!"); - //or like: alertBanner("Oh no!", "Say it isn't so!!", 5000); //will auto-close in 5 seconds - function alertBanner(header, message, timeout) { - $('#alert-error-header').html(header); - $('#alert-error-message').html(message); - $('#alert-error-message-container').show(); - if (timeout) { - var alertTimer = setInterval(function(){ - $('#alert-error-message-container').hide(); - window.clearInterval(alertTimer); - },timeout); - } - } - - function hideModal(id){ - $(id).hide(); - } - - function confirmAction(header, message, callback){ - var form = $('#confirmAction'); - - form.find('h4').text(header); - form.find('p').text(message); - form.unbind('submit'); - - form.submit(function(){ - form.modal("hide"); - callback(); - - return false; - }); - - form.modal('show'); - } - - function resetModal(){ - this.reset(); - var form = $(this); - formClearErrors(form); - } - - function focusModal(){ - $(this).find('input:first').focus(); - } - - function submitModal(e){ - e.preventDefault(); - } - - $('form.modal').on('hidden',resetModal).on('shown',focusModal).submit(submitModal); - $('#dialog-form-new-application').submit(submitApplication); - $('#dialog-form-force-new-application').submit(submitApplication); - $('#dialog-form-new-admin').submit(submitNewAdmin); - $('#dialog-form-new-organization').submit(submitNewOrg); - $('#dialog-form-new-user').submit(submitNewUser); - $('#dialog-form-new-role').submit(submitNewRole); - $('#dialog-form-new-collection').submit(submitNewCollection); - $('#dialog-form-new-group').submit(submitNewGroup); - $('#dialog-form-add-group-to-user').submit(submitAddGroupToUser); - $('#dialog-form-add-user-to-group').submit(submitAddUserToGroup); - $('#dialog-form-add-user-to-role').submit(submitAddUserToRole); - $('#dialog-form-add-role-to-user').submit(function() { submitAddRoleToUser(current_roleName, current_roleTitle)}); - $('#dialog-form-add-user-to-notification').submit(function() { addUserToNotification()}); - $('#dialog-form-add-group-to-notification').submit(function() { addGroupToNotification()}); - $('#dialog-form-add-group-to-role').submit(function() { submitAddGroupToRole(current_roleName, current_roleTitle)}); - $('#dialog-form-add-role-to-group').submit(submitAddRoleToGroup); - $('#dialog-form-follow-user').submit(submitFollowUser); - - function checkLength2(input, min, max) { - if (input.val().length > max || input.val().length < min) { - var tip = "Length must be between " + min + " and " + max + "."; - validationError(input,tip); - return false; - } - - return true; - } - - function checkRegexp2(input, regexp, tip) { - if (! (regexp.test(input.val()))) { - validationError(input,tip); - return false; - } - return true; - } - - function checkTrue2(input, exp, tip) { - if (!exp) { - validationError(input,tip); - return false; - } - - return true; - } - - function confirmDelete(callback){ - var form = $('#confirmDialog'); - if (form.submit) { - form.unbind('submit'); - } - - form.submit(function(e){ - e.preventDefault(); - form.modal('hide'); - }).submit(callback); - - form.modal('show'); - } - - function validationError(input, tip){ - input.focus(); - input.parent().parent().addClass("error"); - input.parent().parent().find(".help-block").text(tip).addClass("alert-error").addClass("alert").show(); - } - - $.fn.serializeObject = function() { - var o = {}; - var a = this.serializeArray(); - - $.each(a, function() { - if (o[this.name]) { - if (!o[this.name].push) { - o[this.name] = [o[this.name]]; - } - o[this.name].push(this.value || ''); - } else { - o[this.name] = this.value || ''; - } - }); - - return o; - }; - - function formClearErrors(form){ - form.find('.ui-state-error').removeClass('ui-state-error'); - form.find('.error').removeClass('error'); - form.find('.help-block').empty().hide(); - } - - function submitApplication() { - var form = $(this); - formClearErrors(form); - - var new_application_name = $(this).find('.new-application-name'); - - var bValid = checkLength2(new_application_name, 4, 80) - && checkRegexp2(new_application_name, usernameRegex, usernameAllowedCharsMessage); - - if (bValid) { - runManagementQuery(new Usergrid.Query("POST","organizations/" + Usergrid.ApiClient.getOrganizationName() + "/applications", form.serializeObject(), null, - function(response) { - for (var appName in response.data) { break; } - var appTitle = appName.split("/")[1]; - var currentOrg = Usergrid.ApiClient.getOrganizationName(); - Usergrid.organizations.getItemByName(currentOrg).addItem(new Usergrid.Application(appTitle, response.data[appName])); - pageSelect(appTitle); - requestApplications(); - }, - function() { - closeErrorMessage = function() { - $('#home-messages').hide(); - }; - var closebutton = '×' - $('#home-messages').text("Unable to create application: ").prepend(closebutton).addClass('alert-error').show(); - })); - $(this).modal('hide'); - } - } - - function submitNewAdmin() { - var form = $(this); - formClearErrors(form); - - var new_admin_email = $('#new-admin-email'); - var bValid = checkLength2(new_admin_email, 6, 80) - && checkRegexp2(new_admin_email,emailRegex, emailAllowedCharsMessage); - if (bValid) { - var data = form.serializeObject(); - runManagementQuery(new Usergrid.Query("POST","organizations/" + Usergrid.ApiClient.getOrganizationName() + "/users", data, null, - requestAdmins, - function () { alertModal("Error", "Unable to create admin"); } - )); - $(this).modal('hide'); - } - } - - function addOrganizationToList(orgName) { - runManagementQuery(new Usergrid.Query("GET","orgs/" + orgName, null, null, - function(response) { - var orgName = response.organization.name; - var orgUUID = response.organization.uuid; - organization = new Usergrid.Organization(orgName, orgUUID); - var apps = response.organization.applications; - for(app in apps) { - var appName = app.split("/")[1]; - //grab the id - var appUUID = response.organization.applications[app]; - //store in the new Application object - application = new Usergrid.Application(appName, appUUID); - organization.addItem(application); - } - //add organization to organizations list - Usergrid.organizations.addItem(organization); - requestAccountSettings(); - setupOrganizationsMenu(); - }, - function() { alertModal("Error", "Unable to get organization" + orgName); - } - )); - } - - function submitNewOrg() { - var form = $(this); - formClearErrors(form); - - var new_organization_name = $('#new-organization-name'); - var new_organization_name_val = $('#new-organization-name').val(); - var bValid = checkLength2(new_organization_name, 4, 80) - && checkRegexp2(new_organization_name, organizationNameRegex, organizationNameAllowedCharsMessage); - - if (bValid) { - var data = form.serializeObject(); - runManagementQuery(new Usergrid.Query("POST","users/" + Usergrid.userSession.getUserUUID() + "/organizations", data, null, - function() { - addOrganizationToList(new_organization_name_val); - }, - function() { alertModal("Error", "Unable to create organization"); } - )); - $(this).modal('hide'); - } - } - //TODO: the organization, and required fields for this method, are hidden. There is no quick way to check variable names and order - /* - * Needed fields: - * username: - * name: FULL NAME - * email: - * password: - */ - function submitNewUser() { - var form = $(this); - formClearErrors(form); - - var email = $('#new-user-email'); - var username = $('#new-user-username'); - var fullname = $('#new-user-fullname'); - var password = $('#new-user-password'); - var validate_password = $('#new-user-validate-password'); - - var bValid = - //Fullname can is not required. - checkLength2(fullname , 0, 80) - && ( fullname.val() === "" || checkRegexp2(fullname, nameRegex, nameAllowedCharsMessage) ) - //Username IS required - && checkRegexp2(username, usernameRegex, usernameAllowedCharsMessage) - //Email is NOT required - && ( checkLength2(email, 6, 80) ) - && ( email.val() === "" || checkRegexp2(email,emailRegex, emailAllowedCharsMessage) ) - && ( checkLength2(password ,0 ,0) || checkLength2(password, 1, 64) ) - && ( password.val() === "" || checkRegexp2(password,passwordRegex, passwordAllowedCharsMessage) ) - && ( checkTrue2(password, (password.val() === validate_password.val()), passwordMismatchMessage)); - - if (bValid) { - var data = {"email":email.val(), "username":username.val(),"name":fullname.val(), "password":password.val()} - runAppQuery(new Usergrid.Query("POST", 'users', data, null, - function() { - getUsers(); - closeErrorMessage = function() { - $('#users-messages').hide(); - }; - var closebutton = '×'; - $('#users-messages') - .text("User created successfully.") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-warning') - .show(); - }, - function() { - closeErrorMessage = function() { - $('#users-messages').hide(); - }; - var closebutton = '×' - $('#users-messages') - .text("Unable to create user") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-error') - .show(); - } - )); - - $(this).modal('hide'); - } - } - - function submitNewRole() { - var form = $(this); - formClearErrors(form); - - var new_role_name = $('#new-role-name'); - var new_role_title = $('#new-role-title'); - - var bValid = checkLength2(new_role_name, 1, 80) - && checkRegexp2(new_role_name, roleRegex, roleAllowedCharsMessage) - && checkLength2(new_role_title, 1, 80) - && checkRegexp2(new_role_title,titleRegex, titleAllowedCharsMessage); - - if (bValid) { - var data = form.serializeObject(); - runAppQuery(new Usergrid.Query("POST", "role", data, null, - function() { - getRoles(); - closeErrorMessage = function() { - $('#roles-messages').hide(); - }; - var closebutton = '×' - $('#roles-messages') - .text("Role created successfully.") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-warning') - .show(); - }, - function() { - closeErrorMessage = function() { - $('#roles-messages').hide(); - }; - var closebutton = '×' - $('#roles-messages') - .text("Unable to create user") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-error') - .show(); - } - )); - - $(this).modal('hide'); - } - } - - function submitNewCollection() { - var form = $(this); - formClearErrors(form); - - var new_collection_name = $('#new-collection-name'); - - var bValid = checkLength2(new_collection_name, 4, 80) - && checkRegexp2(new_collection_name, alphaNumRegex, alphaNumAllowedCharsMessage); - - if (bValid) { - var data = form.serializeObject(); - var collections = {}; - collections[data.name] = {}; - var metadata = { - metadata: { - collections: collections - } - } - runAppQuery(new Usergrid.Query("PUT", "", metadata, null, - function() { - getCollections(); - closeErrorMessage = function() { - $('#collections-messages').hide(); - }; - var closebutton = '×' - $('#collections-messages') - .text("Collection created successfully.") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-warning') - .show(); - getCollection("get", data.name); - }, - function() { - closeErrorMessage = function() { - $('#collections-messages').hide(); - }; - var closebutton = '×' - $('#collections-messages') - .text("Unable to create user") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-error') - .show(); - } - )); - - $(this).modal('hide'); - } - } - - function submitNewGroup() { - var form = $(this); - formClearErrors(form); - - var new_group_title = $('#new-group-title'); - var new_group_path = $('#new-group-path'); - - var bValid = checkLength2(new_group_title, 1, 80) - && checkRegexp2(new_group_title, nameRegex, nameAllowedCharsMessage) - && checkLength2(new_group_path, 1, 80) - && checkRegexp2(new_group_path, pathRegex, pathAllowedCharsMessage); - - if (bValid) { - var data = form.serializeObject(); - runAppQuery(new Usergrid.Query("POST", "groups", data, null, - function() { - getGroups(); - closeErrorMessage = function() { - $('#groups-messages').hide(); - }; - var closebutton = '×' - $('#groups-messages') - .text("Group created successfully.") - .prepend(closebutton) - .removeClass() - .addClass('alert alert-warning') - .show(); - }, - function() { - closeErrorMessage = function() { - $('#groups-messages').hide(); - }; - var closebutton = '×' - $('#groups-messages').text("Unable to create group").prepend(closebutton).addClass('alert-error').show(); - } - )); - - $(this).modal('hide'); - } - } - - function submitAddGroupToUser() { - var form = $(this); - formClearErrors(form); - var add_group_groupname = $('#search-group-name-input'); - var bValid = checkLength2(add_group_groupname, 1, 80) - && checkRegexp2(add_group_groupname, usernameRegex, usernameAllowedCharsMessage); - - if (bValid) { - userId = $('#search-group-userid').val(); - groupId = $('#search-group-name-input').val(); - - runAppQuery(new Usergrid.Query("POST", "/groups/" + groupId + "/users/" + userId, null, null, - function() { requestUser(userId); }, - function() { alertModal("Error", "Unable to add group to user"); } - )); - - $(this).modal('hide'); - } - } - - function submitAddUserToGroup() { - var form = $(this); - formClearErrors(form); - var add_user_username = $('#search-user-name-input'); - var bValid = checkLength2(add_user_username, 1, 80) - && checkRegexp2(add_user_username, usernameRegex, usernameAllowedCharsMessage); - - if (bValid) { - userId = $('#search-user-name-input').val(); - groupId = $('#search-user-groupid').val(); - runAppQuery(new Usergrid.Query("POST", "/groups/" + groupId + "/users/" + userId, null, null, - function() { requestGroup(groupId); }, - function() { alertModal("Error", "Unable to add user to group"); } - )); - $(this).modal('hide'); - } - } - - function submitFollowUser(){ - var form = $(this); - formClearErrors(form); - var username = $('#search-follow-username-input'); - var bValid = checkLength2(username, 1, 80) && checkRegexp2(username, usernameRegex, usernameAllowedCharsMessage); - if (bValid) { - var followingUserId = $('#search-follow-username').val(); - var followedUserId = $('#search-follow-username-input').val(); - runAppQuery(new Usergrid.Query("POST", "/users/" + followingUserId + "/following/user/" + followedUserId, null, null, - function() { pageSelectUserGraph(followingUserId)}, - function() {alertModal("Error", "Unable to follow User");} - )); - $(this).modal('hide'); - } - } - - function submitAddRoleToUser(roleName, roleTitle) { - var form = $(this); - formClearErrors(form); - var roleIdField = $('#search-roles-user-name-input'); - var bValid = checkLength2(roleIdField, 1, 80) && checkRegexp2(roleIdField, usernameRegex, usernameAllowedCharsMessage) - var username = $('#search-roles-user-name-input').val(); - if (bValid) { - runAppQuery(new Usergrid.Query("POST", "/roles/" + roleName + "/users/" + username, null, null, - function() { pageSelectRoleUsers(roleName, roleTitle); }, - function() { alertModal("Error", "Unable to add user to role"); } - )); - $('#dialog-form-add-role-to-user').modal('hide'); - } - } - - function submitAddUserToRole() { - var form = $(this); - formClearErrors(form); - - var roleIdField = $('#search-role-name-input'); - var bValid = checkLength2(roleIdField, 1, 80) - && checkRegexp2(roleIdField, roleRegex, roleAllowedCharsMessage) - - var username = $('#role-form-username').val(); - var roleId = $('#search-role-name-input').val(); - // role may have a preceding or trailing slash, remove it - roleId = roleId.replace('/',''); - if (bValid) { - runAppQuery(new Usergrid.Query("POST", "/roles/" + roleId + "/users/" + username, null, null, - function() { pageSelectUserPermissions(username); }, - function() { alertModal("Error", "Unable to add user to role"); } - )); - - $(this).modal('hide'); - } - } - - function deleteUsersFromRoles(username) { - var items = $('#users-permissions-response-table input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the roles you want to delete for this user."); - return; - } - - confirmDelete(function(){ - items.each(function() { - var roleName = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", "/roles/" + roleName + "/users/" + username, null, null, - function() { pageSelectUserPermissions (username); }, - function() { alertModal("Error", "Unable to remove user from role"); } - )); - }); - }); - } - window.Usergrid.console.deleteUsersFromRoles = deleteUsersFromRoles; - - function deleteRoleFromUser(roleName, roleTitle) { - var items = $('#role-users input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the users you want to delete from this role."); - return; - } - - confirmDelete(function(){ - items.each(function() { - var username = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", "/roles/" + roleName + "/users/" + username, null, null, - function() { pageSelectRoleUsers (roleName, roleTitle); }, - function() { alertModal("Error", "Unable to remove user from role"); } - )); - }); - }); - } - window.Usergrid.console.deleteRoleFromUser = deleteRoleFromUser; - - function removeUserFromGroup(userId) { - var items = $('#user-panel-memberships input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the groups you want to delete for this user.") - return; - } - confirmDelete(function(){ - items.each(function() { - var groupId = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", "/groups/" + groupId + "/users/" + userId, null, null, - function() { pageSelectUserGroups (userId); }, - function() { alertModal("Error", "Unable to remove user from group"); } - )); - }); - }); - } - window.Usergrid.console.removeUserFromGroup = removeUserFromGroup; - - function removeGroupFromUser(groupId) { - var items = $('#group-panel-memberships input[class^=listItem]:checked'); - if (!items.length) { - alertModal("Error", "Please, first select the users you want to from this group."); - return; - } - - confirmDelete(function(){ - items.each(function() { - var userId = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", "/groups/" + groupId + "/users/" + userId, null, null, - function() { pageSelectGroupMemberships (groupId); }, - function() { alertModal("Error", "Unable to remove user from group"); } - )); - }); - }); - } - window.Usergrid.console.removeGroupFromUser = removeGroupFromUser; - - function deleteRolesFromGroup(roleId, rolename) { - var items = $('#group-panel-permissions input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the roles you want to delete from this group.") - return; - } - - confirmDelete(function(){ - items.each(function() { - var roleId = $(this).attr("value"); - var groupname = $('#role-form-groupname').val(); - runAppQuery(new Usergrid.Query("DELETE", "/roles/" + roleId + "/groups/" + groupname, null, null, - function() { pageSelectGroupPermissions(groupname); }, - function() { alertModal("Error", "Unable to remove role from group"); } - )); - }); - }); - } - window.Usergrid.console.deleteRolesFromGroup = deleteRolesFromGroup; - - function submitAddRoleToGroup() { - var form = $(this); - formClearErrors(form); - - var roleIdField = $('#search-groups-role-name-input'); - var bValid = checkLength2(roleIdField, 1, 80) - && checkRegexp2(roleIdField, roleRegex, roleAllowedCharsMessage) - - var groupname = $('#role-form-groupname').val(); - var roleId = $('#search-groups-role-name-input').val(); - // role may have a preceding or trailing slash, remove it - roleId = roleId.replace('/',''); - - if (bValid) { - runAppQuery(new Usergrid.Query("POST", "/groups/" + groupname + "/roles/" + roleId, null, null, - function() { pageSelectGroupPermissions(groupname); }, - function() { alertModal("Error", "Unable to add user to role"); } - )); - $(this).modal('hide'); - } - } - - /******************************************************************* - * - * Generic page select - * - ******************************************************************/ - function pageSelect(name) { - if (name) { - //the following 3 lines are just a safety check, we could just store the name - //get the current org name - var currentOrg = Usergrid.ApiClient.getOrganizationName(); - //get a reference to the current org object by using the name - var org = Usergrid.organizations.getItemByName(currentOrg); - //get a reference to the specified app by name - var app = org.getItemByName(name); - //store the name - Usergrid.ApiClient.setApplicationName(app.getName()); - } - setNavApplicationText(); - getCollections(); - query_history = []; - } - window.Usergrid.console.pageSelect = pageSelect; - - - /******************************************************************* - * - * Application - * - ******************************************************************/ - - function pageSelectApplication() { - pageSelect(); - requestApplicationUsage(); - } - window.Usergrid.console.pageSelectApplication = pageSelectApplication; - - function updateApplicationDashboard(){ - var data = new google.visualization.DataTable(); - data.addColumn('string', 'Entity'); - data.addColumn('number', 'Count'); - var rows = []; - var t = ''; - var collectionNames = keys(applicationData.Collections).sort(); - - var entity_count = 0; - for (var i in collectionNames) { - var collectionName = collectionNames[i]; - var collection = applicationData.Collections[collectionName]; - var row = [collectionName, {v: Math.abs(collection.count)}]; - rows.push(row); - collectionName = escapeString(collectionName); - t += ''; - entity_count += collection.count; - } - t += ''; - t += '
    ' + collection.count + '' + collectionName + '
    ' + entity_count + 'entities total
    '; - data.addRows(rows); - - new google.visualization.PieChart( - document.getElementById('application-panel-entity-graph')). - draw(data, { - height: 200, - is3D: true, - backgroundColor: backgroundGraphColor - } - ); - - $('#dashboard-panel #application-panel-text').html(t); - } - - function requestApplicationUsage() { - $('#application-entities-timeline').html(""); - $('#application-cpu-time').html(""); - $('#application-data-uploaded').html(""); - $('#application-data-downloaded').html(""); - var params = {}; - params.start_time = Math.floor(new Date().getTime() / 1209600000) * 1209600000; - params.end_time = start_timestamp + 1209600000; - params.resolution = "day"; - params.counter = ["application.entities", "application.request.download", "application.request.time", "application.request.upload"]; - params.pad = true; - - runAppQuery(new Usergrid.Query("GET", "counters", null, params, - function(response) { - var usage_counters = response.counters; - - if (!usage_counters) { - $('#application-entities-timeline').html(""); - $('#application-cpu-time').html(""); - $('#application-data-uploaded').html(""); - $('#application-data-downloaded').html(""); - return; - } - - var graph_width = 350; - var graph_height = 100; - var data = new google.visualization.DataTable(); - data.addColumn('date', 'Time'); - data.addColumn('number', 'Entities'); - data.addRows(15); - - for (var i in usage_counters[0].values) { - data.setCell(parseInt(i), 0, new Date(usage_counters[0].values[i].timestamp)); - data.setCell(parseInt(i), 1, usage_counters[0].values[i].value); - } - - new google.visualization.LineChart(document.getElementById('application-entities-timeline')).draw(data, { - title: "Entities", - titlePosition: "in", - titleTextStyle: {color: 'black', fontName: 'Arial', fontSize: 18}, - width: graph_width, - height: graph_height, - backgroundColor: backgroundGraphColor, - legend: "none", - hAxis: {textStyle: {color:"transparent", fontSize: 1}}, - vAxis: {textStyle: {color:"transparent", fontSize: 1}} - }); - - data = new google.visualization.DataTable(); - data.addColumn('date', 'Time'); - data.addColumn('number', 'CPU'); - data.addRows(15); - - for (var i in usage_counters[2].values) { - data.setCell(parseInt(i), 0, new Date(usage_counters[2].values[i].timestamp)); - data.setCell(parseInt(i), 1, usage_counters[2].values[i].value); - } - - new google.visualization.LineChart(document.getElementById('application-cpu-time')).draw(data, { - title: "CPU Time Used", - titlePosition: "in", - titleTextStyle: {color: 'black', fontName: 'Arial', fontSize: 18}, - width: graph_width, - height: graph_height, - backgroundColor: backgroundGraphColor, - legend: "none", - hAxis: {textStyle: {color:"transparent", fontSize: 1}}, - vAxis: {textStyle: {color:"transparent", fontSize: 1}} - }); - - data = new google.visualization.DataTable(); - data.addColumn('date', 'Time'); - data.addColumn('number', 'Uploaded'); - data.addRows(15); - - for (var i in usage_counters[3].values) { - data.setCell(parseInt(i), 0, new Date(usage_counters[3].values[i].timestamp)); - data.setCell(parseInt(i), 1, usage_counters[3].values[i].value); - } - - new google.visualization.LineChart(document.getElementById('application-data-uploaded')).draw(data, { - title: "Bytes Uploaded", - titlePosition: "in", - titleTextStyle: {color: 'black', fontName: 'Arial', fontSize: 18}, - width: graph_width, - height: graph_height, - backgroundColor: backgroundGraphColor, - legend: "none", - hAxis: {textStyle: {color:"transparent", fontSize: 1}}, - vAxis: {textStyle: {color:"transparent", fontSize: 1}} - }); - - data = new google.visualization.DataTable(); - data.addColumn('date', 'Time'); - data.addColumn('number', 'Downloaded'); - data.addRows(15); - - for (var i in usage_counters[1].values) { - data.setCell(parseInt(i), 0, new Date(usage_counters[1].values[i].timestamp)); - data.setCell(parseInt(i), 1, usage_counters[1].values[i].value); - } - - new google.visualization.LineChart(document.getElementById('application-data-downloaded')).draw(data, { - title: "Bytes Downloaded", - titlePosition: "in", - titleTextStyle: {color: 'black', fontName: 'Arial', fontSize: 18}, - width: graph_width, - height: graph_height, - backgroundColor: backgroundGraphColor, - legend: "none", - hAxis: {textStyle: {color:"transparent", fontSize: 1}}, - vAxis: {textStyle: {color:"transparent", fontSize: 1}} - }); - }, - function() { - $('#application-entities-timeline').html(""); - $('#application-cpu-time').html(""); - $('#application-data-uploaded').html(""); - $('#application-data-downloaded').html(""); - } - )); - } - window.Usergrid.console.requestApplicationUsage = requestApplicationUsage; - - /******************************************************************* - * - * Query Object Setup - * - ******************************************************************/ - var queryObj = {}; - - function hidePagination(section) { - $('#'+section+'-pagination').hide(); - $('#'+section+'-next').hide(); - $('#'+section+'-previous').hide(); - } - - function showPagination(section){ - if (queryObj.hasNext()) { - $('#'+section+'-pagination').show(); - $('#'+section+'-next').show(); - } - - if (queryObj.hasPrevious()) { - $('#'+section+'-pagination').show(); - $('#'+section+'-previous').show(); - } - } - - function hideCurlCommand(section) { - $('#'+section+'-curl-container').hide(); - $('#'+section+'-curl-token').hide(); - } - - function showCurlCommand(section, curl, token) { - var data = { - curlData: curl, - sectionName: section - }; - var sectionId = $('#'+section+'-curl-container'); - sectionId.html(""); - $.tmpl('apigee.ui.curl.detail.html', data).appendTo(sectionId); - sectionId.show(); - if (!token) { - $('#'+section+'-curl-token').hide(); - } - } - - function copyCurlCommand() { - $('#copypath', 'body') - .find('a') - .livequery('click', function() { - $(this) - .blur(); - var nodetext = $('#'+section+'-curl').html(); - $('#copypath input').focus(); - $('#copypath input').select(); - return false; - }); - - } - - function bindPagingEvents(section) { - $(document).off('click', '#'+section+'-previous', getPrevious); - $(document).off('click', '#'+section+'-next', getNext); - //bind the click events - $(document).on('click', '#'+section+'-previous', getPrevious); - $(document).on('click', '#'+section+'-next', getNext); - } - Usergrid.console.bindPagingEvents = bindPagingEvents; - - function getPrevious() { //called by a click event - for paging - queryObj.getPrevious(); - runAppQuery(); - } - function getNext() { //called by a click event - for paging - queryObj.getNext(); - runAppQuery(); - } - - function runAppQuery(_queryObj) { - var obj = _queryObj || queryObj; - Usergrid.ApiClient.runAppQuery(obj); - return false; - } - - function runManagementQuery(_queryObj) { - var obj = _queryObj || queryObj; - Usergrid.ApiClient.runManagementQuery(obj); - return false; - } - - /******************************************************************* - * - * Users - * - ******************************************************************/ - var userLetter = "*"; - var userSortBy = "username"; - - function pageSelectUsers() { - //Hide old Alert Messages - hideModal('#users-messages'); - //make a new query object - queryObj = new Usergrid.Query(null); - //bind events for previous and next buttons - bindPagingEvents('users'); - //reset paging so we start at the first page - queryObj.resetPaging(); - //the method to get the compile and call the query - getUsers(); - //ui stuff - selectFirstTabButton('#users-panel-tab-bar'); - showPanelList('users'); - $('#search-user-username').val(''); //reset the search box - } - window.Usergrid.console.pageSelectUsers = pageSelectUsers; - - function getUsers(search, searchType) { - //clear out the table before we start - hideCurlCommand('users'); - var output = $('#users-table'); - output.empty(); - var query = {"ql" : "order by " + userSortBy}; //default to built in search - if (typeof search == 'string') { - if (search.length > 0) { - if (searchType == 'name') { - query = {"ql" : searchType + " contains '" + search + "*'"}; - } else { - query = {"ql" : searchType + "='" + search + "*'"}; - } - } - } else if (userLetter != "*") { - query = {"ql" : searchType + "='" + userLetter + "*'"}; - } - - queryObj = new Usergrid.Query("GET", "users", null, query, getUsersCallback, function() { alertModal("Error", "Unable to retrieve users."); }); - runAppQuery(queryObj); - } - - function getUsersCallback(response) { - response = escapeMe(response); - hidePagination('users'); - var output = $('#users-table'); - if (response.entities.length < 1) { - output.replaceWith('
    No users found.
    '); - } else { - output.replaceWith('
     usernameDisplay Name 
    '); - for (i = 0; i < response.entities.length; i++) { - var this_data = response.entities[i]; - if (!this_data.picture) { - this_data.picture = window.location.protocol+ "//" + window.location.host + window.location.pathname + "images/user-photo.png" - } else { - this_data.picture = get_replacementGravatar(this_data.picture); - } - $.tmpl('apigee.ui.users.table_rows.html', this_data).appendTo('#users-table'); - } - } - showPagination('users'); - showCurlCommand('users', queryObj.getCurl(), queryObj.getToken()); - } - - function showUsersForSearch(search){ - selectFirstTabButton('#users-panel-tab-bar'); - $('#users-panel-search').hide(); - selectTabButton('#button-users-list'); - $('#users-panel-list').show(); - userLetter = search; - getUsers(); - } - Usergrid.console.showUsersForSearch = showUsersForSearch; - - function searchUsers(){ - var search = $('#search-user-username').val(); - var searchType = ($('#search-user-type').val())?$('#search-user-type').val():userSortBy; - //make sure the input is valid: - if (searchType == 'name') { - searchType = 'name'; - } else if (searchType == 'username') {searchType = 'username';} - getUsers(search, searchType); - } - Usergrid.console.searchUsers = searchUsers; - - function selectAllEntities(checkbox){ - if (checkbox.checked) { - $('[class=listItem]').attr('checked', true); - } else { - $('[class=listItem]').attr('checked', false); - } - } - window.Usergrid.console.selectAllEntities = selectAllEntities; - - $('#delete-users-link').click(deleteUsers); - function deleteUsers(e) { - e.preventDefault(); - - var items = $('#users-table input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the users you want to delete."); - return; - } - - confirmDelete(function(){ - items.each(function() { - var userId = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", 'users/' + userId, null, null, - getUsers, - function() { alertModal("Error", "Unable to delete user - " + userId) } - )); - }); - }); - } - - /******************************************************************* - * - * User - * - ******************************************************************/ - - function pageOpenUserProfile(userName) { - hideModal('.messages'); - Pages.SelectPanel('user'); - requestUser(userName); - selectTabButton('#button-user-profile'); - showPanelContent('#user-panel', '#user-panel-profile'); - } - window.Usergrid.console.pageOpenUserProfile = pageOpenUserProfile; - - function pageOpenUserActivities(userId) { - Pages.SelectPanel('user'); - requestUser(userId); - selectTabButton('#button-user-activities'); - showPanelContent('#user-panel', '#user-panel-activities'); - } - window.Usergrid.console.pageOpenUserActivities = pageOpenUserActivities; - - function pageSelectUserPermissions(userId) { - Pages.SelectPanel('user'); - requestUser(userId); - selectTabButton('#button-user-permissions'); - showPanelContent('#user-panel', '#user-panel-permissions'); - } - window.Usergrid.console.pageSelectUserPermissions = pageSelectUserPermissions; - - function pageSelectUserGroups(userId) { - Pages.SelectPanel('user'); - requestUser(userId); - selectTabButton('#button-user-memberships'); - showPanelContent('#user-panel', '#user-panel-memberships'); - } - - function pageSelectUserGraph(userId) { - Pages.SelectPanel('user'); - requestUser(userId); - selectTabButton('#button-user-graph'); - showPanelContent('#user-panel', '#user-panel-graph'); - } - - window.Usergrid.console.pageSelectUserGroups = pageSelectUserGroups; - - function saveUserProfile(uuid){ - var payload = Usergrid.console.ui.jsonSchemaToPayload(Usergrid.console.ui.collections.vcard_schema); - runAppQuery(new Usergrid.Query("PUT", "users/"+uuid, payload, null, - completeSave, - function() { alertModal("Error", "Unable to update User"); } - )); - } - window.Usergrid.console.saveUserProfile = saveUserProfile; - - function completeSave(){ - closeMessage = function() { - $('.messages').hide(); - }; - var closebutton = '×' - $('.messages').text("Information Saved.").prepend(closebutton).show(); - } - - function redrawUserProfile(data, curl){ - redrawFormPanel('user-panel-profile', 'apigee.ui.panels.user.profile.html', data); - showCurlCommand('user-panel-profile', curl); - }; - - function redrawUserMemberships(data, curl){ - redrawPanel('user-panel-memberships', 'apigee.ui.panels.user.memberships.html', data); - showCurlCommand('user-panel-memberships', curl); - updateGroupsAutocomplete(); - }; - - function redrawUserActivities(data, curl){ - redrawPanel('user-panel-activities', 'apigee.ui.panels.user.activities.html', data); - showCurlCommand('user-panel-activities', curl); - }; - - function redrawUserGraph(data, curlFollowing, curlFollowers){ - redrawPanel('user-panel-graph', 'apigee.ui.panels.user.graph.html', data); - showCurlCommand('user-panel-following', curlFollowing); - showCurlCommand('user-panel-followers', curlFollowers); - updateFollowUserAutocomplete(); - }; - - function redrawUserPermissions(data, curlRoles, curlPermissions){ - redrawPanel('user-panel-permissions', 'apigee.ui.panels.user.permissions.html', data); - showCurlCommand('user-panel-roles', curlRoles); - showCurlCommand('user-panel-permissions', curlPermissions); - updateRolesAutocomplete(); - updateQueryAutocompleteCollectionsUsers(); - }; - - function redrawPanel(panelDiv, panelTemplate, data){ - $("#"+panelDiv).html(""); - $.tmpl(panelTemplate, data).appendTo($("#"+panelDiv)); - }; - - function redrawGroupForm(panelDiv, panelTemplate, data){ - $("#"+panelDiv).html(""); - var details = $.tmpl(panelTemplate, data); - var formDiv = details.find('.query-result-form'); - $(formDiv).buildForm(Usergrid.console.ui.jsonSchemaToDForm(Usergrid.console.ui.collections.group_schema, data.entity)); - details.appendTo($("#"+panelDiv)); - details.find('.button').button(); - } - - function redrawFormPanel(panelDiv, panelTemplate, data){ - $("#"+panelDiv).html(""); - var details = $.tmpl(panelTemplate, data); - var formDiv = details.find('.query-result-form'); - $(formDiv).buildForm(Usergrid.console.ui.jsonSchemaToDForm(Usergrid.console.ui.collections.vcard_schema, data.entity)); - details.appendTo($("#"+panelDiv)); - }; - - function saveUserData(){ - Usergrid.console.ui.jsonSchemaToPayload(schema, obj); - } - - var user_data = null; - - function handleUserResponse(response) { - if (response.entities && (response.entities.length > 0)) { - var entity = response.entities[0]; - var path = response.path || ""; - path = "" + path.match(/[^?]*/); - var username = entity.username; - var name = entity.uuid + " : " + entity.type; - - if (entity.username) { - name = entity.username; - } - - if (entity.name) { - name = name + " : " + entity.name; - } - - var collections = $.extend({ }, (entity.metadata || { }).collections, (entity.metadata || { }).connections); - if ($.isEmptyObject(collections)){ - collections = null; - } - - var entity_contents = $.extend( false, { }, entity); - delete entity_contents['metadata']; - - var metadata = entity.metadata; - if ($.isEmptyObject(metadata)){ - metadata = null; - } - - var entity_path = (entity.metadata || {}).path; - if ($.isEmptyObject(entity_path)) { - entity_path = path + "/" + entity.uuid; - } - - var picture = window.location.protocol+ "//" + window.location.host + window.location.pathname + "images/user_profile.png"; - if (entity.picture) { - entity.picture = entity.picture.replace(/^http:\/\/www.gravatar/i, 'https://secure.gravatar'); - //note: changing this to use the image on apigee.com - since the gravatar default won't work on any non-public domains such as localhost - //this_data.picture = this_data.picture + encodeURI("?d="+window.location.protocol+"//" + window.location.host + window.location.pathname + "images/user_profile.png"); - picture = entity.picture + encodeURI("?d=https://apigee.com/usergrid/img/user_profile.png"); - } - - var data = { - entity: entity_contents, - picture: picture, - name: name, - username: username, - path: entity_path, - collections: collections, - metadata: metadata, - uri: (entity.metadata || { }).uri, - followingCurl: "", - followersCurl: "", - rolesCurl: "", - permissionsCurl: "" - } - - redrawUserProfile(data, this.getCurl()); - - //TODO: This block and the subsequent blocks could all be methods of their own - runAppQuery(new Usergrid.Query("GET", 'users/' + entity.username + '/groups', null, null, - function(response) { - if (data && response.entities && (response.entities.length > 0)) { - data.memberships = response.entities; - } - redrawUserMemberships(data, this.getCurl()); - }, - function() { alertModal("Error", "Unable to retrieve user's groups."); } - )); - - runAppQuery(new Usergrid.Query("GET", 'users/' + entity.username + '/activities', null, null, - function(response) { - if (data && response.entities && (response.entities.length > 0)) { - data.activities = response.entities; - data.curl = this.getCurl(); - $('span[id^=activities-date-field]').each( function() { - var created = dateToString(parseInt($(this).html())) - $(this).html(created); - }); - } - redrawUserActivities(data, this.getCurl()); - }, - function() { alertModal("Error", "Unable to retrieve user's activities.");} - )); - - runAppQuery(new Usergrid.Query("GET", 'users/' + entity.username + '/roles', null, null, - function(response) { - response = escapeMe(response); - if (data && response.entities && (response.entities.length > 0)) { - data.roles = response.entities; - } else { - data.roles = null; - } - data.rolesCurl = this.getCurl(); - //Run Permissions query after roles query has been handled - runAppQuery(new Usergrid.Query("GET", 'users/' + entity.username + '/permissions', null, null, - function(response) { - var permissions = {}; - if (data && response.data && (response.data.length > 0)) { - - if (response.data) { - var perms = response.data; - var count = 0; - - for (var i in perms) { - count++; - var perm = perms[i]; - var parts = perm.split(':'); - var ops_part = ""; - var path_part = parts[0]; - - if (parts.length > 1) { - ops_part = parts[0]; - path_part = parts[1]; - } - - ops_part.replace("*", "get,post,put,delete") - var ops = ops_part.split(','); - permissions[perm] = {ops : {}, path : path_part, perm : perm}; - - for (var j in ops) { - permissions[perm].ops[ops[j]] = true; - } - } - - if (count == 0) { - permissions = null; - } - data.permissions = permissions; - } - } - data.permissionsCurl = this.getCurl(); - redrawUserPermissions(data, data.rolesCurl, data.permissionsCurl); - }, - function() { alertModal("Error", "Unable to retrieve user's permissions.");} - )); - }, - function() { alertModal("Error", "Unable to retrieve user's roles.");} - )); - - runAppQuery(new Usergrid.Query("GET", 'users/' + entity.username + '/following', null, null, - function(response) { - data.followingCurl = this.getCurl(); - if (data && response.entities && (response.entities.length > 0)) { - data.following = response.entities; - } - //Requests /Followers after the /following response has been handled. - runAppQuery(new Usergrid.Query("GET", 'users/' + entity.username + '/followers', null, null, - function(response) { - - if (data && response.entities && (response.entities.length > 0)) { - data.followers = response.entities; - } - data.followersCurl = this.getCurl(); - redrawUserGraph(data, data.followingCurl, data.followersCurl); - }, - function() { alertModal("Error", "Unable to retrieve user's followers."); - } - )); - }, - function() { alertModal("Error", "Unable to retrieve user's following.");} - )); - } - - }; - - function requestUser(userId) { - $('#user-profile-area').html('
    Loading...
    '); - runAppQuery(new Usergrid.Query("GET", 'users/'+userId, null, null, handleUserResponse, - function() { alertModal("Error", "Unable to retrieve user's profile."); } - )); - } - - /******************************************************************* - * - * Groups - * - ******************************************************************/ - var groupLetter = "*"; - var groupSortBy = "path"; - function pageSelectGroups() { - //Hide old messages - hideModal('#groups-messages'); - //make a new query object - queryObj = new Usergrid.Query(null); - //bind events for previous and next buttons - bindPagingEvents('groups', getPreviousGroups, getNextGroups); - //reset paging so we start at the first page - queryObj.resetPaging(); - //the method to get the compile and call the query - getGroups(); - //ui stuff - selectFirstTabButton('#groups-panel-tab-bar'); - showPanelList('groups'); - $('#search-user-groupname').val(''); - $('#users-link-li').addClass('active'); - } - window.Usergrid.console.pageSelectGroups = pageSelectGroups; - - function getGroups(search, searchType) { - //clear out the table before we start - var output = $('#groups-table'); - output.empty(); - hideCurlCommand('groups'); - var query = {"ql" : "order by " + groupSortBy}; - if (typeof search == 'string') { - if (search.length > 0) { - if (searchType == 'title') { - query = {"ql" : searchType + " contains '" + search + "*'"}; - } else { - query = {"ql" : searchType + "='" + search + "*'"}; - } - } - } else if (groupLetter != "*") { - query = {"ql" : searchType + "='" + groupLetter + "*'"}; - } - - queryObj = new Usergrid.Query("GET", "groups", null, query, getGroupsCallback, function() { alertModal("Error", "Unable to retrieve groups."); }); - runAppQuery(queryObj); - - return false; - } - - function getPreviousGroups() { - queryObj.getPrevious(); - getGroups(); - } - - function getNextGroups() { - queryObj.getNext(); - getGroups(); - } - - function getGroupsCallback(response) { - response = escapeMe(response); - hidePagination('groups'); - - var output = $('#groups-table'); - if (response.entities.length < 1) { - output.replaceWith('
    No groups found.
    '); - } else { - output.replaceWith('
    PathTitle 
    '); - for (i = 0; i < response.entities.length; i++) { - var this_data = response.entities[i]; - $.tmpl('apigee.ui.groups.table_rows.html', this_data).appendTo('#groups-table'); - } - } - - showPagination('groups'); - showCurlCommand('groups', queryObj.getCurl(), queryObj.getToken()); - } - - function showGroupsForSearch(search){ - selectFirstTabButton('#groups-panel-tab-bar'); - $('#groups-panel-search').hide(); - selectTabButton('#button-groups-list'); - $('#groups-panel-list').show(); - groupLetter = search; - getGroups(); - } - Usergrid.console.showUsersForSearch = showUsersForSearch; - - function searchGroups(){ - var search = $('#search-user-groupname').val(); - var searchType = ($('#search-group-type').val())?$('#search-group-type').val():groupSortBy; - - if (searchType == 'title') { - searchType = 'title'; - } else if (searchType == 'path') { - searchType = 'path'; - } - - getGroups(search, searchType); - } - Usergrid.console.searchGroups = searchGroups; - - $('#delete-groups-link').click(deleteGroups); - - function deleteGroups(e) { - e.preventDefault(); - - var items = $('#groups-table input[class^=listItem]:checked'); - if (!items.length) { - alertModal("Error", "Please, first select the groups you want to delete.") - return; - } - - confirmDelete(function(){ - items.each(function() { - var groupId = $(this).attr('value'); - runAppQuery(new Usergrid.Query("DELETE", "groups/" + groupId, null, null, - getGroups, - function() { alertModal("Error", "Unable to delete group"); } - )); - }); - }); - } - - /******************************************************************* - * - * Group - * - ******************************************************************/ - - function pageOpenGroupProfile(groupPath) { - Pages.SelectPanel('group'); - requestGroup(groupPath); - selectTabButton('#button-group-details'); - showPanelContent('#group-panel', '#group-panel-details'); - } - window.Usergrid.console.pageOpenGroupProfile = pageOpenGroupProfile; - - function pageSelectGroupMemberships(groupId) { - Pages.SelectPanel('group'); - requestGroup(groupId); - selectTabButton('#button-group-memberships'); - showPanelContent('#group-panel', '#group-panel-memberships'); - } - window.Usergrid.console.pageSelectGroupMemberships = pageSelectGroupMemberships; - - function redrawGroupDetails(data,curl){ - redrawGroupForm('group-panel-details', 'apigee.ui.panels.group.details.html', data); - showCurlCommand('group-panel-details', curl); - } - - function redrawGroupMemberships(data, curl){ - redrawPanel('group-panel-memberships', 'apigee.ui.panels.group.memberships.html', data); - showCurlCommand('group-panel-memberships', curl); - updateUsersAutocomplete(); - } - - function redrawGroupActivities(data, curl){ - redrawPanel('group-panel-activities', 'apigee.ui.panels.group.activities.html', data); - showCurlCommand('group-panel-activities', curl); - } - - function redrawGroupPermissions(data, curlRoles, curlPermissions){ - if (data.roles && data.roles.length == 0) { - delete data.roles - } - redrawPanel('group-panel-permissions', 'apigee.ui.panels.group.permissions.html', data); - showCurlCommand('group-panel-roles', curlRoles); - showCurlCommand('group-panel-permissions', curlPermissions); - updateRolesForGroupsAutocomplete(); - } - - function saveGroupProfile(uuid){ - var payload = Usergrid.console.ui.jsonSchemaToPayload(Usergrid.console.ui.collections.group_schema); - runAppQuery(new Usergrid.Query("PUT", "groups/"+uuid, payload, null, completeSave, - function() { - closeErrorMessage = function() { - $('#group-messages').hide(); - }; - var closebutton = '×' - $('#group-messages').text("Unable to update Group").prepend(closebutton).addClass('alert-error').show(); - } - )); - } - - window.Usergrid.console.saveGroupProfile = saveGroupProfile; - - var group_data = null; - - function handleGroupResponse(response) { - response = escapeMe(response); - if (response.entities && (response.entities.length > 0)) { - var entity = response.entities[0]; - var path = response.path || ""; - path = "" + path.match(/[^?]*/); - var uuid = entity.uuid; - var name = entity.uuid + " : " + entity.type; - - if (entity.path) { - name = entity.path; - } - - if (entity.name) { - name = name + " : " + entity.name; - } - - var collections = $.extend({ }, (entity.metadata || { }).collections, (entity.metadata || { }).connections); - if ($.isEmptyObject(collections)){ - collections = null; - } - - var entity_contents = $.extend( false, { }, entity); - delete entity_contents['metadata']; - - var metadata = entity.metadata; - if ($.isEmptyObject(metadata)){ - metadata = null; - } - - var entity_path = (entity.metadata || {}).path; - if ($.isEmptyObject(entity_path)) { - entity_path = path + "/" + entity.uuid; - } - - var data = { - entity : entity_contents, - picture : entity.picture, - name : name, - uuid : uuid, - path : entity_path, - collections : collections, - metadata : metadata, - uri : (entity.metadata || { }).uri - } - - redrawGroupDetails(data, this.getCurl()); - - runAppQuery(new Usergrid.Query("GET",'groups/' + entity.path + '/users', null, null, - function(response) { - if (data && response.entities && (response.entities.length > 0)) { - data.memberships = response.entities; - - } - redrawGroupMemberships(data, this.getCurl()); - }, - function() { alertModal("Error", "Unable to retrieve group's users."); } - )); - - runAppQuery(new Usergrid.Query("GET",'groups/' + entity.path + '/activities', null, null, - function(response) { - if (data && response.entities && (response.entities.length > 0)) { - data.activities = response.entities; - } - redrawGroupActivities(data, this.getCurl()); - }, - function() { alertModal("Error", "Unable to retrieve group's activities."); } - )); - - runAppQuery(new Usergrid.Query("GET",'groups/' + entity.path + '/roles', null, null, - function(response) { - if (data && response.entities) { - data.roles = response.entities; - } - data.groupRolesCurl = this.getCurl(); - //WHEN /Roles is properly handled, get permissions - runAppQuery(new Usergrid.Query("GET", 'groups/' + entity.path + '/permissions', null, null, - function(response) { - var permissions = {}; - if (data && response.data && (response.data.length > 0)) { - - if (response.data) { - var perms = response.data; - var count = 0; - - for (var i in perms) { - count++; - var perm = perms[i]; - var parts = perm.split(':'); - var ops_part = ""; - var path_part = parts[0]; - - if (parts.length > 1) { - ops_part = parts[0]; - path_part = parts[1]; - } - - ops_part.replace("*", "get,post,put,delete") - var ops = ops_part.split(','); - permissions[perm] = {ops : {}, path : path_part, perm : perm}; - - for (var j in ops) { - permissions[perm].ops[ops[j]] = true; - } - } - if (count == 0) { - permissions = null; - } - data.permissions = permissions; - } - } - data.groupPermissionsCurl = this.getCurl(); - redrawGroupPermissions(data,data.groupRolesCurl, data.groupPermissionsCurl); - }, - function() { alertModal("Error", "Unable to retrieve group's permissions."); } - )); - }, - function() { alertModal("Error", "Unable to retrieve group's roles."); } - )); - } - } - - - function requestGroup(groupId) { - $('#group-details-area').html('
    Loading...
    '); - runAppQuery(new Usergrid.Query("GET",'groups/'+ groupId, null, null,handleGroupResponse, - function() { alertModal("Error", "Unable to retrieve group details."); } - )); - } - - /******************************************************************* - * - * Roles - * - ******************************************************************/ - var roleLetter = '*'; - var roleSortBy = 'title'; - - function pageSelectRoles(uuid) { - //Hide old information modal - hideModal('#roles-messages'); - //make a new query object - queryObj = new Usergrid.Query(null); - //bind events for previous and next buttons - bindPagingEvents('roles'); - //reset paging so we start at the first page - queryObj.resetPaging(); - //the method to get the compile and call the query - getRoles(); - //ui stuff - selectFirstTabButton('#roles-panel-tab-bar'); - showPanelList('roles'); - $('#role-panel-users').hide(); - $('#role-panel-groups').hide(); - $('#users-link-li').addClass('active'); - } - window.Usergrid.console.pageSelectRoles = pageSelectRoles; - - function getRoles(search, searchType) { - var output = $('#roles-table'); - output.empty(); - hideCurlCommand('roles'); - //put the sort by back in once the API is fixed - //var query = {"ql" : "order by " + roleSortBy}; - var query = {}; - if (roleLetter != "*") query = {"ql" : roleSortBy + "='" + groupLetter + "*'"}; - - queryObj = new Usergrid.Query("GET", "roles", null, query, getRolesCallback, function() { alertModal("Error", "Unable to retrieve roles."); }); - runAppQuery(queryObj); - return false; - } - - function getPreviousRoles() { - queryObj.getPrevious(); - getRoles(); - } - - function getNextRoles() { - queryObj.getNext(); - getRoles(); - } - - function getRolesCallback(response) { - - hidePagination('roles'); - var output = $('#roles-table') - output.empty(); - if (response.entities < 1) { - output.html('
    No roles found.
    '); - } else { - output.replaceWith('
    TitleRole Name 
    '); - - $.each (response.entities, function(index, value) { - var data = [ - {name: escapeString(value.name), - title: escapeString(value.title)}] - $.tmpl('apigee.ui.roles.table_rows.html', data).appendTo('#roles-table'); - }); - } - showPagination('roles'); - showCurlCommand('roles', this.getCurl(), this.getToken()); - } - - $('#delete-roles-link').click(deleteRoles); - function deleteRoles(e) { - e.preventDefault(); - - var items = $('#roles-table input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the roles you want to delete.") - return; - } - confirmDelete(function(){ - items.each(function() { - var roleName = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", "roles/" + roleName, null, null, getRoles, - function() { alertModal("Error", "Unable to delete role"); } - )); - }); - }); - } - - /******************************************************************* - * - * Role - * - ******************************************************************/ - - var current_roleName = ""; - var current_roleTitle = ""; - - function updateCurrentRole(roleName, roleTitle) { - current_roleName = escapeString(roleName); - current_roleTitle = escapeString(roleTitle); - } - - function pageOpenRole(roleName, roleTitle) { - roleName = escapeString(roleName); - roleTitle = escapeString(roleTitle); - updateCurrentRole(roleName, roleTitle); - requestRole(roleName, roleTitle); - showPanel('#role-panel'); - Pages.ActivatePanel('roles'); - $('#role-panel-list').hide(); - selectTabButton('#button-role-settings'); - $('#role-panel-settings').show(); - } - window.Usergrid.console.pageOpenRole = pageOpenRole; - - function pageSelectRoleUsers (roleName, roleTitle){ - roleName = escapeString(roleName); - roleTitle = escapeString(roleTitle); - updateCurrentRole(roleName, roleTitle); - requestRole(roleName, roleTitle); - showPanel('#role-panel'); - Pages.ActivatePanel('roles'); - $('#role-panel-list').hide(); - selectTabButton('#button-role-users'); - $('#role-panel-users').show(); - } - window.Usergrid.console.pageSelectRoleUsers = pageSelectRoleUsers; - - function pageSelectRoleGroups(roleName, roleTitle) { - roleName = escapeString(roleName); - roleTitle = escapeString(roleTitle); - updateCurrentRole(roleName, roleTitle); - requestRole(roleName, roleTitle); - showPanel('#role-panel'); - Pages.ActivatePanel('roles'); - $('#role-panel-list').hide(); - selectTabButton('#button-role-groups'); - $('#role-panel-groups').show(); - } - window.Usergrid.console.pageSelectRoleGroups = pageSelectRoleGroups; - - var permissions = {}; - function displayPermissions(roleName, response, curl) { - roleName = escapeString(roleName); - roleName = escapeString(roleName); - escapeMe(response); - var section = $('#role-permissions'); - section.empty(); - - var t = ""; - var m = ""; - permissions = {}; - var localPermission = {}; - if (response.data) { - var perms = response.data; - var count = 0; - for (var i in perms) { - count++; - var perm = perms[i]; - var parts = perm.split(':'); - var ops_part = ""; - var path_part = parts[0]; - if (parts.length > 1) { - ops_part = parts[0]; - path_part = parts[1]; - } - ops_part.replace("*", "get,post,put,delete") - var ops = ops_part.split(','); - permissions[perm] = {ops : {}, path : path_part, perm : perm}; - for (var j in ops) { - permissions[perm].ops[ops[j]] = true; - } - } - if (count == 0) { - permissions = null; - } - $.tmpl('apigee.ui.panels.role.permissions.html', {"role" : roleName, "permissions" : permissions}, {}).appendTo('#role-permissions'); - updatePermissionAutocompleteCollections(); - } else { - section.html('
    No permission information retrieved.
    '); - } - showCurlCommand('role-permissions', curl); - displayRoleInactivity(roleName); - } - - function displayRoleInactivity(roleName) { - //requestRole & displayInactivity - runAppQuery(new Usergrid.Query("GET", "roles/" + roleName, null, null, - function(response) { - if ( response && response.entities && response.entities[0].inactivity ){ - var inactivity = response.entities[0].inactivity.toString(); - } else { - inactivity = 0; - } - $('#role-inactivity-input').val(inactivity); - }, - function() { $('#role-inactivity-form').html('
    Unable to load role\'s inactivity value.
    ') } - )); - } - - var rolesUsersResults = '' - - function displayRolesUsers(roleName, roleTitle, response, curl) { - $('#role-users').html(''); - data = {}; - data.roleTitle = roleTitle; - data.roleName = roleName; - if (response.entities) { - data.users = response.entities; - } - $.tmpl('apigee.ui.panels.role.users.html', {"data" : data}, {}).appendTo('#role-users'); - updateUsersForRolesAutocomplete(); - showCurlCommand('role-users', curl); - } - - var rolesGroupsResults = '' - - function displayRoleGroups(response, curl) { - response.roleName = current_roleName; - response.roleTitle = current_roleTitle; - $('#role-panel-groups').html(''); - $.tmpl('apigee.ui.role.groups.table_rows.html', response).appendTo('#role-panel-groups'); - updateGroupsForRolesAutocomplete(); - showCurlCommand('role-groups', curl); - } - - function requestRole(roleName, roleTitle) { - clearRoleSection(); - setRoleSectionTitles(roleTitle); - getRolePermissions(roleName); - getRoleUsers(roleName, roleTitle); - getRoleGroups(roleName); - } - - function clearRoleSection(){ - $('#role-section-title').empty(); - $('#role-permissions').empty(); - $('#role-users').empty(); - } - - function setRoleSectionTitles(roleTitle) { - $('#role-section-title').html(roleTitle + " Role"); - $('#role-permissions').html('
    Loading ' + roleTitle + ' permissions...
    '); - } - - function getRolePermissions(roleName){ - runAppQuery(new Usergrid.Query("GET", "roles/" + roleName + "/permissions", null, null, - function(response) { displayPermissions(roleName, response, this.getCurl()); }, - function() { $('#application-roles').html('
    Unable to retrieve ' + roleName + ' role permissions.
    '); } - )); - } - - function getRoleGroups(roleName) { - runAppQuery(new Usergrid.Query("GET", "roles/" + roleName + "/groups", null, null, - function(response) { displayRoleGroups(response, this.getCurl()); }, - function() { $('#application-roles').html('
    Unable to retrieve ' + roleName + ' role permissions.
    '); } - )); - } - - function getRoleUsers(roleName, roleTitle){ - runAppQuery(new Usergrid.Query("GET", "roles/" + roleName + "/users", null, null, - function(response) { displayRolesUsers(roleName, roleTitle, response, this.getCurl()); }, - function() { $('#application-roles').html('
    Unable to retrieve ' + roleName + ' role permissions.
    '); } - )); - } - - function deleteRolePermission(roleName, permission) { - data = {"permission":permission}; - confirmDelete(function(){ - runAppQuery(new Usergrid.Query("DELETE", "roles/" + roleName + "/permissions", null, data, - function(){getRolePermissions(roleName)}, - function(){getRolePermissions(roleName)} - )); - }); - } - window.Usergrid.console.deleteRolePermission = deleteRolePermission; - - function addRolePermission(roleName) { - var path = $('#role-permission-path-entry-input').val(); - var ops = ""; - var s = ""; - if ($('#role-permission-op-get-checkbox').prop('checked')) { - ops = "get"; - s = ","; - } - if ($('#role-permission-op-post-checkbox').prop('checked')) { - ops = ops + s + "post"; - s = ","; - } - if ($('#role-permission-op-put-checkbox').prop('checked')) { - ops = ops + s + "put"; - s = ","; - } - if ($('#role-permission-op-delete-checkbox').prop('checked')) { - ops = ops + s + "delete"; - s = ","; - } - var permission = ops + ":" + path; - var data = {"permission": ops + ":" + path}; - if (ops) { - runAppQuery(new Usergrid.Query("POST", "/roles/" + roleName + "/permissions", data, null, - function(){ getRolePermissions(roleName)}, - function(){ getRolePermissions(roleName)})); - } else { - alertModal("Error", "Please select a verb"); - } - } - window.Usergrid.console.addRolePermission = addRolePermission; - - function editRoleInactivity() { - var inactivity = $('#role-inactivity-input').val(); - var roleName = current_roleName; - - if (intRegex.test(inactivity)) { - data = { inactivity: inactivity }; - runAppQuery(new Usergrid.Query("PUT", "/role/" + roleName, data, null, - function(){ - closeErrorMessage = function () { - $('#role-permissions-messages').hide(); - } - var closebutton = '×' - $('#role-permissions-messages').text('Inactivity time has been set').prepend(closebutton).show(); - displayRoleInactivity(current_roleName)}, - function(){ displayRoleInactivity(current_roleName)} - )); - } else { - $('#inactivity-integer-message').show() - } - } - window.Usergrid.console.editRoleInactivity = editRoleInactivity; - - function deleteUserPermission(userName, permission) { - var data = {"permission": permission}; - confirmDelete(function(){ - runAppQuery(new Usergrid.Query("DELETE", "/users/" + userName + "/permissions", null, data, - function(){ pageSelectUserPermissions (userName); }, - function(){ alertModal("Error", "Unable to delete permission"); } - )); - }); - } - window.Usergrid.console.deleteUserPermission = deleteUserPermission; - - function addUserPermission(userName) { - var path = $('#user-permission-path-entry-input').val(); - var ops = ""; - var s = ""; - if ($('#user-permission-op-get-checkbox').prop("checked")) { - ops = "get"; - s = ","; - } - if ($('#user-permission-op-post-checkbox').prop("checked")) { - ops = ops + s + "post"; - s = ","; - } - if ($('#user-permission-op-put-checkbox').prop("checked")) { - ops = ops + s + "put"; - s = ","; - } - if ($('#user-permission-op-delete-checkbox').prop("checked")) { - ops = ops + s + "delete"; - s = ","; - } - var data = {"permission": ops + ":" + path}; - if (ops) { - runAppQuery(new Usergrid.Query("POST", "/users/" + userName + "/permissions/", data, null, - function() { pageSelectUserPermissions (userName); }, - function() { alertModal("Error", "Unable to add permission"); } - )); - } else { - alertModal("Error", "Please select a verb"); - } - } - window.Usergrid.console.addUserPermission = addUserPermission; - - function addGroupPermission(groupName) { - var path = $('#group-permission-path-entry-input').val(); - var ops = ""; - var s = ""; - if ($('#group-permission-op-get-checkbox').prop("checked")) { - ops = "get"; - s = ","; - } - if ($('#group-permission-op-post-checkbox').prop("checked")) { - ops = ops + s + "post"; - s = ","; - } - if ($('#group-permission-op-put-checkbox').prop("checked")) { - ops = ops + s + "put"; - s = ","; - } - if ($('#group-permission-op-delete-checkbox').prop("checked")) { - ops = ops + s + "delete"; - s = ","; - } - var data = {"permission": ops + ":" + path}; - if (ops) { - runAppQuery(new Usergrid.Query("POST", "/groups/" + groupName + "/permissions/", data, null, - function() { pageSelectGroupPermissions(groupName); }, - function() { alertModal("Error", "Unable to add permission"); } - )); - } else { - alertModal("Error", "Please select a verb"); - } - } - window.Usergrid.console.addGroupPermission = addGroupPermission; - - function deleteGroupPermission(groupName, permissions){ - var data = {"permission": permissions}; - runAppQuery(new Usergrid.Query("DELETE", "/groups/" + groupName + "/permissions/", null, data, - function() { pageSelectGroupPermissions(groupName); }, - function() { alertModal("Error", "Unable to remove Permission"); } - )); - } - - window.Usergrid.console.deleteGroupPermission = deleteGroupPermission; - - function pageSelectGroupPermissions(groupId) { - Pages.SelectPanel('group'); - requestGroup(groupId); - selectTabButton('#button-group-permissions'); - showPanelContent('#group-panel', '#group-panel-permissions'); - } - window.Usergrid.console.pageSelectGroupPermissions = pageSelectGroupPermissions; - - function submitAddGroupToRole(roleName, roleTitle) { - var form = $(this); - formClearErrors(form); - - var groupId = $('#search-roles-group-name-input'); - var bValid = checkLength2(groupId, 1, 80) - && checkRegexp2(groupId, nameRegex, nameAllowedCharsMessage); - - if (bValid) { - runAppQuery(new Usergrid.Query("POST", "/roles/" + roleName + "/groups/" + groupId.val(), null, null, - function() { pageSelectRoleGroups(roleName, roleTitle); }, - function() { alertModal("Error", "Unable to add group to role"); } - )); - $('#dialog-form-add-group-to-role').modal('hide'); - } - } - window.Usergrid.console.submitAddGroupToRole = submitAddGroupToRole; - - function removeGroupFromRole(roleName,roleTitle) { - var items = $('#role-panel-groups input[class=listItem]:checked'); - if (!items.length) { - alertModal("Error", "Please, first select the groups you want to delete for this role."); - return; - } - confirmDelete(function(){ - $.each(items, function() { - var groupId = $(this).val(); - runAppQuery(new Usergrid.Query("DELETE", "/roles/" + roleName + "/groups/" + groupId, null, null, - function() { - pageSelectRoleGroups(roleName, roleTitle); - }, - function() { - alertModal("Error","Unable to remove group from role: "); - } - )); - }); - }); - } - window.Usergrid.console.removeGroupFromRole = removeGroupFromRole; - - /******************************************************************* - * - * Activities - * - ******************************************************************/ - var activitiesLetter = '*'; - var activitiesSortBy = 'created'; - - function pageSelectActivities(uuid) { - //make a new query object - queryObj = new Usergrid.Query(null); - //bind events for previous and next buttons - bindPagingEvents('activities', getPreviousActivities, getNextActivities); - //reset paging so we start at the first page - queryObj.resetPaging(); - //the method to get the compile and call the query - getActivities(); - //ui stuff - showPanelList('activities'); - - } - window.Usergrid.console.pageSelectActivities = pageSelectActivities; - - function getActivities(search, searchType) { - //clear out the table before we start - var output = $('#activities-table'); - output.empty(); - - queryObj = new Usergrid.Query("GET", "activities", null, null, getActivitiesCallback, function() { alertModal("Error", "Unable to retrieve activities.")}); - runAppQuery(queryObj); - return false; - } - - function getPreviousActivities() { - queryObj.getPrevious(); - getActivities(); - } - - function getNextActivities() { - queryObj.getNext(); - getActivities(); - } - - function getActivitiesCallback(response) { - response = escapeMe(response); - hidePagination('activities'); - var output = $('#activities-table'); - if (response.entities.length < 1) { - output.replaceWith('
    No activities found.
    '); - } else { - output.replaceWith('
    '); - for (i = 0; i < response.entities.length; i++) { - var this_data = response.entities[i]; - if (!this_data.actor.picture) { - this_data.actor.picture = window.location.protocol+ "//" + window.location.host + window.location.pathname + "images/user_profile.png" - } else { - this_data.actor.picture = this_data.actor.picture.replace(/^http:\/\/www.gravatar/i, 'https://secure.gravatar'); - //note: changing this to use the image on apigee.com - since the gravatar default won't work on any non-public domains such as localhost - //this_data.picture = this_data.picture + encodeURI("?d="+window.location.protocol+"//" + window.location.host + window.location.pathname + "images/user_profile.png"); - if (~this_data.actor.picture.indexOf('http')) { - this_data.actor.picture = this_data.actor.picture + encodeURI("?d=https://apigee.com/usergrid/img/user_profile.png"); - } else { - this_data.actor.picture = 'https://apigee.com/usergrid/img/user_profile.png'; - } - } - - $.tmpl('apigee.ui.activities.table_rows.html', this_data).appendTo('#activities-table'); - } - } - showPagination('activities'); - } - - function searchActivities(){ - var search = $('#search-activities').val(); - var searchType = ($('#search-activities-type').val())?$('#search-activities-type').val():activitiesSortBy; - - if (searchType == 'actor') { - searchType = 'actor.displayName'; - } else if (searchType == 'content') { - searchType = 'content'; - } - - getActivities(search, searchType); - } - Usergrid.console.searchActivities = searchActivities; - - /******************************************************************* - * - * Analytics - * - ******************************************************************/ - - function pageSelectAnalytics(uuid) { - requestApplicationCounterNames(); - } - window.Usergrid.console.pageSelectAnalytics = pageSelectAnalytics; - - var application_counters_names = []; - - function requestApplicationCounterNames() { - $('#analytics-counter-names').html('
    Loading...
    '); - runAppQuery(new Usergrid.Query("GET","counters", null, null, - function(response) { - application_counters_names = response.data; - - /* - var html = Usergrid.console.ui.makeTableFromList(application_counters_names, 1, { - tableId : "analytics-counter-names-table", - getListItem : function(i, col, row) { - var counter_name = application_counters_names[i]; - var checked = !counter_name.startsWith("application."); - return '
    ' + counter_name + '
    '; - } - });*/ - - var html = ""; - for (var i=0;i' + counter_name + '
    '; - } - - $('#analytics-counter-names').html(html); - requestApplicationCounters(); - }, - function() { - $('#analytics-counter-names').html('
    Unable to load...
    '); - } - )); - } - - var application_counters = []; - var start_timestamp = 1; - var end_timestamp = 1; - var resolution = "all"; - var show_application_counters = true; - - function requestApplicationCounters() { - var counters_checked = $('.analytics-counter-checkbox:checked').serializeArray(); - var counter_names = new Array(); - for (var i in counters_checked) { - counter_names.push(counters_checked[i].value); - } - - $('#analytics-graph').html('
    Loading...
    '); - start_timestamp = $('#start-date').datepicker('getDate').at($('#start-time').timepicker('getTime')).getTime(); - end_timestamp = $('#end-date').datepicker('getDate').at($('#end-time').timepicker('getTime')).getTime(); - resolution = $('select#resolutionSelect').val(); - var params = {}; - params.start_time = start_timestamp; - params.end_time = end_timestamp; - params.resolution = resolution; - params.counter = counter_names; - params.pad = true; - - runAppQuery(new Usergrid.Query("GET","counters", null, params, - function(response) { - application_counters = response.counters; - if (!application_counters) { - $('#analytics-graph').html('
    No counter data.
    '); - return; - } - - var data = new google.visualization.DataTable(); - if (resolution == "all") { - data.addColumn('string', 'Time'); - } else if ((resolution == "day") || (resolution == "week") || (resolution == "month")) { - data.addColumn('date', 'Time'); - } else { - data.addColumn('datetime', 'Time'); - } - - var column_count = 0; - for (var i in application_counters) { - var count = application_counters[i]; - if (show_application_counters || !count.name.startsWith("application.")) { - data.addColumn('number', count.name); - column_count++; - } - } - - if (!column_count) { - $('#analytics-graph').html("No counter data"); - return; - } - - var html = ''; - if (application_counters.length > 0) { - data.addRows(application_counters[0].values.length); - for (var j in application_counters[0].values) { - var timestamp = application_counters[0].values[j].timestamp; - if ((timestamp <= 1) || (resolution == "all")) { - timestamp = "All"; - } else if ((resolution == "day") || (resolution == "week") || (resolution == "month")) { - timestamp = (new Date(timestamp)).toString("M/d"); - } else { - timestamp = (new Date(timestamp)).toString("M/d h:mmtt"); - } - html += ""; - if (resolution == "all") { - data.setValue(parseInt(j), 0, "All"); - } else { - data.setValue(parseInt(j), 0, new Date(application_counters[0].values[j].timestamp)); - } - } - } - html += ""; - - for (var i in application_counters) { - var count = application_counters[i]; - if (show_application_counters || !count.name.startsWith("application.")) { - html += ""; - for (var j in count.values) { - html += ""; - data.setValue(parseInt(j), parseInt(i) + 1, count.values[j].value); - } - html += ""; - } - } - - html += "
    " + timestamp + "
    " + count.name + "" + count.values[j].value + "
    "; - $('#analytics-graph').html(html); - - if (resolution == "all") { - new google.visualization.ColumnChart(document.getElementById('analytics-graph-area')) - .draw(data, {width: 950, height: 500, backgroundColor: backgroundGraphColor}); - } else { - new google.visualization.LineChart(document.getElementById('analytics-graph-area')) - .draw(data, {width: 950, height: 500, backgroundColor: backgroundGraphColor}); - } - }, - function() { - $('#analytics-graph').html('
    Unable to load...
    '); - })); - } - - /******************************************************************* - * - *Properties - *******************************************************************/ - function pageSelectProperties(){ - requestApplicationCredentials(); - } - - Usergrid.console.pageSelectProperties = pageSelectProperties; - - /******************************************************************* - * - * Settings - * - ******************************************************************/ - - - var application_keys = {}; - - function requestApplicationCredentials() { - $('#application-panel-key').html('
    Loading...
    '); - $('#application-panel-secret').html('
    Loading...
    '); - - runAppQuery(new Usergrid.Query("GET", "credentials", null, null, - function(response) { - $('#application-panel-key').html(response.credentials.client_id); - $('#application-panel-secret').html(response.credentials.client_secret); - application_keys[current_application_id] = {client_id : response.credentials.client_id, client_secret : response.credentials.client_secret}; - }, - function() { - $('#application-panel-key').html('
    Unable to load...
    '); - $('#application-panel-secret').html('
    Unable to load...
    '); - } - )); - } - - function newApplicationCredentials() { - $('#application-panel-key').html('
    Loading...
    '); - $('#application-panel-secret').html('
    Loading...
    '); - - runAppQuery(new Usergrid.Query("POST", "credentials", null, null, - function(response) { - $('#application-panel-key').html(response.credentials.client_id); - $('#application-panel-secret').html(response.credentials.client_secret); - application_keys[current_application_id] = {client_id : response.credentials.client_id, client_secret : response.credentials.client_secret}; - }, - function() { - $('#application-panel-key').html('
    Unable to load...
    '); - $('#application-panel-secret').html('
    Unable to load...
    '); - } - )); - } - window.Usergrid.console.newApplicationCredentials = newApplicationCredentials; - - /******************************************************************* - * - * Shell - * - ******************************************************************/ - - function pageSelectShell(uuid) { - requestApplicationCredentials(); - $('#shell-input').focus(); - } - window.Usergrid.console.pageSelectShell = pageSelectShell; - - var history_i = 0; - var history = new Array(); - - function scrollToInput() { - // Do it manually because JQuery seems to not get it right - var textArea = document.getElementById('shell-output'); - textArea.scrollTop = textArea.scrollHeight; - } - - function echoInputToShell(s) { - if (!s) s = " "; - var html = '
    > ' + s + '
    '; - scrollToInput(); - } - - function printLnToShell(s) { - if (!s) s = " "; - var html = '
    ' + s + '
    '; - $('#shell-output').append(html); - $('#shell-output').append(' '); - scrollToInput(); - } - - function displayShellResponse(response) { - printLnToShell(JSON.stringify(response, null, " ")); - $('#shell-output').append('
    '); - prettyPrint(); - scrollToInput(); - } - - function handleShellCommand(s) { - var orgName = Usergrid.ApiClient.getOrganizationName(); - - if (s) { - history.push(s); - history_i = history.length - 1; - } - var path = ''; - var params = ''; - //Matches any sting that begins with "/", ignoring whitespaces. - if (s.match(/^\s*\//)) { - path = encodePathString(s); - printLnToShell(path); - runAppQuery(new Usergrid.Query("GET",path, null, null, displayShellResponse,null)); - //matches get or GET ignoring white spaces - } else if (s.match(/^\s*get\s*\//i)) { - path = encodePathString(s.substring(4)); - printLnToShell(path); - runAppQuery(new Usergrid.Query("GET",path, null, null, displayShellResponse,null)); - } else if (s.match(/^\s*put\s*\//i)) { - params = encodePathString(s.substring(4), true); - printLnToShell(params.path); - runAppQuery(new Usergrid.Query("PUT",params.path, params.payload, null, displayShellResponse,null)); - } else if (s.match(/^\s*post\s*\//i)) { - params = encodePathString(s.substring(5), true); - printLnToShell(params.path); - runAppQuery(new Usergrid.Query("POST",params.path, params.payload, null, displayShellResponse,null)); - } else if (s.match(/^\s*delete\s*\//i)) { - path = encodePathString(s.substring(7)); - printLnToShell(path); - runAppQuery(new Usergrid.Query("DELETE",path, null, null, displayShellResponse,null)); - } else if (s.match(/^\s*clear|cls\s*/i)) { - $('#shell-output').html(" "); - } else if (s.match(/(^\s*help\s*|\?{1,2})/i)) { - printLnToShell("/<path> - API get request"); - printLnToShell("get /<path> - API get request"); - printLnToShell("put /<path> {<json>} - API put request"); - printLnToShell("post /<path> {<json>} - API post request"); - printLnToShell("delete /<path> - API delete request"); - printLnToShell("cls, clear - clear the screen"); - printLnToShell("help - show this help"); - } else if (s === "") { - printLnToShell("ok"); - } else { - printLnToShell('syntax error!
    '); - } - prettyPrint(); - } - - $('#shell-input').keydown(function(event) { - var shell_input = $('#shell-input'); - - if (!event.shiftKey && (event.keyCode == '13')) { - - event.preventDefault(); - var s = $('#shell-input').val().trim(); - echoInputToShell(s); - shell_input.val(""); - handleShellCommand(s); - - } else if (event.keyCode == '38') { - - event.preventDefault(); - history_i--; - - if (history_i < 0) { - history_i = Math.max(history.length - 1, 0); - } - - if (history.length > 0) { - shell_input.val(history[history_i]); - } else { - shell_input.val(""); - } - - } else if (event.keyCode == '40') { - - event.preventDefault(); - history_i++; - - if (history_i >= history.length) { - history_i = 0; - } - - if (history.length > 0) { - shell_input.val(history[history_i]); - } else { - shell_input.val(""); - } - } - }); - - $('#shell-input').keyup(function() { - var shell_input = $('#shell-input'); - shell_input.css('height', shell_input.attr('scrollHeight')); - }); - - - /******************************************************************* - * - * Autocomplete - * - ******************************************************************/ - function updateAutocomplete(path, successCallback, failureMessage){ - runAppQuery(new Usergrid.Query("GET", path, null, null, successCallback, - function(){ alertModal("Error", failureMessage)} - )); - return false - } - - function updateUsersTypeahead(response, inputId){ - users = {}; - if (response.entities) { - users = response.entities; - } - var pathInput = $('#'+inputId); - var list = []; - for (var i in users) { - list.push(users[i].username); - } - pathInput.typeahead({source:list}); - pathInput.data('typeahead').source = list; - } - - function updateRolesTypeahead(response, inputId){ - roles = {}; - if (response.entities) { - roles = response.entities; - } - var pathInput = $('#'+inputId); - var list = []; - $.each(roles, function(key, value){ - list.push(value.roleName); - }) - pathInput.typeahead({source:list}); - pathInput.data('typeahead').source = list; - } - - function updateGroupsTypeahead(response, inputId){ - groups = {}; - if (response.entities) { - groups = response.entities; - } - var pathInput = $('#'+inputId); - var list = []; - for (var i in groups) { - list.push(groups[i].path); - } - pathInput.typeahead({source:list}); - pathInput.data('typeahead').source = list; - } - - function updateCollectionTypeahead(inputId){ - var pathInput = $("#"+ inputId); - var list = []; - - for (var i in applicationData.Collections) { - list.push('/' + applicationData.Collections[i].name); - } - - pathInput.typeahead({source:list}); - pathInput.data('typeahead').source = list; - } - - function updateQueryTypeahead(response, inputId) { - var pathInput = $("#" + inputId), - list = [], - name, - path = response.path ; - list.push(path); - $.each(response.entities, function(entityKey, entityValue) { - name = getEntityName(entityValue); - list.push(path + '/' + name); - //Fill collection names - if (entityValue.metadata.collections) { - $.each(entityValue.metadata.collections, function(key){ - list.push(path + '/' + name + '/' + key); - }); - } - //Fill Sets - if (entityValue.metadata.sets) { - $.each(entityValue.metadata.sets, function(key, value) { - list.push(response.path + '/' + name + '/'+ key); - }) - } - }); - //TODO: Possible cleanup here, could not set the options via pathInput.typeahead.options, so overriding variables directly - pathInput.data('typeahead').source = list; - pathInput.data('typeahead').options.items = 10; - pathInput.data('typeahead').matcher = function (item) { - var checker = new RegExp('^' + this.query + '[a-z0-9.-]*\/?$', "i"); - return checker.test(item); - } - } - - function getEntityName(entity) { - var name; - switch(entity.type) { - case 'user': - name = entity.username; - break; - case 'group': - name = entity.path; - break; - case 'role': - name = entity.name; - break; - default: - name = entity.uuid; - } - return name; - } - - function updateUsersAutocomplete(){ - updateAutocomplete('users/', updateUsersAutocompleteCallback, "Unable to retrieve Users."); - } - - function updateUsersAutocompleteCallback(response) { - updateUsersTypeahead(response, 'search-user-name-input'); - } - window.Usergrid.console.updateUsersAutocompleteCallback = updateUsersAutocompleteCallback; - - function updateFollowUserAutocomplete(){ - updateAutocomplete('users/',updateFollowUserAutocompleteCallback,"Unable to retrieve Users."); - } - - function updateFollowUserAutocompleteCallback(response){ - updateUsersTypeahead(response, 'search-follow-username-input'); - } - - function updateUsersForRolesAutocomplete(){ - updateAutocomplete('users', updateUsersForRolesAutocompleteCallback,"Unable to retrieve Users."); - } - - function updateUsersForRolesAutocompleteCallback(response) { - updateUsersTypeahead(response, 'search-roles-user-name-input'); - } - window.Usergrid.console.updateUsersForRolesAutocompleteCallback = updateUsersForRolesAutocompleteCallback; - - function updateUsersForNotificationAutocomplete(){ - updateAutocomplete('users', updateUsersForNotificationAutocompleteCallback,"Unable to retrieve Users."); - } - function updateUsersForNotificationAutocompleteCallback(response) { - updateUsersTypeahead(response, 'search-notification-user-name-input'); - } - window.Usergrid.console.updateUsersForNotificationAutocomplete = updateUsersForNotificationAutocomplete; - - function updateGroupsForNotificationAutocomplete(){ - updateAutocomplete('groups', updateGroupsForNotificationAutocompleteCallback,"Unable to retrieve Groups."); - } - function updateGroupsForNotificationAutocompleteCallback(response) { - updateGroupsTypeahead(response, 'search-notification-group-name-input'); - } - window.Usergrid.console.updateGroupsForNotificationAutocomplete = updateGroupsForNotificationAutocomplete; - - function updateGroupsAutocomplete(){ - updateAutocomplete('groups', updateGroupsAutocompleteCallback, "Unable to retrieve Groups."); - } - - function updateGroupsAutocompleteCallback(response) { - updateGroupsTypeahead(response, 'search-group-name-input'); - } - window.Usergrid.console.updateGroupsAutocompleteCallback = updateGroupsAutocompleteCallback; - - function updateGroupsForRolesAutocomplete(){ - updateAutocomplete('groups', updateGroupsForRolesAutocompleteCallback, "Unable to retrieve Groups."); - } - - function updateGroupsForRolesAutocompleteCallback(response) { - updateGroupsTypeahead(response, 'search-roles-group-name-input'); - } - window.Usergrid.console.updateGroupsForRolesAutocompleteCallback = updateGroupsForRolesAutocompleteCallback; - - function updatePermissionAutocompleteCollections(){ - updateCollectionTypeahead('role-permission-path-entry-input'); - } - - function updateQueryAutocompleteCollectionsUsers(){ - updateCollectionTypeahead('user-permission-path-entry-input'); - } - - function updateQueryAutocompleteCollections(){ - updateCollectionTypeahead('query-path'); - } - - function updateRolesAutocomplete(){ - updateAutocomplete('roles', updateRolesAutocompleteCallback, "Unable to retrieve Roles."); - } - - function updateRolesAutocompleteCallback(response) { - updateRolesTypeahead(response, 'search-role-name-input'); - } - - window.Usergrid.console.updateRolesAutocompleteCallback = updateRolesAutocompleteCallback; - - function updateRolesForGroupsAutocomplete(){ - updateAutocomplete('roles', updateRolesForGroupsAutocompleteCallback, "Unable to retrieve Roles."); - } - - function updateRolesForGroupsAutocompleteCallback(response) { - updateRolesTypeahead(response, 'search-groups-role-name-input'); - } - window.Usergrid.console.updateRolesAutocompleteCallback = updateRolesAutocompleteCallback; - - - /******************************************************************* - * - * Notifications - * - ******************************************************************/ - - $('#notification-schedule-time-date').datepicker(); - $('#notification-schedule-time-date').datepicker('setDate', Date.last().sunday()); - $('#notification-schedule-time-time').val("12:00 AM"); - $('#notification-schedule-time-time').timepicker({ - showPeriod: true, - showLeadingZero: false - }); - - //getting started page - $('#button-notifications-apple-get-started').click(function(){ - $('#notifications-apple-get-started').show(); - $('#notifications-android-get-started').hide(); - $('#button-notifications-apple-get-started').parent().addClass('active'); - $('#button-notifications-android-get-started').parent().removeClass('active'); - }); - $('#button-notifications-android-get-started').click(function(){ - $('#notifications-android-get-started').show(); - $('#notifications-apple-get-started').hide(); - $('#button-notifications-android-get-started').parent().addClass('active'); - $('#button-notifications-apple-get-started').parent().removeClass('active'); - }); - - //configuration page - $('#button-notifications-apple-create-notifier').click(function(){ - $('#notifications-apple-create-notifier').show(); - $('#notifications-android-create-notifier').hide(); - $('#button-notifications-apple-create-notifier').parent().addClass('active'); - $('#button-notifications-android-create-notifier').parent().removeClass('active'); - }); - $('#button-notifications-android-create-notifier').click(function(){ - $('#notifications-android-create-notifier').show(); - $('#notifications-apple-create-notifier').hide(); - $('#button-notifications-android-create-notifier').parent().addClass('active'); - $('#button-notifications-apple-create-notifier').parent().removeClass('active'); - }); - - $('#notification-user-group-all').click(function(){ - $('#notificaitons-group-select-container').hide(); - $('#notificaitons-users-select-container').hide(); - $('#notificaitons-devices-select-container').hide(); - }); - $('#notification-user-group-users').click(function(){ - $('#notificaitons-group-select-container').hide(); - $('#notificaitons-devices-select-container').hide(); - $('#notificaitons-users-select-container').show(); - }); - $('#notification-user-group-group').click(function(){ - $('#notificaitons-group-select-container').show(); - $('#notificaitons-users-select-container').hide(); - $('#notificaitons-devices-select-container').hide(); - }); - $('#notification-user-group-devices').click(function(){ - $('#notificaitons-group-select-container').hide(); - $('#notificaitons-users-select-container').hide(); - $('#notificaitons-devices-select-container').show(); - }); - - function getCertList() { - runAppQuery(new Usergrid.Query("GET", "notifiers", null, null, getCertListCallback, function() { alertModal("Error", "Unable to retrieve notifiers.")})); - } - Usergrid.console.getCertList = getCertList; - function getCertListCallback(response){ - response = escapeMe(response); - var notifiers = response.entities; - $('#send-notification-notifier').empty(); - var tableVar = - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - '
    ProviderNotifierCertificate Upload Date
    '; - - if (notifiers.length > 0) { - $('#notification-cert-list').html(tableVar); - $("#notification-cert-list").show(); - $('#cert-list-buttons').show(); - } else { - $("#notification-cert-list").hide(); - $('#cert-list-buttons').hide(); - } - - for (var i=0;i") - .attr("value",notifierName) - .text(notifierName)); - - notifier.created_date= (new Date(notifier.created)).toUTCString(); - - $.tmpl('apigee.ui.panels.notifications.configure.html', notifier).appendTo('#notifications-certs-table'); - } - - } - - function pad(number, length){ - var str = "" + number - while (str.length < length) { - str = '0'+str - } - return str - } - - var offset = new Date().getTimezoneOffset(); - offset = ((offset<0? '+':'-') + pad(parseInt(Math.abs(offset/60)), 2) + pad(Math.abs(offset%60), 2)); - - $('#gmt_display').html('GMT ' + offset); - - function getNotifiers(){ - //get notifiers, add them to dropdown list - runAppQuery(new Usergrid.Query("GET", "notifiers", null, null, getNotifiersCallback, function() { alertModal("Error", "Unable to retrieve notifiers.")})); - } - Usergrid.console.getNotifiers = getNotifiers; - function getNotifiersCallback(response){ - var notifiers = response.entities; - if (notifiers.length == 0) { - Usergrid.Navigation.router.navigateTo('getStarted'); - $('#sendNotification-sublink').parent().hide(); - return false; - } - $('#sendNotification-sublink').parent().show(); - Usergrid.console.updateUsersForNotificationAutocomplete(); - Usergrid.console.updateGroupsForNotificationAutocomplete(); - Pages.ActivatePanel('sendNotification'); - Pages.SelectPanel('sendNotification'); - Usergrid.Navigation.router.showAppNotificationsContent(); - getCertList(); - } - - $('#delete-certs-link').click(deleteCerts); - function deleteCerts(e) { - e.preventDefault(); - - var items = $('#notifications-certs-table input[class^=listItem]:checked'); - if(!items.length){ - alertModal("Error", "Please, first select the certs you want to delete."); - return; - } - - confirmDelete(function(){ - items.each(function() { - var id = $(this).attr("value"); - runAppQuery(new Usergrid.Query("DELETE", 'notifiers/' + id, null, null, - getNotifiers, - function() { alertModal("Error", "Unable to delete cert - " + id) } - )); - }); - }); - } - - $('#save-certificate-btn').click(createNewNotifier); - function createNewNotifier(){ - //var fileField = $("#new-notifier-certificate"); - - var fileField = document.getElementById("new-notifier-certificate"); - - var name = $('#new-notifier-name').val(); - var provider = 'apple'; - var environment = $("#new-notification-environment").find(":selected").val(); - var certificatePassword = $("#new-notifier-cert-password").val(); - - var formData = new FormData(); - file = fileField.files[0]; - formData.append("p12Certificate", file); - - formData.append('name', name); - formData.append('provider', provider); - formData.append('environment', environment); - formData.append('certificatePassword', certificatePassword); - - var query = new Usergrid.Query("POST","notifiers", formData, {}, - function(response) { - //new notifier created - call retrieve - getCertList(); - $('#cert-upload-message').html('Certificate uploaded succesfully. '); - $('#cert-upload-message').show(); - setTimeout(function(){$("#cert-upload-message").hide();},3000); - $('#sendNotification-sublink').parent().show(); - }, - function(response) { - //oops! - alertModal("Error", "Unable to create new notifier."); - }); - query.setFilePost(true); - //post notifiers "name: 'apple', provider: 'apple', environment: 'development'" --file - runAppQuery(query); - - } - - $('#save-certificate-btn-android').click(createNewNotifierAndroid); - function createNewNotifierAndroid(){ - var apiKey = $('#android-new-notifier-api-key').val(); - var name = $('#android-new-notifier-name').val(); - var provider = 'google'; - - var data = { - apiKey:apiKey, - name:name, - provider:provider - } - runAppQuery(new Usergrid.Query("POST","notifiers", data, {}, - function(response) { - //new notifier created - call retrieve - getCertList(); - $('#cert-upload-message').html('Certificate uploaded succesfully. '); - $('#cert-upload-message').show(); - setTimeout(function(){$("#cert-upload-message").hide();},3000); - $('#sendNotification-sublink').parent().show(); - }, - function(response) { - //oops! - alertModal("Error", "Unable to create new notifier."); - } - )); - - } - $('#schedule-notification').click(scheduleNotification); - function scheduleNotification(){ - //todo validate json - var payload = $('#notification-json').val(); - var notifierName = $("#send-notification-notifier").find(":selected").val(); - - //get notification schedule - var notificationTime = $("input:radio[name='notification-schedule-time']:checked").val() - var sendTimestamp; - if (notificationTime == 'now') { - sendTimestamp = null; - } else { - //get the scheduled time - sendTimestamp = $('#notification-schedule-time-date').datepicker('getDate').at($('#notification-schedule-time-time').timepicker('getTime')).getTime(); - var offset = new Date().getTimezoneOffset(); //the client's timezone - in minutes - var timeDiff = offset * 60000; //60000 milliseconds in a minute, timeDiff will now have total milliseconds different - sendTimestamp += timeDiff; //apply the diff, offset will be ahead or behind GMT, so add it - } - - //we are trying to make this (where notifierName is the name of the notifier: - // { "payloads": { notifierName: "msg" }, "deliver":timestamp } - var payloads = {}; - payloads[notifierName] = payload; - var postBody = {}; - postBody['payloads'] = payloads; - postBody['deliver'] = sendTimestamp; - - //get notification group (who to send to) - var notificationGroup = $("input:radio[name='notification-user-group']:checked").val() - var type; - var list = []; - if (notificationGroup == 'groups') { - type = 'groups/'; - var groupsList = $("#group-list").val(); - list = groupsList.split(','); - } else if (notificationGroup == 'users') { - type = 'users/'; - var usersList = $("#user-list").val(); - list = usersList.split(','); - } else if (notificationGroup == 'devices') { - type = 'devices/'; - var devicesList = $("#devices-list").val(); - list = devicesList.split(','); - } else { - // /users;ql=/notifications - type = 'devices'; - list[0] = ';ql='; - } - - //schedule notification - if (list.length > 0 && list[0] != '') { - for (var i=0;i 0) { - list += ","; - } - //add the username - list += username; - //put it back in the field - $("#user-list").val(list); - $('#dialog-form-add-user-to-notification').modal('hide'); - } - } - - function addGroupToNotification() { - var form = $(this); - formClearErrors(form); - var groupField = $('#search-notification-group-name-input'); - var bValid = checkLength2(groupField, 1, 80) && checkRegexp2(groupField, pathRegex, pathAllowedCharsMessage) - var group = $('#search-notification-group-name-input').val(); - if (bValid) { - //add the group to the list - - var list = $("#group-list").val(); - //get rid of extra blanks spaces - list = list.replace(' ', ''); - //if there is no comma at the end, add one - list = list.replace(/[,;]$/,''); - if (list.length > 0) { - list += ","; - } - //add the username - list += group; - //put it back in the field - $("#group-list").val(list); - $('#dialog-form-add-group-to-notification').modal('hide'); - } - } - - //JSON validator - $('#validate-notifications-json').click(validateNotificationsJson); - function validateNotificationsJson(){ - try { - var result = JSON.parse($('#notification-json').val()); - if (result) { - $('#notifications-json-status').html('JSON is valid!'); - $('#notification-json').val( - JSON.stringify(result, null, " ")); - return result; - } - } catch(e) { - $('#notifications-json-status').html('Error: ' + e.toString()); - } - return false; - }; - - //reset JSON - $('#reset-notifications-payload').click(resetJsonPayload); - function resetJsonPayload(){ - var startJson = '{ \r\n "alert": "Your text here",\r\n "badge": "1",\r\n "sound": "default" \r\n}'; - $('#notification-json').val(startJson); - } - - //Start time - $('#notification-schedule-time-now').click(function(){ - $('#notification-schedule-time-controls').hide(); - }); - $('#notification-schedule-time-later').click(function(){ - $('#notification-schedule-time-controls').show(); - }); - - - $('#return-to-notifications').click(function(e){ - e.preventDefault(); - Usergrid.Navigation.router.navigateTo('messageHistory'); - }); - $('#view-notifications-all').click(function(e){ - e.preventDefault(); - getNotifications(); - clearNotificationsPills(); - $('#view-notifications-all').parent().addClass('active'); - }); - $('#view-notifications-scheduled').click(function(e){ - e.preventDefault(); - getNotifications('scheduled'); - clearNotificationsPills(); - $('#view-notifications-scheduled').parent().addClass('active'); - }); - $('#view-notifications-started').click(function(e){ - e.preventDefault(); - getNotifications('started'); - clearNotificationsPills(); - $('#view-notifications-started').parent().addClass('active'); - }); - $('#view-notifications-sent').click(function(e){ - e.preventDefault(); - getNotifications('sent'); - clearNotificationsPills(); - $('#view-notifications-sent').parent().addClass('active'); - }); - $('#view-notifications-failed').click(function(e){ - e.preventDefault(); - getNotifications('errors'); - clearNotificationsPills(); - $('#view-notifications-failed').parent().addClass('active'); - }); - $('#view-notifications-canceled').click(function(e){ - e.preventDefault(); - getNotifications('canceled'); - clearNotificationsPills(); - $('#view-notifications-canceled').parent().addClass('active'); - }); - $('#view-notifications-search').click(function(e){ - e.preventDefault(); - getNotifications('search'); - }); - function clearNotificationsPills() { - $('#view-notifications-all').parent().removeClass('active'); - $('#view-notifications-scheduled').parent().removeClass('active'); - $('#view-notifications-started').parent().removeClass('active'); - $('#view-notifications-sent').parent().removeClass('active'); - $('#view-notifications-failed').parent().removeClass('active'); - $('#view-notifications-canceled').parent().removeClass('active'); - } - function getNotifications(type){ - //CREATED, FAILED, SCHEDULED, STARTED, FINISHED, CANCELED, EXPIRED - var params = {}; - if (type === 'scheduled') { - var ql = "select * where state='SCHEDULED' order by created DESC"; - params.ql = ql; - } else if (type === 'errors') { - var ql = "select * where state='FAILED' order by created DESC"; - params.ql = ql; - } else if (type === 'sent') { - var ql = "select * where state='FINISHED' order by created DESC"; - params.ql = ql; - } else if (type === 'canceled') { - var ql = "select * where state='CANCELED' order by created DESC"; - params.ql = ql; - } else if (type === 'started') { - var ql = "select * where state='STARTED' order by created DESC"; - params.ql = ql; - } else if (type === 'search') { //unused - var searchString = $('#notifications-history-search').val(); - var ql = "select * where payloads.apple contains '"+ searchString +"'"; - params.ql = ql; - } else { - params.reversed = 'true'; - } - - queryObj = new Usergrid.Query("GET", "notifications", null, params, getNotificationsCallback, function() { alertModal("Error", "Unable to retrieve notifications.")}); - runAppQuery(queryObj); - } - Usergrid.console.getNotifications = getNotifications; - function getNotificationsCallback(response){ - $('body').scrollTop(0); - hidePagination('notifications-history'); - var notifications = response.entities; - $('#notifications-history-display').empty(); - - var notificationsHistory = 'No Notifications found.'; - for (var i=0;i'+ - '
    '+ - '
    '+ - 'Send Date: '+ sendDate + - '
    '+ - ' ' +status+ - '
    '+ - '
    '+ - '
    '; - - if (notification.state == 'SCHEDULED' || notification.state == 'STARTED') { - notificationsHistory += - 'delete'; - } - notificationsHistory += - '   view details'+ - '
    '+ - 'Total Sent: '+sent+' Total Errors: '+errors+ - '
    UUID: '+uuid+''+ - '
    '+ - '
    '+ - '
    '+ - 'payload: ' + payload + - '
    '+ - '' + - '
     
    '; - } - $('#notifications-history-display').html(notificationsHistory); - showPagination('notifications-history'); - } - - $('#view-notification-receipt-all').click(function(e){ - e.preventDefault(); - modifyShowReceiptView(''); - clearNotificationHistoryPills(); - $('#view-notification-receipt-all').parent().addClass('active'); - }); - $('#view-notification-receipt-received').click(function(e){ - e.preventDefault(); - modifyShowReceiptView('received'); - clearNotificationHistoryPills(); - $('#view-notification-receipt-received').parent().addClass('active'); - }); - $('#view-notification-receipt-failed').click(function(e){ - e.preventDefault(); - modifyShowReceiptView('failed'); - clearNotificationHistoryPills(); - $('#view-notification-receipt-failed').parent().addClass('active'); - }); - function clearNotificationHistoryPills() { - $('#view-notification-receipt-all').parent().removeClass('active'); - $('#view-notification-receipt-received').parent().removeClass('active'); - $('#view-notification-receipt-failed').parent().removeClass('active'); - } - - var selectedNotificationUUID; //used for page refresh - if page is refreshed, will not be populated when checked for - var selectedNotificationView; //used for paging - on next / prev calls, will know what view to use - function modifyShowReceiptView(view){ - showReceipt(selectedNotificationUUID, view); - } - - function showReceipt(uuid, view){ - selectedNotificationView = view; - setSelectedNotificationUUID(uuid); - Usergrid.Navigation.router.navigateTo('notificationsReceipt'); - viewReceipts(uuid, view); - } - Usergrid.console.showReceipt = showReceipt; - - function setSelectedNotificationUUID(uuid){ - selectedNotificationUUID = uuid; - } - - function checkForSelectedNotification() { - if (selectedNotificationUUID) { - return true; - } - return false; - } - Usergrid.console.checkForSelectedNotification = checkForSelectedNotification; - - function cancelNotification(uuid){ - var data = {"canceled":"true"}; - runAppQuery(new Usergrid.Query("PUT", "notifications/"+uuid, data, null, getNotifications, function() { alertModal("Error", "Unable to cancel notification.")})); - } - Usergrid.console.cancelNotification = cancelNotification; - - - function viewReceipts(uuid, view){ - selectedNotificationUUID = uuid; - $('#messageHistory-sublink').parent().addClass('active'); - var params = {}; - if(view == 'received') { - var params = {"ql":"select * where sent > 0"}; - } - if(view == 'failed') { - var params = {"ql":"select * where errorCode < 0"}; - } - - queryObj = new Usergrid.Query("GET", "notifications/"+uuid+"/receipts", null, params, viewReceiptsCallback, function() { alertModal("Error", "Unable to cancel notification.")}); - runAppQuery(queryObj ); - } - Usergrid.console.viewReceipts = viewReceipts; - - - - function viewReceiptsCallback (response){ - $('body').scrollTop(0); - hidePagination('notification-receipt'); - var receipts = response.entities; - var notificationReceipts = 'No Receipts found.'; - for (i = 0; i < receipts.length; i++) { - if (i==0) { - notificationReceipts = ''+ - '' + - ''+ - ''+ - ''+ - ''; - } - var receipt = receipts[i]; - var created = (new Date(receipt.created)).toUTCString(); - var sent = (receipt.created)?(new Date(receipt.sent)).toUTCString():''; - var payload = (receipt.payload)?receipt.payload:''; - var error = (receipt.errorMessage)?receipt.errorMessage:''; - notificationReceipts += - '' + - '' + - '' + - '' + - '' + - ''; - } - if (receipts.length > 0) { notificationReceipts += '
    CreatedPayloadSentError
    '+created+''+receipt.payload+''+sent+''+error+'
    ';} - $('#notification-receipts-display').html(notificationReceipts); - - showPagination('notification-receipt'); - - } - - - /******************************************************************* - * - * Login - * - ******************************************************************/ - - $('#login-organization').focus(); - - function displayLoginError(message) { - var message = message || 'ERROR: Your details were incorrect.
    '; - $('#login-area .box').effect('shake', {times: 2},100); - $('#login-message').html(message); - $('#login-message').show(); - } - - function setupMenu() { - var userNameBox = $('#userEmail'); - var userEmail = Usergrid.userSession.getUserEmail(); - if (userEmail){ - userNameBox.html(userEmail); - setupOrganizationsMenu(); - } else { - userNameBox.html("No Logged In User"); - } - } - Usergrid.console.setupMenu = setupMenu; - - function displayOrganizationName(orgName){ - $('#organization-name').text(orgName); - } - - function setupOrganizationsMenu() { - var organizations = Usergrid.organizations.getList(); - var orgName = Usergrid.ApiClient.getOrganizationName(); - if (!organizations) { - return; - } - - $('#organizations-menu > a span').text(orgName); - $('#selectedOrg').text(orgName); - - var orgMenu = $('#organizations-menu ul'); - var orgTmpl = $('
  • ${name}
  • '); - var data = []; - var count = organizations.length; - var i=0; - for (i=0;iERROR: ' + msg + '
    ').show(); - } - - function clearSignupForm() { - $('#signup-organization-name').val(""); - $('#signup-username').val(""); - $('#signup-name').val(""); - $('#signup-email').val(""); - $('#signup-password').val(""); - $('#signup-password-confirm').val(""); - } - - function clearSignupError() { - $('#signup-message').hide(); - } - - function signup() { - var organization_name = $('#signup-organization-name').val(); - if (!(organizationNameRegex.test(organization_name))) { - displaySignupError("Invalid organization name: " + organizationNameAllowedCharsMessage); - return; - } - var username = $('#signup-username').val(); - if (!(usernameRegex.test(username))) { - displaySignupError("Invalid username: " + usernameAllowedCharsMessage); - return; - } - var name = $('#signup-name').val(); - if (!$.trim(name).length) { - displaySignupError("Name cannot be blank."); - return; - } - var email = $('#signup-email').val(); - if (!(emailRegex.test(email))) { - displaySignupError("Invalid email: " + emailAllowedCharsMessage); - return; - } - var password = $('#signup-password').val(); - if (!(passwordRegex.test(password))) { - displaySignupError(passwordAllowedCharsMessage); - return; - } - if (password != $('#signup-password-confirm').val()) { - displaySignupError("Passwords must match."); - return; - } - var formdata = { - "organization": organization_name, - "username": username, - "name": name, - "email": email, - "password": password - }; - runManagementQuery(new Usergrid.Query("POST",'organizations', formdata, null, - function(response) { - clearSignupError(); - clearSignupForm(); - Pages.ShowPage('post-signup'); - }, - function(response) { - displaySignupError("Unable to create new organization at this time"); - } - )); - } - - $('#button-signup').click(function() { - signup(); - return false; - }); - - /******************************************************************* - * - * Account Settings - * - ******************************************************************/ - - function displayAccountSettings(response) { - if (response.data) { - response.data.gravatar = get_gravatar(response.data.email, 50); - - $('#update-account-username').val(response.data.username); - $('#update-account-name').val(response.data.name); - $('#update-account-email').val(response.data.email); - $('#update-account-picture-img').attr('src', response.data.gravatar); - $('#update-account-bday').attr('src', response.data.gravatar); - - var t = ""; - var organizations = response.data.organizations; - var organizationNames = keys(organizations).sort(); - for (var i in organizationNames) { - var organizationName = organizationNames[i]; - var organization = organizations[organizationName]; - var uuid = organization.uuid; - t += - '' + - '' + - '' + - '' + organizationName + '' + - '' + - '' + - '' + - '' + uuid + '' + - '' + - '' + - "Leave" + - '' + - ''; - } - - $('#organizations').html(t); - $('#organizations a').click( function(e){ - e.preventDefault(); - var uuid = $(this).attr('href').substring(1); - }); - } else { - } - } - Usergrid.console.displayAccountSettings = displayAccountSettings; - - $('#button-update-account').click(function() { - var userData = { - username : $('#update-account-username').val(), - name : $('#update-account-name').val(), - email : $('#update-account-email').val() - }; - var old_pass = $('#old-account-password').val(); - var new_pass = $('#update-account-password').val(); - var new_pass2 = $('#update-account-password-repeat').val(); - if (old_pass && new_pass) { - if (new_pass != new_pass2) { - alertModal("Error", "New passwords don't match"); - requestAccountSettings(); - return; - } - - if (!(passwordRegex.test(new_pass))) { - alertModal("Error ", passwordAllowedCharsMessage); - requestAccountSettings(); - return; - } - userData.newpassword = new_pass; - userData.oldpassword = old_pass; - } - runManagementQuery(new Usergrid.Query("PUT",'users/' + Usergrid.userSession.getUserUUID(), userData, null, - function(response) { - $('#account-update-modal').modal('show'); - if ((old_pass && new_pass) && (old_pass != new_pass)) { - logout(); - return; - } - requestAccountSettings(); - }, - function(response) { - alertModal("Error", "Unable to update account settings"); - requestAccountSettings(); - } - )); - return false; - }); - - function requestAccountSettings(urlCallback) { - if (Usergrid.SSO.usingSSO()) { - Usergrid.SSO.sendToSSOProfilePage(urlCallback); - } else { - Pages.SelectPanel('account'); - $('#update-account-id').text(Usergrid.userSession.getUserUUID()); - $('#update-account-name').val(""); - $('#update-account-email').val(""); - $('#old-account-password').val(""); - $('#update-account-password').val(""); - $('#update-account-password-repeat').val(""); - runManagementQuery(new Usergrid.Query("GET",'users/' + Usergrid.userSession.getUserUUID(), null, null, displayAccountSettings, null)); - } - } - Usergrid.console.requestAccountSettings = requestAccountSettings; - - function displayOrganizations(response) { - var t = ""; - var m = ""; - organizations = Usergrid.organizations.getList(); - orgainzations_by_id = {}; - if (response.data) { - organizations = response.data; - var count = 0; - var organizationNames = keys(organizations).sort(); - for (var i in organizationNames) { - var organization = organizationNames[i]; - var uuid = organizations[organization]; - t += - '' + - '' + - '' + - '' + organization + '' + - '' + - '' + - '' + - '' + uuid + '' + - '' + - '' + - "Leave" + - '' + - ''; - - count++; - orgainzations_by_id[uuid] = organization; - } - if (count) { - $('#organizations').html(t); - } else { - $('#organizations').html('
    No organizations created.
    '); - } - } else { - $('#organizations').html('
    No organizations created.
    '); - } - } - - function leaveOrganization(UUID) { - confirmAction( - "Are you sure you want to leave this Organization?", - "You will lose all access to it.", - function() { - runManagementQuery(new Usergrid.Query("DELETE","users/" + Usergrid.userSession.getUserUUID() + "/organizations/" + UUID, null, null, - requestAccountSettings, - function() { alertModal("Error", "Unable to leave organization"); })); - } - ); - - return false; - } - Usergrid.console.leaveOrganization = leaveOrganization; - - function displayCurrentOrg() { - var name = Usergrid.ApiClient.getOrganizationName() ; - var org = Usergrid.organizations.getItemByName(name); - var uuid = org.getUUID() ; - $('#organizations-table').html('' + name + '' + uuid + ''); - } - Usergrid.console.displayCurrentOrg = displayCurrentOrg; - - /******************************************************************* - * - * Startup - * - ******************************************************************/ - - function showPanelList(type){ - $('#' + type + '-panel-search').hide(); - selectTabButton('#button-'+type+'-list'); - $('#' + type + '-panel-list').show(); - } - - $('#button-users-list').click(function() { - showPanelList('users'); - return false; - }); - - $('#user-panel-tab-bar a').click(function() { - //selectTabButton(this); - selectTabButton(this); - if ($(this).attr("id") == "button-user-list") { - userLetter = '*'; - Pages.SelectPanel('users'); - showPanelList('users'); - } else { - showPanelContent('#user-panel', '#user-panel-' + $(this).attr('id').substring(12)); - } - return false; - }); - - $('#button-groups-list').click(function() { - showPanelList('groups'); - return false; - }); - - $('#group-panel-tab-bar a').click(function() { - selectTabButton(this); - if ($(this).attr('id') == "button-group-list") { - groupLetter = '*'; - Pages.SelectPanel('groups'); - showPanelList('groups'); - } else { - showPanelContent('#group-panel', '#group-panel-' + $(this).attr('id').substring(13)); - } - return false; - }); - - $('#roles-panel-tab-bar a').click(function() { - if ($(this).attr('id') == "button-roles-list") { - Pages.SelectPanel('roles'); - showPanelList('roles'); - } - else if ($(this).attr('id') == "button-roles-search") { - selectTabButton('#button-roles-search'); - $('#roles-panel-list').hide(); - $('#role-panel-users').hide(); - $('#roles-panel-search').show(); - } else { - Pages.SelectPanel('roles'); - } - return false; - }); - - $('#role-panel-tab-bar a').click(function() { - if ($(this).attr('id') == "button-role-list") { - Pages.SelectPanel('roles'); - showPanelList('roles'); - } else if ($(this).attr('id') == "button-role-settings") { - selectTabButton('#button-role-settings'); - $('#roles-panel-list').hide(); - $('#role-panel-users').hide(); - $('#role-panel-groups').hide(); - $('#role-panel-settings').show(); - } else if ($(this).attr('id') == "button-role-users") { - selectTabButton('#button-role-users'); - $('#roles-panel-list').hide(); - $('#role-panel-settings').hide(); - $('#role-panel-groups').hide(); - $('#role-panel-users').show(); - } else if ($(this).attr('id') == "button-role-groups") { - selectTabButton('#button-role-groups'); - $('#roles-panel-list').hide(); - $('#role-panel-settings').hide(); - $('#role-panel-users').hide(); - $('#role-panel-groups').show(); - } else { - Pages.SelectPanel('roles'); - } - return false; - }); - - $('button, input:submit, input:button').button(); - - $('select#indexSelect').change( function(e){ - $('#query-ql').val($(this).val() || ""); - }); - - doBuildIndexMenu(); - - function enableApplicationPanelButtons() { - $('#application-panel-buttons').show(); - } - - function disableApplicationPanelButtons() { - $('#application-panel-buttons').hide(); - } - - function forceNewApp() { - $('#dialog-form-force-new-application').modal(); - } - - $('#system-panel-button-home').addClass('ui-selected'); - $('#application-panel-buttons .ui-selected').removeClass('ui-selected'); - - $('#start-date').datepicker(); - $('#start-date').datepicker('setDate', Date.last().sunday()); - $('#start-time').val("12:00 AM"); - $('#start-time').timepicker({ - showPeriod: true, - showLeadingZero: false - }); - - $('#end-date').datepicker(); - $('#end-date').datepicker('setDate', Date.next().sunday()); - $('#end-time').val("12:00 AM"); - $('#end-time').timepicker({ - showPeriod: true, - showLeadingZero: false - }); - - $('#button-analytics-generate').click(function() { - requestApplicationCounters(); - return false; - }); - - $('#link-signup-login').click(function() { - Pages.ShowPage('login'); - return false; - }); - - if (OFFLINE) { - Pages.ShowPage(OFFLINE_PAGE); - } - - function showLoginForNonSSO(){ - if (!Usergrid.userSession.loggedIn() && !Usergrid.SSO.usingSSO()) { - Pages.ShowPage('login'); - } - } - Usergrid.console.showLoginForNonSSO = showLoginForNonSSO; - - function loginOk(){ - $('#login-message').hide(); - $('#login-email').val(""); - $('#login-password').val(""); - Pages.ShowPage('console'); - } - - Usergrid.console.loginOk = loginOk; - - //load the templates only after the rest of the page is - $(window).bind("load", function() { - Usergrid.console.ui.loadTemplate("apigee.ui.users.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.groups.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.roles.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.role.groups.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.activities.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.collections.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.role.users.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.role.permissions.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.user.profile.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.user.memberships.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.user.activities.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.user.graph.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.user.permissions.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.collection.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.collections.query.indexes.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.group.details.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.group.memberships.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.group.activities.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.group.permissions.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.curl.detail.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.panels.notifications.configure.html"); - $(window).resize(); - }); - - //these templates are used on the front page and should be loaded up front - Usergrid.console.ui.loadTemplate("apigee.ui.applications.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.admins.table_rows.html"); - Usergrid.console.ui.loadTemplate("apigee.ui.feed.table_rows.html"); - - if (Usergrid.showNotifcations) { - $("#notifications-link").show(); - } -} diff --git a/deleted/archive/js/app/helpers.js b/deleted/archive/js/app/helpers.js deleted file mode 100644 index 7e1d0f7b73..0000000000 --- a/deleted/archive/js/app/helpers.js +++ /dev/null @@ -1,241 +0,0 @@ -/* - * This file contains helper functions: Stuff used all over the application but not necessarily part of a module/object/paradigm/something. - * - * If your can't find where a function is defined, it's probably here. :) - * - * They need to be cleaned up. SOON! - * - */ - -var onIE = navigator.userAgent.indexOf("MSIE") >= 0; - -function indexOfFirstType(type, args) { - for (var i = 0; i < args.length; i++) { - if (!args[i]) return - 1; - if (typeof args[i] == type) return i; - } - return - 1; -} - -function getByType(type, i, args) { - var j = indexOfFirstType(type, args); - if (j < 0) return null; - var k = 0; - while ((j < args.length) && (k <= i)) { - if (type == "object") { - if (args[j].constructor != Object) return null; - } else if (typeof args[j] != type) return null; - if (k == i) return args[j]; - j++; - k++; - } - return null; -} - -function countByType(type, args) { - var c = 0; - var j = indexOfFirstType(type, args); - if (j < 0) return c; - while (j < args.length) { - if (type == "object") { - if (args[j].constructor != Object) return c; - } else if (typeof args[j] != type) return c; - j++; - c++; - } - return null; -} - -function encodeParams(params) { - tail = []; - if (params instanceof Array) { - for (i in params) { - var item = params[i]; - if ((item instanceof Array) && (item.length > 1)) { - tail.push(item[0] + "=" + encodeURIComponent(item[1])); - } - } - } else { - for (var key in params) { - if (params.hasOwnProperty(key)) { - var value = params[key]; - if (value instanceof Array) { - for (i in value) { - var item = value[i]; - tail.push(key + "=" + encodeURIComponent(item)); - } - } else { - tail.push(key + "=" + encodeURIComponent(value)); - } - } - } - } - return tail.join("&"); -} - -function encodePathString(path, returnParams) { - - var i = 0; - var segments = new Array(); - var payload = null; - while (i < path.length) { - var c = path.charAt(i); - if (c == '{') { - var bracket_start = i; - i++; - var bracket_count = 1; - while ((i < path.length) && (bracket_count > 0)) { - c = path.charAt(i); - if (c == '{') { - bracket_count++; - } else if (c == '}') { - bracket_count--; - } - i++; - } - if (i > bracket_start) { - var segment = path.substring(bracket_start, i); - segments.push(JSON.parse(segment)); - } - continue; - } else if (c == '/') { - i++; - var segment_start = i; - while (i < path.length) { - c = path.charAt(i); - if ((c == ' ') || (c == '/') || (c == '{')) { - break; - } - i++; - } - if (i > segment_start) { - var segment = path.substring(segment_start, i); - segments.push(segment); - } - continue; - } else if (c == ' ') { - i++; - var payload_start = i; - while (i < path.length) { - c = path.charAt(i); - i++; - } - if (i > payload_start) { - var json = path.substring(payload_start, i).trim(); - payload = JSON.parse(json); - } - break; - } - i++; - } - - var newPath = ""; - for (i = 0; i < segments.length; i++) { - var segment = segments[i]; - if (typeof segment === "string") { - newPath += "/" + segment; - } else { - if (i == (segments.length - 1)) { - if (returnParams) { - return {path : newPath, params: segment, payload: payload}; - } - newPath += "?"; - } else { - newPath += ";"; - } - newPath += encodeParams(segment); - } - } - if (returnParams) { - return {path : newPath, params: null, payload: payload}; - } - return newPath; -} - -function getQueryParams() { - var query_params = {}; - if (window.location.search) { - // split up the query string and store in an associative array - var params = window.location.search.slice(1).split("&"); - for (var i = 0; i < params.length; i++) { - var tmp = params[i].split("="); - query_params[tmp[0]] = unescape(tmp[1]); - } - } - - return query_params; -} - -function prepareLocalStorage() { - if (!Storage.prototype.setObject) { - Storage.prototype.setObject = function(key, value) { - this.setItem(key, JSON.stringify(value)); - }; - } - if (!Storage.prototype.getObject) { - Storage.prototype.getObject = function(key) { - try { - return this.getItem(key) && JSON.parse(this.getItem(key)); - } catch(err) { - } - return null; - }; - } -} - -// if all of our vars are in the query string, grab them and save them -function parseParams() { - var query_params = {}; - if (window.location.search) { - // split up the query string and store in an associative array - var params = window.location.search.slice(1).split("&"); - for (var i = 0; i < params.length; i++) { - var tmp = params[i].split("="); - query_params[tmp[0]] = unescape(tmp[1]); - } - } - - if (query_params.access_token && query_params.admin_email && query_params.uuid) { - Usergrid.userSession.setAccessToken(query_params.access_token); - Usergrid.userSession.setUserEmail(query_params.admin_email); - Usergrid.userSession.setUserUUID(query_params.uuid); - //then send the user to the parent - var new_target = window.location.host + window.location.pathname; - - var separatorMark = '?'; - if (query_params.api_url) { - new_target = new_target + separatorMark + 'api_url=' + query_params.api_url; - separatorMark = '&'; - } - - if (query_params.use_sso) { - new_target = new_target + separatorMark + 'use_sso=' + query_params.use_sso; - separatorMark = '&'; - } - - window.location = window.location.protocol + '//' + new_target; - throw "stop!"; - } -} - -function dateToString(numberDate){ - var date = new Date(numberDate); - return date.toString('dd MMM yyyy - h:mm tt '); -} - -/* move toggleablesections to console? */ -function toggleableSections() { - $(document).on('click', '.title', function() { - $(this).parent().parent().find('.hideable').toggle(); - }) -} - -function selectFirstElement(object) { - var first = null; - for (first in object) { - break - } - return first -} - - diff --git a/deleted/archive/js/app/navigation.js b/deleted/archive/js/app/navigation.js deleted file mode 100644 index 8d2bcb1e00..0000000000 --- a/deleted/archive/js/app/navigation.js +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Usergrid.Navigation - * - * Functions to control the navigation of the Console client - * - * Uses: Backbone.router - * - * Requires: Backbonejs, Underscore.js - * - */ -Usergrid.Navigation = Backbone.Router.extend({ - routes: { - ":organization/:application/organization": "home", - ":organization/:application/dashboard": "dashboard", - ":organization/:application/users": "users", - ":organization/:application/groups": "groups", - ":organization/:application/roles": "roles", - ":organization/:application/activities": "activities", - ":organization/:application/collections": "collections", - ":organization/:application/notifications": "notifications", - ":organization/:application/sendNotification": "sendNotification", - ":organization/:application/messageHistory": "messageHistory", - ":organization/:application/notificationsReceipt": "notificationsReceipt", - ":organization/:application/configuration": "configuration", - ":organization/:application/getStarted": "getStarted", - ":organization/:application/analytics": "analytics", - ":organization/:application/properties": "properties", - ":organization/:application/shell": "shell", - ":organization/:application/account": "account", - ":organization/home": "home", - ":organization": "home", - "": "home" - }, - //Router Methods - home: function(organization, application) { - $('body').scrollTop(0); - if(organization) { - this.checkOrganization(organization); - } - this.checkApplication(application); - Pages.SelectPanel('organization'); - $('#left2').hide(); - }, - dashboard: function(organization,application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Usergrid.console.pageSelect(application); - Pages.SelectPanel('dashboard'); - $('#left2').hide(); - }, - users: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('users'); - this.showAppUserContent(); - }, - groups: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('groups'); - this.showAppUserContent(); - }, - roles: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('roles'); - this.showAppUserContent(); - }, - activities: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('activities'); - $('#left2').hide(); - }, - collections: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.ActivatePanel("collections"); - Pages.SelectPanel('collections'); - this.showAppDataContent(); - }, - notifications: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Usergrid.console.getNotifiers(); - }, - sendNotification: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.ActivatePanel('notifications'); - Pages.SelectPanel('notifications'); - Usergrid.console.getNotifiers(); - }, - messageHistory: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.ActivatePanel('messageHistory'); - Pages.SelectPanel('messageHistory'); - Usergrid.console.bindPagingEvents('notifications-history'); - Usergrid.console.getNotifications(); - this.showAppNotificationsContent(); - }, - notificationsReceipt: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - if (Usergrid.console.checkForSelectedNotification()) { - Pages.ActivatePanel('notificationsReceipt'); - Pages.SelectPanel('notificationsReceipt'); - Usergrid.console.bindPagingEvents('notification-receipt'); - } else { - Pages.ActivatePanel('messageHistory'); - Pages.SelectPanel('messageHistory'); - Usergrid.console.bindPagingEvents('notifications-history'); - Usergrid.console.getNotifications(); - } - this.showAppNotificationsContent(); - }, - configuration: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.ActivatePanel("configuration"); - Pages.SelectPanel('configuration'); - Usergrid.console.getCertList(); - this.showAppNotificationsContent(); - }, - getStarted: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.ActivatePanel("getStarted"); - Pages.SelectPanel('getStarted'); - this.showAppNotificationsContent(); - }, - analytics: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('analytics'); - $('#left2').hide(); - }, - properties: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('properties'); - $('#left2').hide(); - }, - shell: function(organization, application) { - $('body').scrollTop(0); - this.checkOrganization(organization); - this.checkApplication(application); - Pages.SelectPanel('shell'); - $('#left2').hide(); - }, - account: function(organization, application) { - $('body').scrollTop(0); - Pages.SelectPanel('account'); - $('#left2').hide(); - }, - //Utils - checkOrganization: function(org) { - if(!this.isActiveOrganization(org)) { - Usergrid.console.selectOrganization(org); - } - }, - isActiveOrganization: function(org) { - if(org) { - if(Usergrid.ApiClient.getOrganizationName() === org ) { - return true - } - } - return false - }, - checkApplication: function(app) { - if(app){ - if(!this.isActiveApplication(app)) { - Usergrid.console.pageSelect(app); - } - } - }, - isActiveApplication: function(app) { - if(app) { - if(Usergrid.ApiClient.getApplicationName() === app) { - return true - } - } - return false - }, - getAppNameFromURL: function(){ - name = ''; - try { - name = window.location.hash.split('/')[1]; - } catch (e) {} - return name; - }, - getOrgNameFromURL: function(){ - name = ''; - try { - name = window.location.hash.split('/')[0]; - name = name.replace("#",""); - } catch (e) {} - return name; - }, - showAppUserContent: function(){ - $('#left2').show(); - $('#sidebar-menu2').show(); - $('#left-collections-menu').hide(); - $('#left-notifications-menu').hide(); - }, - showAppDataContent: function(){ - $('#left2').show(); - $('#sidebar-menu2').hide(); - $('#left-collections-menu').show(); - $('#left-notifications-menu').hide(); - }, - showAppNotificationsContent: function(){ - $('#left2').show(); - $('#sidebar-menu2').hide(); - $('#left-collections-menu').hide(); - $('#left-notifications-menu').show(); - $('#notifications-link').parent().addClass('active'); - }, - - navigateTo: function(address) { - var url; - url = Usergrid.ApiClient.getOrganizationName(); - url += "/" + Usergrid.ApiClient.getApplicationName(); - url += "/" + address; - // Backbone navigate only triggers page loading if url changes - // loading manually if the url hasn't changed is necessary. - if(Backbone.history.fragment === url) { - Backbone.history.loadUrl(url); - } else { - this.navigate(url, {trigger: true}); - } - } - }); - -Usergrid.Navigation.router = new Usergrid.Navigation(); -_.bindAll(Usergrid.Navigation.router); diff --git a/deleted/archive/js/app/pages.js b/deleted/archive/js/app/pages.js deleted file mode 100644 index 9d8468badd..0000000000 --- a/deleted/archive/js/app/pages.js +++ /dev/null @@ -1,161 +0,0 @@ -function ApigeePages() { - var self = { - pages: {}, - panels: {}, - resetPasswordUrl: '' - }; - - self.clearPage = function(){ - $("#pages > div").hide(); - }; - - self.ShowPage = function(pageName){ - // console.log('showing ' + pageName); - $("#pages > div").hide(); - var page = self.pages[pageName]; - page.box.show(); - $(".navbar li.active").removeClass('active'); - $(".navbar .navbar-inner").hide(); - - if(page.link.parent().parent().hasClass("dropdown-menu")) { - page.link.parent().parent().parent().addClass('active'); - } else { - page.menu.show(); - } - - if(page.showFunction) { - page.showFunction(); - } - - if(Usergrid.userSession.getBannerState() == 'true'){ - this.showBanner(); - } - - if (pageName == 'login') { - Usergrid.console.clearBackgroundImage(); - } else { - Usergrid.console.setColumnBackgroundImage(); - } - - }; - self.showBanner = function(){ - Usergrid.userSession.showBanner(); - $('#banner').show(); - }; - - self.hideBanner = function(){ - Usergrid.userSession.hideBanner(); - $("#banner").hide(); - }; - - self.AddPage = function(page) { - if(!page.link) - page.link = $("#" + page.name + '-link'); - - if(!page.box) - page.box = $("#" + page.name + '-page'); - - page.link.click(function(e) { - e.preventDefault(); - if(!page.link.hasClass("dropdown-toggle")) - self.ShowPage(page.name); - }); - - LoadPage(page); - self.pages[page.name] = page; - }; - - self.AddPanel = function(panelName, linkSelector, sublinkSelector,boxSelector,initFunction,showFunction, buttonHandler) { - if (!linkSelector) { - //linkSelector = "#sidebar-menu a[href='#" + panelName + "']"; - linkSelector = "#" + panelName + '-link'; - } - if (!sublinkSelector) { - sublinkSelector = "#" + panelName + '-sublink'; - } - - if (!boxSelector) { - boxSelector = "#" + panelName + '-panel'; - } - - var panel = { - name: panelName, - link: $(linkSelector), - sublink: $(sublinkSelector), - box: $(boxSelector), - initFunction: initFunction, - showFunction: showFunction - }; - - if(!buttonHandler) { - buttonHandler = function(e) { - e.preventDefault(); - redrawBox(panel.box); - if(panel.name == "query") { - Usergrid.Navigation.router.navigateTo("collections"); - } else { - Usergrid.Navigation.router.navigateTo(panel.name); - } - } - } - panel.link.click(buttonHandler); - panel.sublink.click(buttonHandler); - - self.panels[panel.name] = panel; - - if (panel.initFunction) { - panel.initFunction(); - } - }; - - self.ActivatePanel = function(panelName){ - var panel = self.panels[panelName]; - $("#sidebar-menu li.active").removeClass('active'); - $("#"+panelName+"-link").parent().addClass('active'); - - $("#left-notifications-menu li.active").removeClass('active'); - - } - - self.SelectPanel = function (panelName){ - var panel = self.panels[panelName]; - - $("#sidebar-menu li.active").removeClass('active'); - $("#sidebar-menu2 li.active").removeClass('active'); - panel.link.parent().addClass('active'); - panel.sublink.parent().addClass('active'); - - Usergrid.console.setupMenu(); - Usergrid.console.requestApplications(); - if (panel.showFunction) { - panel.showFunction(); - } - - redrawBox(panel.box); - - }; - - function LoadPage(page){ - - if (page.name=='forgot-password') { - $("#forgot-password-page iframe").attr("src", self.resetPasswordUrl); - } else if(page.name=='console-frame') { - $("#console-frame-page iframe").attr("src", "consoleFrame.html"); - } else { - if (window.location.pathname.indexOf('app') > 0) { - $.ajaxSetup ({cache: false}); - page.box.load(page.name + '.html',page.initFunction); - $.ajaxSetup ({cache: true}); - } else if(page.initFunction) { - page.initFunction(); - } - } - } - - function redrawBox(box) { - $("#console-panels > div").hide(); - box.show(); - - } - return self; -} diff --git a/deleted/archive/js/app/params.js b/deleted/archive/js/app/params.js deleted file mode 100644 index 16feebab75..0000000000 --- a/deleted/archive/js/app/params.js +++ /dev/null @@ -1,30 +0,0 @@ - -(function (){ - Usergrid.Params = function(){}; - - Usergrid.Params.prototype = { - queryParams : {}, - parseParams : function(){ - if (window.location.search) { - // split up the query string and store in an associative array - var params = window.location.search.slice(1).split("&"); - for (var i = 0; i < params.length; i++) { - var tmp = params[i].split("="); - this.queryParams[tmp[0]] = unescape(tmp[1]); - } - } - }, - getParsedParams : function(queryString){ - var retParams = {}; - var params = queryString.slice(0).split("&"); - for (var i = 0; i < params.length; i++) { - var tmp = params[i].split("="); - retParams[tmp[0]] = unescape(tmp[1]); - } - return retParams; - } - }; - -})(Usergrid); - -Usergrid.Params = new Usergrid.Params(); \ No newline at end of file diff --git a/deleted/archive/js/app/quickLogin.js b/deleted/archive/js/app/quickLogin.js deleted file mode 100644 index 6b239a15eb..0000000000 --- a/deleted/archive/js/app/quickLogin.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - This file enables the page to quickly redirect the user to the SSO login page. - Requires: - Usergrid.Params - params.js - Usergrid.userSession -session.js - - Its prefered that Usergrid.Params loads parameters before QuickLogin.init() is called. - */ - -(function(){ - Usergrid.QuickLogin = function(){}; - - Usergrid.QuickLogin.prototype = { - init : function(queryParams, sessionExists, useSSO){ - if(this.credentialsInParams(queryParams)){ - Usergrid.userSession.setUserUUID(queryParams.uuid); - Usergrid.userSession.setUserEmail(queryParams.admin_email); - Usergrid.userSession.setAccessToken(queryParams.access_token); - } - else if (!sessionExists && useSSO){ - Usergrid.SSO.sendToSSOLoginPage(); - } - }, - credentialsInParams : function(params){ - return(params.access_token && params.admin_email && params.uuid); - } - }; -})(Usergrid); - -Usergrid.QuickLogin = new Usergrid.QuickLogin(); diff --git a/deleted/archive/js/app/session.js b/deleted/archive/js/app/session.js deleted file mode 100644 index 0907da15db..0000000000 --- a/deleted/archive/js/app/session.js +++ /dev/null @@ -1,176 +0,0 @@ - -window.Usergrid = window.Usergrid || {}; -Usergrid = Usergrid || {}; -(function() { - /** - * Application is a class for holding application info - * - * @class Application - * @param {string} name the name of the application - * @param {string} uuid the uuid of the application - */ - Usergrid.Application = function(name, uuid) { - this._name = name; - this._uuid = uuid; - }; - Usergrid.Application.prototype = { - getName: function() { - return this._name; - }, - setName: function(name) { - this._name = name; - }, - getUUID: function() { - return this._uuid; - }, - setUUID: function(uuid) { - this._uuid = uuid; - }, - setCurrentApplication: function(app) { - this.setName(app.getName()); - this.setUUID(app.getUUID()); - } - }; - - - /** - * Organization is a class for holding application info - * - * @class Organization - * @param {string} name organization's name - * @param {string} organization's uuid - * @param {string} list organization's applications - */ - Usergrid.Organization = function(name, uuid) { - this._name = name; - this._uuid = uuid; - this._list = []; - }; - - Usergrid.Organization.prototype = { - getName: function() { - return this._name; - }, - setName: function(name) { - this._name = name; - }, - getUUID: function() { - return this._uuid; - }, - setUUID: function(uuid) { - this._uuid = uuid; - }, - setCurrentOrganization: function(org) { - this._name = org.getName(); - this._uuid = org.getUUID(); - this._list = org.getList(); - }, - addItem: function(item) { - var count = this._list.length; - this._list[count] = item; - }, - getItemByName: function(name) { - var count = this._list.length; - var i=0; - if(name){ - for (i=0; i 0) { - return this._list[0]; - } - return null; - }, - getList: function() { - return this._list; - }, - setList: function(list) { - this._list = list; - }, - clearList: function() { - this._list = []; - } - }; - - /** - * Standardized methods for maintaining user and authentication state in the Application - * @class UserSession - */ - Usergrid.userSession = function(){}; - - Usergrid.userSession.prototype = { - //access token access and setter methods - getAccessToken: function() { - var accessToken = localStorage.getItem('accessToken'); - return accessToken; - }, - setAccessToken: function setAccessToken(accessToken) { - localStorage.setItem('accessToken', accessToken); - localStorage.setItem('apigee_token', accessToken); - }, - //logged in user access and setter methods - getUserUUID: function () { - return localStorage.getItem('userUUID'); - }, - setUserUUID: function (uuid) { - localStorage.setItem('userUUID', uuid); - }, - getUserEmail: function () { - return localStorage.getItem('userEmail'); - }, - setUserEmail: function (email) { - localStorage.setItem('userEmail', email); - localStorage.setItem('apigee_email', email); - }, - hideBanner: function(){ - localStorage.setItem('showBanner', 'false'); - }, - showBanner: function(){ - localStorage.setItem('showBanner', 'true'); - }, - getBannerState: function(){ - return localStorage.getItem('showBanner'); - }, - //convenience method to verify if user is logged in - loggedIn: function () { - var token = this.getAccessToken(); - var email = this.getUserEmail(); - return (token && email); - }, - - //convenience method for saving all active user vars at once - saveAll: function (uuid, email, accessToken) { - this.setUserUUID(uuid); - this.setUserEmail(email); - this.setAccessToken(accessToken); - }, - - //convenience method for clearing all active user vars at once - clearAll: function () { - localStorage.removeItem('userUUID'); - localStorage.removeItem('userEmail'); - localStorage.removeItem('accessToken'); - localStorage.removeItem('apigee_oken'); - localStorage.removeItem('apigee_email'); - } - }; -})(Usergrid); - -Usergrid.userSession = new Usergrid.userSession(); diff --git a/deleted/archive/js/app/sso.js b/deleted/archive/js/app/sso.js deleted file mode 100644 index ca46e0880d..0000000000 --- a/deleted/archive/js/app/sso.js +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Usergrid.SSO - * SSO functions apigee specific - * - * Requires: - * Usergrid.ApiClient - */ -(function () { - Usergrid.SSO = function () { - }; - - Usergrid.SSO.prototype = { - - default : { - top_level_domain: "apigee.com", - test_top_level_domain: "appservices.apigee.com", - local_domain: "localhost", - use_sso: true, // flag to override use SSO if needed set to ?use_sso=no - login_url: "https://accounts.apigee.com/accounts/sign_in", - profile_url: "https://accounts.apigee.com/accounts/my_account", - logout_url: "https://accounts.apigee.com/accounts/sign_out", - api_url: "https://api.usergrid.com/" - }, - - isTopLevelDomain:function () { - if ( window.location.hostname === this.default.top_level_domain || - window.location.hostname === this.default.test_top_level_domain || - window.location.hostname === this.default.local_domain || - location.pathname.indexOf('/dit') >= 0 || - location.pathname.indexOf('/mars') >= 0 - ) - { - return true; - }else{ - return false; - } - - }, - - usingSSO:function () { - return this.getSSO() && this.isTopLevelDomain(); - }, - - getSSO:function (){ - return this.default.use_sso; - }, - - getSSOCallback:function (urlCallback) { - - var url = this.buildBaseUrl(); - - if(urlCallback) { - url += "#" + urlCallback; - } - - - if (Usergrid.ApiClient.getApiUrl() !== undefined && (Usergrid.ApiClient.getApiUrl() !== this.default.api_url)) { - var separatorMark = '&'; - url += separatorMark + 'api_url=' + Usergrid.ApiClient.getApiUrl(); - } - console.log(url); - //url = encodeURIComponent(url); - return'?callback=' + url; - }, - - buildBaseUrl:function () { - var baseUrl = window.location.protocol + '//' + window.location.host + window.location.pathname; - return baseUrl; - }, - - sendToSSOLogoutPage:function (callbackUrl) { - var url = this.default.logout_url; - if(window.location.host === 'localhost'){ - //DIT - url = 'https://accounts.jupiter.apigee.net/accounts/sign_out'; - }if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/dit') >= 0){ - //DIT - url = 'https://accounts.jupiter.apigee.net/accounts/sign_out'; - }else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/mars') >= 0 ){ - //staging - url = 'https://accounts.mars.apigee.net/accounts/sign_out'; - }else{ - url = this.default.logout_url; - } - url = url + this.getSSOCallback(); - window.location = url; - }, - - sendToSSOLoginPage:function () { - var url = this.default.login_url; - if(window.location.host === 'localhost'){ - //DIT - url = 'https://accounts.jupiter.apigee.net/accounts/sign_in'; - }else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/dit') >= 0){ - //DIT - url = 'https://accounts.jupiter.apigee.net/accounts/sign_in'; - }else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/mars') >= 0 ){ - //staging - url = 'https://accounts.mars.apigee.net/accounts/sign_in'; - }else{ - url = this.default.login_url; - } - url = url + this.getSSOCallback(); - window.location = url; - }, - - sendToSSOProfilePage:function (callbackUrl) { - var url = this.default.profile_url; - if(window.location.host === 'localhost'){ - //DIT - url = 'https://accounts.jupiter.apigee.net/accounts/my_account'; - } else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/dit') >= 0){ - //DIT - url = 'https://accounts.jupiter.apigee.net/accounts/my_account'; - } else if(window.location.host === 'appservices.apigee.com' && location.pathname.indexOf('/mars') >= 0 ){ - //staging - url = 'https://accounts.mars.apigee.net/accounts/my_account'; - }else{ - url = this.default.profile_url; - } - url = url + this.getSSOCallback(); - window.location = url; - }, - - setUseSSO:function (sso) { - if (sso == 'yes' || sso == 'true') { - this.default.use_sso = true; - } else if (sso == 'no' || sso == 'false') { - this.default.use_sso = false; - } - } - }; -})(Usergrid); - -Usergrid.SSO = new Usergrid.SSO(); \ No newline at end of file diff --git a/deleted/archive/js/app/status.js b/deleted/archive/js/app/status.js deleted file mode 100644 index 20a18a1233..0000000000 --- a/deleted/archive/js/app/status.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * User: David S - * Date: 17/02/12 - * Time: 12:43 PM - */ -var StatusBar = function () { - var self = { - box: null - }; - - self.Init = function(boxSelector){ - self.box = $(boxSelector); - }; - - self.showAlert = function (msg, type) { - if (!type) { - type = 'info'; - } - - var closebutton = '×' - var item = $('
    ' + msg + closebutton + '
    '); - self.box.find(".alert").remove(); - self.box.show().prepend(item); - item.show(); - - }; - - self.hideAlert = function () { - self.box.hide(); - }; - - closeErrorMessage = function() { - self.box.hide(); - }; - - return self; -}(); diff --git a/deleted/archive/js/app/ui/collections.entity.js b/deleted/archive/js/app/ui/collections.entity.js deleted file mode 100644 index 83bc8e0eb5..0000000000 --- a/deleted/archive/js/app/ui/collections.entity.js +++ /dev/null @@ -1,320 +0,0 @@ -window.Usergrid = window.Usergrid || {}; -Usergrid.console = Usergrid.console || {}; -Usergrid.console.ui = Usergrid.console.ui || { }; -Usergrid.console.ui.collections = Usergrid.console.ui.collections || { }; - -(function() { - // This code block *WILL* load before the document is complete - - var entity_list_item = { - options: { - }, - - _create: function() { - - var self = this; - var o = self.options; - var el = self.element; - - var entity_id = el.dataset('entity-id'); - var entity_type = el.dataset('entity-type'); - var entity = Usergrid.console.getQueryResultEntity(entity_id); - if (!entity) return; - o.entity = entity; - o.path = el.dataset('collection-path'); - - o.header = self.getHeader(); - o.collections = self.getCollections(); - o.contents = self.getContents(); - o.metadata = self.getMetadata(); - o.json = self.getJson(); - - o.header.appendTo(el); - o.collections.appendTo(el); - o.contents.appendTo(el); - o.metadata.appendTo(el); - o.json.appendTo(el); - - o.header.find(".button").button(); - - var contents_button = o.header.find(".query-result-header-toggle-contents"); - contents_button.click(function() { - if (o.contents.css('display') == 'none') { - o.contents.show(); - o.json.hide(); - o.collections.hide(); - } else { - o.contents.hide(); - } - return false; - }); - - var json_button = o.header.find(".query-result-header-toggle-json"); - json_button.click(function() { - if (o.json.css('display') == 'none') { - o.json.show(); - o.contents.hide(); - o.collections.hide(); - } else { - o.json.hide(); - } - return false; - }); - - var collections_button = o.header.find(".query-result-header-toggle-collections"); - collections_button.click(function() { - if (o.collections.css('display') == 'none') { - o.collections.show(); - o.contents.hide(); - o.json.hide(); - } else { - o.collections.hide(); - } - return false; - }); - - var metadata_button = o.header.find(".query-result-header-toggle-metadata"); - metadata_button.click(function() { - o.metadata.toggle(); - return false; - }); - - var link_button = o.header.find(".query-result-header-link"); - }, - - getHeader : function() { - var entity = this.options.entity, - name = entity.uuid + " : " + entity.type; - - if (entity.name) { - name = name + " : " + entity.name; - } else if (entity.username) { - name = name + " : " + entity.username; - } else if (entity.title) { - name = name + " : " + entity.title; - } - - var collections = { - entity : entity, - name : name, - path : this.options.path, - collections : !$.isEmptyObject((entity.metadata || { }).collections || (entity.metadata || { }).connections), - uri : (entity.metadata || { }).uri - } - - if(entity.type === 'user' || entity.picture){ - if (!entity.picture) { - entity.picture = "/images/user-photo.png" - } else { - entity.picture = entity.picture + "?d=http://" + window.location.host + window.location.pathname + "images/user-photo.png" - } - collections['picture'] = entity.picture; - } - - return $.tmpl("apigee.ui.collections.entity.header.html", - collections); - - }, - - getCollections : function() { - var entity = this.options.entity; - - var collections = $.extend({ }, (entity.metadata || { }).collections, (entity.metadata || { }).connections); - - if (!$.isEmptyObject(collections)) { - return $.tmpl("apigee.ui.collections.entity.collections.html", { - collections : collections - }, { - makeObjectTable : Usergrid.console.ui.makeObjectTable, - tableOpts : Usergrid.console.ui.standardTableOpts - }); - } - return $(""); - }, - - getContents : function() { - var entity_contents = $.extend( false, { }, this.options.entity); - try { // metadata may or may not be present - var path = entity_contents['metadata']['path']; - entity_contents = $.extend( false, entity_contents, {'path': path}); - var sets = entity_contents['metadata']['sets']; - entity_contents = $.extend( false, entity_contents, {'sets': sets}); - var collections = entity_contents['metadata']['collections']; - entity_contents = $.extend( false, entity_contents, {'collections': collections}); - delete entity_contents['metadata']; - } catch(e) {} - return $.tmpl("apigee.ui.collections.entity.contents.html", { - entity : entity_contents - }, { - makeObjectTable : Usergrid.console.ui.makeObjectTable, - tableOpts : Usergrid.console.ui.standardTableOpts - }); - }, - - getMetadata : function() { - var entity = this.options.entity; - if (!$.isEmptyObject(entity.metadata)) { - return $.tmpl("apigee.ui.collections.entity.metadata.html", { - metadata : entity.metadata - }, { - makeObjectTable : Usergrid.console.ui.makeObjectTable, - tableOpts : Usergrid.console.ui.metadataTableOpts - }); - } - return $(""); - }, - - getJson : function() { - return $.tmpl("apigee.ui.collections.entity.json.html", { - entity : this.options.entity - }, { - makeObjectTable : Usergrid.console.ui.makeObjectTable, - tableOpts : Usergrid.console.ui.standardTableOpts - }); - }, - - destroy: function() { - this.element.html(""); - this.options.entity = null; - this.options.header = null; - this.options.contents = null; - this.options.metadata = null; - this.options.collections = null; - this.options.json = null; - } - - } - Usergrid.console.ui.collections.entity_list_item = entity_list_item; - - var entity_detail = { - options: { - }, - - _create: function() { - - var self = this; - var o = self.options; - var el = self.element; - - var entity_id = el.dataset('entity-id'); - var entity_type = el.dataset('entity-type'); - var entity = Usergrid.console.getQueryResultEntity(entity_id); - if (!entity) return; - o.entity = entity; - o.path = el.dataset('collection-path'); - - o.details = self.getDetails(); - - o.details.appendTo(el); - - o.collections = el.find(".query-result-collections"); - o.details.find(".button").button(); - o.contents = el.find(".query-result-contents"); - o.json = el.find(".query-result-json"); - o.formDiv = el.find(".query-result-form"); - - var content_button = o.details.find(".query-result-header-toggle-contents"); - content_button.click(function() { - if (o.contents.css('display') == 'none') { - o.contents.show(); - o.json.hide(); - o.collections.hide(); - } else { - o.contents.hide(); - } - return false; - }); - - var collections_button = o.details.find(".query-result-header-toggle-collections"); - collections_button.click(function() { - if (o.collections.css('display') == 'none') { - o.collections.show(); - o.contents.hide(); - o.json.hide(); - } else { - o.collections.hide(); - } - return false; - }); - - var json_button = o.details.find(".query-result-header-toggle-json"); - json_button.click(function() { - if (o.json.css('display') == 'none') { - o.json.show(); - o.contents.hide(); - o.collections.hide(); - } else { - o.json.hide(); - } - return false; - }); - - var link_button = o.details.find(".query-result-header-link"); - }, - - getDetails : function() { - var entity = this.options.entity, - name = entity.uuid + " : " + entity.type, - collections, - connections; - - if (entity.name) { - name = name + " : " + entity.name; - } else if (entity.username) { - name = name + " : " + entity.username; - } else if (entity.title) { - name = name + " : " + entity.title; - } - - if(entity.metadata.collections){ - collections = entity.metadata.collections; - } - - if(entity.metadata.connections){ - connections = entity.metadata.connections; - } - - var entity_contents = $.extend( false, { }, this.options.entity); - var path = entity_contents['metadata']['path']; - entity_contents = $.extend( false, entity_contents, {'path': path}); - delete entity_contents['metadata']; - - var metadata = entity.metadata; - if ($.isEmptyObject(metadata)) metadata = null; - - return $.tmpl("apigee.ui.collections.entity.detail.html", { - entity : entity_contents, - name : name, - path : this.options.path, - collections : collections, - connections : connections, - metadata : metadata, - uri : (entity.metadata || { }).uri - }, { - makeObjectTable : Usergrid.console.ui.makeObjectTable, - tableOpts : Usergrid.console.ui.standardTableOpts, - metadataTableOpts : Usergrid.console.ui.metadataTableOpts - }); - - }, - - destroy: function() { - this.element.html(""); - this.options.entity = null; - this.options.details.header = null; - this.options.json = null; - this.options.formDiv = null; - } - - }; - Usergrid.console.ui.collections.entity_detail = entity_detail; - - (function($) { - // This code block *WILL NOT* load before the document is complete - - $.widget("ui.apigee_collections_entity_list_item", entity_list_item); - $.widget("ui.apigee_collections_entity_detail", entity_detail); - - })(jQuery); - -})(); diff --git a/deleted/archive/js/app/ui/collections.user.js b/deleted/archive/js/app/ui/collections.user.js deleted file mode 100644 index 5b2c5616ea..0000000000 --- a/deleted/archive/js/app/ui/collections.user.js +++ /dev/null @@ -1,120 +0,0 @@ -window.Usergrid = window.Usergrid || {}; -Usergrid.console = Usergrid.console || {}; -Usergrid.console.ui = Usergrid.console.ui || { }; -Usergrid.console.ui.collections = Usergrid.console.ui.collections || { }; - -(function($) { - //This code block *WILL NOT* load before the document is complete - - // Simplified vcard in JSON Schema for demonstration purposes - // Every collection will have a JSON Schema available and downloadable from the server - // Empty collections will have a minimal schema that only contains the basic required entity properties - // Developers will be able to upload schemas to collections as well - var vcard_schema = { - "description":"A representation of a person, company, organization, or place", - "type":"object", - "properties":{ - "username":{ - "type":"string", - "optional": true, - "title" : "Username" - }, - "name":{ - "description":"Formatted Name", - "type":"string", - "optional":true, - "title" : "Full Name" - }, - "title":{ - "description":"User Title", - "type":"string", - "optional": true, - "title":"Title" - }, - "url":{ - "type":"string", - "format":"url", - "optional":true, - "title" : "Home Page" - }, - "email":{ - "type":"string", - "format":"email", - "optional":true, - "title" : "Email" - }, - "tel":{ - "type":"string", - "format":"phone", - "optional":true, - "title" : "Telephone" - }, - "picture":{ - "type":"string", - "format":"image", - "optional":true, - "title" : "Picture URL" - }, - "bday":{ - "type":"string", - "format":"date", - "optional":true, - "title" : "Birthday" - }, - "adr":{ - "type":"object", - "properties":{ - "id":{ - "type":"integer" - }, - "addr1":{ - "type":"string", - "title" : "Street 1" - }, - "addr2":{ - "type":"string", - "title" : "Street 2" - }, - "city":{ - "type":"string", - "title" : "City" - }, - "state":{ - "type":"string", - "title" : "State" - }, - "zip":{ - "type":"string", - "title" : "Zip" - }, - "country":{ - "type":"string", - "title" : "Country" - } - }, - "optional":true, - "title" : "Address" - } - } - }; - Usergrid.console.ui.collections.vcard_schema = vcard_schema; - - var group_schema = { - "description":"A representation of a group", - "type":"object", - "properties":{ - "path":{ - "type":"string", - "optional": true, - "title" : "Group Path" - }, - "title":{ - "type":"string", - "optional":true, - "title" : "Display Name" - } - } - }; - Usergrid.console.ui.collections.group_schema = group_schema; - -})(jQuery); diff --git a/deleted/archive/js/app/ui/ui.js b/deleted/archive/js/app/ui/ui.js deleted file mode 100644 index 089bb92834..0000000000 --- a/deleted/archive/js/app/ui/ui.js +++ /dev/null @@ -1,415 +0,0 @@ -window.Usergrid = window.Usergrid || {}; -Usergrid.console = Usergrid.console || {}; -Usergrid.console.ui = Usergrid.console.ui || { }; - -(function() { - //This code block *WILL* load before the document is complete - - function loadTemplate(name) { - $.ajax({ - type: "GET", - url: "templates/" + name, - complete: function(jqXHR, textStatus){ - var html = jqXHR.responseText; - if (html) { - $.template(name, html); - } - } - }); - } - Usergrid.console.ui.loadTemplate = loadTemplate; - - var standardTableOpts = { - "base_css" : "query-result-table", - "links" : { - "metadata.collections*" : "${value}", - "metadata.connections*" : "${value}", - "all_collections*" : "${value}", - "metadata.path" : "${value}", - "*uri" : "${value}", - "*link" : "${value}" - } - }; - Usergrid.console.ui.standardTableOpts = standardTableOpts; - - var metadataTableOpts = { - "base_css" : "query-result-table", - "links" : { - "collections*" : "${value}", - "connections*" : "${value}", - "path" : "${value}", - "uri" : "${value}" - } - }; - Usergrid.console.ui.metadataTableOpts = metadataTableOpts; - - var re1 = /[^a-zA-Z0-9-]/g; - var re2 = /--*/g; - var re3 = /\${value}/g; - function makeObjectTable(obj, opts, parent_k) { - var base_css = opts.base_css; - var doArray = ($.type(obj) == "array"); - - var t = ""; - if (doArray) { - t = "
    "; - } - - for (var k in obj) { - var v = obj[k]; - var full_k = parent_k ? parent_k + "." + k : k; - - var cs = k.replace(re1, "-").replace(re2, "-"); - - var vType = $.type(v); - if ((vType == "object") || (vType == "array")) { - v = makeObjectTable(v, opts, full_k); - } - - if (vType == "object") { - t += ""; - } - else if (vType == "array") { - t += ""; - } - else { - t += ""; - - var links = opts.links; - var link_href = links[full_k]; - if (!link_href) { - link_href = links[parent_k + "*"]; - } - if (!link_href) { - link_href = links["*" + k]; - } - if (link_href) { - v = link_href.replace(re3, v); - } - v = "
    " + v + "
    "; - } - - if (doArray) { - t += ""; - } - else { - t += ""; - t += ""; - } - - t += ""; - } - - t += "
    " + v + "
    " + k + "
    " + v + "
    "; - return t; - } - Usergrid.console.ui.makeObjectTable = makeObjectTable; - - function makeTableFromList(list, width, options) { - var getListItem = null; - var getListItemTemplateOptions = null; - var listItemTemplate = null; - - var onRender = null; - var output = null; - - var tableId = null; - - var tableClass = null; - var rowClass = null; - var cellClass = null; - - var tableStyle = null; - var rowStyle = null; - var cellStyle = null; - - if (options) { - getListItem = options.getListItem; - getListItemTemplateOptions = options.getListItemTemplateOptions; - listItemTemplate = options.listItemTemplate; - - onRender = options.onRender; - output = options.output; - - tableId = options.tableId; - - tableClass = options.tableClass; - rowClass = options.rowClass; - cellClass = options.cellClass; - - tableStyle = options.tableStyle; - rowStyle = options.rowStyle; - cellStyle = options.cellStyle; - } - - tableId = tableId ? " id=\"" + tableId + "\" " : ""; - - tableClass = tableClass ? " class=\"" + tableClass + "\" " : ""; - rowClass = rowClass ? " class=\"" + rowClass + "\" " : ""; - cellClass = cellClass ? " class=\"" + cellClass + "\" " : ""; - - tableStyle = tableStyle ? " style=\"" + tableStyle + "\" " : ""; - rowStyle = rowStyle ? " style=\"" + rowStyle + "\" " : ""; - cellStyle = cellStyle ? " style=\"" + cellStyle + "\" " : ""; - - var t = "\n"; - var i = 0; - if (!width || (width < 1)) width = 1; - var count = (Math.floor((list.length - 1) / width) + 1) * width; - while (i < count) { - if ((i % width) == 0) { - t += "\n"; - } - t += ""; - if (i < list.length) { - if (getListItem) { - t += getListItem(i, i % count, Math.floor(i / count)); - } - else { - t += list[i]; - } - } - t += "\n"; - if (((i + 1) % width) == 0) { - t += "\n"; - } - i++; - } - t += "\n"; - return t; - } - Usergrid.console.ui.makeTableFromList = makeTableFromList; - - function jsonSchemaToDForm(schema, obj) { - var dform = { elements : [] }; - - for (var propName in schema.properties) { - var property = schema.properties[propName]; - var type = property.type; - if (type == "string") { - var value = ''; - try { - var value = obj[propName]; - } catch (e) {} - if (!value) value = ""; - var element = { - "name" : "ui-form-" + propName, - "id" : "ui-form-" + propName, - "caption" : property.title, - "type" : "text", - "value" : value - }; - dform.elements.push(element); - dform.elements.push({ - "type" : "br" - }); - } else if (type == "object") { - var element = jsonSchemaToDForm(property, obj[propName]); - element.type = "fieldset"; - element.caption = property.title; - dform.elements.push(element); - } - } - return dform; - } - Usergrid.console.ui.jsonSchemaToDForm = jsonSchemaToDForm; - - function jsonSchemaToPayload(schema){ - var payloadData = new Object(); - var payload = ''; - for (var propName in schema.properties) { - var property = schema.properties[propName]; - var type = property.type; - if (type == "string") { - var value = $('#ui-form-'+propName).val(); - if (!value) value = ""; - payloadData[propName] = value; - - } else if (type == "object") { - payloadData[propName] = {}; - for (var propName2 in schema.properties[propName].properties) { - var property2 = schema.properties[propName].properties[propName2]; - var type2 = property2.type; - if (type2 == "string") { - var value2 = $('#ui-form-'+propName2).val(); - if (!value) value = ""; - payloadData[propName][propName2] = value2; - - } - } - } - } - return payloadData; - } - Usergrid.console.ui.jsonSchemaToPayload = jsonSchemaToPayload; - - function displayEntityListResponse(query_results, options, response) { - - query_results = query_results || {}; - - var getListItem = null; - var getListItemTemplateOptions = null; - var listItemTemplate = null; - - var output = null; - var prevButton = null; - var nextButton = null; - var nextPrevDiv = null; - - var noEntitiesMsg = ""; - - var onRender = null; - var onNoEntities = null; - var onError = null; - var onRawJson = null; - - if (options) { - getListItem = options.getListItem; - getListItemTemplateOptions = options.getListItemTemplateOptions; - listItemTemplate = options.listItemTemplate; - - output = options.output; - - prevButton = options.prevButton; - nextButton = options.nextButton; - nextPrevDiv = options.nextPrevDiv; - - noEntitiesMsg = options.noEntitiesMsg; - - onRender = options.onRender; - onNoEntities = options.onNoEntities; - onError = options.onError; - onRawJson = options.onRawJson; - } - - query_results.entities = null; - query_results.entities_by_id = null; - query_results.query = query_results.query || { }; - - var t = ""; - if (response.entities && (response.entities.length > 0)) { - - query_results.entities = response.entities; - query_results.entities_by_id = {}; - - // collections is the only one that uses this lower level item, and can't be trusted to be here - // so hardcoding this check for that type and loading it in a try to make sure we don't error out - // in other cases - try { - if (response.entities[0].metadata.collections && - options.output == "#collections-response-table") { - query_results.entities = response.entities[0].metadata.collections; - } - } catch (e) { - //do nothing, this is only to trap errors - } - - if (listItemTemplate) { - $(output).html(""); - } - - var path = response.path || ""; - path = "" + path.match(/[^?]*/); - - for (i in query_results.entities) { - var entity = query_results.entities[i]; - query_results.entities_by_id[entity.uuid] = entity; - - var entity_path = (entity.metadata || {}).path; - if ($.isEmptyObject(entity_path)) { - entity_path = path + "/" + entity.uuid; - } - - if (getListItem) { - t += getListItem(entity, entity_path); - } - else if (listItemTemplate) { - var options = null; - if (getListItemTemplateOptions) { - options = getListItemTemplateOptions(entity, entity_path); - } - if (!options) { - options = {entity: entity, path: entity_path}; - } - $.tmpl(listItemTemplate, options).appendTo(output); - } - } - - if (!listItemTemplate) { - $(output).html(t); - } - - if (onRender) { - onRender(); - } - - if (prevButton) { - if (query_results.query.hasPrevious && query_results.query.hasPrevious()) { - $(prevButton).click(query_results.query.getPrevious); - $(prevButton).show(); - } - else { - $(prevButton).hide(); - } - } - - if (nextButton) { - if (query_results.query.hasNext && query_results.query.hasNext()) { - $(nextButton).click(query_results.query.getNext); - $(nextButton).show(); - } - else { - $(nextButton).hide(); - } - } - - if (nextPrevDiv) { - if (query_results.query.hasPrevious && query_results.query.hasNext && (query_results.query.hasPrevious() || query_results.query.hasNext())) { - $(nextPrevDiv).show(); - } - else { - $(nextPrevDiv).hide(); - } - } - - } else if (response.entities && (response.entities.length == 0)) { - if (nextPrevDiv) { - $(nextPrevDiv).hide(); - } - var s = null; - if (onNoEntities) { - s = onNoEntities(); - } - $(output).html("
    " + (s ? s : noEntitiesMsg) + "
    "); - // This is a hack, will be fixed in API - } else if (response.error && ( - (response.error.exception == "org.usergrid.services.exceptions.ServiceResourceNotFoundException: Service resource not found") || - (response.error.exception == "java.lang.IllegalArgumentException: Not a valid entity value type or null: null"))) { - if (nextPrevDiv) { - $(nextPrevDiv).hide(); - } - var s = null; - if (onError) { - s = onError(); - } - $(output).html("
    " + (s ? s : noEntitiesMsg) + "
    "); - - } else { - $(output).html( - "
    "
    -          + JSON.stringify(response, null, "  ") + "
    "); - if (nextPrevDiv) { - $(nextPrevDiv).hide(); - } - if (onRawJson) { - onRawJson(); - } - } - - $(output).find(".button").button(); - - return query_results; - } - Usergrid.console.ui.displayEntityListResponse = displayEntityListResponse; - -})(); diff --git a/deleted/archive/js/app/usergrid.appSDK.js b/deleted/archive/js/app/usergrid.appSDK.js deleted file mode 100644 index 84bf33f92b..0000000000 --- a/deleted/archive/js/app/usergrid.appSDK.js +++ /dev/null @@ -1,2097 +0,0 @@ -/** - * App SDK is a collection of classes designed to make working with - * the Appigee App Services API as easy as possible. - * Learn more at http://apigee.com/docs - * - * Copyright 2012 Apigee Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -//define the console.log for IE -window.console = window.console || {}; -window.console.log = window.console.log || function() {}; - -//Usergrid namespace encapsulates this SDK -window.Usergrid = window.Usergrid || {}; -Usergrid = Usergrid || {}; -Usergrid.SDK_VERSION = '0.9.9'; - -/** - * Usergrid.Query is a class for holding all query information and paging state - * - * @class Query - * @author Rod Simpson (rod@apigee.com) - */ - -(function () { - - /** - * @constructor - * @param {string} method - * @param {string} path - * @param {object} jsonObj - * @param {object} paramsObj - * @param {function} successCallback - * @param {function} failureCallback - */ - Usergrid.Query = function(method, resource, jsonObj, paramsObj, successCallback, failureCallback) { - //query vars - this._method = method; - this._resource = resource; - this._jsonObj = jsonObj; - this._paramsObj = paramsObj; - this._successCallback = successCallback; - this._failureCallback = failureCallback; - this._filePost = false; - //curl command - will be populated by runQuery function - this._curl = ''; - this._token = false; - - //paging vars - this._cursor = null; - this._next = null; - this._previous = []; - this._start = 0; - this._end = 0; - }; - - Usergrid.Query.prototype = { - setQueryStartTime: function() { - this._start = new Date().getTime(); - }, - - setQueryEndTime: function() { - this._end = new Date().getTime(); - }, - - getQueryTotalTime: function() { - var seconds = 0; - var time = this._end - this._start; - try { - seconds = ((time/10) / 60).toFixed(2); - } catch(e){ return 0; } - return this.getMethod() + " " + this.getResource() + " - " + seconds + " seconds"; - }, - /** - * A method to set all settable parameters of the Query at one time - * - * @public - * @method validateUsername - * @param {string} method - * @param {string} path - * @param {object} jsonObj - * @param {object} paramsObj - * @param {function} successCallback - * @param {function} failureCallback - * @return none - */ - setAllQueryParams: function(method, resource, jsonObj, paramsObj, successCallback, failureCallback) { - this._method = method; - this._resource = resource; - this._jsonObj = jsonObj; - this._paramsObj = paramsObj; - this._successCallback = successCallback; - this._failureCallback = failureCallback; - }, - - /** - * A method to reset all the parameters in one call - * - * @public - * @return none - */ - clearAll: function() { - this._method = null; - this._resource = null; - this._jsonObj = {}; - this._paramsObj = {}; - this._successCallback = null; - this._failureCallback = null; - }, - /** - * Returns the method - * - * @public - * @method getMethod - * @return {string} Returns method - */ - getMethod: function() { - return this._method; - }, - - /** - * sets the method (POST, PUT, DELETE, GET) - * - * @public - * @method setMethod - * @return none - */ - setMethod: function(method) { - this._method = method; - }, - - /** - * Returns the resource - * - * @public - * @method getResource - * @return {string} the resource - */ - getResource: function() { - return this._resource; - }, - - /** - * sets the resource - * - * @public - * @method setResource - * @return none - */ - setResource: function(resource) { - this._resource = resource; - }, - - /** - * Returns the json Object - * - * @public - * @method getJsonObj - * @return {object} Returns the json Object - */ - getJsonObj: function() { - return this._jsonObj; - }, - - /** - * sets the json object - * - * @public - * @method setJsonObj - * @return none - */ - setJsonObj: function(jsonObj) { - this._jsonObj = jsonObj; - }, - /** - * Returns the Query Parameters object - * - * @public - * @method getQueryParams - * @return {object} Returns Query Parameters object - */ - getQueryParams: function() { - return this._paramsObj; - }, - - /** - * sets the query parameter object - * - * @public - * @method setQueryParams - * @return none - */ - setQueryParams: function(paramsObj) { - this._paramsObj = paramsObj; - }, - - /** - * Returns the success callback function - * - * @public - * @method getSuccessCallback - * @return {function} Returns the successCallback - */ - getSuccessCallback: function() { - return this._successCallback; - }, - - /** - * sets the success callback function - * - * @public - * @method setSuccessCallback - * @return none - */ - setSuccessCallback: function(successCallback) { - this._successCallback = successCallback; - }, - - /** - * Calls the success callback function - * - * @public - * @method callSuccessCallback - * @return {boolean} Returns true or false based on if there was a callback to call - */ - callSuccessCallback: function(response) { - if (this._successCallback && typeof(this._successCallback ) === "function") { - this._successCallback(response); - return true; - } else { - return false; - } - }, - - /** - * Returns the failure callback function - * - * @public - * @method getFailureCallback - * @return {function} Returns the failureCallback - */ - getFailureCallback: function() { - return this._failureCallback; - }, - - /** - * sets the failure callback function - * - * @public - * @method setFailureCallback - * @return none - */ - setFailureCallback: function(failureCallback) { - this._failureCallback = failureCallback; - }, - - /** - * Calls the failure callback function - * - * @public - * @method callFailureCallback - * @return {boolean} Returns true or false based on if there was a callback to call - */ - callFailureCallback: function(response) { - if (this._failureCallback && typeof(this._failureCallback) === "function") { - this._failureCallback(response); - return true; - } else { - return false; - } - }, - - /** - * Returns the curl call - * - * @public - * @method getCurl - * @return {function} Returns the curl call - */ - getCurl: function() { - return this._curl; - }, - - /** - * sets the curl call - * - * @public - * @method setCurl - * @return none - */ - setCurl: function(curl) { - this._curl = curl; - }, - - /** - * Returns the Token - * - * @public - * @method getToken - * @return {function} Returns the Token - */ - getToken: function() { - return this._token; - }, - - /** - * Method to set - * - * @public - * @method setToken - * @return none - */ - setToken: function(token) { - this._token = token; - }, - - /** - * Resets the paging pointer (back to original page) - * - * @public - * @method resetPaging - * @return none - */ - resetPaging: function() { - this._previous = []; - this._next = null; - this._cursor = null; - }, - - /** - * Method to determine if there is a previous page of data - * - * @public - * @method hasPrevious - * @return {boolean} true or false based on if there is a previous page - */ - hasPrevious: function() { - return (this._previous.length > 0); - }, - - /** - * Method to set the paging object to get the previous page of data - * - * @public - * @method getPrevious - * @return none - */ - getPrevious: function() { - this._next=null; //clear out next so the comparison will find the next item - this._cursor = this._previous.pop(); - }, - - /** - * Method to determine if there is a next page of data - * - * @public - * @method hasNext - * @return {boolean} true or false based on if there is a next page - */ - hasNext: function(){ - return (this._next); - }, - - /** - * Method to set the paging object to get the next page of data - * - * @public - * @method getNext - * @return none - */ - getNext: function() { - this._previous.push(this._cursor); - this._cursor = this._next; - }, - - /** - * Method to save off the cursor just returned by the last API call - * - * @public - * @method saveCursor - * @return none - */ - saveCursor: function(cursor) { - //if current cursor is different, grab it for next cursor - if (this._next !== cursor) { - this._next = cursor; - } - }, - - /** - * Method to determine if there is a next page of data - * - * @public - * @method getCursor - * @return {string} the current cursor - */ - getCursor: function() { - return this._cursor; - }, - - getFilePost: function() { - return this._filePost; - }, - setFilePost: function(filePost) { - this._filePost = filePost; - } - }; -})(Usergrid); - - -/** - * A class to Model a Usergrid Entity. - * - * @class Entity - * @author Rod Simpson (rod@apigee.com) - */ -(function () { - /** - * Constructor for initializing an entity - * - * @constructor - * @param {string} collectionType - the type of collection to model - * @param {uuid} uuid - (optional), the UUID of the collection if it is known - */ - Usergrid.Entity = function(collectionType, uuid) { - this._collectionType = collectionType; - this._data = {}; - this._uuid = uuid; - }; - - //inherit prototype from Query - Usergrid.Entity.prototype = new Usergrid.Query(); - - /** - * gets the current Entity type - * - * @method getCollectionType - * @return {string} collection type - */ - Usergrid.Entity.prototype.getCollectionType = function (){ - return this._collectionType; - } - - /** - * sets the current Entity type - * - * @method setCollectionType - * @param {string} collectionType - * @return none - */ - Usergrid.Entity.prototype.setCollectionType = function (collectionType){ - this._collectionType = collectionType; - } - - /** - * gets a specific field or the entire data object. If null or no argument - * passed, will return all data, else, will return a specific field - * - * @method get - * @param {string} field - * @return {string} || {object} data - */ - Usergrid.Entity.prototype.get = function (field){ - if (field) { - return this._data[field]; - } else { - return this._data; - } - }, - - /** - * adds a specific field or object to the Entity's data - * - * @method set - * @param {string} item || {object} - * @param {string} value - * @return none - */ - Usergrid.Entity.prototype.set = function (item, value){ - if (typeof item === 'object') { - for(field in item) { - this._data[field] = item[field]; - } - } else if (typeof item === 'string') { - this._data[item] = value; - } else { - this._data = null; - } - } - - /** - * Saves the entity back to the database - * - * @method save - * @public - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Entity.prototype.save = function (successCallback, errorCallback){ - var path = this.getCollectionType(); - //TODO: API will be changed soon to accomodate PUTs via name which create new entities - // This function should be changed to PUT only at that time, and updated to use - // either uuid or name - var method = 'POST'; - if (this.get('uuid')) { - method = 'PUT'; - if (Usergrid.validation.isUUID(this.get('uuid'))) { - path += "/" + this.get('uuid'); - } - } - - //if this is a user, update the password if it has been specified - var data = {}; - if (path == 'users') { - data = this.get(); - var pwdata = {}; - //Note: we have a ticket in to change PUT calls to /users to accept the password change - // once that is done, we will remove this call and merge it all into one - if (data.oldpassword && data.newpassword) { - pwdata.oldpassword = data.oldpassword; - pwdata.newpassword = data.newpassword; - this.runAppQuery(new Usergrid.Query('PUT', 'users/'+uuid+'/password', pwdata, null, - function (response) { - //not calling any callbacks - this section will be merged as soon as API supports - // updating passwords in general PUT call - }, - function (response) { - - } - )); - } - //remove old and new password fields so they don't end up as part of the entity object - delete data.oldpassword; - delete data.newpassword; - } - - //update the entity - var self = this; - - data = {}; - var entityData = this.get(); - //remove system specific properties - for (var item in entityData) { - if (item == 'metadata' || item == 'created' || item == 'modified' || - item == 'type' || item == 'activatted' ) { continue; } - data[item] = entityData[item]; - } - - this.setAllQueryParams(method, path, data, null, - function(response) { - try { - var entity = response.entities[0]; - self.set(entity); - if (typeof(successCallback) === "function"){ - successCallback(response); - } - } catch (e) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - }, - function(response) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - ); - Usergrid.ApiClient.runAppQuery(this); - } - - /** - * refreshes the entity by making a GET call back to the database - * - * @method fetch - * @public - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Entity.prototype.fetch = function (successCallback, errorCallback){ - var path = this.getCollectionType(); - //if a uuid is available, use that, otherwise, use the name - if (this.get('uuid')) { - path += "/" + this.get('uuid'); - } else { - if (path == "users") { - if (this.get("username")) { - path += "/" + this.get("username"); - } else { - console.log('no username specified'); - if (typeof(errorCallback) === "function"){ - console.log('no username specified'); - } - } - } else { - if (this.get()) { - path += "/" + this.get(); - } else { - console.log('no entity identifier specified'); - if (typeof(errorCallback) === "function"){ - console.log('no entity identifier specified'); - } - } - } - } - var self = this; - this.setAllQueryParams('GET', path, null, null, - function(response) { - try { - if (response.user) { - self.set(response.user); - } - var entity = response.entities[0]; - self.set(entity); - if (typeof(successCallback) === "function"){ - successCallback(response); - } - } catch (e) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - }, - function(response) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - ); - Usergrid.ApiClient.runAppQuery(this); - } - - /** - * deletes the entity from the database - will only delete - * if the object has a valid uuid - * - * @method destroy - * @public - * @param {function} successCallback - * @param {function} errorCallback - * @return none - * - */ - Usergrid.Entity.prototype.destroy = function (successCallback, errorCallback){ - var path = this.getCollectionType(); - if (this.get('uuid')) { - path += "/" + this.get('uuid'); - } else { - console.log('Error trying to delete object - no uuid specified.'); - if (typeof(errorCallback) === "function"){ - errorCallback('Error trying to delete object - no uuid specified.'); - } - } - var self = this; - this.setAllQueryParams('DELETE', path, null, null, - function(response) { - //clear out this object - self.set(null); - if (typeof(successCallback) === "function"){ - successCallback(response); - } - }, - function(response) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - ); - Usergrid.ApiClient.runAppQuery(this); - } - -})(Usergrid); - - -/** - * The Collection class models Usergrid Collections. It essentially - * acts as a container for holding Entity objects, while providing - * additional funcitonality such as paging, and saving - * - * @class Collection - * @author Rod Simpson (rod@apigee.com) - */ -(function () { - /** - * Collection is a container class for holding entities - * - * @constructor - * @param {string} collectionPath - the type of collection to model - * @param {uuid} uuid - (optional), the UUID of the collection if it is known - */ - Usergrid.Collection = function(path, uuid) { - this._path = path; - this._uuid = uuid; - this._list = []; - this._Query = new Usergrid.Query(); - this._iterator = -1; //first thing we do is increment, so set to -1 - }; - - Usergrid.Collection.prototype = new Usergrid.Query(); - - /** - * gets the current Collection path - * - * @method getPath - * @return {string} path - */ - Usergrid.Collection.prototype.getPath = function (){ - return this._path; - } - - /** - * sets the Collection path - * - * @method setPath - * @param {string} path - * @return none - */ - Usergrid.Collection.prototype.setPath = function (path){ - this._path = path; - } - - /** - * gets the current Collection UUID - * - * @method getUUID - * @return {string} the uuid - */ - Usergrid.Collection.prototype.getUUID = function (){ - return this._uuid; - } - - /** - * sets the current Collection UUID - * @method setUUID - * @param {string} uuid - * @return none - */ - Usergrid.Collection.prototype.setUUID = function (uuid){ - this._uuid = uuid; - } - - /** - * Adds an Entity to the collection (adds to the local object) - * - * @method addEntity - * @param {object} entity - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Collection.prototype.addEntity = function (entity){ - //then add it to the list - var count = this._list.length; - this._list[count] = entity; - } - - /** - * Adds a new Entity to the collection (saves, then adds to the local object) - * - * @method addNewEntity - * @param {object} entity - * @return none - */ - Usergrid.Collection.prototype.addNewEntity = function (entity,successCallback, errorCallback) { - //add the entity to the list - this.addEntity(entity); - //then save the entity - entity.save(successCallback, errorCallback); - } - - Usergrid.Collection.prototype.destroyEntity = function (entity) { - //first get the entities uuid - var uuid = entity.get('uuid'); - //if the entity has a uuid, delete it - if (Usergrid.validation.isUUID(uuid)) { - //then remove it from the list - var count = this._list.length; - var i=0; - var reorder = false; - for (i=0; i 0) { - return this._list[0]; - } - return null; - } - - /** - * Returns the last Entity of the Entity list - does not affect the iterator - * - * @method getLastEntity - * @return {object} returns an entity object - */ - Usergrid.Collection.prototype.getLastEntity = function (){ - var count = this._list.length; - if (count > 0) { - return this._list[count-1]; - } - return null; - } - - /** - * Entity iteration -Checks to see if there is a "next" entity - * in the list. The first time this method is called on an entity - * list, or after the resetEntityPointer method is called, it will - * return true referencing the first entity in the list - * - * @method hasNextEntity - * @return {boolean} true if there is a next entity, false if not - */ - Usergrid.Collection.prototype.hasNextEntity = function (){ - var next = this._iterator + 1; - if(next >=0 && next < this._list.length) { - return true; - } - return false; - } - - /** - * Entity iteration - Gets the "next" entity in the list. The first - * time this method is called on an entity list, or after the method - * resetEntityPointer is called, it will return the, - * first entity in the list - * - * @method hasNextEntity - * @return {object} entity - */ - Usergrid.Collection.prototype.getNextEntity = function (){ - this._iterator++; - if(this._iterator >= 0 && this._iterator <= this._list.length) { - return this._list[this._iterator]; - } - return false; - } - - /** - * Entity iteration - Checks to see if there is a "previous" - * entity in the list. - * - * @method hasPreviousEntity - * @return {boolean} true if there is a previous entity, false if not - */ - Usergrid.Collection.prototype.hasPreviousEntity = function (){ - var previous = this._iterator - 1; - if(previous >=0 && previous < this._list.length) { - return true; - } - return false; - } - - /** - * Entity iteration - Gets the "previous" entity in the list. - * - * @method getPreviousEntity - * @return {object} entity - */ - Usergrid.Collection.prototype.getPreviousEntity = function (){ - this._iterator--; - if(this._iterator >= 0 && this._iterator <= this._list.length) { - return this.list[this._iterator]; - } - return false; - } - - /** - * Entity iteration - Resets the iterator back to the beginning - * of the list - * - * @method resetEntityPointer - * @return none - */ - Usergrid.Collection.prototype.resetEntityPointer = function (){ - this._iterator = -1; - } - - /** - * gets and array of all entities currently in the colleciton object - * - * @method getEntityList - * @return {array} returns an array of entity objects - */ - Usergrid.Collection.prototype.getEntityList = function (){ - return this._list; - } - - /** - * sets the entity list - * - * @method setEntityList - * @param {array} list - an array of Entity objects - * @return none - */ - Usergrid.Collection.prototype.setEntityList = function (list){ - this._list = list; - } - - /** - * Paging - checks to see if there is a next page od data - * - * @method hasNextPage - * @return {boolean} returns true if there is a next page of data, false otherwise - */ - Usergrid.Collection.prototype.hasNextPage = function (){ - return this.hasNext(); - } - - /** - * Paging - advances the cursor and gets the next - * page of data from the API. Stores returned entities - * in the Entity list. - * - * @method getNextPage - * @return none - */ - Usergrid.Collection.prototype.getNextPage = function (){ - if (this.hasNext()) { - //set the cursor to the next page of data - this.getNext(); - //empty the list - this.setEntityList([]); - Usergrid.ApiClient.runAppQuery(this); - } - } - - /** - * Paging - checks to see if there is a previous page od data - * - * @method hasPreviousPage - * @return {boolean} returns true if there is a previous page of data, false otherwise - */ - Usergrid.Collection.prototype.hasPreviousPage = function (){ - return this.hasPrevious(); - } - - /** - * Paging - reverts the cursor and gets the previous - * page of data from the API. Stores returned entities - * in the Entity list. - * - * @method getPreviousPage - * @return none - */ - Usergrid.Collection.prototype.getPreviousPage = function (){ - if (this.hasPrevious()) { - this.getPrevious(); - //empty the list - this.setEntityList([]); - Usergrid.ApiClient.runAppQuery(this); - } - } - - /** - * clears the query parameters object - * - * @method clearQuery - * @return none - */ - Usergrid.Collection.prototype.clearQuery = function (){ - this.clearAll(); - } - - //The get() function is deprecated. Including here for backwards compatibility - //with previous versions of the SDK - Usergrid.Collection.prototype.get = function (successCallback, errorCallback){ - Usergrid.Collection.fetch(successCallback, errorCallback); - } - - /** - * A method to get all items in the collection, as dictated by the - * cursor and the query. By default, the API returns 10 items in - * a given call. This can be overriden so that more or fewer items - * are returned. The entities returned are all stored in the colleciton - * object's entity list, and can be retrieved by calling getEntityList() - * - * @method get - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Collection.prototype.fetch = function (successCallback, errorCallback){ - var self = this; - var queryParams = this.getQueryParams(); - //empty the list - this.setEntityList([]); - this.setAllQueryParams('GET', this.getPath(), null, queryParams, - function(response) { - if (response.entities) { - this.resetEntityPointer(); - var count = response.entities.length; - for (var i=0;i 1)) { - tail.push(item[0] + "=" + encodeURIComponent(item[1])); - } - } - } else { - for (var key in params) { - if (params.hasOwnProperty(key)) { - var value = params[key]; - if (value instanceof Array) { - for (i in value) { - item = value[i]; - tail.push(key + "=" + encodeURIComponent(item)); - } - } else { - tail.push(key + "=" + encodeURIComponent(value)); - } - } - } - } - return tail.join("&"); - } - - /* - * A private method to get the type of the current api call - (Management or Application) - * - * @method getQueryType - * @private - * @return {string} the call type - */ - function getQueryType() { - return _queryType; - } - /* - * A private method to set the type of the current api call - (Management or Application) - * - * @method setQueryType - * @private - * @param {string} call type - * @return none - */ - function setQueryType(type) { - _queryType = type; - } - - /** - * A private method to validate, prepare,, and make the calls to the API - * Use runAppQuery or runManagementQuery to make your calls! - * - * @method run - * @private - * @params {object} Usergrid.Query - {method, path, jsonObj, params, successCallback, failureCallback} - * @params {string} endpoint - used to differentiate between management and app queries - * @return {response} callback functions return API response object - */ - function run (Query, endpoint) { - var curl = "curl"; - //validate parameters - try { - //verify that the query object is valid - if(!(Query instanceof Usergrid.Query)) { - throw(new Error('Query is not a valid object.')); - } - //for timing, call start - Query.setQueryStartTime(); - //peel the data out of the query object - var method = Query.getMethod().toUpperCase(); - var path = Query.getResource(); - var jsonObj = Query.getJsonObj() || {}; - var params = Query.getQueryParams() || {}; - - var formData = Query.getJsonObj(); - - //method - should be GET, POST, PUT, or DELETE only - if (method != 'GET' && method != 'POST' && method != 'PUT' && method != 'DELETE') { - throw(new Error('Invalid method - should be GET, POST, PUT, or DELETE.')); - } - //curl - add the method to the command (no need to add anything for GET) - if (method == "POST") {curl += " -X POST"; } - else if (method == "PUT") { curl += " -X PUT"; } - else if (method == "DELETE") { curl += " -X DELETE"; } - else { curl += " -X GET"; } - - //curl - append the bearer token if this is not the sandbox app - var application_name = Usergrid.ApiClient.getApplicationName(); - if (application_name) { - application_name = application_name.toUpperCase(); - } - //if (application_name != 'SANDBOX' && Usergrid.ApiClient.getToken()) { - if ( Usergrid.ApiClient.getToken() ) { // || (getQueryType() == Usergrid.M && Usergrid.ApiClient.getToken())) { - curl += ' -i -H "Authorization: Bearer ' + Usergrid.ApiClient.getToken() + '"'; - Query.setToken(true); - } - - //params - make sure we have a valid json object - _params = JSON.stringify(params); - if (!JSON.parse(_params)) { - throw(new Error('Params object is not valid.')); - } - - //add in the cursor if one is available - if (Query.getCursor()) { - params.cursor = Query.getCursor(); - } else { - delete params.cursor; - } - - //strip off the leading slash of the endpoint if there is one - endpoint = endpoint.indexOf('/') == 0 ? endpoint.substring(1) : endpoint; - - //add the endpoint to the path - path = endpoint + path; - - //make sure path never has more than one / together - if (path) { - //regex to strip multiple slashes - while(path.indexOf('//') != -1){ - path = path.replace('//', '/'); - } - } - - //add the http:// bit on the front - path = Usergrid.ApiClient.getApiUrl() + path; - - //curl - append the path - curl += ' "' + path; - - //curl - append params to the path for curl prior to adding the timestamp - var curl_encoded_params = encodeParams(params); - if (curl_encoded_params) { - curl += "?" + curl_encoded_params; - } - curl += '"'; - - //add in a timestamp for gets and deletes - to avoid caching by the browser - if ((method == "GET") || (method == "DELETE")) { - params['_'] = new Date().getTime(); - } - - if (Usergrid.ApiClient.getToken() && Query.getToken()) { - params['access_token'] = Usergrid.ApiClient.getToken(); - } - - //append params to the path - var encoded_params = encodeParams(params); - if (encoded_params) { - path += "?" + encoded_params; - } - - //jsonObj - make sure we have a valid json object - jsonObj = JSON.stringify(jsonObj) - if (!JSON.parse(jsonObj)) { - throw(new Error('JSON object is not valid.')); - } - if (jsonObj == '{}') { - jsonObj = null; - } else { - //curl - add in the json obj - curl += " -d '" + jsonObj + "'"; - } - - } catch (e) { - //parameter was invalid - console.log('error occured running query -' + e.message); - return false; - } - //log the curl command to the console - console.log(curl); - //store the curl command back in the object - Query.setCurl(curl); - - var filePost = Query.getFilePost(); - - //so far so good, so run the query - var xD = window.XDomainRequest ? true : false; - var xhr = getXHR(method, path, jsonObj, filePost); - - // Handle response. - /* - xhr.onerror = function() { - //for timing, call end - Query.setQueryEndTime(); - //for timing, log the total call time - console.log(Query.getQueryTotalTime()); - //network error - clearTimeout(timeout); - console.log('API call failed at the network level.'); - //send back an error (best we can do with what ie gives back) - Query.callFailureCallback(response.innerText); - };*/ - xhr.xdomainOnload = function (response) { - //for timing, call end - Query.setQueryEndTime(); - //for timing, log the total call time - console.log('Call timing: ' + Query.getQueryTotalTime()); - //call completed - clearTimeout(timeout); - //decode the response - response = JSON.parse(xhr.responseText); - //if a cursor was present, grab it - try { - var cursor = response.cursor || null; - Query.saveCursor(cursor); - }catch(e) {} - Query.callSuccessCallback(response); - }; - xhr.onload = function(response) { - //for timing, call end - Query.setQueryEndTime(); - //for timing, log the total call time - console.log('Call timing: ' + Query.getQueryTotalTime()); - //call completed - clearTimeout(timeout); - //decode the response - response = JSON.parse(xhr.responseText); - if (xhr.status != 200 && !xD) { - //there was an api error - try { - var error = response.error; - console.log('API call failed: (status: '+xhr.status+') ' + response.error_description); - if ( (error == "auth_expired_session_token") || - (error == "auth_missing_credentials") || - (error == "auth_unverified_oath") || - (error == "expired_token") || - (error == "unauthorized") || - (error == "auth_invalid")) { - //this error type means the user is not authorized. If a logout function is defined, call it - console.log('Auth error: ' + error); - callLogoutCallback(); - } - } catch(e){} - //otherwise, just call the failure callback - Query.callFailureCallback(response.error); - return; - } else { - //query completed succesfully, so store cursor - var cursor = response.cursor || null; - Query.saveCursor(cursor); - //then call the original callback - Query.callSuccessCallback(response); - } - }; - - var timeout = setTimeout( - function() { - xhr.abort(); - if ( typeof(Usergrid.ApiClient.getCallTimeoutCallback()) === 'function') { - Usergrid.ApiClient.callTimeoutCallback('API CALL TIMEOUT'); - } else if (typeof(Query.getFailureCallback()) === 'function'){ - Query.callFailureCallback('API CALL TIMEOUT'); - } - }, - Usergrid.ApiClient.getCallTimeout()); //set for 30 seconds - - - if (filePost) { - xhr.send(formData); - } else { - xhr.send(jsonObj); - } - } - - /** - * A private method to return the XHR object - * - * @method getXHR - * @private - * @params {string} method (GET,POST,PUT,DELETE) - * @params {string} path - api endpoint to call - * @return {object} jsonObj - the json object if there is one - */ - function getXHR(method, path, jsonObj, filePost) { - var xhr; - if(window.XDomainRequest) - { - xhr = new window.XDomainRequest(); - if (Usergrid.ApiClient.getToken()) { - if (path.indexOf("?")) { - path += '&access_token='+Usergrid.ApiClient.getToken(); - } else { - path = '?access_token='+Usergrid.ApiClient.getToken(); - } - } - xhr.open(method, path, true); - } - else - { - xhr = new XMLHttpRequest(); - xhr.open(method, path, true); - //add content type = json if there is a json payload - if (!filePost) { - xhr.setRequestHeader("Content-Type", "application/json"); - xhr.setRequestHeader("Accept", "application/json"); - } - /* - if (Usergrid.ApiClient.getToken()) { - xhr.setRequestHeader("Authorization", "Bearer " + Usergrid.ApiClient.getToken()); - xhr.withCredentials = true; - }*/ - } - return xhr; - } - - return { - init:init, - runAppQuery:runAppQuery, - runManagementQuery:runManagementQuery, - getOrganizationName:getOrganizationName, - setOrganizationName:setOrganizationName, - getApplicationName:getApplicationName, - setApplicationName:setApplicationName, - getToken:getToken, - setToken:setToken, - getCallTimeout:getCallTimeout, - setCallTimeout:setCallTimeout, - getCallTimeoutCallback:getCallTimeoutCallback, - setCallTimeoutCallback:setCallTimeoutCallback, - callTimeoutCallback:callTimeoutCallback, - getApiUrl:getApiUrl, - setApiUrl:setApiUrl, - getResetPasswordUrl:getResetPasswordUrl, - getLoggedInUser:getLoggedInUser, - setLoggedInUser:setLoggedInUser, - logInAppUser:logInAppUser, - renewAppUserToken:renewAppUserToken, - logoutAppUser:logoutAppUser, - isLoggedInAppUser:isLoggedInAppUser, - getLogoutCallback:getLogoutCallback, - setLogoutCallback:setLogoutCallback, - callLogoutCallback:callLogoutCallback - } -})(); - -/** - * validation is a Singleton that provides methods for validating common field types - * - * @class Usergrid.validation - * @author Rod Simpson (rod@apigee.com) -**/ -Usergrid.validation = (function () { - - var usernameRegex = new RegExp("^([0-9a-zA-Z\.\-])+$"); - var nameRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?;:.,'\"~*-=+_\[\\](){}/\\ |])+$"); - var emailRegex = new RegExp("^(([0-9a-zA-Z]+[_\+.-]?)+@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$"); - var passwordRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?<>;:.,'\"~*-=+_\[\\](){}/\\ |])+$"); - var pathRegex = new RegExp("^([0-9a-z./-])+$"); - var titleRegex = new RegExp("^([0-9a-zA-Z.!-?/])+$"); - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateUsername - * @param {string} username - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateUsername(username, failureCallback) { - if (usernameRegex.test(username) && checkLength(username, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getUsernameAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getUsernameAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getUsernameAllowedChars(){ - return 'Length: min 4, max 80. Allowed: A-Z, a-z, 0-9, dot, and dash'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateName - * @param {string} name - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateName(name, failureCallback) { - if (nameRegex.test(name) && checkLength(name, 4, 16)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getNameAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getNameAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getNameAllowedChars(){ - return 'Length: min 4, max 80. Allowed: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . / ? !'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validatePassword - * @param {string} password - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validatePassword(password, failureCallback) { - if (passwordRegex.test(password) && checkLength(password, 5, 16)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getPasswordAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getPasswordAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getPasswordAllowedChars(){ - return 'Length: min 5, max 16. Allowed: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . < > / ? !'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateEmail - * @param {string} email - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateEmail(email, failureCallback) { - if (emailRegex.test(email) && checkLength(email, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getEmailAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getEmailAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getEmailAllowedChars(){ - return 'Email must be in standard form: e.g. example@Usergrid.com'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validatePath - * @param {string} path - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validatePath(path, failureCallback) { - if (pathRegex.test(path) && checkLength(path, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getPathAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getPathAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getPathAllowedChars(){ - return 'Length: min 4, max 80. Allowed: /, a-z, 0-9, dot, and dash'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateTitle - * @param {string} title - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateTitle(title, failureCallback) { - if (titleRegex.test(title) && checkLength(title, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getTitleAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getTitleAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getTitleAllowedChars(){ - return 'Length: min 4, max 80. Allowed: space, A-Z, a-z, 0-9, dot, dash, /, !, and ?'; - } - - /** - * Tests if the string is the correct length - * - * @public - * @method checkLength - * @param {string} string - The string to test - * @param {integer} min - the lower bound - * @param {integer} max - the upper bound - * @return {boolean} Returns true if string is correct length, false if not - */ - function checkLength(string, min, max) { - if (string.length > max || string.length < min) { - return false; - } - return true; - } - - /** - * Tests if the string is a uuid - * - * @public - * @method isUUID - * @param {string} uuid The string to test - * @returns {Boolean} true if string is uuid - */ - function isUUID (uuid) { - var uuidValueRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; - if (!uuid) return false; - return uuidValueRegex.test(uuid); - } - - return { - validateUsername:validateUsername, - getUsernameAllowedChars:getUsernameAllowedChars, - validateName:validateName, - getNameAllowedChars:getNameAllowedChars, - validatePassword:validatePassword, - getPasswordAllowedChars:getPasswordAllowedChars, - validateEmail:validateEmail, - getEmailAllowedChars:getEmailAllowedChars, - validatePath:validatePath, - getPathAllowedChars:getPathAllowedChars, - validateTitle:validateTitle, - getTitleAllowedChars:getTitleAllowedChars, - isUUID:isUUID - } -})(); diff --git a/deleted/archive/js/app/usergrid.appSDK.orig.js b/deleted/archive/js/app/usergrid.appSDK.orig.js deleted file mode 100644 index 4e80c642fc..0000000000 --- a/deleted/archive/js/app/usergrid.appSDK.orig.js +++ /dev/null @@ -1,2070 +0,0 @@ -/** - * App SDK is a collection of classes designed to make working with - * the Appigee App Services API as easy as possible. - * Learn more at http://apigee.com/docs - * - * Copyright 2012 Apigee Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -//define the console.log for IE -window.console = window.console || {}; -window.console.log = window.console.log || function() {}; - -//Usergrid namespace encapsulates this SDK -window.Usergrid = window.Usergrid || {}; -Usergrid = Usergrid || {}; -Usergrid.SDK_VERSION = '0.9.9'; - -/** - * Usergrid.Query is a class for holding all query information and paging state - * - * @class Query - * @author Rod Simpson (rod@apigee.com) - */ - -(function () { - - /** - * @constructor - * @param {string} method - * @param {string} path - * @param {object} jsonObj - * @param {object} paramsObj - * @param {function} successCallback - * @param {function} failureCallback - */ - Usergrid.Query = function(method, resource, jsonObj, paramsObj, successCallback, failureCallback) { - //query vars - this._method = method; - this._resource = resource; - this._jsonObj = jsonObj; - this._paramsObj = paramsObj; - this._successCallback = successCallback; - this._failureCallback = failureCallback; - - //curl command - will be populated by runQuery function - this._curl = ''; - this._token = false; - - //paging vars - this._cursor = null; - this._next = null; - this._previous = []; - this._start = 0; - this._end = 0; - }; - - Usergrid.Query.prototype = { - setQueryStartTime: function() { - this._start = new Date().getTime(); - }, - - setQueryEndTime: function() { - this._end = new Date().getTime(); - }, - - getQueryTotalTime: function() { - var seconds = 0; - var time = this._end - this._start; - try { - seconds = ((time/10) / 60).toFixed(2); - } catch(e){ return 0; } - return this.getMethod() + " " + this.getResource() + " - " + seconds + " seconds"; - }, - /** - * A method to set all settable parameters of the Query at one time - * - * @public - * @method validateUsername - * @param {string} method - * @param {string} path - * @param {object} jsonObj - * @param {object} paramsObj - * @param {function} successCallback - * @param {function} failureCallback - * @return none - */ - setAllQueryParams: function(method, resource, jsonObj, paramsObj, successCallback, failureCallback) { - this._method = method; - this._resource = resource; - this._jsonObj = jsonObj; - this._paramsObj = paramsObj; - this._successCallback = successCallback; - this._failureCallback = failureCallback; - }, - - /** - * A method to reset all the parameters in one call - * - * @public - * @return none - */ - clearAll: function() { - this._method = null; - this._resource = null; - this._jsonObj = {}; - this._paramsObj = {}; - this._successCallback = null; - this._failureCallback = null; - }, - /** - * Returns the method - * - * @public - * @method getMethod - * @return {string} Returns method - */ - getMethod: function() { - return this._method; - }, - - /** - * sets the method (POST, PUT, DELETE, GET) - * - * @public - * @method setMethod - * @return none - */ - setMethod: function(method) { - this._method = method; - }, - - /** - * Returns the resource - * - * @public - * @method getResource - * @return {string} the resource - */ - getResource: function() { - return this._resource; - }, - - /** - * sets the resource - * - * @public - * @method setResource - * @return none - */ - setResource: function(resource) { - this._resource = resource; - }, - - /** - * Returns the json Object - * - * @public - * @method getJsonObj - * @return {object} Returns the json Object - */ - getJsonObj: function() { - return this._jsonObj; - }, - - /** - * sets the json object - * - * @public - * @method setJsonObj - * @return none - */ - setJsonObj: function(jsonObj) { - this._jsonObj = jsonObj; - }, - /** - * Returns the Query Parameters object - * - * @public - * @method getQueryParams - * @return {object} Returns Query Parameters object - */ - getQueryParams: function() { - return this._paramsObj; - }, - - /** - * sets the query parameter object - * - * @public - * @method setQueryParams - * @return none - */ - setQueryParams: function(paramsObj) { - this._paramsObj = paramsObj; - }, - - /** - * Returns the success callback function - * - * @public - * @method getSuccessCallback - * @return {function} Returns the successCallback - */ - getSuccessCallback: function() { - return this._successCallback; - }, - - /** - * sets the success callback function - * - * @public - * @method setSuccessCallback - * @return none - */ - setSuccessCallback: function(successCallback) { - this._successCallback = successCallback; - }, - - /** - * Calls the success callback function - * - * @public - * @method callSuccessCallback - * @return {boolean} Returns true or false based on if there was a callback to call - */ - callSuccessCallback: function(response) { - if (this._successCallback && typeof(this._successCallback ) === "function") { - this._successCallback(response); - return true; - } else { - return false; - } - }, - - /** - * Returns the failure callback function - * - * @public - * @method getFailureCallback - * @return {function} Returns the failureCallback - */ - getFailureCallback: function() { - return this._failureCallback; - }, - - /** - * sets the failure callback function - * - * @public - * @method setFailureCallback - * @return none - */ - setFailureCallback: function(failureCallback) { - this._failureCallback = failureCallback; - }, - - /** - * Calls the failure callback function - * - * @public - * @method callFailureCallback - * @return {boolean} Returns true or false based on if there was a callback to call - */ - callFailureCallback: function(response) { - if (this._failureCallback && typeof(this._failureCallback) === "function") { - this._failureCallback(response); - return true; - } else { - return false; - } - }, - - /** - * Returns the curl call - * - * @public - * @method getCurl - * @return {function} Returns the curl call - */ - getCurl: function() { - return this._curl; - }, - - /** - * sets the curl call - * - * @public - * @method setCurl - * @return none - */ - setCurl: function(curl) { - this._curl = curl; - }, - - /** - * Returns the Token - * - * @public - * @method getToken - * @return {function} Returns the Token - */ - getToken: function() { - return this._token; - }, - - /** - * Method to set - * - * @public - * @method setToken - * @return none - */ - setToken: function(token) { - this._token = token; - }, - - /** - * Resets the paging pointer (back to original page) - * - * @public - * @method resetPaging - * @return none - */ - resetPaging: function() { - this._previous = []; - this._next = null; - this._cursor = null; - }, - - /** - * Method to determine if there is a previous page of data - * - * @public - * @method hasPrevious - * @return {boolean} true or false based on if there is a previous page - */ - hasPrevious: function() { - return (this._previous.length > 0); - }, - - /** - * Method to set the paging object to get the previous page of data - * - * @public - * @method getPrevious - * @return none - */ - getPrevious: function() { - this._next=null; //clear out next so the comparison will find the next item - this._cursor = this._previous.pop(); - }, - - /** - * Method to determine if there is a next page of data - * - * @public - * @method hasNext - * @return {boolean} true or false based on if there is a next page - */ - hasNext: function(){ - return (this._next); - }, - - /** - * Method to set the paging object to get the next page of data - * - * @public - * @method getNext - * @return none - */ - getNext: function() { - this._previous.push(this._cursor); - this._cursor = this._next; - }, - - /** - * Method to save off the cursor just returned by the last API call - * - * @public - * @method saveCursor - * @return none - */ - saveCursor: function(cursor) { - //if current cursor is different, grab it for next cursor - if (this._next !== cursor) { - this._next = cursor; - } - }, - - /** - * Method to determine if there is a next page of data - * - * @public - * @method getCursor - * @return {string} the current cursor - */ - getCursor: function() { - return this._cursor; - } - }; -})(Usergrid); - - -/** - * A class to Model a Usergrid Entity. - * - * @class Entity - * @author Rod Simpson (rod@apigee.com) - */ -(function () { - /** - * Constructor for initializing an entity - * - * @constructor - * @param {string} collectionType - the type of collection to model - * @param {uuid} uuid - (optional), the UUID of the collection if it is known - */ - Usergrid.Entity = function(collectionType, uuid) { - this._collectionType = collectionType; - this._data = {}; - this._uuid = uuid; - }; - - //inherit prototype from Query - Usergrid.Entity.prototype = new Usergrid.Query(); - - /** - * gets the current Entity type - * - * @method getCollectionType - * @return {string} collection type - */ - Usergrid.Entity.prototype.getCollectionType = function (){ - return this._collectionType; - } - - /** - * sets the current Entity type - * - * @method setCollectionType - * @param {string} collectionType - * @return none - */ - Usergrid.Entity.prototype.setCollectionType = function (collectionType){ - this._collectionType = collectionType; - } - - /** - * gets a specific field or the entire data object. If null or no argument - * passed, will return all data, else, will return a specific field - * - * @method get - * @param {string} field - * @return {string} || {object} data - */ - Usergrid.Entity.prototype.get = function (field){ - if (field) { - return this._data[field]; - } else { - return this._data; - } - }, - - /** - * adds a specific field or object to the Entity's data - * - * @method set - * @param {string} item || {object} - * @param {string} value - * @return none - */ - Usergrid.Entity.prototype.set = function (item, value){ - if (typeof item === 'object') { - for(field in item) { - this._data[field] = item[field]; - } - } else if (typeof item === 'string') { - this._data[item] = value; - } else { - this._data = null; - } - } - - /** - * Saves the entity back to the database - * - * @method save - * @public - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Entity.prototype.save = function (successCallback, errorCallback){ - var path = this.getCollectionType(); - //TODO: API will be changed soon to accomodate PUTs via name which create new entities - // This function should be changed to PUT only at that time, and updated to use - // either uuid or name - var method = 'POST'; - if (this.get('uuid')) { - method = 'PUT'; - if (Usergrid.validation.isUUID(this.get('uuid'))) { - path += "/" + this.get('uuid'); - } - } - - //if this is a user, update the password if it has been specified - var data = {}; - if (path == 'users') { - data = this.get(); - var pwdata = {}; - //Note: we have a ticket in to change PUT calls to /users to accept the password change - // once that is done, we will remove this call and merge it all into one - if (data.oldpassword && data.newpassword) { - pwdata.oldpassword = data.oldpassword; - pwdata.newpassword = data.newpassword; - this.runAppQuery(new Usergrid.Query('PUT', 'users/'+uuid+'/password', pwdata, null, - function (response) { - //not calling any callbacks - this section will be merged as soon as API supports - // updating passwords in general PUT call - }, - function (response) { - - } - )); - } - //remove old and new password fields so they don't end up as part of the entity object - delete data.oldpassword; - delete data.newpassword; - } - - //update the entity - var self = this; - - data = {}; - var entityData = this.get(); - //remove system specific properties - for (var item in entityData) { - if (item == 'metadata' || item == 'created' || item == 'modified' || - item == 'type' || item == 'activatted' ) { continue; } - data[item] = entityData[item]; - } - - this.setAllQueryParams(method, path, data, null, - function(response) { - try { - var entity = response.entities[0]; - self.set(entity); - if (typeof(successCallback) === "function"){ - successCallback(response); - } - } catch (e) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - }, - function(response) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - ); - Usergrid.ApiClient.runAppQuery(this); - } - - /** - * refreshes the entity by making a GET call back to the database - * - * @method fetch - * @public - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Entity.prototype.fetch = function (successCallback, errorCallback){ - var path = this.getCollectionType(); - //if a uuid is available, use that, otherwise, use the name - if (this.get('uuid')) { - path += "/" + this.get('uuid'); - } else { - if (path == "users") { - if (this.get("username")) { - path += "/" + this.get("username"); - } else { - console.log('no username specified'); - if (typeof(errorCallback) === "function"){ - console.log('no username specified'); - } - } - } else { - if (this.get()) { - path += "/" + this.get(); - } else { - console.log('no entity identifier specified'); - if (typeof(errorCallback) === "function"){ - console.log('no entity identifier specified'); - } - } - } - } - var self = this; - this.setAllQueryParams('GET', path, null, null, - function(response) { - try { - if (response.user) { - self.set(response.user); - } - var entity = response.entities[0]; - self.set(entity); - if (typeof(successCallback) === "function"){ - successCallback(response); - } - } catch (e) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - }, - function(response) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - ); - Usergrid.ApiClient.runAppQuery(this); - } - - /** - * deletes the entity from the database - will only delete - * if the object has a valid uuid - * - * @method destroy - * @public - * @param {function} successCallback - * @param {function} errorCallback - * @return none - * - */ - Usergrid.Entity.prototype.destroy = function (successCallback, errorCallback){ - var path = this.getCollectionType(); - if (this.get('uuid')) { - path += "/" + this.get('uuid'); - } else { - console.log('Error trying to delete object - no uuid specified.'); - if (typeof(errorCallback) === "function"){ - errorCallback('Error trying to delete object - no uuid specified.'); - } - } - var self = this; - this.setAllQueryParams('DELETE', path, null, null, - function(response) { - //clear out this object - self.set(null); - if (typeof(successCallback) === "function"){ - successCallback(response); - } - }, - function(response) { - if (typeof(errorCallback) === "function"){ - errorCallback(response); - } - } - ); - Usergrid.ApiClient.runAppQuery(this); - } - -})(Usergrid); - - -/** - * The Collection class models Usergrid Collections. It essentially - * acts as a container for holding Entity objects, while providing - * additional funcitonality such as paging, and saving - * - * @class Collection - * @author Rod Simpson (rod@apigee.com) - */ -(function () { - /** - * Collection is a container class for holding entities - * - * @constructor - * @param {string} collectionPath - the type of collection to model - * @param {uuid} uuid - (optional), the UUID of the collection if it is known - */ - Usergrid.Collection = function(path, uuid) { - this._path = path; - this._uuid = uuid; - this._list = []; - this._Query = new Usergrid.Query(); - this._iterator = -1; //first thing we do is increment, so set to -1 - }; - - Usergrid.Collection.prototype = new Usergrid.Query(); - - /** - * gets the current Collection path - * - * @method getPath - * @return {string} path - */ - Usergrid.Collection.prototype.getPath = function (){ - return this._path; - } - - /** - * sets the Collection path - * - * @method setPath - * @param {string} path - * @return none - */ - Usergrid.Collection.prototype.setPath = function (path){ - this._path = path; - } - - /** - * gets the current Collection UUID - * - * @method getUUID - * @return {string} the uuid - */ - Usergrid.Collection.prototype.getUUID = function (){ - return this._uuid; - } - - /** - * sets the current Collection UUID - * @method setUUID - * @param {string} uuid - * @return none - */ - Usergrid.Collection.prototype.setUUID = function (uuid){ - this._uuid = uuid; - } - - /** - * Adds an Entity to the collection (adds to the local object) - * - * @method addEntity - * @param {object} entity - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Collection.prototype.addEntity = function (entity){ - //then add it to the list - var count = this._list.length; - this._list[count] = entity; - } - - /** - * Adds a new Entity to the collection (saves, then adds to the local object) - * - * @method addNewEntity - * @param {object} entity - * @return none - */ - Usergrid.Collection.prototype.addNewEntity = function (entity,successCallback, errorCallback) { - //add the entity to the list - this.addEntity(entity); - //then save the entity - entity.save(successCallback, errorCallback); - } - - Usergrid.Collection.prototype.destroyEntity = function (entity) { - //first get the entities uuid - var uuid = entity.get('uuid'); - //if the entity has a uuid, delete it - if (Usergrid.validation.isUUID(uuid)) { - //then remove it from the list - var count = this._list.length; - var i=0; - var reorder = false; - for (i=0; i 0) { - return this._list[0]; - } - return null; - } - - /** - * Returns the last Entity of the Entity list - does not affect the iterator - * - * @method getLastEntity - * @return {object} returns an entity object - */ - Usergrid.Collection.prototype.getLastEntity = function (){ - var count = this._list.length; - if (count > 0) { - return this._list[count-1]; - } - return null; - } - - /** - * Entity iteration -Checks to see if there is a "next" entity - * in the list. The first time this method is called on an entity - * list, or after the resetEntityPointer method is called, it will - * return true referencing the first entity in the list - * - * @method hasNextEntity - * @return {boolean} true if there is a next entity, false if not - */ - Usergrid.Collection.prototype.hasNextEntity = function (){ - var next = this._iterator + 1; - if(next >=0 && next < this._list.length) { - return true; - } - return false; - } - - /** - * Entity iteration - Gets the "next" entity in the list. The first - * time this method is called on an entity list, or after the method - * resetEntityPointer is called, it will return the, - * first entity in the list - * - * @method hasNextEntity - * @return {object} entity - */ - Usergrid.Collection.prototype.getNextEntity = function (){ - this._iterator++; - if(this._iterator >= 0 && this._iterator <= this._list.length) { - return this._list[this._iterator]; - } - return false; - } - - /** - * Entity iteration - Checks to see if there is a "previous" - * entity in the list. - * - * @method hasPreviousEntity - * @return {boolean} true if there is a previous entity, false if not - */ - Usergrid.Collection.prototype.hasPreviousEntity = function (){ - var previous = this._iterator - 1; - if(previous >=0 && previous < this._list.length) { - return true; - } - return false; - } - - /** - * Entity iteration - Gets the "previous" entity in the list. - * - * @method getPreviousEntity - * @return {object} entity - */ - Usergrid.Collection.prototype.getPreviousEntity = function (){ - this._iterator--; - if(this._iterator >= 0 && this._iterator <= this._list.length) { - return this.list[this._iterator]; - } - return false; - } - - /** - * Entity iteration - Resets the iterator back to the beginning - * of the list - * - * @method resetEntityPointer - * @return none - */ - Usergrid.Collection.prototype.resetEntityPointer = function (){ - this._iterator = -1; - } - - /** - * gets and array of all entities currently in the colleciton object - * - * @method getEntityList - * @return {array} returns an array of entity objects - */ - Usergrid.Collection.prototype.getEntityList = function (){ - return this._list; - } - - /** - * sets the entity list - * - * @method setEntityList - * @param {array} list - an array of Entity objects - * @return none - */ - Usergrid.Collection.prototype.setEntityList = function (list){ - this._list = list; - } - - /** - * Paging - checks to see if there is a next page od data - * - * @method hasNextPage - * @return {boolean} returns true if there is a next page of data, false otherwise - */ - Usergrid.Collection.prototype.hasNextPage = function (){ - return this.hasNext(); - } - - /** - * Paging - advances the cursor and gets the next - * page of data from the API. Stores returned entities - * in the Entity list. - * - * @method getNextPage - * @return none - */ - Usergrid.Collection.prototype.getNextPage = function (){ - if (this.hasNext()) { - //set the cursor to the next page of data - this.getNext(); - //empty the list - this.setEntityList([]); - Usergrid.ApiClient.runAppQuery(this); - } - } - - /** - * Paging - checks to see if there is a previous page od data - * - * @method hasPreviousPage - * @return {boolean} returns true if there is a previous page of data, false otherwise - */ - Usergrid.Collection.prototype.hasPreviousPage = function (){ - return this.hasPrevious(); - } - - /** - * Paging - reverts the cursor and gets the previous - * page of data from the API. Stores returned entities - * in the Entity list. - * - * @method getPreviousPage - * @return none - */ - Usergrid.Collection.prototype.getPreviousPage = function (){ - if (this.hasPrevious()) { - this.getPrevious(); - //empty the list - this.setEntityList([]); - Usergrid.ApiClient.runAppQuery(this); - } - } - - /** - * clears the query parameters object - * - * @method clearQuery - * @return none - */ - Usergrid.Collection.prototype.clearQuery = function (){ - this.clearAll(); - } - - //The get() function is deprecated. Including here for backwards compatibility - //with previous versions of the SDK - Usergrid.Collection.prototype.get = function (successCallback, errorCallback){ - Usergrid.Collection.fetch(successCallback, errorCallback); - } - - /** - * A method to get all items in the collection, as dictated by the - * cursor and the query. By default, the API returns 10 items in - * a given call. This can be overriden so that more or fewer items - * are returned. The entities returned are all stored in the colleciton - * object's entity list, and can be retrieved by calling getEntityList() - * - * @method get - * @param {function} successCallback - * @param {function} errorCallback - * @return none - */ - Usergrid.Collection.prototype.fetch = function (successCallback, errorCallback){ - var self = this; - var queryParams = this.getQueryParams(); - //empty the list - this.setEntityList([]); - this.setAllQueryParams('GET', this.getPath(), null, queryParams, - function(response) { - if (response.entities) { - this.resetEntityPointer(); - var count = response.entities.length; - for (var i=0;i 1)) { - tail.push(item[0] + "=" + encodeURIComponent(item[1])); - } - } - } else { - for (var key in params) { - if (params.hasOwnProperty(key)) { - var value = params[key]; - if (value instanceof Array) { - for (i in value) { - item = value[i]; - tail.push(key + "=" + encodeURIComponent(item)); - } - } else { - tail.push(key + "=" + encodeURIComponent(value)); - } - } - } - } - return tail.join("&"); - } - - /* - * A private method to get the type of the current api call - (Management or Application) - * - * @method getQueryType - * @private - * @return {string} the call type - */ - function getQueryType() { - return _queryType; - } - /* - * A private method to set the type of the current api call - (Management or Application) - * - * @method setQueryType - * @private - * @param {string} call type - * @return none - */ - function setQueryType(type) { - _queryType = type; - } - - /** - * A private method to validate, prepare,, and make the calls to the API - * Use runAppQuery or runManagementQuery to make your calls! - * - * @method run - * @private - * @params {object} Usergrid.Query - {method, path, jsonObj, params, successCallback, failureCallback} - * @params {string} endpoint - used to differentiate between management and app queries - * @return {response} callback functions return API response object - */ - function run (Query, endpoint) { - var curl = "curl"; - //validate parameters - try { - //verify that the query object is valid - if(!(Query instanceof Usergrid.Query)) { - throw(new Error('Query is not a valid object.')); - } - //for timing, call start - Query.setQueryStartTime(); - //peel the data out of the query object - var method = Query.getMethod().toUpperCase(); - var path = Query.getResource(); - var jsonObj = Query.getJsonObj() || {}; - var params = Query.getQueryParams() || {}; - - //method - should be GET, POST, PUT, or DELETE only - if (method != 'GET' && method != 'POST' && method != 'PUT' && method != 'DELETE') { - throw(new Error('Invalid method - should be GET, POST, PUT, or DELETE.')); - } - //curl - add the method to the command (no need to add anything for GET) - if (method == "POST") {curl += " -X POST"; } - else if (method == "PUT") { curl += " -X PUT"; } - else if (method == "DELETE") { curl += " -X DELETE"; } - else { curl += " -X GET"; } - - //curl - append the bearer token if this is not the sandbox app - var application_name = Usergrid.ApiClient.getApplicationName(); - if (application_name) { - application_name = application_name.toUpperCase(); - } - //if (application_name != 'SANDBOX' && Usergrid.ApiClient.getToken()) { - if ( (application_name != 'SANDBOX' && Usergrid.ApiClient.getToken()) || (getQueryType() == Usergrid.M && Usergrid.ApiClient.getToken())) { - curl += ' -i -H "Authorization: Bearer ' + Usergrid.ApiClient.getToken() + '"'; - Query.setToken(true); - } - - //params - make sure we have a valid json object - _params = JSON.stringify(params); - if (!JSON.parse(_params)) { - throw(new Error('Params object is not valid.')); - } - - //add in the cursor if one is available - if (Query.getCursor()) { - params.cursor = Query.getCursor(); - } else { - delete params.cursor; - } - - //strip off the leading slash of the endpoint if there is one - endpoint = endpoint.indexOf('/') == 0 ? endpoint.substring(1) : endpoint; - - //add the endpoint to the path - path = endpoint + path; - - //make sure path never has more than one / together - if (path) { - //regex to strip multiple slashes - while(path.indexOf('//') != -1){ - path = path.replace('//', '/'); - } - } - - //add the http:// bit on the front - path = Usergrid.ApiClient.getApiUrl() + path; - - //curl - append the path - curl += ' "' + path; - - //curl - append params to the path for curl prior to adding the timestamp - var curl_encoded_params = encodeParams(params); - if (curl_encoded_params) { - curl += "?" + curl_encoded_params; - } - curl += '"'; - - //add in a timestamp for gets and deletes - to avoid caching by the browser - if ((method == "GET") || (method == "DELETE")) { - params['_'] = new Date().getTime(); - } - - //append params to the path - var encoded_params = encodeParams(params); - if (encoded_params) { - path += "?" + encoded_params; - } - - //jsonObj - make sure we have a valid json object - jsonObj = JSON.stringify(jsonObj) - if (!JSON.parse(jsonObj)) { - throw(new Error('JSON object is not valid.')); - } - if (jsonObj == '{}') { - jsonObj = null; - } else { - //curl - add in the json obj - curl += " -d '" + jsonObj + "'"; - } - - } catch (e) { - //parameter was invalid - console.log('error occured running query -' + e.message); - return false; - } - //log the curl command to the console - console.log(curl); - //store the curl command back in the object - Query.setCurl(curl); - - //so far so good, so run the query - var xD = window.XDomainRequest ? true : false; - var xhr = getXHR(method, path, jsonObj); - - // Handle response. - /* - xhr.onerror = function() { - //for timing, call end - Query.setQueryEndTime(); - //for timing, log the total call time - console.log(Query.getQueryTotalTime()); - //network error - clearTimeout(timeout); - console.log('API call failed at the network level.'); - //send back an error (best we can do with what ie gives back) - Query.callFailureCallback(response.innerText); - };*/ - xhr.xdomainOnload = function (response) { - //for timing, call end - Query.setQueryEndTime(); - //for timing, log the total call time - console.log('Call timing: ' + Query.getQueryTotalTime()); - //call completed - clearTimeout(timeout); - //decode the response - response = JSON.parse(xhr.responseText); - //if a cursor was present, grab it - try { - var cursor = response.cursor || null; - Query.saveCursor(cursor); - }catch(e) {} - Query.callSuccessCallback(response); - }; - xhr.onload = function(response) { - //for timing, call end - Query.setQueryEndTime(); - //for timing, log the total call time - console.log('Call timing: ' + Query.getQueryTotalTime()); - //call completed - clearTimeout(timeout); - //decode the response - response = JSON.parse(xhr.responseText); - if (xhr.status != 200 && !xD) { - //there was an api error - try { - var error = response.error; - console.log('API call failed: (status: '+xhr.status+').' + error.type); - if ( (error == "auth_expired_session_token") || - (error == "unauthorized") || - (error == "auth_missing_credentials") || - (error == "auth_invalid")) { - //this error type means the user is not authorized. If a logout function is defined, call it - callLogoutCallback(); - }} catch(e){} - //otherwise, just call the failure callback - Query.callFailureCallback(response.error_description); - return; - } else { - //query completed succesfully, so store cursor - var cursor = response.cursor || null; - Query.saveCursor(cursor); - //then call the original callback - Query.callSuccessCallback(response); - } - }; - - var timeout = setTimeout( - function() { - xhr.abort(); - if ( typeof(Usergrid.ApiClient.getCallTimeoutCallback()) === 'function') { - Usergrid.ApiClient.callTimeoutCallback('API CALL TIMEOUT'); - } else if (typeof(Query.getFailureCallback()) === 'function'){ - Query.callFailureCallback('API CALL TIMEOUT'); - } - }, - Usergrid.ApiClient.getCallTimeout()); //set for 30 seconds - - xhr.send(jsonObj); - } - - /** - * A private method to return the XHR object - * - * @method getXHR - * @private - * @params {string} method (GET,POST,PUT,DELETE) - * @params {string} path - api endpoint to call - * @return {object} jsonObj - the json object if there is one - */ - function getXHR(method, path, jsonObj) { - var xhr; - if(window.XDomainRequest) - { - xhr = new window.XDomainRequest(); - if (Usergrid.ApiClient.getToken()) { - if (path.indexOf("?")) { - path += '&access_token='+Usergrid.ApiClient.getToken(); - } else { - path = '?access_token='+Usergrid.ApiClient.getToken(); - } - } - xhr.open(method, path, true); - } - else - { - xhr = new XMLHttpRequest(); - xhr.open(method, path, true); - //add content type = json if there is a json payload - if (jsonObj) { - xhr.setRequestHeader("Content-Type", "application/json"); - } - if (Usergrid.ApiClient.getToken()) { - xhr.setRequestHeader("Authorization", "Bearer " + Usergrid.ApiClient.getToken()); - xhr.withCredentials = true; - } - } - return xhr; - } - - return { - init:init, - runAppQuery:runAppQuery, - runManagementQuery:runManagementQuery, - getOrganizationName:getOrganizationName, - setOrganizationName:setOrganizationName, - getApplicationName:getApplicationName, - setApplicationName:setApplicationName, - getToken:getToken, - setToken:setToken, - getCallTimeout:getCallTimeout, - setCallTimeout:setCallTimeout, - getCallTimeoutCallback:getCallTimeoutCallback, - setCallTimeoutCallback:setCallTimeoutCallback, - callTimeoutCallback:callTimeoutCallback, - getApiUrl:getApiUrl, - setApiUrl:setApiUrl, - getResetPasswordUrl:getResetPasswordUrl, - getLoggedInUser:getLoggedInUser, - setLoggedInUser:setLoggedInUser, - logInAppUser:logInAppUser, - renewAppUserToken:renewAppUserToken, - logoutAppUser:logoutAppUser, - isLoggedInAppUser:isLoggedInAppUser, - getLogoutCallback:getLogoutCallback, - setLogoutCallback:setLogoutCallback, - callLogoutCallback:callLogoutCallback - } -})(); - -/** - * validation is a Singleton that provides methods for validating common field types - * - * @class Usergrid.validation - * @author Rod Simpson (rod@apigee.com) -**/ -Usergrid.validation = (function () { - - var usernameRegex = new RegExp("^([0-9a-zA-Z\.\-])+$"); - var nameRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?;:.,'\"~*-=+_\[\\](){}/\\ |])+$"); - var emailRegex = new RegExp("^(([0-9a-zA-Z]+[_\+.-]?)+@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$"); - var passwordRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?<>;:.,'\"~*-=+_\[\\](){}/\\ |])+$"); - var pathRegex = new RegExp("^([0-9a-z./-])+$"); - var titleRegex = new RegExp("^([0-9a-zA-Z.!-?/])+$"); - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateUsername - * @param {string} username - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateUsername(username, failureCallback) { - if (usernameRegex.test(username) && checkLength(username, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getUsernameAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getUsernameAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getUsernameAllowedChars(){ - return 'Length: min 4, max 80. Allowed: A-Z, a-z, 0-9, dot, and dash'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateName - * @param {string} name - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateName(name, failureCallback) { - if (nameRegex.test(name) && checkLength(name, 4, 16)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getNameAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getNameAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getNameAllowedChars(){ - return 'Length: min 4, max 80. Allowed: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . / ? !'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validatePassword - * @param {string} password - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validatePassword(password, failureCallback) { - if (passwordRegex.test(password) && checkLength(password, 5, 16)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getPasswordAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getPasswordAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getPasswordAllowedChars(){ - return 'Length: min 5, max 16. Allowed: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . < > / ? !'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateEmail - * @param {string} email - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateEmail(email, failureCallback) { - if (emailRegex.test(email) && checkLength(email, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getEmailAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getEmailAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getEmailAllowedChars(){ - return 'Email must be in standard form: e.g. example@Usergrid.com'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validatePath - * @param {string} path - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validatePath(path, failureCallback) { - if (pathRegex.test(path) && checkLength(path, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getPathAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getPathAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getPathAllowedChars(){ - return 'Length: min 4, max 80. Allowed: /, a-z, 0-9, dot, and dash'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateTitle - * @param {string} title - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateTitle(title, failureCallback) { - if (titleRegex.test(title) && checkLength(title, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getTitleAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getTitleAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getTitleAllowedChars(){ - return 'Length: min 4, max 80. Allowed: space, A-Z, a-z, 0-9, dot, dash, /, !, and ?'; - } - - /** - * Tests if the string is the correct length - * - * @public - * @method checkLength - * @param {string} string - The string to test - * @param {integer} min - the lower bound - * @param {integer} max - the upper bound - * @return {boolean} Returns true if string is correct length, false if not - */ - function checkLength(string, min, max) { - if (string.length > max || string.length < min) { - return false; - } - return true; - } - - /** - * Tests if the string is a uuid - * - * @public - * @method isUUID - * @param {string} uuid The string to test - * @returns {Boolean} true if string is uuid - */ - function isUUID (uuid) { - var uuidValueRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; - if (!uuid) return false; - return uuidValueRegex.test(uuid); - } - - return { - validateUsername:validateUsername, - getUsernameAllowedChars:getUsernameAllowedChars, - validateName:validateName, - getNameAllowedChars:getNameAllowedChars, - validatePassword:validatePassword, - getPasswordAllowedChars:getPasswordAllowedChars, - validateEmail:validateEmail, - getEmailAllowedChars:getEmailAllowedChars, - validatePath:validatePath, - getPathAllowedChars:getPathAllowedChars, - validateTitle:validateTitle, - getTitleAllowedChars:getTitleAllowedChars, - isUUID:isUUID - } -})(); \ No newline at end of file diff --git a/deleted/archive/js/lib/MD5.min.js b/deleted/archive/js/lib/MD5.min.js deleted file mode 100644 index 0bfc085c7d..0000000000 --- a/deleted/archive/js/lib/MD5.min.js +++ /dev/null @@ -1 +0,0 @@ -var MD5=function(a){function n(a){a=a.replace(/\r\n/g,"\n");var b="";for(var c=0;c127&&d<2048){b+=String.fromCharCode(d>>6|192);b+=String.fromCharCode(d&63|128)}else{b+=String.fromCharCode(d>>12|224);b+=String.fromCharCode(d>>6&63|128);b+=String.fromCharCode(d&63|128)}}return b}function m(a){var b="",c="",d,e;for(e=0;e<=3;e++){d=a>>>e*8&255;c="0"+d.toString(16);b=b+c.substr(c.length-2,2)}return b}function l(a){var b;var c=a.length;var d=c+8;var e=(d-d%64)/64;var f=(e+1)*16;var g=Array(f-1);var h=0;var i=0;while(i>>29;return g}function k(a,d,e,f,h,i,j){a=c(a,c(c(g(d,e,f),h),j));return c(b(a,i),d)}function j(a,d,e,g,h,i,j){a=c(a,c(c(f(d,e,g),h),j));return c(b(a,i),d)}function i(a,d,f,g,h,i,j){a=c(a,c(c(e(d,f,g),h),j));return c(b(a,i),d)}function h(a,e,f,g,h,i,j){a=c(a,c(c(d(e,f,g),h),j));return c(b(a,i),e)}function g(a,b,c){return b^(a|~c)}function f(a,b,c){return a^b^c}function e(a,b,c){return a&c|b&~c}function d(a,b,c){return a&b|~a&c}function c(a,b){var c,d,e,f,g;e=a&2147483648;f=b&2147483648;c=a&1073741824;d=b&1073741824;g=(a&1073741823)+(b&1073741823);if(c&d){return g^2147483648^e^f}if(c|d){if(g&1073741824){return g^3221225472^e^f}else{return g^1073741824^e^f}}else{return g^e^f}}function b(a,b){return a<>>32-b}var o=Array();var p,q,r,s,t,u,v,w,x;var y=7,z=12,A=17,B=22;var C=5,D=9,E=14,F=20;var G=4,H=11,I=16,J=23;var K=6,L=10,M=15,N=21;a=n(a);o=l(a);u=1732584193;v=4023233417;w=2562383102;x=271733878;for(p=0;p').hide().appendTo('body')[0].contentWindow; - this.navigate(fragment); - } - - // Depending on whether we're using pushState or hashes, and whether - // 'onhashchange' is supported, determine how we check the URL state. - if (this._hasPushState) { - $(window).bind('popstate', this.checkUrl); - } else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) { - $(window).bind('hashchange', this.checkUrl); - } else if (this._wantsHashChange) { - this._checkUrlInterval = setInterval(this.checkUrl, this.interval); - } - - // Determine if we need to change the base url, for a pushState link - // opened by a non-pushState browser. - this.fragment = fragment; - var loc = window.location; - var atRoot = loc.pathname == this.options.root; - - // If we've started off with a route from a `pushState`-enabled browser, - // but we're currently in a browser that doesn't support it... - if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !atRoot) { - this.fragment = this.getFragment(null, true); - window.location.replace(this.options.root + '#' + this.fragment); - // Return immediately as browser will do redirect to new url - return true; - - // Or if we've started out with a hash-based route, but we're currently - // in a browser where it could be `pushState`-based instead... - } else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) { - this.fragment = this.getHash().replace(routeStripper, ''); - window.history.replaceState({}, document.title, loc.protocol + '//' + loc.host + this.options.root + this.fragment); - } - - if (!this.options.silent) { - return this.loadUrl(); - } - }, - - // Disable Backbone.history, perhaps temporarily. Not useful in a real app, - // but possibly useful for unit testing Routers. - stop: function() { - $(window).unbind('popstate', this.checkUrl).unbind('hashchange', this.checkUrl); - clearInterval(this._checkUrlInterval); - History.started = false; - }, - - // Add a route to be tested when the fragment changes. Routes added later - // may override previous routes. - route: function(route, callback) { - this.handlers.unshift({route: route, callback: callback}); - }, - - // Checks the current URL to see if it has changed, and if it has, - // calls `loadUrl`, normalizing across the hidden iframe. - checkUrl: function(e) { - var current = this.getFragment(); - if (current == this.fragment && this.iframe) current = this.getFragment(this.getHash(this.iframe)); - if (current == this.fragment) return false; - if (this.iframe) this.navigate(current); - this.loadUrl() || this.loadUrl(this.getHash()); - }, - - // Attempt to load the current URL fragment. If a route succeeds with a - // match, returns `true`. If no defined routes matches the fragment, - // returns `false`. - loadUrl: function(fragmentOverride) { - var fragment = this.fragment = this.getFragment(fragmentOverride); - var matched = _.any(this.handlers, function(handler) { - if (handler.route.test(fragment)) { - handler.callback(fragment); - return true; - } - }); - return matched; - }, - - // Save a fragment into the hash history, or replace the URL state if the - // 'replace' option is passed. You are responsible for properly URL-encoding - // the fragment in advance. - // - // The options object can contain `trigger: true` if you wish to have the - // route callback be fired (not usually desirable), or `replace: true`, if - // you wish to modify the current URL without adding an entry to the history. - navigate: function(fragment, options) { - if (!History.started) return false; - if (!options || options === true) options = {trigger: options}; - var frag = (fragment || '').replace(routeStripper, ''); - if (this.fragment == frag) return; - - // If pushState is available, we use it to set the fragment as a real URL. - if (this._hasPushState) { - if (frag.indexOf(this.options.root) != 0) frag = this.options.root + frag; - this.fragment = frag; - window.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, frag); - - // If hash changes haven't been explicitly disabled, update the hash - // fragment to store history. - } else if (this._wantsHashChange) { - this.fragment = frag; - this._updateHash(window.location, frag, options.replace); - if (this.iframe && (frag != this.getFragment(this.getHash(this.iframe)))) { - // Opening and closing the iframe tricks IE7 and earlier to push a history entry on hash-tag change. - // When replace is true, we don't want this. - if(!options.replace) this.iframe.document.open().close(); - this._updateHash(this.iframe.location, frag, options.replace); - } - - // If you've told us that you explicitly don't want fallback hashchange- - // based history, then `navigate` becomes a page refresh. - } else { - window.location.assign(this.options.root + fragment); - } - if (options.trigger) this.loadUrl(fragment); - }, - - // Update the hash location, either replacing the current entry, or adding - // a new one to the browser history. - _updateHash: function(location, fragment, replace) { - if (replace) { - location.replace(location.toString().replace(/(javascript:|#).*$/, '') + '#' + fragment); - } else { - location.hash = fragment; - } - } - }); - - // Backbone.View - // ------------- - - // Creating a Backbone.View creates its initial element outside of the DOM, - // if an existing element is not provided... - var View = Backbone.View = function(options) { - this.cid = _.uniqueId('view'); - this._configure(options || {}); - this._ensureElement(); - this.initialize.apply(this, arguments); - this.delegateEvents(); - }; - - // Cached regex to split keys for `delegate`. - var delegateEventSplitter = /^(\S+)\s*(.*)$/; - - // List of view options to be merged as properties. - var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName']; - - // Set up all inheritable **Backbone.View** properties and methods. - _.extend(View.prototype, Events, { - - // The default `tagName` of a View's element is `"div"`. - tagName: 'div', - - // jQuery delegate for element lookup, scoped to DOM elements within the - // current view. This should be prefered to global lookups where possible. - $: function(selector) { - return this.$el.find(selector); - }, - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // **render** is the core function that your view should override, in order - // to populate its element (`this.el`), with the appropriate HTML. The - // convention is for **render** to always return `this`. - render: function() { - return this; - }, - - // Remove this view from the DOM. Note that the view isn't present in the - // DOM by default, so calling this method may be a no-op. - remove: function() { - this.$el.remove(); - return this; - }, - - // For small amounts of DOM Elements, where a full-blown template isn't - // needed, use **make** to manufacture elements, one at a time. - // - // var el = this.make('li', {'class': 'row'}, this.model.escape('title')); - // - make: function(tagName, attributes, content) { - var el = document.createElement(tagName); - if (attributes) $(el).attr(attributes); - if (content) $(el).html(content); - return el; - }, - - // Change the view's element (`this.el` property), including event - // re-delegation. - setElement: function(element, delegate) { - if (this.$el) this.undelegateEvents(); - this.$el = (element instanceof $) ? element : $(element); - this.el = this.$el[0]; - if (delegate !== false) this.delegateEvents(); - return this; - }, - - // Set callbacks, where `this.events` is a hash of - // - // *{"event selector": "callback"}* - // - // { - // 'mousedown .title': 'edit', - // 'click .button': 'save' - // 'click .open': function(e) { ... } - // } - // - // pairs. Callbacks will be bound to the view, with `this` set properly. - // Uses event delegation for efficiency. - // Omitting the selector binds the event to `this.el`. - // This only works for delegate-able events: not `focus`, `blur`, and - // not `change`, `submit`, and `reset` in Internet Explorer. - delegateEvents: function(events) { - if (!(events || (events = getValue(this, 'events')))) return; - this.undelegateEvents(); - for (var key in events) { - var method = events[key]; - if (!_.isFunction(method)) method = this[events[key]]; - if (!method) throw new Error('Method "' + events[key] + '" does not exist'); - var match = key.match(delegateEventSplitter); - var eventName = match[1], selector = match[2]; - method = _.bind(method, this); - eventName += '.delegateEvents' + this.cid; - if (selector === '') { - this.$el.bind(eventName, method); - } else { - this.$el.delegate(selector, eventName, method); - } - } - }, - - // Clears all callbacks previously bound to the view with `delegateEvents`. - // You usually don't need to use this, but may wish to if you have multiple - // Backbone views attached to the same DOM element. - undelegateEvents: function() { - this.$el.unbind('.delegateEvents' + this.cid); - }, - - // Performs the initial configuration of a View with a set of options. - // Keys with special meaning *(model, collection, id, className)*, are - // attached directly to the view. - _configure: function(options) { - if (this.options) options = _.extend({}, this.options, options); - for (var i = 0, l = viewOptions.length; i < l; i++) { - var attr = viewOptions[i]; - if (options[attr]) this[attr] = options[attr]; - } - this.options = options; - }, - - // Ensure that the View has a DOM element to render into. - // If `this.el` is a string, pass it through `$()`, take the first - // matching element, and re-assign it to `el`. Otherwise, create - // an element from the `id`, `className` and `tagName` properties. - _ensureElement: function() { - if (!this.el) { - var attrs = getValue(this, 'attributes') || {}; - if (this.id) attrs.id = this.id; - if (this.className) attrs['class'] = this.className; - this.setElement(this.make(this.tagName, attrs), false); - } else { - this.setElement(this.el, false); - } - } - - }); - - // The self-propagating extend function that Backbone classes use. - var extend = function (protoProps, classProps) { - var child = inherits(this, protoProps, classProps); - child.extend = this.extend; - return child; - }; - - // Set up inheritance for the model, collection, and view. - Model.extend = Collection.extend = Router.extend = View.extend = extend; - - // Backbone.sync - // ------------- - - // Map from CRUD to HTTP for our default `Backbone.sync` implementation. - var methodMap = { - 'create': 'POST', - 'update': 'PUT', - 'delete': 'DELETE', - 'read': 'GET' - }; - - // Override this function to change the manner in which Backbone persists - // models to the server. You will be passed the type of request, and the - // model in question. By default, makes a RESTful Ajax request - // to the model's `url()`. Some possible customizations could be: - // - // * Use `setTimeout` to batch rapid-fire updates into a single request. - // * Send up the models as XML instead of JSON. - // * Persist models via WebSockets instead of Ajax. - // - // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests - // as `POST`, with a `_method` parameter containing the true HTTP method, - // as well as all requests with the body as `application/x-www-form-urlencoded` - // instead of `application/json` with the model in a param named `model`. - // Useful when interfacing with server-side languages like **PHP** that make - // it difficult to read the body of `PUT` requests. - Backbone.sync = function(method, model, options) { - var type = methodMap[method]; - - // Default options, unless specified. - options || (options = {}); - - // Default JSON-request options. - var params = {type: type, dataType: 'json'}; - - // Ensure that we have a URL. - if (!options.url) { - params.url = getValue(model, 'url') || urlError(); - } - - // Ensure that we have the appropriate request data. - if (!options.data && model && (method == 'create' || method == 'update')) { - params.contentType = 'application/json'; - params.data = JSON.stringify(model.toJSON()); - } - - // For older servers, emulate JSON by encoding the request into an HTML-form. - if (Backbone.emulateJSON) { - params.contentType = 'application/x-www-form-urlencoded'; - params.data = params.data ? {model: params.data} : {}; - } - - // For older servers, emulate HTTP by mimicking the HTTP method with `_method` - // And an `X-HTTP-Method-Override` header. - if (Backbone.emulateHTTP) { - if (type === 'PUT' || type === 'DELETE') { - if (Backbone.emulateJSON) params.data._method = type; - params.type = 'POST'; - params.beforeSend = function(xhr) { - xhr.setRequestHeader('X-HTTP-Method-Override', type); - }; - } - } - - // Don't process data on a non-GET request. - if (params.type !== 'GET' && !Backbone.emulateJSON) { - params.processData = false; - } - - // Make the request, allowing the user to override any Ajax options. - return $.ajax(_.extend(params, options)); - }; - - // Wrap an optional error callback with a fallback error event. - Backbone.wrapError = function(onError, originalModel, options) { - return function(model, resp) { - resp = model === originalModel ? resp : model; - if (onError) { - onError(originalModel, resp, options); - } else { - originalModel.trigger('error', originalModel, resp, options); - } - }; - }; - - // Helpers - // ------- - - // Shared empty constructor function to aid in prototype-chain creation. - var ctor = function(){}; - - // Helper function to correctly set up the prototype chain, for subclasses. - // Similar to `goog.inherits`, but uses a hash of prototype properties and - // class properties to be extended. - var inherits = function(parent, protoProps, staticProps) { - var child; - - // The constructor function for the new subclass is either defined by you - // (the "constructor" property in your `extend` definition), or defaulted - // by us to simply call the parent's constructor. - if (protoProps && protoProps.hasOwnProperty('constructor')) { - child = protoProps.constructor; - } else { - child = function(){ parent.apply(this, arguments); }; - } - - // Inherit class (static) properties from parent. - _.extend(child, parent); - - // Set the prototype chain to inherit from `parent`, without calling - // `parent`'s constructor function. - ctor.prototype = parent.prototype; - child.prototype = new ctor(); - - // Add prototype properties (instance properties) to the subclass, - // if supplied. - if (protoProps) _.extend(child.prototype, protoProps); - - // Add static properties to the constructor function, if supplied. - if (staticProps) _.extend(child, staticProps); - - // Correctly set child's `prototype.constructor`. - child.prototype.constructor = child; - - // Set a convenience property in case the parent's prototype is needed later. - child.__super__ = parent.prototype; - - return child; - }; - - // Helper function to get a value from a Backbone object as a property - // or as a function. - var getValue = function(object, prop) { - if (!(object && object[prop])) return null; - return _.isFunction(object[prop]) ? object[prop]() : object[prop]; - }; - - // Throw an error when a URL is needed, and none is supplied. - var urlError = function() { - throw new Error('A "url" property or function must be specified'); - }; - -}).call(this); diff --git a/deleted/archive/js/lib/bootstrap.min.js b/deleted/archive/js/lib/bootstrap.min.js deleted file mode 100644 index 63e46103b9..0000000000 --- a/deleted/archive/js/lib/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** -* Bootstrap.js by @fat & @mdo -* plugins: bootstrap-transition.js, bootstrap-modal.js, bootstrap-dropdown.js, bootstrap-scrollspy.js, bootstrap-tab.js, bootstrap-tooltip.js, bootstrap-popover.js, bootstrap-alert.js, bootstrap-button.js, bootstrap-collapse.js, bootstrap-carousel.js, bootstrap-typeahead.js -* Copyright 2012 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -!function(a){a(function(){"use strict",a.support.transition=function(){var b=document.body||document.documentElement,c=b.style,d=c.transition!==undefined||c.WebkitTransition!==undefined||c.MozTransition!==undefined||c.MsTransition!==undefined||c.OTransition!==undefined;return d&&{end:function(){var b="TransitionEnd";return a.browser.webkit?b="webkitTransitionEnd":a.browser.mozilla?b="transitionend":a.browser.opera&&(b="oTransitionEnd"),b}()}}()})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('"+(g[0]>0&&N==g[1]-1?'
    ':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'':""),a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='
    ',m="";if(f||!i)m+=''+g[b]+"";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+=''+c+"";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="
    ";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&bd?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget" -))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.18",window["DP_jQuery_"+dpuuid]=$}(jQuery),function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||" ",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("
    ")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("
    ").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||" "))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.18",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()}(jQuery),function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("
    ").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.18"})}(jQuery),function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("
    ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;ic&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.18"})}(jQuery),function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)} -),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},destroy:function(){var b=this.options;this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.18"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a0&&this[0].attributes,a,b)}function b(b){if(this.length>0){a.each(this[0].attributes,b)}return this}a.fn.eachAttr=b;a.fn.foldAttr=c;a.fn.fold=e;a.fold=d})(jQuery) \ No newline at end of file diff --git a/deleted/archive/js/lib/jquery.dform-0.1.3.min.js b/deleted/archive/js/lib/jquery.dform-0.1.3.min.js deleted file mode 100644 index 3d1c3ecff9..0000000000 --- a/deleted/archive/js/lib/jquery.dform-0.1.3.min.js +++ /dev/null @@ -1,16 +0,0 @@ -(function(a){function h(b,c,e){if(typeof c=="string"){a.isArray(b[c])||(b[c]=[]);b[c].push(e)}else typeof c=="object"&&a.each(c,function(g,i){h(b,g,i)})}var f={},d={};a.fn.extend({runSubscription:function(b,c,e){var g=this;a.dform.hasSubscription(b)&&a.each(f[b],function(i,j){j.call(g,c,e)});return this},runAll:function(b){var c=b.type,e=this;this.runSubscription("[pre]",b,c);a.each(b,function(g,i){a(e).runSubscription(g,i,c)});this.runSubscription("[post]",b,c);return this},formElement:function(b){var c= -a.dform.createElement(b);this.append(a(c));a(c).runAll(b);return this},buildForm:function(b,c,e){if(typeof b=="string"){var g=a(this);a.get(b,c,function(i,j,k){a(g).buildForm(i);a.isFunction(e)&&e(i,j,k)},a.dform.options.ajaxFormat)}else if(b.type)this.formElement(b);else{c=this.is("form")?this:this.append("
    ").children("form:last");b=a.extend({type:"form"},b);a(c).dformAttr(b);a(c).runAll(b)}return this},dformAttr:function(b,c){var e=a.keyset(f);a.isArray(c)&&a.merge(e,c);this.attr(a.withoutKeys(b, -e));return this}});a.extend(a,{keyset:function(b){var c=[];a.each(b,function(e){c.push(e)});return c},withKeys:function(b,c){var e={};a.each(c,function(g,i){if(b[i])e[i]=b[i]});return e},withoutKeys:function(b,c){var e={};a.each(b,function(g,i){if(a.inArray(g,c)==-1)e[g]=i});return e},getValueAt:function(b,c){for(var e=a.isArray(c)?c:c.split("."),g=b,i=0;i").dformAttr(b)}},removeType:function(b){delete d[b]},typeNames:function(){return a.keyset(d)},addType:function(b,c){h(d,b,c)},addTypeIf:function(b,c,e){b&&a.dform.addType(c,e)},subscriberNames:function(){return a.keyset(f)},subscribe:function(b,c){h(f,b,c)},subscribeIf:function(b,c,e){b&&a.dform.subscribe(c,e)},removeSubscription:function(b){delete f[b]},hasSubscription:function(b){return f[b]?true:false},createElement:function(b){var c=b.type;if(!c)throw"No element type given! Must always exist."; -var e=null;if(d[c]){var g=a.withoutKeys(b,"type");a.each(d[c],function(i,j){e=j.call(e,g)})}else e=a.dform.options.defaultType(b);return a(e)}}})(jQuery); -(function(a){a.fn.placeholder=function(h){var f=this;a(this).data("placeholder",h);a(this).val(h);a(this).focus(function(){a(this).val()==a(this).data("placeholder")&&a(this).val("")});a(this).blur(function(){a(this).val()==""&&a(this).val(a(this).data("placeholder"))});a(this).parents("form").submit(function(){a(f).val()==a(f).data("placeholder")&&a(f).val("")});return this}})(jQuery); -(function(a){function h(f,d){return function(b){return a(f).dformAttr(b,d)}}a.dform.addType({text:h(''),password:h(''),submit:h(''),reset:h(''),hidden:h(''),radio:h(''),checkbox:h(''),checkboxes:h("
    ",["name"]),radiobuttons:h("
    ",["name"]),container:h("
    "),file:h('')});a.dform.subscribe({"class":function(f){this.addClass(f)}, -html:function(f){this.html(f)},elements:function(f){var d=a(this);a.each(f,function(b,c){if(typeof b=="string")c.name=name;a(d).formElement(c)})},value:function(f){this.val(f)},options:function(f,d){var b=a(this);if(d=="select")a.each(f,function(c,e){var g;if(typeof e=="string")g=a("