temp_h様から許可を頂けたので、「ブラウザで表示中の自分のサイトをすかさずエディタで編集する」の改造版を公開してみます。
主な変更点は、
以上です。
MultiViewsの処理に関する不具合を修正。ご指摘とともに修正方法まで教えてくださったtemp_h様に感謝します。
// +----------------------------------------------------------------------+
// | edit_html.js 改造版 2004-10-07T13:34:03Z |
// +----------------------------------------------------------------------+
// | Portions of this script are Copyright (c) 2004 by temp_h |
// | (http://www.pandora.nu/tempo-depot/) |
// +----------------------------------------------------------------------+
// | Distributed at http://www.arielworks.net/ |
// +----------------------------------------------------------------------+
/* CONFIGURATIONS ====================================================== */
var Editor = "C:\\Program Files\\EmEditor\\emeditor.exe";
var PathMap = {"http://www.arielworks.net/" : "D:\\SERVERS\\HTTP\\web",
"http://localhost/" : "D:\\SERVERS\\HTTP\\web",
"http://ishikawa.arielworks.com/" : "D:\\SERVERS\\HTTP\\ishikawa",
"http://localhost:3024/" : "D:\\SERVERS\\HTTP\\ishikawa"};
var DirIndex = "index.php index.cgi index.html index.xml index.htm index.xhtm index.shtml index.shtm index.xcg index.hdml";
var SchemeSkip = false;
/* ===================================================================== */
// at least one argument required
if (WScript.Arguments.Count() == 0) {
WScript.Echo("Error: Required At Least One Argument (URI)");
WScript.Quit();
}
// strip scheme/fragmentID/query
// EditHTML://http://example.com/foo/bar/baz/ -> http://example.com/foo/bar/baz
var URI = WScript.Arguments.Item(0).replace(/\/$/, "");
if (!SchemeSkip){
URI = URI.replace(/^EditHTML:\/\//i, "");
}
URI = URI.replace(/(#|\?).*$/, "")
// sort PathMap (transform into 2D array)
PathMap = sortPathMap(PathMap);
// refer PathMap
// http://example.com/foo/bar/baz -> \bar\baz
var PathFromRoot;
var ifMatch = false;
var Hit;
for (Hit in PathMap) {
if (Check(URI, "^" + PathMap[Hit]["Server"])) {
PathFromRoot = Strip(URI, "^" + PathMap[Hit]["Server"]).replace(/\//g, "\\");
ifMatch = true;
break;
}
}
if (!ifMatch) {
WScript.Echo("Error: Undefined URI\n\"" + URI + "\"");
WScript.Quit();
}
// set file path
// \bar\baz -> C:\htdocs\bar\baz\index.html
var FilePath = PathMap[Hit]["Local"] + PathFromRoot;
// append file name if it's folder
var FSO = new ActiveXObject("Scripting.FileSystemObject");
if (FSO.FolderExists(FilePath)){
var ifExist = false;
for (Entity in DirIndex.split(/\s+/)) {
if (FSO.FileExists(FilePath + "\\" +DirIndex.split(/\s+/)[Entity])) {
FilePath = FilePath + "\\" + DirIndex.split(/\s+/)[Entity];
ifExist = true;
break;
}
}
if (!ifExist) {
WScript.Echo("Error: Local File Not Found\n\"" + FilePath + "\\(DirIndex)\"");
WScript.Quit();
}
// MultiViews
} else if (!FSO.FileExists(FilePath)) {
var MVExList = DirIndex.split(/(\s+|\S+?\.)/); // extension list
var MVFiles = new Enumerator(FSO.GetFolder(FSO.GetParentFolderName(FilePath)).Files);
var ifExist = false;
var MVEx;
for (MVEx in MVExList) {
for (MVFiles.moveFirst(); !MVFiles.atEnd(); MVFiles.moveNext()) {
if (Check(MVFiles.item().Path, "^" + FilePath.replace(/\\/g, "\\\\") + "\\..*" + MVExList[MVEx])) {
FilePath = MVFiles.item().Path;
ifExist = true;
break;
}
}
if (ifExist) {
break;
}
}
if (!ifExist) {
WScript.Echo("Error: Local File Not Found\n\"" + FilePath + "\"");
WScript.Quit();
}
}
// run
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("\"" + Editor + "\" \"" + FilePath + "\"", 1, false);
WScript.Quit();
/* ===================================================================== */
function Check(s, re)
{
var objRe = new RegExp(re);
return objRe.test(s);
}
function Strip(s, re)
{
var objRe = new RegExp(re);
return s.replace(objRe, "");
}
function sortPathMap(obj)
{
var result = new Array();
var key ;
for (key in obj) {
var Unit = new Array();
Unit["Server"] = key.replace(/\/$/, "");
Unit["Local"] = obj[key].replace(/\\$/, "");
result.push(Unit);
}
result.sort(sortByLength);
return result;
}
function sortByLength(a, b)
{
return b["Server"].length - a["Server"].length;
}
妙に長くなってしまった。
ActiveXを呼び出してる関係で、アンチウィルスソフトが反応するようですが、特に問題がなければ許可してください。
スクリプト部分以外の設定はオリジナル版を参照のこと。
最後になりますが、改造版の公開許可を頂いたtemp_h様に感謝致します。
http://yudai.arielworks.com/memo/2004/10/07/224231.trackback
末尾に「1 + 5」の計算結果を繋げて下さい。例えば計算結果が「17」の場合、「224231.trackback17」です。これは機械的なトラックバックスパムを防止するための措置です。