diff --git a/INSTALL_MANUAL.txt b/INSTALL_MANUAL.txt index ec39190..9106be4 100644 --- a/INSTALL_MANUAL.txt +++ b/INSTALL_MANUAL.txt @@ -5,7 +5,7 @@ http://nota.jp/download/install_manual.html NOTA 設置マニュアル ver.2006.09.08 -NOTA のセットアップに挑戦してみましょう。 +NOTA のセットアップに挑戦してみましょう。 1. NOTA2が動作するサーバの環境を確認します @@ -79,7 +79,7 @@ ASCIIモードで転送するファイルの拡張子 [nota_package]を展開すると、[nota][notadata][source]の3つのフォルダが展開されます。 このうち、公開ディレクトリ(/home/daredare/htdocs/など)に[nota]をフォルダごと全てアップロードして下さい。 -次に、ウェブに公開されないディレクトリ(/home/daredare/など)に[notadata]をフォルダごとアップロードして下さい。 +次に、ウェブに公開されないディレクトリ(/home/daredare/など)に[notadata]をフォルダごとアップロードして下さい。 3. パーミッションを変更します @@ -90,7 +90,7 @@ option.plを666にしてください。 次に、ウェブに公開されないディレクトリにある[notadata]のフォルダと、同フォルダ内の[default]と[master]フォルダの中にある、 [account][data][drawing][img][trash]の5つのフォルダ全てを777にしてください。 -詳しくは後方に載っている「ファイル構成図」を参考にしてください。 +詳しくは後方に載っている「ファイル構成図」を参考にしてください。 4. オプション設定を変更します @@ -110,7 +110,7 @@ option.plを666にしてください。 メニューから[動作チェック]を開きます。 チェック画面が表れますので、全て緑色のOKが出ていれば、問題なくNOT2が設置されていることになります。 -もし赤色のNGが出ていたら、その箇所を確認してください。 +もし赤色のNGが出ていたら、その箇所を確認してください。 7. いよいよNOTA2を使います @@ -126,7 +126,7 @@ NOTA2のデフォルトページが待ち構えているはずです。 付録. ファイル構成図 (/home/daredare/htdocs/などの公開ディレクトリ) -[nota] +[nota] └ [default]   ├ [styles]   ├ [plugins] @@ -144,7 +144,6 @@ NOTA2のデフォルトページが待ち構えているはずです。   ├ index.cgi // CGIファイルなのでパーミッションを755にしてください   ├ install.cgi // CGIファイルなのでパーミッションを755にしてください   ├ link.cgi // CGIファイルなのでパーミッションを755にしてください -  ├ link.swf   ├ nota.pl   ├ nota.swf   ├ option.pl // このファイルをパーミッションを666にしてください @@ -156,7 +155,7 @@ NOTA2のデフォルトページが待ち構えているはずです。   ├ template.cgi // CGIファイルなのでパーミッションを755にしてください   ├ upload.cgi // CGIファイルなのでパーミッションを755にしてください   ├ view.cgi // CGIファイルなのでパーミッションを755にしてください -  └ write.cgi // CGIファイルなのでパーミッションを755にしてください +  └ write.cgi // CGIファイルなのでパーミッションを755にしてください (/home/daredare/などのウェブに公開されないディレクトリ) [notadata] @@ -176,8 +175,8 @@ NOTA2のデフォルトページが待ち構えているはずです。 NOTA2設置マニュアル更新履歴 2005-12-07 仮作成 -2006-09-08 ver2.13に伴って修正 +2006-09-08 ver2.13に伴って修正 コピーライト表記 -NOTA2 Install Manual" written by Keita Akimoto \ No newline at end of file +NOTA2 Install Manual" written by Keita Akimoto diff --git a/flaproject/core/as/main.as b/flaproject/core/as/main.as index 8480536..c55cfa4 100644 --- a/flaproject/core/as/main.as +++ b/flaproject/core/as/main.as @@ -1,10 +1,12 @@ -/* - * +import flash.external.*; + +/* + * * main * 編集ボード - * + * */ - + //グローバル変数 localpath = "/"; @@ -20,8 +22,8 @@ createEmptyMovieClip("canvasDel",100002);//消しゴムの描画領域 //データ記憶配列 unloaded = true; -_global.m_DataList = new Array(); -_global.m_SelList = new Array(); +_global.m_DataList = new Array(); +_global.m_SelList = new Array(); //ページの区切りを書き込む @@ -120,19 +122,19 @@ function clearMapData(){ delete _global.DataList; _global.m_DataList = new Array(); - + //Mapを消す _root.Main._visible = false; - + } function LoadMapData(forupdate){ - + //ロード中の写真があれば、全て、停止せよ! if (loadoldpage != MyPage){ clearMapData(); } - + if (loadoldpage == undefined){ //初めてなら、白紙ページを表示 moveMap(ML,MT); @@ -144,7 +146,7 @@ function LoadMapData(forupdate){ myLoadVars = new LoadVars(); myLoadVars.onLoad = onLoadData; myLoadVars.forupdate = forupdate; //内部の定期更新用か? - var myDate = new Date; + var myDate = new Date; if (MyPage == undefined) myLoadVars.load(SERVER + "read.cgi?param=backup&date" + myDate.getTime()); else @@ -152,7 +154,7 @@ function LoadMapData(forupdate){ + "&date=" + myDate.getTime()); - + }; loadErrorCnt = 0; @@ -171,12 +173,12 @@ function onLoadData(success){ //ページが見つからない if (this.anonymous == "none"){ //第3者への閲覧が禁止されている - + _root.startEdit(); }else if (loadErrorCnt < 2){ //3秒後にもう一度読み込む clearInterval(updateIntervalID); - updateIntervalID = setInterval(updatePage,3000); + updateIntervalID = setInterval(updatePage,3000); }else{ if (MyLang == "en"){ ErrorMes("Page not found.\r" + MyPage); @@ -197,7 +199,7 @@ function onLoadData(success){ if (myLoadVars.forupdate == true){ playSound("POU"); } - + //まず、用紙のサイズをセットする if (myLoadVars.width != undefined) _global.PaperW = myLoadVars.width;//1000; @@ -207,18 +209,18 @@ function onLoadData(success){ _global.PageH = myLoadVars.height;//1414; else _global.PageH = 1414; - + _global.PaperH = PageH; backboard._width = PaperW; backboard._height = PageH; Canvas._width = backboard._width; Canvas._height = backboard._height; - - + + if (myLoadVars.use != "temp"){ //ページ番号は? _global.MyPage = myLoadVars.page; - + //編集モードか閲覧モードか if (myLoadVars.editmode == "true"){//この行かまうな //編集モード @@ -231,16 +233,16 @@ function onLoadData(success){ _root.setEditMode(false); } } - + //編集権限は? _global.PageDatEdit = myLoadVars.edit; _global.PageLock = (PageDatEdit == "admin" && MyPower != "admin"); for (var i=0;i 0){ @@ -314,7 +316,7 @@ function onLoadData(success){ m_DataList[indx].del = 2; //放置フラグ //更新されているか? if (myLoadVars["update" + i] > m_DataList[indx].update){ - m_DataList[indx].del = 3; //更新フラグ + m_DataList[indx].del = 3; //更新フラグ m_DataList[indx].id = myLoadVars["id" + i]; m_DataList[indx].author = myLoadVars["author" + i]; m_DataList[indx].tool = myLoadVars["tool" + i]; @@ -337,17 +339,17 @@ function onLoadData(success){ m_DataList[indx].fgcolor = myLoadVars["fgcolor" + i]; m_DataList[indx].thickness = myLoadVars["thickness" + i]; m_DataList[indx].plugin = myLoadVars["plugin" + i]; - + m_DataList[indx].param = myLoadVars["param" + i]; m_DataList[indx].comment = myLoadVars["comment" + i]; - m_DataList[indx].rotation= myLoadVars["rotation" + i]; + m_DataList[indx].rotation= myLoadVars["rotation" + i]; }else if (m_DataList[indx].tool == "DRAW"){ //手書き線は常に再描画 - m_DataList[indx].del = 3; //更新フラグ + m_DataList[indx].del = 3; //更新フラグ } - + }else{ - + //新規オブジェクトだ! var obj = new Object(); obj.del = 3; @@ -364,7 +366,7 @@ function onLoadData(success){ obj.height = myLoadVars["height" + i]; obj.scale = myLoadVars["scale" + i]; obj.edit = myLoadVars["edit" + i]; - + obj.text = myLoadVars["text" + i]; obj.fname = myLoadVars["fname" + i]; obj.shape = myLoadVars["shape" + i]; @@ -373,7 +375,7 @@ function onLoadData(success){ obj.fgcolor = myLoadVars["fgcolor" + i]; obj.thickness = myLoadVars["thickness" + i]; obj.plugin = myLoadVars["plugin" + i]; - + obj.param = myLoadVars["param" + i]; obj.comment = myLoadVars["comment" + i]; obj.rotation= myLoadVars["rotation" + i]; @@ -381,17 +383,17 @@ function onLoadData(success){ } i++; } - - + + //オブジェクトを読み込み for (var i=0;i MyFTime && this.page == MyPage){ //更新されている! - + //自分の情報を書き込み中の場合は、回避する if (WriteAccessCnt == 0){ updatePage(); //更新 @@ -576,23 +578,23 @@ function updatePage(){ clearInterval(updateIntervalID); if (!_root.Main._visible) return; - + if (WriteAccessCnt > 0){ //自分が書き込み中なら、3秒後に再度呼び出し //onMyFTimeVarsで一度、チェックしているが、その後またバッティングする可能性アリ - updateIntervalID = setInterval(updatePage,3000); + updateIntervalID = setInterval(updatePage,3000); }else if (Canvas.isUsingPen == true){ //手書き描画中or消しゴム使用中なら3秒後に再度呼び出し //自分の手描きをWriteした後、updateされるから - updateIntervalID = setInterval(updatePage,3000); + updateIntervalID = setInterval(updatePage,3000); }else if ((oldfnum != null && oldfnum >= 0) && m_DataList[oldfnum].tool == "TEXT"){ //「テキスト」を選択中なら3秒後に再度呼び出し - updateIntervalID = setInterval(updatePage,3000); + updateIntervalID = setInterval(updatePage,3000); }else{ //更新 LoadMapData(true); } - + } /////////////////////////////////////////////////////////////// @@ -602,7 +604,7 @@ function updatePage(){ function WriteMapData(num,draw_numlist,newobj){ //保存 - + var Vars = new LoadVars(); Vars.action = "record";//保存お願い Vars.page = loadoldpage; @@ -611,7 +613,7 @@ function WriteMapData(num,draw_numlist,newobj){ //ページは同一か? var pageSame = (loadoldpage == MyPage); var delfiles = ""; - + var title_changed = false; if (pageSame){ //タイトル取得 @@ -621,15 +623,15 @@ function WriteMapData(num,draw_numlist,newobj){ } //編集モードでなければキャンセル if (!PageEdit || PageLock){ - return; + return; } } - + //大きさ //一つのアイテムを書き換え(ヘッダー含む) if (num != undefined){ var obj = newobj; - if (obj != undefined){ + if (obj != undefined){ //差分だけ更新 if (num == 'head'){ obj.id = 'head';//差分があっても、IDだけは収納する @@ -644,8 +646,8 @@ function WriteMapData(num,draw_numlist,newobj){ for (propname in obj){ if (propname != "xlist" && propname != "ylist" && //手書き配列は送らない propname != "selx" && propname != "sely" && //選択位置 - propname != "num" && propname != "mem" && - propname != "newpic" && + propname != "num" && propname != "mem" && + propname != "newpic" && propname != "date" && propname != "update") { if (obj[propname] != undefined){ @@ -667,7 +669,7 @@ function WriteMapData(num,draw_numlist,newobj){ Vars[obj.id + ":" + "id"] = obj.id;//差分があっても、IDだけは収納する Vars[obj.id + ":" + "xline"] = obj.xline; Vars[obj.id + ":" + "yline"] = obj.yline; - + } } @@ -680,15 +682,15 @@ function WriteMapData(num,draw_numlist,newobj){ ResVars.trycnt = 0; ResVars.pageSame = pageSame; ResVars.onLoad = onLoadResVars; - + _root.statusbar.accessFlag.gotoAndPlay("start"); // WriteAccess = true; //書き込み中 WriteAccessCnt++; // _root.statusbar.writecnt = WriteAccessCnt; _root.statusbar.accessFlag._xscale = 100 + WriteAccessCnt*10; - + Vars.sendAndLoad(SERVER + "write.cgi",ResVars); - + //ページの動作の重さを量る(経験値) var pageweight = getPageWeight(); @@ -715,7 +717,7 @@ onLoadResVars = function(success){ _root.statusbar.accessFlag._xscale = 100 + WriteAccessCnt*10; Vars.sendAndLoad(SERVER + "write.cgi",this); - + }else{ if (MyLang == "en"){ ErrorMes("Writing failure."); @@ -732,7 +734,7 @@ onLoadResVars = function(success){ if (m_DataList[this.num].date == null){//新規作成時 _global.m_DataList[this.num].date = this.update; //作成日を書き換え } - if (m_DataList[this.num].update == this.item_last_update || + if (m_DataList[this.num].update == this.item_last_update || this.item_last_update == undefined || this.item_last_update == "") { //自分で更新 @@ -754,7 +756,7 @@ onLoadResVars = function(success){ if (update_byothers){ //他人によって書き込み前に更新 clearInterval(updateIntervalID); - updateIntervalID = setInterval(updatePage,1000); + updateIntervalID = setInterval(updatePage,1000); //更新間隔をあげる startPageUpdateCheck(true); } @@ -782,12 +784,12 @@ onLoadResVars = function(success){ } for (var i=0;i= date){ - //内部メモリと比較 - return false; - } +} - var so = new SharedObject; - so = SharedObject.getLocal("NOTA"); - var ustr = so.data.lastUptime; - if (ustr != undefined && ustr >= date){ - //外部シェアメモリと比較 - return false; - } - //書き込み - so.data.lastUptime = date; - so.flush(); +map_lc.changeAnonymous = function(power){ + //参加条件と公開レベルが変更された + //account.swfから + _global.MyAnonymous = power; - lastUptime = date; - - return true; - } -map_lc.addImg = function(fname,date){ +function ex_addImg(fname){ //新しい絵がアップロードされた! - if (!checkMapDate(date)){ - return; - } - if (PageEdit != true){ if (MyLang == "en"){ ErrorMes("Please login to insert images."); }else{ - ErrorMes("画像を貼り付けるには、編集モードに切り替えて下さい。"); + ErrorMes("画像を貼り付けるには、編集モードに切り替えて下さい。"); } return; } @@ -873,38 +846,23 @@ map_lc.addImg = function(fname,date){ }else{ ErrorMes("このページは凍結されています。管理者以外は編集できません。"); } - return; + return; } //ファイルを登録! addFile(fname); - + }; -map_lc.changeAnonymous = function(power){ - //参加条件と公開レベルが変更された - //account.swfから - _global.MyAnonymous = power; - -} -map_lc.msgBox = function(msg,date){ +function ex_msgBox(msg){ - //重複していないかチェック - if (!checkMapDate(date)){ - return; - } //メッセージを表示する ErrorMes(msg); - + } -map_lc.openUrl = function(surl,date){ - //同じ日付を排除する - if (getTimer() - map_lc.startTime < 1000){ - //一秒以内のアクセスは認めない - return; - } - +function ex_openUrl(surl){ + //プラグイン命令 if (surl.substr(0,8) == "command:"){ curflag.plugin.onCommandLink(surl.substr(8)); @@ -918,7 +876,7 @@ map_lc.openUrl = function(surl,date){ plgparam = plgname.substr(cr+1); plgname = plgname.substr(0,cr); } - + //プラグインを追加せよ(暫定) if (PageEdit != true){ return; @@ -930,17 +888,17 @@ map_lc.openUrl = function(surl,date){ }else{ ErrorMes("このページは凍結されています。管理者以外は編集できません。"); } - return; + return; } //追加 addPlugin(plgname,plgparam); - return; + return; } if (surl.substr(0,7) == "master:"){ //マスターページの適用 var masterid = surl.substr(7); - + if (PageEdit != true){ return; } @@ -951,38 +909,38 @@ map_lc.openUrl = function(surl,date){ }else{ ErrorMes("このページは凍結されています。管理者以外は編集できません。"); } - return; + return; } - _root.masterPage(masterid); + _root.masterPage(masterid); return; } - + //指定のアドレスのページを開け! - if (surl.substr(0,5) == "http:" || - surl.substr(0,6) == "https:" || - surl.substr(0,7) == "mailto:" || + if (surl.substr(0,5) == "http:" || + surl.substr(0,6) == "https:" || + surl.substr(0,7) == "mailto:" || surl.substr(0,4) == "ftp:") { //外部のページ surl = Replace(surl,"$amp;","&"); //特殊エンコードlink.cgi?page=urlのurlに=&があると動作しないから - surl = Replace(surl,"$equal;","="); - + surl = Replace(surl,"$equal;","="); + //吹き出しを表示させ、ジャンプするか問う FlagLink.jumpUrl(surl); - + // getURL(surl,"_top");//別ウィンドウで開くようにせよ! // getURL(surl,"_blank");//別ウィンドウで開くようにせよ! }else{ //内部のページ - + //編集中の文字がある場合は、やめる //フォーカスを奪う if (MyScreen == 1){ surl += ".screen"; } - + //吹き出しを表示させ、ジャンプするか問う FlagLink.jumpUrl("./?" + surl); @@ -990,6 +948,9 @@ map_lc.openUrl = function(surl,date){ }; +ExternalInterface.addCallback("addImg", this, ex_addImg); +ExternalInterface.addCallback("msgBox", this, ex_msgBox); +ExternalInterface.addCallback("openUrl", this, ex_openUrl); //////////////////////////////////////////////////////////////////////// @@ -1001,7 +962,7 @@ function getMouseX(){ } function getMouseY(){ - return _ymouse; + return _ymouse; } function drawRoad(obj){ @@ -1023,21 +984,21 @@ function drawRoad(obj){ canvasDef.lineTo(x[0],y[0]); } } - + } - + }; function selectRoad(){ -/* +/* //現在のマウス地点の下に道があるか確かめ、あるなら、それらを //強調表示せよ var px = getMouseX(); var py = getMouseY(); - + var i=0; var mindis = 100; var minnum = 0; @@ -1065,10 +1026,10 @@ function selectRoad(){ eval(minnum)._y = py; // eval(minnum)._x = myLoadVars["xlist"+minnum][minnumw]; // eval(minnum)._y = myLoadVars["yist"+minnum][minnumw]; - + //ある! moveFlagFocus(minnum,true);//フォーカスを移動。 -*/ +*/ } @@ -1121,7 +1082,7 @@ function drawListToString(obj){ obj.yline += sp + obj.ylist[i]; sp = ":"; } - + //さらに、既存の道で自分が描いたもので、種類が同じ場合は、連結する /* var i=0; for (i=0;i 0){ playSound("SHU"); - WriteMapData(undefined,DelReserve); + WriteMapData(undefined,DelReserve); } - + }; //////////////////////////////////////////////////////////////////////// @@ -1269,8 +1230,8 @@ function registerErase(){ //////////////////////////////////////////////////////////////////////// function setCursor(){ - - //カーソルをセットする必要が生じたときに呼び出される + + //カーソルをセットする必要が生じたときに呼び出される switch (m_toolname){ case "pen": //道 @@ -1292,8 +1253,8 @@ function setCursor(){ //閲覧モード(ペンを消す) showMyCursor(false); break; - } - + } + }; @@ -1318,7 +1279,7 @@ function setMiniTool(){ if (m_DataList[m_SelList[i].num].fname.indexOf(".jpg") >= 0) isFile = false; else - isImage = false; + isImage = false; }else{ isImage = false; isFile = false; @@ -1330,13 +1291,13 @@ function setMiniTool(){ else if (isImage) obj.gotoAndStop("image"); else if (isFile) obj.gotoAndStop("file"); else obj.gotoAndStop("etc"); - - + + }else{ - //非選択 + //非選択 obj.gotoAndStop("normal"); } - + }else if (m_toolname == "pen"){ //線 obj._visible = true; @@ -1350,7 +1311,7 @@ function setMiniTool(){ obj._visible = false; } - + }; function getEditMode(){ @@ -1362,7 +1323,7 @@ function getEditMode(){ function setToolOption(toolname,sound){ - + //ページがロックされていたら、他は選択できない if (PageLock && toolname != "view"){ if (MyLang == "en"){ @@ -1372,19 +1333,19 @@ function setToolOption(toolname,sound){ } return false; } - + //同じなら、終了 if (m_toolname == toolname){ return; } - + //ペンの種類を取得 m_toolname = toolname; - //サウンド + //サウンド if (sound != false){ playSound("KON"); } - + //設定を適用せよ! setMiniTool(); for (var i=0;i 0 && + if (obj.shape != undefined && obj.shape.length > 0 && obj.shape != "rectangle") { //マスキング @@ -2095,12 +2056,12 @@ function showFlagObjectData(num, obj){ shape._width = 0; shape._height = 0; photo.setMask(null); - shape.hitArea = photo; + shape.hitArea = photo; }else{ shape.hitArea = null; photo.setMask(shape); } - + }else{ //マスキングなし(SWF含む) shape._width = 0; @@ -2109,23 +2070,23 @@ function showFlagObjectData(num, obj){ shape.hitArea = photo; } } - + //読み込み if (pFlag.photoloading == 0){ pFlag.photoloading = 1; //読み込み中 - photo.picture.loadMovie(IMAGESERVER + "view.cgi?page=" + MyPage + + photo.picture.loadMovie(IMAGESERVER + "view.cgi?page=" + MyPage + "&fname=" + escape( obj.fname)); }else{ pFlag.setPhotoSize();//切り抜きを変えた時など } - //透過処理 + //透過処理 if (obj.transparent != undefined){ if (obj.transparent > 1 && obj.transparent < 100) photo._alpha = obj.transparent; else photo._alpha = 100; } - + } break; case "PLUGIN": @@ -2134,7 +2095,7 @@ function showFlagObjectData(num, obj){ //FElement.gotoAndStop("plugin"); var plugin = FElement.plugin; //pFlag.plugin = plugin; - var fobject = plugin; + var fobject = plugin; pFlag.fobject = plugin; //ver 2.0ベータから2.0正式版への互換性 obj.fname = Replace(obj.fname,".txt",".xml"); @@ -2142,7 +2103,7 @@ function showFlagObjectData(num, obj){ //ロード if (pFlag.photoloading == 0){ pFlag.photoloading = 1; //読み込み中 - plugin.loadMovie("plugins/" + obj.plugin + "/" + obj.plugin + ".swf?id=" + num + + plugin.loadMovie("plugins/" + obj.plugin + "/" + obj.plugin + ".swf?id=" + num + "&bparam=" + obj.fname + "&fname=" + obj.fname + "&page=" + MyPage); //bparamは過去との互換性維持のため }else{ @@ -2153,7 +2114,7 @@ function showFlagObjectData(num, obj){ } //選択オブジェクトならタブの位置調整 if (isFlagSelected(num)){ - _root.Main.FlagSelect.showSelect(); + _root.Main.FlagSelect.showSelect(); } }; @@ -2175,11 +2136,11 @@ function findFlagDepth(n){ }; function setFlagDepths(pFlag){ - + //深度を面積から求めて適用せよ! var areasize = 0; var obj = m_DataList[pFlag._name]; - + switch (m_DataList[pFlag._name].tool){ case "TEXT": //テキスト @@ -2224,7 +2185,7 @@ function setFlagDepths(pFlag){ }; function isFlagSelected(num,id){ - //現在選択されているか + //現在選択されているか for (var i=0;i= 0 && multi != "remove"){ @@ -2322,7 +2283,7 @@ function moveFlagFocus(num,option){ obj = eval(num); obj.selected = true; //選択せよ!(作成時) obj.setTextSelect(); //選択せよ!(既存テキスト) - + //今、配列になければ追加せよ if (!found/* || multi != "add"*/){ var newsel = new Object(); @@ -2338,18 +2299,18 @@ function moveFlagFocus(num,option){ if (m_SelList.length <= 0){ //入力フォーカスの消去 resetFocus(); - + }else{ num = m_SelList[0].num; obj = eval(num); } } - + //地点情報のフォーカスが変わった。 if (num >= 0 && option != "nosound" && with_sound){ playSound("KASHA"); - } - + } + //選択枠の変更 if (m_SelList.length > 0){ if (option != "noselect"){ @@ -2358,34 +2319,34 @@ function moveFlagFocus(num,option){ }else{ _root.Main.FlagSelect._visible = false; } - + //メンバの記憶 if (m_SelList.length > 0){ oldfnum = num; curflag = obj; }else{ oldfnum = -1; - curflag = null; + curflag = null; } - + //複数選択時にテキストボックスが含まれる場合は、フォーカス解除 if ((textdeleted && m_SelList.length > 0 && num >= 0 && multi == "remove") || //削除 (m_DataList[added].tool == "TEXT" && m_SelList.length > 1))//追加 { resetFocus(); - + clearInterval(waitd_id); waitd_id = setInterval(waitd,300); - + } - + //ツールセット切り替え setMiniTool(); //リンク吹き出しを消す if (_root.Main.FlagLink._visible){ _root.Main.FlagLink._visible = false; } - + }; //入力フォーカスの消去(Timer仕様) @@ -2411,10 +2372,10 @@ function openFlagFile(num,isDownload){ getURL(SERVER + "view.cgi?page="+ MyPage+"&save=1&fname="+escape(fname)); }else{ getURL(SERVER + "view.cgi?page="+ MyPage+"&fname="+escape(fname)); - + } - + }; //-------------------------------------------------------// @@ -2430,7 +2391,7 @@ function changeFlagMask(num,sname){ obj.shape = sname; _root.Main.showFlagObjectData(num,obj); //showObjectData(obj); //適用 - _root.Main.updateFlag(num,obj); + _root.Main.updateFlag(num,obj); }; function changeFlagBack(num,nextcolor){ @@ -2442,7 +2403,7 @@ function changeFlagBack(num,nextcolor){ var obj = new Object(); //差分を代入 obj.bgcolor = nextcolor; _root.Main.showFlagObjectData(num,obj); - _root.Main.updateFlag(num,obj); + _root.Main.updateFlag(num,obj); }; function changeFlagTranslate(num){ @@ -2459,8 +2420,8 @@ function changeFlagTranslate(num){ var obj = new Object(); //差分を代入 obj.transparent = curv; _root.Main.showFlagObjectData(num,obj); - _root.Main.updateFlag(num,obj); - + _root.Main.updateFlag(num,obj); + }; @@ -2472,7 +2433,7 @@ function IsFlagGuestLock(num,noalert){ //ゲストが変更できない動作か? var author = m_DataList[num].author; //管理人以外は他人のページでは、他人の部品を操作できない - if (PageAuthor != MyID && author != MyID && + if (PageAuthor != MyID && author != MyID && MyPower != "admin") { if (!noalert){ //アラートする @@ -2484,7 +2445,7 @@ function IsFlagGuestLock(num,noalert){ } return true; } - + if (m_DataList[num].edit == "locked"){ if (!noalert){ //アラートする if (MyLang == "en"){ @@ -2495,10 +2456,10 @@ function IsFlagGuestLock(num,noalert){ } return true; } - - + + return false; - + } function deleteFlag(){ @@ -2522,35 +2483,35 @@ function deleteFlag(){ } } moveFlagFocus(-1); - + }; function deleteInterFlag(num,time){ //オブジェクトの削除(内部呼び出し用) var author = m_DataList[num].author; - + if (IsFlagGuestLock(num,1)){ //他人のページでは人のオブジェクトは削除できない //ロックされている return false; } - + eval(num)._visible = false; //保存 var obj = new Object(); obj.del = 1; updateFlag(num,obj,time); - + return true; - + }; function cutFlag(del){ //オブジェクトの切り取りorコピー if (m_SelList.length <= 0) return; - + //メンバをすべて移す var so = new SharedObject; so = SharedObject.getLocal("NOTA",localpath); @@ -2562,10 +2523,10 @@ function cutFlag(del){ } if (m_SelList[i].selx < minselx){ minselx = m_SelList[i].selx; - } + } } for (var i=0;i 30){ re = 30; } @@ -2733,10 +2694,10 @@ function getPageTitle(){ changed = true; } _global.MyPageTitle = pagetitle; - + } return changed; - + }; @@ -2755,11 +2716,11 @@ function getPageTitle(){ function loadMapPosition(){ //地図の初期位置読み込み //将来的には、SharedObjectを使って、場所を記憶する - + //全体の大きさ var stageW = Stage.width-ML-17; var stageH = Stage.height-MT-17; - + //地図の位置情報を読み出す /* so = new SharedObject; so = SharedObject.getLocal("mapdata",localpath); @@ -2768,8 +2729,8 @@ function loadMapPosition(){ //初期位置 if (so.data.mapx == undefined || PageEdit != true){ //標準値 -// changeMapScale(60,2750,1920);//御所が真ん中に来る! -// changeMapScale(100,0,0);//御所が真ん中に来る! +// changeMapScale(60,2750,1920);//御所が真ん中に来る! +// changeMapScale(100,0,0);//御所が真ん中に来る! }else{ //適用(スケールだけ) @@ -2779,24 +2740,24 @@ function loadMapPosition(){ // minsc = stageW / PaperW * 100; // if (_root.Main._xscale < minsc){ // _root.Main._xscale = minsc; -// _root.Main._yscale = minsc; +// _root.Main._yscale = minsc; // } } -*/ +*/ if (Stage.width != null){ var yokosc = stageW / PaperW * 100;//幅いっぱい if (yokosc < MIN_SC)//MIN_SC以下はちょっと視認性が落ちるので、やばい。 yokosc = MIN_SC; - else + else _global.PageReal = true;//全幅表示 if (yokosc > MAX_SC) yokosc = MAX_SC; - + this._xscale = yokosc; this._yscale = yokosc; } moveMap(ML,MT); - + }; @@ -2811,7 +2772,7 @@ function setPoint(){ startm.y = _root._ymouse; startp.x = _root.Main._x; startp.y = _root.Main._y; - + }; function moveMap(x,y,setscroll){ @@ -2820,11 +2781,11 @@ function moveMap(x,y,setscroll){ var maph = PaperH * _root.Main._xscale / 100; var limit = false; - + //全体の大きさ var stageW = Stage.width-ML-17; var stageH = Stage.height-MT-17; - + //横 if (mapw page_cnt){ page_num = page_cnt; }else if (page_num < 1){ page_num = 1; } _root.statusbar.pagenum = "(" + page_num + "/" + page_cnt + ")" - + } @@ -2918,23 +2879,23 @@ function changeMapScale(newscale,x,y,sound){ //ステータスバー更新 curscale = Math.floor(newscale); _root.statusbar.scale = curscale + "%"; - + //設定保存 saveMapPosition(); - + yokosc =stageW / PaperW * 100;//幅いっぱい if (yokosc > MAX_SC) yokosc = MAX_SC; _global.PageReal = (newscale == yokosc);//最大倍率であることを記憶 - - + + }; function Scroll(per,horizontal){ //スクロールバーがドラッグされた oldx = _root.Main._x; oldy = _root.Main._y; - + //マップの大きさ var mapw = PaperW * _root.Main._xscale / 100; var maph = PaperH * _root.Main._xscale / 100; @@ -2943,49 +2904,49 @@ function Scroll(per,horizontal){ var stageH = Stage.height-MT-17; //計算 - if (horizontal) + if (horizontal) moveMap(ML-(mapw-stageW)*per/100,oldy,false); else moveMap(oldx,MT-(maph-stageH)*per/100,false); - + } function setScrollPos(){ - + //マップの大きさ var mapw = PaperW * _root.Main._xscale / 100; var maph = PaperH * _root.Main._xscale / 100; //全体の大きさ var stageW = Stage.width-ML-17; var stageH = Stage.height-MT-17; - + //スクロールバーのサイズ変更 _root.ScrollV._x = stageW+ML; _root.ScrollV._y = MT; - + if (maph == stageH){ _root.ScrollV.setPos( -1,-1, stageH+MT,false); - + }else{ _root.ScrollV.setPos( (MT-_root.Main._y)/(maph-stageH/*+MT*/)*100, (stageH+MT)/maph*100, stageH/*+MT*/,false); } - + _root.ScrollH._y = Stage.height; _root.ScrollH._x = ML+85; _root.statusbar._x = 0; _root.statusbar._y = Stage.height-1-16; - + if (mapw == stageW){ - _root.ScrollH.setPos(-1,-1,stageW-85,true); + _root.ScrollH.setPos(-1,-1,stageW-85,true); }else{ _root.ScrollH.setPos((ML-_root.Main._x)/(mapw-stageW)*100, (stageW)/mapw*100, - stageW-85,true); + stageW-85,true); } @@ -2996,7 +2957,7 @@ function resizePageH(){ //現在使用中のページ+1ページが基本 clearInterval(rsintervalID); rsintervalID = null; - + var i=0; var ytop = -1; //手書き線以外 @@ -3018,7 +2979,7 @@ function resizePageH(){ ytop = y-0; } } - + } //手書き線の下端 var pen_bounds = new Object; @@ -3028,7 +2989,7 @@ function resizePageH(){ ytop = pen_bounds.yMax; } } - + page_cnt = Math.floor(ytop / PageH)+1; if (page_cnt < 1){ page_cnt = 1; @@ -3036,12 +2997,12 @@ function resizePageH(){ var espace = 0; //編集モードなら、次ページ作成のためのスペースを用意 espace = PageH/2; - + if (PaperH != page_cnt*PageH + espace){ _global.PaperH = page_cnt*PageH + espace; backboard._height = PaperH - espace; Canvas._height = PaperH; - + //もし、ページ数を減らす場合で、スクロール位置がおかしいなら setScrollPos(); } @@ -3055,21 +3016,21 @@ function resizePageH(){ canvasLine.lineStyle(1,0x999999,100); canvasLine.moveTo(0,-1);//一番上の線 canvasLine.lineTo(PaperW,-1); - + //ページ区切り for (i=1;i<=page_cnt;i++){ canvasLine.moveTo(0,i*PageH);//下の境界 canvasLine.lineTo(PaperW,i*PageH); - + canvasLine.moveTo(0,(i-1)*PageH);//縦線2本 canvasLine.lineTo(0,i*PageH); canvasLine.moveTo(PaperW,(i-1)*PageH); canvasLine.lineTo(PaperW,i*PageH); } - + //頁番号を更新 updatePageNum(); - + }; @@ -3080,33 +3041,33 @@ function prepareForScroll(isstart){ clearInterval(idmh); idmh = null; } - + if (!oldpageweight){ oldpageweight = getPageWeight(); } - + if (isstart){ //スクロール開始 if (oldpageweight > 60){ - _quality = "LOW"; + _quality = "LOW"; }else if (oldpageweight > 10){ _quality = "MEDIUM"; } - + _root.minitool._visible = false; - + mhprogress = 0; - + }else{ //スクロールストップ _quality = "HIGH"; if (PageEdit){ _root.minitool._visible = true; } - + } - + } function getPageWeight(){ @@ -3139,15 +3100,15 @@ function getPageWeight(){ } pageweight += wt; } - } - + } + if (pageweight > 100){ _root.statusbar.pageWeight._xscale = 100; }else{ _root.statusbar.pageWeight._xscale = pageweight; - + } - + return pageweight; }; @@ -3164,17 +3125,17 @@ function changePageBack(nextcolor,save){ //背景色を変更 var myColor = new Color(_root.Main.backboard); - myColor.setRGB(nextcolor); - + myColor.setRGB(nextcolor); + _root.Main.pagebgcolor = nextcolor; //保存 if (save){ var obj = new Object(); //差分を代入 obj.bgcolor = nextcolor; - _root.Main.updateFlag("head",obj); + _root.Main.updateFlag("head",obj); } - + }; //////////////////////////////////////////////////////////////////////// @@ -3193,18 +3154,18 @@ stageListner.onResize = function(){ if (_root.Main._xscale < minsc){ _root.Main._xscale = minsc; - _root.Main._yscale = minsc; + _root.Main._yscale = minsc; } //必要ならば、移動 var curx = _root.Main._x; var cury = _root.Main._y; moveMap(curx,cury); - // moveMap(0,0); - + // moveMap(0,0); + //スクロールサイズをあわせる setScrollPos(); - + //背景のリサイズ _root.back._width = Stage.width; _root.back._height = Stage.height; @@ -3216,7 +3177,7 @@ stageListner.onResize = function(){ yokosc = MAX_SC; changeMapScale(yokosc,null,null,false); } - + }; Stage.addListener(stageListner); @@ -3240,16 +3201,16 @@ backboard.onPress = function(){ if (!getEditMode()/* && oldfnum == -1*/){ - + //地図を移動開始 PageDragging = true; if (!isMacOS){ showMyCursor(true,"hand"); } setPoint();//現在地点 - + prepareForScroll(true);//スクロール準備 - + } }; @@ -3260,18 +3221,18 @@ backboard.onMouseMove = function(){ if (PageDragging){ //時間が詰まり過ぎていれば、無視 //この値をページの重さに応じて変えるのが妥当 - var spantime = (getTimer() - lasttime); + var spantime = (getTimer() - lasttime); if (spantime < 30){ return; } - + var nextx = startp.x + (Math.round((_root._xmouse- startm.x)/10)*10 ); var nexty = startp.y + (Math.round((_root._ymouse- startm.y)/10)*10 ); //制限内か検査 if (oldnextx != nextx || oldnexty != nexty){ var limit = moveMap(nextx,nexty); oldnextx = nextx; - oldnexty = nexty; + oldnexty = nexty; //初期位置代入 if (limit) setPoint(); lasttime = getTimer(); @@ -3285,17 +3246,17 @@ backboard.onRelease = function(){ //ドラッグの終了 if (!getEditMode()){ //選択を解除 - + if (oldfnum >= 0){ moveFlagFocus(-1); - } + } if (PageDragging){ PageDragging = false; - + prepareForScroll(false); //スクロール準備終了 //場所保存 saveMapPosition(); - + //カーソルを元に戻す showMyCursor(false); diff --git a/flaproject/core/link.fla b/flaproject/core/link.fla deleted file mode 100644 index 1f37dcd..0000000 Binary files a/flaproject/core/link.fla and /dev/null differ diff --git a/nota/default/index.cgi b/nota/default/index.cgi index f0767bf..e7b7840 100755 --- a/nota/default/index.cgi +++ b/nota/default/index.cgi @@ -13,8 +13,8 @@ use utf8; use notalib::Login; use notalib::NDF; -binmode STDOUT, ":encoding(utf-8)"; -binmode STDIN, ":encoding(utf-8)"; +binmode STDOUT, ":encoding(utf-8)"; +binmode STDIN, ":encoding(utf-8)"; if ($m_fastcgi == 1){ #FastCGI @@ -37,21 +37,21 @@ sub main ¬a_get_form(\%FORM); local %COOKIE = (); ¬a_get_cookie(\%COOKIE); - + #LocalConnetionに使うID my $sdir = $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'}; $sdir =~ /.*\//; $sdir = $&; $sdir .= $ENV{'HTTP_USER_AGENT'}; $sdir =~ s/[^a-zA-Z0-9]//g; - + #ログイン情報の取得 local $login = NOTA::Login->new; $login->getlogin(\%COOKIE); - + # local $user,$pass,$editmode,$anonymous; # local $mypower = &login_getlogin(\%COOKIE, \$user, \$pass, \$editmode, \$anonymous); - + #ログインを外部で行うとき if ($login->get_certify eq "skip"){ if ($login->get_power eq ''){ @@ -61,10 +61,10 @@ sub main } } #¬a_error_html("Failure to parse XML.","$user $pass $mypower"); - + #使用言語 local $lang = ¬a_get_lang(); - + #頁番号の取得 my $ishtml = 0, $isscreen = 0; my $page = $FORM{'page'}; @@ -81,9 +81,9 @@ sub main if (!$page || $page eq ""){ $page = 'home'; } - + # - + if ($ishtml){ #HTML表示を行う require 'htmlconv.pl'; @@ -97,10 +97,10 @@ sub main my @lines = (); my $ndf = NOTA::NDF->new; if ($ndf->parsefile("$m_datadir/$page.ndf")){ - + $title = "NOTA - " . $ndf->getItem('head','title'); ¬a_xmlescape($title); #エスケープ - + }else{ #オープンエラー if ($ndf->get_errorcode == 100){ @@ -175,12 +175,12 @@ sub getPageText if ($param eq "text"){ #IDの替わり時を捉える $P{'text'} = $param; - + #ファイル名とテキストのエンコード $value =~ s/%2B/\+/g; #+記号過去との互換性 $value =~ s/%2C/,/g; #区切り 過去との互換性 $value =~ s/'/'/g; #なぜか' が'になる。過去との互換性 - + #文字列 #リンク先の変更 $value =~ s/ 'NOTAポータルへ', - 'Show HTML Version' => 'HTML版を表示', + 'NOTA Portal' => 'NOTAポータルへ', + 'Show HTML Version' => 'HTML版を表示', 'Home' => 'ホーム', 'Help' => 'ヘルプ', 'FAQ' => '質問集', @@ -256,15 +256,15 @@ sub show '\'ja\'' => '\'en\'' ); my $words = join('|',keys( %japanese )); - + my $tabsrc = "tab.swf?ver=$m_version"; my $tabvars = "tabcolor=#9EDD6A&sdir=$sdir&editmode=$editmode&page=$page&lang=$lang"; my $tabflash = ¬a_print_flash("tab",$tabsrc,$tabvars,"noscale","#FFFFFF","","200","52"); - - my $flashsrc = "nota.swf?ver=$m_version"; + + my $flashsrc = "nota?ver=$m_version"; my $flashvars = "certify=" . $login->get_certify . "&sdir=$sdir&page=$page&lang=$lang&screen=$isscreen&toolbar=$toolbar&anonymous=" . $login->get_anonymous . "&"; my $mainflash = ¬a_print_flash("mainflash",$flashsrc,$flashvars,"noscale","#F2F2EE","","100%","100%"); - + #テンプレートの読み込み my $temppath = $m_themedir . "/normal.html"; if ($isscreen == 1){ @@ -277,7 +277,7 @@ sub show ¬a_error_html("テンプレートファイルが開けません。"); return; } - + #テンプレートを置換して出力 print "Content-type: text/html; charset=utf-8\n\n"; foreach (@htmls){ diff --git a/nota/default/link.cgi b/nota/default/link.cgi index acc6f02..163ac9e 100755 --- a/nota/default/link.cgi +++ b/nota/default/link.cgi @@ -10,8 +10,8 @@ require 'option.pl'; require 'nota.pl'; use utf8; -binmode STDIN, ":bytes"; -binmode STDOUT, ":encoding(utf-8)"; +binmode STDIN, ":bytes"; +binmode STDOUT, ":encoding(utf-8)"; if ($m_fastcgi == 1){ #FastCGI @@ -31,7 +31,7 @@ sub main { local %FORM = (); ¬a_get_form(\%FORM); - + my $sdir = $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'}; $sdir =~ /.*\//; $sdir = $&; @@ -52,7 +52,7 @@ sub main $url =~ s/&/\$amp;/g; $url =~ s/=/\$equal;/g; } - + #バリデーション ¬a_validate($page); ¬a_validate($date); @@ -63,13 +63,13 @@ sub main if (defined($fname)){ #アップロードしたファイル名を指定 - &showFlash('imgup',"link.swf","fname=$fname&sdir=$sdir&page=$page&date=$date"); + &showFlash('addImg',$fname); }elsif (defined($url)){ #外部URL指定フラッシュを表示 - &showFlash('link',"link.swf","url=$url&sdir=$sdir&page=$page&delay=$delay"); + &showFlash('openUrl',$url); }elsif (defined($msg)){ #外部URL指定フラッシュを表示 - &showFlash('link',"link.swf","msg=$msg&sdir=$sdir&page=$page&delay=$delay"); + &showFlash('msgBox',$msg); }else{ #エラー &error; @@ -80,19 +80,16 @@ sub main #-- 転送用フラッシュファイルの表示 ------------------------# sub showFlash { - my ($title,$movie,$flashvars) = @_; - - my $flashsrc = ¬a_print_flash("$title","$movie?ver=$m_version","$flashvars","noscale","#FFFFFF","","5","5"); + my ($method,$params) = @_; - #転送用SWFを出力 - print "Content-type: text/html; charset=utf-8\n\n"; + print "Content-type: text/html; charset=utf-8\n\n" ; print <<"END_OF_HTML"; - - NOTA - $title - -$flashsrc + END_OF_HTML @@ -119,4 +119,4 @@ sub error #-----------------------------------------------------------# #-----------------------------------------------------------# -#END_OF_SCRIPT \ No newline at end of file +#END_OF_SCRIPT diff --git a/nota/default/link.swf b/nota/default/link.swf deleted file mode 100644 index 104f819..0000000 Binary files a/nota/default/link.swf and /dev/null differ diff --git a/nota/default/nota.pl b/nota/default/nota.pl index 50f5a38..2618f7e 100644 --- a/nota/default/nota.pl +++ b/nota/default/nota.pl @@ -7,8 +7,8 @@ #-----------------------------------------------------------# use utf8; -binmode STDIN, ":bytes"; -binmode STDOUT, ":encoding(utf-8)"; +binmode STDIN, ":bytes"; +binmode STDOUT, ":encoding(utf-8)"; use XML::Parser; use Encode qw/from_to/; @@ -22,7 +22,7 @@ #-----------------------------------------------------------# #-- NOTAバージョン定義 ------------------------------------# -$m_version = "22"; +$m_version = "24"; #-----------------------------------------------------------# #-- フォームのPOSTとGETを取得 -----------------------------# @@ -51,7 +51,7 @@ sub nota_get_form sub nota_get_cookie { my( $array ) = @_ ; - + my $buffer = $ENV{'HTTP_COOKIE'}; my @pairs = split(/; /,$buffer); foreach (@pairs) @@ -74,7 +74,7 @@ sub nota_get_lang ¬a_validate($lang); return $lang; } - + #環境変数から $lang = $ENV{'HTTP_ACCEPT_LANGUAGE'}; if ($lang =~ /^ja/){ @@ -94,20 +94,20 @@ sub nota_error_html #日英表記分け my %japanese = ( - 'Back' => '前の画面へ戻る', - 'Home' => 'トップページへ移動', + 'Back' => '前の画面へ戻る', + 'Home' => 'トップページへ移動', 'Manual' => 'ノータの使い方を見る' ); my $words = join('|',keys( %japanese )); - - + + #テンプレートの読み込み my $temppath = $m_themedir . "/error.html"; if (open(DATA,"<:encoding(utf-8)", "./$temppath")){ @htmls = ; close(DATA); } - + #テンプレートを置換して出力 print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; @@ -135,7 +135,7 @@ sub nota_print_flash width="$width" height="$height" id="$name" align=""> - + @@ -148,7 +148,7 @@ sub nota_print_flash END_FLASH - + } #-----------------------------------------------------------# @@ -160,7 +160,7 @@ sub nota_get_gmt my @mons = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); my @week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); my $dt= sprintf("%s\, %02d-%s-%04d %02d:%02d:%02d GMT", $week[$wdayg], $mdayg, $mons[$mong], $yearg+1900, $hourg, $ming, $secg); - + return $dt; } @@ -188,13 +188,13 @@ sub nota_convert if ($to eq 'shiftjis' && $from eq 'utf8'){ $data =~ s/\xEF\xBD\x9E/\xE3\x80\x9C/g; #~記号の変換バグがある(Encodeでも変わらず) } - + from_to( $data, $from, $to ); - + if ($to eq 'utf8' && $from eq 'shiftjis'){ $data =~ s/\xE3\x80\x9C/\xEF\xBD\x9E/g; #~記号の変換バグがある(Encodeでも変わらず) } - + $_[0] = $data; return $from; @@ -205,17 +205,17 @@ sub nota_convert sub nota_xmlescape { my $text = $_[0]; - + if (!defined($text) || $text eq ""){ return; } - + #テキストをエスケープ my %escaped = ('<' => '<', '>' => '>', '&' => '&'); $text =~ s/([<>&])/$escaped{$1}/go; - + $_[0] = $text; - + } #-----------------------------------------------------------# @@ -223,17 +223,17 @@ sub nota_xmlescape sub nota_xmlunescape { my $text = $_[0]; - + if (!defined($text) || $text eq ""){ return; } - + #テキストをアンエスケープ my %unescaped = ('lt' => '<', 'gt' => '>', 'amp' => '&'); $text =~ s/&(lt|gt|amp);/$unescaped{$1}/gio; - + $_[0] = $text; - + } @@ -242,20 +242,20 @@ sub nota_xmlunescape sub nota_validate { my ($text,$option) = @_; - + if (!defined($text) || $text eq ""){ return; } - + #optionの値 #default アルファベットと数字、ハイフン、アンダーラインのみ #path /:などファイ名として使えない記号を取る #url 0-9~!@#$%^&*()-+=a-zA-Z[];',.:"<>?\s以外の文字を削除 #xmltag 制御コードとタグに使えない文字<>:;\/\\\r\nを消す、 #text 制御コードを消す - + #セキュリティ上、アルファベット以外の文字の混入を防止する - + if ($option eq "path"){ #ファイル名であるか(特にスラッシュの混入を防ぐ) $text =~ s/(:|;|\/|\\|\r|\n)//g; @@ -279,12 +279,12 @@ sub nota_validate #基本アルファベット以外許さない(デフォルト) $text =~ s/[^0-9a-zA-Z_@\-]//g; } - + $_[0] = $text; - + } #-----------------------------------------------------------# #END_OF_SCRIPT -1; \ No newline at end of file +1; diff --git a/nota/default/nota.swf b/nota/default/nota.swf index e0fca0e..1267ade 100644 Binary files a/nota/default/nota.swf and b/nota/default/nota.swf differ diff --git a/nota/default/themes/original/normal.html b/nota/default/themes/original/normal.html index 607b05c..ea8a968 100644 --- a/nota/default/themes/original/normal.html +++ b/nota/default/themes/original/normal.html @@ -6,6 +6,7 @@ <!--NOTA TITLE--> + @@ -203,14 +212,14 @@ - + + diff --git a/nota/default/themes/original/screen.html b/nota/default/themes/original/screen.html index 0515931..106c645 100644 --- a/nota/default/themes/original/screen.html +++ b/nota/default/themes/original/screen.html @@ -5,6 +5,7 @@ <!--NOTA TITLE--> + diff --git a/nota/default/themes/original/scripts/swf.js b/nota/default/themes/original/scripts/swf.js new file mode 100644 index 0000000..5661fbb --- /dev/null +++ b/nota/default/themes/original/scripts/swf.js @@ -0,0 +1,272 @@ +//v1.7 +// Flash Player Version Detection +// Detect Client Browser type +// Copyright 2005-2008 Adobe Systems Incorporated. All rights reserved. +var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; +var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; +var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; +function ControlVersion() +{ + var version; + var axo; + var e; + // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry + try { + // version will be set for 7.X or greater players + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + version = axo.GetVariable("$version"); + } catch (e) { + } + if (!version) + { + try { + // version will be set for 6.X players only + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + + // installed player is some revision of 6.0 + // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29, + // so we have to be careful. + + // default to the first public version + version = "WIN 6,0,21,0"; + // throws if AllowScripAccess does not exist (introduced in 6.0r47) + axo.AllowScriptAccess = "always"; + // safe to call for 6.0r47 or greater + version = axo.GetVariable("$version"); + } catch (e) { + } + } + if (!version) + { + try { + // version will be set for 4.X or 5.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = axo.GetVariable("$version"); + } catch (e) { + } + } + if (!version) + { + try { + // version will be set for 3.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = "WIN 3,0,18,0"; + } catch (e) { + } + } + if (!version) + { + try { + // version will be set for 2.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + version = "WIN 2,0,0,11"; + } catch (e) { + version = -1; + } + } + + return version; +} +// JavaScript helper required to detect Flash Player PlugIn version information +function GetSwfVer(){ + // NS/Opera version >= 3 check for Flash plugin in plugin array + var flashVer = -1; + + if (navigator.plugins != null && navigator.plugins.length > 0) { + if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { + var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; + var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; + var descArray = flashDescription.split(" "); + var tempArrayMajor = descArray[2].split("."); + var versionMajor = tempArrayMajor[0]; + var versionMinor = tempArrayMajor[1]; + var versionRevision = descArray[3]; + if (versionRevision == "") { + versionRevision = descArray[4]; + } + if (versionRevision[0] == "d") { + versionRevision = versionRevision.substring(1); + } else if (versionRevision[0] == "r") { + versionRevision = versionRevision.substring(1); + if (versionRevision.indexOf("d") > 0) { + versionRevision = versionRevision.substring(0, versionRevision.indexOf("d")); + } + } + var flashVer = versionMajor + "." + versionMinor + "." + versionRevision; + } + } + // MSN/WebTV 2.6 supports Flash 4 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; + // WebTV 2.5 supports Flash 3 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; + // older WebTV supports Flash 2 + else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; + else if ( isIE && isWin && !isOpera ) { + flashVer = ControlVersion(); + } + return flashVer; +} +// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available +function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) +{ + versionStr = GetSwfVer(); + if (versionStr == -1 ) { + return false; + } else if (versionStr != 0) { + if(isIE && isWin && !isOpera) { + // Given "WIN 2,0,0,11" + tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"] + tempString = tempArray[1]; // "2,0,0,11" + versionArray = tempString.split(","); // ['2', '0', '0', '11'] + } else { + versionArray = versionStr.split("."); + } + var versionMajor = versionArray[0]; + var versionMinor = versionArray[1]; + var versionRevision = versionArray[2]; + // is the major.revision >= requested major.revision AND the minor version >= requested minor + if (versionMajor > parseFloat(reqMajorVer)) { + return true; + } else if (versionMajor == parseFloat(reqMajorVer)) { + if (versionMinor > parseFloat(reqMinorVer)) + return true; + else if (versionMinor == parseFloat(reqMinorVer)) { + if (versionRevision >= parseFloat(reqRevision)) + return true; + } + } + return false; + } +} +function AC_AddExtension(src, ext) +{ + if (src.indexOf('?') != -1) + return src.replace(/\?/, ext+'?'); + else + return src + ext; +} +function AC_Generateobj(objAttrs, params, embedAttrs) +{ + var str = ''; + if (isIE && isWin && !isOpera) + { + str += ' '; + } + str += ''; + } + else + { + str += 'new; $login->getlogin(\%COOKIE); - + #編集モードか if ($login->get_power eq '' || $login->get_editmode ne 'true'){ #権限なし @@ -82,19 +82,19 @@ sub main } return; } - + #使用言語 local $lang = ¬a_get_lang(); - + #対象ページを含んだパスを定義 local $imgdir = "$m_imgdir/$page"; - + my $action = $FORM{'action'}; - if ($action eq 'regist' ){ + if ($action eq 'regist' ){ #投稿 ®ist(); - }elsif ($action eq 'regist2' ){ + }elsif ($action eq 'regist2' ){ #テンプレートから投稿 ®ist2(); }elsif ($action eq 'copy' ){ @@ -112,9 +112,7 @@ sub main #バリデーション ¬a_validate($fname,'path'); ¬a_validate($date); - $fname = url_encode($fname); #不可欠 - &showFlash("fname=$fname&sdir=$sdir&page=$page"); - &showFlash("fname=$fname&sdir=$sdir&page=$page&date=$date"); + &showFlash($fname); }else{ #投稿フォーム表示 &printForm; @@ -130,10 +128,10 @@ sub regist my $filedata = $FORM{'imgfdata'}; my $fname = $FORM{'upFileName'}; my $quality = $FORM{'quality'}; - + #まず、UTF8に変換 ¬a_convert($fname,'utf8'); - + #ファイル名をタイトルと拡張子に分割 $fname =~ s/.*(\\|\/)//; #ディレクトリ区切り / より前をカット(IEのみ) my $title = $fname; @@ -142,11 +140,11 @@ sub regist $ext = $1; #ヒットした拡張子 $ext =~ s/[A-Z]/lc($&)/ge; #小文字に変換 } - + #バリデーション ¬a_validate($title,'path'); ¬a_validate($quality); - + #投稿ファイルサイズチェック my $fsize = length($filedata); if( $fsize > $m_max_imgfile_size * 1024 * 1024 ){ @@ -179,21 +177,13 @@ sub regist } return; } - + #イメージデータ保存 $fname = &saveImgData($title,$ext,$filedata,$quality); - + #ファイルは保存されたか? if( -e "$imgdir/" . encode_base64url($fname) ){ - #転送用フラッシュの表示(link.swfを呼び出す) -# $httpdir = 'http://' . $ENV{'HTTP_HOST'} . $ENV{'SCRIPT_NAME'}; -# $httpdir =~ s/\/[^\/]*$//g; #右端の/以下をカット - - $fname = url_encode($fname); -# my $date = time(); #日時を送る - &showFlash("fname=$fname&sdir=$sdir&page=$page"); - #POSTで送ると戻れないので、GETでURLを変える -# print "Location: $httpdir/upload.cgi?fname=$fname&date=$date&page=$page\n\n"; + &showFlash($fname); }else{ if ($lang eq "en"){ &error( "File saving failure." ); @@ -211,7 +201,7 @@ sub regist2 my $dir = $FORM{'dir'}; my $fname = $FORM{'fname'}; my $url = $FORM{'url'}; - + #バリデーション ¬a_validate($dir,'path'); ¬a_validate($fname,'path'); @@ -220,7 +210,7 @@ sub regist2 if ($url =~ /^http/){ #インターネット経由で貼り付け my $http = NOTA::SimpleHttp->new; - + if (!$http->request($url)){ if ($lang eq "en"){ &error( "Can't get file from internet." ); @@ -232,7 +222,7 @@ sub regist2 #bodyデータとファイル名を取り出す $FORM{'imgfdata'} = $http->get_body(); $FORM{'upFileName'} = $http->get_filename("index.html"); - + }else{ #ファイルを開く if( open( FROM, "< $m_templatedir/$dir/$fname") ){ @@ -253,7 +243,7 @@ sub regist2 } #登録 ®ist; - + } #-----------------------------------------------------------# @@ -264,19 +254,19 @@ sub copy #()内の数字を増やして、既存のファイルと重複しないファイル名にする my $fname = $FORM{'fname'}; my $srcpage = $FORM{'srcpage'}; - + #バリデーション ¬a_validate($fname,'path'); ¬a_validate($srcpage); - + #UTF8がくるので、SHIFTJISに変換 my $fname_sjis = $fname; ¬a_convert($fname_sjis,'shiftjis','utf8'); - + my $title = $fname; $title =~ s/(\.[0-9a-zA-Z]+)$//; #拡張子だけにする my $ext = $1; #ヒットした拡張子 - + #元ファイルがあるか? my $source_path = ""; if (-e "$m_imgdir/$srcpage/$fname_sjis"){ @@ -296,7 +286,7 @@ sub copy print "res=OK"; return; } - + #すでに存在していないかチェック my $rep = 2; while( -e "$imgdir/".encode_base64url("$title$ext") ){ @@ -305,7 +295,7 @@ sub copy $rep += 1; #数を増やす } my $newfname = "$title$ext"; - + my $file = NOTA::SimpleFile->new; #画像ファイルコピー @@ -316,7 +306,7 @@ sub copy return; } $newfname = url_encode($newfname); - + print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; print "Content-type: text/plain; charset=utf-8\n\n"; @@ -331,12 +321,12 @@ sub copy sub saveImgData { my ($title, $ext , $img_data , $quality) = @_ ; - + #ContentTypeから拡張子を取得 if ($ext eq ""){ $ext = &getExtFromMimeType($FORM{'upContentType'}); } - + #画像ファイルか my $imgtype = '.jpg.gif.png.bmp.pict.tif.jpeg'; my $isimage = 0; @@ -345,7 +335,7 @@ sub saveImgData $isimage = 1; $ext = ".jpg";#拡張子を強制的にjpgに } - + #ファイル名決定 my $rep = 2; while( -e "$imgdir/" . encode_base64url("$title$ext") ){ #すでに存在していないかチェック @@ -361,10 +351,10 @@ sub saveImgData $length = unpack("%N",$length); $img_data = substr($img_data,128,$length); } - + #ファイル保存 mkdir($imgdir,0755); #ディレクトリの作成 - + if ($isimage == 1){ #画像 my $i = Image::Magick->new; @@ -384,7 +374,7 @@ sub saveImgData } $i->Opaque(color=>'silver', fill=>'white'); $i->Write(filename => "$imgdir/" . encode_base64url($newfname)); - + #分割保存されている場合は最初を採用 my $path = "$imgdir/" . encode_base64url($newfname); if( -e "$path.0" ){ @@ -410,11 +400,11 @@ sub saveImgData return( $newfname ) ; } -sub encode_base64url { - my $e = encode_base64(shift, ""); - $e =~ s/=+\z//; - $e =~ tr[+/][-_]; - return $e; +sub encode_base64url { + my $e = encode_base64(shift, ""); + $e =~ s/=+\z//; + $e =~ tr[+/][-_]; + return $e; } #-----------------------------------------------------------# #-- 拡張子を求める ----------------------------------------# @@ -439,7 +429,7 @@ sub getExtFromMimeType elsif ($ctype =~ /application\/.*realmedia/i) { $ext=".rm";} elsif ($ctype =~ /video\/.*mpeg/i) { $ext=".mpg";} elsif ($ctype =~ /audio\/.*mpeg/i) { $ext=".mp3";} - + return $ext; } @@ -460,7 +450,7 @@ sub getLocalDate $sec = $num[$sec] if ( $sec<=9 ); $year += 1900; my $temp = "$year$month$mday\_$hour$min$sec"; - + return ($temp); } @@ -470,13 +460,13 @@ sub getForm { # パラメータ展開 local( *array ) = @_ ; - + #マルチパートデータの場合 if( $ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data# ){ &getMultiPartData( array, 'imgfdata' ) ; return ; } - + #通常のデコード処理 my $buffer = ""; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } @@ -490,7 +480,7 @@ sub getForm #連想配列へ格納 $array{$name} = $value; } - + } @@ -499,7 +489,7 @@ sub getForm sub getMultiPartData { local( *array, $img_param_name ) = @_ ; - + # 標準入力からデータを読みだす my $buf = "" ; my $read_data = "" ; @@ -509,14 +499,14 @@ sub getMultiPartData $remain -= sysread( STDIN, $buf, $remain ) ; $read_data .= $buf ; } - + # データを解釈する my $p1 = 0; # ヘッダ部の先頭 my $p2 = 0; # ボディ部の先頭 my $p3 = 0; # ボディ部の終端 my $delimiter = "" ; my $max_count = 0 ; - + while( 1 ){ # ヘッダ処理 $p2 = index( $read_data, "\r\n\r\n", $p1 ) + 4 ; @@ -536,11 +526,11 @@ sub getMultiPartData } #その他、ファイルの情報を取得する(ファイル一つが前提) if ( /^Content-Type:([^;]*)/i){ - $array{'upContentType'} = $1; + $array{'upContentType'} = $1; } if ($_ =~ /application\/x-macbinary/i) { $array{'upMacbin'}=1; } } - + # ボディ処理 $p3 = index( $read_data, "\r\n$delimiter", $p2 ) ; my $size = $p3 - $p2 ; @@ -552,7 +542,7 @@ sub getMultiPartData elsif( $name ){ $array{$name} = substr( $read_data, $p2, $size ) ; } - + # 終了処理 $p1 = $p3 + length( "\r\n$delimiter" ) ; if( substr( $read_data, $p1, 4 ) eq "--\r\n" ){ @@ -587,11 +577,9 @@ sub url_encode #-- 転送用フラッシュファイルの表示 ------------------------# sub showFlash { - my( $flashvars ) = @_ ; - my $date = time(); #日時を送る - $flashvars .= "&date=$date"; + my( $fname ) = @_ ; + $fname = decode("UTF-8", $fname); - my $flashsrc = ¬a_print_flash("link","link.swf?ver=$m_version","$flashvars","noscale","#FFFFFF","","5","5"); print "Content-type: text/html; charset=utf-8\n\n" ; print <<"END_OF_HTML"; @@ -607,13 +595,16 @@ sub showFlash } - - $flashsrc + + END_OF_HTML - } #-----------------------------------------------------------# @@ -621,9 +612,31 @@ END_OF_HTML sub error { my( $msg ) = @_ ; - $flashvars = "msg=$msg&sdir=$sdir&page=$page"; - &showFlash($flashvars); + print "Content-type: text/html; charset=utf-8\n\n" ; + print <<"END_OF_HTML"; + + + + + NOTA + + + + + + +END_OF_HTML }