PageSourceSearch

https://www.netoff.co.jp/js/legacy_common.js?v=202501311

js netoff.co.jp collected 2026-09-24 18:41:42 UTC 10,060 bytes, 304 lines download raw bytes

1var csrftoken = null;
2var headerName = null;
3
4/**
5 * 初期表示時
6 * ・springサーバのトークンを保持する
7 * ・カートモーダル生成
8 */
9window.addEventListener('DOMContentLoaded', async function () {
10    if (csrftoken == null) {
11        await loadtoken();
12    }
13
14    var css = document.createElement("link");
15    css.setAttribute("rel", "stylesheet");
16    css.setAttribute("type", "text/css");
17    css.setAttribute("href", "/parts/css/modal.css?v=1");
18    document.getElementsByTagName("head")[0].appendChild(css);
19    fetch('/parts/cartmodal.html')
20        .then(data => data.text())
21        .then((html) => {
22            if (this.document.getElementById("cart_modal") == null) {
23                document.getElementsByTagName("body")[0].insertAdjacentHTML('afterbegin', html);
24            }
25        })
26        .then(() => {
27            const bgPopup = document.querySelector('.bg_onetime_popup');
28            const popup = document.querySelector('.onetime_popup');
29            bgPopup.addEventListener('click', function () {
30                closepopup();
31            });
32            popup.addEventListener('click', function (e) {
33                e.stopPropagation();
34            });
35        });
36});
37
38/**
39 * springサーバのトークンを取得、保持する
40 */
41async function loadtoken() {
42    let ajaxresult = await getcsrftoken();
43    if (ajaxresult != null) {
44        csrftoken = ajaxresult.token;
45        headerName = ajaxresult.headerName;
46        // ajax実行時トークンをヘッダに付与
47        $(document).ajaxSend(function (e, xhr, options) {
48            xhr.setRequestHeader(headerName, csrftoken);
49        });
50    }
51}
52
53/**
54 * springサーバのトークンを保持する
55 * return.token : トークンの値
56 * return.headerName : springで受け付けるトークンのリクエストヘッダ属性名称
57 */
58async function getcsrftoken() {
59    let result = null;
60    try {
61        result = await $.ajax({
62            url: '/api/csrf_token',
63            type: 'GET',
64        });
65    } catch (error) {
66        console.log(error);
67    }
68    return result;
69}
70
71/**
72 * カートに商品を追加する
73 */
74async function addcart(cmdtycode) {
75    if (csrftoken == null) { await loadtoken(); }
76
77    try {
78
79        let result = await $.ajax({
80            url: '/api/addcart',
81            type: 'POST',
82            data: { cmdtyCode: cmdtycode }
83        });
84
85        document.getElementById('cart_modal').style.display = '';
86        if (result.status == 'ok') {
87            document.getElementById('titleName').innerText = '商品をカートに入れました。';
88            document.getElementById('gocart').style.display = '';
89            if (document.getElementById('cartItemCount') == null) {
90                // カート商品個数0の時は個数表示用タグを生成
91                document.getElementById('cartItemCountDiv').innerHTML = "<span class='l-header-common__nav-list__active l-header-common__nav-list__active-count' id='cartItemCount'>1</span>";
92            } else {
93                let cartItemCount = Number(document.getElementById('cartItemCount').innerText);
94                document.getElementById('cartItemCount').innerText = cartItemCount + 1;
95            }
96
97        } else if (result.status == 'ng') {
98            if (result.message.indexOf('既にカートに入っています') != -1) {
99                /*
100                "カートの上限を超えました。
101                「スーパーマリオRPG」は既にカートに入っています。
102                同一商品をカートに入れられる数量は、1点までです。"
103                という感じで返ってくるので簡略化
104                */
105                document.getElementById('titleName').innerText = "同じ商品が既にカートに入っています。";
106            } else {
107                document.getElementById('titleName').innerText = result.message;
108            }
109            document.getElementById('gocart').style.display = 'none';
110        }
111    } catch (error) {
112        console.log(error);
113    }
114}
115
116/**
117 * 非ログインユーザが入荷メールに登録する
118 */
119async function noLoginAddArrivalEmail(cmdtyCode) {
120    if (csrftoken == null) { await loadtoken(); }
121
122    // 入荷メール登録&一覧表示に遷移
123    const addForm = document.createElement('form');
124    addForm.action = '/mypage/incomingmaillist/add';
125    addForm.method = 'GET';
126
127    document.body.append(addForm);
128    // 商品コード
129    const input = document.createElement('input');
130    input.type = 'hidden';
131    input.setAttribute('name', 'cmdtyCodes');
132    input.setAttribute('value', cmdtyCode);
133    addForm.appendChild(input);
134    // レガシーから操作したフラグ
135    const input2 = document.createElement('input');
136    input2.type = 'hidden';
137    input2.setAttribute('name', 'isLegacyAdd');
138    input2.setAttribute('value', "1");
139    addForm.appendChild(input2);
140
141    addForm.submit();
142}
143
144/**
145 * 入荷メールに登録する
146 */
147async function addarrivalmail(cmdtycode) {
148    if (csrftoken == null) { await loadtoken(); }
149
150    try {
151
152        let data = JSON.stringify({ cmdtyCode: cmdtycode });
153        let result = await $.ajax({
154            url: '/api/incomingmail/add',
155            type: 'POST',
156            data: data,
157            datatype: 'json',
158            headers: { 'Content-Type': 'application/json' }
159        });
160
161        if (result == cmdtycode) {
162            document.getElementById('cart_modal').style.display = '';
163            document.getElementById('titleName').innerText = '商品を入荷メールに登録しました。';
164            document.getElementById('gocart').style.display = 'none';
165        } else if (result.indexOf('ネットオフのログインページです。') != -1) {
166            await noLoginAddArrivalEmail(cmdtycode);
167        }
168    } catch (error) {
169        console.log(error);
170    }
171}
172
173async function registCampaign(tablecode,nexturl){
174	let ret = '0';
175	try{
176		ret = await $.ajax({
177            url: '/legacy/api/registCampaign/?tablecode=' + tablecode,
178            type: 'GET'
179        });
180        
181        if(ret == '0'){
182        	location.href = nexturl;
183        }
184    }catch(error){
185    	console.log(error);
186    }
187}
188
189/**
190 * カート内商品点数を取得する
191 * return : カート内商品点数(エラー時はnull)
192 */
193async function getcartitemcount() {
194    if (csrftoken == null) { await loadtoken(); }
195
196    let cartitemcount = null;
197    try {
198        cartitemcount = await $.ajax({
199            url: '/legacy/api/getCartItemCount',
200            type: 'POST'
201        });
202    } catch (error) {
203        console.log(error);
204    }
205
206    return cartitemcount;
207}
208
209/**
210 * お気に入り登録商品点数を取得する
211 * return : お気に入り登録商品点数(エラー時はnull)
212 */
213async function getfavoriteitemcount() {
214    if (csrftoken == null) { await loadtoken(); }
215
216    let favoriteitemcount = null;
217    try {
218        favoriteitemcount = await $.ajax({
219            url: '/legacy/api/getFavoriteItemCount',
220            type: 'POST'
221        });
222    } catch (error) {
223        console.log('error');
224    }
225    return favoriteitemcount;
226}
227
228/**
229 * 入荷メール登録件数を取得する
230 * return : 入荷メール登録件数(エラー時はnull)
231 */
232async function getarrivalmailcount() {
233    if (csrftoken == null) { await loadtoken(); }
234
235    let arrivalmailcount = null;
236    try {
237        arrivalmailcount = await $.ajax({
238            url: '/legacy/api/getArrivalMailCount',
239            type: 'POST'
240        });
241    } catch (error) {
242        console.log('error');
243    }
244    return arrivalmailcount;
245}
246
247/**
248 * ユーザ情報と各登録数を取得 ※カート件数などの情報を一通り取得する
249 * return.login : bool ログインしているかどうか
250 * return.username : ユーザ名 (return.login = trueのときのみ)
251 * return.cartitemcount : カート内商品点数
252 * return.favoriteitemcount : お気に入り登録商品点数 (return.login = trueのときのみ)
253 * return.arrivalmailcount : 入荷メール登録件数 (return.login = trueのときのみ)
254 */
255async function getviewcontext() {
256    if (csrftoken == null) { await loadtoken(); }
257
258    let userinfo = null;
259    try {
260        userinfo = await $.ajax({
261            url: '/legacy/api/getViewContext',
262            type: 'POST'
263        });
264    } catch (error) {
265        console.log('error');
266    }
267    return userinfo;
268}
269
270/**
271 * ログイン後、指定したページにリダイレクトする
272 */
273function redirectlogin(url){
274	document.cookie = 'nextUrl=' + url + ";path=/;domain=" + document.domain;
275	location.href = '/RedirectLogin/'
276}
277
278/**
279 * ログアウトする
280 */
281function logout() {
282    // トークンを取得し、body要素直下にログアウト用のformタグを生成して組み込み、submitする
283    $.ajax({
284        url: '/api/csrf_token',
285        type: 'GET',
286    }).done((data) => {
287        let formhtml = "<form action='/logout' method='post' id='logout'><input type='hidden' name='_csrf' value='" + data.token + "'/></form>";
288        let body = document.getElementsByTagName('body')[0];
289        body.insertAdjacentHTML('afterbegin', formhtml);
290        let form = document.getElementById('logout');
291        form.submit();
292    }).fail((jqXHR, textStatus, errorThrown) => {
293        console.log("jqXHR          : " + jqXHR.status);
294        console.log("textStatus     : " + textStatus);
295        console.log("errorThrown    : " + errorThrown.message);
296    });
297}
298
299// モーダルを閉じる
300function closepopup() {
301    const body = document.querySelector('body');
302    body.classList.remove('open_popup');
303    document.getElementById('cart_modal').style.display = 'none';
304}

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.