// palette_selfy.js .. for PaintBBS and ShiPainter .. last update : 2004/04/11. //→使い方 .. 外部JSとして読み込んでから、好きな所で palette_selfy() を呼び出して下さい. var selfv = new Array(); var selfytag = new Array(); //←消さないで. //↓設定 ------------------------------------------------------------ // ※selfv[*] は、それぞれの設定を空白にすると、その機能のボタンを表示させなくできます. // +-する値のとこ var pnum = 10; // +- のデフォルト値 selfv[0] = 'size=3 style="text-align:right">'; // 数値タグ(type=text)の中身 // パレットリスト. // ..各要素の中の色は、1つだけなら他の13色はその色を元に↓の2通りから自動取得、 var psx = 0; // 0:彩度+明度を元に. 1:色相を循環で. // 彩度+明度を元にするときの色. (複数設定する場合は、1つ1つの色を \n で区切る) var pdefs = new Array( "#ffffff", "#ffe6e6", "#ffece6", "#fff3e6", "#fff9e6", "#ffffe6", "#f3ffe6", "#e6fff3", "#e6f3ff", "#ffe6ff", "#eeddbb", "" ); // ※空白だとその要素はスキップ. // 色相で循環させるときの色. (複数設定する場合は、1つ1つの色を \n で区切る) var pdefx = new Array( "#ffffff", "#ffe6e6", "#ffcccc", "#ff9999", "#e6cccc", "#e69999", "#cc9999", "#cc6666", "#996666", "#993333", "#660000", "" ); // ※空白だとその要素はスキップ. // デフォルトのパレットカラー (一番最初にアプレットにでる色) var pbase = "#000000\n#FFFFFF\n#B47575\n#888888\n#FA9696\n#C096C0\n#FFB6FF\n#8080FF\n#25C7C9\n#E7E58D\n#E7962D\n#99CB7B\n#FCECE2\n#F9DDCF"; // サンプルカラーの // 表示するパレットのカラー番号(この中にある番号だけ↓で書き出し) var sams = new Array(0, 2, 4, 6, 8, 10, 12, 1, 3, 5, 7, 9, 11, 13); // 彩度+明度を元にするとき var samx = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13); // 色相で循環させるとき selfv[1] = " "; // フォント selfv[2] = 'style="font-size:xx-small; background-color:$FONT;"'; // フォントタグの中身(「$FONT」:16進法RGB色が代入、正確に適用される属性は↓の3つ) // … color, style="color" style="background", style="background-color") // ※↓これより下は ">"(閉じタグ) も入れてください // // パレットの選択ボタン(type=radio)タグの中身 selfv[3] = 'style="border-width:0;" title="デフォルトのパレット">'; // デフォルト色 selfv[4] = 'style="border-width:0;" title="ここのパレットを使う。\nチェックしてるときにさらに押すと、チェックが外れ、\n色相循環か、彩度+明度パレットに。(1番の色が基本色)">'; // 選択 // ボタン(type=button)タグの中身 selfv[5] = 'value="H" title="色相パレット (1番の色が基本色)">'; // 色相 selfv[6] = 'value="S" title="彩度パレット (1番の色が基本色)">'; // 彩度 selfv[7] = 'value="B" title="明度パレット (1番の色が基本色)">\n'; // 明度 selfv[8] = 'value="o" title="ここに今のパレットを保存">'; // セーブ selfv[9] = 'value="x" title="ここのパレットをデフォルトに戻す">
\n'; // デフォルト selfv[10] = 'value="H+" title="パレット全体の色相を+">'; // 色相+ selfv[11] = 'value="H-" title="パレット全体の色相を−">'; // 色相- selfv[12] = 'value="S+" title="パレット全体の彩度を+">'; // 彩度+ selfv[13] = 'value="S-" title="パレット全体の彩度を−">'; // 彩度- selfv[14] = 'value="B+" title="パレット全体の明度を+">\n'; // 明度+ selfv[15] = 'value="B-" title="パレット全体の明度を−">\n'; // 明度- selfv[16] = 'value="RGB+" title="パレット全体のRGBを+">
\n'; // RGB+ selfv[17] = 'value="RGB-" title="パレット全体のRGBを−">
\n'; // RGB- // グラデーションのとこ selfv[18] = 'style="border-width:0;" title="2点を元にグラデーション (1番の色と14番の色)" checked>2'; // 2点 selfv[19] = 'style="border-width:0;" title="3点を元にグラデーション (1番、8番、14番の色)">3'; // 3点 selfv[20] = 'style="border-width:0;" title="4点を元にグラデーション (1、6、10、14番の色)">4
\n'; // 4点 selfv[21] = 'value="RGB" title="RGBでグラデーション">\n'; // RGB? selfv[22] = 'value="+HSB" title="+HSBでグラデーション (色相+方向)">\n'; // +HSB selfv[23] = 'value="-HSB" title="-HSBでグラデーション (色相−方向)">
\n'; // -HSB // 追加・削除 selfv[24] = 'value="+" title="パレットを追加します">'; // 追加 selfv[25] = 'value="-" title="選択中のパレットを削除します">\n'; // 削除 // セーブ・オートセーブ selfv[26] = 'checked title="ここにチェックをつけておくと、色を変更するとき、\n 自動で保存パレットにパレット情報をセーブします。\n自動保存が適用されるのは、\n チェックしてるパレットから他のパレットに移動したとき、\n チェックしてるパレットのH/S/Bボタンを押したとき、\n の2つのときです。サンプルの色も変わります。\nもちろん、ここにチェックしてなくても、\n 手動でセーブボタンを押せば、パレットに保存されます。">'; // 自動セーブ selfv[27] = 'value="O" title="今の全体のパレットをクッキーに保存">
\n'; // セーブ // デフォルトのパレットを 色相360°にするか、彩度++明度-- にするか selfv[28] = 'style="border-width:0;" title="デフォルトのパレットは、色相で循環させる">Ho'; // H° selfv[29] = 'style="border-width:0;" title="デフォルトのパレットは、彩度+、明度−でリスト">+S-B'; // +S-B selfv[30] = 'value="X" title="全体のパレットをデフォルトに戻す">
\n'; // デフォルトに // UPLOAD / DOWNLOAD selfv[31] = "value=\"\" size=8 title=\"パレットデータ。\n・アップロードするときは、ここに貼り付けてください。\n・ダウンロードするときは、ここにデータが出力されます。\n  ローカルのテキストにでも保存してください。\n※パレットデータは、\n pals = new Array('#FFFFFF','#B47575\\n#888888\\n...');\n のように、JSの配列形式で書かれます。\">\n"; // selfv[32] = 'value="↑" title="←からパレットデータをアップロード">'; // selfv[33] = 'value="↓" title="←←にパレットデータをダウンロード">
\n'; // // このパレットテーブルを囲んでる、ソースとかタグとか (formタグは消しちゃダメ) // フォーム始まり selfytag[0] = '
\n\n
\n'; // フォームの間_1 (個別のパレット 〜 全体の HSB、RGB +- とか) selfytag[1] = '
\n'; // フォームの間_2 (全体の HSB、RGB +- とか 〜 グラデーション) selfytag[2] = '
\n
\nGradation'; // フォームの間_3 (グラデーション 〜 パレットの追加・削除ボタン) selfytag[3] = '
\n
\nPalette'; // フォームの間_4 (パレットの追加・削除ボタン 〜 セーブボタン) selfytag[4] = "\nSave"; // フォームの間_5 (セーブボタン 〜 Defaultは H++/+S-B どちらか) selfytag[5] = '
\n
\nDefault'; // フォームの間_6 (Defaultは H++/+S-B どちらか 〜 パレットのアップ/ダウンロード) selfytag[6] = '
\n
\nUpdata '; // フォーム終わり selfytag[7] = "
\n
\n
\n"; //↑設定おわり ------------------------------------------------------ // 初期値 (いたるところで使う値) var d = document; var pon, pno; // radioチェック中? / チェックしたパレットNO. var qon, qno, qmo; // buttonプッシュ中? / プッシュしたパレットNO. var pals = new Array(); // color-palette var inp = '= g && r >= b) { max = r; } else if (g >= b) { max = g; } else { max = b; } // min if (r <= g && r <= b) { min = r; } else if (g <= b) { min = g; } else { min = b; } // 0,0,0 if (max <= 0) { return new Array(0, 0, 0); } // difference dif = max - min; //Hue: if (max > min) { if (g == max) { h = ((b - r) / dif) * 60 + 120; } else if (b == max) { h = ((r - g) / dif) * 60 + 240; } else if (b > g) { h = ((g - b) / dif) * 60 + 360; } else { h = ((g - b) / dif) * 60; } if (h < 0) { h = h + 360; } } else { h = 0; } h *= 255 / 360; //Saturation: s = (dif / max) * 255; //Value: v = max; return new Array(h, s, v); } // RGB16→RGB10 表記. 値は 000000〜ffffff function to10rgb(str) { var ns = new Array(); str = str.replace(/[^0-9a-fA-F]/g, ""); for (var i = 0; i <= 2; i++) { ns[i] = str.substr(i * 2, 2); if (!ns[i]) { ns[i] = "00"; } ns[i] = Number(parseInt(ns[i], 16).toString(10)); } return ns; } // 10→16進法二桁 function format16(n) { n = Number(n).toString(16); if (n.length < 2) { n = "0" + n; } return n; } // ------------------------------------------------------------------------- // パレットに (※ q=1:アプレットパレットに出力しない. lst=1:最初のとき function rady(p, q, lst) { var d = document; var df = d.forms.palepale; // デフォルトパレット if (!p && p != 0) { pon = 0; pno = ""; d.paintbbs.setColors(pbase); return; } var ps = pals[p].split("\n"); var n = pnum; if (!q && df.num.value) { n = Number(df.num.value); } if (!q && pon == 1 && pno != p) { poncheck(); } // 揃ってるならすぐ返す if ((pon != 1 || pno != p) && ps.length == 14) { if (!q) { pon = 1; pno = p; } if (q != 1 && pals[p]) { d.paintbbs.setColors(pals[p]); } return; } // checkしてるなら if (pon == 1 && pno == p) { var pget = String(d.paintbbs.getColors()); // if(pget==pals[p]){ return; } var cs = pget.split("\n"); ps[0] = cs[0]; ps[1] = ""; } // 欠けているなら var cs = new Array(); var psy = 0; // H°/ +S-B psy = check_h_sb(lst); if (psy == 1) { cs = rh_list(p, n); } // H°リスト else { cs = sb_list(p, n); } // +S-B リスト if (q) { // 初期設定時 pals[p] = String(cs.join("\n")); } if (q != 1) { // 一般 if (pon == 1 && pno == p) { checkout(); } else { pon = 1; pno = p; } // pals[p] = String(cs.join('\n')); d.paintbbs.setColors(String(cs.join("\n"))); } } // H°リスト function rh_list(p, n) { var ps = pals[p].split("\n"); var rgb = to10rgb(ps[0]); //→RGB var hsv = RGBtoHSB(rgb[0], rgb[1], rgb[2]); //→HSB var cs = new Array(ps[0], ps[1]); if (!cs[0]) { cs[0] = "#ffffff"; } if (hsv[1] != 0 && !cs[13]) { cs[13] = "#ffffff"; } for (var i = 1; i < 13; i++) { if (ps[i] && (pon != 1 || pno != p)) { cs[i] = ps[i]; continue; } //ある var x, y, z; if (hsv[1] == 0) { //白黒 x = hsv[0]; y = 0; if (i % 2 == 0) { z = 255 - i * n; } else { z = 0 + (i - 1) * n; } } else if (i >= 12) { x = hsv[0]; y = 0; z = 255 - hsv[1]; } else { x = hsv[0] + (i * 255) / 12; y = hsv[1]; z = hsv[2]; } while (x < 0) { x += 255; } if (y < 0) { y = 0; } if (z < 0) { z = 0; } //↓0 while (x > 255) { x -= 255; } if (y > 255) { y = 255; } if (z > 255) { z = 255; } //↑255 // for (var j=0; j<=2; j++){ hsv[j] = Math.round(hsv[j]); } rgb = HSBtoRGB(x, y, z); for (var j = 0; j <= 2; j++) { rgb[j] = Math.round(rgb[j]); } cs[i] = "#" + format16(rgb[0]) + format16(rgb[1]) + format16(rgb[2]); } return cs; } // +S-B リスト function sb_list(p, n) { var ps = pals[p].split("\n"); var rgb = to10rgb(ps[0]); //→RGB var hsv = RGBtoHSB(rgb[0], rgb[1], rgb[2]); //→HSB var cs = new Array(ps[0], ps[1]); if (!cs[0]) { cs[0] = "#ffffff"; } if (hsv[1] == 0 && !cs[1]) { cs[1] = "#000000"; } else if (!cs[1]) { cs[1] = "#ffffff"; } for (var i = 2; i < 14; i++) { if (ps[i] && (pon != 1 || pno != p)) { cs[i] = ps[i]; continue; } //ある var y, z; if (hsv[1] == 0) { //白黒 y = 0; if (i % 2 == 0) { z = 255 - i * n; } else { z = 0 + (i - 1) * n; } } else { if (i % 2 == 0) { //左 y = hsv[1] + i * n; z = hsv[2]; } else { //右 y = hsv[1] + (i - 1) * n; z = hsv[2] - (i - 1) * n; } } while (z < 0) { z += 255; } while (y < 0) { y += 255; } //↓0 while (z > 255) { z -= 255; } while (y > 255) { y -= 255; } //↑255 // for (var j=0; j<=2; j++){ hsv[j] = Math.round(hsv[j]); } rgb = HSBtoRGB(hsv[0], y, z); for (var j = 0; j <= 2; j++) { rgb[j] = Math.round(rgb[j]); } cs[i] = "#" + format16(rgb[0]) + format16(rgb[1]) + format16(rgb[2]); } return cs; } // 個別でH/S/Bをリストアップ function onplus(p, m) { var d = document; var df = d.forms.palepale; var n = Number(df.num.value); //+- if (pon == 1 && pno == p) { poncheck(); } // 連続のとき if (m > 0 && n * (qon + 1) > 38) { qon = 0; } if (qno == p && qmo == m && qon >= 1) { qon++; n *= (qon + 1) / 2; } else { qno = p; qmo = m; qon = 1; } var ps = pals[p].split("\n"); var rgb = to10rgb(ps[0]); //→RGB var hsv = RGBtoHSB(rgb[0], rgb[1], rgb[2]); //→HSB var cs = new Array(); if (m == 2) { n *= -1; } for (var i = 0; i < 14; i++) { var z; if (m == 0) { z = hsv[m] + ((i % 2) * 2 - 1) * Math.round(Math.floor(i / 2) * n); } else { z = hsv[m] + i * n; } while (z < 0) { z += 255; } //↓0 while (z > 255) { z -= 255; } //↑255 // for (var j=0; j<=2; j++){ hsv[j] = Math.round(hsv[j]); } if (m == 1) { rgb = HSBtoRGB(hsv[0], z, hsv[2]); } //→HSB else if (m == 2) { rgb = HSBtoRGB(hsv[0], hsv[1], z); } else { rgb = HSBtoRGB(z, hsv[1], hsv[2]); } //→HSB for (var j = 0; j <= 2; j++) { rgb[j] = Math.round(rgb[j]); } cs[i] = "#" + format16(rgb[0]) + format16(rgb[1]) + format16(rgb[2]); } checkout(1); d.paintbbs.setColors(String(cs.join("\n"))); } // 全体のH/S/Bをプラスマイナス function alplus(m, n) { var d = document; var cs = String(d.paintbbs.getColors()).split("\n"); n *= Number(d.forms.palepale.num.value); //+- poncheck(); for (var i = 0; i < cs.length; i++) { var rgb = to10rgb(cs[i]); //→RGB var hsv = RGBtoHSB(rgb[0], rgb[1], rgb[2]); //→HSB //↑明度255のとき彩度減 if (m == 2 && n > 0 && hsv[2] >= 255) { hsv[1] -= n; if (hsv[1] < 0) { hsv[1] = 0; } else if (hsv[1] > 255) { hsv[1] = 255; } //↓0 or ↑255 } hsv[m] += n; //↓0 ↑255 if (m == 0) { if (hsv[0] < 0) { hsv[0] += 255; } else if (hsv[0] > 255) { hsv[0] -= 255; } } else { if (hsv[m] < 0) { hsv[m] = 0; } else if (hsv[m] > 255) { hsv[m] = 255; } } // for (var j=0; j<=2; j++){ hsv[j] = Math.round(hsv[j]); } rgb = HSBtoRGB(hsv[0], hsv[1], hsv[2]); //→HSB for (var j = 0; j <= 2; j++) { rgb[j] = Math.round(rgb[j]); } cs[i] = "#" + format16(rgb[0]) + format16(rgb[1]) + format16(rgb[2]); } checkout(); d.paintbbs.setColors(String(cs.join("\n"))); } // 全体のRGBをプラスマイナス function alrgb(n) { var d = document; var cs = String(d.paintbbs.getColors()).split("\n"); n *= Number(d.forms.palepale.num.value); //+- poncheck(); for (var i = 0; i < cs.length; i++) { var rgb = to10rgb(cs[i]); //→RGB for (var j = 0; j <= 2; j++) { rgb[j] += n; rgb[j] = Math.round(rgb[j]); if (rgb[j] < 0) { rgb[j] = 0; } //↓0 if (rgb[j] > 255) { rgb[j] = 255; } //↑255 } cs[i] = "#" + format16(rgb[0]) + format16(rgb[1]) + format16(rgb[2]); } checkout(); d.paintbbs.setColors(String(cs.join("\n"))); } // グラデーション function grady(m) { var d = document; var df = d.forms.palepale; var n = 2; if (df.gradc) { for (var j = 0; j < df.gradc.length; j++) { if (df.gradc[j].checked == true) { n = Number(df.gradc[j].value); break; } } } var cs = String(d.paintbbs.getColors()).split("\n"); var gs = new Array(1, 13); if (n == 3) { gs = new Array(1, 7, 13); } else if (n == 4) { gs = new Array(1, 5, 9, 13); } poncheck(); cs[1] = cs[0]; // 2〜4色 for (var i = 0; i < gs.length - 1; i++) { var p = gs[i]; var q = gs[i + 1]; var rgbp = to10rgb(cs[p]); //→RGB var rgbq = to10rgb(cs[q]); //→RGB2 // HSB var hsvp = new Array(); var hsvq = new Array(); if (m == 1 || m == -1) { hsvp = RGBtoHSB(rgbp[0], rgbp[1], rgbp[2]); //→HSB hsvq = RGBtoHSB(rgbq[0], rgbq[1], rgbq[2]); //→HSB } // パレットの色 for (var k = p + 1; k < q; k++) { var rgb = new Array(); // HSB if (m == 1 || m == -1) { var hsv = new Array(); for (var j = 0; j <= 2; j++) { // RGB var sa = (hsvp[j] - hsvq[j]) / (q - p); if (j == 0) { // H if (m * hsvp[j] > m * hsvq[j]) { sa = Math.abs(sa) - 255 / (q - p); } hsv[0] = hsvp[0] + m * Math.abs(sa) * (k - p); if (hsv[0] < 0) { hsv[0] += 255; } else if (hsv[0] > 255) { hsv[0] -= 255; } } else { // S,B hsv[j] = hsvp[j] - sa * (k - p); if (hsv[j] < 0) { hsv[j] = 0; } else if (hsv[j] > 255) { hsv[j] = 255; } } } rgb = HSBtoRGB(hsv[0], hsv[1], hsv[2]); //→HSB for (var j = 0; j <= 2; j++) { rgb[j] = Math.round(rgb[j]); } // RGB } else { for (var j = 0; j <= 2; j++) { // RGB var sa = (rgbp[j] - rgbq[j]) / (q - p); rgb[j] = Math.round(rgbp[j] - sa * (k - p)); if (rgb[j] < 0) { rgb[j] = 0; } else if (rgb[j] > 255) { rgb[j] = 255; } //↑↓ } } cs[k] = "#" + format16(rgb[0]) + format16(rgb[1]) + format16(rgb[2]); } } cs[0] = cs[1]; cs[1] = "#ffffff"; checkout(); d.paintbbs.setColors(String(cs.join("\n"))); } // ------------------------------------------------------------------------- // パレットのサンプルカラー function csamp(p, pz, lst) { var ss = ""; var ps = pz.split("\n"); var slong = sams.length; var psy = check_h_sb(lst); if (psy == 1) { slong = samx.length; } // color-sample for (var i = 0; i < slong; i++) { // color-title var k, cl = "", rgb = "", hsv = "", ctl = ""; if (psy == 1) { k = samx[i]; } else { k = sams[i]; } if (ps[k]) { rgb = to10rgb(ps[k]); //→RGB hsv = RGBtoHSB(rgb[0], rgb[1], rgb[2]); //→HSB for (var j = 0; j <= 2; j++) { hsv[j] = Math.round(hsv[j]); } ctl = "HSB: " + hsv[0] + "," + hsv[1] + "," + hsv[2] + "\n"; ctl += "RGB: " + rgb[0] + "," + rgb[1] + "," + rgb[2] + "\nRGB16: " + ps[k]; } if (selfv[2]) cl = selfv[2].replace(/\$FONT/i, ps[k]); if (selfv[1]) ss += '' + selfv[1] + ""; } return ss; } // パレットのリスト function palette_list(lst) { var d = document; var ds = ""; for (var p = 0; p < pals.length; p++) { if (!pals[p]) { continue; } var samw = csamp(p, pals[p], lst); //サンプル // element if (selfv[4]) ds += inr + 'name="rad" value="' + p + '" onclick="rady(' + p + ')" ' + selfv[4] + samw + "\n"; // ds+=''+samw+''; if (selfv[5]) ds += inp + 'onclick="onplus(' + p + ',0)" ' + selfv[5]; if (selfv[6]) ds += inp + 'onclick="onplus(' + p + ',1)" ' + selfv[6]; if (selfv[7]) ds += inp + 'onclick="onplus(' + p + ',2)" ' + selfv[7]; if (selfv[8]) ds += inp + 'onclick="savy(' + p + ')" ' + selfv[8]; if (selfv[9]) ds += inp + 'onclick="defy(' + p + ')" ' + selfv[9]; } return ds; } // チェックをつける、フォントカラーのサンプルを変更 function checkin(p, not) { qno = ""; qmo = ""; qon = 0; if (!pals[p]) { return; } var d = document; // font-color var ps = pals[p].split("\n"); var slong = sams.length; var psy = check_h_sb(); if (psy == 1) { slong = samx.length; } // color-sample for (var i = 0; i < slong; i++) { // color-title var k, rgb = "", hsv = "", ctl = ""; if (psy == 1) { k = samx[i]; } else { k = sams[i]; } if (ps[k]) { rgb = to10rgb(ps[k]); //→RGB hsv = RGBtoHSB(rgb[0], rgb[1], rgb[2]); //→HSB for (var j = 0; j <= 2; j++) { hsv[j] = Math.round(hsv[j]); } ctl = "HSB: " + hsv[0] + "," + hsv[1] + "," + hsv[2] + "\n"; ctl += "RGB: " + rgb[0] + "," + rgb[1] + "," + rgb[2] + "\nRGB16: " + ps[k]; } // replace var ds; if (brwz == 1) { ds = d.all("font_" + p + "_" + k); } else if (brwz == 2) { ds = d.getElementById("font_" + p + "_" + k); } if (ds) { if (ds.style.background) { ds.style.background = ps[k]; } if (ds.style.backgroundColor) { ds.style.backgroundColor = ps[k]; } if (ds.style.color) { ds.style.color = ps[k]; } if (ds.color) { ds.color = ps[k]; } } } // check if (not != 1) { var df = d.forms.palepale; for (var j = 0; j < df.rad.length; j++) { if (df.rad[j].value == p) { df.rad[j].checked = true; break; } } } } // checkを外す function checkout(q) { pon = 0; pno = ""; if (q != 1) { qno = ""; qmo = ""; qon = 0; } var df = document.forms.palepale; for (var j = 0; j < df.rad.length; j++) { if (df.rad[j].checked == true) { df.rad[j].checked = false; break; } } } // 以前のパレットを自動保存 function poncheck(not) { var d = document; var df = document.forms.palepale; if (df.autosave && df.autosave.checked == false) { return; } else if (pon == 1) { var pget = String(d.paintbbs.getColors()); if (pals[pno] != pget) { pals[pno] = pget; checkin(pno, 1); if (not != 1) { pcookset(1); } } } } // パレットをセーブ function savy(p) { var d = document; pals[p] = String(d.paintbbs.getColors()); checkin(p); pcookset(1); pon = 1; pno = p; } // パレットをデフォルトに function defy(p) { checkout(); var q = pdefs[p]; var df = document.forms.palepale; if (check_h_sb() == 1) { q = pdefx[p]; } if (q) { pals[p] = q; rady(p, 2); checkin(p); } else { minsy(p); } } // パレット追加 function plusy() { var d = document; if (brwz == 1 || brwz == 2) { var p = pals.length; var pz = String(d.paintbbs.getColors()); if (pz) { pals[p] = pz; } else { pals[p] = "#" + Number(d.paintbbs.getInfo().m.iColor).toString(16); rady(p, 1); } } if (brwz == 1 && d.all("palelist").innerHTML) { d.all("palelist").innerHTML = palette_list(); checkin(p); } else if (brwz == 2 && d.getElementById("palelist").innerHTML) { d.getElementById("palelist").innerHTML = palette_list(); checkin(p); } } // パレット削除 function minsy(p) { var d = document; var df = d.forms.palepale; if (!p && p != 0) { for (var j = 0; j <= df.rad.length; j++) { if (df.rad[j] && df.rad[j].checked == true) { p = Number(df.rad[j].value); break; } } } if ((!p && p != 0) || p < 0) { return; } pals[p] = ""; var plong = pdefs.length; if (check_h_sb() == 1) { plong = pdefx.length; } if (p >= plong) { var k = 0; var pds = new Array(); pds = pals; pals = new Array(); for (var j = 0; j < pds.length; j++) { if (p != j && pds[j]) { pals[k] = pds[j]; k++; } } } if (brwz == 1 && d.all("palelist").innerHTML) { d.all("palelist").innerHTML = palette_list(); } else if (brwz == 2 && d.getElementById("palelist").innerHTML) { d.getElementById("palelist").innerHTML = palette_list(); } checkout(); } // パレットデフォルト function def_list() { var okd = confirm("全体のパレットをデフォルトに戻します。\nよろしいですか?"); if (!okd) { return; } var d = document; var df = d.forms.palepale; pals = new Array(); var psy = 0; var plong = pdefs.length; if (check_h_sb() == 1) { psy = 1; plong = pdefx.length; } for (var p = 0; p < plong; p++) { if (psy == 1) { pals[p] = pdefx[p]; } else { pals[p] = pdefs[p]; } } for (var p = 0; p < pals.length; p++) { if (pals[p]) { rady(p, 1); } } if (brwz == 1 && d.all("palelist").innerHTML) { d.all("palelist").innerHTML = palette_list(); } else if (brwz == 2 && d.getElementById("palelist").innerHTML) { d.getElementById("palelist").innerHTML = palette_list(); } else { for (var p = 0; p < pals.length; p++) { if (pals[p]) { checkin(p, 1); } } } } // デフォルト h_sb のフォームのチェック. H°にチェックがついてるなら1 function check_h_sb(lst) { var ch = 0; var df = document.forms.palepale; if (lst != 1 && df && df.h_sb) { for (var i = 0; i < df.h_sb.length; i++) { if (df.h_sb[i].value == 1 && df.h_sb[i].checked == true) { ch = 1; break; } } } else { ch = psx; } return ch; } // パレットデータ アップロード function pupload() { var d = document; var df = d.forms.palepale; var qs = new Array(); var palx = ""; if (df.palz) { palx = df.palz.value; } if (!palx) { return; } pals = new Array(); if (eval(palx)) { } else { var px = palx.split(/\(|\)/); var ps = px[1].split(","); for (var p = 0; p < ps.length; p++) { var q = ps[p].replace(/[^0-9a-fA-F]/g, ""); pals[p] = q; } } for (var p = 0; p < pals.length; p++) { if (pals[p]) { rady(p, 1); } } if (brwz == 1 && d.all("palelist").innerHTML) { d.all("palelist").innerHTML = palette_list(); } else if (brwz == 2 && d.getElementById("palelist").innerHTML) { d.getElementById("palelist").innerHTML = palette_list(); } else { for (var p = 0; p < pals.length; p++) { if (pals[p]) { checkin(p, 1); } } } } // パレットデータ ダウンロード function pdownload() { var d = document; var df = d.forms.palepale; var qs = new Array(); for (var p = 0; p < pals.length; p++) { qs[p] = "'" + pals[p].replace(/\n/g, "\\n") + "'"; } var palx = "pals = new Array(\n" + qs.join(",\n") + "\n);"; if (df.palz) { df.palz.value = palx; } } // 全体のパレット情報をクッキーにセーブ function pcookset(o) { var df = document.forms.palepale; if (o && df.autosave && df.autosave.checked == false) { return; } var exp = new Date(); exp.setTime(exp.getTime() + 1000 * 86400 * 60); var cs = new Array(); for (var i = 0; i < pals.length; i++) { cs[i] = escape(pals[i].replace(/\n/g, "_")); } var cooki = ""; if (df.num) { cooki += df.num.value; } cooki += "_" + check_h_sb() + "_%00"; cooki += cs.join("%00"); document.cookie = cname + cooki + "; expires=" + exp.toGMTString(); } // 全体のパレット情報をクッキーからロード function pcookget() { var cooks = document.cookie.split("; "); var cooki = ""; for (var i = 0; i < cooks.length; i++) { if (cooks[i].substr(0, cname.length) == cname) { cooki = cooks[i].substr(cname.length, cooks[i].length); break; } } if (cooki) { var cs = cooki.split("%00"); pals = new Array(); for (var i = 0; i < cs.length - 1; i++) { pals[i] = unescape(cs[i + 1]).replace(/\_/g, "\n"); } if (cs[0]) { var ps = cs[0].split("_"); if (ps[0]) { pnum = ps[0]; } if (ps[1]) { psx = ps[1]; } else if (!ps[1] && ps[1] == 0) { psx = 0; } } } } // 増減する数を増やしたり減らしたり function num_plus(n) { var df = document.forms.palepale; var m = Number(df.num.value); var l = n; n *= Math.abs(Math.round(m / 10)) + 1; if (n == 0) { n = l; } df.num.value = m + n; } // トーンセレクトの値を± function tone_plus(n) { var df = document.forms.palepale; var m = Number(df.tone.value); if (m > 0) { n = Math.floor(m / 10 + n) * 10; } if (n < 0) { n = 0; } else if (n < 5) { n = 5; } else if (n > 100) { n = 100; } df.tone.value = n; tone_sel(n); } // トーンセレクト function tone_sel(t) { var dp = document.paintbbs; t = Number(t); if (t == 0) { dp.getInfo().m.iTT = 0; } else { dp.getInfo().m.iTT = Math.floor(t / 10) + 1; } } // ------------------------------------------------------------------------- // document.write function palette_selfy() { var d = document; var df = document.forms.palepale; var pzs = palette_selfy.arguments; //パレット指定があったとき // browzer if (brwz != 1 && brwz != 2) { return; } // パレットとパレットクッキー var plong = pdefs.length; if (psx == 1) { plong = pdefx.length; } for (var p = 0; p < plong; p++) { if (psx == 1) { pals[p] = pdefx[p]; } else { pals[p] = pdefs[p]; } if (pzs && pzs.length >= 1) { var ok = 0; //? for (var q = 0; q < pzs.length; q++) { if (p == pzs[q]) { ok = 1; break; } } if (ok != 1) { pals[p] = ""; } } } pcookget(); // cookie-get psx_ch[psx] = "checked "; for (var p = 0; p < pals.length; p++) { if (pals[p]) { rady(p, 1, 1); } } // basic d.write(selfytag[0]); if (selfv[3]) d.write(inr + 'name="rad" value="-1" onclick="rady()" ' + selfv[3]); if (pbase) d.write(csamp(-1, pbase, 1)); // +-する数 if (selfv[0]) { d.write("\n +-"); d.write(''); d.write(inp + 'value="-" onclick="num_plus(-1)">\n'); } // パレットリスト if (pdefs || pdefx) d.write('
\n' + palette_list(1) + "
\n"); // 全体の HSB、RGB +- if (selfytag[1]) d.write(selfytag[1]); if (selfv[10]) d.write(inp + 'onclick="alplus(0,1)" ' + selfv[10]); if (selfv[12]) d.write(inp + 'onclick="alplus(1,1)" ' + selfv[12]); if (selfv[14]) d.write(inp + 'onclick="alplus(2,1)" ' + selfv[14]); if (selfv[16]) d.write(inp + 'onclick="alrgb(1)" ' + selfv[16]); if (selfv[11]) d.write(inp + 'onclick="alplus(0,-1)" ' + selfv[11]); if (selfv[13]) d.write(inp + 'onclick="alplus(1,-1)" ' + selfv[13]); if (selfv[15]) d.write(inp + 'onclick="alplus(2,-1)" ' + selfv[15]); if (selfv[17]) d.write(inp + 'onclick="alrgb(-1)" ' + selfv[17]); // トーンセレクト if (selfv[0]) { d.write('Tone "); d.write(inp + 'value="+" onclick="tone_plus(1)">'); d.write(inp + 'value="-" onclick="tone_plus(-1)">\n'); } // GRADATION if (selfytag[2]) d.write(selfytag[2]); if (selfv[18]) d.write(inr + 'name="gradc" value="2" ' + selfv[18]); //18 if (selfv[19]) d.write(inr + 'name="gradc" value="3" ' + selfv[19]); //19 if (selfv[20]) d.write(inr + 'name="gradc" value="4" ' + selfv[20]); //20 if (selfv[21]) d.write(inp + 'onclick="grady(0)" ' + selfv[21]); //21 if (selfv[22]) d.write(inp + 'onclick="grady(1)" ' + selfv[22]); //22 if (selfv[23]) d.write(inp + 'onclick="grady(-1)" ' + selfv[23]); //23 // 追加・削除 if (selfytag[3]) d.write(selfytag[3]); if (selfv[24]) d.write(inp + 'onclick="plusy()" ' + selfv[24]); //24 if (selfv[25]) d.write(inp + 'onclick="minsy()" ' + selfv[25]); //25 // セーブ・オートセーブ if (selfytag[4]) d.write(selfytag[4]); if (selfv[26]) d.write('