////////////////////////////////////////////////////////////////////////////// // adiary 汎用 JavaScript // (C)2006-2008 nabe@abk ////////////////////////////////////////////////////////////////////////////// //[TAB=4] // 条件によりスタイルシート書き換え var Is_IE = false; var appVer = navigator.appVersion; var IE_pos = appVer.indexOf("MSIE"); if (0'); } function set_close() { document.write(''); } function change(mode_name, id) { var style = document.getElementById(id).style; var mode = style.display; var a_obj = document.getElementById(id + "a"); /* デフォルト値ロード */ if (mode == "") { mode = default_mode[ mode_name ]; if (!mode) { mode=mode_name; } } if ( mode == "block" || mode == "open" ) { style.display = "none"; if (a_obj) { a_obj.className = "close"; } } else { style.display = "block"; if (a_obj) { a_obj.className = "open"; } } if (typeof resetpos == "function") resetpos(); // resizeform.js対策 } //------------------------------------------------------------------------------ // SPAM対策 //------------------------------------------------------------------------------ function array2str() { var str=""; for (i = 0; i < arguments.length; i++) { var v = arguments[i]; if (i != 1 && i != 3 && v<128 && v>0) { str += "&#" + v + ";"; } } document.write(str); } function put_sid(id) { var formtext = document.getElementById(id); var str=""; for (i = 1; i < arguments.length; i++) { var v = arguments[i]; if (i != 2 && v<128 && v>0) { str += String.fromCharCode(v); } } formtext.value = str; } //------------------------------------------------------------------------------ // テキスト・画像ポップアップ //------------------------------------------------------------------------------ function popup_img( img_url, evt ) { return _popup_text( "", evt ); } function popup_text( text, evt ) { return _popup_text('
' + text + "\n
", evt); } function _popup_text( text, evt ) { var div = document.getElementById( 'popup_' ); var style = div.style; var cx; var cy; if (! evt) { evt = event; } cx = evt.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); cy = evt.clientY + (document.body.scrollTop || document.documentElement.scrollTop); style.left = (cx + 16) + 'px'; style.top = (cy + 8) + 'px'; div.innerHTML = text; style.zIndex = 9999; style.maxWidth = 240; style.position = 'absolute'; style.display = 'block'; } function popdown(id) { if (!id) { id='popup_'; } document.getElementById( id ).style.display = 'none'; } //------------------------------------------------------------------------------ // メニューポップアップ //------------------------------------------------------------------------------ function popup_menu( id ) { var bar = document.getElementById("contents-bar"); var obj = document.getElementById( id ); var cx = obj.offsetLeft; var cy = bar.offsetTop; // + bar.offsetHeight; // 表示 var style = document.getElementById( id + "-div" ).style; style.left = cx + 'px'; style.top = cy + 'px'; style.zIndex = 9999; style.position = 'absolute'; style.display = 'block'; } //------------------------------------------------------------------------------ // popup ウィンドウのオープン //------------------------------------------------------------------------------ function popup(url, width, height) { if(!width) { width = 400; } if(!height) { height = 240; } win = window.open(url, 'popup', 'width=' + width + ', height=' + height); win.focus(); } function popup_simple(url, param) { if (param == undefined) { param = 'location=yes, menubar=no, resizable=yes'; } win = window.open(url, 'popup_simple', param); win.focus(); } //------------------------------------------------------------------------------ // テーマ選択 //------------------------------------------------------------------------------ var now_template; function set_now_template( template_dir ) { var ary = template_dir.split("/"); now_template = ary.pop(); if (now_template == "") { now_template = ary.pop(); } } function change_theme(base_path, form_name, sample_url, sample_location, doc) { var form = document.getElementById(form_name); var value = form.theme.options[form.theme.selectedIndex].value; form.theme_name.value = value; /* split */ var ary = value.split("/"); var template = ary[0]; if (now_template == template) { /* スタイルを書き換えるだけ */ var css = doc.getElementById('theme'); var readme = document.getElementById('readme'); var name = ary[1]; css.href = ""; css.href = base_path + value + '/' + name +".css"; readme.src = base_path + value + '/' + '/README'; } else { /* リロード */ now_template = template; sample_location.href = sample_url + value; } } function set_theme(base_path, theme_name, sample_url, sample_location) { var form = document.getElementById(form_name); var value = form.theme.options[form.theme.selectedIndex].value; form.theme_name.value = value; /* split */ var ary = value.split("/"); var template = ary[0]; if (now_template == template) { /* スタイルを書き換えるだけ */ var css = doc.getElementById('theme'); var readme = document.getElementById('readme'); var name = ary[1]; css.href = base_path + value + '/' + name +".css"; readme.src = base_path + value + '/' + '/README'; } else { /* リロード */ now_template = template; sample_location.href = sample_url + value; } } //-------------------------------------------------- // 詳細デザイン向けベーステーマの選択 //-------------------------------------------------- function popup_theme_select( form_name ) { var theme = get_now_theme( form_name ); if (theme == "") { theme = 'satsuki/satsuki'; } popup_simple("<@v.myself>?theme_select_frame/" + theme); } function change_base_theme( theme_idx ) { var form = document.getElementById('design_edit'); form.theme.selectedIndex = theme_idx+1; } function get_now_theme_idx( form_name ) { var form = document.getElementById(form_name); return form.theme.selectedIndex; } function get_now_theme( form_name ) { var form = document.getElementById(form_name); return form.theme.options[form.theme.selectedIndex].value; } //------------------------------------------------------------------------------ // 特定フィールドの値を設定 //------------------------------------------------------------------------------ function set_field_text( id, text ) { var field = document.getElementById( id ); field.value = text; } function copy_field( des, src ) { des = document.getElementById( des ); src = document.getElementById( src ); des.value = src.value; } //------------------------------------------------------------------------------ // Textareaのリサイズ //------------------------------------------------------------------------------ // テキストエリアの横幅を自動調整 function setWidthAuto_on_IE( id ) { if (! Is_IE) { return; } var _obj = document.getElementById( id ); // クロージャに登録 var resize_func = function() { var obj = _obj; setWidthAuto(obj); if (typeof resetpos == "function") resetpos(); // resizeform.js対策 } addEvent(window, 'load', resize_func); addEvent(window, 'resize', resize_func); } function setWidthAuto(obj) { var parent = obj.parentNode; if (!parent) { // for IE parent = obj.parentElement; } var pwidth = parent.clientWidth; if (!pwidth) { // for IE pwidth = parent.offsetWidth; } var width = Math.floor( pwidth*0.95 ); if (width<50) { width=50; } obj.style.width = width + "px"; // debug //dbg = document.getElementById( "edit-excerpt" ); //dbg.value = "set " + width + "px\n"; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // 日記編集画面用スクリプト //////////////////////////////////////////////////////////////////////////////// // カーソル位置にテキストを挿入 function insert_text( text ) { var textarea = document.getElementById("editarea"); textarea.focus(); if (document.selection) { tmp1 = document.selection.createRange(); tmp1.text = text; } else if (textarea.selectionStart || textarea.selectionStart == '0') { var top = textarea.scrollTop; // スクロール位置 var start = textarea.selectionStart; // カーソル位置 textarea.value = textarea.value.substring(0, start) + text + textarea.value.substring(start); // カーソル移動 start += text.length; textarea.setSelectionRange(start, start); // スクロール移動 textarea.scrollTop = top; } } // カーソル選択範囲にタグを挿入 function insert_blocktag( start_tag, end_tag ) { return insert_tag( start_tag, end_tag, 1); } function insert_tag( start_tag, end_tag, is_block ) { var textarea = document.getElementById("editarea"); textarea.focus(); if (document.selection) { tmp1 = document.selection.createRange(); tmp2 = tmp1.text; tmp1.text = start_tag + tmp2 + end_tag; } else if (textarea.selectionStart || textarea.selectionStart == '0') { var top = textarea.scrollTop; // スクロール位置 var start = textarea.selectionStart; // 選択開始位置 var end = textarea.selectionEnd; // 選択終了位置 var prev=""; var after=""; var taglen = start_tag.length; if(textarea.value.substring(start, start+taglen) != start_tag){ // ブロックタグの挿入 if (is_block && textarea.value.substring(start-1, start) != "\n") prev = "\n"; if (is_block && textarea.value.substring(end, end+1) != "\n") after= "\n"; textarea.value = textarea.value.substring(0, start) + prev + start_tag + textarea.value.substring(start, end) + end_tag + after + textarea.value.substring(end); // カーソル移動 textarea.setSelectionRange(start + prev.length, end + prev.length + start_tag.length + end_tag.length ); // スクロール移動 textarea.scrollTop = top; } } } // カーソル選択範囲にタグを挿入(毎行) function insert_listtag( start_tag, end_tag ) { return insert_tag_line( start_tag, end_tag, 1); } function insert_tag_line( start_tag, end_tag, is_list ) { var textarea = document.getElementById("editarea"); textarea.focus(); if (document.selection) { tmp1 = document.selection.createRange(); tmp2 = tmp1.text; if (tmp2.match(/\x0D\x0A/)) { tmp2 = tmp2.replace(/\x0D\x0A/g, end_tag + "\x0D\x0A" + start_tag); } else if (tmp2.match(/\x0D/)) { tmp2 = tmp2.replace(/\x0D/g, end_tag + "\x0D" + start_tag); } else if (tmp2.match(/\x0A/)) { tmp2 = tmp2.replace(/\x0A/g, end_tag + "\x0A" + start_tag); } tmp1.text = start_tag + tmp2 + end_tag; } else if (textarea.selectionStart || textarea.selectionStart == '0') { var top = textarea.scrollTop; // スクロール位置 var start = textarea.selectionStart; // 選択開始位置 var end = textarea.selectionEnd; // 選択終了位置 var before_length = textarea.value.length; var pre_text = textarea.value.substring(0, start); var post_text = textarea.value.substring(end); var selected_text = textarea.value.substring(start, end); var replaced_text = ''; var taglen = start_tag.length; var lines = selected_text.match(/[^\n]*[\n]?/g); for (l in lines) { if(lines[l].substring(0, taglen) != start_tag || is_list ){ cr = ''; if(lines[l].match(/\n$/)){ cr = "\n"; lines[l] = lines[l].replace(/\n$/g, ""); } if(l == 0 && cr == '') replaced_text += start_tag + lines[l] + end_tag + cr; else if(lines[l].length) replaced_text += start_tag + lines[l] + end_tag + cr; else if(cr != '') replaced_text += cr; }else{ replaced_text += lines[l]; } } textarea.value = pre_text + replaced_text + post_text; // カーソル移動 textarea.setSelectionRange(start, end + (textarea.value.length - before_length)); // スクロール移動 textarea.scrollTop = top; } } // カーソル選択範囲にhttpタグを挿入(毎行) function insert_tag_http() { var textarea = document.getElementById("editarea"); textarea.focus(); if (document.selection) { start_tag = '['; end_tag = ':title]'; tmp1 = document.selection.createRange(); tmp2 = tmp1.text; if (tmp2.match(/\x0D\x0A/)) { tmp2 = tmp2.replace(/\x0D\x0A/g, end_tag + "\x0D\x0A" + start_tag); } else if (tmp2.match(/\x0D/)) { tmp2 = tmp2.replace(/\x0D/g, end_tag + "\x0D" + start_tag); } else if (tmp2.match(/\x0A/)) { tmp2 = tmp2.replace(/\x0A/g, end_tag + "\x0A" + start_tag); } tmp1.text = start_tag + tmp2 + end_tag; } else if (textarea.selectionStart || textarea.selectionStart == '0') { var top = textarea.scrollTop; // スクロール位置 var start = textarea.selectionStart; // 選択開始位置 var end = textarea.selectionEnd; // 選択終了位置 var before_length = textarea.value.length; var pre_text = textarea.value.substring(0, start); var post_text = textarea.value.substring(end); var selected_text = textarea.value.substring(start, end); var replaced_text = ''; var lines = selected_text.match(/[^\n]*[\n]?/g); for (l in lines) { cr = ''; if(lines[l].match(/\n$/)){ cr = "\n"; lines[l] = lines[l].replace(/\n$/g, ""); } if (lines[l].match(/^\[(https?|ftp):/)){ // skip replaced_text += lines[l]+cr; }else if (lines[l].match(/^(https?|ftp):/)){ terms = lines[l].split(" ", 2); if(!terms[1]) terms[1] = 'title'; replaced_text += '[' + terms[0] + ':' + terms[1] + ']'+cr; }else if(lines[l].length){ replaced_text += '[http://foo.com:' + lines[l] + ']'+cr; }else{ if(l == 0 && cr == '') replaced_text += '[http://foo.com:title]'+cr; else if(cr != '') replaced_text += cr; } } textarea.value = pre_text + replaced_text + post_text; // カーソル移動 textarea.setSelectionRange(start, end + (textarea.value.length - before_length)); // スクロール移動 textarea.scrollTop = top; } } // カーソル選択範囲の文字列を置換 function selection_replace( before_string, after_string ) { var textarea = document.getElementById("editarea"); textarea.focus(); if (document.selection) { tmp1 = document.selection.createRange(); tmp2 = tmp1.text; if (tmp2.match(/\x0D\x0A/)) { before_string = before_string.replace(/\n/g, "\x0D\x0A"); } else if (tmp2.match(/\x0D/)) { before_string = before_string.replace(/\n/g, "\x0D"); } else if (tmp2.match(/\x0A/)) { before_string = before_string.replace(/\n/g, "\x0A"); } tmp2 = tmp2.replace(RegExp(before_string, "g"), after_string); tmp1.text = tmp2; } else if (textarea.selectionStart || textarea.selectionStart == '0') { var top = textarea.scrollTop; // スクロール位置 var start = textarea.selectionStart; // 選択開始位置 var end = textarea.selectionEnd; // 選択終了位置 var before_length = textarea.value.length; textarea.value = textarea.value.substring(0, start) + textarea.value.substring(start, end).replace(RegExp(before_string, "g"), after_string) + textarea.value.substring(end); // カーソル移動 textarea.setSelectionRange(start, end + (textarea.value.length - before_length)); // スクロール移動 textarea.scrollTop = top; } } // RSS向け添付ファイル情報 function insert_file( url, size ) { var text_obj = document.getElementById("edit-files"); url = url.replace(/,/g, "%2c"); text_obj.value = url; // ファイルサイズ付加 size = size +0; if (size > 0) { text_obj.value += ", " + size; } } //------------------------------------------------------------------------------ // 親ノードの表示範囲指定 //------------------------------------------------------------------------------ function set_display_level( checkbox_id, id, classname, max_level ) { var css_obj = document.getElementById( id ); var flag = document.getElementById( checkbox_id ); var text = ""; if (flag && flag.checked) { max_level=998; } if (Is_IE) { // IE, IEでは動作せず return ; } for(i=max_level+1; i<16; i++) { text += classname + i.toString() + " { display: none; }\n"; } css_obj.innerHTML = text; } //############################################################################## //############################################################################## // ライブラリ(サブルーチン) //############################################################################## function addEvent(obj, name, func) { if (obj.addEventListener) { obj.addEventListener( name, func, true ); } else { obj.attachEvent( 'on' + name, func ); } } function delEvent(obj, name, func){ if(obj.removeEventListener){ obj.removeEventListener(name, func, true); }else{ obj.detachEvent( 'on' + name, func ); } } function checkbox_set( checkbox_id, value ) { var obj = document.getElementById( checkbox_id ); obj.checked = value; } function checkbox_change( checkbox_id, id, id_false, mode) { var flag = document.getElementById( checkbox_id ); var style = document.getElementById( id ).style; var f_obj = document.getElementById( id_false ); if ( !mode ) { mode="block" } if ( flag.checked ) { style.display = mode; if (f_obj) { f_obj.style.display="none"; } } else { style.display = "none"; if (f_obj) { f_obj.style.display=mode; } } if (typeof resetpos == "function") resetpos(); // resizeform.js対策 } function set_focus( obj_id ) { var obj = document.getElementById( obj_id ); obj.focus(); } //------------------------------------------------------------------------------ // 全てのチェックボックスを選択・解除する //------------------------------------------------------------------------------ function check_all(check) { for(var count = 0; count < document.edit.pkey_ary.length; count++) { document.edit.pkey_ary[count].checked = check; } }