///
///
///
var AB;
(function (AB) {
var ParametersManager = (function () {
function ParametersManager(viewer) {
// Members
this.viewer = viewer;
this.parametersElement = document.getElementById("Parameters");
}
// Clears the parameters view (right side)
ParametersManager.prototype.clearParameters = function () {
if (this.divHelpText) {
this.divHelpText.parentNode.removeChild(this.divHelpText);
this.divHelpText = null;
}
while (this.parametersElement.childNodes.length)
this.parametersElement.removeChild(this.parametersElement.firstChild);
}
// Creates the help section
ParametersManager.prototype.createHelpSection = function (element) {
var divHelpText = document.createElement("div");
divHelpText.className = "parametersHelp";
this.parametersElement.appendChild(divHelpText);
var helpText = document.createElement("a");
helpText.innerHTML = AB.ActionsBuilder.GetDescriptionFromActionName(element.action.name);
helpText.className = "parametersClass";
divHelpText.appendChild(helpText);
}
// Creates parameters for the given element (node / action)
ParametersManager.prototype.createParameters = function (element) {
// Events
var onInputChange = function (input, propertyID) {
return function () {
var value = input.value;
element.action.propertiesResults[propertyID] = value;
};
};
var onTargetTypeChanged = function (targetTypeSelect, propertyPathSelect, targetNameSelect, propertyID) {
return function () {
var selected = targetTypeSelect.selectedIndex;
var value = targetTypeSelect.options[selected].value;
if (targetNameSelect != null && value != "SceneProperties") {
var array = null;
// Keep target name value
var nameValue = targetNameSelect.value;
targetNameSelect.length = 0;
if (value == "MeshProperties") array = AB.ActionsBuilder.MeshesList;
else if (value == "LightProperties") array = AB.ActionsBuilder.LightsList;
else if (value == "CameraProperties") array = AB.ActionsBuilder.CamerasList;
for (var i = 0; i < array.length; i++) {
var option = document.createElement("option");
option.value = array[i];
option.innerHTML = array[i];
targetNameSelect.add(option);
}
targetNameSelect.value = nameValue;
}
if (propertyPathSelect != null) {
// Get array of properties for selected object type (scene, camera, light, mesh, ...)
var array = AB.ActionsBuilder[targetTypeSelect.options[selected].value];
propertyPathSelect.length = 0;
for (var j = 0; j < array.length; j++) {
var option = document.createElement("option");
option.value = array[j].name;
option.innerHTML = array[j].name;
propertyPathSelect.add(option);
}
}
element.action.properties[propertyPathSelect != null ? propertyID - 1 : propertyID].targetType = targetTypeSelect.options[selected].value;
};
};
var onTargetNameChanged = function (targetNameSelect, propertyID) {
return function () {
element.action.propertiesResults[propertyID] = targetNameSelect.options[targetNameSelect.selectedIndex].value;
}
}
var onPropertyPathChanged = function (propertyPathSelect, additionalInput, propertyID) {
return function () {
additionalInput.value = "";
element.action.propertiesResults[propertyID] = propertyPathSelect.options[propertyPathSelect.selectedIndex].value;
};
};
var onAdditionalPropertyPathChanged = function (propertyPathSelect, additionalInput, propertyID) {
return function () {
var propertyPath = propertyPathSelect.options[propertyPathSelect.selectedIndex].value;
if (additionalInput.value != "")
propertyPath += "." + additionalInput.value;
element.action.propertiesResults[propertyID] = propertyPath;
};
};
var onConditionOperatorChanged = function (conditionOperatorSelect, propertyID) {
return function () {
element.action.propertiesResults[propertyID] = conditionOperatorSelect.options[conditionOperatorSelect.selectedIndex].value;
};
};
// Special Elements
var targetTypeSelect = null;
var targetNameSelect = null;
var propertyPathSelect = null;
var soundNameSelect = null;
// Clear view (div)
this.clearParameters();
// Get properties
var p = element.action.properties;
var pr = element.action.propertiesResults;
// Create edition presentation
var divEditedNode = document.createElement("div");
divEditedNode.className = "parametersEditedNode";
divEditedNode.style.backgroundColor = this.viewer.getSelectedNodeColor(element.action, this.viewer.isParentDetached(element.action));
divEditedNode.style.border = "2px solid white";
var textEditedNode = document.createElement("a");
textEditedNode.className = "parametersEditedNode";
textEditedNode.innerHTML = element.action.name;
textEditedNode.style.verticalAlign = "middle";
textEditedNode.style.textAlign = "center";
if (element.action.type == AB.ActionsBuilder.Type.ACTION)
textEditedNode.style.color = "black";
else
textEditedNode.style.color = "white";
textEditedNode.style.width = textEditedNode.style.height = "100%";
divEditedNode.appendChild(textEditedNode);
this.parametersElement.appendChild(divEditedNode);
if (p.length == 0) {
this.createHelpSection(element);
return;
}
// Create parameters
for (var i = 0; i < p.length; i++) {
// Create separator
var separator = document.createElement("hr");
separator.noShade = true;
separator.style.width = "90%";
this.parametersElement.appendChild(separator);
// Parameter text
var propertyText = document.createElement("a");
propertyText.text = p[i].text;
this.parametersElement.appendChild(propertyText);
// If target, add the input element + combo box with target type
if (p[i].text == "sound") {
soundNameSelect = document.createElement("select");
soundNameSelect.className = "parametersClass";
for (var j = 0; j < AB.ActionsBuilder.SoundsList.length; j++) {
var name = AB.ActionsBuilder.SoundsList[j];
var option = document.createElement("option");
option.value = option.innerHTML = name;
option.className = "parametersClass";
soundNameSelect.add(option);
}
soundNameSelect.value = pr[i];
this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(soundNameSelect);
soundNameSelect.onchange = onInputChange(soundNameSelect, i);
continue;
}
else if (p[i].text == "target"
|| (element.action.type == AB.ActionsBuilder.Type.TRIGGER && p[i].text == "parameter")
|| p[i].text == "parent")
{
targetTypeSelect = document.createElement("select");
targetTypeSelect.className = "parametersClass";
for (var j = 0; j < AB.ActionsBuilder.DataTypesNames.length; j++) {
var data = AB.ActionsBuilder.DataTypesNames[j];
var option = document.createElement("option");
option.value = data.data;
option.innerHTML = data.name;
option.className = "parametersClass";
targetTypeSelect.add(option);
}
targetTypeSelect.value = p[i].targetType;
this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(targetTypeSelect);
// List names
targetNameSelect = document.createElement("select");
targetNameSelect.className = "parametersClass";
this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(targetNameSelect);
onTargetTypeChanged(targetTypeSelect, null, targetNameSelect, i)();
targetNameSelect.value = pr[i];
targetTypeSelect.onchange = onTargetTypeChanged(targetTypeSelect, null, targetNameSelect, i);
targetNameSelect.onchange = onTargetNameChanged(targetNameSelect, i);
continue;
}
// If propertyPath, add the combox box to select the property and input element for additional property
else if (p[i].text == "propertyPath") {
propertyPathSelect = document.createElement("select");
propertyPathSelect.className = "parametersClass";
this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(propertyPathSelect);
// Special input, then continue after its creation
var additionalInput = document.createElement("input");
additionalInput.setAttribute("value", "");
additionalInput.className = "parametersClass";
this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(additionalInput);
// If propertyPath exists, then target exists
targetTypeSelect.onchange = onTargetTypeChanged(targetTypeSelect, propertyPathSelect, targetNameSelect, i);
propertyPathSelect.onchange = onPropertyPathChanged(propertyPathSelect, additionalInput, i);
additionalInput.onkeyup = onAdditionalPropertyPathChanged(propertyPathSelect, additionalInput, i);
// Fill propertyPath combo box
onTargetTypeChanged(targetTypeSelect, propertyPathSelect, targetNameSelect, i)();
// Set selected property
var propertyName = pr[i].split(".");
propertyPathSelect.value = propertyName[0];
var additionPropertyName = "";
for (var j = 1; j < propertyName.length; j++)
additionPropertyName += propertyName[j];
additionalInput.setAttribute("value", additionPropertyName);
// Finish
continue;
}
// Value condition, add combo box for operator type
else if (p[i].text == "operator") {
var conditionOperatorSelect = document.createElement("select");
conditionOperatorSelect.className = "parametersClass";
for (var j = 0; j < AB.ActionsBuilder.FlowActionOperators.length; j++) {
var option = document.createElement("option");
option.value = AB.ActionsBuilder.FlowActionOperators[j];
option.innerHTML = AB.ActionsBuilder.FlowActionOperators[j];
conditionOperatorSelect.add(option);
}
conditionOperatorSelect.value = pr[i];
conditionOperatorSelect.onchange = onConditionOperatorChanged(conditionOperatorSelect, i);
this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(conditionOperatorSelect);
continue;
}
var propertyInput = document.createElement("input");
propertyInput.setAttribute("value", pr[i]);
propertyInput.onkeyup = onInputChange(propertyInput, i);
propertyInput.className = "parametersClass";
//this.parametersElement.appendChild(document.createElement("br"));
this.parametersElement.appendChild(propertyInput);
}
// Create help text (bottom)
this.createHelpSection(element);
}
return ParametersManager;
})();
AB.ParametersManager = ParametersManager;
})(AB || (AB = {}));