Information Classification: External Restricted.
See https://www.chili-publish.com/security
Javascript Variable Input Forms
The following shows an example of:
- Loading a document
- Extracting the variables using JavaScript
- Building an HTML based input form
- Setting Variable Values
NOTE: the same information on variables, types and initial values are also available through the webservices (eg: ?Webservice Functions - DocumentGetVariableDefinitions). So the input form (still using JavaScript to update and potentially retrieve the values) could also be constructed dynamically in your server code.
HTML:
<table width="100%" height="530">
<tr valign="top">
<td id="jsInput" runat="server" width="300">
<h2>Variables</h2>
<div id="jsInputForm">The list of variables is automatically being extracted from the document...</div>
</td>
<td>
<iframe width="100%" height="530" id="iframe" name="iframe" onload="GetEditor()"></iframe>
</td>
</tr>
</table>
var frameWindow = null;
var editor;
function GetEditor()
{
try {
if (document.getElementsByTagName('iframe').length > 0) {
if (document.getElementsByTagName('iframe')[0].src != "") {
window.frameWindow = document.getElementsByTagName('iframe')[0].contentWindow;
window.frameWindow.GetEditor(EditorLoaded);
}
}
} catch(err) {
}
}
function EditorLoaded(jsInterface)
{
editor = window.frameWindow.editorObject;
}
function OnEditorEvent(type,targetID)
{
switch (type) {
case "DocumentFullyLoaded":
ShowInputForm();
break;
}
}
function ShowInputForm()
{
var html = "<table>"
var numVars = window.editor.GetObject("document.variables").length;
for (var i=0;i<numVars;i++) {
var chiliVar = window.editor.GetObject("document.variables[" + i + "]");
html += '<tr vAlign="top"> <td width="120">';
html += chiliVar.displayName + ': ';
html += '</td> <td>';
switch (chiliVar.dataType) {
case "longtext":
html += '<textarea style="height:250px" id="var_' + chiliVar.name + '" value="true"' + sel + ' onchange="SetVariableValue(' + i + ',this,'' + chiliVar.dataType + '')">' + chiliVar.value + '</textarea>';
break;
case "checkbox":
var sel = "";
if (chiliVar.value == "true")
sel = ' checked="checked" ';
html += '<input type="checkbox" id="var_' + chiliVar.name + '" value="true" ' + sel + ' onchange="SetVariableValue(' + i + ',this,'' + chiliVar.dataType + '')"/>';
break;
case "list":
var listItems = window.editor.GetObject("document.variables[" + i + "].listItems");
var numItems = listItems.length;
html += '<select id="var_' + chiliVar.name + '" onchange="SetVariableValue(' + i + ',this,'' + chiliVar.dataType + '')">';
if (chiliVar.includeEmptyItem == "true")
html += '<option value="">';
for (var x=0;x<numItems;x++) {
var listItem = window.editor.GetObject("document.variables[" + i + "].listItems[" + x + "]");
var sel = "";
if (chiliVar.value == listItem.id)
sel = ' selected="selected" ';
html += '<option value="' + listItem.id + '" '+ sel + '>' + listItem.name + '</option>';
}
html += '</select>';
break;
default:
html += '<input type="text" id="var_' + chiliVar.name + '" value="' + chiliVar.value + '" onchange="SetVariableValue(' + i + ',this,'' + chiliVar.dataType + '')"/>';
}
html += '</td></tr>'
}
html += '</table>'
document.getElementById("jsInputForm").innerHTML = html;
}
function SetVariableValue(varNum,target,targetType)
{
var val = '';
switch (targetType) {
case 'checkbox':
if (target.checked)
val = 'true';
else
val = 'false';
break;
case 'list':
val = target.options[target.selectedIndex].value;
break;
default:
val = target.value;
}
window.editor.SetProperty("document.variables[" + varNum + "]","value",val);
}
Assigning Image Values
Assigning a value to variables of type "Image" can be done by setting the "imgXML" property of a variable to a valid Asset Definition XML.
This XML is returned by a variety of WebServices, including:
- Webservice Functions - ResourceItemGetXML
- Webservice Functions - ResourceItemAdd
- Webservice Functions - ResourceGetTree
- ...
See ?Resource Item Definition XML for more information
You can retrieve the XML either server-side (placing it in your HTML/JavaScript code after a call to ResourceGetTree for a single directory of the "Assets" resource), or you can build it client-side (eg using ajax calls in combination with a popup selection dialog, or even after a file upload). The resulting XML, passed to "imgXML", should look like:
<item name="boober1.jpg" id="8c8819b5-16e2-4027-b46a-8ffc20da60c9" relativePath="Exported\boober1.jpg" hasPreviewErrors="false">
<fileInfo fileIndexed="2010-10-11 15:01:55" numPages="1" resolution="96" width="321" height="445" fileSize="0.02 Mb">
<metaData>
<item name="Width (px)" value="321"/>
<item name="Height (px)" value="445"/>
<item name="Resolution" value="96"/>
</metaData>
<boxes/>
</fileInfo>
</item>
This contains all information needed by the Editor to place the image.
A simplified way of how to place the asset in the imageframe
var defXML = getAssetDefinitionXML(); //this is your own function to get the definitionXML of the asset you want to place
window.editor.SetProperty("document.variables[" + varNum + "]","imgXML", defXML);
NOTE: for testing purposes, you can also retreive this XML through the BackOffice: Assets, select an image, "Info" tab on the right, "Get Definition XML"
All information on this page must be treated as External Restricted, or more strict. https://www.chili-publish.com/security