• R/O
  • SSH
  • HTTPS

sw-wp-plugin: コミット


コミットメタ情報

リビジョン1 (tree)
日時2008-10-29 15:50:54
作者scuderia-web

ログメッセージ

sw_edit_jsの追加

変更サマリ

差分

--- sw_edit_js.php (nonexistent)
+++ sw_edit_js.php (revision 1)
@@ -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 ?>&amp;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
旧リポジトリブラウザで表示