1. メモ帳日記 >
  2. PC >
  3. Make Link から Copy URL + に逆戻り

メモ帳日記

日記書いたりメモ書いたり

2007年 9月 1日(友引

Make Link から Copy URL + に逆戻り

この前の Firefox のメンテナンスで Copy URL + を Make Link に変更したが、なぜか認識されているのに動作しなくなってしまったので、戻した。その際、元のままでは動作が色々変な Copy URL + に 2 つのパッチを当ててインストールした。

  1. MORIYAMA Hiroshi's Diary - Copy URL+ を改造してリンクのソースをコピー出來るやうにしてみた
    1. Index: copyurlplusOverlay.js
    2. ===================================================================
    3. RCS file: /cvs/copyurlplus/src/copyurlplus/content/copyurlplus/copyurlplusOverlay.js,v
    4. retrieving revision 1.7
    5. diff -u -r1.7 copyurlplusOverlay.js
    6. --- copyurlplusOverlay.js 18 Apr 2005 14:04:38 -0000 1.7
    7. +++ copyurlplusOverlay.js 13 Oct 2006 14:28:09 -0000
    8. @@ -165,12 +165,45 @@
    9. */
    10. function getCurrentLink () {
    11. if (gContextMenu && gContextMenu.onLink) {
    12. - return gContextMenu.linkURL ();
    13. + return 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL () : gContextMenu.linkURL ();
    14. } else {
    15. return '';
    16. }
    17. }
    18. +function getCurrentLinkSource () {
    19. + var linkSource;
    20. + if (gContextMenu && gContextMenu.onLink) {
    21. + var re_htmlify = {'&' : '&amp;', '"' : '&quot;', "'" : '&#39;', '<' : '&lt;', '>' : '&gt;'};
    22. + var linkAttrs = new Array;
    23. + var linkText = bulkReplace (myGetInnerText (gContextMenu.link), re_htmlify);
    24. + gContextMenu.link.setAttribute ('href', gContextMenu.link.href); // set absolute URL
    25. + for (var i = 0, name, value; i < gContextMenu.link.attributes.length; i++) {
    26. + name = gContextMenu.link.attributes.item (i).name;
    27. + value = bulkReplace (gContextMenu.link.attributes.item (i).value, re_htmlify);
    28. + linkAttrs.push (name + '="' + value + '"');
    29. + }
    30. + linkSource = '>a ' + linkAttrs.join (' ') + '>' + linkText + '</a>';
    31. + } else {
    32. + linkSource = '';
    33. + }
    34. + return linkSource;
    35. +}
    36. +
    37. +function myGetInnerText (node) {
    38. + var result = [];
    39. + for (var i = 0; i < node.childNodes.length; i++) {
    40. + var child = node.childNodes.item (i);
    41. + if (child.hasChildNodes ())
    42. + result.push (myGetInnerText (child));
    43. + else if (child.nodeType == Node.TEXT_NODE)
    44. + result.push (child.data);
    45. + else if (child.alt)
    46. + result.push (child.alt);
    47. + }
    48. + return result.join ('');
    49. +}
    50. +
    51. function doCopyURLPlus (mode) {
    52. var focusedWindow = document.commandDispatcher.focusedWindow;
    53. @@ -182,6 +215,7 @@
    54. KEYS ['%TITLE%'] = focusedWindow.document.title;
    55. KEYS ['%SEL%'] = getCurrentSelection ();
    56. KEYS ['%RLINK%'] = getCurrentLink ();
    57. + KEYS ['%RLINK_SRC%'] = getCurrentLinkSource ();
    58. ////// added by Meurrens ///////
    59. var ti = new Date () ;
  2. MORIYAMA Hiroshi's Diary - Copy URL+ 1.3.2 の %*_HTMLIFIED% のコピー結果に塵が混ざる件
    1. Index: copyurlplusOverlay.js
    2. ===================================================================
    3. RCS file: /cvs/copyurlplus/src/copyurlplus/content/copyurlplus/copyurlplusOverlay.js,v
    4. retrieving revision 1.7
    5. diff -u -r1.7 copyurlplusOverlay.js
    6. --- copyurlplusOverlay.js 18 Apr 2005 14:04:38 -0000 1.7
    7. +++ copyurlplusOverlay.js 10 Oct 2006 12:16:45 -0000
    8. @@ -201,9 +201,10 @@
    9. //~ KEYS ['%RLINK_DOUBLEQUOTED%'] = '"' + link.replace (/"/g, '\\"' ) + '"' ;
    10. var re_htmlify = new Array ();
    11. - re_htmlify ["\\&(?! (\\w+ [;]|#[0-9] + [;])) "] = '&amp;\\1';
    12. + re_htmlify ['&'] = '&amp;';
    13. re_htmlify ['"'] = '&quot;';
    14. re_htmlify ['<'] = '&lt;';
    15. + re_htmlify ['>'] = '&gt;';
    16. // proper HTML text
    17. KEYS ['%SEL_HTMLIFIED%'] = bulkReplace (KEYS ['%SEL%'], re_htmlify);

このパッチを導入することで、素の状態ではできなかったリンクの丸ごとコピーができるようになる。しかし、すべての属性をコピーしてしまうため、まったく必要ない target 属性までもコピーされてしまう。というわけで、ここは自分でパッチ。といってもたいしたものではないが。

  1. *** d:/Program/Firefox/extension/copyurlplus/jar/content/copyurlplus/copyurlplusOverlay.js~ Sat Sep 1 16:52:16 2007
  2. --- d:/Program/Firefox/extension/copyurlplus/jar/content/copyurlplus/copyurlplusOverlay.js Sat Sep 1 16:50:49 2007
  3. ***************
  4. *** 180,185 ****
  5. --- 180,188 ----
  6. gContextMenu.link.setAttribute ('href', gContextMenu.link.href); // set absolute URL
  7. for (var i = 0, name, value; i < gContextMenu.link.attributes.length; i++) {
  8. name = gContextMenu.link.attributes.item (i).name;
  9. + if (name == "target") {
  10. + continue;
  11. + }
  12. value = bulkReplace (gContextMenu.link.attributes.item (i).value, re_htmlify);
  13. linkAttrs.push (name + '="' + value + '"');
  14. }

最後の仕上げに user.js に次の記述をした。

  1. user_pref('copyurlplus.menus.1.label','a');
  2. user_pref('copyurlplus.menus.1.copy','<a href="%URL_HTMLIFIED%">%TITLE_HTMLIFIED%</a>');
  3. user_pref('copyurlplus.menus.2.label','a (link)');
  4. user_pref('copyurlplus.menus.2.copy','%RLINK_SRC%');
  5. user_pref('copyurlplus.menus.3.label','a (selected string)');
  6. user_pref('copyurlplus.menus.3.copy','<a href="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">%SEL_HTMLIFIED%</a>');
  7. user_pref('copyurlplus.menus.4.label','a (URI only)');
  8. user_pref('copyurlplus.menus.4.copy','<a href="%URL_HTMLIFIED%">%URL_HTMLIFIED%</a>');
  9. user_pref('copyurlplus.menus.5.label','a (attribute only)');
  10. user_pref('copyurlplus.menus.5.copy','<a href="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%"></a>');
  11. user_pref('copyurlplus.menus.6.label','a with cite');
  12. user_pref('copyurlplus.menus.6.copy','<cite><a href="%URL_HTMLIFIED%">%TITLE_HTMLIFIED%</a></cite>');
  13. user_pref('copyurlplus.menus.7.label','q');
  14. user_pref('copyurlplus.menus.7.copy','<q cite="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">%SEL_HTMLIFIED%</q>');
  15. user_pref('copyurlplus.menus.8.label','blockquote');
  16. user_pref('copyurlplus.menus.8.copy','<blockquote cite="%URL_HTMLIFIED%" title="%TITLE_HTMLIFIED%">\n <p>%SEL_HTMLIFIED%</p>\n</blockquote>');
  17. user_pref('copyurlplus.menus.9.label','cite and blockquote');
  18. 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>');

というわけで、快適なコピー環境ができましたとさ。