二〇〇五年 七月 十八日(月)海の日

400blogその他カスタマイズ その2

[Blog記録]

エントリーの画面で文字に色をつけたりするためのボタン
ちょっと面倒だった。

まずは、mt.js に 以下を付け足します。

function replaceEntity(str) { // 置換処理
str = str.split("&").join("&"); // & から変換すること
str = str.split("<").join("&lt;");
str = str.split(">").join("&gt;");
str = str.split('"').join("&quot;");
return(str);
}
function changeEntity(obj) {
if (document.selection) { // WinIE
obj.focus();
var str = document.selection.createRange().text;
if (str) {
document.selection.createRange().text = replaceEntity(str);
} else if (obj.value && confirm('テキストエリア内の「&,<,>,"」を実体参照化します。\n\nよろしいですか?')) { // 選択されていないとき
obj.value = replaceEntity(obj.value);
}
} else if ( (obj.selectionEnd - obj.selectionStart) > 0 ) { // Mozilla
var bgnPos = obj.selectionStart;
var endPos = obj.selectionEnd;
var bfrStr = obj.value.substring(0, bgnPos);
var fcsStr = replaceEntity(obj.value.substring(bgnPos, endPos));
var difLen = fcsStr.length - (endPos - bgnPos);
var aftStr = obj.value.substring(endPos, obj.value.length);
obj.value = Array(bfrStr,fcsStr,aftStr).join('');
obj.setSelectionRange(bgnPos,endPos + difLen); // 選択し直し
} else if (obj.value) { // Others (テキストエリア内全てが対象)
if (confirm('テキストエリア内の「&,<,>,"」を実体参照化します。\n\nよろしいですか?')) {
obj.value = replaceEntity(obj.value);
}
}
return;
}
function changeTag(str) { // 置換処理
str = str.split('&lt;').join("<");
str = str.split('&gt;').join(">");
str = str.split('&quot;').join('"');
str = str.split('&amp;').join("&"); // & は最後に変換
return(str);
}
function reverseEntity(obj) {
if (document.selection) { // WinIE
obj.focus();
var str = document.selection.createRange().text;
if (str) {
document.selection.createRange().text = changeTag(str);
} else if (obj.value && confirm('テキストエリア内の実体参照文字を「&,<,>,"」に変換します。\n\nよろしいですか?')) { // 選択されていないとき
obj.value = changeTag(obj.value);
}
} else if ( (obj.selectionEnd - obj.selectionStart) > 0 ) { // Mozilla
var bgnPos = obj.selectionStart;
var endPos = obj.selectionEnd;
var bfrStr = obj.value.substring(0, bgnPos);
var fcsStr = changeTag(obj.value.substring(bgnPos, endPos));
var difLen = fcsStr.length - (endPos - bgnPos);
var aftStr = obj.value.substring(endPos, obj.value.length);
obj.value = Array(bfrStr,fcsStr,aftStr).join('');
obj.setSelectionRange(bgnPos,endPos + difLen); // 選択し直し
} else if (obj.value) { // Others (テキストエリア内全てが対象)
if (confirm('テキストエリア内の実体参照文字を「&,<,>,"」に変換します。\n\nよろしいですか?')) {
obj.value = changeTag(obj.value);
}
}
return;
}
function addClear(obj)
{
var item = '<div style="clear: both"> </div>';
//IE
if (document.selection) {
obj.focus();
sel = document.selection.createRange();
sel.text = item;
}
//Mozilla
else if (obj.selectionStart || obj.selectionStart == '0') {
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
obj.value = obj.value.substring(0, startPos)
+ item
+ obj.value.substring(endPos, obj.value.length);
//Other
} else {
obj.value += item;
}
}
function changeFontsize(obj, tag) {
var startTag = '<span style=\"font-size:' + tag + '\;\">';
var endTag = '</span>';
//IE
if (document.selection) {
obj.focus();
var str = document.selection.createRange().text;
if(!str) {
return;
}
document.selection.createRange().text = startTag + str + endTag;
return;
}
//Mozilla
else if ((obj.selectionEnd - obj.selectionStart) >0) {
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
obj.value = obj.value.substring(0, startPos)
+ startTag
+ obj.value.substring(startPos, endPos)
+ endTag
+ obj.value.substring(endPos, obj.value.length);
return;
}
//Other
else {
obj.value += startTag + endTag;
}
}
function changeFontcolor(obj, tag) {
var startTag = '<span style=\"color:' + tag + '\;\">';
var endTag = '</span>';
//IE
if (document.selection) {
obj.focus();
var str = document.selection.createRange().text;
if(!str) {
return;
}
document.selection.createRange().text = startTag + str + endTag;
return;
}
//Mozilla
else if ((obj.selectionEnd - obj.selectionStart) >0) {
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
obj.value = obj.value.substring(0, startPos)
+ startTag
+ obj.value.substring(startPos, endPos)
+ endTag
+ obj.value.substring(endPos, obj.value.length);
return;
}
//Other
else {
obj.value += startTag + endTag;
}
}
function colorSelect (obj) {
var v;
if (!document.selection) return;
var str = document.selection.createRange().text;
if (!str) return;
with(obj) {
if (options[selectedIndex].value == "------") return;
v = options[selectedIndex].value;
}
document.all.colcol.style.backgroundColor = v;
document.selection.createRange().text = '<span style="color:' + v + ';">' + str + '</span>';
}
function colorSet() {
var v;
if (!document.selection) return;
var str = document.selection.createRange().text;
if (!str) return;
if (document.all.colcol.options[document.all.colcol.selectedIndex].value == "------") return;
v = document.all.colcol.options[document.all.colcol.selectedIndex].value;
document.selection.createRange().text = '<span style="color:' + v + ';">' + str + '</span>';
}
function fontsizeSelect (obj) {
var v;
if (!document.selection) return;
var str = document.selection.createRange().text;
if (!str) return;
with(obj) {
if (options[selectedIndex].value == "------") return;
v = options[selectedIndex].value;
}
document.selection.createRange().text = '<span style="font-size:' + v + ';">' + str + '</span>';
}
function fontSet() {
var v;
if (!document.selection) return;
var str = document.selection.createRange().text;
if (!str) return;
if (document.all.foncha.options[document.all.foncha.selectedIndex].value == "------") return;
v = document.all.foncha.options[document.all.foncha.selectedIndex].value;
document.selection.createRange().text = '<span style="font-size:' + v + ';">' + str + '</span>';
}
function bgSelect (obj) {
var v;
if (!document.selection) return;
var str = document.selection.createRange().text;
if (!str) return;
with(obj) {
if (options[selectedIndex].value == "BG") return;
v = options[selectedIndex].value;
}
document.all.bg.style.backgroundColor = v;
document.selection.createRange().text = '<span style="background:' + v + '">' + str + '</span>';
}
function bgSet() {
var v;
if (!document.selection) return;
var str = document.selection.createRange().text;
if (!str) return;
if (document.all.bg.options[document.all.bg.selectedIndex].value == "BG") return;
v = document.all.bg.options[document.all.bg.selectedIndex].value;
document.selection.createRange().text = '<span style="background:' + v + '">' + str + '</span>';
}

