日記書いたりメモ書いたり
この前の Firefox のメンテナンスで Copy URL + を Make Link に変更したが、なぜか認識されているのに動作しなくなってしまったので、戻した。その際、元のままでは動作が色々変な Copy URL + に 2 つのパッチを当ててインストールした。
Index: copyurlplusOverlay.js===================================================================RCS file: /cvs/copyurlplus/src/copyurlplus/content/copyurlplus/copyurlplusOverlay.js,vretrieving revision 1.7diff -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,vretrieving revision 1.7diff -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 textKEYS ['%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>');というわけで、快適なコピー環境ができましたとさ。