source: branches/version-2_13-dev/html/user_data/packages/admin/js/eccube.admin.js @ 23129

Revision 23129, 14.7 KB checked in by pineray, 11 years ago (diff)

#2342 JavaScript?のグローバルな宣言を減らす
管理画面.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
Line 
1/*
2 * This file is part of EC-CUBE
3 *
4 * Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
5 *
6 * http://www.lockon.co.jp/
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21 */
22
23(function( window, undefined ){
24
25    // 名前空間の重複を防ぐ
26    if (window.eccube === undefined) {
27        window.eccube = {};
28    }
29
30    var eccube = window.eccube;
31
32    //指定されたidの削除を行うページを実行する。
33    eccube.deleteMember = function(id, pageno) {
34        var url = "./delete.php?id=" + id + "&pageno=" + pageno;
35        if(window.confirm('登録内容を削除しても宜しいでしょうか')){
36            location.href = url;
37        }
38    };
39
40    // ラジオボタンチェック状態を保存
41    eccube.checkedRadios = "";
42
43    // ラジオボタンのチェック状態を取得する。
44    eccube.getRadioChecked = function() {
45        var max;
46        var cnt;
47        var startname = "";
48        var ret;
49        var name;
50        max = document["form1"].elements.length;
51        eccube.checkedRadios = [max];
52        for(cnt = 0; cnt < max; cnt++) {
53            if(document["form1"].elements[cnt].type === 'radio') {
54                name = document["form1"].elements[cnt].name;
55                /* radioボタンは同じ名前が2回続けて検出されるので、
56                 最初の名前の検出であるかどうかの判定 */
57                // 1回目の検出
58                if(startname !== name) {
59                    startname = name;
60                    ret = document["form1"].elements[cnt].checked;
61                    if(ret === true){
62                        // 稼働がチェックされている。
63                        eccube.checkedRadios[name] = 1;
64                    }
65                    // 2回目の検出
66                } else {
67                    ret = document["form1"].elements[cnt].checked;
68                    if(ret === true){
69                        // 非稼働がチェックされている。
70                        eccube.checkedRadios[name] = 0;
71                    }
72                }
73            }
74        }
75    };
76
77    // 管理者メンバーページの切替
78    eccube.moveMemberPage = function(pageno) {
79        location.href = "?pageno=" + pageno;
80    };
81
82    // ページナビで使用する
83    eccube.moveNaviPage = function(pageno, mode, form) {
84        if (form === undefined) {
85            form = eccube.defaults.formId;
86        }
87        var formElement = $("form#" + form);
88        formElement.find("input[name='search_pageno']").val(pageno);
89        if (mode !== undefined) {
90            formElement.find("input[name='mode']").val(mode);
91        }
92        formElement.submit();
93    };
94
95    // ページナビで使用する(mode = search専用)
96    eccube.moveSearchPage = function(pageno) {
97        eccube.moveNaviPage(pageno, "search");
98    };
99
100    // ページナビで使用する(form2)
101    eccube.moveSecondSearchPage = function(pageno) {
102        eccube.moveNaviPage(pageno, "search", "form2");
103    };
104
105    // 項目に入った値をクリアする。
106    eccube.clearValue = function(name) {
107        document["form1"][name].value = "";
108    };
109
110    // 規格分類登録へ移動
111    eccube.moveClassCatPage = function(class_id) {
112        location.href =  "./classcategory.php?class_id=" + class_id;
113    };
114
115    eccube.checkAllBox = function(input, selector) {
116        if ($(input).attr('checked')) {
117            $(selector).attr('checked', true);
118        } else {
119            $(selector).attr('checked', false);
120        }
121    };
122
123    //指定されたidの削除を行うページを実行する。
124    eccube.moveDeleteUrl = function(url) {
125        if(window.confirm('登録内容を削除しても宜しいでしょうか')){
126            location.href = url;
127        }
128        return false;
129    };
130
131    //配送料金を自動入力
132    eccube.setDelivFee = function(max) {
133        var name;
134        for(var cnt = 1; cnt <= max; cnt++) {
135            name = "fee" + cnt;
136            document["form1"][name].value = document["form1"]['fee_all'].value;
137        }
138    };
139
140    // 在庫数制限判定
141    eccube.checkStockLimit = function(icolor) {
142        if(document["form1"]['stock_unlimited']) {
143            var list = ['stock'];
144            if(document["form1"]['stock_unlimited'].checked) {
145                eccube.changeDisabled(list, icolor);
146                document["form1"]['stock'].value = "";
147            } else {
148                eccube.changeDisabled(list, '');
149            }
150        }
151    };
152
153    // 確認メッセージ
154    eccube.doConfirm = function() {
155        return window.confirm('この内容で登録しても宜しいでしょうか');
156    };
157
158    // フォームに代入してからサブミットする。
159    eccube.insertValueAndSubmit = function(fm, ele, val, msg){
160        var ret;
161        if (msg !== undefined){
162            ret = window.confirm(msg);
163        } else {
164            ret = true;
165        }
166        if(ret){
167            fm[ele].value = val;
168            fm.submit();
169            return false;
170        }
171        return false;
172    };
173
174    //制限数判定
175    eccube.checkLimit = function(elem1, elem2, icolor) {
176        if(document["form1"][elem2]) {
177            var list = [elem1];
178            if(document["form1"][elem2].checked) {
179                eccube.changeDisabled(list, icolor);
180                document["form1"][elem1].value = "";
181            } else {
182                eccube.changeDisabled(list, '');
183            }
184        }
185    };
186
187    /**
188     * ファイル管理
189     */
190    eccube.fileManager = {
191        tree:"",                // 生成HTML格納
192        arrTreeStatus:[],       // ツリー状態保持
193        old_select_id:'',       // 前回選択していたファイル
194        selectFileHidden:"",    // 選択したファイルのhidden名
195        treeStatusHidden:"",    // ツリー状態保存用のhidden名
196        modeHidden:""           // modeセットhidden名
197    };
198
199    // ツリー表示
200    eccube.fileManager.viewFileTree = function(view_id, arrTree, openFolder, selectHidden, treeHidden, mode) {
201        eccube.fileManager.selectFileHidden = selectHidden;
202        eccube.fileManager.treeStatusHidden = treeHidden;
203        eccube.fileManager.modeHidden = mode;
204
205        var id, level, old_id, old_level, tmp_level, rank_img, display, arrFileSplit, file_name, folder_img;
206
207        for(var i = 0; i < arrTree.length; i++) {
208            id = arrTree[i][0];
209            level = arrTree[i][3];
210
211            if(i === 0) {
212                old_id = "0";
213                old_level = 0;
214            } else {
215                old_id = arrTree[i-1][0];
216                old_level = arrTree[i-1][3];
217            }
218
219            // 階層上へ戻る
220            if(level <= (old_level - 1)) {
221                tmp_level = old_level - level;
222                for(var up_roop = 0; up_roop <= tmp_level; up_roop++) {
223                    eccube.fileManager.tree += '</div>';
224                }
225            }
226
227            // 同一階層で次のフォルダへ
228            if(id !== old_id && level === old_level) {
229                eccube.fileManager.tree += '</div>';
230            }
231
232            // 階層の分だけスペースを入れる
233            for(var space_cnt = 0; space_cnt < arrTree[i][3]; space_cnt++) {
234                eccube.fileManager.tree += "&nbsp;&nbsp;&nbsp;";
235            }
236
237            // 階層画像の表示・非表示処理
238            if(arrTree[i][4]) {
239                if(arrTree[i][1] === '_parent') {
240                    rank_img = eccube.fileManager["IMG_MINUS"];
241                } else {
242                    rank_img = eccube.fileManager["IMG_NORMAL"];
243                }
244                // 開き状態を保持
245                eccube.fileManager.arrTreeStatus.push(arrTree[i][2]);
246                display = 'block';
247            } else {
248                if(arrTree[i][1] === '_parent') {
249                    rank_img = eccube.fileManager["IMG_PLUS"];
250                } else {
251                    rank_img = eccube.fileManager["IMG_NORMAL"];
252                }
253                display = 'none';
254            }
255
256            arrFileSplit = arrTree[i][2].split("/");
257            file_name = arrFileSplit[arrFileSplit.length-1];
258
259            // フォルダの画像を選択
260            if(arrTree[i][2] === openFolder) {
261                folder_img = eccube.fileManager["IMG_FOLDER_OPEN"];
262                file_name = "<b>" + file_name + "</b>";
263            } else {
264                folder_img = eccube.fileManager["IMG_FOLDER_CLOSE"];
265            }
266
267            // 階層画像に子供がいたらオンクリック処理をつける
268            if(rank_img !== eccube.fileManager["IMG_NORMAL"]) {
269                eccube.fileManager.tree += '<a href="javascript:eccube.fileManager.toggleTreeMenu(\'tree'+ i +'\',\'rank_img'+ i +'\',\''+ arrTree[i][2] +'\')"><img src="'+ rank_img +'" border="0" name="rank_img'+ i +'" id="rank_img'+ i +'">';
270            } else {
271                eccube.fileManager.tree += '<img src="'+ rank_img +'" border="0" name="rank_img'+ i +'" id="rank_img'+ i +'">';
272            }
273            eccube.fileManager.tree += '<a href="javascript:fnFolderOpen(\''+ arrTree[i][2] +'\')"><img src="'+ folder_img +'" border="0" name="tree_img'+ i +'" id="tree_img'+ i +'">&nbsp;'+ file_name +'</a><br/>';
274            eccube.fileManager.tree += '<div id="tree'+ i +'" style="display:'+ display +'">';
275        }
276        document.getElementById(view_id).innerHTML = eccube.fileManager.tree;
277        //document.tree_form.tree_test2.focus();
278    };
279
280    // Tree状態をhiddenにセット
281    eccube.fileManager.setTreeStatus = function(name) {
282        var tree_status = "";
283        for(var i=0; i < eccube.fileManager.arrTreeStatus.length ;i++) {
284            if(i !== 0) {
285                tree_status += '|';
286            }
287            tree_status += eccube.fileManager.arrTreeStatus[i];
288        }
289        document["form1"][name].value = tree_status;
290    };
291
292    // 階層ツリーメニュー表示・非表示処理
293    eccube.fileManager.toggleTreeMenu = function(tName, imgName, path) {
294        var tMenu = $("#" + tName);
295
296        if(tMenu.css("display") === 'none') {
297            $("#" +imgName).attr("src", eccube.fileManager["IMG_MINUS"]);
298            tMenu.show();
299            // 階層の開いた状態を保持
300            eccube.fileManager.arrTreeStatus.push(path);
301        } else {
302            $("#" +imgName).attr("src", eccube.fileManager["IMG_PLUS"]);
303            tMenu.hide();
304            // 閉じ状態を保持
305            eccube.fileManager["fnDelTreeStatus"](path);
306        }
307    };
308
309    // Tree状態を削除する(閉じる状態へ)
310    eccube.fileManager.deleteTreeStatus = function(path) {
311        for(var i=0; i < eccube.fileManager.arrTreeStatus.length ;i++) {
312            if(eccube.fileManager.arrTreeStatus[i] === path) {
313                eccube.fileManager.arrTreeStatus[i] = "";
314            }
315        }
316    };
317
318    // ファイルリストダブルクリック処理
319    eccube.fileManager.doubleClick = function(arrTree, path, is_dir, now_dir, is_parent) {
320        if(is_dir) {
321            if(!is_parent) {
322                for(var cnt = 0; cnt < arrTree.length; cnt++) {
323                    if(now_dir === arrTree[cnt][2]) {
324                        var open_flag = false;
325                        for(var status_cnt = 0; status_cnt < eccube.fileManager.arrTreeStatus.length; status_cnt++) {
326                            if(eccube.fileManager.arrTreeStatus[status_cnt] === arrTree[cnt][2]) {
327                                open_flag = true;
328                            }
329                        }
330                        if(!open_flag) {
331                            eccube.fileManager.toggleTreeMenu('tree'+cnt, 'rank_img'+cnt, arrTree[cnt][2]);
332                        }
333                    }
334                }
335            }
336            eccube.fileManager.openFolder(path);
337        } else {
338            // Download
339            eccube.setModeAndSubmit('download','','');
340        }
341    };
342
343    // フォルダオープン処理
344    eccube.fileManager.openFolder = function(path) {
345        // クリックしたフォルダ情報を保持
346        document["form1"][eccube.fileManager.selectFileHidden].value = path;
347        // treeの状態をセット
348        eccube.fileManager.setTreeStatus(eccube.fileManager.treeStatusHidden);
349        // submit
350        eccube.setModeAndSubmit(eccube.fileManager.modeHidden,'','');
351    };
352
353    // ファイル選択
354    eccube.fileManager.selectFile = function(id) {
355        eccube.fileManager.old_select_id = id;
356    };
357
358    // グローバルに使用できるようにする
359    window.eccube = eccube;
360
361    /**
362     * Initialize.
363     */
364    $(function() {
365        // ヘッダナビゲーション
366        $("#navi").find("li").hover(
367            function(){
368                $(this).addClass("sfhover");
369            },
370            function(){
371                $(this).removeClass("sfhover");
372            }
373        );
374    });
375})(window);
376
377(function($) {
378    /**
379     * パンくず
380     */
381    var o;
382
383    $.fn.breadcrumbs = function(options) {
384        var defaults = {
385            bread_crumbs: '',
386            start_node: '<span>ホーム</span>',
387            anchor_node: '<a onclick="eccube.setModeAndSubmit(\'tree\', \'parent_category_id\', ' +
388                '{category_id}); return false" href="javascript:;" />',
389            delimiter_node: '<span>&nbsp;&gt;&nbsp;</span>'
390        };
391
392        return this.each(function() {
393            if (options) {
394                o = $.fn.extend(defaults, options);
395            }
396            var $this = $(this);
397            var total = o.bread_crumbs.length;
398            var $node = $(o.start_node);
399
400            for (var i = total - 1; i >= 0; i--) {
401                if (i === total -1) {
402                    $node.append(o.delimiter_node);
403                }
404
405                var anchor = o.anchor_node.replace(/{category_id}/ig, o.bread_crumbs[i]["category_id"]);
406                $(anchor)
407                    .text(o.bread_crumbs[i]["category_name"])
408                    .appendTo($node);
409
410                if (i > 0) {
411                    $node.append(o.delimiter_node);
412                }
413            }
414            $this.html($node);
415            return this;
416        });
417    };
418})(jQuery);
Note: See TracBrowser for help on using the repository browser.