**概要 [#ue2f21a7]

Windows共有フォルダのパス \\fileserver.example.com\Sharedfolder を自動リンクします。

社内でPukiWikiを利用している場合に、Windows共有フォルダへのリンクがあると便利なことがあります。これを実現します。


- \\server.xxx\folder に対して file:// または smb:// リンクのA(anchor)要素を生成します。
-- \\server\folder は''リンクしません''。サーバー名には必ず '.' が含まれている必要があります。
- Webブラウザ側のJavaScriptで動作するのでサーバー負荷はかかりません。
- 2015年1月時点での各種最新ブラウザに対応。(IE11,Chrome 39,Firefox 34,Opera 12,Safari 5)
-- (古いブラウザ向けの互換コードは入っていません)
- Webブラウザから直接共有フォルダは開けない場合が多いです。ブラウザによっては「リンクアドレスをコピー」「リンクを新しいウィンドウで開く」などを利用してください。
- ブラウザがMacの場合は smb:// のリンクを生成します。
- 

**インストール方法 [#jb18572c]

- 1. 後述の unclink.js を skin/unclink.js として保存する。
- 2. skin/pukiwiki.skin.php (オリジナルは 81 行目) に以下の「+」の行を追加する。

   <title><?php echo $title ?> - <?php echo $page_title ?></title>
 
 + <script type="text/javascript" src="skin/unclink.js"></script>
   <link rel="SHORTCUT ICON" href="<?php echo $image['favicon'] ?>" />

**使い方 [#u70ca609]

本文に \\server.example.com\folder をそのまま書く。


** ソースコード [#yb586759]

*** Gist [#z2327275]

- gist.github.com/umorigu/51abdeef484d18900c57

*** skin/unclink.js [#z0a0f38d]

 // unclink.js
 
 if (window.addEventListener && Array.prototype.indexOf
  && document.createDocumentFragment) {
  window.addEventListener('DOMContentLoaded', function() {
    function uncToUrl(unc) {
      var ua = navigator.userAgent;
      if (ua.indexOf('Macintosh') >= 0) {
        return unc.replace(/^\\\\/, 'smb://').replace(/\\/g, '/');
      } else if (ua.indexOf('Firefox') >= 0) {
        return unc.replace(/^\\\\/, 'file://///').replace(/\\/g, '/');
      } else {
        return unc.replace(/^\\\\/, 'file://').replace(/\\/g, '/');
      }
    }
    function makeUncLink(element) {
      var re = /([\s\<\>]|^)(\\\\([a-zA-Z0-9\-]+)(\.[a-zA-Z0-9\-]+)+\\[^\\\/\:\*\?\"\>\<\|\;\s][^\/\:\*\?\"\>\<\|\;\s]*)/;
      var f, m, text = element.nodeValue;
      while (m = text.match(re)) {
        // m[1]: head, m[2]: UNC path
        f || (f = document.createDocumentFragment());
        if (m.index > 0 || m[1].length > 0) {
          f.appendChild(document.createTextNode(text.substr(0, m.index) + m[1]));
        }
        var a = document.createElement('a');
        a.textContent = m[2];
        a.href = uncToUrl(a.textContent);
        f.appendChild(a);
        text = text.substr(m.index + m[0].length);
      }
      if (f) {
        text.length > 0 && f.appendChild(document.createTextNode(text));
        element.parentNode.replaceChild(f, element)
      }
    }
    var ignoreTags = ['A', 'INPUT', 'TEXTAREA', 'BUTTON',
      'SCRIPT', 'FRAME', 'IFRAME'];
    function walkElement(element) {
      var e = element.firstChild;
      while (e) {
        if (e.nodeType == 3 && e.nodeValue.length > 5 && /\S/.test(e.nodeValue)) {
          var next = e.nextSibling;
          makeUncLink(e);
          e = next;
        } else {
          if (e.nodeType == 1 && ignoreTags.indexOf(e.tagName) == -1) {
            walkElement(e);
          }
          e = e.nextSibling;
        }
      }
    }
    var target = document.getElementById('body');
    walkElement(target);
  });
 }


** 参考 [#ad499e55]

- URL: http:// d.hatena.ne.jp/a-kuma3/20130101/url2link
-- URLをリンク化するブックマークレット - それ、うまいのか?

** 関連 [#y9ec0f6f]
- [[PukiWiki/1.3/ちょっと便利に/ローカルファイルへのリンクも張りたい]]

** コメント [#n2f590e9]

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.044 sec.

OSDN