Merge pull request #625 from Kamidu/cloud-3.1.0

Device Cloud Requested UI fixes
revert-70aa11f8
Charitha Goonetilleke 8 years ago committed by GitHub
commit fc1cc5049f

@ -0,0 +1,185 @@
{
"Logo": {
"name": "Cloud",
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt",
"target": "_parent"
},
"Main": {
"Domain": {
"url": "#",
"icon": "fw fw-organization",
"isAdminOnly": false,
"target": "_parent",
"dropDown": {
"Organization": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/organization.jag",
"icon": "fw fw-organization",
"dropDown": "false",
"target": "_self"
},
"Members": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/user.jag",
"icon": "fa fa-users",
"dropDown": "false",
"target": "_self"
}
}
},
"Account": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/account-summary.jag",
"icon": "fw fw-resource",
"isAdminOnly": true,
"target": "_blank",
"dropDown": {
"Upgrade Now": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/payment-plans.jag?cloud-type=api_cloud",
"icon": "fw fw-export",
"target": "_self"
},
"Monetization": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/monetization-dashboard.jag",
"icon": "fa fa-money fa-lg",
"dropDown": "false",
"target": "_self"
},
"Request Extension": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/contact-us.jag?cloud-type=api_cloud&request-extension=true",
"icon": "fw fw-mail",
"target": "_blank"
},
"Usage data": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/tenant-usage.jag?cloud-type=api_cloud",
"icon": "fw fw-bar-chart",
"target": "_self"
}
}
},
"Configure": {
"url": "none",
"icon": "fw fw-settings",
"isAdminOnly": true,
"dropDown": {
"Admin Dashboard": {
"id": "admin-dashboard",
"url": "https://api.cloudlocal.wso2.com:9445/admin-dashboard/",
"icon": "fw fw-user",
"target": "_self"
},
"Custom URL": {
"id": "custom-url",
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/custom_url.jag",
"icon": "fw fw-uri",
"target": "_self"
},
"API Store Access": {
"id": "custom-url",
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/selfSignup.jag",
"icon": "fw fw-store",
"target": "_self"
}
}
},
"Support": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/contact-us.jag",
"icon": "fw fw-mail",
"isAdminOnly": false,
"target": "_self",
"dropDown": "false"
},
"Documentation": {
"url": "#",
"icon": "fw fw-document",
"isAdminOnly": false,
"dropDown": {
"API Cloud": {
"id": "api_cloud",
"url": "https://docs.wso2.com/display/APICloud/WSO2+API+Cloud+Documentation",
"icon": "fw fw-api",
"target": "_blank"
},
"Integration Cloud": {
"id": "integration_cloud",
"url": "https://docs.wso2.com/display/IntegrationCloud/WSO2+Integration+Cloud+Documentation",
"icon": "fw fw-application",
"target": "_blank"
},
"API Cloud Walkthrough": {
"id": "api_cloud_walkthrough",
"url": "https://api.cloudlocal.wso2.com:9445/publisher?interactiveTutorial=true",
"icon": "fw fw-document",
"target": "_self"
}
}
}
},
"User": {
"url": "#",
"icon": "fw fw-user",
"dropDown": {
"Profile": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/user-profile.jag",
"icon": "fw fw-user",
"dropDown": "true",
"target": "_self"
},
"Change Password": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/change-password.jag",
"icon": "fw fw-lock",
"dropDown": "true",
"target": "_self"
},
"Logout": {
"url": "https://api.cloudlocal.wso2.com:9445/publisher/site/pages/logout.jag",
"icon": "fw fw-sign-out",
"dropDown": "true",
"target": "_self"
}
}
},
"Expand": {
"Clouds": {
"API Cloud": {
"id": "api_cloud",
"url": "https://api.cloudlocal.wso2.com:9445/publisher",
"icon": "fw fw-api fw-3x",
"dropDown": "true",
"target": "_self"
},
"Integration Cloud": {
"id": "integration_cloud",
"url": "https://milestones.appfactory.wso2.com:9443/appmgt",
"icon": "fa fa-cubes fa-3x",
"dropDown": "true",
"target": "_self"
},
"Identity Cloud": {
"id": "integration_cloud",
"url": "https://identity.cloudlocal.wso2.com:9443/admin",
"icon": "fw fw-security fa-3x",
"dropDown": "true",
"target": "_self"
},
"Device Cloud": {
"id": "device_cloud",
"url": "https://device.cloudlocal.wso2.com:9443/devicemgt",
"icon": "fw fw-security fa-3x",
"dropDown": "true",
"target": "_self"
}
},
"Actions": {
"Organization": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/organization.jag",
"icon": "fw fw-organization fw-3x",
"dropDown": "true",
"target": "_self"
},
"Members": {
"url": "https://cloudmgt.cloudlocal.wso2.com:9444/cloudmgt/site/pages/user.jag",
"icon": "fa fa-users fa-3x",
"dropDown": "true",
"target": "_self"
}
}
}
}

