application-manager-new
charitha 8 years ago
parent f071ce0d84
commit 66470f145b

@ -1,4 +1,3 @@
<iframe src="{{dashboardserverURL}}/portal/gadgets/connected-cup-analytics/landing" width="100%" height="1700" frameBorder="0"></iframe> <iframe src="{{dashboardserverURL}}/portal/gadgets/connected-cup-analytics/landing" width="100%" height="1700" frameBorder="0"></iframe>
<style> <style>

@ -21,25 +21,25 @@ function onRequest(context) {
var devices = context.unit.params.devices; var devices = context.unit.params.devices;
var deviceType = context.uriParams.deviceType; var deviceType = context.uriParams.deviceType;
var deviceId = request.getParameter("deviceId"); var deviceId = request.getParameter('deviceId');
if (devices) { if (devices) {
return { return {
"devices": stringify(devices), 'devices': stringify(devices),
"backendApiUri": devicemgtProps["httpsURL"] + "/connectedcup/stats/", 'backendApiUri': devicemgtProps['httpsURL'] + '/connectedcup/stats/',
"dashboardserverURL" : devicemgtProps["dashboardserverURL"] 'dashboardserverURL': devicemgtProps['dashboardserverURL']
}; };
} else if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) { } else if (deviceType && deviceId) {
var deviceModule = require("/app/modules/device.js").deviceModule; var deviceModule = require('/app/modules/device.js').deviceModule;
var device = deviceModule.viewDevice(deviceType, deviceId); var device = deviceModule.viewDevice(deviceType, deviceId);
if (device && device.status != "error") { if (device && device.status != 'error') {
return { return {
"device": device, 'device': device,
"backendApiUri": devicemgtProps["httpsURL"] + "/connectedcup/stats/" + deviceId, 'backendApiUri': devicemgtProps['httpsURL'] + '/connectedcup/stats/' + deviceId,
"dashboardserverURL" : devicemgtProps["dashboardserverURL"] 'dashboardserverURL': devicemgtProps['dashboardserverURL']
}; };
} else { } else {
response.sendError(404, "Device Id " + deviceId + " of type " + deviceType + " cannot be found!"); response.sendError(404, 'Device Id ' + deviceId + ' of type ' + deviceType + ' cannot be found!');
exit(); exit();
} }
} }

