You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2015/10/09 23:37:21 UTC
[41/63] [abbrv] [partial] usergrid git commit: Generated website
contents.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ada7b36b/content/v101-portal-demo/js/generated/usergrid-dev.js
----------------------------------------------------------------------
diff --git a/content/v101-portal-demo/js/generated/usergrid-dev.js b/content/v101-portal-demo/js/generated/usergrid-dev.js
new file mode 100644
index 0000000..0dfacc5
--- /dev/null
+++ b/content/v101-portal-demo/js/generated/usergrid-dev.js
@@ -0,0 +1,4886 @@
+ /**
+ 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.18 */
+(function(exports, global) {
+ global["true"] = exports;
+ "use strict";
+ var polyfills = function(window, Object) {
+ window.requestAnimFrame = function() {
+ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback, element) {
+ window.setTimeout(callback, 1e3 / 60);
+ };
+ }();
+ Object.defineProperty(Object.prototype, "clone", {
+ enumerable: false,
+ writable: true,
+ value: function() {
+ var i, newObj = this instanceof Array ? [] : {};
+ for (i in this) {
+ if (i === "clone") {
+ continue;
+ }
+ if (this[i] && typeof this[i] === "object") {
+ newObj[i] = this[i].clone();
+ } else {
+ newObj[i] = this[i];
+ }
+ }
+ return newObj;
+ }
+ });
+ Object.defineProperty(Object.prototype, "stringifyJSON", {
+ enumerable: false,
+ writable: true,
+ value: function() {
+ return JSON.stringify(this, null, " ");
+ }
+ });
+ };
+ polyfills(window, Object);
+ var global = global || this;
+ var 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", []);
+ angular.module("appservices", [ "ngRoute", "ngResource", "ngSanitize", "ui.bootstrap", "appservices.filters", "appservices.services", "appservices.directives", "appservices.constants", "appservices.controllers", "angular-intro" ]).config([ "$routeProvider", "$locationProvider", "$sceDelegateProvider", "$httpProvider", function($routeProvider, $locationProvider, $sceDelegateProvider, $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("/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"
+ }).when("/push/sendNotification", {
+ templateUrl: "push/push-send-notification.html",
+ controller: "PushSendNotificationCtrl"
+ }).when("/push/getStarted", {
+ templateUrl: "push/push-get-started.html",
+ controller: "PushGetStartedCtrl"
+ }).when("/push/history", {
+ templateUrl: "push/push-history.html",
+ controller: "PushHistoryCtrl"
+ }).when("/push/history/receipts", {
+ templateUrl: "push/push-receipts.html",
+ controller: "PushReceiptsCtrl"
+ }).when("/push/configuration", {
+ templateUrl: "push/push-config.html",
+ controller: "PushConfigCtrl"
+ }).otherwise({
+ redirectTo: "/org-overview"
+ });
+ $locationProvider.html5Mode(false).hashPrefix("!");
+ $sceDelegateProvider.resourceUrlWhitelist([ "self", "https://api.usergrid.com/**" ]);
+ $httpProvider.defaults.useXDomain = true;
+ } ]);
+ "use strict";
+ AppServices.Controllers.controller("ActivitiesCtrl", [ "ug", "$scope", "$rootScope", "$location", "$route", function(ug, $scope, $rootScope, $location, $route) {
+ $scope.$on("app-activities-received", function(evt, data) {
+ $scope.activities = data;
+ $scope.$apply();
+ });
+ $scope.$on("app-activities-error", function(evt, data) {
+ $rootScope.$broadcast("alert", "error", "Application failed to retreive activities data.");
+ });
+ ug.getActivities();
+ } ]);
+ "use strict";
+ AppServices.Controllers.controller("AppOverviewCtrl", [ "ug", "$scope", "$rootScope", "$log", function(ug, $scope, $rootScope, $log) {
+ $scope.appOverview = {};
+ $scope.collections = [];
+ $scope.graph = "";
+ $scope.$on("top-collections-received", function(event, collections) {
+ $scope.collections = collections;
+ $scope.applyScope();
+ });
+ ug.getTopCollections();
+ } ]);
+ "use strict";
+ AppServices.Controllers.controller("DataCtrl", [ "ug", "$scope", "$rootScope", "$location", function(ug, $scope, $rootScope, $location) {
+ var init = function() {
+ $scope.verb = "GET";
+ $scope.display = "";
+ $scope.queryBodyDetail = {};
+ $scope.queryBodyDisplay = "none";
+ $scope.queryLimitDisplay = "block";
+ $scope.queryStringDisplay = "block";
+ $scope.entitySelected = {};
+ $scope.newCollection = {
+ name: "",
+ entity: '{"name":"test"}'
+ };
+ $rootScope.queryCollection = {};
+ $scope.data = {};
+ $scope.data.queryPath = "";
+ $scope.data.queryBody = '{ "name":"value" }';
+ $scope.data.searchString = "";
+ $scope.data.queryLimit = "";
+ };
+ var runQuery = function(verb) {
+ $scope.loading = true;
+ var queryPath = $scope.removeFirstSlash($scope.data.queryPath || "");
+ var searchString = $scope.data.searchString || "";
+ var queryLimit = $scope.data.queryLimit || "";
+ var body = JSON.parse($scope.data.queryBody || "{}");
+ if (verb == "POST" && $scope.validateJson(true)) {
+ ug.runDataPOSTQuery(queryPath, body);
+ } else if (verb == "PUT" && $scope.validateJson(true)) {
+ ug.runDataPutQuery(queryPath, searchString, queryLimit, body);
+ } else if (verb == "DELETE") {
+ ug.runDataDeleteQuery(queryPath, searchString, queryLimit);
+ } else {
+ ug.runDataQuery(queryPath, searchString, queryLimit);
+ }
+ };
+ $scope.$on("top-collections-received", function(event, collectionList) {
+ $scope.loading = false;
+ var ignoredCollections = [ "events" ];
+ ignoredCollections.forEach(function(ignoredCollection) {
+ collectionList.hasOwnProperty(ignoredCollection) && delete collectionList[ignoredCollection];
+ });
+ $scope.collectionList = collectionList;
+ $scope.queryBoxesSelected = false;
+ if (!$scope.queryPath) {
+ $scope.loadCollection("/" + $scope.collectionList[Object.keys($scope.collectionList).sort()[0]].name);
+ }
+ $scope.applyScope();
+ });
+ $scope.$on("error-running-query", function(event) {
+ $scope.loading = false;
+ runQuery("GET");
+ $scope.applyScope();
+ });
+ $scope.$on("entity-deleted", function(event) {
+ $scope.deleteLoading = false;
+ $rootScope.$broadcast("alert", "success", "Entities deleted sucessfully");
+ $scope.queryBoxesSelected = false;
+ $scope.checkNextPrev();
+ $scope.applyScope();
+ });
+ $scope.$on("entity-deleted-error", function(event) {
+ $scope.deleteLoading = false;
+ runQuery("GET");
+ $scope.applyScope();
+ });
+ $scope.$on("collection-created", function() {
+ $scope.newCollection.name = "";
+ $scope.newCollection.entity = '{ "name":"value" }';
+ });
+ $scope.$on("query-received", function(event, collection) {
+ $scope.loading = false;
+ $rootScope.queryCollection = collection;
+ ug.getIndexes($scope.data.queryPath);
+ $scope.setDisplayType();
+ $scope.checkNextPrev();
+ $scope.applyScope();
+ $scope.queryBoxesSelected = false;
+ });
+ $scope.$on("query-error", function(event) {
+ $scope.loading = false;
+ $scope.applyScope();
+ $scope.queryBoxesSelected = false;
+ });
+ $scope.$on("indexes-received", function(event, indexes) {
+ var fred = indexes;
+ });
+ $scope.$on("app-changed", function() {
+ init();
+ });
+ $scope.setDisplayType = function() {
+ $scope.display = "generic";
+ };
+ $scope.deleteEntitiesDialog = function(modalId) {
+ $scope.deleteLoading = false;
+ $scope.deleteEntities($rootScope.queryCollection, "entity-deleted", "error deleting entity");
+ $scope.hideModal(modalId);
+ };
+ $scope.newCollectionDialog = function(modalId) {
+ if ($scope.newCollection.name) {
+ ug.createCollection($scope.newCollection.name);
+ ug.getTopCollections();
+ $rootScope.$broadcast("alert", "success", "Collection created successfully.");
+ $scope.hideModal(modalId);
+ } else {
+ $rootScope.$broadcast("alert", "error", "You must specify a collection name.");
+ }
+ };
+ $scope.newCollectionWithEntityDialog = function(modalId) {
+ if (!($scope.newCollection.name && $scope.newCollection.name.length > 0)) {
+ $rootScope.$broadcast("alert", "error", "You must specify a collection name.");
+ } else if (!($scope.newCollection.entity && $scope.newCollection.entity.length > 0)) {
+ $rootScope.$broadcast("alert", "error", "You must specify JSON data for the new entity.");
+ } else if (!$scope.validateEntityData(true)) {} else {
+ ug.createCollectionWithEntity($scope.newCollection.name, $scope.newCollection.entity);
+ ug.getTopCollections();
+ $scope.hideModal(modalId);
+ }
+ };
+ $scope.addToPath = function(uuid) {
+ $scope.data.queryPath = "/" + $rootScope.queryCollection._type + "/" + uuid;
+ };
+ $scope.removeFromPath = function() {
+ $scope.data.queryPath = "/" + $rootScope.queryCollection._type;
+ };
+ $scope.isDeep = function(item) {
+ return Object.prototype.toString.call(item) === "[object Object]";
+ };
+ $scope.loadCollection = function(type) {
+ $scope.data.queryPath = "/" + type.substring(1, type.length);
+ $scope.data.searchString = "";
+ $scope.data.queryLimit = "";
+ $scope.data.body = '{ "name":"value" }';
+ $scope.selectGET();
+ $scope.applyScope();
+ $scope.run();
+ };
+ $scope.selectGET = function() {
+ $scope.queryBodyDisplay = "none";
+ $scope.queryLimitDisplay = "block";
+ $scope.queryStringDisplay = "block";
+ $scope.verb = "GET";
+ };
+ $scope.selectPOST = function() {
+ $scope.queryBodyDisplay = "block";
+ $scope.queryLimitDisplay = "none";
+ $scope.queryStringDisplay = "none";
+ $scope.verb = "POST";
+ };
+ $scope.selectPUT = function() {
+ $scope.queryBodyDisplay = "block";
+ $scope.queryLimitDisplay = "block";
+ $scope.queryStringDisplay = "block";
+ $scope.verb = "PUT";
+ };
+ $scope.selectDELETE = function() {
+ $scope.queryBodyDisplay = "none";
+ $scope.queryLimitDisplay = "block";
+ $scope.queryStringDisplay = "block";
+ $scope.verb = "DELETE";
+ };
+ $scope.validateEntityData = function(skipMessage) {
+ var queryBody = $scope.newCollection.entity;
+ try {
+ queryBody = JSON.parse(queryBody);
+ } catch (e) {
+ $rootScope.$broadcast("alert", "error", "JSON is not valid");
+ return false;
+ }
+ queryBody = JSON.stringify(queryBody, null, 2);
+ !skipMessage && $rootScope.$broadcast("alert", "success", "JSON is valid");
+ $scope.newCollection.entity = queryBody;
+ return true;
+ };
+ $scope.validateJson = function(skipMessage) {
+ var queryBody = $scope.data.queryBody;
+ try {
+ queryBody = JSON.parse(queryBody);
+ } catch (e) {
+ $rootScope.$broadcast("alert", "error", "JSON is not valid");
+ return false;
+ }
+ queryBody = JSON.stringify(queryBody, null, 2);
+ !skipMessage && $rootScope.$broadcast("alert", "success", "JSON is valid");
+ $scope.data.queryBody = queryBody;
+ return true;
+ };
+ $scope.isValidJSON = function(data) {
+ try {
+ data = JSON.parse(data);
+ } catch (e) {
+ return false;
+ }
+ return true;
+ };
+ $scope.formatJSON = function(data) {
+ try {
+ data = JSON.parse(data);
+ } catch (e) {
+ return data;
+ }
+ return JSON.stringify(data, null, 2);
+ };
+ $scope.saveEntity = function(entity) {
+ if (!$scope.validateJson()) {
+ return false;
+ }
+ var queryBody = entity._json;
+ queryBody = JSON.parse(queryBody);
+ $rootScope.selectedEntity.set();
+ $rootScope.selectedEntity.set(queryBody);
+ $rootScope.selectedEntity.set("type", entity._data.type);
+ $rootScope.selectedEntity.set("uuid", entity._data.uuid);
+ $rootScope.selectedEntity.save(function(err, data) {
+ if (err) {
+ $rootScope.$broadcast("alert", "error", "error: " + data.error_description);
+ } else {
+ $rootScope.$broadcast("alert", "success", "entity saved");
+ }
+ });
+ };
+ $scope.run = function() {
+ $rootScope.queryCollection = "";
+ var verb = $scope.verb;
+ runQuery(verb);
+ };
+ $scope.hasProperty = function(prop) {
+ var retval = false;
+ if (typeof $rootScope.queryCollection._list !== "undefined") {
+ angular.forEach($rootScope.queryCollection._list, function(value, key) {
+ if (!retval) {
+ if (value._data[prop]) {
+ retval = true;
+ }
+ }
+ });
+ }
+ return retval;
+ };
+ $scope.resetNextPrev = function() {
+ $scope.previous_display = "none";
+ $scope.next_display = "none";
+ };
+ $scope.checkNextPrev = function() {
+ $scope.resetNextPrev();
+ if ($rootScope.queryCollection.hasPreviousPage()) {
+ $scope.previous_display = "default";
+ }
+ if ($rootScope.queryCollection.hasNextPage()) {
+ $scope.next_display = "default";
+ }
+ };
+ $scope.selectEntity = function(uuid, addToPath) {
+ $rootScope.selectedEntity = $rootScope.queryCollection.getEntityByUUID(uuid);
+ if (addToPath) {
+ $scope.addToPath(uuid);
+ } else {
+ $scope.removeFromPath();
+ }
+ };
+ $scope.getJSONView = function(entity) {
+ var tempjson = entity.get();
+ var queryBody = JSON.stringify(tempjson, null, 2);
+ queryBody = JSON.parse(queryBody);
+ delete queryBody.metadata;
+ delete queryBody.uuid;
+ delete queryBody.created;
+ delete queryBody.modified;
+ delete queryBody.type;
+ $scope.queryBody = JSON.stringify(queryBody, null, 2);
+ };
+ $scope.getPrevious = function() {
+ $rootScope.queryCollection.getPreviousPage(function(err) {
+ if (err) {
+ $rootScope.$broadcast("alert", "error", "error getting previous page of data");
+ }
+ $scope.checkNextPrev();
+ $scope.applyScope();
+ });
+ };
+ $scope.getNext = function() {
+ $rootScope.queryCollection.getNextPage(function(err) {
+ if (err) {
+ $rootScope.$broadcast("alert", "error", "error getting next page of data");
+ }
+ $scope.checkNextPrev();
+ $scope.applyScope();
+ });
+ };
+ init();
+ $rootScope.queryCollection = $rootScope.queryCollection || {};
+ $rootScope.selectedEntity = {};
+ if ($rootScope.queryCollection && $rootScope.queryCollection._type) {
+ $scope.loadCollection($rootScope.queryCollection._type);
+ $scope.setDisplayType();
+ }
+ ug.getTopCollections();
+ $scope.resetNextPrev();
+ } ]);
+ "use strict";
+ AppServices.Controllers.controller("EntityCtrl", [ "ug", "$scope", "$rootScope", "$location", function(ug, $scope, $rootScope, $location) {
+ if (!$rootScope.selectedEntity) {
+ $location.path("/data");
+ return;
+ }
+ $scope.entityUUID = $rootScope.selectedEntity.get("uuid");
+ $scope.entityType = $rootScope.selectedEntity.get("type");
+ var tempjson = $rootScope.selectedEntity.get();
+ var queryBody = JSON.stringify(tempjson, null, 2);
+ queryBody = JSON.parse(queryBody);
+ delete queryBody.metadata;
+ delete queryBody.uuid;
+ delete queryBody.created;
+ delete queryBody.modified;
+ delete queryBody.type;
+ $scope.queryBody = JSON.stringify(queryBody, null, 2);
+ $scope.validateJson = function() {
+ var queryBody = $scope.queryBody;
+ try {
+ queryBody = JSON.parse(queryBody);
+ } catch (e) {
+ $rootScope.$broadcast("alert", "error", "JSON is not valid");
+ return false;
+ }
+ queryBody = JSON.stringify(queryBody, null, 2);
+ $rootScope.$broadcast("alert", "success", "JSON is valid");
+ $scope.queryBody = queryBody;
+ return true;
+ };
+ $scope.saveEntity = function() {
+ if (!$scope.validateJson()) {
+ return false;
+ }
+ var queryBody = $scope.queryBody;
+ queryBody = JSON.parse(queryBody);
+ $rootScope.selectedEntity.set();
+ $rootScope.selectedEntity.set(queryBody);
+ $rootScope.selectedEntity.set("type", $scope.entityType);
+ $rootScope.selectedEntity.set("uuid", $scope.entityUUID);
+ $rootScope.selectedEntity.save(function(err, data) {
+ if (err) {
+ $rootScope.$broadcast("alert", "error", "error: " + data.error_description);
+ } else {
+ $rootScope.$broadcast("alert", "success", "entity saved");
+ }
+ });
+ };
+ } ]);
+ "use strict";
+ AppServices.Directives.directive("balloon", [ "$window", "$timeout", function($window, $timeout) {
+ return {
+ restrict: "ECA",
+ scope: "=",
+ template: "" + '<div class="baloon {{direction}}" ng-transclude>' + "</div>",
+ replace: true,
+ transclude: true,
+ link: function linkFn(scope, lElement, attrs) {
+ scope.direction = attrs.direction;
+ var runScroll = true;
+ var windowEl = angular.element($window);
+ windowEl.on("scroll", function() {
+ if (runScroll) {
+ lElement.addClass("fade-out");
+ $timeout(function() {
+ lElement.addClass("hide");
+ }, 1e3);
+ runScroll = false;
+ }
+ });
+ }
+ };
+ } ]);
+ "use strict";
+ AppServices.Directives.directive("bsmodal", [ "$rootScope", function($rootScope) {
+ return {
+ restrict: "ECA",
+ scope: {
+ title: "@title",
+ buttonid: "=buttonid",
+ footertext: "=footertext",
+ closelabel: "=closelabel"
+ },
+ transclude: true,
+ templateUrl: "dialogs/modal.html",
+ replace: true,
+ link: function linkFn(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) {
+ if (scope.dialogForm.$valid) {
+ console.log(parentCtrl);
+ scope.$parent[attr](attrs.id);
+ } else {
+ $rootScope.$broadcast("alert", "error", "Please check your form input and resubmit.");
+ }
+ };
+ }
+ };
+ } ]);
+ angular.module("appservices").run([ "$templateCache", function($templateCache) {
+ "use strict";
+ $templateCache.put("activities/activities.html", '<section class="row-fluid">\n' + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->\n" + ' <div class="span12"
>\n' + ' <div class="page-filters">\n' + ' <h1 class="title" class="pull-left">\n' + ' <i class="pictogram title">📱</i> Activities\n' + " </h1>\n" + " </div>\n" + " </div>\n" + "\n" + "</section>\n" + '<section class="row-fluid">\n' + ' <div class="span12 tab-content">\n' + ' <table class="table table-striped">\n' + " <tbody>\n" + ' <tr class="table-header">\n' + " <td>Date</td>\n" + " <td></td>\n" + " <td>User</td>\n" + " <td>Content</td>\n" + " <td>Verb</td>\n" + " <td>UUID</td>\n" + " </tr>\n" + ' <tr class="zebraRows" ng-repeat="activity in activities">\n' + " <td>{{formatDate(activity.created)}}</td>\n" + ' <td class="gravatar20"><img\n' + ' ng-src="{{activity.actor.picture}}" /></td>\n' + " <td>{{activity.actor.displayName}}</td>\n" + " <td>{{activity.content}}</td>\n" + " <td>{{activity.verb}}</td>\n" + "
<td>{{activity.uuid}}</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + "</section>\n");
+ $templateCache.put("app-overview/app-overview.html", '<div class="app-overview-content">\n' + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->\n" + ' <section
class="row-fluid">\n' + "\n" + ' <page-title title=" Summary" icon="📱"></page-title>\n' + ' <section class="row-fluid">\n' + ' <h2 class="title" id="app-overview-title">{{currentApp}}</h2>\n' + " </section>\n" + ' <section class="row-fluid">\n' + "\n" + ' <div class="span6">\n' + ' <table class="table table-striped">\n' + ' <tr class="table-header">\n' + " <td>Path</td>\n" + " <td>Title</td>\n" + " </tr>\n" + ' <tr class="zebraRows" ng-repeat="(k,v) in collections">\n' + " <td>{{v.title}}</td>\n" + " <td>{{v.count}}</td>\n" + " </tr>\n" + " </table>\n" + " </div>\n" + "\n" + " </section>\n" + "</div>\n");
+ $templateCache.put("app-overview/doc-includes/android.html", "<h2>1. Integrate the SDK into your project</h2>\n" + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" +
"-->\n" + "<p>You can integrate Apigee features into your app by including the\n" + " SDK in your project. You can do one of the following:</p>\n" + "\n" + '<ul class="nav nav-tabs" id="myTab">\n' + ' <li class="active"><a data-toggle="tab" href="#existing_project">Existing\n' + " project</a></li>\n" + ' <li><a data-toggle="tab" href="#new_project">New project</a></li>\n' + "</ul>\n" + "\n" + '<div class="tab-content">\n' + ' <div class="tab-pane active" id="existing_project">\n' + ' <a class="jumplink" name="add_the_sdk_to_an_existing_project"></a>\n' + " <p>If you've already got an Android project, you can\n" + " integrate the Apigee SDK into your project as you\n" + " normally would:</p>\n" + ' <div id="collapse">\n' + ' <a href="#jar_collapse" class="btn" data-toggle="collapse"><i\n' + ' class="icon-white icon-chevron-down"></i> Details</a>\n' + " </div>\n" + ' <div id="jar_collapse" class="collapse">\n
' + " <p>\n" + " Add\n" + " <code>apigee-android-<version>.jar</code>\n" + " to your class path by doing the following:\n" + " </p>\n" + "\n" + " <h3>Android 4.0 (or later) projects</h3>\n" + " <p>\n" + " Copy the jar file into the\n" + " <code>/libs</code>\n" + " folder in your project.\n" + " </p>\n" + "\n" + " <h3>Android 3.0 (or earlier) projects</h3>\n" + " <ol>\n" + " <li>In the Eclipse <strong>Package Explorer</strong>,\n" + " select your application's project folder.\n" + " </li>\n" + " <li>Click the <strong>File > Properties</strong> menu.\n" + " </li>\n" + " <li>In the <strong>Java Build Path</strong> section, click\n" + " the <strong>Libraries</strong> tab, click <strong>Add\n" + " External JARs</strong>.\n" + " </li>\n" + " <li>Browse to <code>apigee-android-<version>.jar</code>,\n" + "
then click <strong>Open</strong>.\n" + " </li>\n" + " <li>Order the <code>apigee-android-<version>.jar</code>\n" + " at the top of the class path:\n" + " <ol>\n" + " <li>In the Eclipse <strong>Package Explorer</strong>,\n" + " select your application's project folder.\n" + " </li>\n" + " <li>Click the <strong>File >\n" + " Properties</strong> menu.\n" + " </li>\n" + " <li>In the properties dialog, in the <strong>Java\n" + " Build Path</strong> section, click the <strong>Order\n" + " and Export</strong> tab.\n" + " </li>\n" + " <li>\n" + " <p>\n" + " <strong>IMPORTANT:</strong> Select the checkbox for\n" + " <code>apigee-android-<version>.jar</code>\n" + " , then click the <strong>Top</strong> button.\n" +
" </p>\n" + " </li>\n" + " </ol>\n" + " </li>\n" + " </ol>\n" + ' <div class="warning">\n' + " <h3>Applications using Ant</h3>\n" + " <p>\n" + " If you are using Ant to build your application, you must also\n" + " copy\n" + " <code>apigee-android-<version>.jar</code>\n" + " to the\n" + " <code>/libs</code>\n" + " folder in your application.\n" + " </p>\n" + " </div>\n" + " </div>\n" + " </div>\n" + ' <div class="tab-pane" id="new_project">\n' + ' <a class="jumplink" name="create_a_new_project_based_on_the_SDK"></a>\n' + " <p>If you don't have a project yet, you can begin by using\n" + " the project template included with the SDK. The template includes\n" + " support for SDK features.</p>\n" + " <ul>\n" + " <li>Locate the project template in the expanded SDK. It\n" + " should be at the following location: <pre
><sdk_root>/new-project-template</pre>\n" + " </li>\n" + " </ul>\n" + " </div>\n" + "</div>\n" + "<h2>2. Update permissions in AndroidManifest.xml</h2>\n" + "<p>\n" + " Add the following Internet permissions to your application's\n" + " <code>AndroidManifest.xml</code>\n" + " file if they have not already been added. Note that with the exception\n" + " of INTERNET, enabling all other permissions are optional.\n" + "</p>\n" + "<pre>\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' + "</pre>\n" + "<h2>3. Initialize the SDK</h2>\n" + "<p>\n" + " To initialize the App Services SDK, you must instanti
ate the\n" + " <code>ApigeeClient</code>\n" + " class. There are multiple ways to handle this step, but we recommend\n" + " that you do the following:\n" + "</p>\n" + "<ol>\n" + " <li>Subclass the <code>Application</code> class, and add an\n" + " instance variable for the <code>ApigeeClient</code> to it, along\n" + " with getter and setter methods. <pre>\n" + "public 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" + " </pre>\n" + " </li>\n" + " <l
i>Declare the <code>Application</code> subclass in your <code>AndroidManifest.xml</code>.\n" + " For example: <pre>\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" + " </pre>\n" + " </li>\n" + " <li>Instantiate the <code>ApigeeClient</code> class in the <code>onCreate</code>\n" + " method of your first <code>Activity</code> class: <pre>\n" + "import com.apigee.sdk.ApigeeClient;\n" + "\n" + "@Override\n" + "protected 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" + " YourApp
lication yourApp = (YourApplication) getApplication;\n" + " yourApp.setApigeeClient(apigeeClient); \n" + "}\n" + " </pre>\n" + " <p>\n" + " This will make the instance of\n" + " <code>ApigeeClient</code>\n" + " available to your\n" + " <code>Application</code>\n" + " class.\n" + " </p>\n" + " </li>\n" + "</ol>\n" + "<h2>4. Import additional SDK classes</h2>\n" + "<p>The following classes will enable you to call common SDK methods:</p>\n" + "<pre>\n" + "import com.apigee.sdk.data.client.DataClient; //App Services data methods\n" + "import com.apigee.sdk.apm.android.MonitoringClient; //App Monitoring methods\n" + "import com.apigee.sdk.data.client.callbacks.ApiResponseCallback; //API response handling\n" + "import com.apigee.sdk.data.client.response.ApiResponse; //API response object\n" + "</pre>\n" + "\n" + "<h2>5. Verify SDK installation</h2>\n" + "\n" + "<p>\n" + " Once initialized, App Services will also automatically instantiate the\n" + " <co
de>MonitoringClient</code>\n" + " class and begin logging usage, crash and error metrics for your app.\n" + "</p>\n" + "<p>\n" + ' <img src="img/verify.png" alt="screenshot of data in admin portal" />\n' + "</p>\n" + "<p>\n" + " To verify that the SDK has been properly initialized, run your app,\n" + " then go to 'Monitoring' > 'App Usage' in the <a\n" + ' href="https://www.apigee.com/usergrid">App Services admin portal</a>\n' + " to verify that data is being sent.\n" + "</p>\n" + '<div class="warning">It may take up to two minutes for data to\n' + " appear in the admin portal after you run your app.</div>\n" + "\n" + "<h2>Installation complete! Try these next steps</h2>\n" + "<ul>\n" + " <li>\n" + " <h3>\n" + " <strong>Call additional SDK methods in your code</strong>\n" + " </h3>\n" + " <p>\n" + " The\n" + " <code>DataClient</code>\n" + " and\n" + " <code>MonitoringClient</code>\n" + " classes are also automatically instantiated for
you, and\n" + " accessible with the following accessors:\n" + " </p>\n" + " <ul>\n" + " <li><pre>DataClient dataClient = apigeeClient.getDataClient();</pre>\n" + " <p>Use this object to access the data methods of the App\n" + " Services SDK, including those for push notifications, data\n" + " store, and geolocation.</p></li>\n" + " <li><pre>MonitoringClient monitoringClient = apigeeClient.getMonitoringClient();</pre>\n" + " <p>Use this object to access the app configuration and\n" + " monitoring methods of the App Services SDK, including advanced\n" + " logging, and A/B testing.</p></li>\n" + " </ul>\n" + " </li>\n" + " <li>\n" + " <h3>\n" + " <strong>Add App Services features to your app</strong>\n" + " </h3>\n" + " <p>With App Services you can quickly add valuable features to\n" + " your mobile or web app, including push notifications, a custom\n" + " data store, geolocation and mo
re. Check out these links to get\n" + " started with a few of our most popular features:</p>\n" + " <ul>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/8410">Push notifications</a></strong>:\n' + " Send offers, alerts and other messages directly to user devices\n" + " to dramatically increase engagement. With App Services you can\n" + " send 10 million push notification per month for free!</li>\n" + " <li><strong>App Monitoring</strong>: When you initialize the\n" + " App Services SDK, a suite of valuable, <a\n" + ' href="http://apigee.com/docs/node/13190">customizable</a>\n' + " application monitoring features are automatically enabled that\n" + " deliver the data you need to fine tune performance, analyze\n" + " issues, and improve user experience.\n" + " <ul>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/13176">App Usage\n' + "
Monitoring</a></strong>: Visit the <a\n" + ' href="https://apigee.com/usergrid">App Services admin\n' + " portal</a> to view usage data for your app, including data on\n" + " device models, platforms and OS versions running your app.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/12861">API\n' + " Performance Monitoring</a></strong>: Network performance is key to a\n" + " solid user experience. In the <a\n" + ' href="https://apigee.com/usergrid">App Services admin\n' + " portal</a> you can view key metrics, including response time,\n" + " number of requests and raw API request logs.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/13177">Error &\n' + " Crash Monitoring</a></strong>: Get alerted to any errors or crashes,\n" + ' then view them in the <a href="https://apige
e.com/usergrid">App\n' + " Services admin portal</a>, where you can also analyze raw\n" + " error and crash logs.</li>\n" + " </ul></li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/410">Geolocation</a></strong>: Target\n' + " users or return result sets based on user location to keep your\n" + " app highly-relevant.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/10152">Data storage</a></strong>:\n' + " Store all your application data on our high-availability\n" + " infrastructure, and never worry about dealing with a database\n" + " ever again.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/376">User management and\n' + " authentication</a></strong>: Every app needs users. Use App Services to\n" + " easily implement user registration, as well as OAuth\n" + " 2.0-compliant login and authentica
tion.</li>\n" + " </ul>\n" + " </li>\n" + " <li>\n" + " <h3>\n" + " <strong>Check out the sample apps</strong>\n" + " </h3>\n" + " <p>The SDK includes samples that illustrate\n" + " Apigee features. You'll find the samples in the following\n" + " location in your SDK download:</p> <pre>\n" + "apigee-android-sdk-<version>\n" + " ...\n" + " /samples\n" + " </pre>\n" + ' <div id="collapse">\n' + ' <a href="#samples_collapse" class="btn" data-toggle="collapse"><i\n' + ' class="icon-white icon-chevron-down"></i> Details</a>\n' + " </div>\n" + ' <div id="samples_collapse" class="collapse">\n' + " <p>The samples include the following:</p>\n" + ' <table class="table">\n' + " <thead>\n" + " <tr>\n" + ' <th scope="col">Sample</th>\n' + ' <th scope="col">Description</th>\n' + " </tr>\n" + " </thead>\n" + " <tbody>\n" + " <tr>\n" + " <td>books<
/td>\n" + " <td>An app for storing a list of books that shows\n" + " Apigee database operations such as reading, creating, and\n" + " deleting.</td>\n" + " </tr>\n" + " <tr>\n" + " <td>messagee</td>\n" + " <td>An app for sending and receiving messages that\n" + " shows Apigee database operations (reading, creating).</td>\n" + " </tr>\n" + " <tr>\n" + " <td>push</td>\n" + " <td>An app that uses the push feature to send\n" + " notifications to the devices of users who have subscribed\n" + " for them.</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " </li>\n" + "</ul>\n");
+ $templateCache.put("app-overview/doc-includes/ios.html", "<h2>1. Integrate ApigeeiOSSDK.framework</h2>\n" + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->\n"
+ '<a class="jumplink" name="add_the_sdk_to_an_existing_project"></a>\n' + '<ul class="nav nav-tabs" id="myTab">\n' + ' <li class="active"><a data-toggle="tab" href="#existing_project">Existing\n' + " project</a></li>\n" + ' <li><a data-toggle="tab" href="#new_project">New project</a></li>\n' + "</ul>\n" + '<div class="tab-content">\n' + ' <div class="tab-pane active" id="existing_project">\n' + " <p>If you've already got an Xcode iOS project, add it into\n" + " your project as you normally would.</p>\n" + ' <div id="collapse">\n' + ' <a class="btn" data-toggle="collapse" href="#framework_collapse">Details</a>\n' + " </div>\n" + ' <div class="collapse" id="framework_collapse">\n' + " <ol>\n" + " <li>\n" + " <p>Locate the SDK framework file so you can add it to your\n" + " project. For example, you'll find the file at the following\n" + " path:</p> <pre>\n" + "<sdk_root>/bin/ApigeeiOSSDK.framework</p
re>\n" + " </li>\n" + " <li>In the <strong>Project Navigator</strong>, click on\n" + " your project file, and then the <strong>Build Phases</strong>\n" + " tab. Expand <strong>Link Binary With Libraries</strong>.\n" + " </li>\n" + " <li>Link the Apigee iOS SDK into your project.\n" + " <ul>\n" + " <li>Drag ApigeeiOSSDK.framework into the Frameworks\n" + " group created by Xcode.</li>\n" + " </ul>\n" + " <p>OR</p>\n" + " <ol>\n" + " <li>At the bottom of the <strong>Link Binary\n" + " With Libraries</strong> group, click the <strong>+</strong>\n" + " button. Then click <strong>Add Other</strong>.\n" + " </li>\n" + " <li>Navigate to the directory that contains\n" + " ApigeeiOSSDK.framework, and choose the\n" + " ApigeeiOSSDK.framework folder.</li>\n" + " </ol>\n" + " </li>\n"
+ " </ol>\n" + " </div>\n" + " </div>\n" + ' <div class="tab-pane" id="new_project">\n' + ' <a class="jumplink" name="create_a_new_project_based_on_the_SDK"></a>\n' + " <p>If you're starting with a clean slate (you don't have\n" + " a project yet), you can begin by using the project template\n" + " included with the SDK. The template includes support for SDK\n" + " features.</p>\n" + " <ol>\n" + " <li>\n" + " <p>Locate the project template in the expanded SDK. It\n" + " should be at the following location:</p> <pre>\n" + "<sdk_root>/new-project-template</pre>\n" + " </li>\n" + " <li>In the project template directory, open the project\n" + " file: Apigee App Services iOS Template.xcodeproj.</li>\n" + " <li>Get acquainted with the template by looking at its readme\n" + " file.</li>\n" + " </ol>\n" + " </div>\n" + "</div>\n" + "<h2>2. Add required iOS frameworks</h2>\n" + "<p>\n" +
" Ensure that the following iOS frameworks are part of your project. To\n" + " add them, under the <strong>Link Binary With Libraries</strong> group,\n" + " click the <strong>+</strong> button, type the name of the framework\n" + " you want to add, select the framework found by Xcode, then click <strong>Add</strong>.\n" + "</p>\n" + "<ul>\n" + " <li>QuartzCore.framework</li>\n" + " <li>CoreLocation.framework</li>\n" + " <li>CoreTelephony.framework </li>\n" + " <li>Security.framework</li>\n" + " <li>SystemConfiguration.framework</li>\n" + " <li>UIKit.framework</li>\n" + "</ul>\n" + "<h2>3. Update 'Other Linker Flags'</h2>\n" + "<p>\n" + " In the <strong>Build Settings</strong> panel, add the following under\n" + " <strong>Other Linker Flags</strong>:\n" + "</p>\n" + "<pre>\n" + "-ObjC -all_load</pre>\n" + "<p>\n" + " Confirm that flags are set for both <strong>DEBUG</strong> and <strong>RELEASE</strong>.\n" + "</p>\n" + "<h2>4. Initialize the SDK</h2>\n" + "<p>\n" +
" The <em>ApigeeClient</em> class initializes the App Services SDK. To\n" + " do this you will need your organization name and application name,\n" + " which are available in the <em>Getting Started</em> tab of the <a\n" + ' href="https://www.apigee.com/usergrid/">App Service admin portal</a>,\n' + " under <strong>Mobile SDK Keys</strong>.\n" + "</p>\n" + "<ol>\n" + " <li>Import the SDK\n" + " <p>Add the following to your source code to import the SDK:</p> <pre>\n" + "#import <ApigeeiOSSDK/Apigee.h></pre>\n" + " </li>\n" + " <li>\n" + " <p>\n" + " Declare the following properties in\n" + " <code>AppDelegate.h</code>\n" + " :\n" + " </p> <pre>\n" + "@property (strong, nonatomic) ApigeeClient *apigeeClient; \n" + "@property (strong, nonatomic) ApigeeMonitoringClient *monitoringClient;\n" + "@property (strong, nonatomic) ApigeeDataClient *dataClient; \n" + " </pre>\n" + " </li>\n" + " <li>\n" + " <p>\n" + " Instantiate the\n" + "
<code>ApigeeClient</code>\n" + " class inside the \n" + " <code>didFinishLaunching</code>\n" + " method of\n" + " <code>AppDelegate.m</code>\n" + " :\n" + " </p> <pre>\n" + "//Replace 'AppDelegate' with the name of your app delegate class to instantiate it\n" + "AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];\n" + "\n" + "//Sepcify your App Services organization and application names\n" + 'NSString *orgName = @"{{currentOrg}}";\n' + 'NSString *appName = @"{{currentApp}}";\n' + "\n" + "//Instantiate ApigeeClient to initialize the SDK\n" + "appDelegate.apigeeClient = [[ApigeeClient alloc]\n" + " initWithOrganizationId:orgName\n" + " applicationId:appName];\n" + " \n" + "//Retrieve instances of ApigeeClient.monitoringClient and ApigeeClient.dataClient\n" + "self.monitoringClient = [appDelegate.apigeeClient monitoringClient]; \n" + "self.
dataClient = [appDelegate.apigeeClient dataClient]; \n" + " </pre>\n" + " </li>\n" + "</ol>\n" + "\n" + "<h2>5. Verify SDK installation</h2>\n" + "\n" + "<p>\n" + " Once initialized, App Services will also automatically instantiate the\n" + " <code>ApigeeMonitoringClient</code>\n" + " class and begin logging usage, crash and error metrics for your app.\n" + "</p>\n" + "\n" + "<p>\n" + " To verify that the SDK has been properly initialized, run your app,\n" + " then go to <strong>'Monitoring' > 'App Usage'</strong> in the <a\n" + ' href="https://www.apigee.com/usergrid">App Services admin portal</a>\n' + " to verify that data is being sent.\n" + "</p>\n" + "<p>\n" + ' <img src="img/verify.png" alt="screenshot of data in admin portal" />\n' + "</p>\n" + '<div class="warning">It may take up to two minutes for data to\n' + " appear in the admin portal after you run your app.</div>\n" + "\n" + "<h2>Installation complete! Try these next steps</h2>\n" + "<ul>\n" + " <li>\n" +
" <h3>\n" + " <strong>Call additional SDK methods in your code</strong>\n" + " </h3>\n" + " <p>\n" + " Create an instance of the AppDelegate class, then use\n" + " <code>appDelegate.dataClient</code>\n" + " or\n" + " <code>appDelegate.monitoringClient</code>\n" + " to call SDK methods:\n" + " </p>\n" + ' <div id="collapse">\n' + ' <a class="btn" data-toggle="collapse" href="#client_collapse">Details</a>\n' + " </div>\n" + ' <div class="collapse" id="client_collapse">\n' + " <ul>\n" + " <li><code>appDelegate.dataClient</code>: Used to access the\n" + " data methods of the App Services SDK, including those for push\n" + " notifications, data store, and geolocation.</li>\n" + " <li><code>appDelegate.monitoringClient</code>: Used to\n" + " access the app configuration and monitoring methods of the App\n" + " Services SDK, including advanced logging, and A/B testing.</li>\n" +
" </ul>\n" + " <h3>Example</h3>\n" + " <p>For example, you could create a new entity with the\n" + " following:</p>\n" + " <pre>\n" + "AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];\n" + "ApigeeClientResponse *response = [appDelegate.dataClient createEntity:entity];\n" + " </pre>\n" + " </div>\n" + "\n" + " </li>\n" + " <li>\n" + " <h3>\n" + " <strong>Add App Services features to your app</strong>\n" + " </h3>\n" + " <p>With App Services you can quickly add valuable features to\n" + " your mobile or web app, including push notifications, a custom\n" + " data store, geolocation and more. Check out these links to get\n" + " started with a few of our most popular features:</p>\n" + " <ul>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/8410">Push notifications</a></strong>:\n' + " Send offers, alerts and other messages directly to user devices\n
" + " to dramatically increase engagement. With App Services you can\n" + " send 10 million push notification per month for free!</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/410">Geolocation</a></strong>: Target\n' + " users or return result sets based on user location to keep your\n" + " app highly-relevant.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/10152">Data storage</a></strong>:\n' + " Store all your application data on our high-availability\n" + " infrastructure, and never worry about dealing with a database\n" + " ever again.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/376">User management and\n' + " authentication</a></strong>: Every app needs users. Use App Services to\n" + " easily implement user registration, as well as OAuth\n" + " 2.0-compliant login and authentication.</li>\n" + "
</ul>\n" + " </li>\n" + " <li>\n" + " <h3>\n" + " <strong>Check out the sample apps</strong>\n" + " </h3>\n" + " <p>\n" + " The SDK includes samples that illustrate Apigee features. To\n" + " look at them, open the .xcodeproj file for each in Xcode. To get a\n" + " sample app running, open its project file, then follow the steps\n" + ' described in the section, <a target="_blank"\n' + ' href="http://apigee.com/docs/app-services/content/installing-apigee-sdk-ios">Add\n' + " the SDK to an existing project</a>.\n" + " </p>\n" + " <p>You'll find the samples in the following location in your SDK\n" + " download:</p> <pre>\n" + "apigee-ios-sdk-<version>\n" + " ...\n" + " /samples\n" + " </pre>\n" + ' <div id="collapse">\n' + ' <a class="btn" data-toggle="collapse" href="#samples_collapse">Details</a>\n' + " </div>\n" + ' <div class="collapse" id="samples_collapse">\n' + " <p>The samples inc
lude the following:</p>\n" + ' <table class="table">\n' + " <thead>\n" + " <tr>\n" + ' <th scope="col">Sample</th>\n' + ' <th scope="col">Description</th>\n' + " </tr>\n" + " </thead>\n" + " <tbody>\n" + " <tr>\n" + " <td>books</td>\n" + " <td>An app for storing a list of books that shows\n" + " Apigee database operations such as reading, creating, and\n" + " deleting.</td>\n" + " </tr>\n" + " <tr>\n" + " <td>messagee</td>\n" + " <td>An app for sending and receiving messages that\n" + " shows Apigee database operations (reading, creating).</td>\n" + " </tr>\n" + " <tr>\n" + " <td>push</td>\n" + " <td>An app that uses the push feature to send\n" + " notifications to the devices of users who have subscribed\n" + " for them.</td>\n" + " </
tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " <p> </p>\n" + " </li>\n" + "</ul>\n");
+ $templateCache.put("app-overview/doc-includes/javascript.html", "<h2>1. Import the SDK into your HTML</h2>\n" + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "--
>\n" + "<p>\n" + " To enable support for Apigee-related functions in your HTML, you'll\n" + " need to include\n" + " <code>apigee.js</code>\n" + " in your app. To do this, add the following to the\n" + " <code>head</code>\n" + " block of your HTML:\n" + "</p>\n" + "<pre>\n" + '<script type="text/javascript" src="path/to/js/sdk/apigee.js"></script>\n' + "</pre>\n" + "<h2>2. Instantiate Apigee.Client</h2>\n" + "<p>Apigee.Client initializes the App Services SDK, and gives you\n" + " access to all of the App Services SDK methods.</p>\n" + "<p>You will need to pass a JSON object with the UUID or name for\n" + " your App Services organization and application when you instantiate\n" + " it.</p>\n" + "<pre>\n" + "//Apigee account credentials, available in the App Services admin portal \n" + "var client_creds = {\n" + " orgName:'{{currentOrg}}',\n" + " appName:'{{currentApp}}'\n" + " }\n" + "\n" + "//Initializes the SDK. Also instantiates Apigee.Mon
itoringClient\n" + "var dataClient = new Apigee.Client(client_creds); \n" + "</pre>\n" + "\n" + "<h2>3. Verify SDK installation</h2>\n" + "\n" + "<p>\n" + " Once initialized, App Services will also automatically instantiate\n" + " <code>Apigee.MonitoringClient</code>\n" + " and begin logging usage, crash and error metrics for your app.\n" + "</p>\n" + "\n" + "<p>\n" + " To verify that the SDK has been properly initialized, run your app,\n" + " then go to <strong>'Monitoring' > 'App Usage'</strong> in the <a\n" + ' href="https://www.apigee.com/usergrid">App Services admin portal</a>\n' + " to verify that data is being sent.\n" + "</p>\n" + "<p>\n" + ' <img src="img/verify.png" alt="screenshot of data in admin portal" />\n' + "</p>\n" + '<div class="warning">It may take up to two minutes for data to\n' + " appear in the admin portal after you run your app.</div>\n" + "\n" + "<h2>Installation complete! Try these next steps</h2>\n" + "<ul>\n" + " <li>\n" + " <h3>\n" + "
<strong>Call additional SDK methods in your code</strong>\n" + " </h3>\n" + " <p>\n" + " Use\n" + " <code>dataClient</code>\n" + " or\n" + " <code>dataClient.monitor</code>\n" + " to call SDK methods:\n" + " </p>\n" + ' <div id="collapse">\n' + ' <a href="#client_collapse" class="btn" data-toggle="collapse"><i\n' + ' class="icon-white icon-chevron-down"></i> Details</a>\n' + " </div>\n" + ' <div id="client_collapse" class="collapse">\n' + " <ul>\n" + " <li><code>dataClient</code>: Used to access the data\n" + " methods of the App Services SDK, including those for push\n" + " notifications, data store, and geolocation.</li>\n" + " <li><code>dataClient.monitor</code>: Used to access the app\n" + " configuration and monitoring methods of the App Services SDK,\n" + " including advanced logging, and A/B testing.</li>\n" + " </ul>\n" + " </div>\n" + " </li>\n" + " <
li>\n" + " <h3>\n" + " <strong>Add App Services features to your app</strong>\n" + " </h3>\n" + " <p>With App Services you can quickly add valuable features to\n" + " your mobile or web app, including push notifications, a custom\n" + " data store, geolocation and more. Check out these links to get\n" + " started with a few of our most popular features:</p>\n" + " <ul>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/8410">Push notifications</a></strong>:\n' + " Send offers, alerts and other messages directly to user devices\n" + " to dramatically increase engagement. With App Services you can\n" + " send 10 million push notification per month for free!</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/410">Geolocation</a></strong>: Keep\n' + " your app highly-relevant by targeting users or returning result\n" + " sets based on user location.</li>\n" + "
<li><strong><a\n" + ' href="http://apigee.com/docs/node/10152">Data storage</a></strong>:\n' + " Store all your application data on our high-availability\n" + " infrastructure, and never worry about dealing with a database\n" + " ever again.</li>\n" + " <li><strong><a\n" + ' href="http://apigee.com/docs/node/376">User management and\n' + " authentication</a></strong>: Every app needs users. Use App Services to\n" + " easily implement registration, login and OAuth 2.0-compliant\n" + " authentication.</li>\n" + " </ul>\n" + " </li>\n" + " <li>\n" + " <h3>\n" + " <strong>Check out the sample apps</strong>\n" + " </h3>\n" + " <p>The SDK includes samples that illustrate\n" + " Apigee features. To look at them, open the .xcodeproj file\n" + " for each in Xcode. You'll find the samples in the following\n" + " location in your SDK download:</p> <pre>\n" + "apigee-javascript-sdk-mast
er\n" + " ...\n" + " /samples \n" + " </pre>\n" + ' <div id="collapse">\n' + ' <a href="#samples_collapse" class="btn" data-toggle="collapse"><i\n' + ' class="icon-white icon-chevron-down"></i> Details</a>\n' + " </div>\n" + ' <div id="samples_collapse" class="collapse">\n' + " <p>The samples include the following:</p>\n" + ' <table class="table">\n' + " <thead>\n" + " <tr>\n" + ' <th scope="col">Sample</th>\n' + ' <th scope="col">Description</th>\n' + " </tr>\n" + " </thead>\n" + " <tbody>\n" + " <tr>\n" + " <td>booksSample.html</td>\n" + " <td>An app for storing a list of books that shows\n" + " Apigee database operations such as reading, creating, and\n" + " deleting.</td>\n" + " </tr>\n" + " <tr>\n" + " <td>messagee</td>\n" + " <td>An app for sending and receiving messages that\n" + "
shows Apigee database operations (reading, creating).</td>\n" + " </tr>\n" + " <tr>\n" + " <td>monitoringSample.html</td>\n" + " <td>Shows basic configuration and initialization of the\n" + " HTML5 app monitoring functionality. Works in browser,\n" + " PhoneGap, Appcelerator, and Trigger.io.</td>\n" + " </tr>\n" + " <tr>\n" + " <td>readmeSample.html</td>\n" + " <td>A simple app for reading data from an Apigee\n" + " database.</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " </li>\n" + "</ul>\n");
+ $templateCache.put("app-overview/doc-includes/net.html", "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->\n");
+ $templateCache.put("app-overview/doc-includes/node.html", "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->");
+ $templateCache.put("app-overview/doc-includes/ruby.html", "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->");
+ $templateCache.put("data/data.html", '<div class="content-page">\n' + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + "\n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + "\n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->\n" + ' <bsmodal id="newCollection" title="C
reate new collection"\n' + ' close="hideModal" closelabel="Cancel"\n' + ' extrabutton="newCollectionDialog" extrabuttonlabel="Create"\n' + ' buttonid="collection" ng-cloak>\n' + " <fieldset>\n" + ' <div class="control-group">\n' + ' <label for="new-collection-name">Collection Name:</label>\n' + ' <div class="controls">\n' + ' <input type="text" ug-validate required\n' + ' ng-pattern="collectionNameRegex"\n' + ' ng-attr-title="{{collectionNameRegexDescription}}"\n' + ' ng-model="$parent.newCollection.name" name="collection"\n' + ' id="new-collection-name" class="input-xlarge" />\n' + ' <p class="help-block hide"></p>\n' + " </div>\n" + " </div>\n" + " </fieldset>\n" + " </bsmodal>\n" + "\n" + '<bsmodal id="newCollectionWithEntity" title="Create new collection"\n' + ' close="hideModal" closelabel="Cancel"\n' + ' extrabutton="newCollectionWithEntityDialog" extrabuttonlabel="Create"\n' + ' button
id="collection" ng-cloak>\n' + " <fieldset>\n" + ' <div class="control-group">\n' + ' <label for="new-collection-name">Collection Name:</label>\n' + ' <div class="controls">\n' + ' <input type="text" ug-validate required\n' + ' ng-pattern="collectionNameRegex"\n' + ' ng-attr-title="{{collectionNameRegexDescription}}"\n' + ' ng-model="$parent.newCollection.name"\n' + ' placeholder="newCollection"\n' + ' name="collection"\n' + ' id="new-collection-name"\n' + ' class="input-xlarge" />\n' + ' <p class="help-block hide"></p>\n' + " </div>\n" + ' <div class="controls">\n' + ' <label for="new-collection-entity">Create a new entity for your collection:</label>\n' + " <textarea\n" + ' ng-model="$parent.newCollection.entity" id="new-collection-entity" class="span6 pull-left" rows="4">{ "name":"value" }</textarea>\n' + " <br>\n" + ' <a class="btn pull-left" ng
-click="validateEntityData();">Validate JSON</a>\n' + ' <p class="help-block hide"></p>\n' + " </div>\n" + " </div>\n" + " </fieldset>\n" + " </bsmodal>\n" + "\n" + ' <div id="intro-page">\n' + ' <page-title title=" Collections" icon="📾"></page-title>\n' + " </div>\n" + "\n" + ' <section class="row-fluid">\n' + ' <div id="intro-list" class="span3 user-col">\n' + ' <a class="btn btn-primary" id="new-collection-link"\n' + ' ng-click="showModal(\'newCollectionWithEntity\')" title="new collection"><i\n' + ' class="pictogram"></i></a> <a class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data new collection')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_new_collection}}"\n' + ' tooltip-placement="right">(?)</a>\n' + ' <ul class="user-list" style="margin-top: 5px;">\n' + " <li\n" + " ng-class=\"queryCollection._type === entity.
name ? 'selected' : ''\"\n" + ' ng-repeat="entity in collectionList"\n' + " ng-click=\"loadCollection('/'+entity.name);\"><a\n" + ' id="collection-{{entity.name}}-link" href="javaScript:void(0)">/{{entity.name}}\n' + " </a></li>\n" + " </ul>\n" + "\n" + " </div>\n" + "\n" + ' <div class="span9 tab-content">\n' + ' <div class="content-page">\n' + ' <form id="intro-collection-query" name="dataForm"\n' + ' ng-submit="run();">\n' + " <fieldset>\n" + ' <div class="control-group">\n' + ' <div class="" data-toggle="buttons-radio">\n' + ' <!--a class="btn" id="button-query-back">◀ Back</a-->\n' + " <!--Added disabled class to change the way button looks but their functionality is as usual -->\n" + ' <label class="control-label" style="display: none"><strong>Method</strong>\n' + ' <a id="query-method-help" href="#" class="help-
link">get\n' + ' help</a></label> <input type="radio" id="create-rb"\n' + ' name="query-action" style="margin-top: -2px;"\n' + ' ng-click="selectPOST();" ng-checked="verb==\'POST\'">\n' + ' CREATE <input type="radio" id="read-rb"\n' + ' name="query-action" style="margin-top: -2px;"\n' + ' ng-click="selectGET();" ng-checked="verb==\'GET\'">\n' + ' READ <input type="radio" id="update-rb"\n' + ' name="query-action" style="margin-top: -2px;"\n' + ' ng-click="selectPUT();" ng-checked="verb==\'PUT\'">\n' + ' UPDATE <input type="radio" id="delete-rb"\n' + ' name="query-action" style="margin-top: -2px;"\n' + ' ng-click="selectDELETE();" ng-checked="verb==\'DELETE\'">\n' + ' DELETE <a class="help_tooltip"\n' + " ng-mouseov
er=\"help.sendTooltipGA('data query verbs')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_verb_buttons}}"\n' + ' tooltip-placement="right">(?)</a>\n' + " </div>\n" + " </div>\n" + "\n" + ' <div class="control-group">\n' + " <strong>Path </strong>\n" + ' <div class="controls">\n' + ' <input ng-model="data.queryPath" type="text" ug-validate\n' + ' id="pathDataQuery"\n' + ' ng-attr-title="{{pathRegexDescription}}"\n' + ' ng-pattern="pathRegex" class="span6"\n' + ' autocomplete="off" placeholder="ex: /users" required />\n' + ' <a class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data query path')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{too
ltip_path_box}}"\n' + ' tooltip-placement="right">(?)</a>\n' + " </div>\n" + " </div>\n" + ' <div class="control-group">\n' + ' <a id="back-to-collection" class="outside-link"\n' + ' style="display: none">Back to collection</a>\n' + " </div>\n" + ' <div class="control-group">\n' + " <strong>Query</strong>\n" + ' <div class="controls">\n' + ' <input ng-model="data.searchString" type="text"\n' + ' class="span6" autocomplete="off"\n' + " placeholder=\"ex: select * where name='fred'\" /> <a\n" + ' class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data query string')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_query_box}}"\n' + ' tooltip-placement="right">(?)</a>\n' + '
<div style="display: none">\n' + ' <a class="btn dropdown-toggle " data-toggle="dropdown">\n' + ' <span id="query-collections-caret" class="caret"></span>\n' + " </a>\n" + ' <ul id="query-collections-indexes-list"\n' + ' class="dropdown-menu ">\n' + " </ul>\n" + " </div>\n" + " </div>\n" + " </div>\n" + "\n" + "\n" + ' <div class="control-group"\n' + " ng-show=\"verb=='GET' || verb=='DELETE'\">\n" + ' <label class="control-label" for="query-limit"><strong>Limit</strong>\n' + ' <a class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data limit')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_limit}}"\n' + ' tooltip-placement="right">(?)</a><a\n' + ' id="quer
y-limit-help" href="#" ng-show="false"\n' + ' class="help-link">get help</a></label>\n' + ' <div class="controls">\n' + ' <div class="input-append">\n' + ' <input ng-model="data.queryLimit" type="text"\n' + ' class="span5" id="query-limit" placeholder="ex: 10">\n' + " </div>\n" + " </div>\n" + " </div>\n" + "\n" + ' <div class="control-group"\n' + ' style="display: {{queryBodyDisplay">\n' + ' <label class="control-label" for="query-source"><strong>JSON\n' + ' Body</strong> <a class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data json body')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_json_body}}"\n' + ' tooltip-placement="right">(?)</a> <a\n' + ' id="query-json-help" href="#" ng-show=
"false"\n' + ' class="help-link">get help</a></label>\n' + ' <div class="controls">\n' + ' <textarea ng-model="data.queryBody" id="query-source"\n' + ' class="span6 pull-left" rows="4">\n' + ' { "name":"value" }\n' + " </textarea>\n" + ' <br> <a class="btn pull-left"\n' + ' ng-click="validateJson();">Validate JSON</a> <a\n' + ' class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data validate json')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_json_validate}}"\n' + ' tooltip-placement="right">(?)</a>\n' + " </div>\n" + " </div>\n" + ' <div style="clear: both; height: 10px;"></div>\n' + ' <div class="control-group">\n' + ' <input type="submit"\n' + ' ng-disabled="!dataF
orm.$valid || loading"\n' + ' class="btn btn-primary" id="button-query"\n' + " value=\"{{loading ? loadingText : 'Run Query'}}\" /> <a\n" + ' class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data run query')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_run_query}}"\n' + ' tooltip-placement="right">(?)</a>\n' + " </div>\n" + " </fieldset>\n" + " </form>\n" + ' <div id="intro-entity-list">\n' + " <div\n" + " ng-include=\"display=='generic' ? 'data/display-generic.html' : ''\"></div>\n" + " <div\n" + " ng-include=\"display=='users' ? 'data/display-users.html' : ''\"></div>\n" + " <div\n" + " ng-include=\"display=='groups' ? 'data/display-groups.html' : ''\"></div>\n" + " <div\n" + " ng-include=\"display=='roles' ? '
data/display-roles.html' : ''\"></div>\n" + " </div>\n" + "\n" + " </div>\n" + "\n" + " </div>\n" + " </section>\n" + "\n" + "</div>\n" + "\n");
+ $templateCache.put("data/display-generic.html", '<bsmodal id="deleteEntities"\n' + ' title="Are you sure you want to delete the entities(s)?"\n' + ' close="hideModal" closelabel="Cancel"\n' + ' extrabutton="deleteEntitiesDialog" extrabuttonlabel="Delete"\n' + ' buttonid="del-entity" ng-cloak>\n' + " <!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WIT
HOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->\n" + "<fieldset>\n" + ' <div class="control-group"></div>\n' + "</fieldset>\n" + "</bsmodal>\n" + "\n" + '<span class="button-strip"> <a class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data entities list')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_entities_list}}" tooltip-placement="left">(?)</a>\n' + ' <button class="btn btn-primary"\n' + ' ng-disabled="!valueSelected(queryCollection._list) || deleteLoading"\n' + ' ng-click="deleteEntitiesDialog()">{{deleteLoading ?\n' + " loadingText : 'Delete Entity(s)'}}</button>\n" + "</span>\n" + '<table class="table table-striped collection-list">\n' + " <thead>\n" + ' <tr class="table-header">\n' + ' <th><input type="checkbox"\n' + ' ng-show="queryCollection._li
st.length > 0"\n' + ' id="selectAllCheckbox" ng-model="queryBoxesSelected"\n' + " ng-click=\"selectAllEntities(queryCollection._list,$parent,'queryBoxesSelected',true)\"></th>\n" + " <th ng-if=\"hasProperty('name')\">Name</th>\n" + " <th>UUID</th>\n" + " <th></th>\n" + " </tr>\n" + " </thead>\n" + ' <tbody ng-repeat="entity in queryCollection._list">\n' + ' <tr class="zebraRows">\n' + ' <td><input type="checkbox"\n' + ' id="entity-{{entity._data.name}}-cb"\n' + ' ng-value="entity._data.uuid" ng-model="entity.checked">\n' + " </td>\n" + " <td ng-if=\"hasProperty('name')\">{{entity._data.name}}</td>\n" + " <td>{{entity._data.uuid}}</td>\n" + ' <td><a href="javaScript:void(0)"\n' + ' ng-click="entitySelected[$index] = !entitySelected[$index]; selectEntity(entity._data.uuid, entitySelected[$index]);">{{entitySelected[$index]\n' + " ? 'Hide' : 'View'}} Details</a></td>\n" + " </tr>\n" + ' <t
r ng-if="entitySelected[$index]">\n' + ' <td colspan="5">\n' + "\n" + "\n" + ' <h4 style="margin: 0 0 20px 0">Entity Detail</h4>\n' + "\n" + "\n" + ' <ul class="formatted-json">\n' + ' <li ng-repeat="(k,v) in entity._data track by $index"><span\n' + ' class="key">{{k}} :</span> <!--todo - doing manual recursion to get this out the door for launch, please fix-->\n' + ' <span ng-switch on="isDeep(v)">\n' + ' <ul ng-switch-when="true">\n' + ' <li ng-repeat="(k2,v2) in v"><span class="key">{{k2}}\n' + ' :</span> <span ng-switch on="isDeep(v2)">\n' + ' <ul ng-switch-when="true">\n' + ' <li ng-repeat="(k3,v3) in v2"><span\n' + ' class="key">{{k3}} :</span><span class="value">{{v3}}</span></li>\n' + ' </ul> <span ng-switch-when="false"> <span\n' + ' class="value">{{v2}}</span>\n' + "
</span>\n" + " </span></li>\n" + ' </ul> <span ng-switch-when="false"> <span class="value">{{v}}</span>\n' + " </span>\n" + " </span></li>\n" + " </ul>\n" + "\n" + ' <div class="control-group">\n' + ' <h4 style="margin: 20px 0 20px 0">\n' + ' Edit Entity <a class="help_tooltip"\n' + " ng-mouseover=\"help.sendTooltipGA('data edit entity')\"\n" + ' ng-show="help.helpTooltipsEnabled" href="#"\n' + ' ng-attr-tooltip="{{tooltip_edit_entity}}"\n' + ' tooltip-placement="right">(?)</a>\n' + " </h4>\n" + ' <div class="controls">\n' + ' <textarea ng-model="entity._json" class="span12" rows="12"></textarea>\n' + ' <br> <a class="btn btn-primary toolbar pull-left"\n' + ' ng-click="validateJson();">Validate JSON</a>\n' + ' <button type="button" class="btn btn-primary pull-right"\n' + '
id="button-query" ng-click="saveEntity(entity);">Save</button>\n' + " </div>\n" + " </div>\n" + " </td>\n" + " </tr>\n" + "\n" + ' <tr ng-show="queryCollection._list.length == 0">\n' + ' <td colspan="4">No data found</td>\n' + " </tr>\n" + " </tbody>\n" + "</table>\n" + '<div style="padding: 10px 5px 10px 5px">\n' + ' <button class="btn btn-primary toolbar" ng-click="getPrevious()"\n' + ' style="display: {{previous_display">< Previous</button>\n' + ' <button class="btn btn-primary toolbar" ng-click="getNext()"\n' + ' style="display: {{next_display">Next ></button>\n' + "</div>\n" + "\n");
+ $templateCache.put("data/display-groups.html", "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in compliance with\n' + " the License. You may obtain a copy of the License at\n" + " \n" + " http://www.apache.org/licenses/LICENSE-2.0\n" + " \n" + " Unless required by applicable law or agreed to in writing, software\n" + ' distributed under the License is distributed on an "AS IS" BASIS,\n' + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " See the License for the specific language governing permissions and\n" + " limitations under the License.\n" + "-->");
+ $templateCache.put("data/display-roles.html", "roles---------------------------------\n" + "<!--\n" + " Licensed to the Apache Software Foundation (ASF) under one or more\n" + " contributor license agreements. See the NOTICE file distributed with\n" + " this work for additional information regarding copyright ownership.\n" + " The ASF licenses this file to You under the Apache License, Version 2.0\n" + ' (the "License"); you may not use this file except in comp
<TRUNCATED>