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 をそのまま書く。
// 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); }); }
sfjp:users/umorigu/pf/pukiwiki_auth/scm/commits/6e26fb8ee01157ba9a9880f50ffbf65004185b8e