次は、edit_entry.tmpl です。body のところには・・・

<script type="text/javascript">
<!--
if (canFormat) {
with (document) {
write('<a href="javascript:changeEntity(document.entry_form.text);"><img src="<TMPL_VAR NAME=STATIC_URI>images/jittai_1.gif" alt="<MT_TRANS phrase="jittai_1">" width="40" height="16" border="0" /></a>');
write('<a href="javascript:reverseEntity(document.entry_form.text);"><img src="<TMPL_VAR NAME=STATIC_URI>images/jittai_2.gif" alt="<MT_TRANS phrase="jittai_2">" width="40" height="16" border="0" /></a>');
write('<a href="javascript:addClear(document.entry_form.text);"><img src="<TMPL_VAR NAME=STATIC_URI>images/clear.gif" border="0" alt="クリア" width="30" height="16" /></a>');
write('<a title="<MT_TRANS phrase="Bold">" href="#" onclick="return formatStr(document.entry_form.text, \'strong\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-bold.gif" alt="<MT_TRANS phrase="Bold">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="strike">" href="#" onclick="return formatStr(document.entry_form.text, \'strike\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/strike.gif" alt="<MT_TRANS phrase="Strike">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Italic">" href="#" onclick="return formatStr(document.entry_form.text, \'em\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-italic.gif" alt="<MT_TRANS phrase="Italic">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Underline">" href="#" onclick="return formatStr(document.entry_form.text, \'u\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-underline.gif" alt="<MT_TRANS phrase="Underline">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Insert Link">" href="#" onclick="return insertLink(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-link.gif" alt="<MT_TRANS phrase="Insert Link">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Insert Email Link">" href="#" onclick="return insertLink(document.entry_form.text, 1)"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-email.gif" alt="<MT_TRANS phrase="Insert Email Link">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Quote">" href="#" onclick="return formatStr(document.entry_form.text, \'blockquote\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-quote.gif" alt="<MT_TRANS phrase="Quote">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Upload File">" href="<TMPL_VAR NAME=SCRIPT_URL>?__mode=start_upload&amp;blog_id=<TMPL_VAR NAME=BLOG_ID>" onclick="window.open(this.href, \'upload\', \'width=400,height=450,resizable=yes\'); return false"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-file.gif" alt="<MT_TRANS phrase="Upload File">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="textarea">" href="#" onclick="return formatStr(document.entry_form.text, \'textarea\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/text.gif" alt="<MT_TRANS phrase="textarea">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Insert Horizontal Rule">" href="#" onclick="return insertSomething(document.entry_form.text, \'<hr size=&quot;1&quot; noshade />\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-hr.gif" alt="<MT_TRANS phrase="Insert Horizontal Rule">" width="22" height="16" border="0" /></a>');
write('<!--[if gte IE 5]><a title="<MT_TRANS phrase="Setcolor">" href="#" <form name="colform"><select name="colcol" onchange="colorSelect(this)"><option value="color" selected>Color<option value="#ff3300">Red<option value="#6666ff">Blue<option value="#009933">Green</select><input type="button" onclick="colorSet()" value="&#x25ef;"></a><![endif]-->');
write('<!--[if gte IE 5]><a title="<MT_TRANS phrase="Setbgcolor">" href="#" <form name="bgform"><select name="bg" onchange="bgSelect(this)"><option value="BG" selected>BG<option style="background-color:#FF3333;" value="#FF3333">red<option style="background-color:#FFFF33;" value="#FFFF33">yellow<option style="background-color:#3399FF;" value="#3399FF">blue<option style="background-color:#00FF66;" value="#00FF66">green<option style="background-color:#CC6600;" value="#CC6600">brown</select><input type="button" onclick="bgSet()" value="!"></a><![endif]-->');
}
}
// -->
</script>
<![if !gte IE 5]>
<div style="float: right;">
<select>
<option value="">Font
<option onclick="javascript:changeFontcolor(document.entry_form.text,'#009933')">Green
<option onclick="javascript:changeFontcolor(document.entry_form.text,'#6666ff')">Blue
<option onclick="javascript:changeFontcolor(document.entry_form.text,'#ff3300')">Red
<option onclick="javascript:changeBGcolor(document.entry_form.text,'#FF3333')">red
<option onclick="javascript:changeBGcolor(document.entry_form.text,'#FFFF33')">yellow
<option onclick="javascript:changeBGcolor(document.entry_form.text,'#3399FF')">blue
<option onclick="javascript:changeBGcolor(document.entry_form.text,'#00FF66')">green
<option onclick="javascript:changeBGcolor(document.entry_form.text,'#CC6600')">brown
</select>
</div>
<![endif]>

