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

Revision 23446, 16.7 KB checked in by pineray, 10 years ago (diff)

#2157 Windows8対応

第2階層以下のメニューはクリックでのみ開くように変更.
クリックで開いたメニューは、ポイントが外れても開いた状態にする.

  • 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 = eccube.getFormElement(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){
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:eccube.fileManager.openFolder(\''+ 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        var naviClicked = false;
366        // ヘッダナビゲーション
367        $("#navi").find("div").click(function(){
368            naviClicked = true;
369
370            var parent = $(this).parent('li');
371            var level1 = $(this).parents('li.on_level1');
372
373            if (parent.hasClass('on_level1')) {
374                // クリックしたメニューが第1階層なら開閉を切り替え.
375                parent.toggleClass('clicked');
376            } else {
377                // 第2階層以下なら第1階層を開いた状態にする.
378                level1.addClass('clicked');
379            }
380            // クリックしたメニュー以外のメニューを閉じる.
381            level1.siblings('li')
382                .removeClass('clicked')
383                .removeClass('sfhover')
384                .find('li').removeClass('sfhover');
385
386            // ナビゲーションがアクティブであれば、マウスオーバーを有効に.
387            $("#navi")
388                .find('li.on_level1')
389                    .off('mouseenter')
390                    .off('mouseleave')
391                    .end()
392                .has('li.on_level1.clicked').find('li.on_level1').filter(':not(.clicked)').hover(
393                    function(){
394                        $(this).addClass('sfhover');
395                    },
396                    function(){
397                        $(this).removeClass('sfhover');
398                    }
399                );
400
401            if (parent.hasClass('clicked')) {
402                parent.addClass('sfhover');
403            } else if (parent.hasClass('sfhover')) {
404                parent
405                    .removeClass('sfhover')
406                    .find('li').removeClass('sfhover');
407            } else {
408                parent
409                    .addClass('sfhover')
410                    .siblings('li')
411                        .removeClass('sfhover')
412                        .find('li').removeClass('sfhover');
413            }
414        });
415        // ナビゲーション以外をクリックしたらナビを閉じる.
416        $(document).click(function(){
417            if (!naviClicked) {
418                $("#navi").find('li')
419                    .off('mouseenter')
420                    .off('mouseleave')
421                    .removeClass('sfhover')
422                    .removeClass('clicked');
423            } else {
424                naviClicked = false;
425            }
426        });
427    });
428})(window);
429
430(function($) {
431    /**
432     * パンくず
433     */
434    var o;
435
436    $.fn.breadcrumbs = function(options) {
437        var defaults = {
438            bread_crumbs: '',
439            start_node: '<span>ホーム</span>',
440            anchor_node: '<a onclick="eccube.setModeAndSubmit(\'tree\', \'parent_category_id\', ' +
441                '{category_id}); return false" href="javascript:;" />',
442            delimiter_node: '<span>&nbsp;&gt;&nbsp;</span>'
443        };
444
445        return this.each(function() {
446            if (options) {
447                o = $.fn.extend(defaults, options);
448            }
449            var $this = $(this);
450            var total = o.bread_crumbs.length;
451            var $node = $(o.start_node);
452
453            for (var i = total - 1; i >= 0; i--) {
454                if (i === total -1) {
455                    $node.append(o.delimiter_node);
456                }
457
458                var anchor = o.anchor_node.replace(/{category_id}/ig, o.bread_crumbs[i].category_id);
459                $(anchor)
460                    .text(o.bread_crumbs[i].category_name)
461                    .appendTo($node);
462
463                if (i > 0) {
464                    $node.append(o.delimiter_node);
465                }
466            }
467            $this.html($node);
468            return this;
469        });
470    };
471})(jQuery);
Note: See TracBrowser for help on using the repository browser.