User Guide

350 Chapter 20: Data Translators
The canInspectSelection() function for the untranslated HAPPY Property inspector is simple.
Because the selection type is exact, it can return a value of
true without further analysis. For the
translated
HAPPY Property inspector, this function is more complicated; the keyword *LOCKED*
indicates that the Property inspector is appropriate when the selection is within a locked region,
but because a document can have several locked regions, further checks must be performed to
determine if the Property inspector matches this particular locked region.
Another problem is inherent in inspecting translated content. When you call the
dom.getSelection() function, the values that return by default are offsets into the untranslated
source. To expand the selection properly so that the locked region (and only the locked region) is
selected, use the following technique:
var currentDOM = dw.getDocumentDOM();
var offsets = currentDOM.getSelection();
var theSelection = currentDOM.offsetsToNode(offsets[0],offsets[0]+1);
Using offsets[0]+1 as the second argument ensures that you remain within the opening lock
tag when you convert the offsets to a node. If you use
offsets[1] as the second argument, you
risk selecting the node above the lock.
After you make the selection (after ensuring that its nodeType is
node.ELEMENT_NODE), you can
inspect the
type attribute to see if the locked region matches this Property inspector, as shown in
the following example:
if (theSelection.nodeType == node.ELEMENT_NODE && ¬
theSelection.getAttribute('type') == 'happy'){
return true;
}else{
return false
}
To populate the fields in the Property inspector for the translated tag, you must parse the value of
the
orig attribute. For example, if the untranslated code is <HAPPY TIME="22"> and the Property
inspector has a Time field, you must extract the value of the
TIME attribute from the orig string:
function inspectSelection() {
var currentDOM = dw.getDocumentDOM();
var currSelection = currentDOM.getSelection();
var theObj = currentDOM.offsetsToNode¬
(curSelection[0],curSelection[0]+1);
if (theObj.nodeType != Node.ELEMENT_NODE) {
return;
}
// To convert the encoded characters back to their
// original values, use the unescape() method.
var origAtt = unescape(theObj.getAttribute("ORIG"));
// Convert the string to lower case for processing
var origAttLC = origAtt.toLowerCase();
var timeStart = origAttLC.indexOf('time="');
var timeEnd = origAttLC.indexOf('"',timeStart+6);
var timeValue = origAtt.substring(timeStart+6,timeEnd);
document.layers['timelayer'].document.timeForm.timefield.¬
value = timeValue;
}