You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/04/10 22:22:34 UTC
[29/63] [abbrv] new bower build
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f3b55942/portal/dist/usergrid-portal/bower_components/apigee.max.ui/dist/js/max.min.js
----------------------------------------------------------------------
diff --git a/portal/dist/usergrid-portal/bower_components/apigee.max.ui/dist/js/max.min.js b/portal/dist/usergrid-portal/bower_components/apigee.max.ui/dist/js/max.min.js
deleted file mode 100644
index 484dbfc..0000000
--- a/portal/dist/usergrid-portal/bower_components/apigee.max.ui/dist/js/max.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! apigee-max-ui@1.0.1 2014-03-24 */
- AppServices = AppServices || {};!function(exports,global){global["true"]=exports,AppServices=AppServices||{},function(exports,global){function createGradient(color1,color2){var perShapeGradient={x1:0,y1:0,x2:0,y2:1};return{linearGradient:perShapeGradient,stops:[[0,color1],[1,color2]]}}function compareSummaryData(oldData,newData,currentCompare){for(var key in newData){var newVal,color,label,oldVal,percent;try{oldVal=oldData[key].hasOwnProperty("value")?oldData[key].value:oldData[key]}catch(e){}newVal=newData[key].hasOwnProperty("value")?newData[key].value:newData[key],newData.hasOwnProperty(key)&&("NOW"===currentCompare?(color="black",label=newVal):(percent=0===newVal?0:Math.round(oldVal/newVal*100)-100,0>percent?(color="red",label=percent+"%"):percent>0?(color="green",label="+"+percent+"%"):(color="black",label=0))),newData[key]={color:color,value:newVal,oldValue:oldVal,label:label}}return newData.currentCompare=currentCompare,newData}global["true"]=exports,angular.module("appservi
ces.max").run(["$templateCache",function($templateCache){"use strict";$templateCache.put("performance/ab-config.html",'<div>\n\n <page-title icon="" title="A/B Testing Configs"></page-title>\n\n <div class="row-fluid" >\n\n <div class="span12">\n <form class="form-horizontal configs">\n <div class="control-group">\n <slidecheckbox label="Enable A/B Testing" data="configData.abtestingOverrideEnabled"></slidecheckbox>\n </div>\n\n <div class="control-group">\n <label class="control-label" for="inputApplyTo">Apply to </label>\n <div class="controls">\n <input type="text" id="inputApplyTo" class="input-mini" ng-model="configData.abtestingPercentage"> % of Devices\n </div>\n </div>\n \n \n <h2 class="title">Monitoring Configs</h2>\n\n\n <div class="control-group">\n <slidecheckbox label="Enable Log Capturing" data="c
onfigData.abtestingAppConfig.enableLogMonitoring"></slidecheckbox>\n </div>\n <div class="control-group">\n <label class="control-label">Log Capture Levels</label>\n <div class="controls">\n <select ng-model="abLogLevel" ng-options="l.label for l in logLevels" ng-change="updateLogLevel(abLogLevel,\'abtestingAppConfig\')"></select>\n </div>\n </div>\n <div class="control-group">\n <slidecheckbox label="Enable Network Monitoring" data="configData.abtestingAppConfig.networkMonitoringEnabled"></slidecheckbox>\n </div>\n <div class="control-group">\n <slidecheckbox label="Enable Device Data Capture" data="configData.abtestingAppConfig.sessionDataCaptureEnabled"></slidecheckbox>\n </div>\n <div class="control-group">\n\n <slidecheckbox label="Read Location" data="configData.abtestingAppConfig.locationCaptureEna
bled"></slidecheckbox>\n\n <slidecheckbox label="Read IMEI" data="configData.abtestingAppConfig.imeicaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Device Model" data="configData.abtestingAppConfig.deviceModelCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Network Carrier" data="configData.abtestingAppConfig.networkCarrierCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Apigee Device ID" data="configData.abtestingAppConfig.deviceIdCaptureEnabled"></slidecheckbox>\n\n </div>\n <div class="control-group">\n <label class="control-label" for="inputUploadInt">Data Upload Interval (in Seconds)</label>\n <div class="controls">\n <input type="text" id="inputUploadInt" ng-model="configData.abtestingAppConfig.agentUploadIntervalInSeconds">\n </div>\n </div>\n <div class="control-group">\n
<label class="control-label" for="inputSampRate">Sampling Rate (in Percentage)</label>\n <div class="controls">\n <input type="text" id="inputSampRate" ng-model="configData.abtestingAppConfig.samplingRate">\n </div>\n </div>\n <div class="control-group">\n <slidecheckbox label="Upload When Roaming" data="configData.abtestingAppConfig.enableUploadWhenRoaming"></slidecheckbox>\n </div>\n <div class="control-group">\n <slidecheckbox label="Upload When Not on WIFI" data="configData.abtestingAppConfig.enableUploadWhenMobile"></slidecheckbox>\n </div>\n\n <h2 class="title">Application Specific Configs</h2>\n <div class="row-fluid" >\n <div class="span3" style="margin-right: 12px;">Tag</div>\n <div class="span3" style="margin-right: 15px;">Key</div>\n <div class="span3">Value</div>\n
</div>\n <div class="form-inline" ng-repeat="config in abConfigParameters">\n <input name="category" type="text" class="input-large" ng-model="config.tag" required>\n <input name="key" type="text" class="input-large" ng-model="config.paramKey" required> =\n <input name="value" type="text" class="input-large" ng-model="config.paramValue" required>\n <span class="hide">{{config.index = ($index + 1)}}</span>\n <button class="btn" ng-click="addRemoveConfig(config,\'abConfigParameters\')" ng-show="abConfigParameters.length != ($index + 1)">-</button>\n <button class="btn" ng-click="addRemoveConfig(config,\'abConfigParameters\')" ng-show="abConfigParameters.length == ($index + 1)">+</button>\n </div>\n <hr/>\n <button type="submit" class="btn btn-primary " ng-click="saveData(\'abConfigParameters\')">Save Changes</button>\n </form>\n\n </div>\n\n\n
</div>\n\n\n\n\n\n</div>\n\n\n'),$templateCache.put("performance/api-perf.html",'<demo-data></demo-data>\n<page-title icon="📈" title="API Performance"></page-title>\n\n<div class="page-filters">\n <span ng-include="\'performance/includes/time-filters.html\'"></span>\n</div>\n\n<div ng-init="apiPerfSetup()">\n <section class="row-fluid">\n\n </section>\n <!-- errors and crashes total row -->\n <section class="row-fluid api-perf-charts">\n\n <div class="span6">\n\n <h2 class="title chart">Avg Response Time</h2>\n\n <div ng-include="\'performance/includes/no-data.html\'" ng-if="!chartDataPresent"></div>\n\n <div class="main-chart-holder" ng-if="chartDataPresent">\n <chart id="requestTime" class="anim-chart" ng-if="selectedChartCriteria.chartCriteriaId === 1"\n chartdata="perfCharts.requestTimes"\n type="line"\n xAxisLabel="return Highcharts.dateFormat(\'%a, %H:%M\', this.value);"\n xAxisStep="3"><
/chart>\n\n <chart id="requestTimeBar" class="anim-chart" ng-if="selectedChartCriteria.chartCriteriaId > 1"\n chartdata="perfCharts.requestTimes"\n type="column" class="bar"></chart>\n </div>\n </div>\n\n <div class="span6">\n\n <h2 class="title chart">Total Requests</h2>\n\n <div ng-include="\'performance/includes/no-data.html\'" ng-if="!chartDataPresent"></div>\n\n <div class="main-chart-holder" ng-if="chartDataPresent">\n <chart id="requests" class="anim-chart" ng-if="selectedChartCriteria.chartCriteriaId === 1"\n chartdata="perfCharts.requests"\n type="line"\n xAxisLabel="return Highcharts.dateFormat(\'%a, %H:%M\', this.value);"\n xAxisStep="3"></chart>\n\n <chart id="requestsBar" class="anim-chart" ng-if="selectedChartCriteria.chartCriteriaId > 1"\n chartdata="perfCharts.requests"\n type="column" class="bar"></chart>\n </div>\n </div>
\n\n\n\n\n\n\n </section>\n\n <section class="row-fluid">\n\n <div class="span12 perf-summary-data">\n\n <div class="span3">\n <infobox datasrc="perfCharts.summary.avgLatency"\n currentcompare="perfCharts.summary.currentCompare"\n title="Avg Response Time"\n class="response-time"></infobox>\n </div>\n\n <div class="span3">\n <infobox datasrc="perfCharts.summary.maxLatency"\n currentcompare="perfCharts.summary.currentCompare"\n title="Max Response Time"\n class="request-time"></infobox>\n </div>\n\n <div class="span3">\n <infobox datasrc="perfCharts.summary.totalRequests"\n currentcompare="perfCharts.summary.currentCompare"\n title="Network Requests"\n class="requests"></infobox>\n </div>\n\n <div class="span3">\n <infobox datasrc="perfCharts.summary.totalErrors"\n
currentcompare="perfCharts.summary.currentCompare"\n title="Network Errors"\n class="errors"></infobox>\n </div>\n\n\n </div>\n\n </section>\n\n <balloon direction="south" ng-if="!chartDataPresent && logDataPresent">\n Scroll down to see log data sent by your SDK.\n </balloon>\n\n <section class="row-fluid">\n <div class="span12 pareto-charts">\n\n <div class="row-fluid log-search" ng-controller="RawLogCtrl">\n\n <div class="span12">\n <h2 class="title">Network API Search</h2>\n <form>\n <div class="input-append span8">\n <input type="text" placeholder="e.g. apigee.com..." ng-model="rawLogSearch.url"\n class=" input-xxlarge" ng-change="loadMoreLogs()">\n <button type="button" class="btn" ng-click="rawLogSearchShowAdv=!rawLogSearchShowAdv">Advanced</button>\n </div>\n <div class="span4 text-right" ng-if="rawLogs.length === 100
|| rawLogSearch.pageNumber > 0">\n {{rawLogSearch.pageNumber === 0 ? 1 : rawLogSearch.pageNumber * 100}} - {{rawLogSearch.pageNumber === 0 ? (1 * rawLogs.length) : (rawLogSearch.pageNumber + 1) * rawLogs.length}}\n <a class="btn btn-primary toolbar" ng-disabled="rawLogSearch.pageNumber === 0" ng-click="rawLogSearch.pageNumber > 0 ? prevPage() : \'\'"><i class="pictogram"></i></a>\n <a class="btn btn-primary toolbar" ng-disabled="rawLogs.length !== 100" ng-click="rawLogs.length === 100 ? nextPage() : \'\'"><i class="pictogram"></i></a>\n </div>\n </form>\n <form class="form-inline adv-rawlog-form" ng-show="rawLogSearchShowAdv">\n <br style="clear:both"/>\n <div class="input-prepend">\n <span class="add-on">Status Code:</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.httpStatusCode" ng-change="loadMoreLogs()">\n </div>\n
<div class="input-prepend">\n <span class="add-on">Resp. Time > </span>\n <input class="input-small" type="text" ng-model="rawLogSearch.latency" ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">Network Type</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.networkType" ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">Carrier</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.networkCarrier" ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">Platform</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.devicePlatform" ng-change="loadMoreLogs()">\n </div>\n <button type="submit" class="btn" ng-click="raw
LogSearch.httpStatusCode=\'\';rawLogSearch.latency=\'\';rawLogSearch.networkType=\'\';rawLogSearch.networkCarrier=\'\';rawLogSearch.devicePlatform=\'\';loadMoreLogs()">Clear All Advanced</button>\n </form>\n <table class="table table-striped table-bordered raw-log-table">\n <thead>\n <tr>\n <th>Time</th>\n <th>Message</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="log in rawLogs | orderBy:\'timeStamp\':true | rawLogFilter:rawLogSearch:[\'url\']:[\'latency\']">\n <td class="log-time-holder">\n <div>\n <span class="{{rawLogs.rawDataType === \'logRawData\' ? \'log-time1\' : \'log-time2\'}}">{{log.timeStamp | date:\'M-dd-yyyy HH:mm:ss\'}}</span>\n </div>\n </td>\n <td>\n <span>{{log.url}}</span>\n <div class="row-meta">\n <span class="label">
Status Code:</span>\n <span class="value">{{log.httpStatusCode}}</span>\n <span class="label">Response Time:</span>\n <span class="value">{{log.latency}}</span>\n <span class="label">Network Type:</span>\n <span class="value">{{log.networkType}}</span>\n <span class="label">Carrier:</span>\n <span class="value">{{log.networkCarrier}}</span>\n <span class="label">Platform:</span>\n <span class="value">{{log.devicePlatform}}</span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div class="row-fluid">\n <div class="input-append span8">\n\n\n </div>\n <div class="span4 text-right" ng-if="rawLogs.length === 100 || rawLogSearch.pageNumber > 0">\n {{rawLogSearch.pageNumber === 0 ? 1 : rawLogSearch.pageNumber * 100}} - {{rawL
ogSearch.pageNumber === 0 ? (1 * rawLogs.length) : (rawLogSearch.pageNumber + 1) * rawLogs.length}}\n <a class="btn btn-primary toolbar" ng-disabled="rawLogSearch.pageNumber === 0" ng-click="rawLogSearch.pageNumber > 0 ? prevPage() : \'\'"><i class="pictogram"></i></a>\n <a class="btn btn-primary toolbar" ng-disabled="rawLogs.length !== 100" ng-click="rawLogs.length === 100 ? nextPage() : \'\'"><i class="pictogram"></i></a>\n </div>\n </div>\n </div>\n\n </div>\n\n </div>\n </section>\n\n</div>\n\n\n'),$templateCache.put("performance/app-overview.html",'<demo-data></demo-data>\n\n<div ng:include="\'performance/includes/time-filters.html\'"></div>\n\n<div ng-controller="PerformanceCtrl" ng-init="appOverviewSetup()">\n<!-- crash errors row -->\n<section class="row-fluid errors-crashes">\n <div class="span6">\n\n <ul class="span2 info-details unstyled">\n <li class="title">Top 5 Crash Cau
ses</li>\n <li class="secondary">15 Total</li>\n <li class="tertiary">38 users affected</li>\n </ul>\n\n <div class="span10 top-5-crash info-box">\n <div class="info-container">\n <table class="table">\n <thead>\n <tr>\n <th class="graph-row">Cause</th>\n <th class="count">Total</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n
</tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n </div>\n\n <div class="span6">\n\n <ul class="span2 info-details unstyled">\n <li class="title">Top 5 Errors</li>\n <li class=
"secondary">120 Total</li>\n <li class="tertiary">200 users affected</li>\n </ul>\n\n <div class="span10 top-5-crash info-box">\n <div class="info-container">\n <table class="table">\n <thead>\n <tr>\n <th class="graph-row">Cause</th>\n <th class="count">Total</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <
tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar">message</div>\n </td>\n <td class="count">134</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n </div>\n</section>\n\n<!-- api row -->\n<section class="row-fluid api-issues">\n <div class="span6">\n\n <ul class="span2 info-details unstyled">\n <li class="title">S
low APIs</li>\n <li class="secondary">Above 2000ms</li>\n </ul>\n\n <div class="span10 slow-apis info-box">\n <div class="info-container">\n <table class="table">\n <thead>\n <tr>\n <th class="normal-row">URL</th>\n <th class="count">Response Time</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>
\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n </div>\n\n <div class="span6">\n\n <ul class="span2 info-details unstyled">\n <li class="title">API Errors</li>\n <li class="secondary">Abnormal Status Codes</li>\n </ul>\n\n <div class="span10 api-errors info-box">\n <div class="info-container">\n <table class="table">\n <thead>\n <tr>\n <th class="normal-row">URL</th>\n <th class="count">Status Code</th>\n </tr>\n </thead>\n
<tbody>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n <tr>\n <td class="normal-row">message</td>\n <td class="count">134</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n </div>\n</section>\n\n\n<!-- app usage row -->\n<section c
lass="row-fluid api-issues">\n <div class="span6">\n\n <ul class="span2 info-details unstyled">\n <li class="title">App Usage</li>\n <li class="secondary">By Version</li>\n </ul>\n\n <div class="span10 app-usage-content">\n <chart id="appVersions" value=\'{{appOverviewCharts.appVersions}}\' type="pie"\n style="max-width: 50%;height:250px"></chart>\n <table class="table">\n <thead>\n <tr>\n <th>App Version</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class="graph-row">\n <div class="bar"></div>\n 1.0.0\n </td>\n <td class="count">12%</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar"></div>\n
1.1.1\n </td>\n <td class="count">22%</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar"></div>\n 1.2.0\n </td>\n <td class="count">63%</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <div class="span6">\n\n <ul class="span2 info-details unstyled">\n <li class="title">App Usage</li>\n <li class="secondary">By Platform</li>\n </ul>\n\n <div class="span10 app-usage-content">\n <chart id="platformVersions" value=\'{{appOverviewCharts.platformVersions}}\' type="pie"\n style="max-width: 50%;height:250px"></chart>\n <table class="table">\n <thead>\n <tr>\n <th>Platform</th>\n </tr>\n
</thead>\n <tbody>\n <tr>\n <td class="graph-row">\n <div class="bar"></div>\n Firefox OS\n </td>\n <td class="count">12%</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar"></div>\n Android\n </td>\n <td class="count">22%</td>\n </tr>\n <tr>\n <td class="graph-row">\n <div class="bar"></div>\n iOS\n </td>\n <td class="count">63%</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n</section>\n\n<!-- trouble makers row -->\n<section class="row-fluid trouble-makers">\n <div class="span12">\n\n <ul class="span
2 info-details fixed unstyled">\n <li class="title">Trouble Makers</li>\n <li class="secondary">Problematic Devices, Networks, and OSs</li>\n </ul>\n\n <div class="span10">\n <div class="row-fluid">\n <div class="span12">\n\n <section class="span4">\n <h5>Problematic Devices</h5>\n <table class="table">\n <tbody>\n <tr>\n <td class="tablet-icon">HTC One</td>\n <td class="phone-icon">Nexus One</td>\n </tr>\n <tr>\n <td class="phone-icon">HTC Evo</td>\n <td class="tablet-icon">Galaxy Tab</td>\n </tr>\n </tbody>\n </table>\n\n </section>\n
\n <section class="span4">\n <h5>Slowest Carriers</h5>\n <ol class="asc-light slow-carriers grow">\n <li>Verizon</li>\n <li>Sprint</li>\n <li>TMobile</li>\n <li>AT&T</li>\n </ol>\n </section>\n\n <section class="span4">\n <h5>Problematic OS Versions</h5>\n <ol class="asc-light prob-os">\n <li>Android 2.3</li>\n <li>Android 2.3</li>\n <li>Android 2.3</li>\n <li>Android 2.3</li>\n </ol>\n </section>\n </div>\n </div>\n </div>\n\n </div>\n</section>\n\n<!-- sessions sparklines row -->\n<section class="row-fluid trouble-maker
s">\n <div class="span12">\n\n <ul class="span2 info-details fixed unstyled">\n <li class="title">Sessions</li>\n <li class="secondary">Over Past Hour</li>\n </ul>\n\n <div class="span10">\n <span class="span12 sessions-bar"></span>\n </div>\n\n </div>\n</section>\n\n</div>\n\n\n'),$templateCache.put("performance/app-usage.html",'<demo-data></demo-data>\n<page-title icon="📊" title="App Usage"></page-title>\n\n<div class="page-filters">\n <span ng-include="\'performance/includes/time-filters.html\'"></span>\n</div>\n\n\n\n<div ng-init="appUsageSetup()">\n\n\n <!-- errors and crashes total row -->\n <section class="row-fluid api-perf-charts">\n\n <div class="span12">\n <h2 class="title chart">Active Sessions Count {{selectedChartCriteria.chartName}}</h2>\n <!--step: <input ng-model="apptest.step" width="5" style="width: 20px" />-->\n\n <div ng-include="\'performance/includes/no-data.html\'"
ng-if="chartDataWaiting || !chartDataPresent"></div>\n\n <div class="main-chart-holder" ng-if="chartDataPresent">\n <chart id="sessionTotals" class="anim-chart" ng-if="selectedChartCriteria.chartName === \'Overview\'"\n chartdata="appUsageCharts.totals"\n type="line"\n xAxisLabel="return Highcharts.dateFormat(\'%a, %H:%M\', this.value);"\n xAxisStep="3"></chart>\n\n <chart id="sessionTotalsBar" class="anim-chart" ng-if="selectedChartCriteria.chartName !== \'Overview\'"\n chartdata="appUsageCharts.totals"\n type="column"></chart>\n </div>\n <div class="row-fluid app-summary-data">\n <div class="span4">\n <infobox datasrc="appUsageCharts.summary.totalSessions"\n currentcompare="appUsageCharts.summary.currentCompare"\n title="Total Sessions"\n class="usage"></infobox>\n </div>\n\n <div class="span4">\n
<infobox datasrc="appUsageCharts.summary.maxConcurrentSessions"\n currentcompare="appUsageCharts.summary.currentCompare"\n title="Max Concurrent Sessions"\n class="usage"></infobox>\n </div>\n\n <div class="span4">\n <infobox datasrc="appUsageCharts.summary.totalUniqueUsers"\n currentcompare="appUsageCharts.summary.currentCompare"\n title="Total Unique Users"\n class="usage"></infobox>\n </div>\n </div>\n\n </div>\n\n\n </section>\n\n <section class="row-fluid api-issues" ng-if="selectedChartCriteria.chartName === \'Overview\'">\n <div class="span6">\n\n <ul class="span12 info-details unstyled">\n <li class="title pie-label">App Version</li>\n </ul>\n <div class="span12 app-usage-content">\n <chart id="appVersion" class="anim-chart"\n chartdata="appUsageCharts.appVersion.chart"\n
type="pie" style="max-width:60%;margin:0 0 0 -5%;height:300px"\n titleicon="📊"\n titleiconclass="apichart"\n titlecolor="rgba(27,112,160,0.4)"\n titleimagetop="-6%"\n titleimageleft="-5%"></chart>\n <table class="table">\n <thead>\n <tr>\n <th>App Version</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="app in appUsageCharts.appVersion.data.chartData">\n <td class="graph-row" >\n <div class="bar"></div>\n {{app.attribute}}\n </td>\n <td class="count">{{app.percentage | number:0}}%</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <div class="span6">\n\n <ul class="span12 info-details unstyled">\n <li class="title pie-label">Device Platform</li>\n </ul>\n\n <div class="span12 app-usage-content">\n
<chart id="devicePlatform" class="anim-chart"\n chartdata="appUsageCharts.devicePlatform.chart"\n type="pie" style="max-width:60%;margin:0 0 0 -5%;height:300px"\n titleicon="📊"\n titleiconclass="apichart"\n titlecolor="rgba(27,112,160,0.4)"\n titleimagetop="-6%"\n titleimageleft="-5%"></chart>\n <table class="table">\n <thead>\n <tr>\n <th>Platform</th>\n </tr>\n </thead>\n <tbody>\n\n <tr ng-repeat="app in appUsageCharts.devicePlatform.data.chartData">\n <td class="graph-row" >\n <div class="bar"></div>\n {{app.attribute}}\n </td>\n <td class="count">{{app.percentage | number:0}}%</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n </section>\n\n\n <section class="row-fluid" ng-if="selectedChartCriteria.chart
Name === \'Overview\'">\n <div class="span6 pareto-charts">\n <h2 class="title">Sessions by Device Model</h2>\n\n <chart id="sessionsByModel" class="anim-chart"\n chartdata="appUsageCharts.sessionsByModel"\n type="column"\n height="300"></chart>\n </div>\n\n <div class="span6 pareto-charts">\n <h2 class="title">Sessions by OS Versions</h2>\n\n <chart id="sessionsByModel" class="anim-chart"\n chartdata="appUsageCharts.sessionsByPlatform"\n type="column"\n height="300"></chart>\n </div>\n </section>\n\n\n\n\n\n</div>\n\n\n'),$templateCache.put("performance/beta-config.html",'<div>\n <page-title icon="" title="Beta Testing Configs"></page-title>\n\n\n <div class="row-fluid" >\n\n <div class="span12">\n\n <form class="form-horizontal configs">\n <div class="control-group">\n <slidecheckbox label="Enable Devic
e Level Override" data="configData.deviceLevelOverrideEnabled"></slidecheckbox>\n </div>\n\n <div class="control-group">\n <label class="control-label">Matching Apigee Device Ids (one Id per line):</label>\n <div class="controls">\n <textarea ng-model="deviceIdFilters" ng-blur="updateFilter(deviceIdFilters,\'deviceIdFilters\',\'DEVICE_ID\')"></textarea>\n </div>\n </div>\n\n <div class="control-group">\n <label class="control-label">Matching Telephone Numbers (Android Only):</label>\n <div class="controls">\n <textarea ng-model="deviceNumberFilters" ng-blur="updateFilter(deviceNumberFilters,\'deviceNumberFilters\',\'DEVICE_NUMBER\')"></textarea>\n </div>\n </div>\n\n <h2 class="title">Monitoring Configs</h2>\n\n <div class="control-group">\n <slidecheckbox label="Enable Log Capturing"
data="configData.deviceLevelAppConfig.enableLogMonitoring"></slidecheckbox>\n </div>\n <div class="control-group">\n <label class="control-label">Log Capture Levels</label>\n <div class="controls">\n <select ng-model="betaLogLevel" ng-options="l.label for l in logLevels" ng-change="updateLogLevel(betaLogLevel,\'deviceLevelAppConfig\')"></select>\n </div>\n </div>\n <div class="control-group">\n <slidecheckbox label="Enable Network Monitoring" data="configData.deviceLevelAppConfig.networkMonitoringEnabled"></slidecheckbox>\n </div>\n <div class="control-group">\n <slidecheckbox label="Enable Device Data Capture" data="configData.deviceLevelAppConfig.deviceIdCaptureEnabled"></slidecheckbox>\n </div>\n <div class="control-group">\n\n <slidecheckbox label="Read Location" data="configData.deviceLevelAppConfig
.locationCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read IMEI" data="configData.deviceLevelAppConfig.imeicaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Device Model" data="configData.deviceLevelAppConfig.deviceModelCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Network Carrier" data="configData.deviceLevelAppConfig.networkCarrierCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Apigee Device ID" data="configData.deviceLevelAppConfig.deviceIdCaptureEnabled"></slidecheckbox>\n\n </div>\n <div class="control-group">\n <label class="control-label" for="inputUploadInt">Data Upload Interval (in Seconds)</label>\n <div class="controls">\n <input type="text" id="inputUploadInt" ng-model="configData.deviceLevelAppConfig.agentUploadIntervalInSeconds">\n </div>\n </div>\n <div class=
"control-group">\n <label class="control-label" for="inputSampRate">Sampling Rate (in Percentage)</label>\n <div class="controls">\n <input type="text" id="inputSampRate" ng-model="configData.deviceLevelAppConfig.samplingRate">\n </div>\n </div>\n <div class="control-group">\n <slidecheckbox label="Upload When Roaming" data="configData.deviceLevelAppConfig.enableUploadWhenRoaming"></slidecheckbox>\n </div>\n <div class="control-group">\n <slidecheckbox label="Upload When Not on WIFI" data="configData.deviceLevelAppConfig.enableUploadWhenMobile"></slidecheckbox>\n </div>\n\n <h2 class="title">Application Specific Configs</h2>\n <div class="row-fluid" >\n <div class="span3" style="margin-right: 12px;">Tag</div>\n <div class="span3" style="margin-right: 15px;">Key</div>\n <div c
lass="span3">Value</div>\n </div>\n <div class="form-inline" ng-repeat="config in deviceLevelConfigParameters">\n <input name="category" type="text" class="input-large" ng-model="config.tag" required>\n <input name="key" type="text" class="input-large" ng-model="config.paramKey" required> =\n <input name="value" type="text" class="input-large" ng-model="config.paramValue" required>\n <span class="hide">{{config.index = ($index + 1)}}</span>\n <button class="btn" ng-click="addRemoveConfig(config,\'deviceLevelConfigParameters\')" ng-show="deviceLevelConfigParameters.length != ($index + 1)">-</button>\n <button class="btn" ng-click="addRemoveConfig(config,\'deviceLevelConfigParameters\')" ng-show="deviceLevelConfigParameters.length == ($index + 1)">+</button>\n </div>\n <hr/>\n <button type="submit" class="btn btn-primary " ng-click="saveData(\'deviceL
evelConfigParameters\')">Save Changes</button>\n\n </form>\n\n </div>\n\n\n </div>\n\n </div>\n\n\n\n</div>\n\n\n'),$templateCache.put("performance/checkbox-template.html",'<div>\n<label class="control-label">{{label}}</label>\n<div class="controls">\n <div class="toggle-form">\n <input type="checkbox" class="check" ng-model="data"><b class="b switch"></b>\n <b class="b track"></b></div>\n</div>\n</div>'),$templateCache.put("performance/configure.html",'<div>\n\n<section class="row-fluid">\n\n <div class="span12">\n\n <h2 class="chart-title">{{configData.appName}}</h2>\n\n <div class="row-fluid" >\n\n <div class="span6">\n\n <form class="form-horizontal">\n <div class="control-group">\n <label class="control-label" for="inputAppId">App ID</label>\n <div class="controls">\n <input type="text" id="inputAppId" ng-model="configData.instaOpsApplicationId">\n </div>\n </div>\n
<div class="control-group">\n <div class="controls">\n <label class="checkbox">\n <input type="checkbox" ng-model="configData.monitoringDisabled"> monitoringDisabled\n </label>\n <button type="submit" class="btn">Sign in</button>\n </div>\n </div>\n </form>\n\n </div>\n\n\n </div>\n\n </div>\n\n</section>\n\n</div>\n\n\n'),$templateCache.put("performance/custom-events.html",'<h1 class="title"><i class="pictogram title">◴</i> Custom Events</h1>\n\n<div ng:include="\'performance/includes/time-filters.html\'"></div>'),$templateCache.put("performance/default-config.html",'<div>\n <page-title icon="📖" title="Default Configs"></page-title>\n\n\n <div class="row-fluid" >\n <div class="span12">\n <h2 class="title">Monitoring Configs</h2>\n <form class="form-horizontal configs">\n <div class="control-group">\n <slidecheckbox
label="Enable Log Capturing" data="configData.defaultAppConfig.enableLogMonitoring"></slidecheckbox>\n </div>\n <div class="control-group">\n <label class="control-label">Log Capture Levels</label>\n <div class="controls">\n <select ng-model="appConfigLogLevel" ng-options="l.label for l in logLevels" ng-change="updateLogLevel(appConfigLogLevel,\'defaultAppConfig\')"></select>\n </div>\n </div>\n <div class="control-group">\n <slidecheckbox label="Enable Network Monitoring" data="configData.defaultAppConfig.networkMonitoringEnabled"></slidecheckbox>\n </div>\n <div class="control-group">\n <slidecheckbox label="Enable Device Data Capture" data="configData.defaultAppConfig.sessionDataCaptureEnabled"></slidecheckbox>\n </div>\n <div class="control-group">\n\n <slidecheckbox label="Read Location" data="configData.defaultAppConfig.locatio
nCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read IMEI" data="configData.defaultAppConfig.imeicaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Device Model" data="configData.defaultAppConfig.deviceModelCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Network Carrier" data="configData.defaultAppConfig.networkCarrierCaptureEnabled"></slidecheckbox>\n\n <slidecheckbox label="Read Apigee Device ID" data="configData.defaultAppConfig.deviceIdCaptureEnabled"></slidecheckbox>\n\n </div>\n <div class="control-group">\n <label class="control-label" for="inputUploadInt">Data Upload Interval (in Seconds)</label>\n <div class="controls">\n <input type="text" id="inputUploadInt" ng-model="configData.defaultAppConfig.agentUploadIntervalInSeconds">\n </div>\n </div>\n <div class="control-group">\n <label class="control-
label" for="inputSampRate">Sampling Rate (in Percentage)</label>\n <div class="controls">\n <input type="text" id="inputSampRate" ng-model="configData.defaultAppConfig.samplingRate">\n </div>\n </div>\n <div class="control-group">\n <slidecheckbox label="Upload When Roaming" data="configData.defaultAppConfig.enableUploadWhenRoaming"></slidecheckbox>\n </div>\n <div class="control-group">\n <slidecheckbox label=" Upload When Not on WIFI" data="configData.defaultAppConfig.enableUploadWhenMobile"></slidecheckbox>\n </div>\n\n <h2 class="title">Application Specific Configs</h2>\n\n <div class="row-fluid" >\n <div class="span3" style="margin-right: 12px;">Tag</div>\n <div class="span3" style="margin-right: 15px;">Key</div>\n <div class="span3">Value</div>\n </div>\n <div class="form-inline " ng-repea
t="config in defaultAppConfigParameters">\n <input name="category" type="text" class="input-large" ng-model="config.tag" required>\n <input name="key" type="text" class="input-large" ng-model="config.paramKey" required> =\n <input name="value" type="text" class="input-large" ng-model="config.paramValue" required>\n <span class="hide">{{config.index = ($index + 1)}}</span>\n <button class="btn" ng-click="addRemoveConfig(config,\'defaultAppConfigParameters\')"\n ng-show="defaultAppConfigParameters.length != ($index + 1)">-\n </button>\n <button class="btn" ng-click="addRemoveConfig(config,\'defaultAppConfigParameters\')"\n ng-show="defaultAppConfigParameters.length == ($index + 1)">+\n </button>\n </div>\n <hr/>\n <button type="submit" class="btn btn-pri
mary " ng-click="saveData(\'defaultAppConfigParameters\')">Save Changes</button>\n </form>\n\n </div>\n\n\n </div>\n\n </div>\n\n\n\n</div>\n\n\n'),$templateCache.put("performance/demo-data.html",'<div id="demo-data-ctrl" ng-if="dataVals.showDemoBar" ng-cloak class="demo-holder">\n <div class="alert alert-demo alert-animate">\n <div class="toggle">\n <input type="checkbox" class="check" ng-model="dataVals.demoData">\n <b class="b switch"></b>\n <b class="b track"></b>\n </div>\n\n <div class="demo-text">\n'+" <i class=\"pictogram\">{{dataVals.demoData ? '💥' : ''}}</i>You are currently viewing <span class=\"bold\">{{dataVals.demoData ? 'demo data' : 'live data for your ' + currentApp + ' app'}}</span>.\n </div>\n\n <div class=\"demo-holder-content\">DEMO MODE {{dataVals.demoData ? 'ON' : 'OFF'}}</div>\n </div>\n</div>"),$templateCache.put("performance/errors-crashes.html",'<demo-data></demo-data>\n<div ng-init="erro
rsCrashesSetup()">\n<page-title icon="⚡" title="Errors & Crashes"></page-title>\n\n<div class="page-filters">\n <span ng-include="\'performance/includes/time-filters.html\'"></span>\n</div>\n\n\n\n<!-- errors and crashes total row -->\n<div id="popupHolder"></div>\n<div id="pointPopupTemp">\n<div id="pointPopup" class="hide" style="position:absolute" ng-mousedown="popup.startMoving(event);" ng-mouseup="popup.stopMoving();">\n <h3><i class="pictogram sub">⚡</i><span></span></h3><a class="pull-right" ng-click="hidePopup($event)">Close</a>\n <div class="content">\n\n </div>\n <div class="footer">\n <a ng-click="scrollTo(\'logs\')">View all logs</a>\n </div>\n</div>\n</div>\n\n<section class="row-fluid">\n\n\n\n</section>\n<section class="row-fluid">\n\n<div ng-class="ecDetailedView.value == 1 ? \'span8\' : \'span12\'">\n\n <h2 class="title with-icons">{{selectedChartCriteria.chartName}} <div class="pull-right">\n <a ng-if="selectedChartCriteria.chartName ==
= \'Overview\'" ng-click="convertChartType(\'convertLineChart\')"><i class="pictogram">📈</i>line</a>\n <a ng-if="selectedChartCriteria.chartName === \'Overview\'" ng-click="convertChartType(\'convertAreaChart\')"><i class="pictogram">🔾</i>area</a></div></h2>\n\n <div ng-include="\'performance/includes/no-data.html\'" ng-if="!chartDataPresent"></div>\n\n <div class="main-chart-holder" ng-if="chartDataPresent">\n\n <chart id="ecTotals" class="anim-chart"\n chartdata="ecCharts.totals"\n type="column"></chart>\n </div>\n <!--errors and crashes only (combined view)-->\n <div class="row-fluid summary-data errors-crashes" ng-show="ecDetailedView.value === 1">\n\n <div class="span6">\n <infobox datasrc="ecCharts.summary.totalAppErrors"\n currentcompare="ecCharts.summary.currentCompare"\n title="Total App Errors"\n class="errors"></infobox>\n </div>\n\n <div class="span6">\n <infobox datasrc
="ecCharts.summary.totalCrashes"\n currentcompare="ecCharts.summary.currentCompare"\n title="Total Crashes"\n class="crashes"></infobox>\n </div>\n\n </div>\n\n <!--errors only-->\n <div class="row-fluid summary-data errors" ng-if="ecDetailedView.value === 2">\n\n <div class="span4">\n <infobox datasrc="ecCharts.summary.totalCriticalErrors"\n currentcompare="ecCharts.summary.currentCompare"\n title="Total Critical"\n class="critical"></infobox>\n </div>\n\n <div class="span4">\n <infobox datasrc="ecCharts.summary.totalErrors"\n currentcompare="ecCharts.summary.currentCompare"\n title="Total Errors"\n class="errors"></infobox>\n </div>\n\n <div class="span4">\n <infobox datasrc="ecCharts.summary.totalWarnings"\n currentcompare="ecCharts.summary.currentCompare"\n title="Total Warnings"\n
class="warnings"></infobox>\n </div>\n </div>\n\n <!--crashes only-->\n <div class="row-fluid summary-data crashes" ng-if="ecDetailedView.value === 3">\n\n\n\n <div class="span12">\n <infobox datasrc="ecCharts.summary.totalCrashes"\n currentcompare="ecCharts.summary.currentCompare"\n title="Total Crashes"\n class="crashes"></infobox>\n </div>\n\n\n </div>\n\n</div>\n\n<div class="span4 crash-summary" ng-if="ecDetailedView.value === 1">\n <h2 class="title">Crash Summary (Top 5)</h2>\n\n <div class="row-fluid" style="text-align:center">\n\n\n <ul class="crashes-pie span12 info-details unstyled">\n <li class="small">App Version</li>\n\n\n <li style="width:250px;margin:10px auto 0 auto;">\n <chart id="appVersion"\n class="anim-chart"\n chartdata="ecCharts.appVersion.chart"\n type="pie" style="height:260px"\n titleicon="⚡"\n
titleiconclass="chart"\n titlecolor="rgba(255,3,3,0.5)"\n titleimagetop="-6%"\n titleimageleft="-2%"></chart>\n </li>\n\n </ul>\n\n <ul class="crashes-pie span12 info-details unstyled">\n <li class="small">Platforms</li>\n\n\n <li style="width:250px;margin:10px auto 0 auto;">\n <chart id="appVersion"\n class="anim-chart"\n chartdata="ecCharts.devicePlatform.chart"\n type="pie" style="height:260px"\n titleicon="⚡"\n titleiconclass="chart"\n titlecolor="rgba(255,3,3,0.5)"\n titleimagetop="-6%"\n titleimageleft="-2%"></chart>\n </li>\n </ul>\n\n </div>\n</div>\n\n</section>\n<section class="row-fluid" ng-if="ecDetailedView.value === 1">\n <div class="span12 pareto-charts">\n\n <div ng-class="row-fluid">\n\n <div id="deviceModelCrashes1" ng-if="rawLogs.rawDataType === \'logRa
wData\'" class="span6">\n <h2 class="title">Crashes by Device Models</h2>\n\n <chart id="deviceModels1"\n class="anim-chart"\n chartdata="ecCharts.deviceModels"\n type="column"\n height="300"></chart>\n\n </div>\n\n\n <div ng-if="rawLogs.rawDataType === \'logRawData\'" class="span6">\n <h2 class="title">Crashes by OS Versions</h2>\n\n <chart id="platformVersions"\n class="anim-chart"\n chartdata="ecCharts.platformVersions"\n type="column"\n height="300"></chart>\n </div>\n\n </div>\n\n </div>\n</section>\n\n<balloon direction="south" ng-if="!chartDataPresent && logDataPresent">\n Scroll down to see log data sent by your SDK.\n</balloon>\n\n<section class="row-fluid">\n <div class="span12">\n\n <!--http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/AJAX/angularjs-and-ng-grid-->\n <a name="logs"></a>\n <div
class="row-fluid log-search" ng-controller="RawLogCtrl">\n <div class="span12">\n <h2 ng-show="rawLogs.rawDataType === \'logRawData\'" class="title">Raw Log Search</h2>\n\n <h2 ng-hide="rawLogs.rawDataType === \'logRawData\'" class="title">Crash Log Search</h2>\n\n <form ng-switch="rawLogs.rawDataType">\n\n <div class="input-append span8">\n\n <input ng-show="rawLogs.rawDataType === \'logRawData\'" type="text" placeholder="log search..."\n ng-model="rawLogSearch.logMessage" class="input-xxlarge" ng-change="loadMoreLogs()">\n <input ng-hide="rawLogs.rawDataType === \'logRawData\'" type="text" placeholder="crash log search..."\n ng-model="rawLogSearch.crashSummary" class="input-xxlarge" ng-change="loadMoreLogs()">\n <button type="button" class="btn" ng-click="rawLogSearchShowAdv=!rawLogSearchShowAdv">{{rawLogSearchShowAdv ? \'Hide\' : \'Show\'}} Advanced</button>\n\n </div>
\n <div class="span4 text-right" ng-if="rawLogs.rawData.length === 100 || rawLogSearch.pageNumber > 0">\n {{rawLogSearch.pageNumber === 0 ? 1 : rawLogSearch.pageNumber * 100}} - {{rawLogSearch.pageNumber === 0 ? (1 * rawLogs.rawData.length) : (rawLogSearch.pageNumber + 1) * rawLogs.rawData.length}}\n <a class="btn btn-primary toolbar" ng-disabled="rawLogSearch.pageNumber === 0" ng-click="rawLogSearch.pageNumber > 0 ? prevPage() : \'\'"><i class="pictogram"></i></a>\n <a class="btn btn-primary toolbar" ng-disabled="rawLogs.rawData.length !== 100" ng-click="rawLogs.rawData.length === 100 ? nextPage() : \'\'"><i class="pictogram"></i></a>\n </div>\n </form>\n <form class="form-inline adv-rawlog-form" ng-show="rawLogSearchShowAdv">\n <br style="clear:both"/>\n <div class="input-prepend">\n <span class="add-on">Tag</span>\n <input class="input-small" type="text" ng-mod
el="rawLogSearch.tag"\n ng-attr-placeholder="{{rawLogs.rawData[0].tag}}..." ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend" ng-show="rawLogs.rawDataType === \'logRawData\'">\n <span class="add-on">Log Level</span>\n <input class="input-mini" type="text" ng-model="rawLogSearch.logLevel"\n ng-attr-placeholder="{{rawLogs.rawData[0].logLevel}}..." ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">Device Model</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.deviceModel"\n ng-attr-placeholder="{{rawLogs.rawData[0].deviceModel}}..." ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">Platform</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.devicePlatform"\n ng-a
ttr-placeholder="{{rawLogs.rawData[0].devicePlatform}}..." ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">OS Version</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.deviceOperatingSystem"\n ng-attr-placeholder="{{rawLogs.rawData[0].deviceOperatingSystem}}..." ng-change="loadMoreLogs()">\n </div>\n <div class="input-prepend">\n <span class="add-on">Device ID</span>\n <input class="input-small" type="text" ng-model="rawLogSearch.deviceId"\n ng-attr-placeholder="{{rawLogs.rawData[0].deviceId}}..." ng-change="loadMoreLogs()">\n </div>\n <button type="submit" class="btn"\n ng-click="rawLogSearch.tag=\'\';rawLogSearch.deviceModel=\'\';rawLogSearch.devicePlatform=\'\';rawLogSearch.deviceOperatingSystem=\'\';rawLogSearch.deviceId=\'\';loadMoreLogs()">\n Clear All Adv
anced\n </button>\n </form>\n <table class="table table-striped table-bordered raw-log-table">\n <thead>\n <tr>\n <th class="log-time-header"><div class="raw-data-text">Time</div></th>\n <th class="message-header"><div class="raw-data-text">Message</div>\n\n\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="log in rawLogs.rawData | orderBy:\'timeStamp\':true | rawLogFilter:rawLogSearch:[\'logMessage\',\'crashSummary\']">\n <td class="log-time-holder">\n <div>\n <span ng-class="rawLogs.rawDataType === \'logRawData\' ? \'log-time1\' : \'log-time2\'">{{log.timeStamp | date:\'M-dd-yyyy HH:mm:ss\'}}</span>\n <span ng-if="rawLogs.rawDataType === \'logRawData\'" class="log-level {{log.logLevel}}">\n {{log.logLevel === \'D\' ? \'Debug\' : \'\'}}\n {{log.logLevel === \'A\' ? \'Assert\' : \'\'}}\n
{{log.logLevel === \'I\' ? \'Info\' : \'\'}}\n {{log.logLevel === \'W\' ? \'Warn\' : \'\'}}\n {{log.logLevel === \'E\' ? \'Error\' : \'\'}}\n\n </span>\n </div>\n </td>\n <td >\n <span ng-if="rawLogs.rawDataType === \'logRawData\'">{{log.logMessage}}</span>\n <span ng-if="rawLogs.rawDataType !== \'logRawData\'">{{log.crashSummary ? log.crashSummary : \'No crash summary available\'}}</span>\n\n <div class="row-meta">\n <span ng-show="rawLogs.rawDataType === \'logRawData\'">\n <span class="label">Tag:</span>\n <span class="value">{{log.tag}}</span>\n <span class="label">Network Type:</span>\n <span class="value">{{log.networkType}}</span>\n <span class="label">Carrier:</span>\n <span class="value">{{log.networkCarrier}}</span>\n
</span>\n <span class="label">Device ID:</span>\n <span class="value">{{log.deviceId}}</span>\n <span class="label">Platform:</span>\n <span class="value">{{log.devicePlatform}}</span>\n <span class="label">OS:</span>\n <span class="value">{{log.deviceOperatingSystem}}</span>\n <span class="label">Device Model:</span>\n <span class="value">{{log.deviceModel}}</span>\n <span class="value" ng-hide="rawLogs.rawDataType === \'logRawData\'"><a ng-href="{{log.crashLogUrl}}">Download Crash Log</a></span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div class="row-fluid">\n <div class="input-append span8">\n\n\n </div>\n <div class="span4 text-right" ng-if="rawLogs.rawData.length === 100 || rawLogSearch.pageNumber > 0">\n {{rawLogSearch.pageNumber === 0 ? 1 : r
awLogSearch.pageNumber * 100}} - {{rawLogSearch.pageNumber === 0 ? (1 * rawLogs.rawData.length) : (rawLogSearch.pageNumber + 1) * rawLogs.rawData.length}}\n <a class="btn btn-primary toolbar" ng-disabled="rawLogSearch.pageNumber === 0" ng-click="rawLogSearch.pageNumber > 0 ? prevPage() : \'\'"><i class="pictogram"></i></a>\n <a class="btn btn-primary toolbar" ng-disabled="rawLogs.rawData.length !== 100" ng-click="rawLogs.rawData.length === 100 ? nextPage() : \'\'"><i class="pictogram"></i></a>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n</section>\n\n</div>\n\n\n'),$templateCache.put("performance/errors-crashes/crashes.html",""),$templateCache.put("performance/errors-crashes/errors.html",""),$templateCache.put("performance/event-config.html",'<div>\n\n <section class="row-fluid">\n\n <div class="span12">\n\n <h1 class="title"><i class="pictogram title">⇆</i> Event Configs</h1>\n\n <div class="row-
fluid" >\n\n <div class="span12">\n <h2 class="title"></h2>\n <form class="form-horizontal">\n\n </form>\n\n </div>\n\n\n </div>\n\n </div>\n\n </section>\n\n</div>\n\n\n'),$templateCache.put("performance/includes/info-box.html",'<ul class="info-details unstyled">\n <li class="title small">{{title}}</li>\n <li class="top-5-crash info-box">\n <div class="summary-container {{datasrc.color}}">\n {{datasrc.label}}\n <div class="compare-data" ng-show="currentcompare != \'NOW\'">\n'+" <span ng-class=\"currentcompare\">({{currentcompare == 'YESTERDAY' && 'Yesterday' || 'Last Week'}}) {{datasrc.value}}</span>\n </div>\n </div>\n </li>\n</ul>"),$templateCache.put("performance/includes/no-data.html",'<div class="main-chart-holder no-data">\n <bsmodal id="needHelp"\n title="Need Help?"\n close="hideModal"\n closelabel="Cancel"\n extrabutton="needHelpDialog"\n extr
abuttonlabel="Get Help"\n ng-cloak>\n <p>Do you want to contact support? Support will get in touch with you as soon as possible.</p>\n </bsmodal>\n <div class="no-data-msg" >\n <div class="waiting" ng-if="chartDataWaiting">\n <div class="bars" id="bar1"></div>\n <div class="bars" id="bar2"></div>\n <div class="bars" id="bar3"></div>\n </div>\n <div ng-if="!chartDataPresent && !chartDataWaiting && !logDataPresent">\n <div class="content">\n No data detected for this time range.\n </div>\n <button ng-click="showModal(\'needHelp\')" ng-if="performance.showHelpButton" class="btn glow">I have installed the SDK and need help!</button>\n <div class="content" style="margin: 10px 0 10px 0" ng-if="performance.showHelpButton">\n or\n </div>\n <button ng-click="toggleDemoData()" onclick="this.disabled=true" class="btn btn-primary action">View demo data</button>\n </div>\n </div>\n</div>'),$templateCache.put("performance/incl
udes/time-filters.html",'<!-- filtering -->\n\n\n <!-- custom errors-crashes filtering -->\n <div class="btn-group" ng-if="ecHideChartFilters === true">\n <a class="btn dropdown-toggle filter-selector action" data-toggle="dropdown">\n <span class="filter-ec">{{ecDetailedView.label}}</span>\n <span class="caret"></span>\n </a>\n <ul class="dropdown-menu">\n <li ng-repeat="detailedView in ecDetailedViewList" class="filterItem"><a ng-click="changeEcDetailedView(detailedView)">{{detailedView.label}}</a></li>\n </ul>\n </div>\n <!--common/global monitoring filters-->\n <div class="btn-group" ng-if="ecHideChartFilters !== true || ecDetailChartFilters === true">\n\n <a class="btn dropdown-toggle filter-selector" data-toggle="dropdown">\n <span class="filter-label">{{selectedChartCriteria.chartName}}</span>\n <span class="caret"></span>\n </a>\n <ul class="dropdown-menu" chart-filter="chartCriteria">\n </ul>\n </div>\n <div class="btn-
group">\n <a class="btn dropdown-toggle filter-selector" data-toggle="dropdown">\n <span class="filter-label">{{selectedtimefilter.label}}</span>\n <span class="caret"></span>\n </a>\n <ul class="dropdown-menu" time-filter="timeFilters">\n </ul>\n </div>\n <div class="btn-group compare" ng-class="(currentCompare === \'LAST_WEEK\') ? \'selected\' : \'\'">\n <a class="btn filter-selector" ng-click="compare(\'LAST_WEEK\',false)">\n <span class="filter-label"><i class="pictogram"></i>Compare Last Week</span>\n </a>\n </div>\n <div class="btn-group compare" ng-class="(currentCompare === \'YESTERDAY\') ? \'selected\' : \'\'">\n <a class="btn filter-selector" ng-click="compare(\'YESTERDAY\',false)">\n <span class="filter-label"><i class="pictogram"></i>Compare Yesterday</span>\n </a>\n </div>\n <div class="pull-right auto-update-container">\n <a class="auto-updates" ng-show="showAutoRefresh && !hideAutoupdate" ng-click="t
oggleAutoUpdate()"><i ng-if="autoUpdate !== null" class="pictogram title" style="width:13px">■</i><i ng-if="autoUpdate === null" class="pictogram title" style="width:13px">▶</i> Turn auto updates <span ng-if="autoUpdate !== null">off ({{autoUpdateTimer}})</span><span ng-if="autoUpdate === null">on</span></a>\n </div>\n'),$templateCache.put("push/push-config.html",'<div class="content-page">\n <page-title icon="⚒" title="Configuration"></page-title>\n\n\n <bsmodal id="deleteNotifier"\n title="Delete Notifier"\n close="hideModal"\n closelabel="Cancel"\n extrabutton="deleteNotifiersDialog"\n extrabuttonlabel="Delete"\n ng-cloak>\n <p>Are you sure you want to delete the notifier(s)?</p>\n </bsmodal>\n\n <a style="float: right" target="_blank" href="http://apigee.com/docs/usergrid/content/push-notifications" class="notifications-links">Learn more in our docs</a>\n <tabs>\n <pane heading="Apple">\n
<div style="margin-top: 10px;"> <!-- ng-controller="PushConfigCtrl"-->\n <div class="user-header-title">Apple Push Notification Service</div>\n <br>\n A Notifier allows App Services to connect to and deliver a message to a communication provider such as\n Apple\'s APNs. Upload Development and Production Certificates (.p12) to set up a bridge between your app\n and APNs for push notifications on iOS devices.\n\n For more help: view our\n <a href="#!/push/getStarted" class="notifications-links">getting started page</a>\n for more info on how to generate and download an iOS .p12 certificate at the Apple Developer Connection website.\n <br>\n <br>\n <form name="iosNotifierForm" id="iosNotifierForm" ng-submit="createAppleNotifier()" class="form-horizontal" novalidate>\n\n <fieldset>\n <div class="control-group">\n <label for="ios-notifier-name"><strong>Name this
notifier </strong></label>\n <div class="">\n <input type="text" id="ios-notifier-name" required ug-validate ng-model="notifier.appleNotifierName" class="" class="span6">\n <br>\n The notifier name is used as the key for push data. Give this a name that describes the certificate being uploaded.\n </div>\n <br>\n <label for="ios-cert"><strong>Certificate </strong></label>\n <div class="">\n <input type="file" data-file="param.file" id="ios-cert" />\n </div>\n <br>\n <strong>Environment </strong>\n <div class="">\n <select ng-model="notifier.appleEnvironment" required ug-validate id="ios-env">\n <option value="development">development</option>\n <option value="production">production</option>\n </select>\n </div>\n <br>\n
<strong>Certificate Password</strong>\n <div class="">\n <input ng-model="notifier.appleCertPassword" type="text" title="Please enter a password." class="span6" autocomplete="off" placeholder="ex: appledev"/>\n <br>\n Only applicable if your certificate is password protected\n </div>\n </div>\n\n <input type="submit" ng-disabled="!iosNotifierForm.$valid" class="btn btn-primary" value="Create Notifier"/>\n </fieldset>\n </form>\n\n </div>\n\n </pane>\n <pane heading="Android">\n\n <div style="margin-top: 10px;">\n <span class="title">Google Cloud Messaging</span>\n <br>\n A Notifier allows App Services to connect to and deliver a message to a communication provider such as\n Google Cloud Messaging (GCM). Copy and paste your API key to create a bridge between your app\n and GCM for push notifications on Android devic
es..\n <br><br>\n\n For more help: see our <a href="#!/getting-started/setup" class="notifications-links">getting started page</a> page.\n\n <form id="droidNotifierForm" name="droidNotifierForm" ng-submit="createAndroidNotifier()" class="form-horizontal" novalidate>\n <fieldset>\n <div class="control-group">\n <strong>Name this notifier </strong>\n <div >\n <input ng-model="notifier.androidNotifierName" id="droid-notifier-name" required ug-validate type="text" class="span6" autocomplete="off" placeholder="ex: androidDev"/>\n <br>\n The notifier name is used as the key for push data. Give this a name that describes the API key being uploaded.\n </div>\n </div>\n\n <div class="control-group">\n <strong>API Key </strong>\n <div >\n <input ng-model="notifier.androidNotifierAPIKey" id="droid-key-valu
e" required type="text" class="span6" autocomplete="off" ug-validate/>\n </div>\n </div>\n <input type="submit" href="" class="btn btn-primary" ng-disabled="!droidNotifierForm.$valid" value="Create Notifier"/>\n </fieldset>\n </form>\n </div>\n\n </pane>\n <pane heading="Notifiers">\n\n <bsmodal id="deleteNotifiers"\n title="Are you sure you want to delete the notifiers(s)?"\n close="hideModal"\n closelabel="Cancel"\n extrabutton="deleteNotifiersDialog"\n extrabuttonlabel="Delete"\n ng-cloak>\n <fieldset>\n <div class="control-group">\n </div>\n </fieldset>\n </bsmodal>\n\n <span class="button-strip">\n <button class="btn btn-primary" ng-disabled="!valueSelected(notifiersCollection._list)" ng-click="deleteNotifiersDialog()">Delete Notifier(s)</but
ton>\n </span>\n <table class="table table-striped collection-list">\n <tbody>\n <tr class="zebraRows notifications-row">\n <td style="width: 30px;"><input type="checkbox" ng-click="selectAllEntities(notifiersCollection._list,this,\'queryBoxesSelected\',true)"></td>\n <td class="notifications-details bold-header">Provider</td>\n <td class="notifications-details bold-header">Notifier</td>\n </tr>\n\n <tr class="zebraRows notifications-row" ng-repeat="notifier in notifiersCollection._list">\n <td>\n <input\n type="checkbox"\n ng-value="notifier.uuid"\n\n ng-model="notifier.checked"\n >\n </td>\n <td class="details">{{notifier.get(\'provider\')}}</td>\n <td class="details">{{notifier.get(\'name\')}}</td>\n </tr>\n </table>\n </pane>\n\n\n </tabs>\n\n</div>'),$templateCache.put("push/push-get-started.html",'\
n<div class="content-page">\n <page-title icon="" title="Getting Started"></page-title>\n\n\n\n <div>\n <tabs>\n <pane heading="Apple">\n <span class="title">Set up Push Notifications for Apple iOS</span>\n <div class="notifications-get-started">\n <div class="header">\n <img src="img/push/step_1.png" style="float: left;padding-right: 10px;">\n <div style="padding-top: 9px;">\n Follow <a target="_blank" href="http://apigee.com/docs/usergrid/content/push-notifications" class="notifications-links">the process</a> to generate and download an iOS .p12 certificate at the <a href="https://developer.apple.com/ios/manage/overview/index.action">Apple Developer Connection website</a>.\n </div>\n </div>\n <img style="margin-bottom: -5px;" src="img/push/APNS_cert_upload.png">\n </div>\n\n <div class="notifications-get-started">\n <div class="header">\n <im
g src="img/push/step_2.png" style="float: left;padding-right: 10px;">\n <div style="padding-top: 9px;">\n Add the certificates to set up your notifiers.\n </div>\n </div>\n <div style="">\n <a href="#!/push/configuration">Upload a certificate and create the connection to APNs.</a>\n </div>\n <img style="margin-left: 50px; margin-bottom: -5px;" src="img/push/APNS_certification.png">\n </div>\n\n <div class="notifications-get-started">\n <div class="header">\n <img src="img/push/step_3.png" style="float: left;padding-right: 10px;">\n <div style="padding-top: 9px;">\n Compose and schedule a push notification.\n </div>\n </div>\n <div style="">\n <a href="#!/push/sendNotification">Send a push notification.</a>\n </div>\n <br><br>\n <img style="margin-left: 58px; margin-bottom: -5px;"
src="img/push/iphone_message.png">\n </div>\n </pane>\n <pane heading="Android">\n <span class="title">Set up Push Notifications for Google Android</span>\n <div class="notifications-get-started">\n <div class="header">\n <img src="img/push/step_1.png" style="float: left;padding-right: 10px;">\n <div style="padding-top: 9px;">\n Retrieve your API key from the <a href="https://code.google.com/apis/console/" target="_blank">Android API Developer website</a>\n </div>\n </div>\n <img style="margin-bottom: -5px;" src="img/push/google_api_key.png">\n </div>\n\n <div class="notifications-get-started">\n <div class="header">\n <img src="img/push/step_2.png" style="float: left;padding-right: 10px;">\n <div style="padding-top: 9px;">\n Add your API key to set up your notifiers.\n </div>\n </div>\n <div s
tyle="">\n <a href="#!/push/configuration">Copy and paste your Google API Access key.</a>\n </div>\n <img style="margin-left: 50px; margin-bottom: -5px;" src="img/push/APNS_certification.png">\n </div>\n\n <div class="notifications-get-started">\n <div class="header">\n <img src="img/push/step_3.png" style="float: left;padding-right: 10px;">\n <div style="padding-top: 9px;">\n Compose and schedule a push notification.\n </div>\n </div>\n <div style="">\n <a href="#!/push/sendNotification">Send a push notification.</a>\n </div>\n <br><br>\n <img style="margin-left: 58px; margin-bottom: -5px;" src="img/push/android-notification.png">\n </div>\n\n </pane>\n </tabs>\n </div>\n</div>\n'),$templateCache.put("push/push-history.html",'<div class="content-page" style="min-height: 500px;">\n <page-title icon="✇" titl
e="Message History"></page-title>\n\n\n\n <section class="row-fluid">\n <div class="span12">\n <a style="float: right" target="_blank" href="http://apigee.com/docs/usergrid/content/push-notifications" class="notifications-links">Learn more in our docs</a>\n\n <div class="pull-left" style="margin-top: 10px;">\n <ul class="nav nav-pills">\n <li ng-class="selectedHistory.name === option.name ? \'active\' : \'\'" ng-repeat="option in historyList"><a ng-click="showHistory(option)">{{option.name}}</a></li>\n </ul>\n </div>\n </div>\n </section>\n <section class="row-fluid">\n <div class="span12">\n <div ng-if="notificationCollection._list.length === 0">\n No messages found\n </div>\n\n <div ng-repeat="notification in notificationCollection._list">\n <div style="border: 1px solid #aaa;">\n <div class="notifications-header">\n <div style="float: left">\n <stro
ng>Send Date:</strong>\n {{getNotificationStartedDate(notification._data) | date:\'EEEE, MMMM d, y h:mm:ss a\'}}\n <div style="margin-top: 10px;">\n <img ng-src="{{getStateImage(notification)}}" style="vertical-align:middle;margin-top: -3px;"> {{getStateMessage(notification)}}\n </div>\n </div>\n <div style="float: right; text-align: right;">\n <a href="" class="notifications-links" ng-click="viewReceipts(notification._data.uuid)">view details</a>\n <br>Total Sent: {{notification._data.statistics.sent ? notification._data.statistics.sent : 0}} Total Errors: {{notification._data.statistics.errors ? notification._data.statistics.errors : 0}}\n <br>\n <b>UUID</b>:\n <a href="" ng-click="viewReceipts(\'{{notification._data.uuid}}\')">{{notification._data.uuid}}</a>\n </div>\n </div>\n
<div style="padding: 10px;">\n <div> payload: {{notification._data.payloads}} </div>\n <div ng-if="notification._data.errorMessage"> error message: {{notification._data.errorMessage}} </div>\n </div>\n </div>\n <br>\n </div>\n\n <div style="height:20px"> </div>\n <div style="padding: 10px 5px 10px 5px">\n <button class="btn btn-primary" ng-click="getPrevious()" style="display:{{previous_display}}">< Previous</button>\n <button class="btn btn-primary" ng-click="getNext()" style="display:{{next_display}}; float:right;">Next ></button>\n </div>\n </div>\n </section>\n</div>\n'),$templateCache.put("push/push-receipts.html",'<div class="content-page" style="min-height: 500px;">\n <span style="float: left">\n <a href="#!/push/history" class="notifications-links" id="return-to-notifications"><- Return to All Notifications</a></span>\n <br>\n\n <div style="clear: both;"> 
;</div>\n <table class="table">\n <tbody>\n <tr class="zebraRows notifications-row">\n <td class="notifications-details bold-header">Created</td>\n <td class="notifications-details bold-header">Payload</td>\n <td class="notifications-details bold-header">Sent</td>\n <td class="notifications-details bold-header">Error</td>\n </tr>\n\n <tr class="zebraRows notifications-row" ng-repeat="receipt in receiptsCollection._list">\n <td class="details">{{receipt.get(\'created\')}}</td>\n <td class="details">{{receipt.get(\'payload\')}}</td>\n <td class="details">{{receipt.get(\'sent\')}}</td>\n <td class="view-details">{{receipt.get(\'errorCode\') + (receipt.get(\'errorCode\') ? \':\' : \'\')}} {{receipt.get(\'errorMessage\')}}</td>\n </tr>\n </table>\n <br>\n\n\n\n <div style="height:20px"> </div>\n <div style="padding: 10px 5px 10px 5px">\n <button class="btn btn-primary" ng-click="getPrevious()" style="display:{{previous_d
isplay}}">< Previous</button>\n <button class="btn btn-primary" ng-click="getNext()" style="display:{{next_display}}; float:right;">Next ></button>\n </div>\n\n</div>\n\n\n\n<!--div id="notificationsReceipt-panel" class="panel-buffer">\n <div class="well thingy">\n <span class="title">Notification Receipts</span>\n <span style="float: right"><a href="#" class="notifications-links" id="return-to-notifications"><- Return to All Notifications</a></span>\n </div>\n <div style="float: left">\n <ul class="nav nav-pills">\n <li class="active"><a href="#" id="view-notification-receipt-all">All</a></li>\n <li><a href="#" id="view-notification-receipt-received">Received</a></li>\n <li><a href="#" id="view-notification-receipt-failed">Failed</a></li>\n </ul>\n </div>\n <div style="margin-top:35px;"> </div>\n <div id="notification-receipts-display">\n <br><br>No Notifications found.\n </div>\n\n <ul id="notification-receipt-pagination" class="pager
">\n <li style="display: none" id="notification-receipt-previous" class="previous"><a >← Previous</a></li>\n <li style="display: none" id="notification-receipt-next" class="next"><a >Next →</a></li>\n </ul>\n\n</div-->'),$templateCache.put("push/push-send-notification.html",'<div class="content-page">\n\n\n <page-title icon="🔿" title="Send Notification"></page-title>\n\n\n <a style="float: right" target="_blank" href="http://apigee.com/docs/usergrid/content/push-notifications" class="notifications-links">Learn more in our docs</a>\n\n <form id="query-inputs" class="notifcations-form" ng-submit="scheduleNotification()" novalidate name="send">\n <h4>Notifier and Recipients</h4>\n Choose the Notifier (a configured notification service) to connect with for this push notification. Only users\n with devices registered with this notifier will receive the push notification. If a group is selected, only the users\n in the selected goup, with devices
registered with this notifier, will receive the push notification.\n\n <br/><br/>\n <label for="send-notification-notifier">Notifier:</label>\n <select name="notifierName" ng-required="true" id="send-notification-notifier" ng-model="send.selectedNotifier" ng-options="n._data.name for n in notifiersCollection">\n <option value="">Choose Notifier</option>\n </select>\n <span ng-show="send.notifierName.$dirty && send.notifierName.$error.required">\n You must choose a notifier\n </span>\n\n <div class="control-group">\n <input type="radio" name="notification-user-group" id="notification-user-group-all" ng-required="true" ng-model="send.controlGroup" value="all" checked> All Devices\n <input type="radio" name="notification-user-group" id="notification-user-group-devices" ng-required="true" ng-model="send.controlGroup" value="devices"> Devices\n <input type="radio" name="notification-user-group" id="notification-user-group-users" ng-require
d="true" ng-model="send.controlGroup" value="users"> Users\n <input type="radio" name="notification-user-group" id="notification-user-group-group" ng-required="true" ng-model="send.controlGroup" value="groups"> Groups\n </div>\n\n <div class="control-group">\n <div id="notificaitons-devices-select-container" ng-show="send.controlGroup === \'devices\'">\n Enter the device uuids:<br>\n <textarea id="devices-list" placeholder="device-UUID-1,device-UUID-2,device-UUID-3,etc..." ng-model="send.devices" ng-list class="span6 pull-left" rows="5" ng-required="send.controlGroup === \'devices\'"></textarea>\n </div>\n\n <div id="notificaitons-users-select-container" ng-show="send.controlGroup === \'users\'">\n Enter the usernames:<br>\n <textarea id="user-list" placeholder="username1,username2,username3,etc..." ng-model="send.users" ng-list class="span6 pull-left" rows="5" ng-required="send.controlGroup === \'users\'"></textarea>\n <!
--br>\n <div class="thingy">\n Or, use a form to look them up:<br>\n <a style="margin-right: 15px;" class="btn btn-primary" data-toggle="modal" href="#dialog-form-add-user-to-notification"> Add User</a>\n </div-->\n </div>\n <div id="notificaitons-group-select-container" ng-show="send.controlGroup === \'groups\'">\n Enter the group paths:<br>\n <textarea id="group-list" placeholder="group-path-1,group-path-2,group-path-3,etc..." ng-model="send.groups" ng-list class="span6 pull-left" rows="5" ng-required="send.controlGroup === \'groups\'"></textarea>\n <!--br>\n <div class="thingy">\n <a style="margin-right: 15px;" class="btn btn-primary" data-toggle="modal" href="#dialog-form-add-group-to-notification"> Add Group</a>\n </div-->\n </div>\n </div>\n\n <hr>\n <h4>Notifier Message</h4>\n Edit the "alert" message in the JSON payload.\n <div class="controls">\n <div>\n <textarea id="not
ification-json" class="span6 pull-left" rows="3" ng-model="send.notifierMessage" required ug-validate>Your text here</textarea>\n <br>\n <a target="_blank" href="http://apigee.com/docs/usergrid/content/push-notifications" class="notifications-links">Learn more about messages in our docs</a>\n </div>\n </div>\n <div style="display: none;">\n <a class="btn" id="reset-notifications-payload" >Reset Payload</a>\n <a class="btn" id="validate-notifications-json" >Validate JSON</a>\n <span id="notifications-json-status" class="alert" style="width: 400px;">Validate your JSON!</span>\n </div>\n <hr>\n <h4>Delivery</h4>\n Select whether to schedule this push notification for immediate delivery or at a future date and time.\n\n <div class="control-group">\n <input type="radio" name="notification-schedule-time" id="notification-schedule-time-now" ng-required="true" ng-model="send.deliveryPeriod" value="now" checked> Now\n <input t
ype="radio" name="notification-schedule-time" id="notification-schedule-time-later" ng-required="true" ng-model="send.deliveryPeriod" value="later"> Schedule for later\n </div>\n <div id="notification-schedule-time-controls" ng-show="send.deliveryPeriod === \'later\'">\n <div id="notifications-start-time-span" class="control-group">\n <label class="control-label" for="notification-schedule-time-date">Start Date/Time:</label>\n <div class="controls">\n <input type="text" id="notification-schedule-time-date" name="schedule-date" class="input-small"/>\n <input type="text" id="notification-schedule-time-time" name="schedule-time" value="12:00 AM" class="input-small"/> (<span id="gmt_display"></span>)\n </div>\n </div>\n </div>\n <br/>\n <p ng-show="send.$invalid">Please complete all required information before submitting.</p>\n <input type="submit" ng-disabled="!send.$valid" name="submit" class="btn btn-primary" />\n <
/form>\n</div>\n\n\n<form id="dialog-form-add-user-to-notification" class="modal hide fade">\n <div class="modal-header">\n <a class="close" data-dismiss="modal">×</a>\n <h4>Add a user to this Notification</h4>\n </div>\n <div class="modal-body">\n <p class="validateTips">Search for the user you want to add to this notification.</p>\n <fieldset>\n <div class="control-group">\n <label for="search-notification-user-name-input">User</label>\n <div class="controls">\n <input type="text" name="search-notification-user-name-input" id="search-notification-user-name-input" class="input-xlarge"/>\n <p class="help-block hide"></p>\n </div>\n </div>\n </fieldset>\n </div>\n <div class="modal-footer">\n <input type="submit" class="btn btn-usergrid" value="Add"/>\n <input type="reset" class="btn" value="Cancel" data-dismiss="modal"/>\n </div>\n</form>\n\n<form id="dialog-form-add-group-to-notification" class="modal
hide fade">\n <div class="modal-header">\n <a class="close" data-dismiss="modal">×</a>\n <h4>Add a group to this Notification</h4>\n </div>\n <div class="modal-body">\n <p class="validateTips">Search for the group you want to add to this notification.</p>\n <fieldset>\n <div class="control-group">\n <label for="search-notification-group-name-input">Group</label>\n <div class="controls">\n <input type="text" name="search-notification-group-name-input" id="search-notification-group-name-input" class="input-xlarge"/>\n <p class="help-block hide"></p>\n </div>\n </div>\n </fieldset>\n </div>\n <div class="modal-footer">\n <input type="submit" class="btn btn-usergrid" value="Add"/>\n <input type="reset" class="btn" value="Cancel" data-dismiss="modal"/>\n </div>\n</form>')
-}]),AppServices.MAX=AppServices.MAX||angular.module("appservices.max",[]),AppServices.MAX.directive("slidecheckbox",["$rootScope",function(){return{restrict:"ECA",scope:{data:"=data"},templateUrl:"performance/checkbox-template.html",replace:!0,transclude:!0,link:function(scope,lElement,attrs){scope.label=attrs.label}}}]),AppServices.MAX=AppServices.MAX||angular.module("appservices.max",[]),AppServices.MAX.controller("ConfigureCtrl",["data","$scope","$rootScope","$log",function(data,$scope,$rootScope,$log){function configPageSetup(){$scope.deviceNumberFilters="",$scope.deviceIdFilters="",$scope.defaultAppConfigParameters=[{tag:"",paramKey:"",paramValue:""}],$scope.deviceLevelConfigParameters=[{tag:"",paramKey:"",paramValue:""}],$scope.abConfigParameters=[{tag:"",paramKey:"",paramValue:""}],$scope.$on("app-initialized",function(){data.resource({appname:$rootScope.currentApp,orgname:$rootScope.currentOrg,username:"apm",endpoint:"apigeeMobileConfig"},!1).get({callback:"JSON_CALLBACK",ac
cess_token:getAccessToken()},function(cdata){$scope.configData=cdata,cdata.deviceNumberFilters&&cdata.deviceNumberFilters.length>0&&angular.forEach(cdata.deviceNumberFilters,function(value){$scope.deviceNumberFilters+=value.filterValue+"\n"}),cdata.deviceIdFilters&&cdata.deviceIdFilters.length>0&&angular.forEach(cdata.deviceIdFilters,function(value){$scope.deviceIdFilters+=value.filterValue+"\n"}),angular.forEach($scope.logLevels,function(value,key){cdata.defaultAppConfig.logLevelToMonitor===value.value&&($scope.appConfigLogLevel=$scope.logLevels[key])}),cdata.defaultAppConfig.customConfigParameters.length>0&&($scope.defaultAppConfigParameters=cdata.defaultAppConfig.customConfigParameters),angular.forEach($scope.logLevels,function(value,key){cdata.deviceLevelAppConfig.logLevelToMonitor===value.value&&($scope.betaLogLevel=$scope.logLevels[key])}),cdata.deviceLevelAppConfig.customConfigParameters.length>0&&($scope.deviceLevelConfigParameters=cdata.deviceLevelAppConfig.customConfigPara
meters),angular.forEach($scope.logLevels,function(value,key){cdata.abtestingAppConfig.logLevelToMonitor===value.value&&($scope.abLogLevel=$scope.logLevels[key])}),cdata.abtestingAppConfig.customConfigParameters.length>0&&($scope.abConfigParameters=cdata.abtestingAppConfig.customConfigParameters)},
<TRUNCATED>