指向性メモ::2004-10-07::ブラウザで表示中の自分のサイトをすかさずエディタで編集する改造版

ページ情報
制作日
2004-10-07T22:42:31+09:00
最終更新日
2005-05-16T23:05:56+09:00
ページ内目次

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様に感謝致します。

Comments

Trackbacks

Trackback Ping URI

http://yudai.arielworks.com/memo/2004/10/07/224231.trackback

末尾に「1 + 5」の計算結果を繋げて下さい。例えば計算結果が「17」の場合、「224231.trackback17」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

Name (optional)
Email address or URI (optional)
Do the math below (required to filter comment spams)
1 + 5 + 9 =
Message (required)
Submit
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator