**概要 [#ue2f21a7]

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

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


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

**インストール方法 [#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'] ?>" />

- 3. pukiwiki.ini.php 設定 - $nowikiname は ''1'' にしておかないとほとんどリンクされません



 /////////////////////////////////////////////////
 // _Disable_ WikiName auto-linking
 $nowikiname = 1;

**使い方 [#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);
  });
 }

*** sourceforge.jp [#zc5af90f]

[[sfjp:users/umorigu/pf/pukiwiki_auth/scm/commits/6e26fb8ee01157ba9a9880f50ffbf65004185b8e]]


** 参考 [#ad499e55]

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

** 関連 [#y9ec0f6f]
- [[PukiWiki/1.4/ちょっと便利に/ローカルファイルへのリンクも張りたい]]
-- 「file:// スキームのリンクを有効にする」「file:// パスで日本語を使えるようにする」
- [[official:質問箱3/552]] Windowsの共有フォルダへのリンク
-- 「リンクとしてWindows共有フォルダのUNCパスを使いたい」 →これに近い
- [[official:続・質問箱/120]] 日本語を含むUNCへのリンク方法
-- file:// の追加、日本語対応
- [[official:FAQ/34]] ローカルファイルへのリンク(file://~)も張りたい
-- file:// の追加
- [[official:続・質問箱/596]] ローカルファイルへのリンク (file:// URLスキーム)
-- (別ページへリンクのみ)
- [[official:質問箱3/92]] 続・質問箱/596 ローカルファイルリンクにて
-- (別ページへリンクのみ)

** コメント [#n2f590e9]
- UNCのパスをリンクにしてほしい、という要望があったので作りました -- [[umorigu]] &new{2015-01-11 (日) 15:29:54};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.061 sec.

SourceForge