blob: 8e5613a3b31f93994e1d5fdb9bb887ba7e63ccdf [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 v1.0 which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CView_Clients(p_viewmodels, p_mainId, p_parentId, p_data) {
"use strict";
/** constructor */
var v_mainId = p_mainId;
var v_parentId = p_parentId;
var v_tableId = v_mainId + "_table";
var v_customData = p_data;
var v_subviews = [];
var v_scrollId = v_mainId + "_Scroll";
var scrollBar = new CView_Scroll(p_viewmodels, v_scrollId, v_mainId, p_data);
var v_viewmodels = ViewUtils.getViewmodelsFromExpectedInterface(p_viewmodels, CView_Clients);
var v_viewmodel = v_viewmodels[0];
var v_streamingViewmodel = v_viewmodels[1];
var v_conditionViewmodel = v_viewmodels[2];
var v_scrollInitialised = false;
var v_class = "ClientsView";
if (v_customData.class != undefined) {
v_class = v_customData.class;
}
/** public functions */
this.applicationCreated = function() {
if (v_viewmodel != undefined) {
$("#" + v_parentId).append(getHtml());
$("#" + v_mainId).css("position", "relative");
}
};
this.refresh = function() {
if (v_viewmodel != undefined && ViewUtils.checkVisibility(v_conditionViewmodel, v_mainId)) {
var data = v_viewmodel.getViewmodelBundle();
createSubviews(data);
refreshSubviews(data);
refreshScroll();
}
};
/* private functions */
function createSubviews(data) {
var table = $("#" + v_tableId);
var existingGroups = $("#" + v_tableId + " > tbody > tr").length / 3;
var numberOfGroupsToCreate = data.viewmodels.length - existingGroups;
if (numberOfGroupsToCreate > 0) {
for (var i = 0; i < numberOfGroupsToCreate; ++i) {
var aligner1Id = v_mainId + '_aligner1_' + (existingGroups + i);
var aligner2Id = v_mainId + '_aligner2_' + (existingGroups + i);
var tableId = v_mainId + '_subTable_' + (existingGroups + i);
table.append(
'<tr><td id="' + aligner1Id + '"></td><td id="' + aligner2Id + '"></td></tr>' +
'<tr><td colspan=2 id="' + tableId + '"></td></tr>' +
'<tr><td colspan=2><div class="line"></div></td></tr>'
);
var aligner1 = new CView_ElementAligner([data.viewmodels[existingGroups + i].aligner1], aligner1Id + "_view", aligner1Id, v_customData.customDataForFirstAligner);
var aligner2 = new CView_ElementAligner([data.viewmodels[existingGroups + i].aligner2], aligner2Id + "_view", aligner2Id, v_customData.customDataForSecondAligner);
var tableSubview = new CView_ElementTable([data.viewmodels[existingGroups + i].table], tableId + "_view", tableId, v_customData.customDataForTable);
v_subviews.push(aligner1);
v_subviews.push(aligner2);
v_subviews.push(tableSubview);
aligner1.applicationCreated();
aligner2.applicationCreated();
tableSubview.applicationCreated();
ViewUtils.applyCss(v_customData.customDataForFirstAligner, aligner1Id + "_view");
ViewUtils.processCss(v_customData.customDataForFirstAligner, aligner1Id);
ViewUtils.applyCss(v_customData.customDataForSecondAligner, aligner2Id + "_view");
ViewUtils.processCss(v_customData.customDataForSecondAligner, aligner2Id);
ViewUtils.applyCss(v_customData.customDataForTable, tableId + "_view");
ViewUtils.processCss(v_customData.customDataForTable, tableId);
}
} else if (numberOfGroupsToCreate < 0) {
$("#" + v_tableId + " > tbody > tr").slice((existingGroups + numberOfGroupsToCreate) * 3).remove();
for (var i = 0; i > 3 * numberOfGroupsToCreate; --i) {
v_subviews.pop();
}
}
if (data.firstSeparatorExists) {
$($("#" + v_tableId + " > tbody > tr")[0]).css("display", "");
} else {
$($("#" + v_tableId + " > tbody > tr")[0]).css("display", "none");
}
}
function refreshSubviews(data) {
for (var i = 0; i < v_subviews.length; ++i) {
v_subviews[i].refresh(data.fullRefresh);
}
}
function refreshScroll() {
var isStreaming = false;
if (v_streamingViewmodel.isStreaming != undefined) {
isStreaming = v_streamingViewmodel.isStreaming();
}
if (v_scrollInitialised && !isStreaming) {
$("#" + v_scrollId).remove();
v_scrollInitialised = false;
$("#" + v_mainId).scrollTop(0).css("overflow-y", "auto");
} else if (!v_scrollInitialised && isStreaming) {
scrollBar.applicationCreated();
v_scrollInitialised = true;
$("#" + v_mainId).scrollTop(0).css("overflow-y", "hidden");
}
if (isStreaming) {
scrollBar.refresh();
}
}
function getHtml() {
return '' +
'<div id="' + v_mainId + '" class="' + v_class + '">' +
'<table id="' + v_tableId + '">' +
'<col width="50%">' +
'<col width="50%">' +
'</table>' +
'</div>';
}
}
CView_Clients.getHelp = function() {
return "The view for the ExecCtrl clients tab. It creates 2 aligners and a table per group.";
};
CView_Clients.expectsInterface = function() {
var expectedInterface = CView_Scroll.expectsInterface();
expectedInterface.unshift({
"optional": ["getState"]
});
expectedInterface.unshift({
"optional": ["isStreaming"]
});
expectedInterface.unshift({
"mandatory": ["getViewmodelBundle"]
});
return expectedInterface;
};
CView_Clients.getCustomDataSchema = function() {
var tableSchema = CView_ElementTable.getCustomDataSchema();
var firstAlignerSchema = CView_ElementAligner.getCustomDataSchema();
// yes they are the same, but ajv does not like it, when the same object can be found multiple times in the same schema...
var secondAlignerSchema = CView_ElementAligner.getCustomDataSchema();
var scrollSchema = CView_Scroll.getCustomDataSchema();
var schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CView_Clients",
"type": "object",
"properties": {
"class": {
"description": "The css class of the view",
"type": "string",
"default": "ClientsView"
},
"hideFirstAligner": {
"description": "Hide the first aligner when not all of its data is visible creating a more scroll like experience (default true).",
"type": "boolean",
"default": "false"
},
"customDataForFirstAligner": firstAlignerSchema,
"customDataForSecondAligner": secondAlignerSchema,
"customDataForTable": tableSchema
},
"additionalProperties": false,
"required": ["customDataForFirstAligner", "customDataForSecondAligner", "customDataForTable"]
};
$.extend(true, schema, scrollSchema, ViewUtils.commonViewSchema);
return schema;
};
//# sourceURL=WebApplicationFramework\Views\View_Clients.js