OSDN Git Service

git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/plugin@874 1ca29b6e-896d...
[nucleus-jp/nucleus-plugins.git] / NP_ToolbarButtons / trunk / NP_ToolbarButtons.php
1 <?php 
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'); } 
14         function install(){
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");
18         }
19         function event_PrePluginOptionsEdit(&$data) {
20                 global $CONF;
21 //                      $aurl = $CONF['ActionURL'] . '?action=plugin&amp;name=ToolbarButtons&amp;type=redirect';
22 //                      $extra = '<br /><a href="'.$aurl.'" onclick="if (event &amp;&amp; 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>';
24
25                 foreach($data['options'] as $tmp){
26                         if($tmp['name'] == 'lbtns' || $tmp['name'] == 'rbtns'){
27 /*
28                                 $oid = $tmp['oid'];
29                                 $data['options'][$oid]['extra'] = $extra;
30 */
31                                 $name = $tmp['name'];
32                                 $$tmp['name'] = 'plugoption['.$tmp['oid'].']['.$tmp['contextid'].']';
33                         }
34                         if($tmp['name'] == 'rbtns'){
35                                 $oid = $tmp['oid'];
36                                 $data['options'][$oid]['extra'] .= <<<EOD
37                         <script type="text/javascript">
38                         //<![CDATA[
39                         function inserButtons(){ 
40                                 var tag="";
41
42                                 var caution = document.getElementById("so");
43                                 if(document.getElementById('buttoncode').value == ''){
44                                         caution.innerHTML = '¡Ø¥Ü¥¿¥óɽ¼¨¡Ù¤ÎÆþÎϤ¬¤¢¤ê¤Þ¤»¤ó!';
45                                         return;
46                                 }
47                                 
48                                 caution.innerHTML = '';
49
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;
53                                         tag = tag + "','";
54                                         tag = tag + document.getElementById('postadd').value;
55                                 }
56
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;
60                                 }
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;             
67                         } 
68
69                         function reflectButtons(lr) {
70                                 elName = ['$lbtns','$rbtns'];
71                                 data = document.getElementById('inputcodes').value;             
72                                 
73                                 ElementsList = document.getElementsByName(elName[lr]);
74                                 for (i = 0; i < ElementsList.length; i++) {
75                                         ElementsList[i].value += data;
76                                 }
77                                 document.getElementById('inputcodes').value = '';               
78                         }
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";
87
88
89                                 var tables = document.getElementsByTagName("table");
90                                 for (i = 0; i < tables.length; i++) {
91                                         tables[i].style.width = "auto";
92                                 }
93                         }
94
95                         window.onload = helperinit;
96                         
97                         //]]>
98                         </script>
99 EOD;
100                         }
101                 }
102         }
103 /*
104         function doAction($type){
105                 global $CONF;
106                 switch ($type) {
107                         case 'redirect':
108                                 $file = $this->getDirectory().'buttonmaker.html';
109                                 ob_start();
110                                 include($file);
111                                 $contents = ob_get_contents();
112                                 ob_end_clean();
113                                 echo $contents;
114                                 break;
115                         default:
116                                 break;
117                 }
118                 exit;
119         }
120 */
121         function event_PrepareItemForEdit(&$data){ $this->before(); } 
122         function event_PreAddItemForm(&$data){ $this->before(); } 
123         var $usefoot; 
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(); } 
128         var $ob_ok; 
129         function before() { $this->ob_ok=ob_start(); } 
130         function after() { 
131                 global $manager; 
132                 if (!$this->ob_ok) return; 
133                 $buff=ob_get_contents(); 
134                 ob_end_clean(); 
135                 $lbutton=''; 
136                 $rbutton=''; 
137                 $script=''; 
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); 
150                         } 
151                         $pattern='/<\/div><textarea([^>]*?)id="inputmore"([^>]*?)>/'; 
152                         if (preg_match($pattern,$buff,$matches)){ 
153                                 $buff=str_replace($matches[0],$rbutton.$matches[0],$buff); 
154                         } 
155                 } 
156                 echo $buff.$script; 
157         } 
158         function event_PreToolbarParse(&$data) { 
159                 global $CONF;
160                 $lbutton=&$data['lbutton']; 
161                 $rbutton=&$data['rbutton']; 
162                 $script=&$data['script'];
163                 
164                 $setOptionURL = $CONF['AdminURL'] . 'index.php?action=pluginoptions&amp;plugid=' . $this->getID();
165
166                 $lbutton.="<div style=\"padding-top:4px;padding-bottom:4px;margin-bottom:1px;\">\n";
167                 $lbutton.= $this->getOption('lbtns');
168                 $lbutton.= <<<EOD
169
170 EOD;
171 /*
172                 $lbutton.= <<<EOD
173                         <span class="jsbutton" 
174                         onmouseover="BtnHighlight(this);" 
175                         onmouseout="BtnNormal(this);" 
176                         onclick="helloWorld()" >
177                         heii
178                         </span>
179
180 EOD;
181 */
182                 $lbutton.="</div>\n";
183
184 //              $lbutton.="<hr style=\"height:1px;color:#ddd;background-color:#ddd\"/>\n";
185                 $lbutton.="<div style=\"padding-top:4px;padding-bottom:4px;\">\n";
186
187                 $rbutton.="</div>\n";
188 //              $rbutton.="<hr style=\"height:1px;color:#ddd;background-color:#ddd;margin:0px;\"/>\n";
189
190                 $rbutton.="<div style=\"padding-top:4px;padding-bottom:4px;margin-top:1px;\">\n";
191                 $rbutton.= $this->getOption('rbtns');
192                 $rbutton.=<<<EOD
193                         <span class="jsbutton" 
194                         onmouseover="BtnHighlight(this);" 
195                         onmouseout="BtnNormal(this);" 
196                         onclick="entitiesCaret()" 
197                         title="toEntities" >
198                         &amp;lt;
199                         </span>
200
201                         <a href="$setOptionURL">Edit Buttons</a>
202
203 EOD;
204                 $rbutton.="</div>\n";
205                 
206                 $script.= <<<EOD
207                         <script type="text/javascript">
208                         //<![CDATA[
209
210 EOD;
211                 $script.= $this->getOption('addscripts');
212                 $script.= <<<EOD
213                         function helloWorld(){
214                                 alert('Hello Left World!');
215                         }
216                         function helloWorld2(){
217                                 alert('Hello Right World!')
218                         }
219                         function entitiesCaret () {
220                                 var textEl = lastSelected;
221                                 if (textEl && textEl.createTextRange && lastCaretPos) {
222                                         var caretPos = lastCaretPos;
223                                         caretPos.text = caretPos.text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');
224                                 } else if (!document.all && document.getElementById) {
225                                         newText = mozSelectedText().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');
226                                         mozReplace(document.getElementById('input' + nonie_FormType), newText);
227                                 }
228                                 updAllPreviews();
229                         }
230
231 EOD;
232                 $script.= <<<EOD
233                         //]]>
234                         </script>
235
236 EOD;
237         } 
238
239 ?>