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