相対パス作成マクロ

説明

このマクロは、相対パスを作成するマクロです。このマクロの実行には、SeraphyScriptTools をインストールする必要があります。

マクロを実行するとコモンダイアログが立ち上がり、選んだファイルへの相対パスを書き込みます。選んだファイルが index.html の場合は、パスから index.html を削除し、スラッシュで終わるアドレスになります。

一応きちんと動いてますが、文法的におかしい所などがありましたら、指摘していただけるとありがたいです。

マクロ

// パスがindexで終わる場合に、パスをスラッシュで終わらせるかどうか
// スラッシュで終わらせるなら0、indexのままで良いなら1。
var slashend = 0;
// 上記が0の場合、indexファイルの名前を入れる
var indexname = "index.html";

// ======設定終わり======


var WshShell = new ActiveXObject( "WScript.Shell" );

function GetRelativePath(path1,path2){//path1に対するpath2の相対パスを求める
  path1 = path1.split("\\");
  path2 = path2.split("\\");
  while ((1 < path1.length) && (1 < path2.length) && (path1[0]==path2[0])){
    path1 = path1.slice(1,path1.length);
    path2 = path2.slice(1,path2.length);
  }
  var pat = "";
  for (var i=0;i==path1.length-1;i++) pat += "./";//同じ階層なら./を付ける
  for (var i=0;i<path1.length-1;i++) pat += "../";//上の階層なら../を付ける
  return(pat + path2.join("/"));
}

var Instance = new ActiveXObject( "SeraphyScriptTools.CommDialog");
CurrentPath = document.FullName;

//コモンダイアログ
var path2 = Instance.OpenFileDialog (CurrentPath , "すべてのファイル|*.*");

if(path2 != null){//キャンセルした時用にifで。
  var pathloot = document.Path;//開いてるファイルのディレクトリパス取得
  var path1 = pathloot + "\\";//ケツに\を足す

  var relpath = GetRelativePath(path1,path2);
  
  if (slashend == 0){
    var findindex = relpath.indexOf(indexname);//indexnameを探す
    if (findindex != -1){
      relpath = relpath.replace(indexname, "");//indexnameを消す
    }
  }
  
  var linktag = relpath;
  document.write(linktag);
}