From fa6ef30d1711b291a73bb2029c66ed8bb85f63e5 Mon Sep 17 00:00:00 2001 From: Hasunie Date: Thu, 1 Dec 2016 09:26:14 +0530 Subject: [PATCH] fixing windows device view issues --- .../date-range-picker.hbs | 25 + .../date-range-picker.js | 21 + .../date-range-picker.json | 3 + .../public/css/daterangepicker.css | 361 ++++ .../public/js/daterangepicker.js | 1542 ++++++++++++++ .../public/js/moment.min.js | 7 + .../device-view.hbs | 545 ++++- .../device-view.js | 211 ++ .../device-view.json | 2 +- .../device_icons/TemperatureController.png | Bin 0 -> 234616 bytes .../public/img/device_icons/android.png | Bin 0 -> 2948 bytes .../public/img/device_icons/ios.png | Bin 0 -> 6966 bytes .../public/img/graph.png | Bin 0 -> 5431 bytes .../public/js/device-detail.js | 299 +-- .../public/js/load-map.js | 76 +- .../public/templates/applications-list.hbs | 31 + .../public/templates/operations-log.hbs | 24 + .../public/templates/policy-compliance.hbs | 79 + .../leaflet.hbs | 6 + .../leaflet.json | 3 + .../public/css/leaflet.css | 479 +++++ .../public/js/images/layers-2x.png | Bin 0 -> 2898 bytes .../public/js/images/layers.png | Bin 0 -> 1502 bytes .../public/js/images/marker-icon-2x.png | Bin 0 -> 4033 bytes .../public/js/images/marker-icon.png | Bin 0 -> 1747 bytes .../public/js/images/marker-shadow.png | Bin 0 -> 797 bytes .../public/js/leaflet.js | 9 + .../operation-mod.hbs | 20 + .../operation-mod.json | 8 + .../public/js/operation-mod.js | 1781 +++++++++++++++++ .../public/js/type-view.js | 385 ++++ 31 files changed, 5723 insertions(+), 194 deletions(-) create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/TemperatureController.png create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/android.png create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/ios.png create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/graph.png mode change 100644 => 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js mode change 100644 => 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/load-map.js create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/operations-log.hbs create mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers-2x.png create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers.png create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-icon-2x.png create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-icon.png create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-shadow.png create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/leaflet.js create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js create mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/js/type-view.js diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs new file mode 100644 index 000000000..d1787fd27 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs @@ -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}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js new file mode 100644 index 000000000..82648b301 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js @@ -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 ""; +} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json new file mode 100644 index 000000000..688e93980 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css new file mode 100644 index 000000000..b1b44916b --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css @@ -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; +} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js new file mode 100644 index 000000000..b218d58bf --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js @@ -0,0 +1,1542 @@ +/** +* @version: 2.1.19 +* @author: Dan Grossman http://www.dangrossman.info/ +* @copyright: Copyright (c) 2012-2015 Dan Grossman. All rights reserved. +* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php +* @website: https://www.improvely.com/ +*/ + +(function(root, factory) { + + if (typeof define === 'function' && define.amd) { + define(['moment', 'jquery', 'exports'], function(momentjs, $, exports) { + root.daterangepicker = factory(root, exports, momentjs, $); + }); + + } else if (typeof exports !== 'undefined') { + var momentjs = require('moment'); + var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined; //isomorphic issue + if (!jQuery) { + try { + jQuery = require('jquery'); + if (!jQuery.fn) jQuery.fn = {}; //isomorphic issue + } catch (err) { + if (!jQuery) throw new Error('jQuery dependency not found'); + } + } + + factory(root, exports, momentjs, jQuery); + + // Finally, as a browser global. + } else { + root.daterangepicker = factory(root, {}, root.moment || moment, (root.jQuery || root.Zepto || root.ender || root.$)); + } + +}(this || {}, function(root, daterangepicker, moment, $) { // 'this' doesn't exist on a server + + var DateRangePicker = function(element, options, cb) { + + //default settings for options + this.parentEl = 'body'; + this.element = $(element); + this.startDate = moment().startOf('day'); + this.endDate = moment().endOf('day'); + this.minDate = false; + this.maxDate = false; + this.dateLimit = false; + this.autoApply = false; + this.singleDatePicker = false; + this.showDropdowns = false; + this.showWeekNumbers = false; + this.showISOWeekNumbers = false; + this.timePicker = false; + this.timePicker24Hour = false; + this.timePickerIncrement = 1; + this.timePickerSeconds = false; + this.linkedCalendars = true; + this.autoUpdateInput = true; + this.alwaysShowCalendars = false; + this.ranges = {}; + + this.opens = 'right'; + if (this.element.hasClass('pull-right')) + this.opens = 'left'; + + this.drops = 'down'; + if (this.element.hasClass('dropup')) + this.drops = 'up'; + + this.buttonClasses = 'btn btn-sm'; + this.applyClass = 'btn-success'; + this.cancelClass = 'btn-default'; + + this.locale = { + format: 'MM/DD/YYYY', + separator: ' - ', + applyLabel: 'Apply', + cancelLabel: 'Cancel', + weekLabel: 'W', + customRangeLabel: 'Custom Range', + daysOfWeek: moment.weekdaysMin(), + monthNames: moment.monthsShort(), + firstDay: moment.localeData().firstDayOfWeek() + }; + + this.callback = function() { }; + + //some state information + this.isShowing = false; + this.leftCalendar = {}; + this.rightCalendar = {}; + + //custom options from user + if (typeof options !== 'object' || options === null) + options = {}; + + //allow setting options with data attributes + //data-api options will be overwritten with custom javascript options + options = $.extend(this.element.data(), options); + + //html template for the picker UI + if (typeof options.template !== 'string' && !(options.template instanceof $)) + options.template = ''; + + this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl); + this.container = $(options.template).appendTo(this.parentEl); + + // + // handle all the possible options overriding defaults + // + + if (typeof options.locale === 'object') { + + if (typeof options.locale.format === 'string') + this.locale.format = options.locale.format; + + if (typeof options.locale.separator === 'string') + this.locale.separator = options.locale.separator; + + if (typeof options.locale.daysOfWeek === 'object') + this.locale.daysOfWeek = options.locale.daysOfWeek.slice(); + + if (typeof options.locale.monthNames === 'object') + this.locale.monthNames = options.locale.monthNames.slice(); + + if (typeof options.locale.firstDay === 'number') + this.locale.firstDay = options.locale.firstDay; + + if (typeof options.locale.applyLabel === 'string') + this.locale.applyLabel = options.locale.applyLabel; + + if (typeof options.locale.cancelLabel === 'string') + this.locale.cancelLabel = options.locale.cancelLabel; + + if (typeof options.locale.weekLabel === 'string') + this.locale.weekLabel = options.locale.weekLabel; + + if (typeof options.locale.customRangeLabel === 'string') + this.locale.customRangeLabel = options.locale.customRangeLabel; + + } + + if (typeof options.startDate === 'string') + this.startDate = moment(options.startDate, this.locale.format); + + if (typeof options.endDate === 'string') + this.endDate = moment(options.endDate, this.locale.format); + + if (typeof options.minDate === 'string') + this.minDate = moment(options.minDate, this.locale.format); + + if (typeof options.maxDate === 'string') + this.maxDate = moment(options.maxDate, this.locale.format); + + if (typeof options.startDate === 'object') + this.startDate = moment(options.startDate); + + if (typeof options.endDate === 'object') + this.endDate = moment(options.endDate); + + if (typeof options.minDate === 'object') + this.minDate = moment(options.minDate); + + if (typeof options.maxDate === 'object') + this.maxDate = moment(options.maxDate); + + // sanity check for bad options + if (this.minDate && this.startDate.isBefore(this.minDate)) + this.startDate = this.minDate.clone(); + + // sanity check for bad options + if (this.maxDate && this.endDate.isAfter(this.maxDate)) + this.endDate = this.maxDate.clone(); + + if (typeof options.applyClass === 'string') + this.applyClass = options.applyClass; + + if (typeof options.cancelClass === 'string') + this.cancelClass = options.cancelClass; + + if (typeof options.dateLimit === 'object') + this.dateLimit = options.dateLimit; + + if (typeof options.opens === 'string') + this.opens = options.opens; + + if (typeof options.drops === 'string') + this.drops = options.drops; + + if (typeof options.showWeekNumbers === 'boolean') + this.showWeekNumbers = options.showWeekNumbers; + + if (typeof options.showISOWeekNumbers === 'boolean') + this.showISOWeekNumbers = options.showISOWeekNumbers; + + if (typeof options.buttonClasses === 'string') + this.buttonClasses = options.buttonClasses; + + if (typeof options.buttonClasses === 'object') + this.buttonClasses = options.buttonClasses.join(' '); + + if (typeof options.showDropdowns === 'boolean') + this.showDropdowns = options.showDropdowns; + + if (typeof options.singleDatePicker === 'boolean') { + this.singleDatePicker = options.singleDatePicker; + if (this.singleDatePicker) + this.endDate = this.startDate.clone(); + } + + if (typeof options.timePicker === 'boolean') + this.timePicker = options.timePicker; + + if (typeof options.timePickerSeconds === 'boolean') + this.timePickerSeconds = options.timePickerSeconds; + + if (typeof options.timePickerIncrement === 'number') + this.timePickerIncrement = options.timePickerIncrement; + + if (typeof options.timePicker24Hour === 'boolean') + this.timePicker24Hour = options.timePicker24Hour; + + if (typeof options.autoApply === 'boolean') + this.autoApply = options.autoApply; + + if (typeof options.autoUpdateInput === 'boolean') + this.autoUpdateInput = options.autoUpdateInput; + + if (typeof options.linkedCalendars === 'boolean') + this.linkedCalendars = options.linkedCalendars; + + if (typeof options.isInvalidDate === 'function') + this.isInvalidDate = options.isInvalidDate; + + if (typeof options.alwaysShowCalendars === 'boolean') + this.alwaysShowCalendars = options.alwaysShowCalendars; + + // update day names order to firstDay + if (this.locale.firstDay != 0) { + var iterator = this.locale.firstDay; + while (iterator > 0) { + this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift()); + iterator--; + } + } + + var start, end, range; + + //if no start/end dates set, check if an input element contains initial values + if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') { + if ($(this.element).is('input[type=text]')) { + var val = $(this.element).val(), + split = val.split(this.locale.separator); + + start = end = null; + + if (split.length == 2) { + start = moment(split[0], this.locale.format); + end = moment(split[1], this.locale.format); + } else if (this.singleDatePicker && val !== "") { + start = moment(val, this.locale.format); + end = moment(val, this.locale.format); + } + if (start !== null && end !== null) { + this.setStartDate(start); + this.setEndDate(end); + } + } + } + + if (typeof options.ranges === 'object') { + for (range in options.ranges) { + + if (typeof options.ranges[range][0] === 'string') + start = moment(options.ranges[range][0], this.locale.format); + else + start = moment(options.ranges[range][0]); + + if (typeof options.ranges[range][1] === 'string') + end = moment(options.ranges[range][1], this.locale.format); + else + end = moment(options.ranges[range][1]); + + // If the start or end date exceed those allowed by the minDate or dateLimit + // options, shorten the range to the allowable period. + if (this.minDate && start.isBefore(this.minDate)) + start = this.minDate.clone(); + + var maxDate = this.maxDate; + if (this.dateLimit && start.clone().add(this.dateLimit).isAfter(maxDate)) + maxDate = start.clone().add(this.dateLimit); + if (maxDate && end.isAfter(maxDate)) + end = maxDate.clone(); + + // If the end of the range is before the minimum or the start of the range is + // after the maximum, don't display this range option at all. + if ((this.minDate && end.isBefore(this.minDate)) || (maxDate && start.isAfter(maxDate))) + continue; + + //Support unicode chars in the range names. + var elem = document.createElement('textarea'); + elem.innerHTML = range; + var rangeHtml = elem.value; + + this.ranges[rangeHtml] = [start, end]; + } + + var list = ''; + this.container.find('.ranges').prepend(list); + } + + if (typeof cb === 'function') { + this.callback = cb; + } + + if (!this.timePicker) { + this.startDate = this.startDate.startOf('day'); + this.endDate = this.endDate.endOf('day'); + this.container.find('.calendar-time').hide(); + } + + //can't be used together for now + if (this.timePicker && this.autoApply) + this.autoApply = false; + + if (this.autoApply && typeof options.ranges !== 'object') { + this.container.find('.ranges').hide(); + } else if (this.autoApply) { + this.container.find('.applyBtn, .cancelBtn').addClass('hide'); + } + + if (this.singleDatePicker) { + this.container.addClass('single'); + this.container.find('.calendar.left').addClass('single'); + this.container.find('.calendar.left').show(); + this.container.find('.calendar.right').hide(); + this.container.find('.daterangepicker_input input, .daterangepicker_input i').hide(); + if (!this.timePicker) { + this.container.find('.ranges').hide(); + } + } + + if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) { + this.container.addClass('show-calendar'); + } + + this.container.addClass('opens' + this.opens); + + //swap the position of the predefined ranges if opens right + if (typeof options.ranges !== 'undefined' && this.opens == 'right') { + var ranges = this.container.find('.ranges'); + var html = ranges.clone(); + ranges.remove(); + this.container.find('.calendar.left').parent().prepend(html); + } + + //apply CSS classes and labels to buttons + this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses); + if (this.applyClass.length) + this.container.find('.applyBtn').addClass(this.applyClass); + if (this.cancelClass.length) + this.container.find('.cancelBtn').addClass(this.cancelClass); + this.container.find('.applyBtn').html(this.locale.applyLabel); + this.container.find('.cancelBtn').html(this.locale.cancelLabel); + + // + // event listeners + // + + this.container.find('.calendar') + .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this)) + .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this)) + .on('click.daterangepicker', 'td.available', $.proxy(this.clickDate, this)) + .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this)) + .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this)) + .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this)) + .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this)) + .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this)) + .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this)) + //.on('keyup.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this)) + .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this)); + + this.container.find('.ranges') + .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this)) + .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this)) + .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this)) + .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this)) + .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this)); + + if (this.element.is('input')) { + this.element.on({ + 'click.daterangepicker': $.proxy(this.show, this), + 'focus.daterangepicker': $.proxy(this.show, this), + 'keyup.daterangepicker': $.proxy(this.elementChanged, this), + 'keydown.daterangepicker': $.proxy(this.keydown, this) + }); + } else { + this.element.on('click.daterangepicker', $.proxy(this.toggle, this)); + } + + // + // if attached to a text input, set the initial value + // + + if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); + this.element.trigger('change'); + } else if (this.element.is('input') && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format)); + this.element.trigger('change'); + } + + }; + + DateRangePicker.prototype = { + + constructor: DateRangePicker, + + setStartDate: function(startDate) { + if (typeof startDate === 'string') + this.startDate = moment(startDate, this.locale.format); + + if (typeof startDate === 'object') + this.startDate = moment(startDate); + + if (!this.timePicker) + this.startDate = this.startDate.startOf('day'); + + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + + if (this.minDate && this.startDate.isBefore(this.minDate)) + this.startDate = this.minDate; + + if (this.maxDate && this.startDate.isAfter(this.maxDate)) + this.startDate = this.maxDate; + + if (!this.isShowing) + this.updateElement(); + + this.updateMonthsInView(); + }, + + setEndDate: function(endDate) { + if (typeof endDate === 'string') + this.endDate = moment(endDate, this.locale.format); + + if (typeof endDate === 'object') + this.endDate = moment(endDate); + + if (!this.timePicker) + this.endDate = this.endDate.endOf('day'); + + if (this.timePicker && this.timePickerIncrement) + this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + + if (this.endDate.isBefore(this.startDate)) + this.endDate = this.startDate.clone(); + + if (this.maxDate && this.endDate.isAfter(this.maxDate)) + this.endDate = this.maxDate; + + if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate)) + this.endDate = this.startDate.clone().add(this.dateLimit); + + this.previousRightTime = this.endDate.clone(); + + if (!this.isShowing) + this.updateElement(); + + this.updateMonthsInView(); + }, + + isInvalidDate: function() { + return false; + }, + + updateView: function() { + if (this.timePicker) { + this.renderTimePicker('left'); + this.renderTimePicker('right'); + if (!this.endDate) { + this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled'); + } else { + this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled'); + } + } + if (this.endDate) { + this.container.find('input[name="daterangepicker_end"]').removeClass('active'); + this.container.find('input[name="daterangepicker_start"]').addClass('active'); + } else { + this.container.find('input[name="daterangepicker_end"]').addClass('active'); + this.container.find('input[name="daterangepicker_start"]').removeClass('active'); + } + this.updateMonthsInView(); + this.updateCalendars(); + this.updateFormInputs(); + }, + + updateMonthsInView: function() { + if (this.endDate) { + + //if both dates are visible already, do nothing + if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && + (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) + && + (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) + ) { + return; + } + + this.leftCalendar.month = this.startDate.clone().date(2); + if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) { + this.rightCalendar.month = this.endDate.clone().date(2); + } else { + this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); + } + + } else { + if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) { + this.leftCalendar.month = this.startDate.clone().date(2); + this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); + } + } + }, + + updateCalendars: function() { + + if (this.timePicker) { + var hour, minute, second; + if (this.endDate) { + hour = parseInt(this.container.find('.left .hourselect').val(), 10); + minute = parseInt(this.container.find('.left .minuteselect').val(), 10); + second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; + if (!this.timePicker24Hour) { + var ampm = this.container.find('.left .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + } else { + hour = parseInt(this.container.find('.right .hourselect').val(), 10); + minute = parseInt(this.container.find('.right .minuteselect').val(), 10); + second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; + if (!this.timePicker24Hour) { + var ampm = this.container.find('.right .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + } + this.leftCalendar.month.hour(hour).minute(minute).second(second); + this.rightCalendar.month.hour(hour).minute(minute).second(second); + } + + this.renderCalendar('left'); + this.renderCalendar('right'); + + //highlight any predefined range matching the current start and end dates + this.container.find('.ranges li').removeClass('active'); + if (this.endDate == null) return; + + this.calculateChosenLabel(); + }, + + renderCalendar: function(side) { + + // + // Build the matrix of dates that will populate the calendar + // + + var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar; + var month = calendar.month.month(); + var year = calendar.month.year(); + var hour = calendar.month.hour(); + var minute = calendar.month.minute(); + var second = calendar.month.second(); + var daysInMonth = moment([year, month]).daysInMonth(); + var firstDay = moment([year, month, 1]); + var lastDay = moment([year, month, daysInMonth]); + var lastMonth = moment(firstDay).subtract(1, 'month').month(); + var lastYear = moment(firstDay).subtract(1, 'month').year(); + var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth(); + var dayOfWeek = firstDay.day(); + + //initialize a 6 rows x 7 columns array for the calendar + var calendar = []; + calendar.firstDay = firstDay; + calendar.lastDay = lastDay; + + for (var i = 0; i < 6; i++) { + calendar[i] = []; + } + + //populate the calendar with date objects + var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1; + if (startDay > daysInLastMonth) + startDay -= 7; + + if (dayOfWeek == this.locale.firstDay) + startDay = daysInLastMonth - 6; + + var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]); + + var col, row; + for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) { + if (i > 0 && col % 7 === 0) { + col = 0; + row++; + } + calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second); + curDate.hour(12); + + if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') { + calendar[row][col] = this.minDate.clone(); + } + + if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') { + calendar[row][col] = this.maxDate.clone(); + } + + } + + //make the calendar object available to hoverDate/clickDate + if (side == 'left') { + this.leftCalendar.calendar = calendar; + } else { + this.rightCalendar.calendar = calendar; + } + + // + // Display the calendar + // + + var minDate = side == 'left' ? this.minDate : this.startDate; + var maxDate = this.maxDate; + var selected = side == 'left' ? this.startDate : this.endDate; + + var html = ''; + html += ''; + html += ''; + + // add empty cell for week number + if (this.showWeekNumbers || this.showISOWeekNumbers) + html += ''; + + if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) { + html += ''; + } else { + html += ''; + } + + var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY"); + + if (this.showDropdowns) { + var currentMonth = calendar[1][1].month(); + var currentYear = calendar[1][1].year(); + var maxYear = (maxDate && maxDate.year()) || (currentYear + 5); + var minYear = (minDate && minDate.year()) || (currentYear - 50); + var inMinYear = currentYear == minYear; + var inMaxYear = currentYear == maxYear; + + var monthHtml = '"; + + var yearHtml = ''; + + dateHtml = monthHtml + yearHtml; + } + + html += ''; + if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) { + html += ''; + } else { + html += ''; + } + + html += ''; + html += ''; + + // add week number label + if (this.showWeekNumbers || this.showISOWeekNumbers) + html += ''; + + $.each(this.locale.daysOfWeek, function(index, dayOfWeek) { + html += ''; + }); + + html += ''; + html += ''; + html += ''; + + //adjust maxDate to reflect the dateLimit setting in order to + //grey out end dates beyond the dateLimit + if (this.endDate == null && this.dateLimit) { + var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day'); + if (!maxDate || maxLimit.isBefore(maxDate)) { + maxDate = maxLimit; + } + } + + for (var row = 0; row < 6; row++) { + html += ''; + + // add week number + if (this.showWeekNumbers) + html += ''; + else if (this.showISOWeekNumbers) + html += ''; + + for (var col = 0; col < 7; col++) { + + var classes = []; + + //highlight today's date + if (calendar[row][col].isSame(new Date(), "day")) + classes.push('today'); + + //highlight weekends + if (calendar[row][col].isoWeekday() > 5) + classes.push('weekend'); + + //grey out the dates in other months displayed at beginning and end of this calendar + if (calendar[row][col].month() != calendar[1][1].month()) + classes.push('off'); + + //don't allow selection of dates before the minimum date + if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) + classes.push('off', 'disabled'); + + //don't allow selection of dates after the maximum date + if (maxDate && calendar[row][col].isAfter(maxDate, 'day')) + classes.push('off', 'disabled'); + + //don't allow selection of date if a custom function decides it's invalid + if (this.isInvalidDate(calendar[row][col])) + classes.push('off', 'disabled'); + + //highlight the currently selected start date + if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD')) + classes.push('active', 'start-date'); + + //highlight the currently selected end date + if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD')) + classes.push('active', 'end-date'); + + //highlight dates in-between the selected dates + if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate) + classes.push('in-range'); + + var cname = '', disabled = false; + for (var i = 0; i < classes.length; i++) { + cname += classes[i] + ' '; + if (classes[i] == 'disabled') + disabled = true; + } + if (!disabled) + cname += 'available'; + + html += ''; + + } + html += ''; + } + + html += ''; + html += '
' + dateHtml + '
' + this.locale.weekLabel + '' + dayOfWeek + '
' + calendar[row][0].week() + '' + calendar[row][0].isoWeek() + '' + calendar[row][col].date() + '
'; + + this.container.find('.calendar.' + side + ' .calendar-table').html(html); + + }, + + renderTimePicker: function(side) { + + var html, selected, minDate, maxDate = this.maxDate; + + if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate))) + maxDate = this.startDate.clone().add(this.dateLimit); + + if (side == 'left') { + selected = this.startDate.clone(); + minDate = this.minDate; + } else if (side == 'right') { + selected = this.endDate ? this.endDate.clone() : this.previousRightTime.clone(); + minDate = this.startDate; + + //Preserve the time already selected + var timeSelector = this.container.find('.calendar.right .calendar-time div'); + if (timeSelector.html() != '') { + + selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour()); + selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute()); + selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second()); + + if (!this.timePicker24Hour) { + var ampm = timeSelector.find('.ampmselect option:selected').val(); + if (ampm === 'PM' && selected.hour() < 12) + selected.hour(selected.hour() + 12); + if (ampm === 'AM' && selected.hour() === 12) + selected.hour(0); + } + + if (selected.isBefore(this.startDate)) + selected = this.startDate.clone(); + + if (maxDate && selected.isAfter(maxDate)) + selected = maxDate.clone(); + + } + } + + // + // hours + // + + html = ' '; + + // + // minutes + // + + html += ': '; + + // + // seconds + // + + if (this.timePickerSeconds) { + html += ': '; + } + + // + // AM/PM + // + + if (!this.timePicker24Hour) { + html += ''; + } + + this.container.find('.calendar.' + side + ' .calendar-time div').html(html); + + }, + + updateFormInputs: function() { + + //ignore mouse movements while an above-calendar text input has focus + if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) + return; + + this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format)); + if (this.endDate) + this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format)); + + if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) { + this.container.find('button.applyBtn').removeAttr('disabled'); + } else { + this.container.find('button.applyBtn').attr('disabled', 'disabled'); + } + + }, + + move: function() { + var parentOffset = { top: 0, left: 0 }, + containerTop; + var parentRightEdge = $(window).width(); + if (!this.parentEl.is('body')) { + parentOffset = { + top: this.parentEl.offset().top - this.parentEl.scrollTop(), + left: this.parentEl.offset().left - this.parentEl.scrollLeft() + }; + parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left; + } + + if (this.drops == 'up') + containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top; + else + containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top; + this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup'); + + if (this.opens == 'left') { + this.container.css({ + top: containerTop, + right: parentRightEdge - this.element.offset().left - this.element.outerWidth(), + left: 'auto' + }); + if (this.container.offset().left < 0) { + this.container.css({ + right: 'auto', + left: 9 + }); + } + } else if (this.opens == 'center') { + this.container.css({ + top: containerTop, + left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2 + - this.container.outerWidth() / 2, + right: 'auto' + }); + if (this.container.offset().left < 0) { + this.container.css({ + right: 'auto', + left: 9 + }); + } + } else { + this.container.css({ + top: containerTop, + left: this.element.offset().left - parentOffset.left, + right: 'auto' + }); + if (this.container.offset().left + this.container.outerWidth() > $(window).width()) { + this.container.css({ + left: 'auto', + right: 0 + }); + } + } + }, + + show: function(e) { + if (this.isShowing) return; + + // Create a click proxy that is private to this instance of datepicker, for unbinding + this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this); + + // Bind global datepicker mousedown for hiding and + $(document) + .on('mousedown.daterangepicker', this._outsideClickProxy) + // also support mobile devices + .on('touchend.daterangepicker', this._outsideClickProxy) + // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them + .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy) + // and also close when focus changes to outside the picker (eg. tabbing between controls) + .on('focusin.daterangepicker', this._outsideClickProxy); + + // Reposition the picker if the window is resized while it's open + $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this)); + + this.oldStartDate = this.startDate.clone(); + this.oldEndDate = this.endDate.clone(); + this.previousRightTime = this.endDate.clone(); + + this.updateView(); + this.container.show(); + this.move(); + this.element.trigger('show.daterangepicker', this); + this.isShowing = true; + }, + + hide: function(e) { + if (!this.isShowing) return; + + //incomplete date selection, revert to last values + if (!this.endDate) { + this.startDate = this.oldStartDate.clone(); + this.endDate = this.oldEndDate.clone(); + } + + //if a new date range was selected, invoke the user callback function + if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate)) + this.callback(this.startDate, this.endDate, this.chosenLabel); + + //if picker is attached to a text input, update it + this.updateElement(); + + $(document).off('.daterangepicker'); + $(window).off('.daterangepicker'); + this.container.hide(); + this.element.trigger('hide.daterangepicker', this); + this.isShowing = false; + }, + + toggle: function(e) { + if (this.isShowing) { + this.hide(); + } else { + this.show(); + } + }, + + outsideClick: function(e) { + var target = $(e.target); + // if the page is clicked anywhere except within the daterangerpicker/button + // itself then call this.hide() + if ( + // ie modal dialog fix + e.type == "focusin" || + target.closest(this.element).length || + target.closest(this.container).length || + target.closest('.calendar-table').length + ) return; + this.hide(); + }, + + showCalendars: function() { + this.container.addClass('show-calendar'); + this.move(); + this.element.trigger('showCalendar.daterangepicker', this); + }, + + hideCalendars: function() { + this.container.removeClass('show-calendar'); + this.element.trigger('hideCalendar.daterangepicker', this); + }, + + hoverRange: function(e) { + + //ignore mouse movements while an above-calendar text input has focus + if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) + return; + + var label = e.target.innerHTML; + if (label == this.locale.customRangeLabel) { + this.updateView(); + } else { + var dates = this.ranges[label]; + this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format)); + this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format)); + } + + }, + + clickRange: function(e) { + var label = e.target.innerHTML; + this.chosenLabel = label; + if (label == this.locale.customRangeLabel) { + this.showCalendars(); + } else { + var dates = this.ranges[label]; + this.startDate = dates[0]; + this.endDate = dates[1]; + + if (!this.timePicker) { + this.startDate.startOf('day'); + this.endDate.endOf('day'); + } + + if (!this.alwaysShowCalendars) + this.hideCalendars(); + this.clickApply(); + } + }, + + clickPrev: function(e) { + var cal = $(e.target).parents('.calendar'); + if (cal.hasClass('left')) { + this.leftCalendar.month.subtract(1, 'month'); + if (this.linkedCalendars) + this.rightCalendar.month.subtract(1, 'month'); + } else { + this.rightCalendar.month.subtract(1, 'month'); + } + this.updateCalendars(); + }, + + clickNext: function(e) { + var cal = $(e.target).parents('.calendar'); + if (cal.hasClass('left')) { + this.leftCalendar.month.add(1, 'month'); + } else { + this.rightCalendar.month.add(1, 'month'); + if (this.linkedCalendars) + this.leftCalendar.month.add(1, 'month'); + } + this.updateCalendars(); + }, + + hoverDate: function(e) { + + //ignore mouse movements while an above-calendar text input has focus + if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) + return; + + //ignore dates that can't be selected + if (!$(e.target).hasClass('available')) return; + + //have the text inputs above calendars reflect the date being hovered over + var title = $(e.target).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(e.target).parents('.calendar'); + var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; + + if (this.endDate) { + this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format)); + } else { + this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format)); + } + + //highlight the dates between the start date and the date being hovered as a potential end date + var leftCalendar = this.leftCalendar; + var rightCalendar = this.rightCalendar; + var startDate = this.startDate; + if (!this.endDate) { + this.container.find('.calendar td').each(function(index, el) { + + //skip week numbers, only look at dates + if ($(el).hasClass('week')) return; + + var title = $(el).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(el).parents('.calendar'); + var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col]; + + if (dt.isAfter(startDate) && dt.isBefore(date)) { + $(el).addClass('in-range'); + } else { + $(el).removeClass('in-range'); + } + + }); + } + + }, + + clickDate: function(e) { + + if (!$(e.target).hasClass('available')) return; + + var title = $(e.target).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(e.target).parents('.calendar'); + var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; + + // + // this function needs to do a few things: + // * alternate between selecting a start and end date for the range, + // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date + // * if autoapply is enabled, and an end date was chosen, apply the selection + // * if single date picker mode, and time picker isn't enabled, apply the selection immediately + // + + if (this.endDate || date.isBefore(this.startDate, 'day')) { + if (this.timePicker) { + var hour = parseInt(this.container.find('.left .hourselect').val(), 10); + if (!this.timePicker24Hour) { + var ampm = this.container.find('.left .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + var minute = parseInt(this.container.find('.left .minuteselect').val(), 10); + var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; + date = date.clone().hour(hour).minute(minute).second(second); + } + this.endDate = null; + this.setStartDate(date.clone()); + } else if (!this.endDate && date.isBefore(this.startDate)) { + //special case: clicking the same date for start/end, + //but the time of the end date is before the start date + this.setEndDate(this.startDate.clone()); + } else { + if (this.timePicker) { + var hour = parseInt(this.container.find('.right .hourselect').val(), 10); + if (!this.timePicker24Hour) { + var ampm = this.container.find('.right .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + var minute = parseInt(this.container.find('.right .minuteselect').val(), 10); + var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; + date = date.clone().hour(hour).minute(minute).second(second); + } + this.setEndDate(date.clone()); + if (this.autoApply) { + this.calculateChosenLabel(); + this.clickApply(); + } + } + + if (this.singleDatePicker) { + this.setEndDate(this.startDate); + if (!this.timePicker) + this.clickApply(); + } + + this.updateView(); + + }, + + calculateChosenLabel: function() { + var customRange = true; + var i = 0; + for (var range in this.ranges) { + if (this.timePicker) { + if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) { + customRange = false; + this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html(); + break; + } + } else { + //ignore times when comparing dates if time picker is not enabled + if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) { + customRange = false; + this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html(); + break; + } + } + i++; + } + if (customRange) { + this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html(); + this.showCalendars(); + } + }, + + clickApply: function(e) { + this.hide(); + this.element.trigger('apply.daterangepicker', this); + }, + + clickCancel: function(e) { + this.startDate = this.oldStartDate; + this.endDate = this.oldEndDate; + this.hide(); + this.element.trigger('cancel.daterangepicker', this); + }, + + monthOrYearChanged: function(e) { + var isLeft = $(e.target).closest('.calendar').hasClass('left'), + leftOrRight = isLeft ? 'left' : 'right', + cal = this.container.find('.calendar.'+leftOrRight); + + // Month must be Number for new moment versions + var month = parseInt(cal.find('.monthselect').val(), 10); + var year = cal.find('.yearselect').val(); + + if (!isLeft) { + if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) { + month = this.startDate.month(); + year = this.startDate.year(); + } + } + + if (this.minDate) { + if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) { + month = this.minDate.month(); + year = this.minDate.year(); + } + } + + if (this.maxDate) { + if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) { + month = this.maxDate.month(); + year = this.maxDate.year(); + } + } + + if (isLeft) { + this.leftCalendar.month.month(month).year(year); + if (this.linkedCalendars) + this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month'); + } else { + this.rightCalendar.month.month(month).year(year); + if (this.linkedCalendars) + this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month'); + } + this.updateCalendars(); + }, + + timeChanged: function(e) { + + var cal = $(e.target).closest('.calendar'), + isLeft = cal.hasClass('left'); + + var hour = parseInt(cal.find('.hourselect').val(), 10); + var minute = parseInt(cal.find('.minuteselect').val(), 10); + var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0; + + if (!this.timePicker24Hour) { + var ampm = cal.find('.ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + + if (isLeft) { + var start = this.startDate.clone(); + start.hour(hour); + start.minute(minute); + start.second(second); + this.setStartDate(start); + if (this.singleDatePicker) { + this.endDate = this.startDate.clone(); + } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) { + this.setEndDate(start.clone()); + } + } else if (this.endDate) { + var end = this.endDate.clone(); + end.hour(hour); + end.minute(minute); + end.second(second); + this.setEndDate(end); + } + + //update the calendars so all clickable dates reflect the new time component + this.updateCalendars(); + + //update the form inputs above the calendars with the new time + this.updateFormInputs(); + + //re-render the time pickers because changing one selection can affect what's enabled in another + this.renderTimePicker('left'); + this.renderTimePicker('right'); + + }, + + formInputsChanged: function(e) { + var isRight = $(e.target).closest('.calendar').hasClass('right'); + var start = moment(this.container.find('input[name="daterangepicker_start"]').val(), this.locale.format); + var end = moment(this.container.find('input[name="daterangepicker_end"]').val(), this.locale.format); + + if (start.isValid() && end.isValid()) { + + if (isRight && end.isBefore(start)) + start = end.clone(); + + this.setStartDate(start); + this.setEndDate(end); + + if (isRight) { + this.container.find('input[name="daterangepicker_start"]').val(this.startDate.format(this.locale.format)); + } else { + this.container.find('input[name="daterangepicker_end"]').val(this.endDate.format(this.locale.format)); + } + + } + + this.updateCalendars(); + if (this.timePicker) { + this.renderTimePicker('left'); + this.renderTimePicker('right'); + } + }, + + elementChanged: function() { + if (!this.element.is('input')) return; + if (!this.element.val().length) return; + if (this.element.val().length < this.locale.format.length) return; + + var dateString = this.element.val().split(this.locale.separator), + start = null, + end = null; + + if (dateString.length === 2) { + start = moment(dateString[0], this.locale.format); + end = moment(dateString[1], this.locale.format); + } + + if (this.singleDatePicker || start === null || end === null) { + start = moment(this.element.val(), this.locale.format); + end = start; + } + + if (!start.isValid() || !end.isValid()) return; + + this.setStartDate(start); + this.setEndDate(end); + this.updateView(); + }, + + keydown: function(e) { + //hide on tab or enter + if ((e.keyCode === 9) || (e.keyCode === 13)) { + this.hide(); + } + }, + + updateElement: function() { + if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); + this.element.trigger('change'); + } else if (this.element.is('input') && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format)); + this.element.trigger('change'); + } + }, + + remove: function() { + this.container.remove(); + this.element.off('.daterangepicker'); + this.element.removeData(); + } + + }; + + $.fn.daterangepicker = function(options, callback) { + this.each(function() { + var el = $(this); + if (el.data('daterangepicker')) + el.data('daterangepicker').remove(); + el.data('daterangepicker', new DateRangePicker(el, options, callback)); + }); + return this; + }; + + return DateRangePicker; + +})); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js new file mode 100644 index 000000000..05199bd3b --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js @@ -0,0 +1,7 @@ +//! moment.js +//! version : 2.10.3 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Dc.apply(null,arguments)}function b(a){Dc=a}function c(a){return"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in Fc)d=Fc[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(b){m(this,b),this._d=new Date(+b._d),Gc===!1&&(Gc=!0,a.updateOffset(this),Gc=!1)}function o(a){return a instanceof n||null!=a&&null!=a._isAMomentObject}function p(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function q(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&p(a[d])!==p(b[d]))&&g++;return g+f}function r(){}function s(a){return a?a.toLowerCase().replace("_","-"):a}function t(a){for(var b,c,d,e,f=0;f0;){if(d=u(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&q(e,c,!0)>=b-1)break;b--}f++}return null}function u(a){var b=null;if(!Hc[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Ec._abbr,require("./locale/"+a),v(b)}catch(c){}return Hc[a]}function v(a,b){var c;return a&&(c="undefined"==typeof b?x(a):w(a,b),c&&(Ec=c)),Ec._abbr}function w(a,b){return null!==b?(b.abbr=a,Hc[a]||(Hc[a]=new r),Hc[a].set(b),v(a),Hc[a]):(delete Hc[a],null)}function x(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Ec;if(!c(a)){if(b=u(a))return b;a=[a]}return t(a)}function y(a,b){var c=a.toLowerCase();Ic[c]=Ic[c+"s"]=Ic[b]=a}function z(a){return"string"==typeof a?Ic[a]||Ic[a.toLowerCase()]:void 0}function A(a){var b,c,d={};for(c in a)f(a,c)&&(b=z(c),b&&(d[b]=a[c]));return d}function B(b,c){return function(d){return null!=d?(D(this,b,d),a.updateOffset(this,c),this):C(this,b)}}function C(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function D(a,b,c){return a._d["set"+(a._isUTC?"UTC":"")+b](c)}function E(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=z(a),"function"==typeof this[a])return this[a](b);return this}function F(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthb;b++)Mc[d[b]]?d[b]=Mc[d[b]]:d[b]=H(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function J(a,b){return a.isValid()?(b=K(b,a.localeData()),Lc[b]||(Lc[b]=I(b)),Lc[b](a)):a.localeData().invalidDate()}function K(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Kc.lastIndex=0;d>=0&&Kc.test(a);)a=a.replace(Kc,c),Kc.lastIndex=0,d-=1;return a}function L(a,b,c){_c[a]="function"==typeof b?b:function(a){return a&&c?c:b}}function M(a,b){return f(_c,a)?_c[a](b._strict,b._locale):new RegExp(N(a))}function N(a){return a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function O(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=p(a)}),c=0;cd;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function V(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),R(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function W(b){return null!=b?(V(this,b),a.updateOffset(this,!0),this):C(this,"Month")}function X(){return R(this.year(),this.month())}function Y(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[cd]<0||c[cd]>11?cd:c[dd]<1||c[dd]>R(c[bd],c[cd])?dd:c[ed]<0||c[ed]>24||24===c[ed]&&(0!==c[fd]||0!==c[gd]||0!==c[hd])?ed:c[fd]<0||c[fd]>59?fd:c[gd]<0||c[gd]>59?gd:c[hd]<0||c[hd]>999?hd:-1,j(a)._overflowDayOfYear&&(bd>b||b>dd)&&(b=dd),j(a).overflow=b),a}function Z(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function $(a,b){var c=!0,d=a+"\n"+(new Error).stack;return g(function(){return c&&(Z(d),c=!1),b.apply(this,arguments)},b)}function _(a,b){kd[a]||(Z(b),kd[a]=!0)}function aa(a){var b,c,d=a._i,e=ld.exec(d);if(e){for(j(a).iso=!0,b=0,c=md.length;c>b;b++)if(md[b][1].exec(d)){a._f=md[b][0]+(e[6]||" ");break}for(b=0,c=nd.length;c>b;b++)if(nd[b][1].exec(d)){a._f+=nd[b][0];break}d.match(Yc)&&(a._f+="Z"),ta(a)}else a._isValid=!1}function ba(b){var c=od.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(aa(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function ca(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function da(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function ea(a){return fa(a)?366:365}function fa(a){return a%4===0&&a%100!==0||a%400===0}function ga(){return fa(this.year())}function ha(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=Aa(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ia(a){return ha(a,this._week.dow,this._week.doy).week}function ja(){return this._week.dow}function ka(){return this._week.doy}function la(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function ma(a){var b=ha(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function na(a,b,c,d,e){var f,g,h=da(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:ea(a-1)+g}}function oa(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function pa(a,b,c){return null!=a?a:null!=b?b:c}function qa(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function ra(a){var b,c,d,e,f=[];if(!a._d){for(d=qa(a),a._w&&null==a._a[dd]&&null==a._a[cd]&&sa(a),a._dayOfYear&&(e=pa(a._a[bd],d[bd]),a._dayOfYear>ea(e)&&(j(a)._overflowDayOfYear=!0),c=da(e,0,a._dayOfYear),a._a[cd]=c.getUTCMonth(),a._a[dd]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[ed]&&0===a._a[fd]&&0===a._a[gd]&&0===a._a[hd]&&(a._nextDay=!0,a._a[ed]=0),a._d=(a._useUTC?da:ca).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[ed]=24)}}function sa(a){var b,c,d,e,f,g,h;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=pa(b.GG,a._a[bd],ha(Aa(),1,4).year),d=pa(b.W,1),e=pa(b.E,1)):(f=a._locale._week.dow,g=a._locale._week.doy,c=pa(b.gg,a._a[bd],ha(Aa(),f,g).year),d=pa(b.w,1),null!=b.d?(e=b.d,f>e&&++d):e=null!=b.e?b.e+f:f),h=na(c,d,e,g,f),a._a[bd]=h.year,a._dayOfYear=h.dayOfYear}function ta(b){if(b._f===a.ISO_8601)return void aa(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=K(b._f,b._locale).match(Jc)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),Mc[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),Q(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[ed]<=12&&b._a[ed]>0&&(j(b).bigHour=void 0),b._a[ed]=ua(b._locale,b._a[ed],b._meridiem),ra(b),Y(b)}function ua(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function va(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(0/0));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function wa(a){if(!a._d){var b=A(a._i);a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],ra(a)}}function xa(a){var b,e=a._i,f=a._f;return a._locale=a._locale||x(a._l),null===e||void 0===f&&""===e?l({nullInput:!0}):("string"==typeof e&&(a._i=e=a._locale.preparse(e)),o(e)?new n(Y(e)):(c(f)?va(a):f?ta(a):d(e)?a._d=e:ya(a),b=new n(Y(a)),b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b))}function ya(b){var f=b._i;void 0===f?b._d=new Date:d(f)?b._d=new Date(+f):"string"==typeof f?ba(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),ra(b)):"object"==typeof f?wa(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function za(a,b,c,d,e){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,xa(f)}function Aa(a,b,c,d){return za(a,b,c,d,!1)}function Ba(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Aa();for(d=b[0],e=1;ea&&(a=-a,c="-"),c+F(~~(a/60),2)+b+F(~~a%60,2)})}function Ha(a){var b=(a||"").match(Yc)||[],c=b[b.length-1]||[],d=(c+"").match(td)||["-",0,0],e=+(60*d[1])+p(d[2]);return"+"===d[0]?e:-e}function Ia(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(o(b)||d(b)?+b:+Aa(b))-+e,e._d.setTime(+e._d+f),a.updateOffset(e,!1),e):Aa(b).local();return c._isUTC?Aa(b).zone(c._offset||0):Aa(b).local()}function Ja(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ka(b,c){var d,e=this._offset||0;return null!=b?("string"==typeof b&&(b=Ha(b)),Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ja(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?$a(this,Va(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ja(this)}function La(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Ma(a){return this.utcOffset(0,a)}function Na(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ja(this),"m")),this}function Oa(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ha(this._i)),this}function Pa(a){return a=a?Aa(a).utcOffset():0,(this.utcOffset()-a)%60===0}function Qa(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ra(){if(this._a){var a=this._isUTC?h(this._a):Aa(this._a);return this.isValid()&&q(this._a,a.toArray())>0}return!1}function Sa(){return!this._isUTC}function Ta(){return this._isUTC}function Ua(){return this._isUTC&&0===this._offset}function Va(a,b){var c,d,e,g=a,h=null;return Fa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=ud.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:p(h[dd])*c,h:p(h[ed])*c,m:p(h[fd])*c,s:p(h[gd])*c,ms:p(h[hd])*c}):(h=vd.exec(a))?(c="-"===h[1]?-1:1,g={y:Wa(h[2],c),M:Wa(h[3],c),d:Wa(h[4],c),h:Wa(h[5],c),m:Wa(h[6],c),s:Wa(h[7],c),w:Wa(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Ya(Aa(g.from),Aa(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Ea(g),Fa(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function Wa(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Xa(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Ya(a,b){var c;return b=Ia(b,a),a.isBefore(b)?c=Xa(a,b):(c=Xa(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function Za(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(_(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Va(c,d),$a(this,e,a),this}}function $a(b,c,d,e){var f=c._milliseconds,g=c._days,h=c._months;e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&D(b,"Date",C(b,"Date")+g*d),h&&V(b,C(b,"Month")+h*d),e&&a.updateOffset(b,g||h)}function _a(a){var b=a||Aa(),c=Ia(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,Aa(b)))}function ab(){return new n(this)}function bb(a,b){var c;return b=z("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Aa(a),+this>+a):(c=o(a)?+a:+Aa(a),c<+this.clone().startOf(b))}function cb(a,b){var c;return b=z("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Aa(a),+a>+this):(c=o(a)?+a:+Aa(a),+this.clone().endOf(b)a?Math.ceil(a):Math.floor(a)}function gb(a,b,c){var d,e,f=Ia(a,this),g=6e4*(f.utcOffset()-this.utcOffset());return b=z(b),"year"===b||"month"===b||"quarter"===b?(e=hb(this,f),"quarter"===b?e/=3:"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:fb(e)}function hb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function ib(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function jb(){var a=this.clone().utc();return 0b;b++)if(this._weekdaysParse[b]||(c=Aa([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b}function Mb(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Hb(a,this.localeData()),this.add(a-b,"d")):b}function Nb(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ob(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)}function Pb(a,b){G(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Qb(a,b){return b._meridiemParse}function Rb(a){return"p"===(a+"").toLowerCase().charAt(0)}function Sb(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Tb(a){G(0,[a,3],0,"millisecond")}function Ub(){return this._isUTC?"UTC":""}function Vb(){return this._isUTC?"Coordinated Universal Time":""}function Wb(a){return Aa(1e3*a)}function Xb(){return Aa.apply(null,arguments).parseZone()}function Yb(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.call(b,c):d}function Zb(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b}function $b(){return this._invalidDate}function _b(a){return this._ordinal.replace("%d",a)}function ac(a){return a}function bc(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)}function cc(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)}function dc(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function ec(a,b,c,d){var e=x(),f=h().set(d,b);return e[c](f,a)}function fc(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return ec(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=ec(a,f,c,e);return g}function gc(a,b){return fc(a,b,"months",12,"month")}function hc(a,b){return fc(a,b,"monthsShort",12,"month")}function ic(a,b){return fc(a,b,"weekdays",7,"day")}function jc(a,b){return fc(a,b,"weekdaysShort",7,"day")}function kc(a,b){return fc(a,b,"weekdaysMin",7,"day")}function lc(){var a=this._data;return this._milliseconds=Rd(this._milliseconds),this._days=Rd(this._days),this._months=Rd(this._months),a.milliseconds=Rd(a.milliseconds),a.seconds=Rd(a.seconds),a.minutes=Rd(a.minutes),a.hours=Rd(a.hours),a.months=Rd(a.months),a.years=Rd(a.years),this}function mc(a,b,c,d){var e=Va(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function nc(a,b){return mc(this,a,b,1)}function oc(a,b){return mc(this,a,b,-1)}function pc(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;return g.milliseconds=d%1e3,a=fb(d/1e3),g.seconds=a%60,b=fb(a/60),g.minutes=b%60,c=fb(b/60),g.hours=c%24,e+=fb(c/24),h=fb(qc(e)),e-=fb(rc(h)),f+=fb(e/30),e%=30,h+=fb(f/12),f%=12,g.days=e,g.months=f,g.years=h,this}function qc(a){return 400*a/146097}function rc(a){return 146097*a/400}function sc(a){var b,c,d=this._milliseconds;if(a=z(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+12*qc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(rc(this._months/12)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function tc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*p(this._months/12)}function uc(a){return function(){return this.as(a)}}function vc(a){return a=z(a),this[a+"s"]()}function wc(a){return function(){return this._data[a]}}function xc(){return fb(this.days()/7)}function yc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function zc(a,b,c){var d=Va(a).abs(),e=fe(d.as("s")),f=fe(d.as("m")),g=fe(d.as("h")),h=fe(d.as("d")),i=fe(d.as("M")),j=fe(d.as("y")),k=e0,k[4]=c,yc.apply(null,k)}function Ac(a,b){return void 0===ge[a]?!1:void 0===b?ge[a]:(ge[a]=b,!0)}function Bc(a){var b=this.localeData(),c=zc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function Cc(){var a=he(this.years()),b=he(this.months()),c=he(this.days()),d=he(this.hours()),e=he(this.minutes()),f=he(this.seconds()+this.milliseconds()/1e3),g=this.asSeconds();return g?(0>g?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"}var Dc,Ec,Fc=a.momentProperties=[],Gc=!1,Hc={},Ic={},Jc=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Kc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Lc={},Mc={},Nc=/\d/,Oc=/\d\d/,Pc=/\d{3}/,Qc=/\d{4}/,Rc=/[+-]?\d{6}/,Sc=/\d\d?/,Tc=/\d{1,3}/,Uc=/\d{1,4}/,Vc=/[+-]?\d{1,6}/,Wc=/\d+/,Xc=/[+-]?\d+/,Yc=/Z|[+-]\d\d:?\d\d/gi,Zc=/[+-]?\d+(\.\d{1,3})?/,$c=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,_c={},ad={},bd=0,cd=1,dd=2,ed=3,fd=4,gd=5,hd=6;G("M",["MM",2],"Mo",function(){return this.month()+1}),G("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),G("MMMM",0,0,function(a){return this.localeData().months(this,a)}),y("month","M"),L("M",Sc),L("MM",Sc,Oc),L("MMM",$c),L("MMMM",$c),O(["M","MM"],function(a,b){b[cd]=p(a)-1}),O(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[cd]=e:j(c).invalidMonth=a});var id="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),jd="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),kd={};a.suppressDeprecationWarnings=!1;var ld=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,md=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],nd=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],od=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=$("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),G(0,["YY",2],0,function(){return this.year()%100}),G(0,["YYYY",4],0,"year"),G(0,["YYYYY",5],0,"year"),G(0,["YYYYYY",6,!0],0,"year"),y("year","y"),L("Y",Xc),L("YY",Sc,Oc),L("YYYY",Uc,Qc),L("YYYYY",Vc,Rc),L("YYYYYY",Vc,Rc),O(["YYYY","YYYYY","YYYYYY"],bd),O("YY",function(b,c){c[bd]=a.parseTwoDigitYear(b)}),a.parseTwoDigitYear=function(a){return p(a)+(p(a)>68?1900:2e3)};var pd=B("FullYear",!1);G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),y("week","w"),y("isoWeek","W"),L("w",Sc),L("ww",Sc,Oc),L("W",Sc),L("WW",Sc,Oc),P(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=p(a)});var qd={dow:0,doy:6};G("DDD",["DDDD",3],"DDDo","dayOfYear"),y("dayOfYear","DDD"),L("DDD",Tc),L("DDDD",Pc),O(["DDD","DDDD"],function(a,b,c){c._dayOfYear=p(a)}),a.ISO_8601=function(){};var rd=$("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=Aa.apply(null,arguments);return this>a?this:a}),sd=$("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Aa.apply(null,arguments);return a>this?this:a});Ga("Z",":"),Ga("ZZ",""),L("Z",Yc),L("ZZ",Yc),O(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ha(a)});var td=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var ud=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,vd=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Va.fn=Ea.prototype;var wd=Za(1,"add"),xd=Za(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var yd=$("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});G(0,["gg",2],0,function(){return this.weekYear()%100}),G(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ab("gggg","weekYear"),Ab("ggggg","weekYear"),Ab("GGGG","isoWeekYear"),Ab("GGGGG","isoWeekYear"),y("weekYear","gg"),y("isoWeekYear","GG"),L("G",Xc),L("g",Xc),L("GG",Sc,Oc),L("gg",Sc,Oc),L("GGGG",Uc,Qc),L("gggg",Uc,Qc),L("GGGGG",Vc,Rc),L("ggggg",Vc,Rc),P(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=p(a)}),P(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),G("Q",0,0,"quarter"),y("quarter","Q"),L("Q",Nc),O("Q",function(a,b){b[cd]=3*(p(a)-1)}),G("D",["DD",2],"Do","date"),y("date","D"),L("D",Sc),L("DD",Sc,Oc),L("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),O(["D","DD"],dd),O("Do",function(a,b){b[dd]=p(a.match(Sc)[0],10)});var zd=B("Date",!0);G("d",0,"do","day"),G("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),G("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),G("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),y("day","d"),y("weekday","e"),y("isoWeekday","E"),L("d",Sc),L("e",Sc),L("E",Sc),L("dd",$c),L("ddd",$c),L("dddd",$c),P(["dd","ddd","dddd"],function(a,b,c){var d=c._locale.weekdaysParse(a);null!=d?b.d=d:j(c).invalidWeekday=a}),P(["d","e","E"],function(a,b,c,d){b[d]=p(a)});var Ad="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Bd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Cd="Su_Mo_Tu_We_Th_Fr_Sa".split("_");G("H",["HH",2],0,"hour"),G("h",["hh",2],0,function(){return this.hours()%12||12}),Pb("a",!0),Pb("A",!1),y("hour","h"),L("a",Qb),L("A",Qb),L("H",Sc),L("h",Sc),L("HH",Sc,Oc),L("hh",Sc,Oc),O(["H","HH"],ed),O(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),O(["h","hh"],function(a,b,c){b[ed]=p(a),j(c).bigHour=!0});var Dd=/[ap]\.?m?\.?/i,Ed=B("Hours",!0);G("m",["mm",2],0,"minute"),y("minute","m"),L("m",Sc),L("mm",Sc,Oc),O(["m","mm"],fd);var Fd=B("Minutes",!1);G("s",["ss",2],0,"second"),y("second","s"),L("s",Sc),L("ss",Sc,Oc),O(["s","ss"],gd);var Gd=B("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Tb("SSS"),Tb("SSSS"),y("millisecond","ms"),L("S",Tc,Nc),L("SS",Tc,Oc),L("SSS",Tc,Pc),L("SSSS",Wc),O(["S","SS","SSS","SSSS"],function(a,b){b[hd]=p(1e3*("0."+a))});var Hd=B("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var Id=n.prototype;Id.add=wd,Id.calendar=_a,Id.clone=ab,Id.diff=gb,Id.endOf=sb,Id.format=kb,Id.from=lb,Id.fromNow=mb,Id.to=nb,Id.toNow=ob,Id.get=E,Id.invalidAt=zb,Id.isAfter=bb,Id.isBefore=cb,Id.isBetween=db,Id.isSame=eb,Id.isValid=xb,Id.lang=yd,Id.locale=pb,Id.localeData=qb,Id.max=sd,Id.min=rd,Id.parsingFlags=yb,Id.set=E,Id.startOf=rb,Id.subtract=xd,Id.toArray=wb,Id.toDate=vb,Id.toISOString=jb,Id.toJSON=jb,Id.toString=ib,Id.unix=ub,Id.valueOf=tb,Id.year=pd,Id.isLeapYear=ga,Id.weekYear=Cb,Id.isoWeekYear=Db,Id.quarter=Id.quarters=Gb,Id.month=W,Id.daysInMonth=X,Id.week=Id.weeks=la,Id.isoWeek=Id.isoWeeks=ma,Id.weeksInYear=Fb,Id.isoWeeksInYear=Eb,Id.date=zd,Id.day=Id.days=Mb,Id.weekday=Nb,Id.isoWeekday=Ob,Id.dayOfYear=oa,Id.hour=Id.hours=Ed,Id.minute=Id.minutes=Fd,Id.second=Id.seconds=Gd,Id.millisecond=Id.milliseconds=Hd,Id.utcOffset=Ka,Id.utc=Ma,Id.local=Na,Id.parseZone=Oa,Id.hasAlignedHourOffset=Pa,Id.isDST=Qa,Id.isDSTShifted=Ra,Id.isLocal=Sa,Id.isUtcOffset=Ta,Id.isUtc=Ua,Id.isUTC=Ua,Id.zoneAbbr=Ub,Id.zoneName=Vb,Id.dates=$("dates accessor is deprecated. Use date instead.",zd),Id.months=$("months accessor is deprecated. Use month instead",W),Id.years=$("years accessor is deprecated. Use year instead",pd),Id.zone=$("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",La);var Jd=Id,Kd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ld={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},Md="Invalid date",Nd="%d",Od=/\d{1,2}/,Pd={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour", +hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Qd=r.prototype;Qd._calendar=Kd,Qd.calendar=Yb,Qd._longDateFormat=Ld,Qd.longDateFormat=Zb,Qd._invalidDate=Md,Qd.invalidDate=$b,Qd._ordinal=Nd,Qd.ordinal=_b,Qd._ordinalParse=Od,Qd.preparse=ac,Qd.postformat=ac,Qd._relativeTime=Pd,Qd.relativeTime=bc,Qd.pastFuture=cc,Qd.set=dc,Qd.months=S,Qd._months=id,Qd.monthsShort=T,Qd._monthsShort=jd,Qd.monthsParse=U,Qd.week=ia,Qd._week=qd,Qd.firstDayOfYear=ka,Qd.firstDayOfWeek=ja,Qd.weekdays=Ib,Qd._weekdays=Ad,Qd.weekdaysMin=Kb,Qd._weekdaysMin=Cd,Qd.weekdaysShort=Jb,Qd._weekdaysShort=Bd,Qd.weekdaysParse=Lb,Qd.isPM=Rb,Qd._meridiemParse=Dd,Qd.meridiem=Sb,v("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===p(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=$("moment.lang is deprecated. Use moment.locale instead.",v),a.langData=$("moment.langData is deprecated. Use moment.localeData instead.",x);var Rd=Math.abs,Sd=uc("ms"),Td=uc("s"),Ud=uc("m"),Vd=uc("h"),Wd=uc("d"),Xd=uc("w"),Yd=uc("M"),Zd=uc("y"),$d=wc("milliseconds"),_d=wc("seconds"),ae=wc("minutes"),be=wc("hours"),ce=wc("days"),de=wc("months"),ee=wc("years"),fe=Math.round,ge={s:45,m:45,h:22,d:26,M:11},he=Math.abs,ie=Ea.prototype;ie.abs=lc,ie.add=nc,ie.subtract=oc,ie.as=sc,ie.asMilliseconds=Sd,ie.asSeconds=Td,ie.asMinutes=Ud,ie.asHours=Vd,ie.asDays=Wd,ie.asWeeks=Xd,ie.asMonths=Yd,ie.asYears=Zd,ie.valueOf=tc,ie._bubble=pc,ie.get=vc,ie.milliseconds=$d,ie.seconds=_d,ie.minutes=ae,ie.hours=be,ie.days=ce,ie.weeks=xc,ie.months=de,ie.years=ee,ie.humanize=Bc,ie.toISOString=Cc,ie.toString=Cc,ie.toJSON=Cc,ie.locale=pb,ie.localeData=qb,ie.toIsoString=$("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Cc),ie.lang=yd,G("X",0,0,"unix"),G("x",0,0,"valueOf"),L("x",Xc),L("X",Zc),O("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),O("x",function(a,b,c){c._d=new Date(p(a))}),a.version="2.10.3",b(Aa),a.fn=Jd,a.min=Ca,a.max=Da,a.utc=h,a.unix=Wb,a.months=gc,a.isDate=d,a.locale=v,a.invalid=l,a.duration=Va,a.isMoment=o,a.weekdays=ic,a.parseZone=Xb,a.localeData=x,a.isDuration=Fa,a.monthsShort=hc,a.weekdaysMin=kc,a.defineLocale=w,a.weekdaysShort=jc,a.normalizeUnits=z,a.relativeTimeThreshold=Ac;var je=a;return je}); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs index c64e01b4f..0f613ddc8 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs @@ -1,31 +1,520 @@ -{{! - 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 "device-opetations"}} -
- Operations -
-
- {{unit "mdm.unit.device.operation-bar"}} -
-{{/zone}} +{{unit "cdmf.unit.device.type.android.leaflet"}} +{{unit "cdmf.unit.lib.qrcode"}} +{{unit "cdmf.unit.device.type.android.qr-modal"}} +{{unit "cdmf.unit.device.type.android.operation-bar"}} + +{{#if deviceFound}} + {{#if isAuthorized}} + + {{#zone "device-details-header"}} +

+ Device {{deviceView.name}} + {{#if deviceView.model}} + + ( {{deviceView.vendor}} {{deviceView.model}} ) + + {{/if}} +

+ {{/zone}} + + {{#zone "overview-section"}} +
+
Device + Overview +
+ + + {{#if deviceView.deviceIdentifier}} + + + + + {{/if}} + {{#if deviceView.name}} + + + + + {{/if}} + {{#if deviceView.vendor}} + {{#if deviceView.model}} + + + + + {{/if}} + {{/if}} + {{#if deviceView.status}} + + + + + {{/if}} + {{#if deviceView.owner}} + + + + + {{/if}} + {{#if deviceView.ownership}} + + + + + {{/if}} + {{#if deviceView.imei}} + + + + + {{/if}} + {{#if deviceView.udid}} + + + + + {{/if}} + {{#if deviceView.osBuildDate}} + + + + + {{/if}} + {{#if deviceView.phoneNumber}} + + + + + {{/if}} + {{#if deviceView.lastUpdatedTime}} + + + + + {{/if}} + +
Device ID{{deviceView.deviceIdentifier}}
Name{{deviceView.name}}
Model{{deviceView.vendor}} {{deviceView.model}}
Status + {{#equal deviceView.status "ACTIVE"}}Active{{/equal}} + {{#equal deviceView.status "INACTIVE"}}Inactive{{/equal}} + {{#equal deviceView.status "BLOCKED"}}Blocked{{/equal}} + {{#equal deviceView.status "REMOVED"}}Removed{{/equal}} +
Owner{{deviceView.owner}}
Ownership{{deviceView.ownership}}
IMEI{{deviceView.imei}}
UDID{{deviceView.udid}}
Firmware Build + Date + {{deviceView.osBuildDate}}
Phone Number{{deviceView.phoneNumber}}
Last Update{{deviceView.lastUpdatedTime}}
+
+ {{/zone}} + + {{#zone "device-opetations"}} + {{#if deviceView.isNotRemoved}} +
+ Operations +
+
+ {{unit "cdmf.unit.device.operation-bar" device=deviceView backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}} +
+ {{/if}} + {{/zone}} + + + + {{#zone "device-detail-properties"}} +
+ +
+
+ + + {{#if deviceView.isNotWindows}} +
+ + +
+
+
+ + {{#equal deviceView.type "windows"}} +
+

Not + available yet

+
+ {{/equal}} + {{#if deviceView.deviceInfoAvailable}} + {{#if deviceView.BatteryLevel}} +
+
+
+
BATTERY
+
+
+
+ {{deviceView.BatteryLevel.value}} % +
+
+
+
+
+ {{/if}} + + + + + + + + + + + + + + + + {{#if deviceView.ramUsage}} +
+
+
+
RAM Usage
+
+
+
+ {{deviceView.ramUsage.value}} % +
+
+
+
+
+ {{/if}} + {{#if deviceView.internalMemory}} +
+
+
+
Local Storage
+
+
+
+
+ {{deviceView.internalMemory.usage}} % + + TOTAL OF {{deviceView.internalMemory.total}} GB + +
+
+
+
+
+ {{/if}} + {{#if deviceView.externalMemory}} +
+
+
+
External Storage
+
+
+
+ {{deviceView.externalMemory.usage}} % + + TOTAL OF {{deviceView.externalMemory.total}} GB + +
+
+
+
+
+ {{/if}} + {{else}} +
+

+ + Battery, RAM and Storage related information are not + available yet. +

+
+ {{/if}} +
+
+
+
+ {{/if}} + +
+ + +
+
+ + + + + + +
+
+
+
+
+
+ + +
+
+ {{#if deviceView.location}} +
+
+ {{else}} +
+

+ + Device location information is not available. +

+
+

+

+

+ {{/if}} +
+
+
+
+ + +
+
+ + + + + + +
+
+

+ + No applications found. +

+

Please try refreshing in a while.

+
+
+
+
+
+
+ + +
+
+ + + + + + +
+
+

+ + There are no operations, performed yet on this device. +

+
+
+ + + + + + + + + + +
Operation CodeStatusRequest created at
+
+
+
+
+
+
+ {{/zone}} + + {{else}} +

+ Permission Denied +

+
+ You are not authorized to view specified device in the system. + {{/if}} +{{else}} +

+ Device not found +

+
+ You have tried to access either a removed or non-existing device. +{{/if}} {{#zone "bottomJs"}} - {{js "js/device-detail.js"}} - - {{js "js/load-map.js"}} + {{#if isAuthorized}} + + + + + + + {{js "js/device-detail.js"}} + + {{js "js/load-map.js"}} + {{/if}} {{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js new file mode 100644 index 000000000..e12577afd --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js @@ -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; +} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json index 9eecd8f5b..688e93980 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json @@ -1,3 +1,3 @@ { - "version": "1.0.0" + "version": "1.0.0" } \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/TemperatureController.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/TemperatureController.png new file mode 100755 index 0000000000000000000000000000000000000000..e16b48d8eefcac064473f94464964b77fa41e23b GIT binary patch literal 234616 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

Device data may not have been updated. Please refresh to try again.

"; + $(".panel-body").append(defaultInnerHTML); + } + ); + } + + + $(".media.tab-responsive [data-toggle=tab]").on("shown.bs.tab", function (e) { + var activeTabPane = $(e.target).attr("href"); + var activeListGroupItem = $(".media .list-group-item.active"); + + $(activeTabPane).removeClass("visible-xs-block"); + $(activeTabPane).siblings().not(".arrow-left").addClass("visible-xs-block"); + positionArrow(activeListGroupItem); + }); + + $(".media.tab-responsive .tab-content").on("shown.bs.collapse", function (e) { + var thisParent = $(e.target).parent(); + var activeTabPaneCaret = thisParent.find('.caret-updown'); + var activeTabPaneCaretSiblings = thisParent.siblings().find('.caret-updown'); + + activeTabPaneCaret.removeClass("fw-up").addClass("fw-down"); + activeTabPaneCaretSiblings.removeClass("fw-down").addClass("fw-up"); + }); + + + $('.media.tab-responsive a[data-toggle="collapse"]').on('click',function(){ + var clickedPanel = $(this).attr('href'); + + if($(clickedPanel).hasClass('in')){ + $(clickedPanel).collapse('hide'); + }else{ + $(clickedPanel).collapse('show'); + } + }); + + + function positionArrow(selectedTab) { + var selectedTabHeight = $(selectedTab).innerHeight(); + var arrowPosition = 0; + var totalHeight = 0; + var arrow = $(".media .panel-group.tab-content .arrow-left"); + var parentHeight = $(arrow).parent().innerHeight(); + + + if($(selectedTab).prev().length){ + $(selectedTab).prevAll().each(function() { + totalHeight += $(this).innerHeight(); }); + arrowPosition = totalHeight + (selectedTabHeight / 2); + }else{ + arrowPosition = selectedTabHeight / 2; + } + + if(arrowPosition >= parentHeight){ + parentHeight = arrowPosition + 50; + $(arrow).siblings(".panel.active").height(parentHeight); + }else{ + $(arrow).parent().removeAttr("style"); + } + + $(arrow).css("top", arrowPosition - 10); } - $(document).ready(function () { - $(".panel-body").removeClass("hidden"); - $("#loading-content").remove(); - loadOperationsLog(); + $(document).ready(function() { + $(".device-detail-body").removeClass("hidden"); + $("#loading-content").remove(); + console.log("##### something went wrong here!" + deviceType) + loadOperationBar(deviceType); + loadOperationsLog(false); loadApplicationsList(); loadPolicyCompliance(); $("#refresh-policy").click(function () { - $('#policy-spinner').removeClass('hidden'); + $("#policy-spinner").removeClass("hidden"); loadPolicyCompliance(); }); $("#refresh-apps").click(function () { - $('#apps-spinner').removeClass('hidden'); + $("#apps-spinner").removeClass("hidden"); loadApplicationsList(); }); $("#refresh-operations").click(function () { - $('#operations-spinner').removeClass('hidden'); + $("#operations-spinner").removeClass("hidden"); loadOperationsLog(true); }); - loadOperationBar(deviceType); }); function loadOperationsLog(update) { @@ -68,105 +140,79 @@ operationTable.ajax.reload(false); return; } - operationTable = $(operationsLogTable) - .datatables_extended({ - serverSide: true, - processing: false, - searching: false, - ordering: false, - pageLength: 10, - order: [], - ajax: { - url: context + "/api/operation/paginate", - data: { - deviceId: deviceIdentifier, - deviceType: deviceType - }, - dataSrc: function (json) { - $("#operations-spinner").addClass( - "hidden"); - $("#operations-log-container").empty(); - return json.data; - } - }, - columnDefs: [ - {targets: 0, data: "code"}, - { - targets: 1, - data: "status", - render: function (status) { - var html; - switch (status) { - case "COMPLETED" : - html = - " Completed"; - break; - case "PENDING" : - html = - " Pending"; - break; - case "ERROR" : - html = - " Error"; - break; - case "IN_PROGRESS" : - html = - " In Progress"; - break; - case "REPEATED" : - html = - " Repeated"; - break; - } - return html; - } - }, - { - targets: 2, - data: "createdTimeStamp", - render: function (date) { - var value = String(date); - return value.slice(0, 16); - } - } - ], - "createdRow": function (row, data) { - $(row).attr("data-type", "selectable"); - $(row).attr("data-id", data["id"]); - $.each($("td", row), - function (colIndex) { - switch (colIndex) { - case 1: - $(this).attr( - "data-grid-label", - "Code"); - $(this).attr( - "data-display", - data["code"]); - break; - case 2: - $(this).attr( - "data-grid-label", - "Status"); - $(this).attr( - "data-display", - data["status"]); - break; - case 3: - $(this).attr( - "data-grid-label", - "Created Timestamp"); - $(this).attr( - "data-display", - data["createdTimeStamp"]); - break; - } - } - ); - } - }); + operationTable = $(operationsLogTable).datatables_extended({ + serverSide: true, + processing: false, + searching: false, + ordering: false, + pageLength : 10, + order: [], + ajax: { + url: "/emm/api/operation/paginate", + data: {deviceId : deviceIdentifier, deviceType: deviceType}, + dataSrc: function (json) { + $("#operations-spinner").addClass("hidden"); + $("#operations-log-container").empty(); + return json.data; + } + }, + columnDefs: [ + {targets: 0, data: "code" }, + {targets: 1, data: "status", render: + function (status) { + var html; + switch (status) { + case "COMPLETED" : + html = " Completed"; + break; + case "PENDING" : + html = " Pending"; + break; + case "ERROR" : + html = " Error"; + break; + case "IN_PROGRESS" : + html = " In Progress"; + break; + case "REPEATED" : + html = " Repeated"; + break; + } + return html; + } + }, + {targets: 2, data: "createdTimeStamp", render: + function (date) { + var value = String(date); + return value.slice(0, 16); + } + } + ], + "createdRow": function(row, data) { + $(row).attr("data-type", "selectable"); + $(row).attr("data-id", data["id"]); + $.each($("td", row), + function(colIndex) { + switch(colIndex) { + case 1: + $(this).attr("data-grid-label", "Code"); + $(this).attr("data-display", data["code"]); + break; + case 2: + $(this).attr("data-grid-label", "Status"); + $(this).attr("data-display", data["status"]); + break; + case 3: + $(this).attr("data-grid-label", "Created Timestamp"); + $(this).attr("data-display", data["createdTimeStamp"]); + break; + } + } + ); + } + }); } - + function loadApplicationsList() { var applicationsList = $("#applications-list"); var applicationListingTemplate = applicationsList.attr("src"); @@ -195,17 +241,17 @@ $("#applications-list-container").html(content); } else { $("#applications-list-container"). - html("

"); + html("

No applications found.

" + + "

Please try refreshing the list in a while.

"); } } }, // error-callback function () { $("#applications-list-container"). - html("

 Loading application list " + - "was not successful. please try refreshing the list in a while.

"); - }); + html("

 Loading application list " + + "was not successful. please try refreshing the list in a while.

"); + }); }); } @@ -257,16 +303,16 @@ } } else { $("#policy-list-container"). - html("

This device " + - "has no policy applied.

"); + html("

This device " + + "has no policy applied.

"); } } }, // error-callback function () { $("#policy-list-container"). - html("

Loading policy compliance related data " + - "was not successful. please try refreshing data in a while.

"); + html("

Loading policy compliance related data " + + "was not successful. please try refreshing data in a while.

"); } ); } @@ -275,11 +321,12 @@ // error-callback function () { $("#policy-list-container"). - html("

Loading policy compliance related data " + - "was not successful. please try refreshing data in a while.

"); + html("

Loading policy compliance related data " + + "was not successful. please try refreshing data in a while.

"); } ); } ); } + }()); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/load-map.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/load-map.js old mode 100644 new mode 100755 index a2a322f8c..895f75b94 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/load-map.js +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/load-map.js @@ -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, * 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 + * 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 + * "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. */ -$(document).ready(function () { - if (document.getElementById('device-location')) { - loadMap(); +var map; + +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 = "©
OpenStreetMap 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); - } else { - $("#device-location").hide(); - $("#map-error").show(); +$(document).ready(function () { + $("a[data-toggle='tab']").on("shown.bs.tab", function() { + var url = $(this).prop("href"); + var hash = url.substring(url.indexOf("#") + 1); + + if (hash == "device_location") { + if (!map) { + loadLeafletMap(); + } } - - } - - google.maps.event.addDomListener(window, 'load', initialize); -} \ No newline at end of file + }); +}); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs new file mode 100755 index 000000000..3b55136af --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/operations-log.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/operations-log.hbs new file mode 100755 index 000000000..cc5db5117 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/operations-log.hbs @@ -0,0 +1,24 @@ + + + + + + + + + + {{#each operations}} + + + + + + {{/each}} +
+ +
Operation CodeStatusRequest created at
{{code}} + {{#equal status "COMPLETED"}} Completed{{/equal}} + {{#equal status "PENDING"}} Pending{{/equal}} + {{#equal status "ERROR"}} Error{{/equal}} + {{#equal status "IN_PROGRESS"}} In Progress{{/equal}} + {{createdTimeStamp}}
\ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs new file mode 100755 index 000000000..d20ca7a9c --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs @@ -0,0 +1,79 @@ +
+ +
+
+ + {{#equal deviceType "android"}} + + {{/equal}} + {{#equal deviceType "ios"}} + + {{/equal}} + {{#equal deviceType "windows"}} + + {{/equal}} + + +

{{policy.policyName}}

+ {{deviceType}} +
+
+
+
+
+
+ Ownership Type : {{policy.ownershipType}} +
+
+
+
+ Compliance Type : {{policy.compliance}} +
+
+
+
+ Compliance : + {{#equal compliance "COMPLIANT"}} + Compliant + {{/equal}} + {{#equal compliance "NON-COMPLIANT"}} + Not Compliant + {{/equal}} +
+
+
+
+ +
+
+
+ + + + + + + + + {{#each complianceFeatures}} + + + + + {{/each}} +
+ +
FeatureCompliance
{{featureCode}} + {{#equal compliance true}} Compliant{{/equal}} + {{#equal compliance false}} Not Compliant{{/equal}} +
\ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs new file mode 100644 index 000000000..9385d60d5 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs @@ -0,0 +1,6 @@ +{{#zone "topLibCss"}} + +{{/zone}} +{{#zone "bottomJs"}} + +{{/zone}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json new file mode 100644 index 000000000..9eecd8f5b --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css new file mode 100644 index 000000000..c161c3134 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css @@ -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; + } diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers-2x.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cf7f9efef65d2e021f382f47ef50d51d51a0df GIT binary patch literal 2898 zcmV-Y3$65tP)?AfzNU07Ji0>J$I zyy*J%>jA&t|KY2zz8cz!dNXf;;xfzYhMv6otBB#?C3IqawZEtV)Ws@UgL!F(S zVuQi(g3)MfC@U-DvZ*wkrlzJCm&-NacDq09>gq~l5}T2sGiS~m&}cNz)Ya8VDT)#l zNC*+dVzFibkV>Wf6h#RdO+pCebUI^xzyIT7$BqeRmmotYPo7ln-o5)Lb#-+Wt4tB1 zL?WS%$KwYGA#wnqC~8q6kz5js#Q~u?=I7@{PN#EXe0=;bLfDnk&?-~(di{aQ%F2}6 z@Otq)pTDxQa)9Ug-O2u^X?k2HlU<@|dP!(bpU+2oJf2JG*tMadci(-tUaeLiZfIyI zNXL}*ZH>iZbu7y^5kgWvyHOOC5Q#)KsZ{C&ASge}vh={fz(ODpIRDBkuQ-zCz2DG@ z6DQ<4o$iRqWHRj7u|x2JWLdT}9*;l4^Za(9F#tf*^mh`8#Vh4?g(dDVl2B@enN;WQv=CFQPhf9EWRp{ zNIXJgB9Vy5;c(oXn3y=%-rnw`&Ye4V)Mzv|l$VzaHo|e-_E;?T1kdxO*)=`2Xqpa6 zrP7NG!+a++W^!^;hrf`@B%%6jB1%hvEb zFJ>4fL{U`QO=E0qtk7<^KSgzPbPxbBg+g)p>8GEbC@wBeYV3ZdJSwGQ*R5N(WS@NU zNkupuZUrD^T3cIt2q6ce(P*R7=`5L>n_JN7bW0RVDKOzL<*owE|)*| z=9_Ph+_P37C(~njkHQ666opafyd+FS(c>%d`Sp- z`JH#(8C@+SS|9N2v(JVZh6&ubaf8_Hc6w-N2$PeOXliOgb#?V4H?UqKBO|ccY?z;) zhfF4;&1N%EsZ;@u*D=RA~Dk?%tOA8c=4VUv}hGC8|TCMgUDwV34 zrs<>$B{w%0TCEl`nGC^T5K~iA2m}Ji&(FuUZQHiQ%*4b5KL7l4_AkZ2nK`j`Fyy2 z`!Kkw^p=FJ44nUmup2m!VRr@Z^(ELa9_@6(h;y^ZEL^ySv4Ui;H!u96I#v zx8Iulet&Oyc{weSNRq-+EEYqhQlX@z1T!-;2nK`jdc6PurBeA&W*iO&zWVAbghCjHZwG}lrH7Pr5d3kyIv(G*o9v>e!1DK_0`Y=TZ!5eS9AzNHr{1t#-0$?jED{U<; zEss+aCE6$%&+`}>8iL#H2FGzIEiJ{qefu&t77B&X)6;`sFbIZWU@#a^TU(oQjS@oG zzP`RIKA*1%cXsNx<#PF3ufP8K%7z@u%gc+I&1Px31}-ctz-F@{6beBs7DKPs-EPOq$_fe#3sbV|KBl0tu@My&6)E$_Vlnjh z_hWK$5)z37)z#HdDwY2N(B9V8Hu->|?(XjA0i48L4zVl?uh+Ylz+^I^s;VmG;!MXb z0Ze&7gb<95j$&|d5UU-m)9D}*t*wS70KWlns;#Y!r7m2!Py^tP0KT6r;ljcKTrL+D z7Z-)F0KkLns;#XB01OQc31!LydE|0Aj7DRsDR~{hPnqiK>c8#Sv12d8FgeLeNu^Sh zm6bsvksuTb!RPZK8jWJ-&Yc@B++^&Uo}L!W6qaRSx7%T}*^o#iP*qh0qtOVNY~vSW zj^pG`r&CXLbaW&DENHb_w??CRe8ULbna3WF2RCotL{3f)_U_#awOXAj1kq>|cDo$_ z(Ae0BoSdZnwx&QJfNR&Tt#z7SuTQ&vr>Cd;T`pHCA*77z=;&wz@E(9lu~_VEYHG@t z%jK1+5`@EH3=a>lRcbbyk)NNRveI-~T3SMHZ|_=X)zs9aos!XLblPUKO-7?pGXNie zmnlLBEEbClz$%C6l9G}ud-m*UVHjq^dBO8M{C+h5~JRXF@VdUrMqot)qFkC~S5c>N1u(Y%Ug+c+nUXQ%Iyp%EFaCp$+a7a0hs{-&P zfS0XSYjO^)Gxi*S-vij0latfi)YMd-lasS6UE@YZMj(V;8!#oMkwhXfXSdsj78Vv- z0n7mSxz%d@`~BrMJPNj0EQJ8N02~7lEh{Ut84QM$k3;F$C4ebO<@ft9kByDh0N4iL z41i9n)jFT7Y}(rgi^bA>H%SA-Fr)SL^)ZD)VM-N~j9maSVG00XadFXSv)Pssi9{WM z0RYFWR%?H%7(v%57K?=ea2&vI0musq3NAM`Hr9&8;tgM42_cxAoW$7J7 zXf#RRbXT>?E&v%b1;9T6{LE^#3O>ls>W z1%Om4^+QKT$He~%>hA6?ZftBk<8ry0&1N$IV0CpB>2x|AjYe;Fc6L7h&!E1(zLV9} z)u*ghYw33S?Ck9Fgo=++wEZ(=B3H#x{g#TB~MOH_MSa^ zc4|)`Ns{=6hK6>J$8)^2w3OYbQA&$)x!mgjU^1EhAcSN$>dVW^nk>r$u~@866vh0G zpj)?YHF`XrckFh1+18Bm`FyRSC@qvyBLEOW)(i&25YO}DTWx1%W}eBi{Nw42!K@e0==o zxpU{{$nD#=-|~9BZwP{5+EOON+S*#Ps;cz>Ufv`?=QwW6Xf%ciA<9N!VPPScOeTM2 z-EQ}HPN#E85Cpv-DvILC<#KQ7y6yx(c7Xr@(RKZxs;V`FkY$!-7Yf4T$B&Ed-o1N< zZE9+oefaR<2dPx*`JqFH463TWsVGVi0KW&o*2Qa@R;_7TrK+m4y}iAba5&toD9UGq zQi`6Qp4W6;?^|76J$~%iG2-=lUxD$@N+y%IckdoGo6Q3Z!?d42e}0ifqtTO;(yIXc zOG`@#hr=i-DM4#%D-IkuurEL+lfmHNAXZjZ(A?Y%i^T!}aYD$4ti$2>-r;b#3kZ@&v(P5LT;o-DhrY4v|QNvMf8u^L+b-3m2Y|J9qB10=NpGer06^@pv5N<>feX zg(&*Cs5aQjE#+9YHA8TpAUi{Y=lqVzkffYD9SGYK9?lv`KH@j6va9K z-w1+$Kp+s{IIgtNqjWlrr%#_E5C{MOMn*5}%e7uUP19CmvDon3+#Ch)u_Q@< z7GnSFJrYHc0C=AeBKmy3#j2{RmV%bcAKzn;9E(O zHU-}Cg%w4y9Ke@Gqw#Ps7_=4_7gud(m(6BpB9X|WY&JU%;8RJG=C`xk_0J%RVjCgk zE1S)hsjI7NVHm~;0F+WS9*+-BPfwdErJa%_gh876I}?PQWpJLz%)x;}A1s3+;FijJ6nrW+Pl4)+EiN1Z`Z};D5lx0BtvZnmddk_DqORVPG3@A z|MUAQ5d8CyG`n3U%W5w|$1lmUI>14Eit;<8S?vK{s*?{-Ss+T)u_t92ZJTA8?H?iF zR>;v&x7=gkU3dZlw!Q;_2%o}};F13pC@6@Z$Rj?JWwli(vf7`Uv_M3vmPaI6ZRyg? zwr>!?ft(K4bi>Np0r=D2_w3@8-GdNOt_Q!(r!eStxP|AMG^4f1MRn*m6B>vlqxDrZ z^e+Su+;WdVxV9T!t{sF|>)yKqtLo0f%X=)K?{|}VWzP^q==9)`cMLdQ#3#~>wy4qc zkwZdrRrSA+s#>ZLK#*s&!Gi5)Vb$&-com)GuwvIBL{{}fScMrv%gqq1Gu;L{wqS=D zA}ae~dCefKx&Wue^ipzWJZ7j zXOrbS%~*l+4B-|15TG$lD8hF1;}EmhTVCA{%ItO^Ul121NsW&?6bK%9NRoQ!5CUZB zO|YcG$Vgw>H3Xqp1%I_^QV@c+R-jF?y|mH7qa2-(C z0ugQ8pDRw<4{n()NIJyegIV${HQGfO5|ixWN;7!nv;%PvB8%H$$MGRJ`}fQ6#kbes z>h&MMcTZrm#Ts3`fhrQak0q-hmbwneh)8_kw~}aV#&vv&0DQ zTMfe^L}O-h6u4_rJ&^vk4ik*_)7p25=@J%{bu-Se@_xIv$v4hVrK*YPiWBP+oJ5Ir zr3moEi=@SPav_d;H&n2Pu<`*W>zjWJNOw_DD_r~j28`tsSACjsxMemoPU@AB>{HW| ztXJMqrYlUW(>mdwMq$Dp@GE$mom`;n2e&N-yI52)$YiOCq+5IXJdE|zd*KS>5aSRb z&c)UdVb4DKNOFD!$C<8h{hnqg;riV@!i3$}=UGTOZpIU)>0{iquGsT|d?Y#Yne-5SPQrxRe+$>w;#JvMh{Q|>l$k-X z*)S}8wwajRf-*gjo*13Ddi{I2mrq!J6XOcRiG#RlA-3m(|8_HzBcDkRaoI^2U;8Bj zLQ1_>oIw~*j8y0k)gb88Fw%SV$TO(&Ik0F^e6@= zLHw>E1o&f_sL`n+G87&T9yqi}E?j2>(j)xilP|{{#Ely_L7r5{ctW;yF>b25Js}>`iO75R6BpgcE9|%%7ZRzD#1@K!W4(uK@LfLHB`NAX3qZf^YwSvp;i9@cqQ*)vIMW(V~k@y^(GFR zk?hjYBY8Jfi-jYuvcKGw#YY%vDItj}3 z7Q|uPsUF8INEZfRw#oQYFK+5{*aoL3O>O}4)g`9<@EtcFTw-*g{8$|m2r9KG(G1~; z5e{y}MqI4=Zwu&dpd`7ElAEf=5>(R5d?a55G39=D1mdJp{meN=dkKNp1|7_pf2kQ< za(hP&%AULsujtTO-x4$UA&=)46DW!dAjWf}ei8-FW91wTuZPe2cpnffC0y4@sv2)Mw;_ci|bZ`gPMKR{MfO zKlGq*A1TRFnjioxLQU_S-3#-w^pgr|akh3F*-@`3{jraTr2X0$DxU9J6 zonZ#3S7xR6ObDnNWJ8&AnybbQ=UC0Wae1hQ7p*{c(l)9RmncZ49Yhd#w`%) zJK~gOp5Ur+-DQnt#)LdUN8^=@2-enu2QF9ys>*XI-S-6QHw&K;_-m@Idn%23!X5>r z@k-;CZ74HNf_oumFy8=wOzyrX$n%YiOPc-`SB%=YvR_CYcdtRU%#lH0jzd^#(k@-di-hx~al>I_R&DnN#rm07DYJ+aF!NQPu( zbl)m=2e-pbn6kGOq%ozxMkhXFRl&@1RiUgum3Vj1u#)6jsv%5j<*IR6^t$emDShpN z7o|>QRl&?k@XAh_XN1|9@o5QNcLkjz8A*rcE*n}g+c*p5 z7~m;%`pNaTgO1TTk`ZiZ=Bn}0^D(8ryf5D9p^RE?AC-e7yN3;(S*bnf{JGme)u3~( zS$ORcqqFvg`t|$f)g;O&W!6%aW^l!m_k7b2$D02GPgh9AD1`()~cZ8Oj2AQyau(pP%|J;>TN`^P;r=4@@A|s=UjbU%Sr& zOCYBon0Iw=*%^D@^5cwU6_3(-JaBP001cn1^@s6z>|W`000J>NklgF+#9zZY7a#;@J(5X0e&McXK2n7+jhR}<0i-1U5t`>D@ zJSJ*^swjdwq0keUf9!BETXZhVyjqS4&z|?2HdJnOU-HYF_xSyu=XsCkdtVv=(53>u zME@3F*5J;OHwJNJdWK(ivQ??rr&t7M)1yRas=d_yYH>g+p#{( zm+NoyW%|8bNfUkAMrabri(FY#Dqr5%zhZA&e^iALHXiJOFYA7Qt##L_a?_z6SW{&J zVeyp#G&snW>SO{*%d9CGVM}xic~V`MU$)*JU1Nbw2YX?ywi}|VZ4g;$g)p^+DoLHR zZ^Zr$S_=f^oU`+!4K^?NsU;H{;bhhex#H7(!s52U&FJ}OHQf-VvVd?Btj2MhF|zQI z%l~jBr~6T7^_WIHC1>8j&bv`c18g|Z3*l-jgeoml1{oh++Y75JI)RgU>LEY<%)C)X zI2rZ2kb>s^4cZuYeq3!A}DS`X~>Nd;+A$4e;ZwyD<1@2!8$ZKJ3w%!6)+sCALy+bKwyk zqKCS6qEGWmJ)97b-QXY|`<0lS5THkEtGgjE>ojOvuftfM&Ugd-rQg9C+|FdGM)HXs z(IxsA$&r(xg_j^4=hC;>s;1UF*Wp1I-2~sEF zZYgb?&`4bM1qjM*hR`yr3qJ(;L>Kj2XpBUy+)t((6z;bIr@-ihFNVAl4<#?{TWIaQ zIi>;YjXS_iIfNb?!N1t-!Y6vZvW5ZXE{%l7imzV9NvV4nf#G`Pcex;#@}?EINwsk7 z>UC=SlJC*b5a>-mgHP%q2+qF;cbNx ztCV@{s&fPsSt#;i@#G-m$as&$gLaG}ebOrtS5*22&glbhMH_fz8(~qVVN!VIVCKzg z1$U9^93(E%Ur9v_R*h#!t)Ce+#)+m(q^zCq%g&L-!E zC&et9WrT(49pl0S`?=DK7=`+;`CB!wP3ta97b)XdJ8K=@`DXOk0Q0};7zNT!`k4t@ z+)=9S)4p(jEGm5!qq)PDTmXiw3qDM19|fiylc@LtiQ=}Kfb#w&ckv^7tBj;cfwtY$q?IdliYlg zqh@4;IyW)OFPQPw4z|JsAEb7`+@yA@Q8SXQT#;upV`QNJ59Bg5m(jci3`0T4X-&^GU6)x7$Vi0XMWB(2hrdK^!hq0 zt!bDg$Hh)-9L62h`&{0PBf%7vM>69o`k4~kx^Wc)?lG!}=WgV2x-rq?HN#jMr^B0; p5zMeb2q5MEX5{g&Aa%N&e*pr!t%ZZ}>w*9P002ovPDHLkV1gpUS8xCT literal 0 HcmV?d00001 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-shadow.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e773c715a9b508ebea055c4bb4b0a2ad7f6e52 GIT binary patch literal 797 zcmV+&1LFLNP)oNwbRQ6Eq$4M3RDU@$ z<4cV9zWLV=bA&uX9wCpA{{f^4$D#k>GcX53-UQqf>_LzMU@frMz|MwbfQGbY0?ccG zBj_wh0?6Tv;HWR0`x;m^Bm<;sCm_85SGspFBn6|A!tDh$nR`wGorGkyL7j?F3#OJq zIswLIz;iF7f|LMnF(pXPAY*GYpsw%&e_WjlnV`C$6@#Q7GZu1$Q8>&p8=(iJj8o|T~0u%hM*Yg_d(Av{WS$h&pM%nlEAonVL0;DkN|xc zn)9F+aMDk#VtAMb0c=kIb1pU-$e4$3pwo&qVh(Umlw3_IU_dFcFe(In6*x}D4LHLhFZ4N=V2ZR+>XHU5D&uY$npJ7Eu?{iAK>UxC?4uyg4+iD z!nst**H%2zhOBxc7C7Tv{f^`%hqT1KpU@Vf6+C2|bGaR(1~TU5D-1;&HXT~PMc2Lu z{Q%^i6vvox&EMFT7I_)R$xq1779I8kE@?|D*cLWnP0a@a)xJA`o*^$^V(yN)b`kV7 z=o@jbFF4j{KeuQhi;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;it;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=!t.PointerEvent&&t.MSPointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&(m||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;ni||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-(1/0),o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator, +transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-(1/0));for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||in;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=this._getTileSize(),o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(it.max.x||nt.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;e.detectRetina&&o.Browser.retina?i.width=i.height=2*n:i.width=i.height=n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i="shadow"===e?o.point(n.shadowAnchor||n.iconAnchor):o.point(n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){return this._icon&&this._setPos(this._map.latLngToLayerPoint(this._latlng).round()),this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;is?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),"off"in t&&t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,i.dashArray?t.dashStyle=o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):t.dashStyle="",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color),t.lineCap&&(this._ctx.lineCap=t.lineCap),t.lineJoin&&(this._ctx.lineJoin=t.lineJoin)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill(e.fillRule||"evenodd")),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click dblclick contextmenu",this._fireMouseEvent,this))},_fireMouseEvent:function(t){this._containsPoint(t.layerPoint)&&this.fire(t.type,t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.xe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+ei;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!t.shiftKey&&(1===t.which||1===t.button||t.touches)&&(o.DomEvent.stopPropagation(t),!o.Draggable._disabled&&(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],"function"==typeof n?s[a]=n.bind(h):s[a]=n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n); +case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs new file mode 100644 index 000000000..8d7e6bc16 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs @@ -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}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json new file mode 100644 index 000000000..8fcf779d1 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json @@ -0,0 +1,8 @@ +{ + "version": "1.0.0", + "pushedUris": [ + "/policies", + "/policy/{+any}" + ], + "extends": "cdmf.unit.device.operation-mod" +} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js new file mode 100644 index 000000000..b6b0795ca --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js @@ -0,0 +1,1781 @@ +/* + * 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 operationModule = function () { + var publicMethods = {}; + var privateMethods = {}; + + // Constants to define platform types available + var platformTypeConstants = { + "ANDROID": "android", + "IOS": "ios", + "WINDOWS": "windows" + }; + + // Constants to define operation types available + var operationTypeConstants = { + "PROFILE": "profile", + "CONFIG": "config", + "COMMAND": "command" + }; + + // Constants to define Android Operation Constants + var androidOperationConstants = { + "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", + "VPN_OPERATION_CODE": "VPN", + "CAMERA_OPERATION_CODE": "CAMERA", + "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE", + "WIFI_OPERATION_CODE": "WIFI", + "WIPE_OPERATION_CODE": "WIPE_DATA", + "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", + "WORK_PROFILE_CODE": "WORK_PROFILE", + "CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE", + "LOCK_OPERATION_CODE": "DEVICE_LOCK", + "UPGRADE_FIRMWARE": "UPGRADE_FIRMWARE", + "DISALLOW_ADJUST_VOLUME": "DISALLOW_ADJUST_VOLUME", + "DISALLOW_CONFIG_BLUETOOTH": "DISALLOW_CONFIG_BLUETOOTH", + "DISALLOW_CONFIG_CELL_BROADCASTS": "DISALLOW_CONFIG_CELL_BROADCASTS", + "DISALLOW_CONFIG_CREDENTIALS": "DISALLOW_CONFIG_CREDENTIALS", + "DISALLOW_CONFIG_MOBILE_NETWORKS": "DISALLOW_CONFIG_MOBILE_NETWORKS", + "DISALLOW_CONFIG_TETHERING": "DISALLOW_CONFIG_TETHERING", + "DISALLOW_CONFIG_VPN": "DISALLOW_CONFIG_VPN", + "DISALLOW_CONFIG_WIFI": "DISALLOW_CONFIG_WIFI", + "DISALLOW_APPS_CONTROL": "DISALLOW_APPS_CONTROL", + "DISALLOW_CREATE_WINDOWS": "DISALLOW_CREATE_WINDOWS", + "DISALLOW_CROSS_PROFILE_COPY_PASTE": "DISALLOW_CROSS_PROFILE_COPY_PASTE", + "DISALLOW_DEBUGGING_FEATURES": "DISALLOW_DEBUGGING_FEATURES", + "DISALLOW_FACTORY_RESET": "DISALLOW_FACTORY_RESET", + "DISALLOW_ADD_USER": "DISALLOW_ADD_USER", + "DISALLOW_INSTALL_APPS": "DISALLOW_INSTALL_APPS", + "DISALLOW_INSTALL_UNKNOWN_SOURCES": "DISALLOW_INSTALL_UNKNOWN_SOURCES", + "DISALLOW_MODIFY_ACCOUNTS": "DISALLOW_MODIFY_ACCOUNTS", + "DISALLOW_MOUNT_PHYSICAL_MEDIA": "DISALLOW_MOUNT_PHYSICAL_MEDIA", + "DISALLOW_NETWORK_RESET": "DISALLOW_NETWORK_RESET", + "DISALLOW_OUTGOING_BEAM": "DISALLOW_OUTGOING_BEAM", + "DISALLOW_OUTGOING_CALLS": "DISALLOW_OUTGOING_CALLS", + "DISALLOW_REMOVE_USER": "DISALLOW_REMOVE_USER", + "DISALLOW_SAFE_BOOT": "DISALLOW_SAFE_BOOT", + "DISALLOW_SHARE_LOCATION": "DISALLOW_SHARE_LOCATION", + "DISALLOW_SMS": "DISALLOW_SMS", + "DISALLOW_UNINSTALL_APPS": "DISALLOW_UNINSTALL_APPS", + "DISALLOW_UNMUTE_MICROPHONE": "DISALLOW_UNMUTE_MICROPHONE", + "DISALLOW_USB_FILE_TRANSFER": "DISALLOW_USB_FILE_TRANSFER", + "ALLOW_PARENT_PROFILE_APP_LINKING": "ALLOW_PARENT_PROFILE_APP_LINKING", + "ENSURE_VERIFY_APPS": "ENSURE_VERIFY_APPS", + "AUTO_TIME": "AUTO_TIME", + "SET_SCREEN_CAPTURE_DISABLED": "SET_SCREEN_CAPTURE_DISABLED", + "SET_STATUS_BAR_DISABLED": "SET_STATUS_BAR_DISABLED", + "APPLICATION_OPERATION_CODE": "APP-RESTRICTION", + "SYSTEM_UPDATE_POLICY_CODE": "SYSTEM_UPDATE_POLICY", + "KIOSK_APPS_CODE": "KIOSK_APPS" + }; + + // Constants to define Windows Operation Constants + var windowsOperationConstants = { + "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", + "CAMERA_OPERATION_CODE": "CAMERA", + "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE", + "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", + "CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE" + }; + + // Constants to define iOS Operation Constants + var iosOperationConstants = { + "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", + "RESTRICTIONS_OPERATION_CODE": "RESTRICTION", + "VPN_OPERATION_CODE": "VPN", + "WIFI_OPERATION_CODE": "WIFI", + "EMAIL_OPERATION_CODE": "EMAIL", + "AIRPLAY_OPERATION_CODE": "AIR_PLAY", + "LDAP_OPERATION_CODE": "LDAP", + "DOMAIN_OPERATION_CODE": "DOMAIN", + "CALENDAR_OPERATION_CODE": "CALDAV", + "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", + "CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION", + "APN_OPERATION_CODE": "APN", + "CELLULAR_OPERATION_CODE": "CELLULAR", + "PER_APP_VPN_OPERATION_CODE": "PER_APP_VPN", + "APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE": "APP_TO_PER_APP_VPN_MAPPING" + }; + + publicMethods.getIOSServiceEndpoint = function (operationCode) { + var featureMap = { + "DEVICE_LOCK": "lock", + "LOCATION": "location", + "ENTERPRISE_WIPE": "enterprise-wipe", + "NOTIFICATION": "notification", + "RING": "ring" + }; + return "/api/device-mgt/ios/v1.0/admin/devices/" + featureMap[operationCode]; + }; + + /** + * Convert the ios platform specific code to the generic payload. + * TODO: think of the possibility to follow a pattern to the key name (namespace?) + * @param operationCode + * @param operationPayload + * @returns {{}} + */ + privateMethods.generateGenericPayloadFromIOSPayload = function (operationCode, operationPayload) { + var payload = {}; + operationPayload = JSON.parse(operationPayload); + switch (operationCode) { + case iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: + payload = { + "passcodePolicyForcePIN": operationPayload["forcePIN"], + "passcodePolicyAllowSimple": operationPayload["allowSimple"], + "passcodePolicyRequireAlphanumeric": operationPayload["requireAlphanumeric"], + "passcodePolicyMinLength": operationPayload["minLength"], + "passcodePolicyMinComplexChars": operationPayload["minComplexChars"], + "passcodePolicyMaxPasscodeAgeInDays": operationPayload["maxPINAgeInDays"], + "passcodePolicyPasscodeHistory": operationPayload["pinHistory"], + "passcodePolicyMaxAutoLock": operationPayload["maxInactivity"], + "passcodePolicyGracePeriod": operationPayload["maxGracePeriod"], + "passcodePolicyMaxFailedAttempts": operationPayload["maxFailedAttempts"] + }; + break; + case iosOperationConstants["DOMAIN_OPERATION_CODE"]: + payload = { + "emailDomains": operationPayload["emailDomains"], + "webDomains": operationPayload["webDomains"] + }; + break; + case iosOperationConstants["RESTRICTIONS_OPERATION_CODE"]: + payload = { + "restrictionsAllowAccountModification": operationPayload["allowAccountModification"], + "restrictionsAllowAddingGameCenterFriends": operationPayload["allowAddingGameCenterFriends"], + "restrictionsAllowAirDrop": operationPayload["allowAirDrop"], + "restrictionsAllowAppCellularDataModification": operationPayload["allowAppCellularDataModification"], + "restrictionsAllowAppInstallation": operationPayload["allowAppInstallation"], + "restrictionsAllowAppRemoval": operationPayload["allowAppRemoval"], + "restrictionsAllowAssistant": operationPayload["allowAssistant"], + "restrictionsAllowAssistantUserGeneratedContent": operationPayload["allowAssistantUserGeneratedContent"], + "restrictionsAllowAssistantWhileLocked": operationPayload["allowAssistantWhileLocked"], + "restrictionsAllowBookstore": operationPayload["allowBookstore"], + "restrictionsAllowBookstoreErotica": operationPayload["allowBookstoreErotica"], + "restrictionsAllowCamera": operationPayload["allowCamera"], + "restrictionsAllowChat": operationPayload["allowChat"], + "restrictionsAllowCloudBackup": operationPayload["allowCloudBackup"], + "restrictionsAllowCloudDocumentSync": operationPayload["allowCloudDocumentSync"], + "restrictionsAllowCloudKeychainSync": operationPayload["allowCloudKeychainSync"], + "restrictionsAllowDiagnosticSubmission": operationPayload["allowDiagnosticSubmission"], + "restrictionsAllowExplicitContent": operationPayload["allowExplicitContent"], + "restrictionsAllowFindMyFriendsModification": operationPayload["allowFindMyFriendsModification"], + "restrictionsAllowFingerprintForUnlock": operationPayload["allowFingerprintForUnlock"], + "restrictionsAllowGameCenter": operationPayload["allowGameCenter"], + "restrictionsAllowGlobalBackgroundFetchWhenRoaming": operationPayload["allowGlobalBackgroundFetchWhenRoaming"], + "restrictionsAllowInAppPurchases": operationPayload["allowInAppPurchases"], + "restrictionsAllowLockScreenControlCenter": operationPayload["allowLockScreenControlCenter"], + "restrictionsAllowHostPairing": operationPayload["allowHostPairing"], + "restrictionsAllowLockScreenNotificationsView": operationPayload["allowLockScreenNotificationsView"], + "restrictionsAllowLockScreenTodayView": operationPayload["allowLockScreenTodayView"], + "restrictionsAllowMultiplayerGaming": operationPayload["allowMultiplayerGaming"], + "restrictionsAllowOpenFromManagedToUnmanaged": operationPayload["allowOpenFromManagedToUnmanaged"], + "restrictionsAllowOpenFromUnmanagedToManaged": operationPayload["allowOpenFromUnmanagedToManaged"], + "restrictionsAllowOTAPKIUpdates": operationPayload["allowOTAPKIUpdates"], + "restrictionsAllowPassbookWhileLocked": operationPayload["allowPassbookWhileLocked"], + "restrictionsAllowPhotoStream": operationPayload["allowPhotoStream"], + "restrictionsAllowSafari": operationPayload["allowSafari"], + "restrictionsSafariAllowAutoFill": operationPayload["safariAllowAutoFill"], + "restrictionsSafariForceFraudWarning": operationPayload["safariForceFraudWarning"], + "restrictionsSafariAllowJavaScript": operationPayload["safariAllowJavaScript"], + "restrictionsSafariAllowPopups": operationPayload["safariAllowPopups"], + "restrictionsAllowScreenShot": operationPayload["allowScreenShot"], + "restrictionsAllowSharedStream": operationPayload["allowSharedStream"], + "restrictionsAllowUIConfigurationProfileInstallation": operationPayload["allowUIConfigurationProfileInstallation"], + "restrictionsAllowUntrustedTLSPrompt": operationPayload["allowUntrustedTLSPrompt"], + "restrictionsAllowVideoConferencing": operationPayload["allowVideoConferencing"], + "restrictionsAllowVoiceDialing": operationPayload["allowVoiceDialing"], + "restrictionsAllowYouTube": operationPayload["allowYouTube"], + "restrictionsAllowITunes": operationPayload["allowiTunes"], + "restrictionsForceAssistantProfanityFilter": operationPayload["forceAssistantProfanityFilter"], + "restrictionsForceEncryptedBackup": operationPayload["forceEncryptedBackup"], + "restrictionsForceITunesStorePasswordEntry": operationPayload["forceITunesStorePasswordEntry"], + "restrictionsForceLimitAdTracking": operationPayload["forceLimitAdTracking"], + "restrictionsForceAirPlayOutgoingRequestsPairingPassword": operationPayload["forceAirPlayOutgoingRequestsPairingPassword"], + "restrictionsForceAirPlayIncomingRequestsPairingPassword": operationPayload["forceAirPlayIncomingRequestsPairingPassword"], + "restrictionsAllowManagedAppsCloudSync": operationPayload["allowManagedAppsCloudSync"], + "restrictionsAllowEraseContentAndSettings": operationPayload["allowEraseContentAndSettings"], + "restrictionsAllowSpotlightInternetResults": operationPayload["allowSpotlightInternetResults"], + "restrictionsAllowEnablingRestrictions": operationPayload["allowEnablingRestrictions"], + "restrictionsAllowActivityContinuation": operationPayload["allowActivityContinuation"], + "restrictionsAllowEnterpriseBookBackup": operationPayload["allowEnterpriseBookBackup"], + "restrictionsAllowEnterpriseBookMetadataSync": operationPayload["allowEnterpriseBookMetadataSync"], + "restrictionsAllowPodcasts": operationPayload["allowPodcasts"], + "restrictionsAllowDefinitionLookup": operationPayload["allowDefinitionLookup"], + "restrictionsAllowPredictiveKeyboard": operationPayload["allowPredictiveKeyboard"], + "restrictionsAllowAutoCorrection": operationPayload["allowAutoCorrection"], + "restrictionsAllowSpellCheck": operationPayload["allowSpellCheck"], + "restrictionsSafariAcceptCookies": operationPayload["safariAcceptCookies"], + "restrictionsAutonomousSingleAppModePermittedAppIDs": operationPayload["autonomousSingleAppModePermittedAppIDs"] + }; + break; + case iosOperationConstants["VPN_OPERATION_CODE"]: + var pptp = false; + var l2tp = false; + if (operationPayload["vpnType"] == "PPTP") { + pptp = true; + } else if (operationPayload["vpnType"] == "L2TP") { + l2tp = true; + } + + payload = { + "userDefinedName": operationPayload["userDefinedName"], + "overridePrimary": operationPayload["overridePrimary"], + "onDemandEnabled": operationPayload["onDemandEnabled"], + "onDemandMatchDomainsAlways": operationPayload["onDemandMatchDomainsAlways"], + "onDemandMatchDomainsNever": operationPayload["onDemandMatchDomainsNever"], + "onDemandMatchDomainsOnRetry": operationPayload["onDemandMatchDomainsOnRetry"], + "onDemandRules": operationPayload["onDemandRules"], + "vendorConfigs": operationPayload["vendorConfigs"], + "vpnType": operationPayload["vpnType"], + "pptpAuthName": pptp ? operationPayload.ppp["authName"] : "", + "pptpTokenCard": pptp ? operationPayload.ppp["tokenCard"] : "", + "pptpAuthPassword": pptp ? operationPayload.ppp["authPassword"] : "", + "pptpCommRemoteAddress": pptp ? operationPayload.ppp["commRemoteAddress"] : "", + "pptpRSASecureID": pptp ? operationPayload.ppp["RSASecureID"] : "", + "pptpCCPEnabled": pptp ? operationPayload.ppp["CCPEnabled"] : "", + "pptpCCPMPPE40Enabled": pptp ? operationPayload.ppp["CCPMPPE40Enabled"] : "", + "pptpCCPMPPE128Enabled": pptp ? operationPayload.ppp["CCPMPPE128Enabled"] : "", + "l2tpAuthName": l2tp ? operationPayload.ppp["authName"] : "", + "l2tpTokenCard": l2tp ? operationPayload.ppp["tokenCard"] : "", + "l2tpAuthPassword": l2tp ? operationPayload.ppp["authPassword"] : "", + "l2tpCommRemoteAddress": l2tp ? operationPayload.ppp["commRemoteAddress"] : "", + "l2tpRSASecureID": l2tp ? operationPayload.ppp["RSASecureID"] : "", + "ipsecRemoteAddress": operationPayload.ipSec["remoteAddress"], + "ipsecAuthenticationMethod": operationPayload.ipSec["authenticationMethod"], + "ipsecLocalIdentifier": operationPayload.ipSec["localIdentifier"], + "ipsecSharedSecret": operationPayload.ipSec["sharedSecret"], + "ipsecPayloadCertificateUUID": operationPayload.ipSec["payloadCertificateUUID"], + "ipsecXAuthEnabled": operationPayload.ipSec["XAuthEnabled"], + "ipsecXAuthName": operationPayload.ipSec["XAuthName"], + "ipsecPromptForVPNPIN": operationPayload.ipSec["promptForVPNPIN"], + "ikev2RemoteAddress": operationPayload.ikEv2["remoteAddress"], + "ikev2LocalIdentifier": operationPayload.ikEv2["localIdentifier"], + "ikev2RemoteIdentifier": operationPayload.ikEv2["remoteIdentifier"], + "ikev2AuthenticationMethod": operationPayload.ikEv2["authenticationMethod"], + "ikev2SharedSecret": operationPayload.ikEv2["sharedSecret"], + "ikev2PayloadCertificateUUID": operationPayload.ikEv2["payloadCertificateUUID"], + "ikev2ExtendedAuthEnabled": operationPayload.ikEv2["extendedAuthEnabled"], + "ikev2AuthName": operationPayload.ikEv2["authName"], + "ikev2AuthPassword": operationPayload.ikEv2["authPassword"], + "ikev2DeadPeerDetectionInterval": operationPayload.ikEv2["deadPeerDetectionInterval"], + "ikev2ServerCertificateIssuerCommonName": operationPayload.ikEv2["serverCertificateIssuerCommonName"], + "ikev2ServerCertificateCommonName": operationPayload.ikEv2["serverCertificateCommonName"] + }; + break; + case iosOperationConstants["PER_APP_VPN_OPERATION_CODE"]: + payload = { + "operation": { + "VPNUUID": operationPayload["PER-APP-VPNUUID"], + "safariDomains": operationPayload["safariDomains"], + "onDemandMatchAppEnabled": operationPayload["onDemandMatchAppEnabled"] + } + }; + break; + case iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"]: + payload = { + "operation": { + "appLayerVPNMappings": operationPayload["appLayerVPNMappings"] + } + }; + break; + case iosOperationConstants["WIFI_OPERATION_CODE"]: + payload = { + "wifiHiddenNetwork": operationPayload["hiddenNetwork"], + "wifiSSID": operationPayload["SSID"], + "wifiAutoJoin": operationPayload["autoJoin"], + "wifiProxyType": operationPayload["proxyType"], + "wifiEncryptionType": operationPayload["encryptionType"], + "wifiIsHotSpot": operationPayload["hotspot"], + "wifiDomainName": operationPayload["domainName"], + "wifiServiceProviderRoamingEnabled": operationPayload["serviceProviderRoamingEnabled"], + "wifiDisplayedOperatorName": operationPayload["displayedOperatorName"], + "wifiRoamingConsortiumOIs": operationPayload["roamingConsortiumOIs"], + "wifiPassword": operationPayload["password"], + "wifiPayloadCertUUID": operationPayload["payloadCertificateUUID"], + "wifiProxyServer": operationPayload["proxyServer"], + "wifiProxyPort": operationPayload["proxyPort"], + "wifiProxyUsername": operationPayload["proxyUsername"], + "wifiProxyPassword": operationPayload["proxyPassword"], + "wifiProxyPACURL": operationPayload["proxyPACURL"], + "wifiProxyPACFallbackAllowed": operationPayload["proxyPACFallbackAllowed"], + "wifiNAIRealmNames": operationPayload["nairealmNames"], + "wifiMCCAndMNCs": operationPayload["mccandMNCs"], + "wifiEAPUsername": operationPayload.clientConfiguration["username"], + "wifiAcceptedEAPTypes": operationPayload.clientConfiguration["acceptEAPTypes"], + "wifiEAPPassword": operationPayload.clientConfiguration["userPassword"], + "wifiEAPOneTimePassword": operationPayload.clientConfiguration["oneTimePassword"], + "wifiPayloadCertificateAnchorUUIDs": operationPayload.clientConfiguration["payloadCertificateAnchorUUID"], + "wifiEAPOuterIdentity": operationPayload.clientConfiguration["outerIdentity"], + "wifiTLSTrustedServerNames": operationPayload.clientConfiguration["tlstrustedServerNames"], + "wifiEAPTLSAllowTrustExceptions": operationPayload.clientConfiguration["tlsallowTrustExceptions"], + "wifiEAPTLSCertIsRequired": operationPayload.clientConfiguration["tlscertificateIsRequired"], + "wifiEAPTLSInnerAuthType": operationPayload.clientConfiguration["ttlsinnerAuthentication"], + "wifiEAPFastUsePAC": operationPayload.clientConfiguration["eapfastusePAC"], + "wifiEAPFastProvisionPAC": operationPayload.clientConfiguration["eapfastprovisionPAC"], + "wifiEAPFastProvisionPACAnonymously": operationPayload.clientConfiguration["eapfastprovisionPACAnonymously"], + "wifiEAPSIMNoOfRands": operationPayload.clientConfiguration["eapsimnumberOfRANDs"] + }; + break; + case iosOperationConstants["EMAIL_OPERATION_CODE"]: + payload = { + "emailAccountDescription": operationPayload["emailAccountDescription"], + "emailAccountName": operationPayload["emailAccountName"], + "emailAccountType": operationPayload["emailAccountType"], + "emailAddress": operationPayload["emailAddress"], + "emailIncomingMailServerAuthentication": operationPayload["incomingMailServerAuthentication"], + "emailIncomingMailServerHostname": operationPayload["incomingMailServerHostName"], + "emailIncomingMailServerPort": operationPayload["incomingMailServerPortNumber"], + "emailIncomingUseSSL": operationPayload["incomingMailServerUseSSL"], + "emailIncomingMailServerUsername": operationPayload["incomingMailServerUsername"], + "emailIncomingMailServerPassword": operationPayload["incomingPassword"], + "emailOutgoingMailServerPassword": operationPayload["outgoingPassword"], + "emailOutgoingPasswordSameAsIncomingPassword": operationPayload["outgoingPasswordSameAsIncomingPassword"], + "emailOutgoingMailServerAuthentication": operationPayload["outgoingMailServerAuthentication"], + "emailOutgoingMailServerHostname": operationPayload["outgoingMailServerHostName"], + "emailOutgoingMailServerPort": operationPayload["outgoingMailServerPortNumber"], + "emailOutgoingUseSSL": operationPayload["outgoingMailServerUseSSL"], + "emailOutgoingMailServerUsername": operationPayload["outgoingMailServerUsername"], + "emailPreventMove": operationPayload["preventMove"], + "emailPreventAppSheet": operationPayload["preventAppSheet"], + "emailDisableMailRecentsSyncing": operationPayload["disableMailRecentsSyncing"], + "emailIncomingMailServerIMAPPathPrefix": operationPayload["incomingMailServerIMAPPathPrefix"], + "emailSMIMEEnabled": operationPayload["smimeenabled"], + "emailSMIMESigningCertificateUUID": operationPayload["smimesigningCertificateUUID"], + "emailSMIMEEncryptionCertificateUUID": operationPayload["smimeencryptionCertificateUUID"], + "emailSMIMEEnablePerMessageSwitch": operationPayload["smimeenablePerMessageSwitch"] + }; + break; + case iosOperationConstants["AIRPLAY_OPERATION_CODE"]: + payload = { + "airplayDestinations": operationPayload["airPlayDestinations"], + "airplayCredentials": operationPayload["airPlayCredentials"] + }; + break; + case iosOperationConstants["LDAP_OPERATION_CODE"]: + payload = { + "ldapAccountDescription": operationPayload["accountDescription"], + "ldapAccountHostname": operationPayload["accountHostName"], + "ldapUseSSL": operationPayload["accountUseSSL"], + "ldapAccountUsername": operationPayload["accountUsername"], + "ldapAccountPassword": operationPayload["accountPassword"], + "ldapSearchSettings": operationPayload["ldapSearchSettings"] + }; + break; + case iosOperationConstants["CALENDAR_OPERATION_CODE"]: + payload = { + "calendarAccountDescription": operationPayload["accountDescription"], + "calendarAccountHostname": operationPayload["hostName"], + "calendarAccountUsername": operationPayload["username"], + "calendarAccountPassword": operationPayload["password"], + "calendarUseSSL": operationPayload["useSSL"], + "calendarAccountPort": operationPayload["port"], + "calendarPrincipalURL": operationPayload["principalURL"] + }; + break; + case iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"]: + payload = { + "calendarSubscriptionDescription": operationPayload["accountDescription"], + "calendarSubscriptionHostname": operationPayload["hostName"], + "calendarSubscriptionUsername": operationPayload["username"], + "calendarSubscriptionPassword": operationPayload["password"], + "calendarSubscriptionUseSSL": operationPayload["useSSL"] + }; + break; + case iosOperationConstants["APN_OPERATION_CODE"]: + payload = { + "apnConfigurations": operationPayload["apnConfigurations"] + }; + break; + case iosOperationConstants["CELLULAR_OPERATION_CODE"]: + payload = { + "cellularAttachAPNName": operationPayload["attachAPNName"], + "cellularAuthenticationType": operationPayload["authenticationType"], + "cellularUsername": operationPayload["username"], + "cellularPassword": operationPayload["password"], + "cellularAPNConfigurations": operationPayload["apnConfigurations"] + }; + break; + } + return payload; + }; + + privateMethods.generateIOSOperationPayload = function (operationCode, operationData, deviceList) { + var payload; + var operationType; + switch (operationCode) { + case iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "forcePIN": operationData["passcodePolicyForcePIN"], + "allowSimple": operationData["passcodePolicyAllowSimple"], + "requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"], + "minLength": operationData["passcodePolicyMinLength"], + "minComplexChars": operationData["passcodePolicyMinComplexChars"], + "maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"], + "pinHistory": operationData["passcodePolicyPasscodeHistory"], + "maxInactivity": operationData["passcodePolicyMaxAutoLock"], + "maxGracePeriod": operationData["passcodePolicyGracePeriod"], + "maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"] + } + }; + break; + case iosOperationConstants["WIFI_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + if (operationData["wifiProxyPort"] == "") { + operationData["wifiProxyPort"] = -1; + } + payload = { + "operation": { + "SSID": operationData["wifiSSID"], + "hiddenNetwork": operationData["wifiHiddenNetwork"], + "autoJoin": operationData["wifiAutoJoin"], + "proxyType": operationData["wifiProxyType"], + "encryptionType": operationData["wifiEncryptionType"], + "hotspot": operationData["wifiIsHotSpot"], + "domainName": operationData["wifiDomainName"], + "serviceProviderRoamingEnabled": operationData["wifiServiceProviderRoamingEnabled"], + "displayedOperatorName": operationData["wifiDisplayedOperatorName"], + "roamingConsortiumOIs": operationData["wifiRoamingConsortiumOIs"], + "password": operationData["wifiPassword"], + "clientConfiguration": { + "username": operationData["wifiEAPUsername"], + "acceptEAPTypes": operationData["wifiAcceptedEAPTypes"], + "userPassword": operationData["wifiEAPPassword"], + "oneTimePassword": operationData["wifiEAPOneTimePassword"], + "payloadCertificateAnchorUUID": operationData["wifiPayloadCertificateAnchorUUIDs"], + "outerIdentity": operationData["wifiEAPOuterIdentity"], + "tlstrustedServerNames": operationData["wifiTLSTrustedServerNames"], + "tlsallowTrustExceptions": operationData["wifiEAPTLSAllowTrustExceptions"], + "tlscertificateIsRequired": operationData["wifiEAPTLSCertIsRequired"], + "ttlsinnerAuthentication": operationData["wifiEAPTLSInnerAuthType"], + "eapfastusePAC": operationData["wifiEAPFastUsePAC"], + "eapfastprovisionPAC": operationData["wifiEAPFastProvisionPAC"], + "eapfastprovisionPACAnonymously": operationData["wifiEAPFastProvisionPACAnonymously"], + "eapsimnumberOfRANDs": operationData["wifiEAPSIMNoOfRands"] + }, + "payloadCertificateUUID": operationData["wifiPayloadCertUUID"], + "proxyServer": operationData["wifiProxyServer"], + "proxyPort": operationData["wifiProxyPort"], + "proxyUsername": operationData["wifiProxyUsername"], + "proxyPassword": operationData["wifiProxyPassword"], + "proxyPACURL": operationData["wifiProxyPACURL"], + "proxyPACFallbackAllowed": operationData["wifiProxyPACFallbackAllowed"], + "nairealmNames": operationData["wifiNAIRealmNames"], + "mccandMNCs": operationData["wifiMCCAndMNCs"] + } + }; + break; + case iosOperationConstants["VPN_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + var ppp = {}; + var ipSec = {}; + var ikev2 = {}; + var pulseSecure = {}; + + if (operationData["vpnType"] == "PPTP") { + ppp = { + "authName": operationData["pptpAuthName"], + "tokenCard": operationData["pptpTokenCard"], + "authPassword": operationData["pptpAuthPassword"], + "commRemoteAddress": operationData["pptpCommRemoteAddress"], + "RSASecureID": operationData["pptpRSASecureID"], + "CCPEnabled": operationData["pptpCCPEnabled"], + "CCPMPPE40Enabled": operationData["pptpCCPMPPE40Enabled"], + "CCPMPPE128Enabled": operationData["pptpCCPMPPE128Enabled"] + }; + } else if (operationData["vpnType"] == "L2TP") { + ppp = { + "authName": operationData["l2tpAuthName"], + "tokenCard": operationData["l2tpTokenCard"], + "authPassword": operationData["l2tpAuthPassword"], + "commRemoteAddress": operationData["l2tpCommRemoteAddress"], + "RSASecureID": operationData["l2tpRSASecureID"] + }; + } else if (operationData["vpnType"] == "IPSec") { + ipSec = { + "remoteAddress": operationData["ipsecRemoteAddress"], + "authenticationMethod": operationData["ipsecAuthenticationMethod"], + "localIdentifier": operationData["ipsecLocalIdentifier"], + "sharedSecret": operationData["ipsecSharedSecret"], + "payloadCertificateUUID": operationData["ipsecPayloadCertificateUUID"], + "XAuthEnabled": operationData["ipsecXAuthEnabled"], + "XAuthName": operationData["ipsecXAuthName"], + "promptForVPNPIN": operationData["ipsecPromptForVPNPIN"] + }; + } else if (operationData["vpnType"] == "IKEv2") { + ikev2 = { + "remoteAddress": operationData["ikev2RemoteAddress"], + "localIdentifier": operationData["ikev2LocalIdentifier"], + "remoteIdentifier": operationData["ikev2RemoteIdentifier"], + "authenticationMethod": operationData["ikev2AuthenticationMethod"], + "sharedSecret": operationData["ikev2SharedSecret"], + "payloadCertificateUUID": operationData["ikev2PayloadCertificateUUID"], + "extendedAuthEnabled": operationData["ikev2ExtendedAuthEnabled"], + "authName": operationData["ikev2AuthName"], + "authPassword": operationData["ikev2AuthPassword"], + "deadPeerDetectionInterval": operationData["ikev2DeadPeerDetectionInterval"], + "serverCertificateIssuerCommonName": operationData["ikev2ServerCertificateIssuerCommonName"], + "serverCertificateCommonName": operationData["ikev2ServerCertificateCommonName"] + }; + } else if (operationData["vpnType"] == "PulseSecure") { + pulseSecure = { + "remoteAddress": operationData["pulsesecureRemoteAddress"], + "userName": operationData["pulsesecureName"], + "sharedSecret": operationData["pulsesecureSharedSecret"] + }; + } + + var domainsAlways = new Array(); + for (var i = 0; i < operationData["onDemandMatchDomainsAlways"].length; i++) { + domainsAlways.push(operationData["onDemandMatchDomainsAlways"][i].domain); + } + + var domainsNever = new Array(); + for (var i = 0; i < operationData["onDemandMatchDomainsNever"].length; i++) { + domainsNever.push(operationData["onDemandMatchDomainsNever"][i].domain); + } + + var domainsRetry = new Array(); + for (var i = 0; i < operationData["onDemandMatchDomainsOnRetry"].length; i++) { + domainsRetry.push(operationData["onDemandMatchDomainsOnRetry"][i].domain); + } + + payload = { + "operation": { + "userDefinedName": operationData["userDefinedName"], + "overridePrimary": operationData["overridePrimary"], + "onDemandEnabled": operationData["onDemandEnabled"], + "onDemandMatchDomainsAlways": domainsAlways, + "onDemandMatchDomainsNever": domainsNever, + "onDemandMatchDomainsOnRetry": domainsRetry, + "onDemandRules": operationData["onDemandRules"], + "vendorConfigs": operationData["vendorConfigs"], + "vpnType": operationData["vpnType"], + "ppp": ppp, + "ipSec": ipSec, + "ikEv2": ikev2, + "pulseSecure": pulseSecure + } + }; + break; + case iosOperationConstants["PER_APP_VPN_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + var domains = new Array(); + for (var i = 0; i < operationData["safariDomains"].length; i++) { + domains.push(operationData["safariDomains"][i].domain); + } + payload = { + "operation": { + "VPNUUID": operationData["VPNUUID"], + "safariDomains": domains, + "onDemandMatchAppEnabled": operationData["onDemandMatchAppEnabled"] + } + }; + break; + case iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "appLayerVPNMappings": operationData["appLayerVPNMappings"] + } + }; + break; + case iosOperationConstants["RESTRICTIONS_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "allowAccountModification": operationData["restrictionsAllowAccountModification"], + "allowAddingGameCenterFriends": operationData["restrictionsAllowAddingGameCenterFriends"], + "allowAirDrop": operationData["restrictionsAllowAirDrop"], + "allowAppCellularDataModification": operationData["restrictionsAllowAppCellularDataModification"], + "allowAppInstallation": operationData["restrictionsAllowAppInstallation"], + "allowAppRemoval": operationData["restrictionsAllowAppRemoval"], + "allowAssistant": operationData["restrictionsAllowAssistant"], + "allowAssistantUserGeneratedContent": operationData["restrictionsAllowAssistantUserGeneratedContent"], + "allowAssistantWhileLocked": operationData["restrictionsAllowAssistantWhileLocked"], + "allowBookstore": operationData["restrictionsAllowBookstore"], + "allowBookstoreErotica": operationData["restrictionsAllowBookstoreErotica"], + "allowCamera": operationData["restrictionsAllowCamera"], + "allowChat": operationData["restrictionsAllowChat"], + "allowCloudBackup": operationData["restrictionsAllowCloudBackup"], + "allowCloudDocumentSync": operationData["restrictionsAllowCloudDocumentSync"], + "allowCloudKeychainSync": operationData["restrictionsAllowCloudKeychainSync"], + "allowDiagnosticSubmission": operationData["restrictionsAllowDiagnosticSubmission"], + "allowExplicitContent": operationData["restrictionsAllowExplicitContent"], + "allowFindMyFriendsModification": operationData["restrictionsAllowFindMyFriendsModification"], + "allowFingerprintForUnlock": operationData["restrictionsAllowFingerprintForUnlock"], + "allowGameCenter": operationData["restrictionsAllowGameCenter"], + "allowGlobalBackgroundFetchWhenRoaming": operationData["restrictionsAllowGlobalBackgroundFetchWhenRoaming"], + "allowInAppPurchases": operationData["restrictionsAllowInAppPurchases"], + "allowLockScreenControlCenter": operationData["restrictionsAllowLockScreenControlCenter"], + "allowHostPairing": operationData["restrictionsAllowHostPairing"], + "allowLockScreenNotificationsView": operationData["restrictionsAllowLockScreenNotificationsView"], + "allowLockScreenTodayView": operationData["restrictionsAllowLockScreenTodayView"], + "allowMultiplayerGaming": operationData["restrictionsAllowMultiplayerGaming"], + "allowOpenFromManagedToUnmanaged": operationData["restrictionsAllowOpenFromManagedToUnmanaged"], + "allowOpenFromUnmanagedToManaged": operationData["restrictionsAllowOpenFromUnmanagedToManaged"], + "allowOTAPKIUpdates": operationData["restrictionsAllowOTAPKIUpdates"], + "allowPassbookWhileLocked": operationData["restrictionsAllowPassbookWhileLocked"], + "allowPhotoStream": operationData["restrictionsAllowPhotoStream"], + "allowSafari": operationData["restrictionsAllowSafari"], + "safariAllowAutoFill": operationData["restrictionsSafariAllowAutoFill"], + "safariForceFraudWarning": operationData["restrictionsSafariForceFraudWarning"], + "safariAllowJavaScript": operationData["restrictionsSafariAllowJavaScript"], + "safariAllowPopups": operationData["restrictionsSafariAllowPopups"], + "allowScreenShot": operationData["restrictionsAllowScreenShot"], + "allowSharedStream": operationData["restrictionsAllowSharedStream"], + "allowUIConfigurationProfileInstallation": operationData["restrictionsAllowUIConfigurationProfileInstallation"], + "allowUntrustedTLSPrompt": operationData["restrictionsAllowUntrustedTLSPrompt"], + "allowVideoConferencing": operationData["restrictionsAllowVideoConferencing"], + "allowVoiceDialing": operationData["restrictionsAllowVoiceDialing"], + "allowYouTube": operationData["restrictionsAllowYouTube"], + "allowiTunes": operationData["restrictionsAllowITunes"], + "forceAssistantProfanityFilter": operationData["restrictionsForceAssistantProfanityFilter"], + "forceEncryptedBackup": operationData["restrictionsForceEncryptedBackup"], + "forceITunesStorePasswordEntry": operationData["restrictionsForceITunesStorePasswordEntry"], + "forceLimitAdTracking": operationData["restrictionsForceLimitAdTracking"], + "forceAirPlayOutgoingRequestsPairingPassword": operationData["restrictionsForceAirPlayOutgoingRequestsPairingPassword"], + "forceAirPlayIncomingRequestsPairingPassword": operationData["restrictionsForceAirPlayIncomingRequestsPairingPassword"], + "allowManagedAppsCloudSync": operationData["restrictionsAllowManagedAppsCloudSync"], + "allowEraseContentAndSettings": operationData["restrictionsAllowEraseContentAndSettings"], + "allowSpotlightInternetResults": operationData["restrictionsAllowSpotlightInternetResults"], + "allowEnablingRestrictions": operationData["restrictionsAllowEnablingRestrictions"], + "allowActivityContinuation": operationData["restrictionsAllowActivityContinuation"], + "allowEnterpriseBookBackup": operationData["restrictionsAllowEnterpriseBookBackup"], + "allowEnterpriseBookMetadataSync": operationData["restrictionsAllowEnterpriseBookMetadataSync"], + "allowPodcasts": operationData["restrictionsAllowPodcasts"], + "allowDefinitionLookup": operationData["restrictionsAllowDefinitionLookup"], + "allowPredictiveKeyboard": operationData["restrictionsAllowPredictiveKeyboard"], + "allowAutoCorrection": operationData["restrictionsAllowAutoCorrection"], + "allowSpellCheck": operationData["restrictionsAllowSpellCheck"], + "safariAcceptCookies": operationData["restrictionsSafariAcceptCookies"], + "autonomousSingleAppModePermittedAppIDs": operationData["restrictionsAutonomousSingleAppModePermittedAppIDs"] + } + }; + break; + case iosOperationConstants["EMAIL_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "emailAccountDescription": operationData["emailAccountDescription"], + "emailAccountName": operationData["emailAccountName"], + "emailAccountType": operationData["emailAccountType"], + "emailAddress": operationData["emailAddress"], + "incomingMailServerAuthentication": operationData["emailIncomingMailServerAuthentication"], + "incomingMailServerHostName": operationData["emailIncomingMailServerHostname"], + "incomingMailServerPortNumber": operationData["emailIncomingMailServerPort"], + "incomingMailServerUseSSL": operationData["emailIncomingUseSSL"], + "incomingMailServerUsername": operationData["emailIncomingMailServerUsername"], + "incomingPassword": operationData["emailIncomingMailServerPassword"], + "outgoingPassword": operationData["emailOutgoingMailServerPassword"], + "outgoingPasswordSameAsIncomingPassword": operationData["emailOutgoingPasswordSameAsIncomingPassword"], + "outgoingMailServerAuthentication": operationData["emailOutgoingMailServerAuthentication"], + "outgoingMailServerHostName": operationData["emailOutgoingMailServerHostname"], + "outgoingMailServerPortNumber": operationData["emailOutgoingMailServerPort"], + "outgoingMailServerUseSSL": operationData["emailOutgoingUseSSL"], + "outgoingMailServerUsername": operationData["emailOutgoingMailServerUsername"], + "preventMove": operationData["emailPreventMove"], + "preventAppSheet": operationData["emailPreventAppSheet"], + "disableMailRecentsSyncing": operationData["emailDisableMailRecentsSyncing"], + "incomingMailServerIMAPPathPrefix": operationData["emailIncomingMailServerIMAPPathPrefix"], + "smimeenabled": operationData["emailSMIMEEnabled"], + "smimesigningCertificateUUID": operationData["emailSMIMESigningCertificateUUID"], + "smimeencryptionCertificateUUID": operationData["emailSMIMEEncryptionCertificateUUID"], + "smimeenablePerMessageSwitch": operationData["emailSMIMEEnablePerMessageSwitch"] + } + }; + break; + case iosOperationConstants["AIRPLAY_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "airPlayDestinations": operationData["airplayDestinations"], + "airPlayCredentials": operationData["airplayCredentials"] + } + }; + break; + case iosOperationConstants["LDAP_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "accountDescription": operationData["ldapAccountDescription"], + "accountHostName": operationData["ldapAccountHostname"], + "accountUseSSL": operationData["ldapUseSSL"], + "accountUsername": operationData["ldapAccountUsername"], + "accountPassword": operationData["ldapAccountPassword"], + "ldapSearchSettings": operationData["ldapSearchSettings"] + } + }; + break; + case iosOperationConstants["CALENDAR_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "accountDescription": operationData["calendarAccountDescription"], + "hostName": operationData["calendarAccountHostname"], + "username": operationData["calendarAccountUsername"], + "password": operationData["calendarAccountPassword"], + "useSSL": operationData["calendarUseSSL"], + "port": operationData["calendarAccountPort"], + "principalURL": operationData["calendarPrincipalURL"] + } + }; + break; + case iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "accountDescription": operationData["calendarSubscriptionDescription"], + "hostName": operationData["calendarSubscriptionHostname"], + "username": operationData["calendarSubscriptionUsername"], + "password": operationData["calendarSubscriptionPassword"], + "useSSL": operationData["calendarSubscriptionUseSSL"] + } + }; + break; + case iosOperationConstants["APN_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "apnConfigurations": operationData["apnConfigurations"] + } + }; + break; + case iosOperationConstants["DOMAIN_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "emailDomains": operationData["emailDomains"], + "webDomains": operationData["webDomains"] + } + }; + break; + case + iosOperationConstants["CELLULAR_OPERATION_CODE"] + : + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "attachAPNName": operationData["cellularAttachAPNName"], + "authenticationType": operationData["cellularAuthenticationType"], + "username": operationData["cellularUsername"], + "password": operationData["cellularPassword"], + "apnConfigurations": operationData["cellularAPNConfigurations"] + } + }; + break; + case + iosOperationConstants["NOTIFICATION_OPERATION_CODE"] + : + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "messageTitle": operationData["messageTitle"], + "messageText": operationData["messageText"] + } + }; + break; + default: + // If the operation is neither of above, it is a command operation + operationType = operationTypeConstants["COMMAND"]; + // Operation payload of a command operation is simply an array of device IDs + payload = deviceList; + } + + if (operationType == operationTypeConstants["PROFILE"] && deviceList) { + payload["deviceIDs"] = deviceList; + } + return payload; + } + ; + + /** + * Convert the android platform specific code to the generic payload. + * TODO: think of the possibility to follow a pattern to the key name (namespace?) + * @param operationCode + * @param operationPayload + * @returns {{}} + */ + privateMethods.generateGenericPayloadFromAndroidPayload = function (operationCode, operationPayload) { + var payload = {}; + operationPayload = JSON.parse(operationPayload); + switch (operationCode) { + case androidOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: + payload = { + "passcodePolicyAllowSimple": operationPayload["allowSimple"], + "passcodePolicyRequireAlphanumeric": operationPayload["requireAlphanumeric"], + "passcodePolicyMinLength": operationPayload["minLength"], + "passcodePolicyMinComplexChars": operationPayload["minComplexChars"], + "passcodePolicyMaxPasscodeAgeInDays": operationPayload["maxPINAgeInDays"], + "passcodePolicyPasscodeHistory": operationPayload["pinHistory"], + "passcodePolicyMaxFailedAttempts": operationPayload["maxFailedAttempts"] + }; + break; + case androidOperationConstants["CAMERA_OPERATION_CODE"]: + payload = operationPayload; + break; + case androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: + payload = { + "encryptStorageEnabled": operationPayload["encrypted"] + }; + break; + case androidOperationConstants["WORK_PROFILE_CODE"]: + payload = { + "workProfilePolicyProfileName": operationPayload["profileName"], + "workProfilePolicyEnableSystemApps": operationPayload["enableSystemApps"], + "workProfilePolicyHideSystemApps": operationPayload["hideSystemApps"], + "workProfilePolicyUnhideSystemApps": operationPayload["unhideSystemApps"], + "workProfilePolicyEnablePlaystoreApps": operationPayload["enablePlaystoreApps"] + }; + break; + case androidOperationConstants["WIFI_OPERATION_CODE"]: + payload = { + "wifiSSID": operationPayload["ssid"], + "wifiPassword": operationPayload["password"], + "wifiType": operationPayload["type"], + "wifiEAP": operationPayload["eap"], + "wifiPhase2": operationPayload["phase2"], + "wifiProvisioning": operationPayload["provisioning"], + "wifiIdentity": operationPayload["identity"], + "wifiAnoIdentity": operationPayload["anonymousIdentity"], + "wifiCaCert": operationPayload["cacert"], + "wifiCaCertName": operationPayload["cacertName"] + }; + break; + case androidOperationConstants["VPN_OPERATION_CODE"]: + payload = { + "serverAddress": operationPayload["serverAddress"], + "serverPort": operationPayload["serverPort"], + "sharedSecret": operationPayload["sharedSecret"], + "dnsServer": operationPayload["dnsServer"] + }; + break; + case androidOperationConstants["APPLICATION_OPERATION_CODE"]: + payload = { + "restrictionType": operationPayload["restriction-type"], + "restrictedApplications": operationPayload["restricted-applications"] + }; + break; + case androidOperationConstants["SYSTEM_UPDATE_POLICY_CODE"]: + if (operationPayload["type"] != "window") { + payload = { + "cosuSystemUpdatePolicyType": operationPayload["type"] + }; + } else { + payload = { + "cosuSystemUpdatePolicyType": operationPayload["type"], + "cosuSystemUpdatePolicyWindowStartTime": operationPayload["startTime"], + "cosuSystemUpdatePolicyWindowEndTime": operationPayload["endTime"] + }; + } + break; + case androidOperationConstants["KIOSK_APPS_CODE"]: + payload = { + "cosuWhitelistedApplications": operationPayload["whitelistedApplications"] + }; + break; + } + return payload; + }; + + privateMethods.generateAndroidOperationPayload = function (operationCode, operationData, deviceList) { + var payload; + var operationType; + switch (operationCode) { + case androidOperationConstants["CAMERA_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "CAMERA": operationData["cameraEnabled"], + "DISALLOW_ADJUST_VOLUME": operationData["disallowAdjustVolumeEnabled"], + "DISALLOW_CONFIG_BLUETOOTH": operationData["disallowConfigBluetooth"], + "DISALLOW_CONFIG_CELL_BROADCASTS": operationData["disallowConfigCellBroadcasts"], + "DISALLOW_CONFIG_CREDENTIALS": operationData["disallowConfigCredentials"], + "DISALLOW_CONFIG_MOBILE_NETWORKS": operationData["disallowConfigMobileNetworks"], + "DISALLOW_CONFIG_TETHERING": operationData["disallowConfigTethering"], + "DISALLOW_CONFIG_VPN": operationData["disallowConfigVpn"], + "DISALLOW_CONFIG_WIFI": operationData["disallowConfigWifi"], + "DISALLOW_APPS_CONTROL": operationData["disallowAppControl"], + "DISALLOW_CREATE_WINDOWS": operationData["disallowCreateWindows"], + "DISALLOW_CROSS_PROFILE_COPY_PASTE": operationData["disallowCrossProfileCopyPaste"], + "DISALLOW_DEBUGGING_FEATURES": operationData["disallowDebugging"], + "DISALLOW_FACTORY_RESET": operationData["disallowFactoryReset"], + "DISALLOW_ADD_USER": operationData["disallowAddUser"], + "DISALLOW_INSTALL_APPS": operationData["disallowInstallApps"], + "DISALLOW_INSTALL_UNKNOWN_SOURCES": operationData["disallowInstallUnknownSources"], + "DISALLOW_MODIFY_ACCOUNTS": operationData["disallowModifyAccounts"], + "DISALLOW_MOUNT_PHYSICAL_MEDIA": operationData["disallowMountPhysicalMedia"], + "DISALLOW_NETWORK_RESET": operationData["disallowNetworkReset"], + "DISALLOW_OUTGOING_BEAM": operationData["disallowOutgoingBeam"], + "DISALLOW_OUTGOING_CALLS": operationData["disallowOutgoingCalls"], + "DISALLOW_REMOVE_USER": operationData["disallowRemoveUser"], + "DISALLOW_SAFE_BOOT": operationData["disallowSafeBoot"], + "DISALLOW_SHARE_LOCATION": operationData["disallowLocationSharing"], + "DISALLOW_SMS": operationData["disallowSMS"], + "DISALLOW_UNINSTALL_APPS": operationData["disallowUninstallApps"], + "DISALLOW_UNMUTE_MICROPHONE": operationData["disallowUnmuteMicrophone"], + "DISALLOW_USB_FILE_TRANSFER": operationData["disallowUSBFileTransfer"], + "ALLOW_PARENT_PROFILE_APP_LINKING": operationData["disallowParentProfileAppLinking"], + "ENSURE_VERIFY_APPS": operationData["ensureVerifyApps"], + "AUTO_TIME": operationData["enableAutoTime"], + "SET_SCREEN_CAPTURE_DISABLED": operationData["disableScreenCapture"], + "SET_STATUS_BAR_DISABLED": operationData["disableStatusBar"] + } + }; + break; + case androidOperationConstants["CHANGE_LOCK_CODE_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "lockCode": operationData["lockCode"] + } + }; + break; + case androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "encrypted": operationData["encryptStorageEnabled"] + } + }; + break; + case androidOperationConstants["NOTIFICATION_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + //"message" : operationData["message"] + "messageText": operationData["messageText"], + "messageTitle": operationData["messageTitle"] + } + }; + break; + case androidOperationConstants["UPGRADE_FIRMWARE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "schedule": operationData["schedule"], + "server": operationData["server"] + } + }; + break; + case androidOperationConstants["WIPE_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "pin": operationData["pin"] + } + }; + break; + case androidOperationConstants["WIFI_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "ssid": operationData["wifiSSID"], + "type": operationData["wifiType"], + "password": operationData["wifiPassword"], + "eap": operationData["wifiEAP"], + "phase2": operationData["wifiPhase2"], + "provisioning": operationData["wifiProvisioning"], + "identity": operationData["wifiIdentity"], + "anonymousIdentity": operationData["wifiAnoIdentity"], + "cacert": operationData["wifiCaCert"], + "cacertName": operationData["wifiCaCertName"] + } + }; + break; + case androidOperationConstants["VPN_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "serverAddress": operationData["serverAddress"], + "serverPort": operationData["serverPort"], + "sharedSecret": operationData["sharedSecret"], + "dnsServer": operationData["dnsServer"] + } + }; + break; + case androidOperationConstants["LOCK_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "message": operationData["lock-message"], + "isHardLockEnabled": operationData["hard-lock"] + } + }; + break; + case androidOperationConstants["WORK_PROFILE_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "profileName": operationData["workProfilePolicyProfileName"], + "enableSystemApps": operationData["workProfilePolicyEnableSystemApps"], + "hideSystemApps": operationData["workProfilePolicyHideSystemApps"], + "unhideSystemApps": operationData["workProfilePolicyUnhideSystemApps"], + "enablePlaystoreApps": operationData["workProfilePolicyEnablePlaystoreApps"] + } + }; + break; + case androidOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "allowSimple": operationData["passcodePolicyAllowSimple"], + "requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"], + "minLength": operationData["passcodePolicyMinLength"], + "minComplexChars": operationData["passcodePolicyMinComplexChars"], + "maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"], + "pinHistory": operationData["passcodePolicyPasscodeHistory"], + "maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"] + } + }; + break; + case androidOperationConstants["APPLICATION_OPERATION_CODE"]: + payload = { + "operation": { + "restriction-type": operationData["restrictionType"], + "restricted-applications": operationData["restrictedApplications"] + } + }; + break; + case androidOperationConstants["SYSTEM_UPDATE_POLICY_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + if (operationData["cosuSystemUpdatePolicyType"] != "window") { + payload = { + "operation": { + "type": operationData["cosuSystemUpdatePolicyType"] + } + }; + } else { + payload = { + "operation": { + "type": operationData["cosuSystemUpdatePolicyType"], + "startTime": operationData["cosuSystemUpdatePolicyWindowStartTime"], + "endTime": operationData["cosuSystemUpdatePolicyWindowEndTime"] + } + }; + } + break; + case androidOperationConstants["KIOSK_APPS_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "whitelistedApplications": operationData["cosuWhitelistedApplications"] + } + }; + break; + default: + // If the operation is neither of above, it is a command operation + operationType = operationTypeConstants["COMMAND"]; + // Operation payload of a command operation is simply an array of device IDs + payload = deviceList; + } + + if (operationType == operationTypeConstants["PROFILE"] && deviceList) { + payload["deviceIDs"] = deviceList; + } + + return payload; + }; + + publicMethods.getAndroidServiceEndpoint = function (operationCode) { + var featureMap = { + "WIFI": "configure-wifi", + "CAMERA": "control-camera", + "VPN": "configure-vpn", + "DEVICE_LOCK": "lock-devices", + "DEVICE_UNLOCK": "unlock-devices", + "DEVICE_LOCATION": "location", + "CLEAR_PASSWORD": "clear-password", + "APPLICATION_LIST": "get-application-list", + "DEVICE_RING": "ring", + "DEVICE_REBOOT": "reboot", + "UPGRADE_FIRMWARE": "upgrade-firmware", + "DEVICE_MUTE": "mute", + "NOTIFICATION": "send-notification", + "ENCRYPT_STORAGE": "encrypt-storage", + "CHANGE_LOCK_CODE": "change-lock-code", + "WEBCLIP": "set-webclip", + "INSTALL_APPLICATION": "install-application", + "UNINSTALL_APPLICATION": "uninstall-application", + "BLACKLIST_APPLICATIONS": "blacklist-applications", + "PASSCODE_POLICY": "set-password-policy", + "ENTERPRISE_WIPE": "enterprise-wipe", + "WIPE_DATA": "wipe" + }; + //return "/mdm-android-agent/operation/" + featureMap[operationCode]; + return "/api/device-mgt/android/v1.0/admin/devices/" + featureMap[operationCode]; + }; + + /** + * Convert the windows platform specific code to the generic payload. + * TODO: think of the possibility to follow a pattern to the key name (namespace?) + * @param operationCode + * @param operationPayload + * @returns {{}} + */ + privateMethods.generateGenericPayloadFromWindowsPayload = function (operationCode, operationPayload) { + var payload = {}; + operationPayload = JSON.parse(operationPayload); + switch (operationCode) { + case windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: + payload = { + "passcodePolicyAllowSimple": operationPayload["allowSimple"], + "passcodePolicyRequireAlphanumeric": operationPayload["requireAlphanumeric"], + "passcodePolicyMinLength": operationPayload["minLength"], + "passcodePolicyMinComplexChars": operationPayload["minComplexChars"], + "passcodePolicyMaxPasscodeAgeInDays": operationPayload["maxPINAgeInDays"], + "passcodePolicyPasscodeHistory": operationPayload["pinHistory"], + "passcodePolicyMaxFailedAttempts": operationPayload["maxFailedAttempts"] + }; + break; + case windowsOperationConstants["CAMERA_OPERATION_CODE"]: + payload = { + "cameraEnabled": operationPayload["enabled"] + }; + break; + case windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: + payload = { + "encryptStorageEnabled": operationPayload["encrypted"] + }; + break; + } + return payload; + }; + + privateMethods.generateWindowsOperationPayload = function (operationCode, operationData, deviceList) { + var payload; + var operationType; + switch (operationCode) { + case windowsOperationConstants["CAMERA_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "enabled": operationData["cameraEnabled"] + } + }; + break; + case windowsOperationConstants["CHANGE_LOCK_CODE_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "lockCode": operationData["lockCode"] + } + }; + break; + case windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "encrypted": operationData["encryptStorageEnabled"] + } + }; + break; + case windowsOperationConstants["NOTIFICATION_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "message": operationData["message"] + } + }; + break; + case windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "allowSimple": operationData["passcodePolicyAllowSimple"], + "requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"], + "minLength": operationData["passcodePolicyMinLength"], + "minComplexChars": operationData["passcodePolicyMinComplexChars"], + "maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"], + "pinHistory": operationData["passcodePolicyPasscodeHistory"], + "maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"] + } + }; + break; + default: + // If the operation is neither of above, it is a command operation + operationType = operationTypeConstants["COMMAND"]; + // Operation payload of a command operation is simply an array of device IDs + payload = deviceList; + } + + if (operationType == operationTypeConstants["PROFILE"] && deviceList) { + payload["deviceIDs"] = deviceList; + } + + return payload; + }; + + + publicMethods.getWindowsServiceEndpoint = function (operationCode) { + var featureMap = { + "DEVICE_LOCK": "lock-devices", + "DISENROLL": "disenroll", + "DEVICE_RING": "ring-device", + "LOCK_RESET": "lock-reset", + "WIPE_DATA": "wipe-data" + }; + //return "/mdm-windows-agent/services/windows/operation/" + featureMap[operationCode]; + return "/api/device-mgt/windows/v1.0/services/windows/admin/devices/" + featureMap[operationCode]; + }; + /** + * Get the icon for the featureCode + * @param operationCode + * @returns icon class + */ + publicMethods.getAndroidIconForFeature = function (operationCode) { + var featureMap = { + "DEVICE_LOCK": "fw-lock", + "DEVICE_LOCATION": "fw-map-location", + "CLEAR_PASSWORD": "fw-clear", + "ENTERPRISE_WIPE": "fw-block", + "WIPE_DATA": "fw-delete", + "DEVICE_RING": "fw-dial-up", + "DEVICE_REBOOT": "fw-refresh", + "UPGRADE_FIRMWARE": "fw-hardware", + "DEVICE_MUTE": "fw-mute", + "NOTIFICATION": "fw-message", + "CHANGE_LOCK_CODE": "fw-security", + "DEVICE_UNLOCK": "fw-key" + }; + return featureMap[operationCode]; + }; + + /** + * Get the icon for the featureCode + * @param operationCode + * @returns icon class + */ + publicMethods.getWindowsIconForFeature = function (operationCode) { + var featureMap = { + "DEVICE_LOCK": "fw-lock", + "DEVICE_RING": "fw-dial-up", + "DISENROLL": "fw-export", + "LOCK_RESET": "fw-key", + "WIPE_DATA": "fw-delete" + }; + return featureMap[operationCode]; + }; + + /** + * Get the icon for the featureCode + * @param operationCode + * @returns icon class + */ + publicMethods.getIOSIconForFeature = function (operationCode) { + var featureMap = { + "DEVICE_LOCK": "fw-lock", + "LOCATION": "fw-map-location", + "ENTERPRISE_WIPE": "fw-block", + "NOTIFICATION": "fw-message", + "RING": "fw-dial-up" + }; + return featureMap[operationCode]; + }; + + /** + * Filter a list by a data attribute. + * @param prop + * @param val + * @returns {Array} + */ + $.fn.filterByData = function (prop, val) { + return this.filter( + function () { + return $(this).data(prop) == val; + } + ); + }; + + /** + * Method to generate Platform specific operation payload. + * + * @param platformType Platform Type of the profile + * @param operationCode Operation Codes to generate the profile from + * @param deviceList Optional device list to include in payload body for operations + * @returns {*} + */ + publicMethods.generatePayload = function (platformType, operationCode, deviceList) { + var payload; + var operationData = {}; + // capturing form input data designated by .operationDataKeys + $(".operation-data").filterByData("operation-code", operationCode).find(".operationDataKeys").each( + function () { + var operationDataObj = $(this); + var key = operationDataObj.data("key"); + var value; + if (operationDataObj.is(":text") || operationDataObj.is("textarea") || + operationDataObj.is(":password") || operationDataObj.is("input[type=hidden]")) { + value = operationDataObj.val(); + operationData[key] = value; + } else if (operationDataObj.is(":checkbox")) { + value = operationDataObj.is(":checked"); + operationData[key] = value; + } else if (operationDataObj.is(":radio") && operationDataObj.is(":checked")) { + value = operationDataObj.val(); + operationData[key] = value; + } else if (operationDataObj.is("select")) { + value = operationDataObj.find("option:selected").attr("value"); + operationData[key] = value; + } else if (operationDataObj.hasClass("grouped-array-input")) { + value = []; + var childInput; + var childInputValue; + if (operationDataObj.hasClass("one-column-input-array")) { + $(".child-input", this).each(function () { + childInput = $(this); + if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password") + || childInput.is("input[type=hidden]")) { + childInputValue = childInput.val(); + } else if (childInput.is(":checkbox")) { + childInputValue = childInput.is(":checked"); + } else if (childInput.is("select")) { + childInputValue = childInput.find("option:selected").attr("value"); + } + // push to value + value.push(childInputValue); + }); + } else if (operationDataObj.hasClass("valued-check-box-array")) { + $(".child-input", this).each(function () { + childInput = $(this); + if (childInput.is(":checked")) { + // get associated value with check-box + childInputValue = childInput.data("value"); + // push to value + value.push(childInputValue); + } + }); + } else if (operationDataObj.hasClass("multi-column-joined-input-array")) { + var columnCount = operationDataObj.data("column-count"); + var inputCount = 0; + var joinedInput; + $(".child-input", this).each(function () { + childInput = $(this); + if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password") + || childInput.is("input[type=hidden]")) { + childInputValue = childInput.val(); + } else if (childInput.is(":checkbox")) { + childInputValue = childInput.is(":checked"); + } else if (childInput.is("select")) { + childInputValue = childInput.find("option:selected").attr("value"); + } + inputCount++; + if (inputCount % columnCount == 1) { + // initialize joinedInput value + joinedInput = ""; + // append childInputValue to joinedInput + joinedInput += childInputValue; + } else if ((inputCount % columnCount) >= 2) { + // append childInputValue to joinedInput + joinedInput += childInputValue; + } else { + // append childInputValue to joinedInput + joinedInput += childInputValue; + // push to value + value.push(joinedInput); + } + }); + } else if (operationDataObj.hasClass("multi-column-key-value-pair-array")) { + columnCount = operationDataObj.data("column-count"); + inputCount = 0; + var childInputKey; + var keyValuePairJson; + $(".child-input", this).each(function () { + childInput = $(this); + childInputKey = childInput.data("child-key"); + if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password") + || childInput.is("input[type=hidden]")) { + childInputValue = childInput.val(); + } else if (childInput.is(":checkbox")) { + childInputValue = childInput.is(":checked"); + } else if (childInput.is("select")) { + childInputValue = childInput.find("option:selected").attr("value"); + } + inputCount++; + if ((inputCount % columnCount) == 1) { + // initialize keyValuePairJson value + keyValuePairJson = {}; + // set key-value-pair + keyValuePairJson[childInputKey] = childInputValue; + } else if ((inputCount % columnCount) >= 2) { + // set key-value-pair + keyValuePairJson[childInputKey] = childInputValue; + } else { + // set key-value-pair + keyValuePairJson[childInputKey] = childInputValue; + // push to value + value.push(keyValuePairJson); + } + }); + } + operationData[key] = value; + } + } + ); + + switch (platformType) { + case platformTypeConstants["ANDROID"]: + payload = privateMethods.generateAndroidOperationPayload(operationCode, operationData, deviceList); + break; + case platformTypeConstants["IOS"]: + payload = privateMethods.generateIOSOperationPayload(operationCode, operationData, deviceList); + break; + case platformTypeConstants["WINDOWS"]: + payload = privateMethods.generateWindowsOperationPayload(operationCode, operationData, deviceList); + break; + } + return payload; + }; + + /** + * Method to populate the Platform specific operation payload. + * + * @param platformType Platform Type of the profile + * @param operationCode Operation Codes to generate the profile from + * @param operationPayload payload + * @returns {*} + */ + publicMethods.populateUI = function (platformType, operationCode, operationPayload) { + var uiPayload; + switch (platformType) { + case platformTypeConstants["ANDROID"]: + uiPayload = privateMethods.generateGenericPayloadFromAndroidPayload(operationCode, operationPayload); + break; + case platformTypeConstants["IOS"]: + uiPayload = privateMethods.generateGenericPayloadFromIOSPayload(operationCode, operationPayload); + break; + case platformTypeConstants["WINDOWS"]: + uiPayload = privateMethods.generateGenericPayloadFromWindowsPayload(operationCode, operationPayload); + break; + } + // capturing form input data designated by .operationDataKeys + $(".operation-data").filterByData("operation-code", operationCode).find(".operationDataKeys").each( + function () { + var operationDataObj = $(this); + //TODO :remove + //operationDataObj.prop('disabled', true) + var key = operationDataObj.data("key"); + // retrieve corresponding input value associated with the key + var value = uiPayload[key]; + // populating input value according to the type of input + if (operationDataObj.is(":text") || + operationDataObj.is("textarea") || + operationDataObj.is(":password") || + operationDataObj.is("input[type=hidden]")) { + operationDataObj.val(value); + } else if (operationDataObj.is(":checkbox")) { + operationDataObj.prop("checked", value); + } else if (operationDataObj.is(":radio")) { + if (operationDataObj.val() == uiPayload[key]) { + operationDataObj.attr("checked", true); + operationDataObj.trigger("click"); + } + } else if (operationDataObj.is("select")) { + operationDataObj.val(value); + /* trigger a change of value, so that if slidable panes exist, + make them slide-down or slide-up accordingly */ + operationDataObj.trigger("change"); + } else if (operationDataObj.hasClass("grouped-array-input")) { + // then value is complex + var i, childInput; + var childInputIndex = 0; + // var childInputValue; + if (operationDataObj.hasClass("one-column-input-array")) { + // generating input fields to populate complex value + if (value) { + for (i = 0; i < value.length; ++i) { + operationDataObj.parent().find("a").filterByData("click-event", "add-form").click(); + } + // traversing through each child input + $(".child-input", this).each(function () { + childInput = $(this); + var childInputValue = value[childInputIndex]; + // populating extracted value in the UI according to the input type + if (childInput.is(":text") || + childInput.is("textarea") || + childInput.is(":password") || + childInput.is("input[type=hidden]") || + childInput.is("select")) { + childInput.val(childInputValue); + } else if (childInput.is(":checkbox")) { + operationDataObj.prop("checked", childInputValue); + } + // incrementing childInputIndex + childInputIndex++; + }); + } + } else if (operationDataObj.hasClass("valued-check-box-array")) { + // traversing through each child input + $(".child-input", this).each(function () { + childInput = $(this); + // check if corresponding value of current checkbox exists in the array of values + if (value) { + if (value.indexOf(childInput.data("value")) != -1) { + // if YES, set checkbox as checked + childInput.prop("checked", true); + } + } + }); + } else if (operationDataObj.hasClass("multi-column-joined-input-array")) { + // generating input fields to populate complex value + if (value) { + for (i = 0; i < value.length; ++i) { + operationDataObj.parent().find("a").filterByData("click-event", "add-form").click(); + } + var columnCount = operationDataObj.data("column-count"); + var multiColumnJoinedInputArrayIndex = 0; + // handling scenarios specifically + if (operationDataObj.attr("id") == "wifi-mcc-and-mncs") { + // traversing through each child input + $(".child-input", this).each(function () { + childInput = $(this); + var multiColumnJoinedInput = value[multiColumnJoinedInputArrayIndex]; + var childInputValue; + if ((childInputIndex % columnCount) == 0) { + childInputValue = multiColumnJoinedInput.substring(3, 0) + } else { + childInputValue = multiColumnJoinedInput.substring(3); + // incrementing childInputIndex + multiColumnJoinedInputArrayIndex++; + } + // populating extracted value in the UI according to the input type + if (childInput.is(":text") || + childInput.is("textarea") || + childInput.is(":password") || + childInput.is("input[type=hidden]") || + childInput.is("select")) { + childInput.val(childInputValue); + } else if (childInput.is(":checkbox")) { + operationDataObj.prop("checked", childInputValue); + } + // incrementing childInputIndex + childInputIndex++; + }); + } + } + } else if (operationDataObj.hasClass("multi-column-key-value-pair-array")) { + // generating input fields to populate complex value + if (value) { + for (i = 0; i < value.length; ++i) { + operationDataObj.parent().find("a").filterByData("click-event", "add-form").click(); + } + columnCount = operationDataObj.data("column-count"); + var multiColumnKeyValuePairArrayIndex = 0; + // traversing through each child input + $(".child-input", this).each(function () { + childInput = $(this); + var multiColumnKeyValuePair = value[multiColumnKeyValuePairArrayIndex]; + var childInputKey = childInput.data("child-key"); + var childInputValue = multiColumnKeyValuePair[childInputKey]; + // populating extracted value in the UI according to the input type + if (childInput.is(":text") || + childInput.is("textarea") || + childInput.is(":password") || + childInput.is("input[type=hidden]") || + childInput.is("select")) { + childInput.val(childInputValue); + } else if (childInput.is(":checkbox")) { + operationDataObj.prop("checked", childInputValue); + } + // incrementing multiColumnKeyValuePairArrayIndex for the next row of inputs + if ((childInputIndex % columnCount) == (columnCount - 1)) { + multiColumnKeyValuePairArrayIndex++; + } + // incrementing childInputIndex + childInputIndex++; + }); + } + } + } + } + ); + }; + + /** + * generateProfile method is only used for policy-creation UIs. + * + * @param platformType Platform Type of the profile + * @param operationCodes Operation codes to generate the profile from + * @returns {{}} + */ + publicMethods.generateProfile = function (platformType, operationCodes) { + var generatedProfile = {}; + for (var i = 0; i < operationCodes.length; ++i) { + var operationCode = operationCodes[i]; + var payload = publicMethods.generatePayload(platformType, operationCode, null); + + if (platformType == platformTypeConstants["ANDROID"] && + operationCodes[i] == androidOperationConstants["CAMERA_OPERATION_CODE"]) { + var operations = payload["operation"]; + for (var key in operations) { + operationCode = key; + var restriction = false; + if (operations[key]) { + restriction = true; + } + var payloadResult = { + "operation": { + "enabled": restriction + } + }; + generatedProfile[operationCode] = payloadResult["operation"]; + } + + } else { + generatedProfile[operationCode] = payload["operation"]; + } + } + return generatedProfile; + }; + + /** + * populateProfile method is used to populate the html ui with saved payload. + * + * @param platformType Platform Type of the profile + * @param payload List of profileFeatures + * @returns [] configuredOperations array + */ + publicMethods.populateProfile = function (platformType, payload) { + var i, configuredOperations = []; + var restrictions = {}; + for (i = 0; i < payload.length; ++i) { + var configuredFeature = payload[i]; + var featureCode = configuredFeature["featureCode"]; + var operationPayload = configuredFeature["content"]; + if (platformType == platformTypeConstants["ANDROID"]) { + var restriction = JSON.parse(operationPayload); + if (featureCode == androidOperationConstants["CAMERA_OPERATION_CODE"]) { + restrictions["cameraEnabled"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_ADJUST_VOLUME"]) { + restrictions["disallowAdjustVolumeEnabled"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_BLUETOOTH"]) { + restrictions["disallowConfigBluetooth"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CELL_BROADCASTS"]) { + restrictions["disallowConfigCellBroadcasts"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CREDENTIALS"]) { + restrictions["disallowConfigCredentials"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_MOBILE_NETWORKS"]) { + restrictions["disallowConfigMobileNetworks"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_TETHERING"]) { + restrictions["disallowConfigTethering"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_VPN"]) { + restrictions["disallowConfigVpn"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_WIFI"]) { + restrictions["disallowConfigWifi"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_APPS_CONTROL"]) { + restrictions["disallowAppControl"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CREATE_WINDOWS"]) { + restrictions["disallowCreateWindows"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_CROSS_PROFILE_COPY_PASTE"]) { + restrictions["disallowCrossProfileCopyPaste"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_DEBUGGING_FEATURES"]) { + restrictions["disallowDebugging"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_FACTORY_RESET"]) { + restrictions["disallowFactoryReset"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_ADD_USER"]) { + restrictions["disallowAddUser"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_APPS"]) { + restrictions["disallowInstallApps"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_UNKNOWN_SOURCES"]) { + restrictions["disallowInstallUnknownSources"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_MODIFY_ACCOUNTS"]) { + restrictions["disallowModifyAccounts"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_MOUNT_PHYSICAL_MEDIA"]) { + restrictions["disallowMountPhysicalMedia"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_NETWORK_RESET"]) { + restrictions["disallowNetworkReset"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_BEAM"]) { + restrictions["disallowOutgoingBeam"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_CALLS"]) { + restrictions["disallowOutgoingCalls"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_REMOVE_USER"]) { + restrictions["disallowRemoveUser"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_SAFE_BOOT"]) { + restrictions["disallowSafeBoot"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_SHARE_LOCATION"]) { + restrictions["disallowLocationSharing"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_SMS"]) { + restrictions["disallowSMS"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_UNINSTALL_APPS"]) { + restrictions["disallowUninstallApps"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_UNMUTE_MICROPHONE"]) { + restrictions["disallowUnmuteMicrophone"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["DISALLOW_USB_FILE_TRANSFER"]) { + restrictions["disallowUSBFileTransfer"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["ALLOW_PARENT_PROFILE_APP_LINKING"]) { + restrictions["disallowParentProfileAppLinking"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["ENSURE_VERIFY_APPS"]) { + restrictions["ensureVerifyApps"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["AUTO_TIME"]) { + restrictions["enableAutoTime"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["SET_SCREEN_CAPTURE_DISABLED"]) { + restrictions["disableScreenCapture"] = restriction["enabled"]; + continue; + } else if (featureCode == androidOperationConstants["SET_STATUS_BAR_DISABLED"]) { + restrictions["disableStatusBar"] = restriction["enabled"]; + continue; + } + } + //push the feature-code to the configuration array + configuredOperations.push(featureCode); + publicMethods.populateUI(platformType, featureCode, operationPayload); + } + if (typeof restrictions.cameraEnabled !== 'undefined') { + configuredOperations.push(androidOperationConstants["CAMERA_OPERATION_CODE"]); + publicMethods.populateUI(platformType, androidOperationConstants["CAMERA_OPERATION_CODE"], JSON.stringify(restrictions)); + } + return configuredOperations; + }; + + return publicMethods; +}(); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/js/type-view.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/js/type-view.js new file mode 100644 index 000000000..681a484f3 --- /dev/null +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/js/type-view.js @@ -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("

You are not authorized to view notifications.

"); + } 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(''); + } + } else { + $(messageSideBar).html("

Unexpected error " + + "occurred while loading new notifications.

"); + } + } + }, + // on error + function (jqXHR) { + if (jqXHR.status = 500) { + $(messageSideBar).html("

Unexpected error occurred while trying " + + "to retrieve any new notifications.

"); + } + } + ); + }); + } +} + +/** + * 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 = "
  • Warning

    " + + "

    Unexpected error occurred while loading notification. Please refresh the page and" + + " try again

  • "; + $(messageSideBar).html(content); + } + ); + }); +});

    4*9t^x*H?1W4_eSBO(j)dZE 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ÐT=za;AQ^X{o=X~1HyA@3L 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 =Np#Sh!kFG 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 Y)v^`Vy{`9j5BTrKHHE7H@a+Eo0I#2R6aWAK literal 0 HcmV?d00001 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/android.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/android.png new file mode 100755 index 0000000000000000000000000000000000000000..7fee78a646d5c43d1254dbd4c34232fd760deb1d GIT binary patch literal 2948 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 literal 0 HcmV?d00001 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/graph.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/graph.png new file mode 100755 index 0000000000000000000000000000000000000000..dd819ef4fcd087ae7e802a23fec22bb60d05e42c GIT binary patch literal 5431 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 literal 0 HcmV?d00001 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js old mode 100644 new mode 100755 index 5f9c788de..a90864968 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js @@ -1,64 +1,136 @@ /* - * 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, * 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 + * 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 + * "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 InitiateViewOption = null; + (function () { var deviceId = $(".device-id"); var deviceIdentifier = deviceId.data("deviceid"); var deviceType = deviceId.data("type"); var payload = [deviceIdentifier]; var operationTable; + var serviceUrl; + if (deviceType == "ios") { serviceUrl = "/ios/operation/deviceinfo"; } else if (deviceType == "android") { //var serviceUrl = "/mdm-android-agent/operation/device-info"; serviceUrl = "/api/device-mgt/android/v1.0/admin/devices/info"; } + if (serviceUrl) { - invokerUtil.post(serviceUrl, payload, - function (message) { - console.log(message); - }, function (message) { - console.log(message); + invokerUtil.post( + serviceUrl, + payload, + // success-callback + function () { + $(".panel-body").show(); + }, + // error-callback + function () { + var defaultInnerHTML = + "