зеркало из https://github.com/mozilla/pjs.git
179 строки
5.2 KiB
JavaScript
179 строки
5.2 KiB
JavaScript
|
function nsEditableText(aElmOrID)
|
||
|
{
|
||
|
this.setTextContents = function setTextContents(aStr)
|
||
|
{
|
||
|
try {
|
||
|
this.mAcc.setTextContents(aStr);
|
||
|
|
||
|
is(this.getValue(), aStr,
|
||
|
"setTextContents: Can't set " + aStr +
|
||
|
" to element with ID '" + this.mID + "'");
|
||
|
} catch (e) {
|
||
|
ok(false,
|
||
|
"setTextContents: Can't set " + aStr +
|
||
|
"to element with ID '" + this.mID +
|
||
|
"', value '" + this.getValue() + "', exception" + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.insertText = function insertText(aStr, aPos, aResStr)
|
||
|
{
|
||
|
try {
|
||
|
this.mAcc.insertText(aStr, aPos);
|
||
|
|
||
|
is(this.getValue(), aResStr,
|
||
|
"insertText: Can't insert " + aStr + " at " + aPos +
|
||
|
" to element with ID '" + this.mID + "'");
|
||
|
} catch (e) {
|
||
|
ok(false,
|
||
|
"insertText: Can't insert " + aStr + " at " + aPos +
|
||
|
" to element with ID '" + this.mID +
|
||
|
"', value '" + this.getValue() + "', exception " + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.copyText = function copyText(aStartPos, aEndPos, aClipboardStr)
|
||
|
{
|
||
|
var msg = "copyText from " + aStartPos + " to " + aEndPos +
|
||
|
" for element " + prettyName(this.mID) + ": ";
|
||
|
|
||
|
try {
|
||
|
this.mAcc.copyText(aStartPos, aEndPos);
|
||
|
is(this.pasteFromClipboard(), aClipboardStr, msg);
|
||
|
|
||
|
} catch(e) {
|
||
|
ok(false, msg + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.copyNPasteText = function copyNPasteText(aStartPos, aEndPos,
|
||
|
aPos, aResStr)
|
||
|
{
|
||
|
try {
|
||
|
this.mAcc.copyText(aStartPos, aEndPos);
|
||
|
this.mAcc.pasteText(aPos);
|
||
|
|
||
|
is(this.getValue(), aResStr,
|
||
|
"copyText & pasteText: Can't copy text from " + aStartPos +
|
||
|
" to " + aEndPos + " and paste to " + aPos +
|
||
|
" for element with ID '" + this.mID + "'");
|
||
|
} catch (e) {
|
||
|
ok(false,
|
||
|
"copyText & pasteText: Can't copy text from " + aStartPos +
|
||
|
" to " + aEndPos + " and paste to " + aPos +
|
||
|
" for element with ID '" + this.mID +
|
||
|
"', value '" + this.getValue() + "', exception " + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.cutText = function cutText(aStartPos, aEndPos, aClipboardStr, aResStr)
|
||
|
{
|
||
|
var msg = "cutText from " + aStartPos + " to " + aEndPos +
|
||
|
" for element " + prettyName(this.mID) + ": ";
|
||
|
|
||
|
try {
|
||
|
this.mAcc.cutText(aStartPos, aEndPos);
|
||
|
|
||
|
is(this.pasteFromClipboard(), aClipboardStr,
|
||
|
msg + "wrong clipboard value");
|
||
|
is(this.getValue(), aResStr, msg + "wrong control value");
|
||
|
|
||
|
} catch(e) {
|
||
|
ok(false, msg + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.cutNPasteText = function copyNPasteText(aStartPos, aEndPos,
|
||
|
aPos, aResStr)
|
||
|
{
|
||
|
try {
|
||
|
this.mAcc.cutText(aStartPos, aEndPos);
|
||
|
this.mAcc.pasteText(aPos);
|
||
|
|
||
|
is(this.getValue(), aResStr,
|
||
|
"cutText & pasteText: Can't cut text from " + aStartPos +
|
||
|
" to " + aEndPos + " and paste to " + aPos +
|
||
|
" for element with ID '" + this.mID + "'");
|
||
|
} catch (e) {
|
||
|
ok(false,
|
||
|
"cutText & pasteText: Can't cut text from " + aStartPos +
|
||
|
" to " + aEndPos + " and paste to " + aPos +
|
||
|
" for element with ID '" + this.mID +
|
||
|
"', value '" + this.getValue() + "', exception " + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.pasteText = function pasteText(aPos, aResStr)
|
||
|
{
|
||
|
var msg = "pasteText to " + aPos + " position for element " +
|
||
|
prettyName(this.mID) + ": ";
|
||
|
|
||
|
try {
|
||
|
this.mAcc.pasteText(aPos);
|
||
|
|
||
|
is(this.getValue(), aResStr, msg + "wrong control value");
|
||
|
|
||
|
} catch(e) {
|
||
|
ok(false, msg + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.deleteText = function deleteText(aStartPos, aEndPos, aResStr)
|
||
|
{
|
||
|
try {
|
||
|
this.mAcc.deleteText(aStartPos, aEndPos);
|
||
|
|
||
|
is(this.getValue(), aResStr,
|
||
|
"deleteText: Can't delete text from " + aStartPos +
|
||
|
" to " + aEndPos + " for element with ID '" + this.mID + "'");
|
||
|
} catch (e) {
|
||
|
ok(false,
|
||
|
"deleteText: Can't delete text from " + aStartPos +
|
||
|
" to " + aEndPos + " for element with ID '" + this.mID +
|
||
|
"', value " + this.getValue() + ", exception " + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.getValue = function getValue()
|
||
|
{
|
||
|
if (this.mElm instanceof Components.interfaces.nsIDOMNSEditableElement)
|
||
|
return this.mElm.value;
|
||
|
if (this.mElm instanceof Components.interfaces.nsIDOMHTMLDocument)
|
||
|
return this.mElm.body.textContent;
|
||
|
return this.mElm.textContent;
|
||
|
}
|
||
|
|
||
|
this.pasteFromClipboard = function pasteFromClipboard()
|
||
|
{
|
||
|
var clip = Components.classes["@mozilla.org/widget/clipboard;1"].
|
||
|
getService(Components.interfaces.nsIClipboard);
|
||
|
if (!clip)
|
||
|
return;
|
||
|
|
||
|
var trans = Components.classes["@mozilla.org/widget/transferable;1"].
|
||
|
createInstance(Components.interfaces.nsITransferable);
|
||
|
if (!trans)
|
||
|
return;
|
||
|
|
||
|
trans.addDataFlavor("text/unicode");
|
||
|
clip.getData(trans, clip.kGlobalClipboard);
|
||
|
|
||
|
var str = new Object();
|
||
|
var strLength = new Object();
|
||
|
trans.getTransferData("text/unicode", str, strLength);
|
||
|
|
||
|
if (str)
|
||
|
str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
|
||
|
if (str)
|
||
|
return str.data.substring(0, strLength.value / 2);
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
var elmObj = { value: null };
|
||
|
this.mAcc = getAccessible(aElmOrID, nsIAccessibleEditableText, elmObj);
|
||
|
|
||
|
this.mElm = elmObj.value;
|
||
|
this.mID = aElmOrID;
|
||
|
}
|