日記書いたりメモ書いたり
この前の Firefox のメンテナンスで Copy URL + を Make Link に変更したが、なぜか認識されているのに動作しなくなってしまったので、戻した。その際、元のままでは動作が色々変な Copy URL + に 2 つのパッチを当ててインストールした。
Index: copyurlplusOverlay.js
===================================================================
RCS file: /cvs/copyurlplus/src/copyurlplus/content/copyurlplus/copyurlplusOverlay.js,v
retrieving revision 1.7
diff -u -r1.7 copyurlplusOverlay.js
--- copyurlplusOverlay.js 18 Apr 2005 14:04:38 -0000 1.7
+++ copyurlplusOverlay.js 13 Oct 2006 14:28:09 -0000
@@ -165,12 +165,45 @@
*/
function getCurrentLink () {
if (gContextMenu && gContextMenu.onLink) {
- return gContextMenu.linkURL ();
+ return 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL () : gContextMenu.linkURL ();
} else {
return '';
}
}
+function getCurrentLinkSource () {
+ var linkSource;
+ if (gContextMenu && gContextMenu.onLink) {
+ var re_htmlify = {'&' : '&', '"' : '"', "'" : ''', '<' : '<', '>' : '>'};
+ var linkAttrs = new Array;
+ var linkText = bulkReplace (myGetInnerText (gContextMenu.link), re_htmlify);
+ gContextMenu.link.setAttribute ('href', gContextMenu.link.href); // set absolute URL
+ for (var i = 0, name, value; i < gContextMenu.link.attributes.length; i++) {
+ name = gContextMenu.link.attributes.item (i).name;
+ value = bulkReplace (gContextMenu.link.attributes.item (i).value, re_htmlify);
+ linkAttrs.push (name + '="' + value + '"');
+ }
+ linkSource = '>a ' + linkAttrs.join (' ') + '>' + linkText + '</a>';
+ } else {
+ linkSource = '';
+ }
+ return linkSource;
+}
+
+function myGetInnerText (node) {
+ var result = [];
+ for (var i = 0; i < node.childNodes.length; i++) {
+ var child = node.childNodes.item (i);
+ if (child.hasChildNodes ())
+ result.push (myGetInnerText (child));
+ else if (child.nodeType == Node.TEXT_NODE)
+ result.push (child.data);
+ else if (child.alt)
+ result.push (child.alt);
+ }
+ return result.join ('');
+}
+
function doCopyURLPlus (mode) {
var focusedWindow = document.commandDispatcher.focusedWindow;
@@ -182,6 +215,7 @@
KEYS ['%TITLE%'] = focusedWindow.document.title;
KEYS ['%SEL%'] = getCurrentSelection ();
KEYS ['%RLINK%'] = getCurrentLink ();
+ KEYS ['%RLINK_SRC%'] = getCurrentLinkSource ();
////// added by Meurrens ///////
var ti = new Date () ;
Index: copyurlplusOverlay.js
===================================================================
RCS file: /cvs/copyurlplus/src/copyurlplus/content/copyurlplus/copyurlplusOverlay.js,v
retrieving revision 1.7
diff -u -r1.7 copyurlplusOverlay.js
--- copyurlplusOverlay.js 18 Apr 2005 14:04:38 -0000 1.7
+++ copyurlplusOverlay.js 10 Oct 2006 12:16:45 -0000
@@ -201,9 +201,10 @@
//~ KEYS ['%RLINK_DOUBLEQUOTED%'] = '"' + link.replace (/"/g, '\\"' ) + '"' ;
var re_htmlify = new Array ();
- re_htmlify ["\\&(?! (\\w+ [;]|#[0-9] + [;])) "] = '&\\1';
+ re_htmlify ['&'] = '&';
re_htmlify ['"'] = '"';
re_htmlify ['<'] = '<';
+ re_htmlify ['>'] = '>';
// proper HTML text
KEYS ['%SEL_HTMLIFIED%'] = bulkReplace (KEYS ['%SEL%'], re_htmlify);
このパッチを導入することで、素の状態ではできなかったリンクの丸ごとコピーができるようになる。しかし、すべての属性をコピーしてしまうため、まったく必要ない target
属性までもコピーされてしまう。というわけで、ここは自分でパッチ。といってもたいしたものではないが。
*** d:/Program/Firefox/extension/copyurlplus/jar/content/copyurlplus/copyurlplusOverlay.js~ Sat Sep 1 16:52:16 2007
--- d:/Program/Firefox/extension/copyurlplus/jar/content/copyurlplus/copyurlplusOverlay.js Sat Sep 1 16:50:49 2007
***************
*** 180,185 ****
--- 180,188 ----
gContextMenu.link.setAttribute ('href', gContextMenu.link.href); // set absolute URL
for (var i = 0, name, value; i < gContextMenu.link.attributes.length; i++) {
name = gContextMenu.link.attributes.item (i).name;
+ if (name == "target") {
+ continue;
+ }
value = bulkReplace (gContextMenu.link.attributes.item (i).value, re_htmlify);
linkAttrs.push (name + '="' + value + '"');
}
最後の仕上げに user.js
に次の記述をした。
user_pref('copyurlplus.menus.1.label','a');
user_pref('copyurlplus.menus.1.copy','<a href="%URL_HTMLIFIED%">%TITLE_HTMLIFIED%</a>');
user_pref('copyurlplus.menus.2.label','a (link)');
user_pref('copyurlplus.menus.2.copy','%RLINK_SRC%');
user_pref('copyurlplus.menus.3.label','a (selected string)');
user_pref('copyurlplus.menus.3.copy','<a href="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">%SEL_HTMLIFIED%</a>');
user_pref('copyurlplus.menus.4.label','a (URI only)');
user_pref('copyurlplus.menus.4.copy','<a href="%URL_HTMLIFIED%">%URL_HTMLIFIED%</a>');
user_pref('copyurlplus.menus.5.label','a (attribute only)');
user_pref('copyurlplus.menus.5.copy','<a href="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%"></a>');
user_pref('copyurlplus.menus.6.label','a with cite');
user_pref('copyurlplus.menus.6.copy','<cite><a href="%URL_HTMLIFIED%">%TITLE_HTMLIFIED%</a></cite>');
user_pref('copyurlplus.menus.7.label','q');
user_pref('copyurlplus.menus.7.copy','<q cite="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">%SEL_HTMLIFIED%</q>');
user_pref('copyurlplus.menus.8.label','blockquote');
user_pref('copyurlplus.menus.8.copy','<blockquote cite="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">\n <p>%SEL_HTMLIFIED%</p>\n</blockquote>');
user_pref('copyurlplus.menus.9.label','cite and blockquote');
user_pref('copyurlplus.menus.9.copy','<dl class="cite">\n <dt><cite><a href="%URL_HTMLIFIED%">%TITLE_HTMLIFIED%</a></cite></dt>\n <dd>\n <blockquote cite="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">\n <p>%SEL_HTMLIFIED%</p>\n </blockquote>\n </dd>\n</dl>');
というわけで、快適なコピー環境ができましたとさ。