概要

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

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

インストール方法

  <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'] ?>" />
/////////////////////////////////////////////////
// _Disable_ WikiName auto-linking
$nowikiname = 1;

使い方

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

ソースコード

Gist

skin/unclink.js

// 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

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

参考

関連

コメント



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-01-11 (日) 16:19:38
Site admin: PukiWiki Development Team

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

SourceForge