2 class NP_ToolbarButtons extends NucleusPlugin {
3 function getName() { return get_class($this); }
4 function getAuthor() { return 'Katsumi + nakahara21'; }
5 function getVersion() { return '0.3'; }
6 function getURL() { return 'http://nakahara21.com';}
7 function getMinNucleusVersion() { return 250; }
8 function getDescription() { return get_class($this).' plugin'; }
9 function supportsFeature($what) { return (int)($what=='SqlTablePrefix'); }
10 function getEventList() { return array('PrepareItemForEdit', 'PreAddItemForm',
11 'AdminPrePageHead', 'AdminPrePageFoot',
12 'AddItemFormExtras', 'EditItemFormExtras',
13 'PreToolbarParse','PrePluginOptionsEdit'); }
15 $this->createOption("lbtns", "Codes (Before default toolbars)", "textarea",''."\n");
16 $this->createOption("rbtns", "Codes (After default toolbars)", "textarea",''."\n");
17 $this->createOption("addscripts", "Optional Javascripts Codes ", "textarea",''."\n");
19 function event_PrePluginOptionsEdit(&$data) {
21 // $aurl = $CONF['ActionURL'] . '?action=plugin&name=ToolbarButtons&type=redirect';
22 // $extra = '<br /><a href="'.$aurl.'" onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);">Button Maker</a>';
23 $maker = '<form style="margin:0;"><table><tr><td>¥Ü¥¿¥ó¤Î¼ïÎà</td><td><input type="radio" name="inc_mode" value="3" tabindex="120" checked="checked" id="btn_type_a" /><label for="btn_type_a">A: ÁªÂòÃæ¤ÎÁ°¸å¤Ë¥¿¥°Åù¤òÁÞÆþ¤¹¤ë</label> <br /><input type="radio" name="inc_mode" value="5" id="btn_type_b" /><label for="btn_type_b">B: ¥«¡¼¥½¥ë°ÌÃ֤˥ƥ¥¹¥ÈÅù¤òÁÞÆþ¤¹¤ë</label></td></tr><tr><td>Á°¤ËÁÞÆþ¤¹¤ë¥³¡¼¥É</td><td><input id="preadd" size="40" maxlength="160" value="" />(AB¶¦)</td></tr><tr><td nowrap>¸å¤í¤ËÁÞÆþ¤¹¤ë¥³¡¼¥É</td><td><input id="postadd" size="40" maxlength="160" value="" />(A¤Î¤ß)</td></tr><tr><td>¥Ä¡¼¥ë¥Ð¡¼¥Á¥Ã¥×</td><td><input id="inputtitle" size="40" maxlength="160" value="" /></td></tr><tr><td>¥Ü¥¿¥óɽ¼¨</td><td><input id="buttoncode" size="40" maxlength="160" value="" /></td></tr><tr><td colspan="2"><INPUT TYPE="button" VALUE="¥³¡¼¥É¤òÀ¸À®" onClick="inserButtons()"><span id="so" style="color:red;"></span></td></tr><tr><td colspan="2"><textarea cols="60" rows="12" id="inputcodes" ></textarea><br /><INPUT TYPE="button" VALUE="Before¤ËÄɲÃ" onClick="reflectButtons(0)"><INPUT TYPE="button" VALUE="After¤ËÄɲÃ" onClick="reflectButtons(1)"></form></table>';
25 foreach($data['options'] as $tmp){
26 if($tmp['name'] == 'lbtns' || $tmp['name'] == 'rbtns'){
29 $data['options'][$oid]['extra'] = $extra;
32 $$tmp['name'] = 'plugoption['.$tmp['oid'].']['.$tmp['contextid'].']';
34 if($tmp['name'] == 'rbtns'){
36 $data['options'][$oid]['extra'] .= <<<EOD
37 <script type="text/javascript">
39 function inserButtons(){
42 var caution = document.getElementById("so");
43 if(document.getElementById('buttoncode').value == ''){
44 caution.innerHTML = '¡Ø¥Ü¥¿¥óɽ¼¨¡Ù¤ÎÆþÎϤ¬¤¢¤ê¤Þ¤»¤ó!';
48 caution.innerHTML = '';
50 if(document.getElementById('btn_type_a').checked){
51 tag = tag + "\\t\\t\\t<span class=\"jsbutton\" \\n\\t\\t\\tonmouseover=\"BtnHighlight(this);\" \\n\\t\\t\\tonmouseout=\"BtnNormal(this);\" \\n\\t\\t\\tonclick=\"insertAroundCaret('";
52 tag = tag + document.getElementById('preadd').value;
54 tag = tag + document.getElementById('postadd').value;
57 if(document.getElementById('btn_type_b').checked){
58 tag = tag + "\\t\\t\\t<span class=\"jsbutton\" \\n\\t\\t\\tonmouseover=\"BtnHighlight(this);\" \\n\\t\\t\\tonmouseout=\"BtnNormal(this);\" \\n\\t\\t\\tonclick=\"insertAtCaret('";
59 tag = tag + document.getElementById('preadd').value;
61 tag = tag + "')\" \\n\\t\\t\\ttitle=\"";
62 tag = tag + document.getElementById('inputtitle').value;
63 tag = tag + "\">\\n\\t\\t\\t";
64 tag = tag + document.getElementById('buttoncode').value;
65 tag = tag + "\\n\\t\\t\\t</span>\\n";
66 document.getElementById('inputcodes').value += tag;
69 function reflectButtons(lr) {
70 elName = ['$lbtns','$rbtns'];
71 data = document.getElementById('inputcodes').value;
73 ElementsList = document.getElementsByName(elName[lr]);
74 for (i = 0; i < ElementsList.length; i++) {
75 ElementsList[i].value += data;
77 document.getElementById('inputcodes').value = '';
79 function helperinit() {
80 var htitle = document.getElementsByTagName("h2");
81 subhtitle=document.createElement("div");
82 subhtitle.style.fontWeight="normal";
83 subhtitle.innerHTML = '$maker';
84 htitle[0].appendChild(subhtitle);
85 htitle[0].style.styleFloat = "left";
86 htitle[1].style.clear = "left";
89 var tables = document.getElementsByTagName("table");
90 for (i = 0; i < tables.length; i++) {
91 tables[i].style.width = "auto";
95 window.onload = helperinit;
104 function doAction($type){
108 $file = $this->getDirectory().'buttonmaker.html';
111 $contents = ob_get_contents();
121 function event_PrepareItemForEdit(&$data){ $this->before(); }
122 function event_PreAddItemForm(&$data){ $this->before(); }
124 function event_AdminPrePageHead(&$data){ $this->usefoot=true; }
125 function event_AdminPrePageFoot(&$data){ $this->after(); }
126 function event_AddItemFormExtras(&$data){ if (!$this->usefoot) $this->after(); }
127 function event_EditItemFormExtras(&$data){ if (!$this->usefoot) $this->after(); }
129 function before() { $this->ob_ok=ob_start(); }
132 if (!$this->ob_ok) return;
133 $buff=ob_get_contents();
138 $pattern='/<div([^>]*?)class="jsbuttonbar"([^>]*?)>/';
139 if (preg_match($pattern,$buff,$matches)){
140 $manager->notify('PreToolbarParse',array('lbutton' => &$lbutton, 'rbutton' => &$rbutton, 'script' => &$script));
141 $buff=str_replace($matches[0],$matches[0].$lbutton,$buff);
142 $pattern=array('/<\/div>([^<]*?)<textarea([^>]*?)id="inputbody"([^>]*?)>/',
143 '/<\/div>([^<]*?)<textarea([^>]*?)id="inputmore"([^>]*?)>/');
144 $replace=array('</div><textarea$2id="inputbody"$3>',
145 '</div><textarea$2id="inputmore"$3>');
146 $buff=preg_replace($pattern,$replace,$buff);
147 $pattern='/<\/div><textarea([^>]*?)id="inputbody"([^>]*?)>/';
148 if (preg_match($pattern,$buff,$matches)){
149 $buff=str_replace($matches[0],$rbutton.$matches[0],$buff);
151 $pattern='/<\/div><textarea([^>]*?)id="inputmore"([^>]*?)>/';
152 if (preg_match($pattern,$buff,$matches)){
153 $buff=str_replace($matches[0],$rbutton.$matches[0],$buff);
158 function event_PreToolbarParse(&$data) {
160 $lbutton=&$data['lbutton'];
161 $rbutton=&$data['rbutton'];
162 $script=&$data['script'];
164 $setOptionURL = $CONF['AdminURL'] . 'index.php?action=pluginoptions&plugid=' . $this->getID();
166 $lbutton.="<div style=\"padding-top:4px;padding-bottom:4px;margin-bottom:1px;\">\n";
167 $lbutton.= $this->getOption('lbtns');
173 <span class="jsbutton"
174 onmouseover="BtnHighlight(this);"
175 onmouseout="BtnNormal(this);"
176 onclick="helloWorld()" >
182 $lbutton.="</div>\n";
184 // $lbutton.="<hr style=\"height:1px;color:#ddd;background-color:#ddd\"/>\n";
185 $lbutton.="<div style=\"padding-top:4px;padding-bottom:4px;\">\n";
187 $rbutton.="</div>\n";
188 // $rbutton.="<hr style=\"height:1px;color:#ddd;background-color:#ddd;margin:0px;\"/>\n";
190 $rbutton.="<div style=\"padding-top:4px;padding-bottom:4px;margin-top:1px;\">\n";
191 $rbutton.= $this->getOption('rbtns');
193 <span class="jsbutton"
194 onmouseover="BtnHighlight(this);"
195 onmouseout="BtnNormal(this);"
196 onclick="entitiesCaret()"
201 <a href="$setOptionURL">Edit Buttons</a>
204 $rbutton.="</div>\n";
207 <script type="text/javascript">
211 $script.= $this->getOption('addscripts');
213 function helloWorld(){
214 alert('Hello Left World!');
216 function helloWorld2(){
217 alert('Hello Right World!')
219 function entitiesCaret () {
220 var textEl = lastSelected;
221 if (textEl && textEl.createTextRange && lastCaretPos) {
222 var caretPos = lastCaretPos;
223 caretPos.text = caretPos.text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');
224 } else if (!document.all && document.getElementById) {
225 newText = mozSelectedText().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');
226 mozReplace(document.getElementById('input' + nonie_FormType), newText);