
440 Data Translators
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 text boxes 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 text box, 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 lowercase for processing
var origAttLC = origAtt.toLowerCase();
var timeStart = origAttLC.indexOf('time="');
var timeEnd = origAttLC.indexOf('"',timeStart+6);
var timeValue = origAtt.substring(timeStart+6,timeEnd);
Komentáře k této Příručce