aboutsummaryrefslogtreecommitdiffstats
path: root/lib/clipboard.js
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@redhat.com>2010-06-17 18:20:03 +0200
committerMatěj Cepl <mcepl@redhat.com>2010-06-17 18:20:03 +0200
commit9279d5bc3902ab0b18af3a3f8440b8ddd884dec5 (patch)
tree1f642276cfbd30c70cae6307253020206d87e235 /lib/clipboard.js
parent620ca44cfa360d6e100215619acab8ae1eb10f34 (diff)
downloadbugzilla-triage-9279d5bc3902ab0b18af3a3f8440b8ddd884dec5.tar.gz
Inheritance works, now there are jetpack-prototype-related bugs
Diffstat (limited to 'lib/clipboard.js')
-rw-r--r--lib/clipboard.js125
1 files changed, 125 insertions, 0 deletions
diff --git a/lib/clipboard.js b/lib/clipboard.js
new file mode 100644
index 0000000..0051a55
--- /dev/null
+++ b/lib/clipboard.js
@@ -0,0 +1,125 @@
+// 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
+ * 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;
+};
+
+var flavorsMethod = exports.getCurrentFlavors = function flavorsMethod(test) {
+ // 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 flavorArray = [];
+ var clip = getClipboard();
+
+ for (var flavor in possibleTypes) {
+ var presentFlavor = clip.hasDataMatchingFlavors(
+ [flavor],
+ 1,
+ clip.kGlobalClipboard
+ );
+ if (presentFlavor) {
+ flavorArray.push(possibleTypes[flavor])
+ }
+ }
+ return flavorArray;
+}; \ No newline at end of file