// Released under the MIT/X11 license // http://www.opensource.org/licenses/mit-license.php /** * returns content of the system clipboard * @return string with the content of the clipboard or "" if empty. * originally from * https://developer.mozilla.org/en/Using_the_Clipboard * */ // TODO to-be-replaced by // var contents = jetpack.clipboard.get(); // http://hsivonen.iki.fi/kesakoodi/clipboard/ // https://wiki.mozilla.org/Labs/Jetpack/JEP/10 function getClipboard() { var clip = Cc["@mozilla.org/widget/clipboard;1"]. getService(Ci.nsIClipboard); if (!clip) { throw new Error("No access to the clipboard!"); } return clip; } function createTransferable() { var trans = Cc["@mozilla.org/widget/transferable;1"]. createInstance(Ci.nsITransferable); if (!trans) { throw new Error("No access to the transfer object during the set of clipboard!"); } return trans; } var getMethod = exports.get = function getMethod( flavor ) { var pastetext = "", mimeType = "", stuff = {}; var len = 0, clipId = 0, clip = {}, trans = {}; // flavor argument is optional if (flavor === undefined) { flavor = "plain"; } if (flavor === "plain") { mimeType = "text/unicode"; } else if (favor === "html") { mimeType = "text/html"; } else { throw new Error("Unsupported flavor '" + flavor + "'!"); } clip = getClipboard(); trans = createTransferable(); trans.addDataFlavor(mimeType); clip.getData(trans, clip.kGlobalClipboard); var str = {}; var strLength = {}; trans.getTransferData(mimeType, str, strLength); if (str) { str = str.value.QueryInterface(Ci.nsISupportsString); pastetext = str.data.substring(0, strLength.value / 2); } return pastetext; }; var setMethod = exports.set = function setMethod(content, flavor) { var mimeType = "", stuff = {}; var len = 0, clipId = 0, clip = {}, trans = {}; // flavor argument is optional if (flavor === undefined) { flavor = "plain"; } if (flavor === "plain") { mimeType = "text/unicode"; } else if (favor === "html") { mimeType = "text/html"; } else { throw new Error("Unsupported flavor '" + flavor + "'!"); } stuff = Cc["@mozilla.org/supports-string;1"]. createInstance(Ci.nsISupportsString); if (!stuff) { return false; } stuff.data = content; len = content.length * 2; clip = getClipboard(); trans = createTransferable(); trans.addDataFlavor(mimeType); trans.setTransferData(mimeType, stuff, content.length * 2); clip.setData(trans, null, clip.kGlobalClipboard); return true; }; function createSupportsWString() { return Cc["@mozilla.org/supports-wstring;1"]. createInstance(Ci.nsISupportsWString); } var flavorsMethod = exports.getCurrentFlavors = function flavorsMethod() { // currently the only possible flavors in Jetpack-prototype are "plain" and // "html", i.e., "text/plain" (or text/unicode?) and "text/html" (or // application/xml+xhtml?) var possibleTypes = { "text/unicode": "plain", "text/plain": "plain", "text/html": "html" }; var flavourArray = []; for (mime in possibleTypes) { var kSuppString = createSupportsWString(); kSuppString.data = mime; // FIXME Missing some kind of if (mime in flavors) ... flavourArray.add(possibleTypes[mime]); } return flavourArray; };