blob: 24c319c7e2d723ed42510edab3fe746caf23912d [file] [log] [blame]
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
/** Functionality to help building some GUI elements automatically. If used, should belong to application's view part. */
function CAutoGuiView(aViewModels, aID, aParentID)
{
"use strict";
var mID = aID;
var mParentID = aParentID;
var mViewModel = aViewModels[0];
/** public functions */
this.applicationCreated = function() {
$("#" + mParentID).append('<div id="' + mID + '"></div>');
$("#" + mID).on('click', action);
};
this.refresh = function(aFullRefresh)
{
var aData = mViewModel.getResponseElement();
if (aFullRefresh)
{
var lMainDivObj = document.getElementById(mID);
if (lMainDivObj)
{
lMainDivObj.innerHTML = null;
buildElementFromData(lMainDivObj, aData, 1, '');
}
}
else
{
buildElementFromData(null, aData, 1, '', true);
}
};
/** private functions */
function action(e)
{
var lCklickedExpandedGetData = e.target.getData;
if (lCklickedExpandedGetData != null)
{
var lOrigGetDataRef = lCklickedExpandedGetData.origRq;
var lIsContainer = e.target.id.search("_elem") > 0;
var lIsText = e.target.id.search("_txt") > 0;
mViewModel.command(lCklickedExpandedGetData, lOrigGetDataRef, e.target.innerHTML, lIsContainer, lIsText);
}
}
function buildElementFromData(p_htmlDiv, p_responseMergedRequest, p_nestingLevel, p_childDivId, p_reuseObjects, p_index)
{
var lIdStr;
var v_reuseObjects = (p_reuseObjects === true);
if (p_responseMergedRequest && p_responseMergedRequest.length) // childVals or root list
{
for (var i = 0; i < p_responseMergedRequest.length; i++)
{
lIdStr = p_childDivId + "_" + i;
if (p_childDivId === "")
lIdStr = i;
buildElementFromData(p_htmlDiv, p_responseMergedRequest[i], p_nestingLevel + 1, lIdStr, v_reuseObjects);
if (!v_reuseObjects)
addSeparatorLine(p_htmlDiv);
}
}
else if (p_responseMergedRequest && p_responseMergedRequest.node)
{
var lObj;
var lNodeText = p_responseMergedRequest.node.val /*+ " / " + p_childDivId*/;
if (v_reuseObjects)
{
lObj = document.getElementById(p_childDivId + "_txt");
if (lObj)
lObj.innerHTML = lNodeText;
}
else if (p_responseMergedRequest.getData)
{
var lTooltip = "Source: " + p_responseMergedRequest.getData.source + "\nElement: " + p_responseMergedRequest.getData.element;
if (p_responseMergedRequest.getData.ptcname && p_responseMergedRequest.getData.length > 0)
lTooltip += "\nPtcName: " + p_responseMergedRequest.getData.ptcname;
if (p_responseMergedRequest.getData.params)
for (var i = 0; i < p_responseMergedRequest.getData.params.length; i++)
lTooltip += "\nParam " + i + " - " + p_responseMergedRequest.getData.params[i].paramName + ": " + p_responseMergedRequest.getData.params[i].paramValue;
var lElementText;
if (!isvalue(p_index) || p_index === 0)
lElementText = p_responseMergedRequest.getData.element + ":";
lObj = addElementToObj(p_htmlDiv, lNodeText /*+ " " + p_childDivId*/, p_childDivId, p_nestingLevel, lTooltip, lElementText, p_responseMergedRequest.getData);
}
if (p_responseMergedRequest.node.childVals)
buildElementFromData(lObj, p_responseMergedRequest.node.childVals, p_nestingLevel, p_childDivId, v_reuseObjects);
}
else if (p_responseMergedRequest && p_responseMergedRequest.list)
{
for (var i = 0; i < p_responseMergedRequest.list.length; i++)
{
lIdStr = p_childDivId + "_" + i;
buildElementFromData(p_htmlDiv, p_responseMergedRequest.list[i], p_nestingLevel + 1, lIdStr, v_reuseObjects, i);
}
}
/*
else
{
//console.log("unhandled:", p_responseMergedRequest);
}
*/
}
/** private functions */
function getRandomColor(aN) {
var letters = '0123456789ABCDEF'.split('');
var color = '#';
for (var i = 0; i < 6; i++)
color += letters[Math.floor((aN * 167654387673 * i + 984) % 8) + 6];
return color;
}
function addElementToObj(p_htmlDiv, aText, aID, aNestingLevel, aTooltip, aElement, aGetData)
{
var lDivDiv = document.createElement("DIV");
lDivDiv.getData = aGetData;
if (aElement)
{
var lElementDiv = document.createElement("DIV");
lElementDiv.innerHTML = aElement;
lElementDiv.id = aID + "_elem";
lElementDiv.setAttribute("class", "leftDiv");
lElementDiv.getData = aGetData;
lDivDiv.appendChild(lElementDiv);
}
var lTextDiv = document.createElement("DIV");
lTextDiv.innerHTML = aText;
lTextDiv.id = aID + "_txt";
lTextDiv.getData = aGetData;
lDivDiv.appendChild(lTextDiv);
lDivDiv.id = aID;
if (aTooltip)
lDivDiv.title = aTooltip;
lDivDiv.setAttribute("class", "coloredDiv");
lDivDiv.style.backgroundColor = getRandomColor(aNestingLevel);
p_htmlDiv.appendChild(lDivDiv);
return p_htmlDiv.childNodes[p_htmlDiv.childNodes.length - 1];
}
function addSeparatorLine(p_htmlDiv)
{
var lDiv = document.createElement("DIV");
lDiv.setAttribute("class", "line");
if (p_htmlDiv) p_htmlDiv.appendChild(lDiv);
}
}
CAutoGuiView.getHelp = function() {
return "This view can be used to visualize the whole response tree.";
};
CAutoGuiView.expectsInterface = function() {
return [
{
"mandatory": ["getResponseElement", "command"]
}
];
};
CAutoGuiView.getCustomDataSchema = function() {
var schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CAutoGuiView",
"type": "object",
"properties": {},
"additionalProperties": false
};
$.extend(true, schema, ViewUtils.commonViewSchema);
return schema;
};
//# sourceURL=WebApplicationFramework\Views\View_AutoGui.js