リビジョン | 1 (tree) |
---|---|
日時 | 2008-10-29 15:50:54 |
作者 | scuderia-web |
sw_edit_jsの追加
@@ -0,0 +1,249 @@ | ||
1 | +<?php | |
2 | +/* | |
3 | +Plugin Name: SW EditJS | |
4 | +Plugin URI: http://scuderia-web.com/ | |
5 | +Description: テーマエディターでJSファイルを編集できるようにするプラグイン | |
6 | +Version: 1.1 | |
7 | +Author: ScuderiaWeb | |
8 | +Author URI: http://scuderia-web.com/ | |
9 | + | |
10 | +ReleaseNote | |
11 | +2008.06.04 1.1 add_filter initに変更 | |
12 | +2008.06.03 1.0 リリース | |
13 | +*/ | |
14 | + | |
15 | +$EditJS = new SW_EditJS(); | |
16 | +Class SW_EditJS { | |
17 | + | |
18 | + /* JSファイルのディレクトリ(テンプレートファイルディレクトリ内のパス。最後の「/」は不要) */ | |
19 | + var $jsfile_dir = "/js"; | |
20 | + | |
21 | + /* デフォルトのテンプレート名(0:使用しない、1:使用する) */ | |
22 | + var $default_description = 0; | |
23 | + | |
24 | + /* テーマエディターに表示する名称(0:ファイル名、1:Template Name、2:File Name)※「File Name」は独自拡張 */ | |
25 | + var $disp_name = 2; | |
26 | + | |
27 | + /* 並び順 | |
28 | + 0:指定しない | |
29 | + 1:ファイル名順(昇順) | |
30 | + 2:ファイル名順(降順) | |
31 | + 3:テンプレート名順(昇順) | |
32 | + 4:テンプレート名順(降順) | |
33 | + */ | |
34 | + var $file_sort = 3; | |
35 | + | |
36 | + /* --------------------------------------------------------------------------------------------- */ | |
37 | + | |
38 | + function SW_EditJS() { | |
39 | + add_filter('init', array(&$this, 'addJSFile')); | |
40 | + add_filter('admin_head', array(&$this, 'dispJSFile')); | |
41 | + add_filter('admin_footer', array(&$this, 'loadJSFile')); | |
42 | + | |
43 | + } | |
44 | + | |
45 | + function dispJSFile() { | |
46 | + global $themes, $theme, $file, $wp_file_descriptions; | |
47 | + if(strcmp($_SERVER['SCRIPT_NAME'],"/wp-admin/theme-editor.php") != 0) | |
48 | + return; | |
49 | + | |
50 | + // デフォルトのテンプレート名の解除 | |
51 | + if($this->default_description == 0) | |
52 | + $wp_file_descriptions = array(); | |
53 | + | |
54 | + // 表示名の設定 | |
55 | + $this->set_dispName(); | |
56 | + | |
57 | + // "Stylesheet Files"からJSファイルを除外 | |
58 | + while(true) { | |
59 | + if(count($themes[$theme]["Stylesheet Files"]) == $themes[$theme]["JS Files index"]) | |
60 | + break; | |
61 | + | |
62 | + array_pop($themes[$theme]["Stylesheet Files"]); | |
63 | + } | |
64 | + | |
65 | + unset($themes[$theme]["JS Files index"]); | |
66 | + | |
67 | + // ソート | |
68 | + switch($this->file_sort) { | |
69 | + case 1: // ファイル名順(昇順) | |
70 | + sort($themes[$theme]["Template Files"]); | |
71 | + sort($themes[$theme]["Stylesheet Files"]); | |
72 | + sort($themes[$theme]["Javascript Files"]); | |
73 | + break; | |
74 | + case 2: // ファイル名順(降順) | |
75 | + rsort($themes[$theme]["Template Files"]); | |
76 | + rsort($themes[$theme]["Stylesheet Files"]); | |
77 | + rsort($themes[$theme]["Javascript Files"]); | |
78 | + break; | |
79 | + case 3: // テンプレート名順(昇順) | |
80 | + case 4: // テンプレート名順(降順) | |
81 | + | |
82 | + // template | |
83 | + $tmp_template_array = array(); | |
84 | + foreach($themes[$theme]['Template Files'] as $template_file) { | |
85 | + $description = $this->remove_line(trim(get_file_description($template_file))); | |
86 | + $tmp_template_array[$description] = $template_file; | |
87 | + } | |
88 | + $themes[$theme]["Template Files"] = $tmp_template_array; | |
89 | + | |
90 | + // stylesheet | |
91 | + $tmp_style_array = array(); | |
92 | + foreach($themes[$theme]['Stylesheet Files'] as $style_file) { | |
93 | + $description = $this->remove_line(trim(get_file_description($style_file))); | |
94 | + $tmp_style_array[$description] = $style_file; | |
95 | + } | |
96 | + $themes[$theme]["Stylesheet Files"] = $tmp_style_array; | |
97 | + | |
98 | + // js | |
99 | + $tmp_js_array = array(); | |
100 | + foreach($themes[$theme]['Javascript Files'] as $js_file) { | |
101 | + $description = $this->remove_line(trim(get_file_description($js_file))); | |
102 | + $tmp_js_array[$description] = $js_file; | |
103 | + } | |
104 | + $themes[$theme]["Javascript Files"] = $tmp_js_array; | |
105 | + | |
106 | + switch($this->file_sort) { | |
107 | + case 3: | |
108 | + ksort($themes[$theme]["Template Files"], 3); | |
109 | + ksort($themes[$theme]["Stylesheet Files"], 3); | |
110 | + ksort($themes[$theme]["Javascript Files"], 3); | |
111 | + break; | |
112 | + case 4: | |
113 | + krsort($themes[$theme]["Template Files"], 3); | |
114 | + krsort($themes[$theme]["Stylesheet Files"], 3); | |
115 | + krsort($themes[$theme]["Javascript Files"], 3); | |
116 | + break; | |
117 | + } | |
118 | + | |
119 | + break; | |
120 | + default: | |
121 | + break; | |
122 | + } | |
123 | +?> | |
124 | + <script type="text/javascript"> | |
125 | + <!-- | |
126 | + function addTemplateside(){ | |
127 | + var html = "<h4>JavaScript</h4>"; | |
128 | + html += "<ul>"; | |
129 | +<?php | |
130 | + | |
131 | + foreach($themes[$theme]['Javascript Files'] as $javascript_file) { | |
132 | + $description = $this->remove_line(get_file_description($javascript_file)); | |
133 | + | |
134 | + $javascript_show = basename($javascript_file); | |
135 | + $filedesc = ( $description != $javascript_file ) ? "$description <span class=\\\"nonessential\\\">($javascript_show)</span>" : "$description"; | |
136 | + $filedesc = ( $javascript_file == $file ) ? "<span class=\\\"highlight\\\">$description <span class=\\\"nonessential\\\">($javascript_show)</span></span>" : $filedesc; | |
137 | +?> | |
138 | + html += "<li><a href=\"theme-editor.php?file=<?= $javascript_file ?>&theme=<?= urlencode($theme) ?>\"><?php echo $filedesc ?></a></li>"; | |
139 | +<?php } ?> | |
140 | + html += "</ul>"; | |
141 | + document.getElementById("templateside").innerHTML += html; | |
142 | + | |
143 | + } | |
144 | + // --> | |
145 | + </script> | |
146 | +<?php | |
147 | + } | |
148 | + | |
149 | + function loadJSFile() { | |
150 | + if(strcmp($_SERVER['SCRIPT_NAME'],"/wp-admin/theme-editor.php") != 0) | |
151 | + return; | |
152 | + | |
153 | + echo ' | |
154 | + <script type="text/javascript"> | |
155 | + <!-- | |
156 | + addTemplateside(); | |
157 | + // --> | |
158 | + </script>'; | |
159 | + } | |
160 | + | |
161 | + function addJSFile() { | |
162 | + global $wp_themes, $theme; | |
163 | + | |
164 | + if(strcmp($_SERVER['SCRIPT_NAME'],"/wp-admin/theme-editor.php") != 0) | |
165 | + return; | |
166 | + | |
167 | + $wp_themes = get_themes(); | |
168 | + $theme_root = get_theme_root(); | |
169 | + foreach($wp_themes as $theme_name => $value) { | |
170 | + $wp_themes[$theme_name]["Javascript Files"] = array(); | |
171 | + $wp_themes[$theme_name]["JS Files index"] = count($wp_themes[$theme_name]["Stylesheet Files"]); | |
172 | + $i = $wp_themes[$theme_name]["JS Files index"]; | |
173 | + $js_dir = get_theme_root().'/'.$wp_themes[$theme_name]["Template"].$this->jsfile_dir; | |
174 | + | |
175 | + if ( $d_handle = @OpenDir($js_dir) ) { | |
176 | + while ( $filename = ReadDir( $d_handle ) ) { | |
177 | + if ( $filename == '.' || $filename == '..') | |
178 | + continue; | |
179 | + | |
180 | + if (strcmp(substr($filename, -3), ".js") == 0) { | |
181 | + $wp_themes[$theme_name]["Stylesheet Files"][$i] = $wp_themes[$theme_name]["Template Dir"].$this->jsfile_dir."/".$filename; | |
182 | + array_push($wp_themes[$theme_name]["Javascript Files"], $wp_themes[$theme_name]["Template Dir"].$this->jsfile_dir."/".$filename); | |
183 | + $i++; | |
184 | + } | |
185 | + } | |
186 | + } | |
187 | + @CloseDir($d_handle); | |
188 | + | |
189 | + } | |
190 | + | |
191 | + } | |
192 | + | |
193 | + function set_dispName() { | |
194 | + global $themes, $theme, $wp_file_descriptions; | |
195 | + | |
196 | + switch($this->disp_name) { | |
197 | + case 0: // ファイル名 | |
198 | + foreach($themes[$theme]['Template Files'] as $template_file) { | |
199 | + $wp_file_descriptions[basename($template_file)] = basename($template_file); | |
200 | + } | |
201 | + foreach($themes[$theme]['Stylesheet Files'] as $style_file) { | |
202 | + $wp_file_descriptions[basename($style_file)] = basename($style_file); | |
203 | + } | |
204 | + foreach($themes[$theme]['Javascript Files'] as $js_file) { | |
205 | + $wp_file_descriptions[basename($js_file)] = basename($js_file); | |
206 | + } | |
207 | + break; | |
208 | + | |
209 | + case 1: // Template Name | |
210 | + break; | |
211 | + | |
212 | + case 2: // File Name | |
213 | + foreach($themes[$theme]['Template Files'] as $template_file) { | |
214 | + $wp_file_descriptions[basename($template_file)] = $this->remove_line($this->get_file_name($template_file)); | |
215 | + } | |
216 | + foreach($themes[$theme]['Stylesheet Files'] as $style_file) { | |
217 | + $wp_file_descriptions[basename($style_file)] = $this->remove_line($this->get_file_name($style_file)); | |
218 | + } | |
219 | + foreach($themes[$theme]['Javascript Files'] as $js_file) { | |
220 | + $wp_file_descriptions[basename($js_file)] = $this->remove_line($this->get_file_name($js_file)); | |
221 | + } | |
222 | + break; | |
223 | + } | |
224 | + } | |
225 | + | |
226 | + function get_file_name($file) { | |
227 | + global $wp_file_descriptions; | |
228 | + | |
229 | + if ( isset( $wp_file_descriptions[basename( $file )] ) ) { | |
230 | + return $wp_file_descriptions[basename( $file )]; | |
231 | + } | |
232 | + elseif ( file_exists( ABSPATH . $file ) && is_file( ABSPATH . $file ) ) { | |
233 | + $template_data = implode( '', file( ABSPATH . $file ) ); | |
234 | + if ( preg_match( "|File Name:(.*)|i", $template_data, $name )) { | |
235 | + return $name[1]; | |
236 | + } | |
237 | + } | |
238 | + | |
239 | + return basename( $file ); | |
240 | + } | |
241 | + | |
242 | + // 改行コードを除外 | |
243 | + function remove_line($str) { | |
244 | + $str = str_replace("\n","",$str); | |
245 | + $str = str_replace("\r","",$str); | |
246 | + return $str; | |
247 | + } | |
248 | +} | |
249 | +?> | |
\ No newline at end of file |