@ -0,0 +1,62 @@
/*
* Copyright (c) 2017, 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 conf = function () {
var cloudConf = application.get("CLOUD_CONF");
if (!conf) {
cloudConf = require("/app/conf/toplink-menu.json");
var pinch = require("/app/modules/conf-reader/pinch.min.js")["pinch"];
var server = require("carbon")["server"];
var process = require("process");
pinch(conf, /^/,
function (path, key, value) {
if ((typeof value === "string") && value.indexOf("%https.ip%") > -1) {
//noinspection JSUnresolvedFunction
return value.replace("%https.ip%", server.address("https"));
} else if ((typeof value === "string") && value.indexOf("%http.ip%") > -1) {
//noinspection JSUnresolvedFunction
return value.replace("%http.ip%", server.address("http"));
} else if ((typeof value === "string") && value.indexOf("%date-year%") > -1) {
var year = new Date().getFullYear();
return value.replace("%date-year%", year);
} else if ((typeof value === "string") && value.indexOf("%server.ip%") > -1) {
var getProperty = require("process").getProperty;
return value.replace("%server.ip%", getProperty("carbon.local.ip"));
} else {
var paramPattern = new RegExp("%(.*?)%", "g");
var out = value;
while ((matches = paramPattern.exec(value)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (matches.index === paramPattern.lastIndex) {
paramPattern.lastIndex++;
}
if (matches.length == 2) {
var property = process.getProperty(matches[1]);
if (property) {
out = out.replace(new RegExp("%" + matches[1] + "%", "g"), property);
}
}
}
return out;
}
}
);
application.put("CLOUD_CONF", cloudConf);
}
return cloudConf;
}();

@ -72,14 +72,15 @@
Location
</label>
<br>
<div class="row" >
<div class="row">
<div id="locationInputField" class=" col-md-10 form-group wr-input-control">
<input type="text" id="location" class="form-control"/>
<br>
<span class=" locationError hidden glyphicon glyphicon-remove form-control-feedback"></span>
<label class="error usernameEmpty hidden" for="summary">This field is required.</label>
<label class="error usernameEmpty hidden" for="summary">This field is
required.</label>
</div>
<div class= "col-md-2 form-group wr-input-control col-fixed-right">
<div class="col-md-2 form-group wr-input-control col-fixed-right">
<button id="device-search-btn" class="wr-btn-search ">Search</button>
</div>
</div>
@ -96,6 +97,7 @@
</div>
</div>
</div>
</div>
<!-- /content -->
<div id="group-error-content" class="hide">
<div class="modal-content">
@ -149,8 +151,6 @@
</div>
</div>
<!-- / result content -->
</div>
</div>
</div>
<!-- /content/body -->

@ -460,12 +460,12 @@ function loadDevices(searchType, searchParam) {
$("#loading-content").remove();
attachDeviceEvents();
// Temporary disable
/*if($('.advance-search').length < 1){
if($('.advance-search').length < 1){
$(this).closest('.dataTables_wrapper').find('div[id$=_filter] input')
.after('<a href="'+context+'/devices/search"' +
' class="advance-search add-padding-3x">Advance Search</a>');
}*/
}
}, {
"placeholder": "Search By Device Name",

@ -55,6 +55,7 @@
<div class="col-md-12 wr-page-content">
<div>
<span id="permission" data-permission="{{permissions.list}}"></span>
<span id="isCloud" data-isCloud="{{isCloud}}"></span>
{{#if groupCount}}
<div class="container-fluid" id="group-listing" data-current-user="{{@user.username}}">
<table class="table table-striped table-hover list-table display responsive nowrap data-table table-selectable grid-view"

@ -20,6 +20,7 @@ function onRequest(context) {
var groupModule = require("/app/modules/business-controllers/group.js")["groupModule"];
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
var constants = require("/app/modules/constants.js");
var deviceMgtProps = require("/app/modules/conf-reader/main.js")["conf"];
var currentUser = session.get(constants.USER_SESSION_KEY);
var page = {};
if (currentUser) {
@ -31,5 +32,6 @@ function onRequest(context) {
page.groupCount = groupCount;
}
}
page.isCloud = deviceMgtProps.isCloud;
return page;
}

@ -285,6 +285,7 @@ function openCollapsedNav() {
* DOM ready functions.
*/
$(document).ready(function () {
/* Adding selected class for selected devices */
$(groupCheckbox).each(function () {
addGroupSelectedClass(this);

@ -16,164 +16,64 @@
under the License.
}}
<ul class="nav navbar-right float-remove-xs text-center-xs">
{{#each Main}}
<li class="visible-inline-block">
<a href="#" target="_self" title="{{@user.domain}}">
<span class="icon fw-stack fw-lg">
<i class="fw fw-organization fw-stack-1x" title=" {{@user.domain}}"></i>
</span>
<span class="hidden-xs username">
<a href="{{this.url}}" target="{{this.target}}"
{{#if this.dropDownVisible}}
class="dropdown" data-toggle="dropdown"
{{/if}}
title = "
{{#if this.isDomain }}
{{@user.domain}}
{{else}}
{{@key}}
{{/if}}
">
<span class="icon fw-stack fw-lg" {{#if this.isSupport}} style="color: #ff8c27;" {{/if}}>
<i class="{{this.icon}} fw-stack-1x" title="
{{#if this.isDomain }}
{{@user.domain}}
{{else}}
{{@key}}
{{/if}}
"></i>
</span>
</a>
</li>
<!--<li class="visible-inline-block">-->
<!--<a href="#" target="_blank" class="dropdown" data-toggle="dropdown" title="Account">-->
<!--<span class="icon fw-stack fw-lg" style="color: red">-->
<!--<i class="fw fw-resource fw-stack-1x" title="Account"></i>-->
<!--</span>-->
<!--<span class="hidden-xs" style="color: red">-->
<!--Trial 14 days to upgrade-->
<!--</span>-->
<!--<span class="caret"></span>-->
<!--</a>-->
<!--<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"-->
<!--role="menu">-->
<!--<li>-->
<!--<a title="Upgrade Now"-->
<!--href="{{upgradeNowURL}}"-->
<!--target="_self">-->
<!--<i class="fw fw-export" title="Upgrade Now"></i> Upgrade Now-->
<!--</a>-->
<!--</li>-->
<!--<li>-->
<!--<a title="Monetization"-->
<!--href="{{monetizationURL}}"-->
<!--target="_self">-->
<!--<i class="fa fa-money fa-lg" title="Monetization"></i> Monetization-->
<!--</a>-->
<!--</li>-->
<!--<li>-->
<!--<a title="Request Extension"-->
<!--href="{{requestExtensionURL}}"-->
<!--target="_blank">-->
<!--<i class="fw fw-mail" title="Request Extension"></i> Request Extension-->
<!--</a>-->
<!--</li>-->
<!--</ul>-->
<!--</li>-->
<!--<li class="visible-inline-block">-->
<!--<a href="#" target="null" class="dropdown" data-toggle="dropdown" title="App Management">-->
<!--<span class="icon fw-stack fw-lg">-->
<!--<i class="fw fw-settings fw-stack-1x" title="App Management"></i>-->
<!--</span>-->
<!--<span class="hidden-xs">-->
<!--App Management-->
<!--</span>-->
<!--<span class="caret"></span>-->
<!--</a>-->
<!--<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"-->
<!--role="menu">-->
<!--<li class="visible-inline-block">-->
<!--<a title="Mobile App Publisher" href="{{publisherURL}}"-->
<!--target="_self">-->
<!--<i class="fw fw-user" title="Mobilr App Publisher"></i> App Publisher-->
<!--</a>-->
<!--</li>-->
<!--<li class="visible-inline-block">-->
<!--<a title="App Store " href="{{storeURL}}"-->
<!--target="_self">-->
<!--<i class="fw fw-store" title="App Store"></i> App Store-->
<!--</a>-->
<!--</li>-->
<!--</ul>-->
<!--</li>-->
<li class="visible-inline-block">
<a href="{{contactUsURL}}" target="_self"
title="Support">
<span class="icon fw-stack fw-lg" style="color: #ff8c27;">
<i class="fw fw-mail fw-stack-1x" title="Support"></i>
</span>
<span class="hidden-xs" style="color: #ff8c27;">
Support
</span>
</a>
</li>
<li class="visible-inline-block">
<a href="#" target="null" class="dropdown" data-toggle="dropdown" title="Documentation">
<span class="icon fw-stack fw-lg">
<i class="fw fw-document fw-stack-1x" title="Documentation"></i>
</span>
<span class="hidden-xs">
Documentation
<span class="hidden-xs {{#if this.isDomain }} username {{/if}}">
{{#if this.isDomain }}
{{@user.domain}}
{{else}}
{{@key}}
{{/if}}
</span>
{{#if this.dropDownVisible}}
<span class="caret"></span>
{{/if}}
</a>
{{#if this.dropDownVisible}}
<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"
role="menu">
<li>
<a title="API Cloud"
href="{{apiCloudDocURL}}"
target="_blank">
<i class="fw fw-api" title="API Cloud"></i> API Cloud
</a>
</li>
<li>
<a title="App Cloud"
href="{{appCloudDocURL}}"
target="_blank">
<i class="fw fw-application" title="App Cloud"></i> App Cloud
</a>
</li>
{{#each this.dropDown}}
{{#if this.dropDown}}
<li>
<a title="Device Cloud"
href="{{deviceCloudDocURL}}"
target="_blank">
<i class="fw fw-application" title="App Cloud"></i> Device Cloud
<a title="{{@key}}"
href="{{this.url}}"
target="{{this.target}}">
<i class="{{this.icon}}" title="{{@key}}"></i> {{@key}}
</a>
</li>
<li>
<a title="API Cloud Walkthrough"
href="{{apiCloudWalkthroughURL}}"
target="_self">
<i class="fw fw-document" title="API Cloud Walkthrough"></i> API Cloud Walkthrough
</a>
</li>
{{/if}}
{{/each}}
</ul>
{{/if}}
</li>
{{/each}}
<li class="visible-inline-block">
<a href="#" class="dropdown" data-toggle="dropdown" title="user">
<a href="{{UserMenu.url}}" class="dropdown" data-toggle="dropdown" title="User">
<span class="icon fw-stack fw-lg">
<i class="fw fw-circle-outline fw-stack-2x" title="User"></i>
<i class="fw fw-user fw-stack-1x" title="User"></i>
<i class="{{UserMenu.icon}} fw-stack-1x" title="User"></i>
</span>
<span class="hidden-xs username">
{{@user.username}}</span><span class="caret"></span>
@ -181,29 +81,18 @@
<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"
role="menu">
{{#each UserMenu.dropDown}}
{{#if this.dropDown}}
<li>
<a title="Profile"
href="{{profileURL}}"
target="_self">
<i class="fw fw-user" title="Profile"></i> Profile
</a>
</li>
<li>
<a title="Change Password"
href="{{changePasswordURL}}"
target="_self">
<i class="fw fw-lock" title="Change Password"></i> Change Password
</a>
</li>
<li>
<a title="Logout" href="{{logoutURL}}"
target="_self">
<i class="fw fw-sign-out" title="Logout"></i> Logout
<a title="{{@key}}"
href="{{this.url}}"
target="{{target}}">
<i class="{{this.icon}}" title="{{@key}}"></i> {{@key}}
</a>
</li>
{{/if}}
{{/each}}
</ul>
</li>
<li class="visible-inline-block cloud-menu">
@ -219,47 +108,34 @@
</li>
</ul>
<div class="cloud-menu-content hide">
<div id="popover-head" class="hide">Navigate to Cloud</div>
<div id="popover-content" class="hide">
<div class="cloud-apps">
<a href="{{apiCloudURL}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="fw fw-api fw-3x"></i>
<div class="cloud-name">API Cloud</div>
</a>
<a href="{{appCloudURL}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="fw fw-application fw-3x"></i>
<div class="cloud-name">App Cloud</div>
</a>
<a href="{{deviceCloudURL}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="fw fw-mobile fw-3x"></i>
<div class="cloud-name">Device Cloud</div>
</a>
<div class="clearfix"></div><!-- to make seperate -->
{{#each Expand.Clouds}}
{{#if this.dropDown}}
<a href="{{this.url}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="{{this.icon}}"></i>
<div class="cloud-name">{{@key}}</div>
</a>
{{/if}}
{{/each}}
<div class="clearfix"></div>
</div>
<div class="cloud-actions">
<h3>Manage your cloud</h3>
<a href="{{oraganizationURL}}" target="_self" class="cloud-block-invert add-padding-top-3x">
<i class="fw fw-organization fw-3x"></i>
<div class="cloud-name">Organization</div>
</a>
<a href="{{membersURL}}" target="_self" class="cloud-block-invert add-padding-top-3x">
<i class="fa fa-users fa-3x"></i>
<div class="cloud-name">Members</div>
</a>
{{#each Expand.Actions}}
{{#if this.dropDown}}
<a href="{{this.url}}" target="{{this.target}}" class="cloud-block-invert add-padding-top-3x">
<i class="{{this.icon}}"></i>
<div class="cloud-name">{{@key}}</div>
</a>
{{/if}}
{{/each}}
</div>
</div>
</div>
{{#zone "bottomJs"}}
{{js "/js/user-menu.js"}}
{{/zone}}

@ -19,27 +19,65 @@
function onRequest(context) {
var constants = require("/app/modules/constants.js");
var mdmProps = require("/app/modules/conf-reader/main.js")["conf"];
var cloudProps = require("/app/modules/conf-reader/cloud.js")["conf"];
var user = context.user;
var isSuperTenant = false;
if (user.tenantId == -1234){
if (user.tenantId == -1234) {
isSuperTenant = true;
}
var viewModal = {};
viewModal.Main = cloudProps.Main;
viewModal.UserMenu = cloudProps.User;
viewModal.Expand = cloudProps.Expand;
viewModal.Main.Domain.isDomain = true;
viewModal.Main.Support.isSupport = true;
for (var key in viewModal.Main) {
var tempDropDownCheck = false;
for (var sub_key in viewModal.Main[key].dropDown) {
if (viewModal.Main[key].dropDown[sub_key].dropDown == null ||
viewModal.Main[key].dropDown[sub_key].dropDown == true ||
viewModal.Main[key].dropDown[sub_key].dropDown == "true") {
viewModal.Main[key].dropDown[sub_key].dropDown = true;
temp = true;
} else {
viewModal.Main[key].dropDown[sub_key].dropDown = false;
}
}
viewModal.Main[key].dropDownVisible = tempDropDownCheck;
}
var tempDropDownCheck = false;
for (var key in viewModal.UserMenu.dropDown) {
if (viewModal.UserMenu.dropDown[key].dropDown == null ||
viewModal.UserMenu.dropDown[key].dropDown == true ||
viewModal.UserMenu.dropDown[key].dropDown == "true") {
viewModal.UserMenu.dropDown[key].dropDown = true;
tempDropDownCheck = true;
} else {
viewModal.UserMenu.dropDown[key].dropDown = false;
}
}
viewModal.UserMenu.dropDownVisible = tempDropDownCheck;
tempDropDownCheck = false;
for (var key in viewModal.Expand) {
for (var sub_key in viewModal.Expand[key]) {
if( viewModal.Expand[key][sub_key].dropDown == null ||
viewModal.Expand[key][sub_key].dropDown == true ||
viewModal.Expand[key][sub_key].dropDown == "true") {
viewModal.Expand[key][sub_key].dropDown = true;
tempDropDownCheck = true;
} else {
viewModal.Expand[key][sub_key].dropDown = false;
}
}
}
viewModal.isSuperTenant = isSuperTenant;
viewModal.USER_SESSION_KEY = session.get(constants["USER_SESSION_KEY"]);
viewModal.isCloud = mdmProps.isCloud;
viewModal.contactUsURL = mdmProps.cloudConfig.contactUsURL;
viewModal.apiCloudDocURL = mdmProps.cloudConfig.apiCloudDocURL;
viewModal.appCloudDocURL = mdmProps.cloudConfig.appCloudDocURL;
viewModal.deviceCloudDocURL = mdmProps.cloudConfig.deviceCloudDocURL;
viewModal.apiCloudWalkthroughURL = mdmProps.cloudConfig.apiCloudWalkthroughURL;
viewModal.profileURL = mdmProps.cloudConfig.profileURL;
viewModal.changePasswordURL = mdmProps.cloudConfig.changePasswordURL;
viewModal.logoutURL = mdmProps.cloudConfig.logoutURL;
viewModal.apiCloudURL = mdmProps.cloudConfig.apiCloudURL;
viewModal.appCloudURL = mdmProps.cloudConfig.appCloudURL;
viewModal.deviceCloudURL = mdmProps.cloudConfig.deviceCloudURL;
viewModal.oraganizationURL = mdmProps.cloudConfig.oraganizationURL;
viewModal.membersURL = mdmProps.cloudConfig.membersURL;
return viewModal;
}

@ -17,9 +17,9 @@
}}
{{#if isCloud}}
{{#zone "productName"}}WSO2 Cloud{{/zone}}
{{#zone "productNameResponsive"}} Cloud{{/zone}}
{{#zone "productName"}}Cloud{{/zone}}
{{#zone "productNameResponsive"}}Cloud{{/zone}}
{{else}}
{{#zone "productName"}}WSO2 IoT Server{{/zone}}
{{#zone "productNameResponsive"}} IoT Server{{/zone}}
{{#zone "productName"}}IoT Server{{/zone}}
{{#zone "productNameResponsive"}} IoTS{{/zone}}
{{/if}}

@ -6360,6 +6360,7 @@ ul.tiles .icon {
#device-location{
height:450px;
width: 100%;
margin-bottom:0px;
}
#device-location .leaflet-popup-content-wrapper{

Loading…
Cancel
Save