usergrid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sfeld...@apache.org
Subject [41/63] [abbrv] [partial] usergrid git commit: Generated website contents.
Date Fri, 09 Oct 2015 21:37:21 GMT
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">&#128241;</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="&#128241;"></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.&nbsp;&nbsp;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&nbsp;an Android&nbsp;project, you can\n" + "      integrate the&nbsp;Apigee&nbsp;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-&lt;version&gt;.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&nbsp;Eclipse <strong>Package Explorer</strong>,\n" + "          select your application's project folder.\n" + "        </li>\n" + "        <li>Click the&nbsp;<strong>File &gt; Properties</strong>&nbsp;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-&lt;version&gt;.jar</code>,\n" + "   
        then click&nbsp;<strong>Open</strong>.\n" + "        </li>\n" + "        <li>Order the <code>apigee-android-&lt;version&gt;.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&nbsp;<strong>File &gt;\n" + "                Properties</strong> menu.\n" + "            </li>\n" + "            <li>In the properties dialog, in the&nbsp;<strong>Java\n" + "                Build Path</strong> section,&nbsp;click&nbsp;the <strong>Order\n" + "                and Export</strong>&nbsp;tab.\n" + "            </li>\n" + "            <li>\n" + "              <p>\n" + "                <strong>IMPORTANT:</strong> Select the checkbox for\n" + "                <code>apigee-android-&lt;version&gt;.jar</code>\n" + "                , then click the <strong>Top</strong>&nbsp;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-&lt;version&gt;.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&nbsp;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
 >&lt;sdk_root&gt;/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" + '&lt;uses-permission android:name="android.permission.INTERNET" /&gt;\n' + '&lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt;\n' + '&lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;\n' + '&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;\n' + '&lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;\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" + "&lt;application&gt;\n" + '    android:allowBackup="true"\n' + '    android:icon="@drawable/ic_launcher"\n' + '    android:label="@string/app_name"\n' + '    android:name=".YourApplication"\n' + "	…\n" + "&lt;/application&gt;			\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 &amp;\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&nbsp;features. You'll find the samples in the following\n" + "      location in your SDK download:</p> <pre>\n" + "apigee-android-sdk-&lt;version&gt;\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&nbsp;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" + "&lt;sdk_root&gt;/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&nbsp;<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&nbsp;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" + "&lt;sdk_root&gt;/new-project-template</pre>\n" + "      </li>\n" + "      <li>In the project template directory, open the project\n" + "        file:&nbsp;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&nbsp;</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 &lt;ApigeeiOSSDK/Apigee.h&gt;</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&nbsp;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-&lt;version&gt;\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>&nbsp;</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&nbsp;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" + '&lt;script type="text/javascript" src="path/to/js/sdk/apigee.js"&gt;&lt;/script&gt;\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&nbsp;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="&#128254;"></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">&#57347;</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">&#9664; 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 &nbsp; &nbsp; <input type="radio" id="read-rb"\n' + '                  name="query-action" style="margin-top: -2px;"\n' + '                  ng-click="selectGET();" ng-checked="verb==\'GET\'">\n' + '                READ &nbsp; &nbsp; <input type="radio" id="update-rb"\n' + '                  name="query-action" style="margin-top: -2px;"\n' + '                  ng-click="selectPUT();" ng-checked="verb==\'PUT\'">\n' + '                UPDATE &nbsp; &nbsp; <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>

Mime
View raw message