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

Revision 23454, 16.2 KB checked in by Seasoft, 10 years ago (diff)

#2157 (Windows8対応)

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