@ -16,35 +16,35 @@
* under the License. * under the License.
*/ */
var palette = new Rickshaw.Color.Palette({scheme: "classic9"}); var palette = new Rickshaw.Color.Palette({scheme: 'classic9'});
function drawGraph_connectedcup(from, to) { function drawGraph_connectedcup(from, to) {
$("#y_axis-temperature").html(""); $('#y_axis-temperature').html('');
$("#smoother-temperature").html(""); $('#smoother-temperature').html('');
$("#legend-temperature").html(""); $('#legend-temperature').html('');
$("#chart-temperature").html(""); $('#chart-temperature').html('');
$("#x_axis-temperature").html(""); $('#x_axis-temperature').html('');
$("#slider-temperature").html(""); $('#slider-temperature').html('');
$("#y_axis-coffeelevel").html(""); $('#y_axis-coffeelevel').html('');
$("#smoother-coffeelevel").html(""); $('#smoother-coffeelevel').html('');
$("#legend-coffeelevel").html(""); $('#legend-coffeelevel').html('');
$("#chart-coffeelevel").html(""); $('#chart-coffeelevel').html('');
$("#x_axis-coffeelevel").html(""); $('#x_axis-coffeelevel').html('');
$("#slider-coffeelevel").html(""); $('#slider-coffeelevel').html('');
var devices = $("#connectedcup-details").data("devices"); var devices = $('#connectedcup-details').data('devices');
var tzOffset = new Date().getTimezoneOffset() * 60; var tzOffset = new Date().getTimezoneOffset() * 60;
var chartWrapperElmId = "#connectedcup-div-chart"; var chartWrapperElmId = '#connectedcup-div-chart';
var graphWidth = $(chartWrapperElmId).width() - 50; var graphWidth = $(chartWrapperElmId).width() - 50;
var temperatureGraphConfig = { var temperatureGraphConfig = {
element: document.getElementById("chart-temperature"), element: document.getElementById('chart-temperature'),
width: graphWidth, width: graphWidth,
height: 400, height: 400,
strokeWidth: 2, strokeWidth: 2,
renderer: 'line', renderer: 'line',
interpolation: "linear", interpolation: 'linear',
unstack: true, unstack: true,
stack: false, stack: false,
xScale: d3.time.scale(), xScale: d3.time.scale(),
@ -53,12 +53,12 @@ function drawGraph_connectedcup(from, to) {
}; };
var coffeelevelGraphConfig = { var coffeelevelGraphConfig = {
element: document.getElementById("chart-coffeelevel"), element: document.getElementById('chart-coffeelevel'),
width: graphWidth, width: graphWidth,
height: 400, height: 400,
strokeWidth: 2, strokeWidth: 2,
renderer: 'line', renderer: 'line',
interpolation: "linear", interpolation: 'linear',
unstack: true, unstack: true,
stack: false, stack: false,
xScale: d3.time.scale(), xScale: d3.time.scale(),
@ -96,7 +96,7 @@ function drawGraph_connectedcup(from, to) {
x: parseInt(new Date().getTime() / 1000), x: parseInt(new Date().getTime() / 1000),
y: 0 y: 0
}], }],
'name': $("#connectedcup-details").data("devicename") 'name': $('#connectedcup-details').data('devicename')
}); });
coffeelevelGraphConfig['series'].push( coffeelevelGraphConfig['series'].push(
{ {
@ -105,7 +105,7 @@ function drawGraph_connectedcup(from, to) {
x: parseInt(new Date().getTime() / 1000), x: parseInt(new Date().getTime() / 1000),
y: 0 y: 0
}], }],
'name': $("#connectedcup-details").data("devicename") 'name': $('#connectedcup-details').data('devicename')
}); });
} }
@ -130,7 +130,7 @@ function drawGraph_connectedcup(from, to) {
var yAxisTemperature = new Rickshaw.Graph.Axis.Y({ var yAxisTemperature = new Rickshaw.Graph.Axis.Y({
graph: temperatureGraph, graph: temperatureGraph,
orientation: 'left', orientation: 'left',
element: document.getElementById("y_axis-temperature"), element: document.getElementById('y_axis-temperature'),
width: 40, width: 40,
height: 410 height: 410
}); });
@ -140,7 +140,7 @@ function drawGraph_connectedcup(from, to) {
var yAxisCoffeelevel = new Rickshaw.Graph.Axis.Y({ var yAxisCoffeelevel = new Rickshaw.Graph.Axis.Y({
graph: coffeelevelGraph, graph: coffeelevelGraph,
orientation: 'left', orientation: 'left',
element: document.getElementById("y_axis-coffeelevel"), element: document.getElementById('y_axis-coffeelevel'),
width: 40, width: 40,
height: 410 height: 410
}); });
@ -149,7 +149,7 @@ function drawGraph_connectedcup(from, to) {
var slider = new Rickshaw.Graph.RangeSlider.Preview({ var slider = new Rickshaw.Graph.RangeSlider.Preview({
graph: temperatureGraph, graph: temperatureGraph,
element: document.getElementById("slider-temperature") element: document.getElementById('slider-temperature')
}); });
var legend = new Rickshaw.Graph.Legend({ var legend = new Rickshaw.Graph.Legend({
@ -159,7 +159,7 @@ function drawGraph_connectedcup(from, to) {
var sliderCoffee = new Rickshaw.Graph.RangeSlider.Preview({ var sliderCoffee = new Rickshaw.Graph.RangeSlider.Preview({
graph: coffeelevelGraph, graph: coffeelevelGraph,
element: document.getElementById("slider-coffeelevel") element: document.getElementById('slider-coffeelevel')
}); });
var legendCoffee = new Rickshaw.Graph.Legend({ var legendCoffee = new Rickshaw.Graph.Legend({
@ -174,7 +174,7 @@ function drawGraph_connectedcup(from, to) {
moment((x + tzOffset) * 1000).format('Do MMM YYYY h:mm:ss a') + '</span>'; moment((x + tzOffset) * 1000).format('Do MMM YYYY h:mm:ss a') + '</span>';
var swatch = '<span class="detail_swatch" style="background-color: ' + var swatch = '<span class="detail_swatch" style="background-color: ' +
series.color + '"></span>'; series.color + '"></span>';
return swatch + series.name + ": " + parseInt(y) + '<br>' + date; return swatch + series.name + ': ' + parseInt(y) + '<br>' + date;
} }
}); });
@ -185,7 +185,7 @@ function drawGraph_connectedcup(from, to) {
moment((x + tzOffset) * 1000).format('Do MMM YYYY h:mm:ss a') + '</span>'; moment((x + tzOffset) * 1000).format('Do MMM YYYY h:mm:ss a') + '</span>';
var swatch = '<span class="detail_swatch" style="background-color: ' + var swatch = '<span class="detail_swatch" style="background-color: ' +
series.color + '"></span>'; series.color + '"></span>';
return swatch + series.name + ": " + parseInt(y) + '<br>' + date; return swatch + series.name + ': ' + parseInt(y) + '<br>' + date;
} }
}); });
@ -224,7 +224,7 @@ function drawGraph_connectedcup(from, to) {
if (devices) { if (devices) {
getData(); getData();
} else { } else {
var backendApiUrl = $("#connectedcup-div-chart").data("backend-api-url") + "/sensors/temperature" + "?from=" + from + "&to=" + to; var backendApiUrl = $('#connectedcup-div-chart').data('backend-api-url') + '/sensors/temperature' + '?from=' + from + '&to=' + to;
var successCallback = function (data) { var successCallback = function (data) {
if (data) { if (data) {
drawTemperatureLineGraph(JSON.parse(data)); drawTemperatureLineGraph(JSON.parse(data));
@ -234,8 +234,8 @@ function drawGraph_connectedcup(from, to) {
console.log(message); console.log(message);
}); });
var coffeeLevelApiUrl = $("#connectedcup-div-chart").data("backend-api-url") + "/sensors/coffeelevel" var coffeeLevelApiUrl = $('#connectedcup-div-chart').data('backend-api-url') + '/sensors/coffeelevel'
+ "?from=" + from + "&to=" + to; + '?from=' + from + '&to=' + to;
var successCallbackCoffeeLevel = function (data) { var successCallbackCoffeeLevel = function (data) {
if (data) { if (data) {
drawCoffeeLevelLineGraph(JSON.parse(data)); drawCoffeeLevelLineGraph(JSON.parse(data));
@ -250,9 +250,9 @@ function drawGraph_connectedcup(from, to) {
if (deviceIndex >= devices.length) { if (deviceIndex >= devices.length) {
return; return;
} }
var backendApiUrl = $("#connectedcup-div-chart").data("backend-api-url") + devices[deviceIndex].deviceIdentifier var backendApiUrl = $('#connectedcup-div-chart').data('backend-api-url') + devices[deviceIndex].deviceIdentifier
+ "/sensors/temperature" + '/sensors/temperature'
+ "?from=" + from + "&to=" + to; + '?from=' + from + '&to=' + to;
var successCallback = function (data) { var successCallback = function (data) {
if (data) { if (data) {
drawTemperatureLineGraph(JSON.parse(data)); drawTemperatureLineGraph(JSON.parse(data));
@ -265,8 +265,8 @@ function drawGraph_connectedcup(from, to) {
deviceIndex++; deviceIndex++;
getData(); getData();
}); });
var coffeeLevelApiUrl = $("#connectedcup-div-chart").data("backend-api-url") + devices[deviceIndex].deviceIdentifier var coffeeLevelApiUrl = $('#connectedcup-div-chart').data('backend-api-url') + devices[deviceIndex].deviceIdentifier
+ "/sensors/coffeelevel" + "?from=" + from + "&to=" + to; + '/sensors/coffeelevel' + '?from=' + from + '&to=' + to;
var successCallbackCoffeeLevel = function (data) { var successCallbackCoffeeLevel = function (data) {
if (data) { if (data) {

@ -18,28 +18,27 @@
function onRequest(context) { function onRequest(context) {
var log = new Log("detail.js"); var log = new Log('detail.js');
var deviceType = context.uriParams.deviceType; var deviceType = context.uriParams.deviceType;
var deviceId = request.getParameter("id"); var deviceId = request.getParameter('id');
var property = require("process").getProperty;
var devicemgtProps = require('/app/conf/devicemgt-props.js').config(); var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) { if (deviceType && deviceId) {
var deviceModule = require("/app/modules/device.js").deviceModule; var deviceModule = require('/app/modules/device.js').deviceModule;
var device = deviceModule.viewDevice(deviceType, deviceId); var device = deviceModule.viewDevice(deviceType, deviceId);
if (device && device.status != "error") { if (device && device.status != 'error') {
log.info(device); log.info(device);
var constants = require("/app/modules/constants.js"); var constants = require('/app/modules/constants.js');
var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER); var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER);
var token = ""; var token = '';
if (tokenPair) { if (tokenPair) {
token = tokenPair.accessToken; token = tokenPair.accessToken;
} }
device.accessToken = token; device.accessToken = token;
device.ip = devicemgtProps["httpsWebURL"]; device.ip = devicemgtProps['httpsWebURL'];
return {"device": device}; return {'device': device};
} }
} }
} }

@ -17,17 +17,16 @@
*/ */
function onRequest(context) { function onRequest(context) {
var log = new Log("stats.js");
var device = context.unit.params.device; var device = context.unit.params.device;
var devicemgtProps = require('/app/conf/devicemgt-props.js').config(); var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
var constants = require("/app/modules/constants.js"); var constants = require('/app/modules/constants.js');
var websocketEndpoint = devicemgtProps["wssURL"].replace("https", "wss"); var websocketEndpoint = devicemgtProps['wssURL'].replace('https', 'wss');
var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER); var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER);
var token = ""; var token = '';
if (tokenPair) { if (tokenPair) {
token = tokenPair.accessToken; token = tokenPair.accessToken;
} }
websocketEndpoint = websocketEndpoint + "/secured-outputui/org.wso2.iot.connectedcup/1.0.0?" + websocketEndpoint = websocketEndpoint + '/secured-outputui/org.wso2.iot.connectedcup/1.0.0?' +
"token="+ token +"&deviceId=" + device.deviceIdentifier; 'token=' + token + '&deviceId=' + device.deviceIdentifier;
return {"device": device, "websocketEndpoint" : websocketEndpoint}; return {'device': device, 'websocketEndpoint': websocketEndpoint};
} }

@ -23,7 +23,7 @@ var coffeeData = [];
var temperature = 0; var temperature = 0;
var coffeelevel = 0; var coffeelevel = 0;
var lastTime = 0; var lastTime = 0;
var palette = new Rickshaw.Color.Palette({scheme: "classic9"}); var palette = new Rickshaw.Color.Palette({scheme: 'classic9'});
$(window).load(function () { $(window).load(function () {
var tNow = new Date().getTime() / 1000; var tNow = new Date().getTime() / 1000;
@ -39,20 +39,20 @@ $(window).load(function () {
} }
graph = new Rickshaw.Graph({ graph = new Rickshaw.Graph({
element: document.getElementById("chart"), element: document.getElementById('chart'),
width: $("#div-chart").width() - 50, width: $('#div-chart').width() - 50,
height: 300, height: 300,
renderer: "line", renderer: 'line',
padding: {top: 0.2, left: 0.0, right: 0.0, bottom: 0.2}, padding: {top: 0.2, left: 0.0, right: 0.0, bottom: 0.2},
xScale: d3.time.scale(), xScale: d3.time.scale(),
series: [{ series: [{
'color': palette.color(), 'color': palette.color(),
'data': coffeeData, 'data': coffeeData,
'name': "Coffee Level" 'name': 'Coffee Level'
},{ }, {
'color': palette.color(), 'color': palette.color(),
'data': temperatureData, 'data': temperatureData,
'name': "Temperature" 'name': 'Temperature'
}] }]
}); });
@ -77,11 +77,11 @@ $(window).load(function () {
formatter: function (series, x, y) { formatter: function (series, x, y) {
var date = '<span class="date">' + moment(x * 1000).format('Do MMM YYYY h:mm:ss a') + '</span>'; var date = '<span class="date">' + moment(x * 1000).format('Do MMM YYYY h:mm:ss a') + '</span>';
var swatch = '<span class="detail_swatch" style="background-color: ' + series.color + '"></span>'; var swatch = '<span class="detail_swatch" style="background-color: ' + series.color + '"></span>';
return swatch + series.name + ": " + parseInt(y) + '<br>' + date; return swatch + series.name + ': ' + parseInt(y) + '<br>' + date;
} }
}); });
var websocketUrl = $("#div-chart").data("websocketurl"); var websocketUrl = $('#div-chart').data('websocketurl');
connect(websocketUrl) connect(websocketUrl)
}); });
@ -103,9 +103,9 @@ function connect(target) {
var dataPoint = JSON.parse(event.data); var dataPoint = JSON.parse(event.data);
if (lastTime < parseInt(dataPoint[4]) / 1000) { if (lastTime < parseInt(dataPoint[4]) / 1000) {
lastTime = parseInt(dataPoint[4]) / 1000; lastTime = parseInt(dataPoint[4]) / 1000;
if (dataPoint[3] == "temperature") { if (dataPoint[3] == 'temperature') {
temperature = parseFloat(dataPoint[5]); temperature = parseFloat(dataPoint[5]);
} else if (dataPoint[3] == "coffeelevel") { } else if (dataPoint[3] == 'coffeelevel') {
coffeelevel = parseFloat(dataPoint[6]); coffeelevel = parseFloat(dataPoint[6]);
} }
temperatureData.push({ temperatureData.push({

@ -1,21 +1,3 @@
/*
* 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.
*/
//! moment.js //! moment.js
//! version : 2.10.2 //! version : 2.10.2
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! authors : Tim Wood, Iskren Chernev, Moment.js contributors

@ -16,10 +16,10 @@
* under the License. * under the License.
*/ */
var modalPopup = ".wr-modalpopup"; var modalPopup = '.wr-modalpopup';
var modalPopupContainer = modalPopup + " .modalpopup-container"; var modalPopupContainer = modalPopup + ' .modalpopup-container';
var modalPopupContent = modalPopup + " .modalpopup-content"; var modalPopupContent = modalPopup + ' .modalpopup-content';
var body = "body"; var body = 'body';
/* /*
* set popup maximum height function. * set popup maximum height function.
@ -50,16 +50,16 @@ function showPopup() {
$('label[for=deviceName]').remove(); $('label[for=deviceName]').remove();
} }
}); });
var deviceType = ""; var deviceType = '';
$('.deviceType').each(function () { $('.deviceType').each(function () {
if (this.value != "") { if (this.value != '') {
deviceType = this.value; deviceType = this.value;
} }
}); });
if (deviceType == 'digitaldisplay') { if (deviceType == 'digitaldisplay') {
$('.sketchType').remove(); $('.sketchType').remove();
$('input[name="sketchType"][value="digitaldisplay"]').prop('checked', true); $('input[name="sketchType"][value="digitaldisplay"]').prop('checked', true);
$("label[for='digitaldisplay']").text("Simple Agent"); $('label[for="digitaldisplay"]').text('Simple Agent');
} else { } else {
$('.sketchTypes').remove(); $('.sketchTypes').remove();
} }
@ -88,17 +88,17 @@ function attachEvents() {
* when a user clicks on "Download" link * when a user clicks on "Download" link
* on Device Management page in WSO2 DC Console. * on Device Management page in WSO2 DC Console.
*/ */
$("a.download-link").click(function () { $('a.download-link').click(function () {
var sketchType = $(this).data("sketchtype"); var sketchType = $(this).data('sketchtype');
var deviceType = $(this).data("devicetype"); var deviceType = $(this).data('devicetype');
var downloadDeviceAPI = "/devicemgt/api/devices/sketch/generate_link"; var downloadDeviceAPI = '/devicemgt/api/devices/sketch/generate_link';
var payload = {"sketchType": sketchType, "deviceType": deviceType}; var payload = {'sketchType': sketchType, 'deviceType': deviceType};
$(modalPopupContent).html($('#download-device-modal-content').html()); $(modalPopupContent).html($('#download-device-modal-content').html());
showPopup(); showPopup();
var deviceName; var deviceName;
$("a#download-device-download-link").click(function () { $('a#download-device-download-link').click(function () {
$('.new-device-name').each(function () { $('.new-device-name').each(function () {
if (this.value != "") { if (this.value != '') {
deviceName = this.value; deviceName = this.value;
} }
}); });
@ -124,7 +124,7 @@ function attachEvents() {
} }
}); });
$("a#download-device-cancel-link").click(function () { $('a#download-device-cancel-link').click(function () {
hidePopup(); hidePopup();
}); });
@ -145,7 +145,7 @@ function downloadAgent() {
payload.name = $inputs[0].value; payload.name = $inputs[0].value;
payload.owner = $inputs[1].value; payload.owner = $inputs[1].value;
var connectedCupRegisterURL = "/connectedcup/device/register?name=" + encodeURI(payload.name); var connectedCupRegisterURL = '/connectedcup/device/register?name=' + encodeURI(payload.name);
invokerUtil.post( invokerUtil.post(
connectedCupRegisterURL, connectedCupRegisterURL,
@ -160,7 +160,7 @@ function downloadAgent() {
var deviceName; var deviceName;
$('.new-device-name').each(function () { $('.new-device-name').each(function () {
if (this.value != "") { if (this.value != '') {
deviceName = this.value; deviceName = this.value;
} }
}); });
@ -177,28 +177,28 @@ function doAction(data) {
document.write(data); document.write(data);
} }
if (data.status == "200") { if (data.status == 200) {
$(modalPopupContent).html($('#download-device-modal-content-links').html()); $(modalPopupContent).html($('#download-device-modal-content-links').html());
$("input#download-device-url").val(data.responseText); $('input#download-device-url').val(data.responseText);
$("input#download-device-url").focus(function () { $('input#download-device-url').focus(function () {
$(this).select(); $(this).select();
}); });
showPopup(); showPopup();
} else if (data.status == "401") { } else if (data.status == 401) {
$(modalPopupContent).html($('#device-401-content').html()); $(modalPopupContent).html($('#device-401-content').html());
$("#device-401-link").click(function () { $('#device-401-link').click(function () {
window.location = "/devicemgt/login"; window.location = '/devicemgt/login';
}); });
showPopup(); showPopup();
} else if (data == "403") { } else if (data == 403) {
$(modalPopupContent).html($('#device-403-content').html()); $(modalPopupContent).html($('#device-403-content').html());
$("#device-403-link").click(function () { $('#device-403-link').click(function () {
window.location = "/devicemgt/login"; window.location = '/devicemgt/login';
}); });
showPopup(); showPopup();
} else { } else {
$(modalPopupContent).html($('#device-unexpected-error-content').html()); $(modalPopupContent).html($('#device-unexpected-error-content').html());
$("a#device-unexpected-error-link").click(function () { $('a#device-unexpected-error-link').click(function () {
hidePopup(); hidePopup();
}); });
} }

@ -1,21 +1,3 @@
/*
* 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($) { (function($) {
$.extend($.fn, { $.extend($.fn, {

Loading…
Cancel
Save