forked from community/device-mgt-core
Merge pull request #975 from ruwany/Supun94-master
Bumping apim versions and adding topic browser4.x.x
commit
6601afcf53
@ -0,0 +1,283 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Following function would execute
|
||||||
|
* when a user clicks on the list item
|
||||||
|
* initial mode and with out select mode.
|
||||||
|
*/
|
||||||
|
function InitiateViewOption(url) {
|
||||||
|
if (!$(".select-enable-btn").text() == "Select" && !$(this).hasClass("btn")) {
|
||||||
|
url = $(this).parent().data("url");
|
||||||
|
$(location).attr('href', url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DOM ready functions.
|
||||||
|
*/
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
var permissionSet = {};
|
||||||
|
$.setPermission = function (permission) {
|
||||||
|
permissionSet[permission] = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
$.hasPermission = function (permission) {
|
||||||
|
return permissionSet[permission];
|
||||||
|
};
|
||||||
|
|
||||||
|
name = getParameterByName("name");
|
||||||
|
|
||||||
|
/* for device list sorting drop down */
|
||||||
|
$(".ctrl-filter-type-switcher").popover({
|
||||||
|
html: true,
|
||||||
|
content: function () {
|
||||||
|
return $("#content-filter-types").html();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function loadTopics(searchType, searchParam) {
|
||||||
|
|
||||||
|
var serviceURL;
|
||||||
|
if ($.hasPermission("VIEW_TOPICS")) {
|
||||||
|
serviceURL = "/api/mqtt-topics/v1.0/admin/topics";
|
||||||
|
} else {
|
||||||
|
$("#loading-content").remove();
|
||||||
|
$('#topics-table').addClass('hidden');
|
||||||
|
$('#topics-listing-status-msg').text('Permission denied.');
|
||||||
|
$("#topics-listing-status").removeClass(' hidden');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var columns = [
|
||||||
|
{
|
||||||
|
targets: 0,
|
||||||
|
data: 'localSubscribedQueueOrTopicName',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return '<div class="thumbnail icon"><img class="square-element text fw fw-bookmark" src=""/></div>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 1,
|
||||||
|
data: 'localSubscribedQueueOrTopicName',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 2,
|
||||||
|
data: 'localNumberOfMessagesRemainingForSubscriber',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 3,
|
||||||
|
data: 'localActive',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 4,
|
||||||
|
data: 'localDurable',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 5,
|
||||||
|
data: 'localSubscriberQueueName',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 6,
|
||||||
|
data: 'localSubscriptionIdentifier',
|
||||||
|
class: 'remove-padding-top viewEnabledIcon',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
var fnCreatedRow = function (row, data, dataIndex) {
|
||||||
|
$(row).attr('data-type', 'selectable');
|
||||||
|
$(row).attr('localSubscribedQueueOrTopicName', htmlspecialchars(data.localSubscribedQueueOrTopicName));
|
||||||
|
$(row).attr('localNumberOfMessagesRemainingForSubscriber', htmlspecialchars(data.localNumberOfMessagesRemainingForSubscriber));
|
||||||
|
$(row).attr('data-url', context + '/device/' + htmlspecialchars(data.localSubscribedQueueOrTopicName) + '?id=' + htmlspecialchars(data.localNumberOfMessagesRemainingForSubscriber));
|
||||||
|
|
||||||
|
var topicName = htmlspecialchars(data.localSubscribedQueueOrTopicName);
|
||||||
|
var remainingMesgCount = htmlspecialchars(data.localNumberOfMessagesRemainingForSubscriber);
|
||||||
|
var isActive = htmlspecialchars(data.localActive);
|
||||||
|
var isDurable = htmlspecialchars(data.localDurable);
|
||||||
|
var localSubscriberQueueName = htmlspecialchars(data.localSubscriberQueueName);
|
||||||
|
var subscriptionIdentifier = htmlspecialchars(data.localSubscriptionIdentifier);
|
||||||
|
$.each($('td', row), function (colIndex) {
|
||||||
|
switch (colIndex) {
|
||||||
|
case 1:
|
||||||
|
$(this).attr('data-grid-label', "Topic Name");
|
||||||
|
$(this).attr('data-search', topicName);
|
||||||
|
$(this).attr('data-display', topicName);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$(this).attr('data-grid-label', "Remaining Messages");
|
||||||
|
$(this).attr('data-search', remainingMesgCount);
|
||||||
|
$(this).attr('data-display', remainingMesgCount);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$(this).attr('data-grid-label', "Active");
|
||||||
|
$(this).attr('data-search', isActive);
|
||||||
|
$(this).attr('data-display', isActive);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
$(this).attr('data-grid-label', "Durable");
|
||||||
|
$(this).attr('data-search', isDurable);
|
||||||
|
$(this).attr('data-display', isDurable);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
$(this).attr('data-grid-label', "Subscriber Queue Name");
|
||||||
|
$(this).attr('data-search', localSubscriberQueueName);
|
||||||
|
$(this).attr('data-display', localSubscriberQueueName);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
$(this).attr('data-grid-label', "SubscriptionIdentifier");
|
||||||
|
$(this).attr('data-search', subscriptionIdentifier);
|
||||||
|
$(this).attr('data-display', subscriptionIdentifier);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function htmlspecialchars(text) {
|
||||||
|
return jQuery('<div/>').text(text).html();
|
||||||
|
}
|
||||||
|
|
||||||
|
var dataFilter = function (data) {
|
||||||
|
data = JSON.parse(data);
|
||||||
|
var objects = [];
|
||||||
|
$(data.subscriptions).each(function (index) {
|
||||||
|
objects.push(
|
||||||
|
{
|
||||||
|
localSubscribedQueueOrTopicName: data.subscriptions[index].localSubscribedQueueOrTopicName,
|
||||||
|
localNumberOfMessagesRemainingForSubscriber: data.subscriptions[index].localNumberOfMessagesRemainingForSubscriber,
|
||||||
|
localActive: data.subscriptions[index].localActive,
|
||||||
|
localDurable: data.subscriptions[index].localDurable,
|
||||||
|
localSubscriberQueueName: data.subscriptions[index].localSubscriberQueueName,
|
||||||
|
localSubscriptionIdentifier: data.subscriptions[index].localSubscriptionIdentifier,
|
||||||
|
name: data.subscriptions[index].localSubscribedQueueOrTopicName
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
var json = {
|
||||||
|
"recordsTotal": data.count,
|
||||||
|
"recordsFiltered": data.count,
|
||||||
|
"data": objects
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify(json);
|
||||||
|
};
|
||||||
|
|
||||||
|
$('#topics-grid').datatables_extended_serverside_paging(
|
||||||
|
null,
|
||||||
|
serviceURL,
|
||||||
|
dataFilter,
|
||||||
|
columns,
|
||||||
|
fnCreatedRow,
|
||||||
|
function () {
|
||||||
|
$(".icon .text").res_text(0.2);
|
||||||
|
$('#topics-grid').removeClass('hidden');
|
||||||
|
$("#loading-content").remove();
|
||||||
|
}, {
|
||||||
|
"placeholder": "Search By Topic Name",
|
||||||
|
"searchKey": "name"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DOM ready functions.
|
||||||
|
*/
|
||||||
|
$(document).ready(function () {
|
||||||
|
/* Adding selected class for selected devices */
|
||||||
|
var permissionList = $("#permission").data("permission");
|
||||||
|
for (var key in permissionList) {
|
||||||
|
if (permissionList.hasOwnProperty(key)) {
|
||||||
|
$.setPermission(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loadTopics();
|
||||||
|
$(".dataTables_toolbar").css("display", "none");
|
||||||
|
|
||||||
|
/* for topic list sorting drop down */
|
||||||
|
$(".ctrl-filter-type-switcher").popover({
|
||||||
|
html: true,
|
||||||
|
content: function () {
|
||||||
|
return $("#content-filter-types").html();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* for data tables*/
|
||||||
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
|
|
||||||
|
$("[data-toggle=popover]").popover();
|
||||||
|
|
||||||
|
$(".ctrl-filter-type-switcher").popover({
|
||||||
|
html: true,
|
||||||
|
content: function () {
|
||||||
|
return $('#content-filter-types').html();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#nav').affix({
|
||||||
|
offset: {
|
||||||
|
top: $('header').height()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var modalPopup = ".modal";
|
||||||
|
var modalPopupContainer = modalPopup + " .modal-content";
|
||||||
|
var modalPopupContent = modalPopup + " .modal-content";
|
||||||
|
var body = "body";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set popup maximum height function.
|
||||||
|
*/
|
||||||
|
function setPopupMaxHeight() {
|
||||||
|
$(modalPopupContent).css('max-height', ($(body).height() - ($(body).height() / 100 * 30)));
|
||||||
|
$(modalPopupContainer).css('margin-top', (-($(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();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getParameterByName(name) {
|
||||||
|
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||||||
|
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
|
||||||
|
results = regex.exec(location.search);
|
||||||
|
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||||
|
}
|
@ -0,0 +1,131 @@
|
|||||||
|
{{!
|
||||||
|
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.
|
||||||
|
}}`
|
||||||
|
{{unit "cdmf.unit.ui.title" pageTitle="MQTT Dashboard"}}
|
||||||
|
|
||||||
|
{{unit "cdmf.unit.data-tables-extended"}}
|
||||||
|
{{unit "cdmf.unit.lib.ui-permissions-utility"}}
|
||||||
|
|
||||||
|
{{#zone "breadcrumbs"}}
|
||||||
|
<li>
|
||||||
|
<a href="{{@app.context}}/">
|
||||||
|
<i class="icon fw fw-home"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
|
<a href="{{@app.context}}/topics">
|
||||||
|
Dashboard
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">
|
||||||
|
MQTT
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
|
||||||
|
{{#zone "content"}}
|
||||||
|
<div class="wr-device-list row">
|
||||||
|
<div class="wr-hidden-operations wr-advance-operations"></div>
|
||||||
|
<div class="col-md-12 wr-page-content">
|
||||||
|
<div>
|
||||||
|
<span id="permission" data-permission="{{permissions.list}}"></span>
|
||||||
|
<div id="loading-content" class="col-centered">
|
||||||
|
<i class="fw fw-settings fw-spin fw-2x"></i>
|
||||||
|
Loading subscriptions . . .
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
<div id="topics-listing-status" class="raw hidden">
|
||||||
|
<ul style="list-style-type: none;">
|
||||||
|
<li class="message message-info">
|
||||||
|
<h4>
|
||||||
|
<i class="icon fw fw-info"></i>
|
||||||
|
<a id="topics-listing-status-msg"></a>
|
||||||
|
</h4>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div id="topics-table">
|
||||||
|
<table class="table table-striped table-hover list-table display responsive nowrap data-table hidden"
|
||||||
|
id="topics-grid">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-row">
|
||||||
|
<th class="no-sort"></th>
|
||||||
|
<th>By TopicName</th>
|
||||||
|
<th>By RemainingMsgCount</th>
|
||||||
|
<th>By Active</th>
|
||||||
|
<th>By Durable</th>
|
||||||
|
<th>By SubscriberQueueName</th>
|
||||||
|
<th>By SubscriptionIdentifier</th>
|
||||||
|
</tr>
|
||||||
|
<tr class="filter-row filter-box">
|
||||||
|
<th class="no-sort"></th>
|
||||||
|
<th data-for="By TopicName" class="text-filter"></th>
|
||||||
|
<th data-for="By RemainingMessageCount" class="text-filter"></th>
|
||||||
|
<th data-for="By Active" class="select-filter"></th>
|
||||||
|
<th data-for="By Durable" class="select-filter data-platform"></th>
|
||||||
|
<th data-for="By SubscriberQueueName" class="select-filter"></th>
|
||||||
|
<th data-for="By SubscriptionIdentifier" class="select-filter"></th>
|
||||||
|
<!--<th class="no-sort"></th>-->
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="ast-container">
|
||||||
|
|
||||||
|
<br class="c-both" />
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<br class="c-both" />
|
||||||
|
<div id="content-filter-types" style="display: none">
|
||||||
|
<div class="sort-title">Sort By</div>
|
||||||
|
<div class="sort-options">
|
||||||
|
<a href="#">By SubscribedQueueOrTopicName<span class="ico-sort-asc"></span></a>
|
||||||
|
<a href="#">By localNumberOfMessagesRemainingForSubscriber</a>
|
||||||
|
<a href="#">By localActive</a>
|
||||||
|
<a href="#">By localDurable</a>
|
||||||
|
<a href="#">By localSubscriberQueueName</a>
|
||||||
|
<a href="#">By localSubscriptionIdentifier</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
{{#zone "bottomJs"}}
|
||||||
|
<script id="device-listing" data-current-user="{{@user.username}}" data-device-types="{{deviceTypes}}"
|
||||||
|
type="text/x-handlebars-template"></script>
|
||||||
|
{{js "js/topic-listing.js"}}
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
{{#zone "topCss"}}
|
||||||
|
<style>
|
||||||
|
.select2-dropdown {
|
||||||
|
z-index: 999999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wr-input-control {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-selection__choice {
|
||||||
|
font-size: medium;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{{/zone}}
|
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* 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(context) {
|
||||||
|
var constants = require("/app/modules/constants.js");
|
||||||
|
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
|
||||||
|
var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"];
|
||||||
|
var groupModule = require("/app/modules/business-controllers/group.js")["groupModule"];
|
||||||
|
|
||||||
|
var groupId = request.getParameter("groupId");
|
||||||
|
|
||||||
|
var viewModel = {};
|
||||||
|
var title = "Topics";
|
||||||
|
viewModel.title = title;
|
||||||
|
var currentUser = session.get(constants.USER_SESSION_KEY);
|
||||||
|
if (currentUser) {
|
||||||
|
viewModel.permissions = {};
|
||||||
|
var uiPermissions = userModule.getUIPermissions();
|
||||||
|
viewModel.permissions.list = stringify(uiPermissions);
|
||||||
|
if (uiPermissions.VIEW_TOPICS) {
|
||||||
|
viewModel.permissions.enroll = true;
|
||||||
|
}
|
||||||
|
viewModel.currentUser = currentUser;
|
||||||
|
var deviceCount = 1;
|
||||||
|
viewModel.deviceCount = deviceCount;
|
||||||
|
var utility = require("/app/modules/utility.js").utility;
|
||||||
|
}
|
||||||
|
return viewModel;
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0.0",
|
||||||
|
"uri": "/topics",
|
||||||
|
"layout": "cdmf.layout.default"
|
||||||
|
}
|
Loading…
Reference in new issue