同様に extend のところには・・・

<script type="text/javascript">
<!--
if (canFormat) {
with (document) {
write('<a href="javascript:changeEntity(document.entry_form.text_more);"><img src="<TMPL_VAR NAME=STATIC_URI>images/jittai_1.gif" alt="<MT_TRANS phrase="jittai_1">" width="40" height="16" border="0" /></a>');
write('<a href="javascript:reverseEntity(document.entry_form.text_more);"><img src="<TMPL_VAR NAME=STATIC_URI>images/jittai_2.gif" alt="<MT_TRANS phrase="jittai_2">" width="40" height="16" border="0" /></a>');
write('<a href="javascript:addClear(document.entry_form.text_more);"><img src="<TMPL_VAR NAME=STATIC_URI>images/clear.gif" border="0" alt="クリア" width="30" height="16" /></a>');
write('<a title="<MT_TRANS phrase="Bold">" href="#" onclick="return formatStr(document.entry_form.text_more, \'strong\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-bold.gif" alt="<MT_TRANS phrase="Bold">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="strike">" href="#" onclick="return formatStr(document.entry_form.text_more, \'strike\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/strike.gif" alt="<MT_TRANS phrase="Strike">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Italic">" href="#" onclick="return formatStr(document.entry_form.text_more, \'em\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-italic.gif" alt="<MT_TRANS phrase="Italic">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Underline">" href="#" onclick="return formatStr(document.entry_form.text_more, \'u\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-underline.gif" alt="<MT_TRANS phrase="Underline">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Insert Link">" href="#" onclick="return insertLink(document.entry_form.text_more)"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-link.gif" alt="<MT_TRANS phrase="Insert Link">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Insert Email Link">" href="#" onclick="return insertLink(document.entry_form.text_more, 1)"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-email.gif" alt="<MT_TRANS phrase="Insert Email Link">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Quote">" href="#" onclick="return formatStr(document.entry_form.text_more, \'blockquote\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-quote.gif" alt="<MT_TRANS phrase="Quote">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Upload File">" href="<TMPL_VAR NAME=SCRIPT_URL>?__mode=start_upload&amp;blog_id=<TMPL_VAR NAME=BLOG_ID>" onclick="window.open(this.href, \'upload\', \'width=400,height=450,resizable=yes\'); return false"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-file.gif" alt="<MT_TRANS phrase="Upload File">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="textarea">" href="#" onclick="return formatStr(document.entry_form.text_more, \'textarea\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/text.gif" alt="<MT_TRANS phrase="textarea">" width="22" height="16" border="0" /></a>');
write('<a title="<MT_TRANS phrase="Insert Horizontal Rule">" href="#" onclick="return insertSomething(document.entry_form.text_more, \'<hr size=&quot;1&quot; noshade />\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-hr.gif" alt="<MT_TRANS phrase="Insert Horizontal Rule">" width="22" height="16" border="0" /></a>');
write('<!--[if gte IE 5]><a title="<MT_TRANS phrase="Setfontsize">" href="#" <form name="fonchaform"><select name="foncha" onchange="fontsizeSelect(this)"><option value="Font" selected>Font<option value="50%">50%<option value="70%">70%<option value="130%">130%<option value="200%">200%</select><input type="button" onclick="fontSet()" value="&#x25ef;"></a><![endif]-->');
}
}
// -->
</script>
<![if !gte IE 5]>
<div style="float: right;">
<select>
<option value="">Font
<option onclick="javascript:changeFontsize(document.entry_form.text,'50%')">50%
<option onclick="javascript:changeFontsize(document.entry_form.text,'70%')">70%
<option onclick="javascript:changeFontsize(document.entry_form.text,'130%')">130%
<option onclick="javascript:changeFontsize(document.entry_form.text,'200%')">200%
</select>
</div>
<![endif]>
</div>

はあはあ。