blob: 048469828c8720d23063336a3e7d17147be2bb1e [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_ComboBox(p_viewmodels, p_mainId, p_parentId, p_data) {
"use strict";
/** constructor */
var v_viewmodel = ViewUtils.getViewmodelsFromExpectedInterface(p_viewmodels, CView_ComboBox)[0];
var v_conditionViewmodel = ViewUtils.getViewmodelsFromExpectedInterface(p_viewmodels, CView_ComboBox)[1];
var v_mainId = p_mainId;
var v_parentId = p_parentId;
var v_customData = p_data;
var v_selected = false;
var v_current = '';
var v_target;
var v_this = this;
var LIST = 1,
TARGET = 0;
var v_label;
var v_showLabel = v_customData.showLabel ? v_customData.showLabel : false;
var v_defaultValue = v_customData.defaultValue;
/** public functions */
this.applicationCreated = function () {
if (v_viewmodel != undefined) {
$("#" + v_parentId).append(getHtml());
if (v_customData.isElementLabelPresent) {
v_label = ViewUtils.addLabel(v_mainId, v_customData.elementText);
}
$("#" + v_mainId).addClass("BasicComboBox");
$("#" + v_mainId + "_cbValue").on({
'focus' : function () {
v_selected = true;
},
'blur' : function (event) {
v_selected = false;
},
'change' : function (event) {
var obj = $(this);
var val = obj.val();
v_viewmodel.setValue(TARGET, obj.val());
obj.blur();
}
});
ViewUtils.addTooltip(v_mainId, v_customData);
}
};
this.refresh = function (p_fullRefresh) {
if (v_viewmodel != undefined && ViewUtils.checkVisibility(v_conditionViewmodel, v_mainId)) {
var dataObject = v_viewmodel.getListWithElementInfo();
if (dataObject == undefined || dataObject.values[0] == undefined) {
return;
}
if (p_fullRefresh && v_customData.isElementLabelPresent && v_customData.elementText == undefined) {
v_label.text(dataObject.values[0].element);
}
if (!v_selected) {
var element = "";
var jQcb = $("#" + v_mainId + "_cbValue");
jQcb.empty();
v_current = dataObject.values[TARGET].val;
element = dataObject.values[TARGET].element;
if (v_current == undefined) {
$("#" + v_mainId + " > *").css("display", "none");
$("#" + v_mainId).addClass("NoData");
} else {
$("#" + v_mainId + " > *").css("display", "");
$("#" + v_mainId).removeClass("NoData");
}
var selectedFound = false;
if (v_customData.possibleValues == undefined && dataObject.values[LIST]) {
if (dataObject.values[LIST].val && dataObject.values[LIST].val.constructor == Array) {
for (var idx in dataObject.values[LIST].val) {
if (dataObject.values[LIST].val.hasOwnProperty(idx)) {
var vv = dataObject.values[LIST].val[idx];
jQcb.append('<option value="' + vv + '"' + (v_current === vv ? ' selected="selected"' : '') + '>' + vv + '</option>');
if (v_current === vv) {
selectedFound = true;
}
}
}
}
} else if (v_customData.possibleValues != undefined) {
for (var i = 0; i < v_customData.possibleValues.length; ++i) {
var vv = v_customData.possibleValues[i];
jQcb.append('<option value="' + vv + '"' + (v_current === vv ? ' selected="selected"' : '') + '>' + vv + '</option>');
if (v_current === vv) {
selectedFound = true;
}
}
}
if (v_defaultValue != undefined) {
jQcb.prepend('<option value="' + v_defaultValue + '"' + (selectedFound ? '' : ' selected="selected"') + '>' + v_defaultValue + '</option>');
}
if (v_showLabel) {
document.getElementById(v_mainId + "_cbHeader").value = ((v_customData.text) ? v_customData.text : element);
}
if (v_customData.disabled !== true && dataObject.values[TARGET] != undefined && dataObject.values[TARGET].isWritable) {
$("#" + v_mainId + " > select").prop('disabled', false);
} else {
$("#" + v_mainId + " > select").prop('disabled', true);
}
}
}
};
/** private functions */
function getHtml() {
return '<div id="' + v_mainId + '"><div></div>' + (v_showLabel ? '<label id="' + v_mainId + '_cbHeader"></label>' : '') +
'<select id="' + v_mainId + '_cbValue"' + ((v_customData.writable !== "false") ? '' : ' disabled') + '></select></div>';
}
}
CView_ComboBox.getHelp = function() {
return "A combo box view that needs an element to set and either a second data connection in the viewmodel or a static list of choices.";
}
CView_ComboBox.expectsInterface = function() {
return [
{
"mandatory": ["setValue", "getListWithElementInfo"]
},
{
"optional": ["getState"]
}
];
};
CView_ComboBox.getCustomDataSchema = function() {
var schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CView_ComboBox",
"type": "object",
"properties": {
"showLabel": {
"description": "Show label next to the combo box (default false).",
"type": "boolean",
"format": "checkbox",
"default": true
},
"text": {
"description": "The text of the label next to the combo box.",
"type": "string"
},
"possibleValues": {
"description": "A list of possible predefined values. If the list is undefined, the list from the viewmodel will be used.",
"type": "array",
"format": "table",
"items": {
"type": "string",
"title": "value"
}
},
"defaultValue": {
"description": "A default value that appears as the first element and is selected when the response does not match any element from the list.",
"type": "string"
},
"writable": {
"type": "boolean",
"format": "checkbox",
"description": "Whether we allow the data to be changed (default true).",
"default": false
}
},
"additionalProperties": false
};
$.extend(true, schema, ViewUtils.commonViewSchema, ViewUtils.commonElementSchema);
return schema;
}
//# sourceURL=WebApplicationFramework\Views\View_ComboBox.js