PageSourceSearch

https://www.cht.com.tw/home/eshop/js/component/MegaMenu.js

js cht.com.tw collected 2026-09-24 08:37:55 UTC 4,901 bytes, 167 lines download raw bytes

1$(function () {
2    reqMemberCardAction();
3
4    $(document).on('click', '.btnCHTLogin', function () {
5        var $this = $(this);
6        var data = { returnUrl: $this.data('returnUrl') || location.href };
7
8        var url = $this.attr('href');
9        if (url) {
10            $this.data('curl', url);
11        } else {
12            url = $this.data('curl');
13        }
14
15        data.curl = url;
16
17        $this.removeAttr('href');
18
19        ckickLogIn(data);
20    });
21
22    $(document).on('click', '.lnkLogut', function () {
23        var $this = $(this);
24        var data = { returnUrl: $this.data('returnUrl') ?? location.href };
25
26        var url = $this.attr('href');
27        if (url) {
28            $this.data('curl', url);
29        } else {
30            url = $this.data('curl');
31        }
32
33        data.curl = url;
34
35        $this.removeAttr('href');
36
37        ckickLogOut(data);
38    });
39
40    function ckickLogIn(data) {
41        $.ajax({
42            type: 'POST',
43            url: '/home/eshop/api/Login/LogInUser',
44            data: data,
45            async: false,
46            success: function (response) {
47                console.log({ 'success': response, data });
48                if (response != null && data != null) {
49                    window.location.href = data.curl;
50                    showLoading();
51                }
52            },
53            error: function (jqXHR) {
54                console.log('fail', jqXHR);
55            },
56            dataType: 'json'
57        });
58    }
59
60    function ckickLogOut(data) {
61        $.ajax({
62            type: 'POST',
63            url: '/home/eshop/api/Login/LogOutUser',
64            data: data,
65            async: false,
66            success: function (response) {
67                console.log({ 'success': response, data });
68
69                if (response != null && data != null) {
70
71                    var urlparts = data.returnUrl.split('?');
72                    var returnUrl = '';
73                    if (urlparts.length >= 2) {
74                        returnUrl = response.logoutMemberUrl || urlparts[0];
75                    } else {
76                        returnUrl = removeURLParameter(data.returnUrl, 'flowID');
77                    }
78                    response.returnURL = updateQueryStringParameter(data.curl, 'ReturnURL', returnUrl.replace(/=/g, 'DengYu').replace(/&/g, 'YiJi'));
79                    console.log(response.returnURL);
80                    window.location.href = response.returnURL;
81                    showLoading();
82                }
83            },
84            error: function (jqXHR) {
85                console.log(jqXHR);
86            },
87            dataType: 'json'
88        });
89    }
90});
91
92function updateQueryStringParameter(uri, key, value) {
93    var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
94    var separator = uri.indexOf('?') !== -1 ? "&" : "?";
95    if (uri.match(re)) {
96        return uri.replace(re, '$1' + key + "=" + value + '$2');
97    }
98    else {
99        return uri + separator + key + "=" + value;
100    }
101}
102
103function removeURLParameter(url, parameter) {
104    //prefer to use l.search if you have a location/link object
105    var urlparts = url.split('?');
106    if (urlparts.length >= 2) {
107
108        var prefix = encodeURIComponent(parameter) + '=';
109        var pars = urlparts[1].split(/[&;]/g);
110
111        //reverse iteration as may be destructive
112        for (var i = pars.length; i-- > 0;) {
113            //idiom for string.startsWith
114            if (pars[i].lastIndexOf(prefix, 0) !== -1) {
115                pars.splice(i, 1);
116            }
117        }
118
119        url = urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
120        return url;
121    } else {
122        return url;
123    }
124}
125
126function reqMemberCardAction() {
127    var config = window.MegaMenuConfig || {};
128    $.ajax({
129        url: '/home/eshop/api/MegaMenu/MemberCardModal',
130        method: 'POST',
131        data: { isEnterprise: !!config.isEnterprise, isMobile: !!config.isMobile },
132        global: false,
133        success: function (stream) {
134            $('[data-membercard-div]').append(stream);
135        },
136        error: function (xhr) {
137            console.log(xhr);
138        }
139    });
140}
141
142//-----------------------------------------
143$.extend({
144    MegaMenu: new MegeMenuConfigurations()
145});
146
147// Header 基礎設定
148function MegeMenuConfigurations() {
149    var scrollOptions = {
150        BannerSelector: '.index-mega-banner',
151        TabScrollTop_limit: 0,
152    };
153
154    function ScrollSetting() {
155        return scrollOptions;
156    }
157
158    return {
159        SetScrollOption: function (opt) {
160            var option = new ScrollSetting();
161            if (!opt)
162                return option
163            return $.extend(option, opt)
164        },
165        ScrollOptions: scrollOptions
166    }
167}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.