@ -0,0 +1,25 @@
|
|||||||
|
{{!
|
||||||
|
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
|
||||||
|
WSO2 Inc. 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.
|
||||||
|
}}
|
||||||
|
{{#zone "topCss"}}
|
||||||
|
{{css "css/daterangepicker.css"}}
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
{{#zone "bottomJs"}}
|
||||||
|
{{js "js/moment.min.js"}}
|
||||||
|
{{js "js/daterangepicker.js"}}
|
||||||
|
{{/zone}}
|
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onRequest() {
|
||||||
|
return "";
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
@ -0,0 +1,361 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.date-picker {
|
||||||
|
width: 170px;
|
||||||
|
height: 25px;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
line-height: 25px;
|
||||||
|
padding-left: 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-family: Arial;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #303030;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
border: 1px solid #bfbfbf;
|
||||||
|
background-color: #efefef;
|
||||||
|
width: 448px;
|
||||||
|
padding: 5px 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 20px;
|
||||||
|
color: #aaa;
|
||||||
|
font-family: Arial;
|
||||||
|
box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper.single-date {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper.no-shortcuts {
|
||||||
|
padding-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .footer {
|
||||||
|
display: none;
|
||||||
|
font-size: 11px;
|
||||||
|
padding-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper b {
|
||||||
|
color: #666;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper a {
|
||||||
|
color: rgb(107, 180, 214);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper {
|
||||||
|
border: 1px solid #bfbfbf;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 5px;
|
||||||
|
cursor: default;
|
||||||
|
position: relative;
|
||||||
|
_overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table {
|
||||||
|
width: 190px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table.month2 {
|
||||||
|
width: 190px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table th,
|
||||||
|
.date-picker-wrapper .month-wrapper table td {
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 14px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .day {
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-bottom: 1px;
|
||||||
|
color: #999;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table div.day.lastMonth,
|
||||||
|
.date-picker-wrapper .month-wrapper table div.day.nextMonth {
|
||||||
|
color: #999;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .day.checked {
|
||||||
|
background-color: rgb(156, 219, 247);
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .week-name {
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .day.has-tooltip {
|
||||||
|
cursor: help !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .day.toMonth.valid {
|
||||||
|
color: #333;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .day.real-today {
|
||||||
|
background-color: rgb(255, 230, 132);
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .month-wrapper table .day.real-today.checked {
|
||||||
|
background-color: rgb(112, 204, 213);
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper table .caption {
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper table .caption .next,
|
||||||
|
.date-picker-wrapper table .caption .prev {
|
||||||
|
padding: 0 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper table .caption .next:hover,
|
||||||
|
.date-picker-wrapper table .caption .prev:hover {
|
||||||
|
background-color: #ccc;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap {
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
top: 0px;
|
||||||
|
left: 204px;
|
||||||
|
z-index: 1;
|
||||||
|
width: 15px;
|
||||||
|
height: 100%;
|
||||||
|
background-color: red;
|
||||||
|
font-size: 0;
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-lines {
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-line {
|
||||||
|
height: 15px;
|
||||||
|
width: 15px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-line .gap-1 {
|
||||||
|
z-index: 1;
|
||||||
|
height: 0;
|
||||||
|
border-left: 8px solid white;
|
||||||
|
border-top: 8px solid #eee;
|
||||||
|
border-bottom: 8px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-line .gap-2 {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0px;
|
||||||
|
z-index: 2;
|
||||||
|
height: 0;
|
||||||
|
border-left: 8px solid transparent;
|
||||||
|
border-top: 8px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-line .gap-3 {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 8px;
|
||||||
|
z-index: 2;
|
||||||
|
height: 0;
|
||||||
|
border-left: 8px solid transparent;
|
||||||
|
border-bottom: 8px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-top-mask {
|
||||||
|
width: 6px;
|
||||||
|
height: 1px;
|
||||||
|
position: absolute;
|
||||||
|
top: -1px;
|
||||||
|
left: 1px;
|
||||||
|
background-color: #eee;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .gap .gap-bottom-mask {
|
||||||
|
width: 6px;
|
||||||
|
height: 1px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: -1px;
|
||||||
|
left: 7px;
|
||||||
|
background-color: #eee;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .selected-days {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar {
|
||||||
|
line-height: 40px;
|
||||||
|
height: 40px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar .error-top {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar .normal-top {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar .default-top {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar.error .default-top {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar.error .error-top {
|
||||||
|
display: block;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar.normal .default-top {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar.normal .normal-top {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar .apply-btn {
|
||||||
|
position: absolute;
|
||||||
|
right: 0px;
|
||||||
|
top: 6px;
|
||||||
|
padding: 3px 5px;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
color: #d9eef7;
|
||||||
|
border: solid 1px #0076a3;
|
||||||
|
background: #0095cd;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#00adee), to(#0078a5));
|
||||||
|
background: -moz-linear-gradient(top, #00adee, #0078a5);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-wrapper .drp_top-bar .apply-btn.disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
color: #606060;
|
||||||
|
border: solid 1px #b7b7b7;
|
||||||
|
background: #fff;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
|
||||||
|
background: -moz-linear-gradient(top, #fff, #ededed);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*time styling*/
|
||||||
|
.time {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time input[type=range] {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time1, .time2 {
|
||||||
|
width: 180px;
|
||||||
|
padding: 0 5px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time1 {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time2 {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hour, .minute {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.hour-range, input.minute-range {
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dateRangePickerContainer .date-range, #dateRangePickerContainer .input-append {
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#date-range {
|
||||||
|
padding-right: 30px;
|
||||||
|
width: 300px;
|
||||||
|
height: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dateRangePickerContainer {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-range {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dateRangePickerContainer button.active {
|
||||||
|
background-color: #e6e6e6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dateRangePickerContainer .btn-default:hover {
|
||||||
|
background-color: #b2b2b2;
|
||||||
|
border-color: #000000;
|
||||||
|
}
|
@ -1,31 +1,520 @@
|
|||||||
{{!
|
{{unit "cdmf.unit.device.type.android.leaflet"}}
|
||||||
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
{{unit "cdmf.unit.lib.qrcode"}}
|
||||||
|
{{unit "cdmf.unit.device.type.android.qr-modal"}}
|
||||||
WSO2 Inc. licenses this file to you under the Apache License,
|
{{unit "cdmf.unit.device.type.android.operation-bar"}}
|
||||||
Version 2.0 (the "License"); you may not use this file except
|
|
||||||
in compliance with the License.
|
{{#if deviceFound}}
|
||||||
You may obtain a copy of the License at
|
{{#if isAuthorized}}
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
{{#zone "device-details-header"}}
|
||||||
|
<h1 class="page-sub-title device-id device-select"
|
||||||
Unless required by applicable law or agreed to in writing,
|
data-deviceid="{{deviceView.deviceIdentifier}}" data-type="{{deviceView.type}}"
|
||||||
software distributed under the License is distributed on an
|
data-ownership="{{deviceView.ownership}}">
|
||||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
Device {{deviceView.name}}
|
||||||
KIND, either express or implied. See the License for the
|
{{#if deviceView.model}}
|
||||||
specific language governing permissions and limitations
|
<span class="lbl-device">
|
||||||
under the License.
|
( {{deviceView.vendor}} {{deviceView.model}} )
|
||||||
}}
|
</span>
|
||||||
{{#zone "device-opetations"}}
|
{{/if}}
|
||||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
</h1>
|
||||||
Operations
|
{{/zone}}
|
||||||
</div>
|
|
||||||
<div class="add-margin-top-4x">
|
{{#zone "overview-section"}}
|
||||||
{{unit "mdm.unit.device.operation-bar"}}
|
<div class="media-body asset-desc add-padding-left-5x">
|
||||||
</div>
|
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Device
|
||||||
{{/zone}}
|
Overview
|
||||||
|
</div>
|
||||||
|
<table class="table table-responsive table-striped" id="members">
|
||||||
|
<tbody>
|
||||||
|
{{#if deviceView.deviceIdentifier}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Device ID</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.deviceIdentifier}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.name}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Name</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.name}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.vendor}}
|
||||||
|
{{#if deviceView.model}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Model</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.vendor}} {{deviceView.model}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.status}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Status</td>
|
||||||
|
<td style="padding:10px 15px;">
|
||||||
|
{{#equal deviceView.status "ACTIVE"}}<span><i
|
||||||
|
class="fw fw-ok icon-success"></i>Active</span>{{/equal}}
|
||||||
|
{{#equal deviceView.status "INACTIVE"}}<span><i
|
||||||
|
class="fw fw-warning icon-warning"></i>Inactive</span>{{/equal}}
|
||||||
|
{{#equal deviceView.status "BLOCKED"}}<span><i
|
||||||
|
class="fw fw-remove icon-danger"></i>Blocked</span>{{/equal}}
|
||||||
|
{{#equal deviceView.status "REMOVED"}}<span><i
|
||||||
|
class="fw fw-delete icon-danger"></i>Removed</span>{{/equal}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.owner}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Owner</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.owner}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.ownership}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Ownership</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.ownership}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.imei}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">IMEI</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.imei}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.udid}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">UDID</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.udid}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.osBuildDate}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Firmware Build
|
||||||
|
Date
|
||||||
|
</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.osBuildDate}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.phoneNumber}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Phone Number</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.phoneNumber}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.lastUpdatedTime}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Last Update</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.lastUpdatedTime}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
{{#zone "device-opetations"}}
|
||||||
|
{{#if deviceView.isNotRemoved}}
|
||||||
|
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
||||||
|
Operations
|
||||||
|
</div>
|
||||||
|
<div class="add-margin-top-4x">
|
||||||
|
{{unit "cdmf.unit.device.operation-bar" device=deviceView backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{#zone "device-detail-properties"}}
|
||||||
|
<div class="media tab-responsive">
|
||||||
|
<div class="media-left col-xs-1 col-sm-1 col-md-2 col-lg-2 hidden-xs">
|
||||||
|
<ul class="list-group nav nav-pills nav-stacked" role="tablist">
|
||||||
|
{{#if deviceView.isNotWindows}}
|
||||||
|
<li role="presentation" class="list-group-item active">
|
||||||
|
<a href="#device_details_tab" role="tab" data-toggle="tab"
|
||||||
|
aria-controls="device_details_tab">
|
||||||
|
<i class="icon fw fw-mobile"></i><span class="hidden-sm">Device Details</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.isNotWindows}}
|
||||||
|
<li role="presentation" class="list-group-item">
|
||||||
|
{{else}}
|
||||||
|
<li role="presentation" class="list-group-item active">
|
||||||
|
{{/if}}
|
||||||
|
<li role="presentation" class="list-group-item">
|
||||||
|
<a href="#policy_compliance_tab" role="tab" data-toggle="tab"
|
||||||
|
aria-controls="policy_compliance_tab">
|
||||||
|
<i class="icon fw fw-policy"></i><span class="hidden-sm">Policy Compliance</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{#if deviceView.isNotWindows}}
|
||||||
|
<li role="presentation" class="list-group-item">
|
||||||
|
<a href="#device_location_tab" role="tab" data-toggle="tab"
|
||||||
|
data-lat="{{deviceView.location.latitude}}"
|
||||||
|
data-long="{{deviceView.location.longitude}}"
|
||||||
|
aria-controls="device_location_tab">
|
||||||
|
<i class="icon fw fw-map-location"></i><span
|
||||||
|
class="hidden-sm">Device Location</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li role="presentation" class="list-group-item">
|
||||||
|
<a href="#installed_applications_tab" role="tab" data-toggle="tab"
|
||||||
|
aria-controls="installed_applications_tab">
|
||||||
|
<i class="icon fw fw-application"></i><span class="hidden-sm">Installed Applications</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.isNotRemoved}}
|
||||||
|
<li role="presentation" class="list-group-item">
|
||||||
|
<a href="#event_log_tab" role="tab" data-toggle="tab" aria-controls="event_log_tab">
|
||||||
|
<i class="icon fw fw-text"></i><span class="hidden-sm">Operations Log</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="media-body add-padding-left-5x remove-padding-xs">
|
||||||
|
<div class="panel-group tab-content remove-padding" id="tabs" role="tablist"
|
||||||
|
data-status="{{deviceView.isNotRemoved}}" aria-multiselectable="true">
|
||||||
|
<div class="arrow-left hidden-xs"></div>
|
||||||
|
|
||||||
|
{{#if deviceView.isNotWindows}}
|
||||||
|
<div class="panel panel-default" role="tabpanel" id="device_details_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="device_details">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||||
|
href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||||
|
<i class="fw fw-mobile fw-2x"></i>
|
||||||
|
Device Details
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">Device Details</div>
|
||||||
|
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel"
|
||||||
|
aria-labelledby="device_details">
|
||||||
|
<div class="panel-body ">
|
||||||
|
<div class="device-detail-body">
|
||||||
|
<!-- device summary -->
|
||||||
|
{{#equal deviceView.type "windows"}}
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4 class="remove-margin"><i class="icon fw fw-info"></i>Not
|
||||||
|
available yet</h4>
|
||||||
|
</div>
|
||||||
|
{{/equal}}
|
||||||
|
{{#if deviceView.deviceInfoAvailable}}
|
||||||
|
{{#if deviceView.BatteryLevel}}
|
||||||
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="wr-stats-board-tile">
|
||||||
|
<div class="tile-name">BATTERY</div>
|
||||||
|
<div>
|
||||||
|
<div class="tile-icon"><i
|
||||||
|
class="fw fw-battery"></i></div>
|
||||||
|
<div class="tile-stats">
|
||||||
|
{{deviceView.BatteryLevel.value}} %
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
<!--{{#if deviceView.cpuUsage}}-->
|
||||||
|
<!--<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">-->
|
||||||
|
<!--<div class="col-md-12">-->
|
||||||
|
<!--<div class="wr-stats-board-tile">-->
|
||||||
|
<!--<div class="tile-name">CPU Usage</div>-->
|
||||||
|
<!--<div>-->
|
||||||
|
<!--<div class="tile-icon"><i class="fw fw-dashboard"></i></div>-->
|
||||||
|
<!--<div class="tile-stats">-->
|
||||||
|
<!--{{deviceView.cpuUsage.value}} %-->
|
||||||
|
<!--</div>-->
|
||||||
|
<!--</div>-->
|
||||||
|
<!--</div>-->
|
||||||
|
<!--</div>-->
|
||||||
|
<!--</div>-->
|
||||||
|
<!--{{/if}}-->
|
||||||
|
{{#if deviceView.ramUsage}}
|
||||||
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="wr-stats-board-tile">
|
||||||
|
<div class="tile-name">RAM Usage</div>
|
||||||
|
<div>
|
||||||
|
<div class="tile-icon"><i
|
||||||
|
class="fw fw-hardware"></i></div>
|
||||||
|
<div class="tile-stats">
|
||||||
|
{{deviceView.ramUsage.value}} %
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.internalMemory}}
|
||||||
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="wr-stats-board-tile">
|
||||||
|
<div class="tile-name">Local Storage</div>
|
||||||
|
<div>
|
||||||
|
<div class="tile-icon"><i
|
||||||
|
class="fw fw-hdd"></i>
|
||||||
|
</div>
|
||||||
|
<div class="tile-stats">
|
||||||
|
{{deviceView.internalMemory.usage}} %
|
||||||
|
<span class="tile-stats-free">
|
||||||
|
TOTAL OF {{deviceView.internalMemory.total}} GB
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.externalMemory}}
|
||||||
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="wr-stats-board-tile">
|
||||||
|
<div class="tile-name">External Storage</div>
|
||||||
|
<div>
|
||||||
|
<div class="tile-icon"><i
|
||||||
|
class="fw fw-usb-drive"></i></div>
|
||||||
|
<div class="tile-stats">
|
||||||
|
{{deviceView.externalMemory.usage}} %
|
||||||
|
<span class="tile-stats-free">
|
||||||
|
TOTAL OF {{deviceView.externalMemory.total}} GB
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4 class="remove-margin">
|
||||||
|
<i class="icon fw fw-info"></i>
|
||||||
|
Battery, RAM and Storage related information are not
|
||||||
|
available yet.
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel"
|
||||||
|
id="policy_compliance_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="policy_compliance">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button"
|
||||||
|
data-toggle="collapse" data-parent="#tabs" href="#collapseTwo"
|
||||||
|
aria-expanded="true" aria-controls="collapseTwo">
|
||||||
|
<i class="fw fw-policy fw-2x"></i>
|
||||||
|
Policy Compliance
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">
|
||||||
|
Policy Compliance
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<a href="javascript:void(0);" id="refresh-policy">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel"
|
||||||
|
aria-labelledby="policy_compliance">
|
||||||
|
<div class="panel-body ">
|
||||||
|
<span class="visible-xs add-padding-2x text-right">
|
||||||
|
<a href="javascript:void(0);" id="refresh-policy">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<div id="policy-spinner"
|
||||||
|
class="wr-advance-operations-init add-padding-bottom-2x add-padding-bottom-4x hidden">
|
||||||
|
<i class="fw fw-settings fw-spin fw-2x"></i>Loading Policy
|
||||||
|
Compliance...
|
||||||
|
</div>
|
||||||
|
<div id="policy-list-container">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel"
|
||||||
|
id="device_location_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="device_location">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||||
|
href="#collapseThree" aria-expanded="true" aria-controls="collapseThree">
|
||||||
|
<i class="fw fw-map-location fw-2x"></i>
|
||||||
|
Device Location
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">Device Location</div>
|
||||||
|
<div id="collapseThree" class="panel-collapse collapse in" role="tabpanel"
|
||||||
|
aria-labelledby="device_location">
|
||||||
|
<div class="panel-body">
|
||||||
|
{{#if deviceView.location}}
|
||||||
|
<div id="device-location"
|
||||||
|
data-lat="{{deviceView.location.latitude}}"
|
||||||
|
data-long="{{deviceView.location.longitude}}">
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div id="map-error" class="message message-warning">
|
||||||
|
<h4 class="remove-margin">
|
||||||
|
<i class="icon fw fw-warning"></i>
|
||||||
|
Device location information is not available.
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<p class="add-padding-5x"></p>
|
||||||
|
<p class="add-padding-5x"></p>
|
||||||
|
<p class="add-padding-5x"></p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel"
|
||||||
|
id="installed_applications_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="installed_applications">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||||
|
href="#collapseFour" aria-expanded="true" aria-controls="collapseFour">
|
||||||
|
<i class="fw fw-application fw-2x"></i>
|
||||||
|
Installed Applications
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">
|
||||||
|
Installed Applications
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<a href="javascript:void(0);" id="refresh-apps">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="collapseFour" class="panel-collapse collapse in" role="tabpanel"
|
||||||
|
aria-labelledby="installed_applications">
|
||||||
|
<div class="panel-body">
|
||||||
|
<span class="visible-xs add-padding-2x text-right">
|
||||||
|
<a href="javascript:void(0);" id="refresh-apps">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<div id="apps-spinner" class="wr-advance-operations-init hidden">
|
||||||
|
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Applications
|
||||||
|
List...
|
||||||
|
</div>
|
||||||
|
<div id="applications-list-container">
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4>
|
||||||
|
<i class="icon fw fw-info"></i>
|
||||||
|
No applications found.
|
||||||
|
</h4>
|
||||||
|
<p>Please try refreshing in a while.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel" id="event_log_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="event_log">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||||
|
href="#collapseFive" aria-expanded="true" aria-controls="collapseFive">
|
||||||
|
<i class="fw fw-text fw-2x"></i>
|
||||||
|
Operations Log
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">
|
||||||
|
Operations Log
|
||||||
|
<span>
|
||||||
|
<a href="javascript:void(0);" id="refresh-operations">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="collapseFive" class="panel-collapse collapse in" role="tabpanel"
|
||||||
|
aria-labelledby="event_log">
|
||||||
|
<div class="panel-body">
|
||||||
|
<span class="visible-xs add-padding-2x text-right">
|
||||||
|
<a href="javascript:void(0);" id="refresh-operations">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<div id="operations-spinner" class="wr-advance-operations-init hidden">
|
||||||
|
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Operations Log...
|
||||||
|
</div>
|
||||||
|
<div id="operations-log-container">
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4 class="remove-margin">
|
||||||
|
<i class="icon fw fw-info"></i>
|
||||||
|
There are no operations, performed yet on this device.
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="table table-striped table-hover table-bordered display data-table"
|
||||||
|
id="operations-log-table">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-row">
|
||||||
|
<th>Operation Code</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th>Request created at</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/zone}}
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<h1 class="page-sub-title">
|
||||||
|
Permission Denied
|
||||||
|
</h1>
|
||||||
|
<br>
|
||||||
|
You are not authorized to view specified device in the system.
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<h1 class="page-sub-title">
|
||||||
|
Device not found
|
||||||
|
</h1>
|
||||||
|
<br>
|
||||||
|
You have tried to access either a removed or non-existing device.
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#zone "bottomJs"}}
|
{{#zone "bottomJs"}}
|
||||||
{{js "js/device-detail.js"}}
|
{{#if isAuthorized}}
|
||||||
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
|
<!--suppress HtmlUnknownTarget -->
|
||||||
{{js "js/load-map.js"}}
|
<script id="policy-view" src="{{@unit.publicUri}}/templates/policy-compliance.hbs"
|
||||||
|
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView
|
||||||
|
.type}}"
|
||||||
|
type="text/x-handlebars-template"></script>
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
|
<script id="applications-list" src="{{@unit.publicUri}}/templates/applications-list.hbs"
|
||||||
|
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView
|
||||||
|
.type}}"
|
||||||
|
type="text/x-handlebars-template"></script>
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
|
<script id="operations-log" src="{{@unit.publicUri}}/templates/operations-log.hbs"
|
||||||
|
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView
|
||||||
|
.type}}"
|
||||||
|
type="text/x-handlebars-template"></script>
|
||||||
|
{{js "js/device-detail.js"}}
|
||||||
|
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
|
||||||
|
{{js "js/load-map.js"}}
|
||||||
|
{{/if}}
|
||||||
{{/zone}}
|
{{/zone}}
|
@ -0,0 +1,211 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onRequest(context) {
|
||||||
|
// var log = new Log("device-view.js");
|
||||||
|
var deviceType = context["uriParams"]["deviceType"];
|
||||||
|
var deviceId = request.getParameter("id");
|
||||||
|
var deviceViewData = {};
|
||||||
|
|
||||||
|
if (deviceType && deviceId) {
|
||||||
|
var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"];
|
||||||
|
var response = deviceModule.viewDevice(deviceType, deviceId);
|
||||||
|
if (response["status"] == "success") {
|
||||||
|
deviceViewData["deviceFound"] = true;
|
||||||
|
deviceViewData["isAuthorized"] = true;
|
||||||
|
|
||||||
|
var filteredDeviceData = response["content"];
|
||||||
|
|
||||||
|
// creating deviceView information model from filtered device data
|
||||||
|
var viewModel = {};
|
||||||
|
if (filteredDeviceData["type"]) {
|
||||||
|
viewModel["type"] = filteredDeviceData["type"];
|
||||||
|
viewModel.isNotWindows = true;
|
||||||
|
if (viewModel["deviceType"] == "windows") {
|
||||||
|
viewModel.isNotWindows = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["deviceIdentifier"]) {
|
||||||
|
viewModel["deviceIdentifier"] = filteredDeviceData["deviceIdentifier"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["name"]) {
|
||||||
|
viewModel["name"] = filteredDeviceData["name"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["enrolmentInfo"]) {
|
||||||
|
if (filteredDeviceData["enrolmentInfo"]["status"]) {
|
||||||
|
viewModel["status"] = filteredDeviceData["enrolmentInfo"]["status"];
|
||||||
|
viewModel.isActive = false ;
|
||||||
|
viewModel.isNotRemoved = true;
|
||||||
|
if (filteredDeviceData["enrolmentInfo"]["status"]== "ACTIVE") {
|
||||||
|
viewModel.isActive = true ;
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["enrolmentInfo"]["status"]== "REMOVED") {
|
||||||
|
viewModel.isNotRemoved = false ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["enrolmentInfo"]["owner"]) {
|
||||||
|
viewModel["owner"] = filteredDeviceData["enrolmentInfo"]["owner"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["enrolmentInfo"]["ownership"]) {
|
||||||
|
viewModel["ownership"] = filteredDeviceData["enrolmentInfo"]["ownership"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]) {
|
||||||
|
viewModel["deviceInfoAvailable"] = true;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["IMEI"]) {
|
||||||
|
viewModel["imei"] = filteredDeviceData["initialDeviceInfo"]["IMEI"];
|
||||||
|
}
|
||||||
|
if (!filteredDeviceData["latestDeviceInfo"]) {
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"]) {
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] != "0") {
|
||||||
|
viewModel["osBuildDate"] = new Date(filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["LATITUDE"] && filteredDeviceData["initialDeviceInfo"]["LONGITUDE"]) {
|
||||||
|
viewModel["location"] = {};
|
||||||
|
viewModel["location"]["latitude"] = filteredDeviceData["initialDeviceInfo"]["LATITUDE"];
|
||||||
|
viewModel["location"]["longitude"] = filteredDeviceData["initialDeviceInfo"]["LONGITUDE"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["VENDOR"] && filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"]) {
|
||||||
|
viewModel["vendor"] = filteredDeviceData["initialDeviceInfo"]["VENDOR"];
|
||||||
|
viewModel["model"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]) {
|
||||||
|
if (deviceType == "android") {
|
||||||
|
viewModel["BatteryLevel"] = {};
|
||||||
|
viewModel["BatteryLevel"]["value"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BATTERY_LEVEL"];
|
||||||
|
|
||||||
|
viewModel["internalMemory"] = {};
|
||||||
|
viewModel["internalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] != 0) {
|
||||||
|
viewModel["internalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] -
|
||||||
|
filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_AVAILABLE_MEMORY"])
|
||||||
|
/ filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["internalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel["externalMemory"] = {};
|
||||||
|
viewModel["externalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] != 0) {
|
||||||
|
viewModel["externalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] -
|
||||||
|
filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_AVAILABLE_MEMORY"])
|
||||||
|
/ filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["externalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
} else if (deviceType == "ios") {
|
||||||
|
viewModel["BatteryLevel"] = {};
|
||||||
|
viewModel["BatteryLevel"]["value"] = Math. round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BatteryLevel"] * 10000) / 100;
|
||||||
|
|
||||||
|
viewModel["internalMemory"] = {};
|
||||||
|
viewModel["internalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] != 0) {
|
||||||
|
viewModel["internalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] -
|
||||||
|
filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["AvailableDeviceCapacity"])
|
||||||
|
/ filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["internalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]) {
|
||||||
|
viewModel["deviceInfoAvailable"] = true;
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["osBuildDate"]) {
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["osBuildDate"] != "0") {
|
||||||
|
viewModel["osBuildDate"] = new Date(filteredDeviceData["latestDeviceInfo"]["osBuildDate"] * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["location"]["latitude"] &&
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["location"]["longitude"]) {
|
||||||
|
viewModel["location"] = {};
|
||||||
|
viewModel["location"]["latitude"] = filteredDeviceData["latestDeviceInfo"]["location"]["latitude"];
|
||||||
|
viewModel["location"]["longitude"] = filteredDeviceData["latestDeviceInfo"]["location"]["longitude"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["vendor"] && filteredDeviceData["latestDeviceInfo"]["deviceModel"]) {
|
||||||
|
viewModel["vendor"] = filteredDeviceData["latestDeviceInfo"]["vendor"];
|
||||||
|
viewModel["model"] = filteredDeviceData["latestDeviceInfo"]["deviceModel"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["updatedTime"]) {
|
||||||
|
viewModel["lastUpdatedTime"] = filteredDeviceData["latestDeviceInfo"]["updatedTime"].
|
||||||
|
substr(0, filteredDeviceData["latestDeviceInfo"]["updatedTime"].indexOf("+"));
|
||||||
|
}
|
||||||
|
viewModel["BatteryLevel"] = {};
|
||||||
|
viewModel["BatteryLevel"]["value"] = filteredDeviceData["latestDeviceInfo"]["batteryLevel"];
|
||||||
|
|
||||||
|
viewModel["cpuUsage"] = {};
|
||||||
|
viewModel["cpuUsage"]["value"] = filteredDeviceData["latestDeviceInfo"]["cpuUsage"];
|
||||||
|
|
||||||
|
viewModel["ramUsage"] = {};
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] != 0) {
|
||||||
|
viewModel["ramUsage"]["value"] = Math.
|
||||||
|
round((filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] -
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["availableRAMMemory"])
|
||||||
|
/ filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["ramUsage"]["value"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel["internalMemory"] = {};
|
||||||
|
viewModel["internalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] != 0) {
|
||||||
|
viewModel["internalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] -
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["internalAvailableMemory"])
|
||||||
|
/ filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["internalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel["externalMemory"] = {};
|
||||||
|
viewModel["externalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] != 0) {
|
||||||
|
viewModel["externalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] -
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["externalAvailableMemory"])
|
||||||
|
/ filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["externalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!filteredDeviceData["initialDeviceInfo"] && !filteredDeviceData["latestDeviceInfo"]) {
|
||||||
|
viewModel["deviceInfoAvailable"] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
deviceViewData["deviceView"] = viewModel;
|
||||||
|
} else if (response["status"] == "unauthorized") {
|
||||||
|
deviceViewData["deviceFound"] = true;
|
||||||
|
deviceViewData["isAuthorized"] = false;
|
||||||
|
} else if (response["status"] == "notFound") {
|
||||||
|
deviceViewData["deviceFound"] = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
deviceViewData["deviceFound"] = false;
|
||||||
|
}
|
||||||
|
return deviceViewData;
|
||||||
|
}
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "1.0.0"
|
"version": "1.0.0"
|
||||||
}
|
}
|
After Width: | Height: | Size: 229 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 5.3 KiB |
@ -1,56 +1,54 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
*
|
*
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
* in compliance with the License.
|
* in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$(document).ready(function () {
|
var map;
|
||||||
if (document.getElementById('device-location')) {
|
|
||||||
loadMap();
|
function loadLeafletMap() {
|
||||||
|
var deviceLocationID = "#device-location",
|
||||||
|
lat = $(deviceLocationID).data("lat"),
|
||||||
|
long = $(deviceLocationID).data("long"),
|
||||||
|
container = "device-location",
|
||||||
|
zoomLevel = 13,
|
||||||
|
tileSet = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||||
|
attribution = "© <a href='https://openstreetmap.org/copyright'>OpenStreetMap</a> contributors";
|
||||||
|
|
||||||
|
if (lat && long) {
|
||||||
|
map = L.map(container).setView([lat, long], zoomLevel);
|
||||||
|
L.tileLayer(tileSet, {attribution: attribution}).addTo(map);
|
||||||
|
L.marker([lat, long]).addTo(map).bindPopup("Device is here...").openPopup();
|
||||||
|
|
||||||
|
$("#map-error").hide();
|
||||||
|
$("#device-location").show();
|
||||||
|
} else {
|
||||||
|
$("#device-location").hide();
|
||||||
|
$("#map-error").show();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
function loadMap() {
|
|
||||||
var map;
|
|
||||||
|
|
||||||
function initialize() {
|
|
||||||
var mapOptions = {
|
|
||||||
zoom: 18
|
|
||||||
};
|
|
||||||
var lat = $("#device-location").data("lat");
|
|
||||||
var long = $("#device-location").data("long");
|
|
||||||
|
|
||||||
if (lat != null && lat != undefined && lat != "" && long != null && long != undefined && long != "") {
|
|
||||||
$("#map-error").hide();
|
|
||||||
$("#device-location").show();
|
|
||||||
map = new google.maps.Map(document.getElementById('device-location'),
|
|
||||||
mapOptions);
|
|
||||||
|
|
||||||
var pos = new google.maps.LatLng(lat, long);
|
|
||||||
var marker = new google.maps.Marker({
|
|
||||||
position: pos,
|
|
||||||
map: map
|
|
||||||
});
|
|
||||||
|
|
||||||
map.setCenter(pos);
|
$(document).ready(function () {
|
||||||
} else {
|
$("a[data-toggle='tab']").on("shown.bs.tab", function() {
|
||||||
$("#device-location").hide();
|
var url = $(this).prop("href");
|
||||||
$("#map-error").show();
|
var hash = url.substring(url.indexOf("#") + 1);
|
||||||
|
|
||||||
|
if (hash == "device_location") {
|
||||||
|
if (!map) {
|
||||||
|
loadLeafletMap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
});
|
||||||
|
|
||||||
google.maps.event.addDomListener(window, 'load', initialize);
|
|
||||||
}
|
|
@ -0,0 +1,31 @@
|
|||||||
|
<div class="wr-app-listing">
|
||||||
|
<div class="wr-applist">
|
||||||
|
{{#each applications}}
|
||||||
|
<a style="text-align: center; width: 110px; height: 140px;">
|
||||||
|
{{#equal platform "android"}}<i class="icon fw fw-android"></i>{{/equal}}
|
||||||
|
{{#equal platform "ios"}}<i class="icon fw fw-apple"></i>{{/equal}}
|
||||||
|
{{#equal platform "windows"}}<i class="icon fw fw-windows"></i>{{/equal}}
|
||||||
|
{{#equal isActive true}}
|
||||||
|
<span style="word-wrap: break-word;">
|
||||||
|
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>
|
||||||
|
Active
|
||||||
|
</span>
|
||||||
|
<span style="word-wrap: break-word;"><b>{{name}}</b></span>
|
||||||
|
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
||||||
|
{{#if memoryUsage}}
|
||||||
|
<span style="word-wrap: break-word;">
|
||||||
|
Memory Usage
|
||||||
|
</span>
|
||||||
|
<span style="word-wrap: break-word;">
|
||||||
|
( {{memoryUsage}} Bytes )
|
||||||
|
</span>
|
||||||
|
{{/if}}
|
||||||
|
{{/equal}}
|
||||||
|
{{#equal isActive false}}
|
||||||
|
<span style="word-wrap: break-word;">{{name}}</span>
|
||||||
|
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
||||||
|
{{/equal}}
|
||||||
|
</a>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
<table class="table table-striped table-hover table-bordered display data-table" id="operations-log-table">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-row">
|
||||||
|
<th>Operation Code</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th>Request created at</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{#each operations}}
|
||||||
|
<tr data-type="selectable" data-id="{{id}}">
|
||||||
|
<td data-display="{{code}}" data-grid-label="Code">{{code}}</td>
|
||||||
|
<td data-display="{{status}}" data-grid-label="Status">
|
||||||
|
{{#equal status "COMPLETED"}}<span><i class="fw fw-ok icon-success"></i> Completed</span>{{/equal}}
|
||||||
|
{{#equal status "PENDING"}}<span><i class="fw fw-warning icon-warning"></i> Pending</span>{{/equal}}
|
||||||
|
{{#equal status "ERROR"}}<span><i class="fw fw-error icon-danger"></i> Error</span>{{/equal}}
|
||||||
|
{{#equal status "IN_PROGRESS"}}<span><i class="fw fw-ok icon-warning"></i> In Progress</span>{{/equal}}
|
||||||
|
</td>
|
||||||
|
<td data-display="{{createdTimeStamp}}" data-grid-label="Created Timestamp">{{createdTimeStamp}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/each}}
|
||||||
|
<br class="c-both" />
|
||||||
|
</tbody>
|
||||||
|
</table>
|
@ -0,0 +1,79 @@
|
|||||||
|
<div class="wr-list-group wr-sortable policy-list">
|
||||||
|
<span class="list-group-item" id="{{id}}">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3 clearfix">
|
||||||
|
<span class="wr-list-icon">
|
||||||
|
{{#equal deviceType "android"}}
|
||||||
|
<i class=" fw fw-android"></i>
|
||||||
|
{{/equal}}
|
||||||
|
{{#equal deviceType "ios"}}
|
||||||
|
<i class=" fw fw-apple"></i>
|
||||||
|
{{/equal}}
|
||||||
|
{{#equal deviceType "windows"}}
|
||||||
|
<i class=" fw fw-windows"></i>
|
||||||
|
{{/equal}}
|
||||||
|
</span>
|
||||||
|
<span class="wr-list-desc">
|
||||||
|
<h3 class="wr-list-name">{{policy.policyName}}</h3>
|
||||||
|
<span class="wr-list-username">{{deviceType}}</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="row no-gutter">
|
||||||
|
<div class="wr-desc-list-configs col-lg-4">
|
||||||
|
<div>
|
||||||
|
<b>Ownership Type : </b> {{policy.ownershipType}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="wr-desc-list-configs col-lg-4">
|
||||||
|
<div>
|
||||||
|
<b>Compliance Type :</b> {{policy.compliance}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="wr-desc-list-configs col-lg-4">
|
||||||
|
<div>
|
||||||
|
<b>Compliance :</b>
|
||||||
|
{{#equal compliance "COMPLIANT"}}
|
||||||
|
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
|
||||||
|
{{/equal}}
|
||||||
|
{{#equal compliance "NON-COMPLIANT"}}
|
||||||
|
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
|
||||||
|
{{/equal}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3">
|
||||||
|
<span class="list-group-item-actions">
|
||||||
|
<a href="/emm/policies/view?id={{policy.id}}" class="cu-btn-inner policy-view-link" data-id="{{id}}">
|
||||||
|
<span class="fw-stack">
|
||||||
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
|
<i class="fw fw-view fw-stack-1x"></i>
|
||||||
|
</span>
|
||||||
|
View
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<table class="table table-striped table-hover table-bordered display data-table" id="policy-compliance-table">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-row">
|
||||||
|
<th>Feature</th>
|
||||||
|
<th>Compliance</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{#each complianceFeatures}}
|
||||||
|
<tr data-type="selectable">
|
||||||
|
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
|
||||||
|
<td data-display="{{compliance}}" data-grid-label="Status">
|
||||||
|
{{#equal compliance true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
|
||||||
|
{{#equal compliance false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{/each}}
|
||||||
|
<br class="c-both" />
|
||||||
|
</tbody>
|
||||||
|
</table>
|
@ -0,0 +1,6 @@
|
|||||||
|
{{#zone "topLibCss"}}
|
||||||
|
<link rel="stylesheet" href="{{@unit.publicUri}}/css/leaflet.css">
|
||||||
|
{{/zone}}
|
||||||
|
{{#zone "bottomJs"}}
|
||||||
|
<script src="{{@unit.publicUri}}/js/leaflet.js"></script>
|
||||||
|
{{/zone}}
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
@ -0,0 +1,479 @@
|
|||||||
|
/* required styles */
|
||||||
|
|
||||||
|
.leaflet-map-pane,
|
||||||
|
.leaflet-tile,
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow,
|
||||||
|
.leaflet-tile-pane,
|
||||||
|
.leaflet-tile-container,
|
||||||
|
.leaflet-overlay-pane,
|
||||||
|
.leaflet-shadow-pane,
|
||||||
|
.leaflet-marker-pane,
|
||||||
|
.leaflet-popup-pane,
|
||||||
|
.leaflet-overlay-pane svg,
|
||||||
|
.leaflet-zoom-box,
|
||||||
|
.leaflet-image-layer,
|
||||||
|
.leaflet-layer {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.leaflet-container {
|
||||||
|
overflow: hidden;
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.leaflet-tile,
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-drag: none;
|
||||||
|
}
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/* map is broken in FF if you have max-width: 100% on tiles */
|
||||||
|
.leaflet-container img {
|
||||||
|
max-width: none !important;
|
||||||
|
}
|
||||||
|
/* stupid Android 2 doesn't understand "max-width: none" properly */
|
||||||
|
.leaflet-container img.leaflet-image-layer {
|
||||||
|
max-width: 15000px !important;
|
||||||
|
}
|
||||||
|
.leaflet-tile {
|
||||||
|
filter: inherit;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.leaflet-tile-loaded {
|
||||||
|
visibility: inherit;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-box {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||||
|
.leaflet-overlay-pane svg {
|
||||||
|
-moz-user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-tile-pane { z-index: 2; }
|
||||||
|
.leaflet-objects-pane { z-index: 3; }
|
||||||
|
.leaflet-overlay-pane { z-index: 4; }
|
||||||
|
.leaflet-shadow-pane { z-index: 5; }
|
||||||
|
.leaflet-marker-pane { z-index: 6; }
|
||||||
|
.leaflet-popup-pane { z-index: 7; }
|
||||||
|
|
||||||
|
.leaflet-vml-shape {
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
.lvml {
|
||||||
|
behavior: url(#default#VML);
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* control positioning */
|
||||||
|
|
||||||
|
.leaflet-control {
|
||||||
|
position: relative;
|
||||||
|
z-index: 7;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.leaflet-top,
|
||||||
|
.leaflet-bottom {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1000;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.leaflet-top {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.leaflet-right {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.leaflet-bottom {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.leaflet-left {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control {
|
||||||
|
float: left;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.leaflet-right .leaflet-control {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.leaflet-top .leaflet-control {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-bottom .leaflet-control {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-left .leaflet-control {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-right .leaflet-control {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* zoom and fade animations */
|
||||||
|
|
||||||
|
.leaflet-fade-anim .leaflet-tile,
|
||||||
|
.leaflet-fade-anim .leaflet-popup {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 0.2s linear;
|
||||||
|
-moz-transition: opacity 0.2s linear;
|
||||||
|
-o-transition: opacity 0.2s linear;
|
||||||
|
transition: opacity 0.2s linear;
|
||||||
|
}
|
||||||
|
.leaflet-fade-anim .leaflet-tile-loaded,
|
||||||
|
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||||
|
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
-o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
}
|
||||||
|
.leaflet-zoom-anim .leaflet-tile,
|
||||||
|
.leaflet-pan-anim .leaflet-tile,
|
||||||
|
.leaflet-touching .leaflet-zoom-animated {
|
||||||
|
-webkit-transition: none;
|
||||||
|
-moz-transition: none;
|
||||||
|
-o-transition: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* cursors */
|
||||||
|
|
||||||
|
.leaflet-clickable {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.leaflet-container {
|
||||||
|
cursor: -webkit-grab;
|
||||||
|
cursor: -moz-grab;
|
||||||
|
}
|
||||||
|
.leaflet-popup-pane,
|
||||||
|
.leaflet-control {
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
.leaflet-dragging .leaflet-container,
|
||||||
|
.leaflet-dragging .leaflet-clickable {
|
||||||
|
cursor: move;
|
||||||
|
cursor: -webkit-grabbing;
|
||||||
|
cursor: -moz-grabbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* visual tweaks */
|
||||||
|
|
||||||
|
.leaflet-container {
|
||||||
|
background: #ddd;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
.leaflet-container a {
|
||||||
|
color: #0078A8;
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-active {
|
||||||
|
outline: 2px solid orange;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-box {
|
||||||
|
border: 2px dotted #38f;
|
||||||
|
background: rgba(255,255,255,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* general typography */
|
||||||
|
.leaflet-container {
|
||||||
|
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* general toolbar styles */
|
||||||
|
|
||||||
|
.leaflet-bar {
|
||||||
|
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.leaflet-bar a,
|
||||||
|
.leaflet-bar a:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
line-height: 26px;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
.leaflet-bar a,
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-position: 50% 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:hover {
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:first-child {
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:last-child {
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.leaflet-bar a.leaflet-disabled {
|
||||||
|
cursor: default;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-bar a {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* zoom control */
|
||||||
|
|
||||||
|
.leaflet-control-zoom-in,
|
||||||
|
.leaflet-control-zoom-out {
|
||||||
|
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||||
|
text-indent: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-control-zoom-out {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-zoom-in {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-zoom-out {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* layers control */
|
||||||
|
|
||||||
|
.leaflet-control-layers {
|
||||||
|
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/layers.png);
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
.leaflet-retina .leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/layers-2x.png);
|
||||||
|
background-size: 26px 26px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-layers-toggle {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers .leaflet-control-layers-list,
|
||||||
|
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-expanded {
|
||||||
|
padding: 6px 10px 6px 6px;
|
||||||
|
color: #333;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-selector {
|
||||||
|
margin-top: 2px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-separator {
|
||||||
|
height: 0;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
margin: 5px -10px 5px -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* attribution and scale controls */
|
||||||
|
|
||||||
|
.leaflet-container .leaflet-control-attribution {
|
||||||
|
background: #fff;
|
||||||
|
background: rgba(255, 255, 255, 0.7);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution,
|
||||||
|
.leaflet-control-scale-line {
|
||||||
|
padding: 0 5px;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.leaflet-container .leaflet-control-attribution,
|
||||||
|
.leaflet-container .leaflet-control-scale {
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
.leaflet-left .leaflet-control-scale {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-bottom .leaflet-control-scale {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line {
|
||||||
|
border: 2px solid #777;
|
||||||
|
border-top: none;
|
||||||
|
line-height: 1.1;
|
||||||
|
padding: 2px 5px 1px;
|
||||||
|
font-size: 11px;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
|
||||||
|
background: #fff;
|
||||||
|
background: rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line:not(:first-child) {
|
||||||
|
border-top: 2px solid #777;
|
||||||
|
border-bottom: none;
|
||||||
|
margin-top: -2px;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||||
|
border-bottom: 2px solid #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-attribution,
|
||||||
|
.leaflet-touch .leaflet-control-layers,
|
||||||
|
.leaflet-touch .leaflet-bar {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-layers,
|
||||||
|
.leaflet-touch .leaflet-bar {
|
||||||
|
border: 2px solid rgba(0,0,0,0.2);
|
||||||
|
background-clip: padding-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* popup */
|
||||||
|
|
||||||
|
.leaflet-popup {
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content-wrapper {
|
||||||
|
padding: 1px;
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content {
|
||||||
|
margin: 13px 19px;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content p {
|
||||||
|
margin: 18px 0;
|
||||||
|
}
|
||||||
|
.leaflet-popup-tip-container {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 40px;
|
||||||
|
height: 20px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.leaflet-popup-tip {
|
||||||
|
width: 17px;
|
||||||
|
height: 17px;
|
||||||
|
padding: 1px;
|
||||||
|
|
||||||
|
margin: -10px auto 0;
|
||||||
|
|
||||||
|
-webkit-transform: rotate(45deg);
|
||||||
|
-moz-transform: rotate(45deg);
|
||||||
|
-ms-transform: rotate(45deg);
|
||||||
|
-o-transform: rotate(45deg);
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
.leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-popup-tip {
|
||||||
|
background: white;
|
||||||
|
|
||||||
|
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-popup-close-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
padding: 4px 4px 0 0;
|
||||||
|
text-align: center;
|
||||||
|
width: 18px;
|
||||||
|
height: 14px;
|
||||||
|
font: 16px/14px Tahoma, Verdana, sans-serif;
|
||||||
|
color: #c3c3c3;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-popup-close-button:hover {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.leaflet-popup-scrolled {
|
||||||
|
overflow: auto;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper {
|
||||||
|
zoom: 1;
|
||||||
|
}
|
||||||
|
.leaflet-oldie .leaflet-popup-tip {
|
||||||
|
width: 24px;
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
||||||
|
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
||||||
|
}
|
||||||
|
.leaflet-oldie .leaflet-popup-tip-container {
|
||||||
|
margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-control-zoom,
|
||||||
|
.leaflet-oldie .leaflet-control-layers,
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-oldie .leaflet-popup-tip {
|
||||||
|
border: 1px solid #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* div icon */
|
||||||
|
|
||||||
|
.leaflet-div-icon {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #666;
|
||||||
|
}
|
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 797 B |
@ -0,0 +1,20 @@
|
|||||||
|
{{!
|
||||||
|
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
|
||||||
|
WSO2 Inc. 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.
|
||||||
|
}}
|
||||||
|
{{#zone "bottomJs"}}
|
||||||
|
{{js "js/operation-mod.js"}}
|
||||||
|
{{/zone}}
|
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0.0",
|
||||||
|
"pushedUris": [
|
||||||
|
"/policies",
|
||||||
|
"/policy/{+any}"
|
||||||
|
],
|
||||||
|
"extends": "cdmf.unit.device.operation-mod"
|
||||||
|
}
|
@ -0,0 +1,385 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var modalPopup = ".modal",
|
||||||
|
modalPopupContainer = modalPopup + " .modal-content",
|
||||||
|
modalPopupContent = modalPopup + " .modal-content";
|
||||||
|
|
||||||
|
var emmAdminBasePath = "/api/device-mgt/v1.0";
|
||||||
|
|
||||||
|
//function openCollapsedNav() {
|
||||||
|
// $(".wr-hidden-nav-toggle-btn").addClass("active");
|
||||||
|
// $("#hiddenNav").slideToggle("slideDown", function () {
|
||||||
|
// if ($(this).css("display") == "none") {
|
||||||
|
// $(".wr-hidden-nav-toggle-btn").removeClass("active");
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set popup maximum height function.
|
||||||
|
*/
|
||||||
|
function setPopupMaxHeight() {
|
||||||
|
var maxHeight = "max-height";
|
||||||
|
var marginTop = "margin-top";
|
||||||
|
var body = "body";
|
||||||
|
$(modalPopupContent).css(maxHeight, ($(body).height() - ($(body).height() / 100 * 30)));
|
||||||
|
$(modalPopupContainer).css(marginTop, (-($(modalPopupContainer).height() / 2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* show popup function.
|
||||||
|
*/
|
||||||
|
function showPopup() {
|
||||||
|
$(modalPopup).modal('show');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* hide popup function.
|
||||||
|
*/
|
||||||
|
function hidePopup() {
|
||||||
|
$(modalPopupContent).html("");
|
||||||
|
$(modalPopupContent).removeClass("operation-data");
|
||||||
|
$(modalPopup).modal('hide');
|
||||||
|
$('body').removeClass('modal-open').css('padding-right','0px');
|
||||||
|
$('.modal-backdrop').remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* QR-code generation function.
|
||||||
|
*/
|
||||||
|
function generateQRCode(qrCodeClass) {
|
||||||
|
var enrollmentURL = $("#qr-code-modal").data("enrollment-url");
|
||||||
|
$(qrCodeClass).qrcode({
|
||||||
|
text: enrollmentURL,
|
||||||
|
width: 200,
|
||||||
|
height: 200
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleEnrollment() {
|
||||||
|
$(".modal-content").html($("#qr-code-modal").html());
|
||||||
|
generateQRCode(".modal-content .qr-code");
|
||||||
|
showPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
var updateNotificationCountOnSuccess = function (data, textStatus, jqXHR) {
|
||||||
|
var notificationBubble = "#notification-bubble";
|
||||||
|
if (jqXHR.status == 200 && data) {
|
||||||
|
var responsePayload = JSON.parse(data);
|
||||||
|
var newNotificationsCount = responsePayload["count"];
|
||||||
|
if (newNotificationsCount > 0) {
|
||||||
|
$(notificationBubble).html(newNotificationsCount);
|
||||||
|
$(notificationBubble).show();
|
||||||
|
} else {
|
||||||
|
$(notificationBubble).hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function updateNotificationCountOnError() {
|
||||||
|
var notificationBubble = "#notification-bubble";
|
||||||
|
$(notificationBubble).html("Error");
|
||||||
|
$(notificationBubble).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadNewNotificationsOnSideViewPanel() {
|
||||||
|
if ($("#right-sidebar").attr("is-authorized") == "false") {
|
||||||
|
$("#notification-bubble-wrapper").remove();
|
||||||
|
} else {
|
||||||
|
var serviceURL = emmAdminBasePath + "/notifications?status=NEW";
|
||||||
|
invokerUtil.get(serviceURL, updateNotificationCountOnSuccess, updateNotificationCountOnError);
|
||||||
|
loadNewNotifications();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadNewNotifications() {
|
||||||
|
var messageSideBar = ".sidebar-messages";
|
||||||
|
if ($("#right-sidebar").attr("is-authorized") == "false") {
|
||||||
|
$(messageSideBar).html("<h4 class ='message-danger'>You are not authorized to view notifications.</h4>");
|
||||||
|
} else {
|
||||||
|
var notifications = $("#notifications");
|
||||||
|
var currentUser = notifications.data("currentUser");
|
||||||
|
|
||||||
|
$.template("notification-listing", notifications.attr("src"), function (template) {
|
||||||
|
var serviceURL = emmAdminBasePath + "/notifications?offset=0&limit=5&status=NEW";
|
||||||
|
invokerUtil.get(
|
||||||
|
serviceURL,
|
||||||
|
// on success
|
||||||
|
function (data, textStatus, jqXHR) {
|
||||||
|
if (jqXHR.status == 200 && data) {
|
||||||
|
var viewModel = {};
|
||||||
|
var responsePayload = JSON.parse(data);
|
||||||
|
if (responsePayload["notifications"]) {
|
||||||
|
if (responsePayload.count > 0) {
|
||||||
|
viewModel["notifications"] = responsePayload["notifications"];
|
||||||
|
viewModel["appContext"] = context;
|
||||||
|
$(messageSideBar).html(template(viewModel));
|
||||||
|
} else {
|
||||||
|
$(messageSideBar).html('<div class="alert alert-info" role="alert"><i class="icon fw fw-info"></i>No new notifications found...</div>');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$(messageSideBar).html("<h4 class ='message-danger'>Unexpected error " +
|
||||||
|
"occurred while loading new notifications.</h4>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// on error
|
||||||
|
function (jqXHR) {
|
||||||
|
if (jqXHR.status = 500) {
|
||||||
|
$(messageSideBar).html("<h4 class ='message-danger'>Unexpected error occurred while trying " +
|
||||||
|
"to retrieve any new notifications.</h4>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle function for
|
||||||
|
* notification listing sidebar.
|
||||||
|
* @return {Null}
|
||||||
|
*/
|
||||||
|
$.sidebar_toggle = function (action, target, container) {
|
||||||
|
var elem = '[data-toggle=sidebar]',
|
||||||
|
button,
|
||||||
|
containerOffsetLeft,
|
||||||
|
containerOffsetRight,
|
||||||
|
targetOffsetLeft,
|
||||||
|
targetOffsetRight,
|
||||||
|
targetWidth,
|
||||||
|
targetSide,
|
||||||
|
relationship,
|
||||||
|
pushType,
|
||||||
|
buttonParent;
|
||||||
|
|
||||||
|
var sidebar_window = {
|
||||||
|
update: function (target, container, button) {
|
||||||
|
containerOffsetLeft = $(container).data('offset-left') ? $(container).data('offset-left') : 0;
|
||||||
|
containerOffsetRight = $(container).data('offset-right') ? $(container).data('offset-right') : 0;
|
||||||
|
targetOffsetLeft = $(target).data('offset-left') ? $(target).data('offset-left') : 0;
|
||||||
|
targetOffsetRight = $(target).data('offset-right') ? $(target).data('offset-right') : 0;
|
||||||
|
targetWidth = $(target).data('width');
|
||||||
|
targetSide = $(target).data("side");
|
||||||
|
pushType = $(container).parent().is('body') == true ? 'padding' : 'margin';
|
||||||
|
|
||||||
|
if (button !== undefined) {
|
||||||
|
relationship = button.attr('rel') ? button.attr('rel') : '';
|
||||||
|
buttonParent = $(button).parent();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
show: function () {
|
||||||
|
if ($(target).data('sidebar-fixed') == true) {
|
||||||
|
$(target).height($(window).height() - $(target).data('fixed-offset'));
|
||||||
|
}
|
||||||
|
$(target).trigger('show.sidebar');
|
||||||
|
if (targetWidth !== undefined) {
|
||||||
|
$(target).css('width', targetWidth);
|
||||||
|
}
|
||||||
|
$(target).addClass('toggled');
|
||||||
|
if (button !== undefined) {
|
||||||
|
if (relationship !== '') {
|
||||||
|
// Removing active class from all relative buttons
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').removeClass("active");
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').attr('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
// Adding active class to button
|
||||||
|
if (button.attr('data-handle') !== 'close') {
|
||||||
|
button.addClass("active");
|
||||||
|
button.attr('aria-expanded', 'true');
|
||||||
|
}
|
||||||
|
if (buttonParent.is('li')) {
|
||||||
|
if (relationship !== '') {
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().removeClass("active");
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().attr('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
buttonParent.addClass("active");
|
||||||
|
buttonParent.attr('aria-expanded', 'true');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sidebar open function
|
||||||
|
if (targetSide == 'left') {
|
||||||
|
if ((button !== undefined) && (button.attr('data-container-divide'))) {
|
||||||
|
$(container).css(pushType + '-' + targetSide, targetWidth + targetOffsetLeft);
|
||||||
|
}
|
||||||
|
$(target).css(targetSide, targetOffsetLeft);
|
||||||
|
} else if (targetSide == 'right') {
|
||||||
|
if ((button !== undefined) && (button.attr('data-container-divide'))) {
|
||||||
|
$(container).css(pushType + '-' + targetSide, targetWidth + targetOffsetRight);
|
||||||
|
}
|
||||||
|
$(target).css(targetSide, targetOffsetRight);
|
||||||
|
}
|
||||||
|
$(target).trigger('shown.sidebar');
|
||||||
|
},
|
||||||
|
|
||||||
|
hide: function () {
|
||||||
|
$(target).trigger('hide.sidebar');
|
||||||
|
$(target).removeClass('toggled');
|
||||||
|
if (button !== undefined) {
|
||||||
|
if (relationship !== '') {
|
||||||
|
// Removing active class from all relative buttons
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').removeClass("active");
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').attr('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
// Removing active class from button
|
||||||
|
if (button.attr('data-handle') !== 'close') {
|
||||||
|
button.removeClass("active");
|
||||||
|
button.attr('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
if ($(button).parent().is('li')) {
|
||||||
|
if (relationship !== '') {
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().removeClass("active");
|
||||||
|
$(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().attr('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sidebar close function
|
||||||
|
if (targetSide == 'left') {
|
||||||
|
if ((button !== undefined) && (button.attr('data-container-divide'))) {
|
||||||
|
$(container).css(pushType + '-' + targetSide, targetOffsetLeft);
|
||||||
|
}
|
||||||
|
$(target).css(targetSide, -Math.abs(targetWidth + targetOffsetLeft));
|
||||||
|
} else if (targetSide == 'right') {
|
||||||
|
if ((button !== undefined) && (button.attr('data-container-divide'))) {
|
||||||
|
$(container).css(pushType + '-' + targetSide, targetOffsetRight);
|
||||||
|
}
|
||||||
|
$(target).css(targetSide, -Math.abs(targetWidth + targetOffsetRight));
|
||||||
|
}
|
||||||
|
$(target).trigger('hidden.sidebar');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (action === 'show') {
|
||||||
|
sidebar_window.update(target, container);
|
||||||
|
sidebar_window.show();
|
||||||
|
}
|
||||||
|
if (action === 'hide') {
|
||||||
|
sidebar_window.update(target, container);
|
||||||
|
sidebar_window.hide();
|
||||||
|
}
|
||||||
|
// binding click function
|
||||||
|
var body = 'body';
|
||||||
|
$(body).off('click', elem);
|
||||||
|
$(body).on('click', elem, function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
button = $(this);
|
||||||
|
container = button.data('container');
|
||||||
|
target = button.data('target');
|
||||||
|
sidebar_window.update(target, container, button);
|
||||||
|
/**
|
||||||
|
* Sidebar function on data container divide
|
||||||
|
* @return {Null}
|
||||||
|
*/
|
||||||
|
if (button.attr('aria-expanded') == 'false') {
|
||||||
|
sidebar_window.show();
|
||||||
|
} else if (button.attr('aria-expanded') == 'true') {
|
||||||
|
sidebar_window.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.collapse_nav_sub = function () {
|
||||||
|
var navSelector = 'ul.nav';
|
||||||
|
|
||||||
|
if (!$(navSelector).hasClass('collapse-nav-sub')) {
|
||||||
|
$(navSelector + ' > li', this).each(function () {
|
||||||
|
var position = $(this).offset().left - $(this).parent().scrollLeft();
|
||||||
|
$(this).attr('data-absolute-position', (position + 5));
|
||||||
|
});
|
||||||
|
|
||||||
|
$(navSelector + ' li', this).each(function () {
|
||||||
|
if ($('ul', this).length !== 0) {
|
||||||
|
$(this).addClass('has-sub');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(navSelector + ' > li', this).each(function () {
|
||||||
|
$(this).css({
|
||||||
|
'left': $(this).data('absolute-position'),
|
||||||
|
'position': 'absolute'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(navSelector + ' li.has-sub', this).on('click', function () {
|
||||||
|
var elem = $(this);
|
||||||
|
if (elem.attr('aria-expanded') !== 'true') {
|
||||||
|
elem.siblings().fadeOut(100, function () {
|
||||||
|
elem.animate({'left': '15'}, 200, function () {
|
||||||
|
$(elem).first().children('ul').fadeIn(200);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
elem.siblings().attr('aria-expanded', 'false');
|
||||||
|
elem.attr('aria-expanded', 'true');
|
||||||
|
} else {
|
||||||
|
$(elem).first().children('ul').fadeOut(100, function () {
|
||||||
|
elem.animate({'left': $(elem).data('absolute-position')}, 200, function () {
|
||||||
|
elem.siblings().fadeIn(100);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
elem.siblings().attr('aria-expanded', 'false');
|
||||||
|
elem.attr('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(navSelector + ' > li.has-sub ul', this).on('click', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
$(navSelector).addClass('collapse-nav-sub');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(".download-link").click(function(){
|
||||||
|
toggleEnrollment();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$.sidebar_toggle();
|
||||||
|
if (typeof $.fn.collapse == 'function') {
|
||||||
|
$('.navbar-collapse.tiles').on('shown.bs.collapse', function () {
|
||||||
|
$(this).collapse_nav_sub();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
loadNewNotificationsOnSideViewPanel();
|
||||||
|
$("#right-sidebar").on("click", ".new-notification", function () {
|
||||||
|
var notificationId = $(this).data("id");
|
||||||
|
var redirectUrl = $(this).data("url");
|
||||||
|
var markAsReadNotificationsEpr = emmAdminBasePath + "/notifications/" + notificationId + "/mark-checked";
|
||||||
|
var messageSideBar = ".sidebar-messages";
|
||||||
|
|
||||||
|
invokerUtil.put(
|
||||||
|
markAsReadNotificationsEpr,
|
||||||
|
null,
|
||||||
|
// on success
|
||||||
|
function (data) {
|
||||||
|
data = JSON.parse(data);
|
||||||
|
if (data.statusCode == responseCodes["ACCEPTED"]) {
|
||||||
|
location.href = redirectUrl;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// on error
|
||||||
|
function () {
|
||||||
|
var content = "<li class='message message-danger'><h4><i class='icon fw fw-error'></i>Warning</h4>" +
|
||||||
|
"<p>Unexpected error occurred while loading notification. Please refresh the page and" +
|
||||||
|
" try again</p></li>";
|
||||||
|
$(messageSideBar).html(content);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|