1(function(){'use strict';document.addEventListener('DOMContentLoaded',function(){initNotificationDialog();});function initNotificationDialog(){if(typeof Notification!=='undefined'&&Notification.permission==='granted'&&window.n2pnSupport&&window.n2pnSupport.isPushSupported){var subscribedTopics=localStorage.getItem('n2pn_subscribed_topics');var fcmToken=localStorage.getItem('n2pn_fcm_token');if(!subscribedTopics||JSON.parse(subscribedTopics).length===0||!fcmToken){autoSubscribeGrantedUser();} 2localStorage.setItem('n2pn_dialog_shown','true');document.cookie='n2pn_shown=1; max-age=31536000; path=/';return;} 3var ua=navigator.userAgent;if(/FBAN|FBAV|Twitter|Line\/|Instagram|GSA\//.test(ua)||(ua.indexOf('Safari')===-1&&/iPhone|iPad|iPod|Android/.test(ua))){return;} 4if(document.cookie.indexOf('n2pn_dismissed=1')!==-1){return;} 5var dismissedUntil=localStorage.getItem('n2pn_dialog_dismissed_until');if(dismissedUntil&&Date.now()<parseInt(dismissedUntil,10)){return;} 6if(document.cookie.indexOf('n2pn_shown=1')!==-1){return;} 7if(localStorage.getItem('n2pn_dialog_shown')==='true'){return;} 8if(window.n2pnSupport&&window.n2pnSupport.isIOS&&!window.n2pnSupport.isStandalone){setTimeout(showIOSInstallDialog,3000);return;} 9if(window.n2pnSupport&&!window.n2pnSupport.isPushSupported){return;} 10setTimeout(showNotificationDialog,3000);} 11async function autoSubscribeGrantedUser(){var waitCount=0;while(!window.n2pnPush&&waitCount<20){await new Promise(function(r){setTimeout(r,500);});waitCount++;} 12if(!window.n2pnPush||!window.n2pnPush.refreshToken)return;try{var token=await window.n2pnPush.refreshToken();if(token){var allTopics=getAllTopics();var success=await window.n2pnPush.subscribe(allTopics);if(success){localStorage.setItem('n2pn_subscribed_topics',JSON.stringify(allTopics));console.log('èªåè³¼èªå®äºï¼éå»ãã°ææ¸ï¼');}}}catch(e){console.error('èªåè³¼èªã¨ã©ã¼:',e);}} 13function showNotificationDialog(){const dialog=document.getElementById('n2pn-notification-dialog');if(dialog){dialog.classList.add('active');}} 14function hideNotificationDialog(){const dialog=document.getElementById('n2pn-notification-dialog');if(dialog){dialog.classList.remove('active');}} 15window.n2pnAllowNotifications=async function(){const button=document.getElementById('n2pn-allow-button');const originalText=button.textContent;try{button.disabled=true;button.textContent='å¦çä¸...';const token=await window.n2pnPush.requestPermission();if(token){const allTopics=getAllTopics();const success=await window.n2pnPush.subscribe(allTopics);if(success){localStorage.setItem('n2pn_subscribed_topics',JSON.stringify(allTopics));localStorage.setItem('n2pn_dialog_shown','true');document.cookie='n2pn_shown=1; max-age=31536000; path=/';hideNotificationDialog();showSuccessMessage('éç¥è¨å®ãå®äºãã¾ããï¼');}else{throw new Error('è³¼èªã«å¤±æãã¾ãã');}}}catch(error){console.error('éç¥è¨±å¯ã¨ã©ã¼:',error);alert('éç¥ã®è¨å®ã«å¤±æãã¾ãããããä¸åº¦ã試ããã ããã');button.disabled=false;button.textContent=originalText;}};window.n2pnDenyNotifications=function(){var oneMonth=30*24*60*60*1000;localStorage.setItem('n2pn_dialog_dismissed_until',String(Date.now()+oneMonth));document.cookie='n2pn_dismissed=1; max-age=2592000; path=/';hideNotificationDialog();};function getAllTopics(){const topics=[];const areaTopics=['nishinomiya-kitaguchi-area','shukugawa-kurakuenkuchi-area','koshien-koshienhama-area','hanshin-nishinomiya-area','naruo-takasu-komatsu-area','koshienguchi-area','jr-nishinomiya-area','imazu-hanshin-kokudou-area','koroen-hamawaki-yougai-area','hirota-taisha-uegahara-area','mondoyakujin-hinonokuchi-area','nigawa-kotoen-area','koyouen-kurakuen-area','yamaguchi-najio-namaze-area','nishinomiyahama-area'];const categoryTopics=['open-close','gourmet','event','topic','town','quiz','nishi2news','shop','realestate','politics','gov-info','hazard','job','sport','accident-crime','feature-report'];return[...areaTopics,...categoryTopics];} 16function showSuccessMessage(message){const messageDiv=document.createElement('div');messageDiv.style.cssText=` 17 position: fixed; 18 top: 24px; 19 right: 24px; 20 background: #4CAF50; 21 color: white; 22 padding: 16px 24px; 23 border-radius: 8px; 24 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 25 z-index: 1000000; 26 animation: n2pn-fade-in 0.3s ease-out; 27 `;messageDiv.textContent=message;document.body.appendChild(messageDiv);setTimeout(()=>{messageDiv.style.animation='n2pn-fade-in 0.3s ease-out reverse';setTimeout(()=>{document.body.removeChild(messageDiv);},300);},3000);} 28function showIOSInstallDialog(){const dialog=document.getElementById('n2pn-notification-dialog');if(!dialog)return;const content=dialog.querySelector('.n2pn-dialog-content');if(!content)return;content.innerHTML=` 29 <div class="n2pn-dialog-header"> 30 <div class="n2pn-dialog-icon"> 31 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#2196F3"> 32 <path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/> 33 </svg> 34 </div> 35 <h2 class="n2pn-dialog-title">éç¥ãåãåãã«ã¯</h2> 36 <p class="n2pn-dialog-description"> 37 iPhoneã§éç¥ãåãåãã«ã¯ããã¼ã ç»é¢ã¸ã®è¿½å ãå¿ è¦ã§ãã 38 </p> 39 </div> 40 <div class="n2pn-dialog-body"> 41 <div class="n2pn-ios-steps"> 42 <div class="n2pn-ios-step">
43 <span class="n2pn-ios-step-num">1</span> 44 <span>ç»é¢ä¸ã® <strong>å ±æãã¿ã³</strong>ï¼â¡âï¼ãã¿ãã</span> 45 </div> 46 <div class="n2pn-ios-step"> 47 <span class="n2pn-ios-step-num">2</span> 48 <span><strong>ããã¼ã ç»é¢ã«è¿½å ã</strong>ãã¿ãã</span> 49 </div> 50 <div class="n2pn-ios-step"> 51 <span class="n2pn-ios-step-num">3</span> 52 <span>ãã¼ã ç»é¢ã®ã¢ã¤ã³ã³ãããµã¤ããéã</span> 53 </div> 54 <div class="n2pn-ios-step"> 55 <span class="n2pn-ios-step-num">4</span> 56 <span>éç¥è¨±å¯ã®ãã¤ã¢ãã°ã表示ããã¾ã</span> 57 </div> 58 </div> 59 </div> 60 <div class="n2pn-dialog-footer"> 61 <button type="button" class="n2pn-button n2pn-button-primary" onclick="n2pnDenyNotifications()" style="width:100%;"> 62 OK 63 </button> 64 </div> 65 `;if(!document.getElementById('n2pn-ios-style')){const style=document.createElement('style');style.id='n2pn-ios-style';style.textContent=` 66 .n2pn-ios-steps { padding: 8px 0; } 67 .n2pn-ios-step { 68 display: flex; align-items: center; gap: 12px; 69 padding: 12px 0; border-bottom: 1px solid #f0f0f0; 70 font-size: 15px; line-height: 1.5; 71 } 72 .n2pn-ios-step:last-child { border-bottom: none; } 73 .n2pn-ios-step-num { 74 flex-shrink: 0; width: 28px; height: 28px; 75 background: #2196F3; color: #fff; border-radius: 50%; 76 display: flex; align-items: center; justify-content: center; 77 font-size: 14px; font-weight: 700; 78 } 79 `;document.head.appendChild(style);} 80dialog.classList.add('active');} 81document.addEventListener('click',function(e){const dialog=document.getElementById('n2pn-notification-dialog');if(e.target===dialog){n2pnDenyNotifications();}});})();
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.