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

Revision 23661, 16.9 KB checked in by shinichi_takahashi, 10 years ago (diff)

#2639 [管理画面>商品編集(規格)]商品規格編集画面で、一括登録・解除のチェックボックスが動作しない を修正

  • 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-2014 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, lastAdminFlag) {
34        var url = "./delete.php?id=" + id + "&pageno=" + pageno;
35        var message = lastAdminFlag ?
36        '警告: 管理者がいなくなってしまいますと、システム設定などの操作が行えなくりますが宜しいでしょうか'
37        : '登録内容を削除しても宜しいでしょうか';
38        if(window.confirm(message)){
39            location.href = url;
40        }
41    };
42
43    // ラジオボタンチェック状態を保存
44    eccube.checkedRadios = "";
45
46    // ラジオボタンのチェック状態を取得する。
47    eccube.getRadioChecked = function() {
48        var max;
49        var cnt;
50        var startname = "";
51        var ret;
52        var name;
53        max = document.form1.elements.length;
54        eccube.checkedRadios = [max];
55        for(cnt = 0; cnt < max; cnt++) {
56            if(document.form1.elements[cnt].type === 'radio') {
57                name = document.form1.elements[cnt].name;
58                /* radioボタンは同じ名前が2回続けて検出されるので、
59                 最初の名前の検出であるかどうかの判定 */
60                // 1回目の検出
61                if(startname !== name) {
62                    startname = name;
63                    ret = document.form1.elements[cnt].checked;
64                    if(ret === true){
65                        // 稼働がチェックされている。
66                        eccube.checkedRadios[name] = 1;
67                    }
68                    // 2回目の検出
69                } else {
70                    ret = document.form1.elements[cnt].checked;
71                    if(ret === true){
72                        // 非稼働がチェックされている。
73                        eccube.checkedRadios[name] = 0;
74                    }
75                }
76            }
77        }
78    };
79
80    // 管理者メンバーページの切替
81    eccube.moveMemberPage = function(pageno) {
82        location.href = "?pageno=" + pageno;
83    };
84
85    // ページナビで使用する
86    eccube.moveNaviPage = function(pageno, mode, form) {
87        if (form === undefined) {
88            form = eccube.defaults.formId;
89        }
90        var formElement = eccube.getFormElement(form);
91        formElement.find("input[name='search_pageno']").val(pageno);
92        if (mode !== undefined) {
93            formElement.find("input[name='mode']").val(mode);
94        }
95        formElement.submit();
96    };
97
98    // ページナビで使用する(mode = search専用)
99    eccube.moveSearchPage = function(pageno) {
100        eccube.moveNaviPage(pageno, "search");
101    };
102
103    // ページナビで使用する(form2)
104    eccube.moveSecondSearchPage = function(pageno) {
105        eccube.moveNaviPage(pageno, "search", "form2");
106    };
107
108    // 項目に入った値をクリアする。
109    eccube.clearValue = function(name) {
110        document.form1[name].value = "";
111    };
112
113    // 規格分類登録へ移動
114    eccube.moveClassCatPage = function(class_id) {
115        location.href =  "./classcategory.php?class_id=" + class_id;
116    };
117
118    eccube.checkAllBox = function(input, selector) {
119        if ($(input).prop('checked')) {
120            $(selector).prop('checked', true);
121        } else {
122            $(selector).prop('checked', false);
123        }
124    };
125
126    //指定されたidの削除を行うページを実行する。
127    eccube.moveDeleteUrl = function(url) {
128        if(window.confirm('登録内容を削除しても宜しいでしょうか')){
129            location.href = url;
130        }
131        return false;
132    };
133
134    //配送料金を自動入力
135    eccube.setDelivFee = function(max) {
136        var name;
137        for(var cnt = 1; cnt <= max; cnt++) {
138            name = "fee" + cnt;
139            document.form1[name].value = document.form1.fee_all.value;
140        }
141    };
142
143    // 在庫数制限判定
144    eccube.checkStockLimit = function(icolor) {
145        if(document.form1.stock_unlimited) {
146            var list = ['stock'];
147            if(document.form1.stock_unlimited.checked) {
148                eccube.changeDisabled(list, icolor);
149                document.form1.stock.value = "";
150            } else {
151                eccube.changeDisabled(list, '');
152            }
153        }
154    };
155
156    // 確認メッセージ
157    eccube.doConfirm = function() {
158        return window.confirm('この内容で登録しても宜しいでしょうか');
159    };
160
161    // フォームに代入してからサブミットする。
162    eccube.insertValueAndSubmit = function(fm, ele, val, msg){
163        var ret;
164        if (msg){
165            ret = window.confirm(msg);
166        } else {
167            ret = true;
168        }
169        if(ret){
170            fm[ele].value = val;
171            fm.submit();
172            return false;
173        }
174        return false;
175    };
176
177    //制限数判定
178    eccube.checkLimit = function(elem1, elem2, icolor) {
179        if(document.form1[elem2]) {
180            var list = [elem1];
181            if(document.form1[elem2].checked) {
182                eccube.changeDisabled(list, icolor);
183                document.form1[elem1].value = "";
184            } else {
185                eccube.changeDisabled(list, '');
186            }
187        }
188    };
189
190    /**
191     * ファイル管理
192     */
193    eccube.fileManager = {
194        tree:"",                // 生成HTML格納
195        arrTreeStatus:[],       // ツリー状態保持
196        old_select_id:'',       // 前回選択していたファイル
197        selectFileHidden:"",    // 選択したファイルのhidden名
198        treeStatusHidden:"",    // ツリー状態保存用のhidden名
199        modeHidden:""           // modeセットhidden名
200    };
201
202    // ツリー表示
203    eccube.fileManager.viewFileTree = function(view_id, arrTree, openFolder, selectHidden, treeHidden, mode) {
204        eccube.fileManager.selectFileHidden = selectHidden;
205        eccube.fileManager.treeStatusHidden = treeHidden;
206        eccube.fileManager.modeHidden = mode;
207
208        var id, level, old_id, old_level, tmp_level, rank_img, display, arrFileSplit, file_name, folder_img;
209
210        for(var i = 0; i < arrTree.length; i++) {
211            id = arrTree[i][0];
212            level = arrTree[i][3];
213
214            if(i === 0) {
215                old_id = "0";
216                old_level = 0;
217            } else {
218                old_id = arrTree[i-1][0];
219                old_level = arrTree[i-1][3];
220            }
221
222            // 階層上へ戻る
223            if(level <= (old_level - 1)) {
224                tmp_level = old_level - level;
225                for(var up_roop = 0; up_roop <= tmp_level; up_roop++) {
226                    eccube.fileManager.tree += '</div>';
227                }
228            }
229
230            // 同一階層で次のフォルダへ
231            if(id !== old_id && level === old_level) {
232                eccube.fileManager.tree += '</div>';
233            }
234
235            // 階層の分だけスペースを入れる
236            for(var space_cnt = 0; space_cnt < arrTree[i][3]; space_cnt++) {
237                eccube.fileManager.tree += "&nbsp;&nbsp;&nbsp;";
238            }
239
240            // 階層画像の表示・非表示処理
241            if(arrTree[i][4]) {
242                if(arrTree[i][1] === '_parent') {
243                    rank_img = eccube.fileManager.IMG_MINUS;
244                } else {
245                    rank_img = eccube.fileManager.IMG_NORMAL;
246                }
247                // 開き状態を保持
248                eccube.fileManager.arrTreeStatus.push(arrTree[i][2]);
249                display = 'block';
250            } else {
251                if(arrTree[i][1] === '_parent') {
252                    rank_img = eccube.fileManager.IMG_PLUS;
253                } else {
254                    rank_img = eccube.fileManager.IMG_NORMAL;
255                }
256                display = 'none';
257            }
258
259            arrFileSplit = arrTree[i][2].split("/");
260            file_name = arrFileSplit[arrFileSplit.length-1];
261
262            // フォルダの画像を選択
263            if(arrTree[i][2] === openFolder) {
264                folder_img = eccube.fileManager.IMG_FOLDER_OPEN;
265                file_name = "<b>" + file_name + "</b>";
266            } else {
267                folder_img = eccube.fileManager.IMG_FOLDER_CLOSE;
268            }
269
270            // 階層画像に子供がいたらオンクリック処理をつける
271            if(rank_img !== eccube.fileManager.IMG_NORMAL) {
272                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 +'">';
273            } else {
274                eccube.fileManager.tree += '<img src="'+ rank_img +'" border="0" name="rank_img'+ i +'" id="rank_img'+ i +'">';
275            }
276            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/>';
277            eccube.fileManager.tree += '<div id="tree'+ i +'" style="display:'+ display +'">';
278        }
279        document.getElementById(view_id).innerHTML = eccube.fileManager.tree;
280        //document.tree_form.tree_test2.focus();
281    };
282
283    // Tree状態をhiddenにセット
284    eccube.fileManager.setTreeStatus = function(name) {
285        var tree_status = "";
286        for(var i=0; i < eccube.fileManager.arrTreeStatus.length ;i++) {
287            if(i !== 0) {
288                tree_status += '|';
289            }
290            tree_status += eccube.fileManager.arrTreeStatus[i];
291        }
292        document.form1[name].value = tree_status;
293    };
294
295    // 階層ツリーメニュー表示・非表示処理
296    eccube.fileManager.toggleTreeMenu = function(tName, imgName, path) {
297        var tMenu = $("#" + tName);
298
299        if(tMenu.css("display") === 'none') {
300            $("#" +imgName).attr("src", eccube.fileManager.IMG_MINUS);
301            tMenu.show();
302            // 階層の開いた状態を保持
303            eccube.fileManager.arrTreeStatus.push(path);
304        } else {
305            $("#" +imgName).attr("src", eccube.fileManager.IMG_PLUS);
306            tMenu.hide();
307            // 閉じ状態を保持
308            eccube.fileManager.fnDelTreeStatus(path);
309        }
310    };
311
312    // Tree状態を削除する(閉じる状態へ)
313    eccube.fileManager.deleteTreeStatus = function(path) {
314        for(var i=0; i < eccube.fileManager.arrTreeStatus.length ;i++) {
315            if(eccube.fileManager.arrTreeStatus[i] === path) {
316                eccube.fileManager.arrTreeStatus[i] = "";
317            }
318        }
319    };
320
321    // ファイルリストダブルクリック処理
322    eccube.fileManager.doubleClick = function(arrTree, path, is_dir, now_dir, is_parent) {
323        if(is_dir) {
324            if(!is_parent) {
325                for(var cnt = 0; cnt < arrTree.length; cnt++) {
326                    if(now_dir === arrTree[cnt][2]) {
327                        var open_flag = false;
328                        for(var status_cnt = 0; status_cnt < eccube.fileManager.arrTreeStatus.length; status_cnt++) {
329                            if(eccube.fileManager.arrTreeStatus[status_cnt] === arrTree[cnt][2]) {
330                                open_flag = true;
331                            }
332                        }
333                        if(!open_flag) {
334                            eccube.fileManager.toggleTreeMenu('tree'+cnt, 'rank_img'+cnt, arrTree[cnt][2]);
335                        }
336                    }
337                }
338            }
339            eccube.fileManager.openFolder(path);
340        } else {
341            // Download
342            eccube.setModeAndSubmit('download','','');
343        }
344    };
345
346    // フォルダオープン処理
347    eccube.fileManager.openFolder = function(path) {
348        // クリックしたフォルダ情報を保持
349        document.form1[eccube.fileManager.selectFileHidden].value = path;
350        // treeの状態をセット
351        eccube.fileManager.setTreeStatus(eccube.fileManager.treeStatusHidden);
352        // submit
353        eccube.setModeAndSubmit(eccube.fileManager.modeHidden,'','');
354    };
355
356    // ファイル選択
357    eccube.fileManager.selectFile = function(id) {
358        eccube.fileManager.old_select_id = id;
359    };
360
361    eccube.navi = {};
362
363    // クリックを無視するフラグ
364    eccube.navi.ignore_click = false;
365
366    /**
367     * 対象を指定してメニューを開く
368     */
369    eccube.navi.openMenu = function($target) {
370        $target
371            // 対象を開く
372            .addClass('sfhover')
373            // 対象以外を閉じる
374            .siblings('li')
375                .removeClass('sfhover')
376                .find('li').removeClass('sfhover');
377    };
378
379    /**
380     * 全てのメニューを閉じる
381     */
382    eccube.navi.closeAllMenu = function() {
383        $("#navi")
384            .removeClass('active')
385            .find('li')
386                .removeClass('sfhover');
387    };
388
389    /**
390     * 一時的にクリックイベントを無視する
391     */
392    eccube.navi.setIgnoreClick = function(milliseconds) { // FIXME: 関数名
393        if (milliseconds === null) milliseconds = 100;
394        eccube.navi.ignore_click = true;
395        setTimeout(function(){eccube.navi.ignore_click = false;}, milliseconds);
396    };
397
398    // グローバルに使用できるようにする
399    window.eccube = eccube;
400
401    /**
402     * Initialize.
403     */
404    $(function() {
405        var naviClicked = false;
406        // ヘッダナビゲーション
407        $("#navi").find("div").click(function(){
408            // タブレットでの二重イベント発生を回避
409            if (eccube.navi.ignore_click) return false;
410
411            naviClicked = true;
412            $("#navi").addClass('active');
413
414            var parent = $(this).parent('li');
415
416            // 開閉を切り替え.
417            if (!parent.hasClass('sfhover')) {
418                eccube.navi.openMenu(parent);
419            } else {
420                if (parent.hasClass('on_level1')) {
421                    eccube.navi.closeAllMenu();
422                } else {
423                    parent.removeClass('sfhover');
424                }
425            }
426        });
427        // ナビゲーションがアクティブであれば、マウスオーバーを有効に.
428        $("#navi").find('li').hover(function(){
429            if ($("#navi").hasClass('active')) {
430                eccube.navi.openMenu($(this));
431                eccube.navi.setIgnoreClick();
432            }
433        });
434        // ナビゲーション以外をクリックしたらナビを閉じる.
435        $(document).click(function(){
436            if (!naviClicked) {
437                eccube.navi.closeAllMenu();
438            } else {
439                naviClicked = false;
440            }
441        });
442    });
443})(window);
444
445(function($) {
446    /**
447     * パンくず
448     */
449    var o;
450
451    $.fn.breadcrumbs = function(options) {
452        var defaults = {
453            bread_crumbs: '',
454            start_node: '<span>ホーム</span>',
455            anchor_node: '<a onclick="eccube.setModeAndSubmit(\'tree\', \'parent_category_id\', ' +
456                '{category_id}); return false" href="javascript:;" />',
457            delimiter_node: '<span>&nbsp;&gt;&nbsp;</span>'
458        };
459
460        return this.each(function() {
461            if (options) {
462                o = $.fn.extend(defaults, options);
463            }
464            var $this = $(this);
465            var total = o.bread_crumbs.length;
466            var $node = $(o.start_node);
467
468            for (var i = total - 1; i >= 0; i--) {
469                if (i === total -1) {
470                    $node.append(o.delimiter_node);
471                }
472
473                var anchor = o.anchor_node.replace(/{category_id}/ig, o.bread_crumbs[i].category_id);
474                $(anchor)
475                    .text(o.bread_crumbs[i].category_name)
476                    .appendTo($node);
477
478                if (i > 0) {
479                    $node.append(o.delimiter_node);
480                }
481            }
482            $this.html($node);
483            return this;
484        });
485    };
486})(jQuery);
Note: See TracBrowser for help on using the repository browser.