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

Revision 23453, 15.7 KB checked in by Seasoft, 10 years ago (diff)

#2157 (Windows8対応)

  • 単純にした。
    • 当初クリックで開いたメニューと、その後開いたメニューの扱いを同等とした。
    • ポイントでの動作を全階層同様にした。
    • 一部処理をサブルーチン化した。
  • .hover() を .off() で抑制しても、再び .hover() を呼ぶとイベントがスタックされる不具合を回避。

タブレットのクリック不具合は回避できていない認識。(未検証)

  • 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    eccube.navi = {};
359
360    eccube.navi.openMenu = function($target) {
361        $target
362            // 対象を開く
363            .addClass('sfhover')
364            // 対象以外を閉じる
365            .siblings('li')
366                .removeClass('sfhover')
367                .find('li').removeClass('sfhover');
368    };
369
370    // グローバルに使用できるようにする
371    window.eccube = eccube;
372
373    /**
374     * Initialize.
375     */
376    $(function() {
377        var naviClicked = false;
378        // ヘッダナビゲーション
379        $("#navi").find("div").click(function(){
380            naviClicked = true;
381            $("#navi").addClass('active');
382
383            var parent = $(this).parent('li');
384
385            // 開閉を切り替え.
386            if (!parent.hasClass('sfhover')) {
387                eccube.navi.openMenu(parent);
388            } else {
389                parent.removeClass('sfhover');
390            }
391        });
392        // ナビゲーションがアクティブであれば、マウスオーバーを有効に.
393        $("#navi").find('li').hover(function(){
394            if ($("#navi").hasClass('active')) {
395                eccube.navi.openMenu($(this));
396            }
397        });
398        // ナビゲーション以外をクリックしたらナビを閉じる.
399        $(document).click(function(){
400            if (!naviClicked) {
401                $("#navi")
402                    .removeClass('active')
403                    .find('li')
404                        .removeClass('sfhover')
405            } else {
406                naviClicked = false;
407            }
408        });
409    });
410})(window);
411
412(function($) {
413    /**
414     * パンくず
415     */
416    var o;
417
418    $.fn.breadcrumbs = function(options) {
419        var defaults = {
420            bread_crumbs: '',
421            start_node: '<span>ホーム</span>',
422            anchor_node: '<a onclick="eccube.setModeAndSubmit(\'tree\', \'parent_category_id\', ' +
423                '{category_id}); return false" href="javascript:;" />',
424            delimiter_node: '<span>&nbsp;&gt;&nbsp;</span>'
425        };
426
427        return this.each(function() {
428            if (options) {
429                o = $.fn.extend(defaults, options);
430            }
431            var $this = $(this);
432            var total = o.bread_crumbs.length;
433            var $node = $(o.start_node);
434
435            for (var i = total - 1; i >= 0; i--) {
436                if (i === total -1) {
437                    $node.append(o.delimiter_node);
438                }
439
440                var anchor = o.anchor_node.replace(/{category_id}/ig, o.bread_crumbs[i].category_id);
441                $(anchor)
442                    .text(o.bread_crumbs[i].category_name)
443                    .appendTo($node);
444
445                if (i > 0) {
446                    $node.append(o.delimiter_node);
447                }
448            }
449            $this.html($node);
450            return this;
451        });
452    };
453})(jQuery);
Note: See TracBrowser for help on using the repository browser.