1/** 2 * AJEC ãæ¡å ãã£ããï¼ã«ã¼ã«ãã¼ã¹ã»AI å¿çãªãï¼ 3 * 4 * educon-service-site ã®èªä½ãã£ããã¦ã£ã¸ã§ããã AJEC åãã«ç§»æ¤ãããã®ã 5 * ä¼è©±ã®åå²ã»æè¨ã®æ£ã¯ãã®ãã¡ã¤ã«ã® NODES / CHIPS / SUGGESTS / ROUTESï¼å¤æ´æé 㯠doc/chatbot/README.mdï¼ã 6 * æè¨ã¯ãµã¤ãã«æ²è¼ãã¦ããäºå®ã ãã§æ¸ãï¼ä¼è²»ã»è³æ ¼=å ¥ä¼æ¡å ãæ¦è¦=AJECã¨ã¯ãé¨ä¼=é¨ä¼ã®ç´¹ä» çï¼ã 7 * å ãã¼ã¸ãæ¹è¨ããããããç´ããSCENARIO_VER ãä¸ããã 8 * 9 * è¨å®ã¯ inc/chatbot.php ã window.AJEC_CHATBOT ã«æ¸¡ãï¼REST ã® URLã»æ¡å å URLã»è¬åº§ä¸è¦§ã»åãåããã®ç¨®é¡ï¼ã 10 * ä¾åãªãã»vanilla JSããªã³ã¯ã¯ã¯ãªãã¯ã®åæå¦çã§ window.open ãããããããã¢ãããããã¯ãããªãã 11 */ 12(function () { 13 'use strict'; 14 15 var CFG = window.AJEC_CHATBOT || {}; 16 var URLS = CFG.urls || {}; 17 var LEAD_TYPES = CFG.leadTypes || { other: 'ãåãåãã' }; 18 19 /* ã·ããªãªæ¹è¨æã«ä¸ãããä¿åæ¸ã¿ã®ä¼è©±ã¨ãã¼ã¸ã§ã³ãéãã°ç ´æ£ãã¦æ°ããã·ããªãªã§å§ãã */ 20 var SCENARIO_VER = 2; // 2: ãã¶ã¤ã³å·æ°ï¼ä¿åæ¸ã¿ã®é¸æè¢ã®å½¢å¼ãå¤ãã£ãããï¼ 21 22 /* ===== ã·ããªãª ===== 23 * 鏿è¢: go=ãã¼ãã¸é²ã / url=ãã¼ã¸ãæ°ããã¿ãã§éãï¼URLS ã®ãã¼ã絶対 URLãtag=ä¼å¡ç¤¾ä¸è¦§ã®åéçµãè¾¼ã¿ï¼ 24 * act=leadï¼ãã£ããã§åãåãããpreset=種é¡ï¼/ endï¼çµäºï¼/ navbackï¼ã²ã¨ã¤åã«æ»ãï¼ 25 * goalï¼ç®¡çç»é¢ã®éè¨åºåï¼: form=ãã©ã¼ã ã®ãã¼ã¸ / members=ä¼å¡ç¤¾ä¸è¦§ / kouza=è¬åº§ã®ç³ã込㿠/ detail=ãã®ä»ã®ãã¼ã¸ 26 */ 27 function LEAD(preset, label) { 28 return { t: label || 'ãã£ããã§åãåããã', act: 'lead', preset: preset || '' }; 29 } 30 function MEMBERS(label, tag) { 31 return { t: label, url: 'members', tag: tag || '', goal: 'members' }; 32 } 33 34 var NODES = { 35 n0: { 36 text: [ 37 'ããã«ã¡ã¯ãæ¥æ¬ç·¨éå¶ä½åä¼ï¼AJECï¼ã®ãæ¡å ãã£ããã§ãã', 38 'ãç¨ä»¶ã«è¿ããã®ãã¡ãã¥ã¼ãããé¸ã³ãã ãããä¸ã®å ¥åæ¬ã«ç¥ããããã¨ãå ¥åãã¦æ¢ããã¨ãã§ãã¾ãã' 39 ], 40 choices: [ 41 { t: 'ç·¨éå¶ä½ã®ä»äºãä¾é ¼ããã', go: 'work' }, 42 { t: 'AJECã«å ¥ä¼ããã', go: 'join' }, 43 { t: 'ç·¨éè¬åº§ã«åå ããã', go: 'kouza' }, 44 { t: 'ç·¨éãããã¯ã·ã§ã³ãã§ã¢ã«ã¤ãã¦', go: 'fair' }, 45 { t: 'å¥ç´æ¸ã®ããåã»æéåºæºè¡¨', go: 'contract' }, 46 { t: 'æ±äººæ å ±ãè¦ãã', go: 'jobs' }, 47 { t: 'AJECã«ã¤ãã¦ç¥ããã', go: 'about' }, 48 { t: 'ä¼å¡ç¤¾ã®æ¹ï¼ãã°ã¤ã³ï¼', go: 'member' }, 49 { t: 'äºåå±ã«åãåããã', go: 'contact' } 50 ], 51 noBack: true 52 }, 53 work: { 54 text: [ 55 'ç·¨éå¶ä½ã®ãä»äºã®ãä¾é ¼ããæ¤è¨ããã ãããããã¨ããããã¾ããAJECã«ã¯ãä¼ç»ã»ç·¨éã»å¶ä½ããæ ¸ã¨ãã¦äºæ¥ãå¶ãä¼ç¤¾ãéã¾ã£ã¦ãã¾ãã', 56 'åéããä¼å¡ç¤¾ãæ¢ãã¦ç´æ¥ãç¸è«ããã ããã»ããäºåå±ã«ãä¾é ¼å 容ããéãããã ããã¨ãã§ãã¾ãã' 57 ], 58 choices: [ 59 { t: 'åéããä¼å¡ç¤¾ãæ¢ã', go: 'workGenre' }, 60 LEAD('work', 'ãã£ããã§ä¾é ¼å 容ãéã'), 61 { t: 'ä»äºã®ä¾é ¼ãã©ã¼ã ã¸', url: 'formWork', goal: 'form' } 62 ] 63 }, 64 workGenre: { 65 text: [ 66 'ãä¾é ¼ããèãã®åéããé¸ã³ãã ããã', 67 'ãã®åéãåãæ±ãæ£ä¼å¡ã«çµãè¾¼ãã ä¸è¦§ããæ°ããã¿ãã§éãã¾ãã' 68 ], 69 choices: [ 70 MEMBERS('å¦ç¿ææï¼å¹¼å ã大å¦ã»ç¤¾ä¼äººï¼', 'yoji-kyozai,shochuko-kyozai,daigaku-kyozai'),
71 MEMBERS('ä¸è¬æ¸ç±ã»å®ç¨æ¸ã»å°éæ¸ã»ã ãã¯', 'ippan-shoseki,jitsuyo-senmon,mook'), 72 MEMBERS('å ç«¥æ¸ã»çµµæ¬ã»äºå ¸ã»å³é', 'jido-ehon,jiten-zukan'), 73 MEMBERS('ã³ããã¯', 'comic'), 74 MEMBERS('æ°èã»éèª', 'shinbun-magazine'), 75 MEMBERS('社å å ±ã»PRèªã»ç¤¾å²ã»ä¼ç¤¾ã妿 ¡ã®æ¡å ', 'shanaiho-pr,shashi-kinen,kaisha-gakko-annai'), 76 MEMBERS('åºåã»PRã»ã¤ãã³ã', 'pr-kokoku,event-seminar'), 77 MEMBERS('ãã¸ã¿ã«ã³ã³ãã³ãã»æ®å½±ã»åç»', 'digital-content,photo-video'), 78 MEMBERS('翻訳ã»ã³ã³ãµã«ãã£ã³ã°', 'translation,consulting'), 79 MEMBERS('åéãåããæ£ä¼å¡ã®ä¸è¦§ãè¦ã', '') 80 ] 81 }, 82 join: { 83 text: [ 84 'AJECã¸ã®å ¥ä¼ããæ¤è¨ããã ãããããã¨ããããã¾ããä¼å¡ã«ã¯ãæ£ä¼å¡ããæºä¼å¡ããè³å©ä¼å¡ãã®åºåãããã¾ãã', 85 'æ£ä¼å¡ã¯ãå種æ å ±åªä½ã®ä¼ç»å¶ä½ãä¸»ãªæ¥åã¨ãã¦è¡ãæ³äººã対象ã§ããåä¼ã®ä¸»æ¨ã«è³åãããæ³äººå®ç¸¾2年以ä¸ãã社å¡ç·æ°5人以ä¸ããçäºä¼ã®ç¹å¥ãªæ¿èªãã®ããããä¸ã¤ä»¥ä¸ãæºããã°å ¥ä¼ã§ãã¾ãã', 86 'æç¶ãã¯ãå ¥ä¼ç³è¾¼æ¸ã¨ä¼ç¤¾çµæ´æ¸ããæåºããã ããçäºä¼ã®æ¿èªãåãã¦å ¥ä¼æ±ºå®ã¨ãªãã¾ãã' 87 ], 88 choices: [ 89 { t: 'ä¼è²»ãç¥ããã', go: 'joinFee' }, 90 { t: 'æºä¼å¡ã»è³å©ä¼å¡ã«ã¤ãã¦', go: 'joinOther' }, 91 { t: 'å ¥ä¼æ¡å ã®ãã¼ã¸ãè¦ã', url: 'admission', goal: 'detail' }, 92 { t: 'å ¥ä¼ç³è¾¼ãã©ã¼ã ã¸', url: 'formAdmission', goal: 'form' }, 93 LEAD('join', 'ãã£ããã§å ¥ä¼ã«ã¤ãã¦åãåããã') 94 ] 95 }, 96 joinFee: { 97 text: [ 98 'ä¼è²»ã¯æ¬¡ã®ã¨ããã§ãï¼å ¥ä¼æ¡å ã®ãã¼ã¸ã«æ²è¼ãã¦ããå 容ã§ãï¼ã', 99 'æ£ä¼å¡ï¼å ¥ä¼é3ä¸åãä¼è²»å¹´é¡9ä¸å\næºä¼å¡ï¼æ³äººä¼å¡ã¯å ¥ä¼é1ä¸åã»å¹´ä¼è²»3ä¸åãå人ä¼å¡ã¯å¹´é2ä¸å\nè³å©ä¼å¡ï¼æ³äººã»å人ã¨ãã«å ¥ä¼é5ä¸åã1å£5ä¸å' 100 ], 101 choices: [ 102 { t: 'å ¥ä¼æ¡å ã®ãã¼ã¸ãè¦ã', url: 'admission', goal: 'detail' }, 103 { t: 'å ¥ä¼ç³è¾¼ãã©ã¼ã ã¸', url: 'formAdmission', goal: 'form' }, 104 LEAD('join', 'ãã£ããã§å ¥ä¼ã«ã¤ãã¦åãåããã') 105 ] 106 }, 107 joinOther: { 108 text: [ 109 'æºä¼å¡ã¯ãåä¼ã®è¶£æ¨ã»ç®çã«è³åããé¢é£æ¥çã®æ³äººã¾ãã¯å人ããçäºä¼ã®æ¿èªãå¾ã¦å å ¥ã§ããåºåã§ãï¼è°æ±ºæ¨©ã¯ããã¾ããï¼ãçäºä¼ã«ç³ãåºã¦æ¿èªãåããã°ãæ£ä¼å¡ã«ç§»è¡ãããã¨ãã§ãã¾ãã', 110 'è³å©ä¼å¡ã¯ãåä¼ã®è¶£æ¨ã»ç®çã«è³åããæ³äººããæ¬ä¼ã®æ´»åã«åå ã§ããåºåã§ãï¼è°æ±ºæ¨©ã¯ããã¾ããï¼ãã©ã¡ããå ¥ä¼ç³è¾¼æ¸ï¼æ£ä¼å¡1ç¤¾ã®æ¨è¦ï¼ã¨ä¼ç¤¾çµæ´æ¸ããæåºããã ããçäºä¼ã®æ¿èªãåãã¦å ¥ä¼æ±ºå®ã¨ãªãã¾ãã' 111 ], 112 choices: [ 113 { t: 'ä¼è²»ãç¥ããã', go: 'joinFee' }, 114 { t: 'å ¥ä¼æ¡å ã®ãã¼ã¸ãè¦ã', url: 'admission', goal: 'detail' }, 115 LEAD('join', 'ãã£ããã§å ¥ä¼ã«ã¤ãã¦åãåããã') 116 ] 117 }, 118 /* è¬åº§ã¯ããããã¼ã¸ãéå¬ä¸ã®è¬åº§ãã®è¨å®ï¼ç®¡çç»é¢ã§æ´æ°ï¼ããæ¯åçµã¿ç«ã¦ã */ 119 kouza: function () { 120 var events = CFG.events || {}; 121 var upcoming = events.upcoming || []; 122 var archive = events.archive || []; 123 var choices = []; 124 upcoming.forEach(function (e) { 125 choices.push({ t: e.title || 'ããããéå¬äºå®ã®è¬åº§', url: e.url, goal: 'kouza' }); 126 }); 127 archive.forEach(function (e) { 128 var title = e.title || 'è¬åº§'; 129 choices.push({ t: title.indexOf('ã¢ã¼ã«ã¤ã') === -1 ? 'ãã¢ã¼ã«ã¤ãé ä¿¡ã' + title : title, url: e.url, goal: 'kouza' }); 130 }); 131 choices.push(LEAD('kouza', 'ãã£ããã§è¬åº§ã«ã¤ãã¦åãåããã')); 132 return { 133 text: [ 134 'AJECã§ã¯ã第ä¸ç·ã§æ´»èºããç·¨éè ãæ¥çã®æ¹ãè¬å¸«ã«ãæããã¦ãç·¨éè¬åº§ãéå¬ãã¦ãã¾ãã', 135 upcoming.length || archive.length 136 ? 'ç¾å¨ãæ¡å ãã¦ããè¬åº§ã¯æ¬¡ã®ã¨ããã§ãããç³ãè¾¼ã¿ã¯ Peatix ã®ãã¼ã¸ã§åãä»ãã¦ãã¾ãã' 137 : 'ç¾å¨ããç³ãè¾¼ã¿ãåãä»ãã¦ããè¬åº§ã¯ããã¾ãããè¬åº§ã®æ å ±ã¯ããããã¼ã¸ã®ãéå¬ä¸ã®è¬åº§ãã§ãæ¡å ãã¦ãã¾ãã' 138 ], 139 choices: choices 140 }; 141 }, 142 fair: { 143 text: [ 144 'ãç·¨éãããã¯ã·ã§ã³ãã§ã¢ãã¯ãç·¨éã®ä»äºãå¤é¨ã«å§è¨ãããã¨ãã¦ããåºç社ã»å°å·ä¼ç¤¾ã»ä¼æ¥ã®æ¹ã«ãç·¨éãããã¯ã·ã§ã³ããã£ã¨ç¥ã£ã¦ããã ãããã«éå¬ãã¦ããã¤ãã³ãã§ãã', 145 'AJECã®ä¼å¡ç¤¾ãä¸å¿ã«ç·¨éä½åãæ¥åå 容ãç´¹ä»ããã質åã«ç´æ¥ãçããã¦ãã¾ããåºçã»ç·¨éã«é¢å¿ã®ããå¦çã®æ¹ããç·¨éã®ä»äºã«èå³ã®ããæ¹ã«ããç·¨éãããã¯ã·ã§ã³ã®æ´»åãç¥ã£ã¦ããã ãå ´ã§ãã' 146 ], 147 choices: [ 148 { t: 'ç´è¿ã®é嬿¡å ãè¦ã', url: 'fair', goal: 'detail' }, 149 LEAD('kouza', 'ãã£ããã§ãã§ã¢ã«ã¤ãã¦åãåããã') 150 ] 151 }, 152 contract: { 153 text: [ 154 'AJECã§ã¯ãç·¨éå¶ä½ã®åå¼ã«å½¹ç«ã¤è³æãå ¬éãã¦ãã¾ãã', 155 'é¡§åå¼è·å£«ã®ç£ä¿®ã«ãããæ¥åå§è¨åºæ¬å¥ç´æ¸ãã®ããåï¼4種é¡ï¼ã¨ãç·¨éå¶ä½ã«ããããæéã®ç®å®ãã¾ã¨ãããç·¨éå¶ä½æ¥åæéåºæºè¡¨ãããã¦ã³ãã¼ãããã ãã¾ãããæ¥åå¥ç´ã«ã¤ãã¦ãã®ãã¼ã¸ã§ã¯ãæ¹æ£ä¸è«æ³ã«ãã¨ã¥ãåå¼æã®æ³¨æç¹ããç´¹ä»ãã¦ãã¾ãã' 156 ], 157 choices: [ 158 { t: 'å¥ç´æ¸ã®ããåãè¦ã', url: 'template', goal: 'detail' }, 159 { t: 'æéåºæºè¡¨ãè¦ã', url: 'fee', goal: 'detail' }, 160 { t: 'æ¥åå¥ç´ã«ã¤ãã¦ï¼ä¸è«æ³ï¼', url: 'contract', goal: 'detail' } 161 ] 162 }, 163 jobs: { 164 text: [ 165 'AJECä¼å¡ç¤¾ã®æ±äººã»æ¡ç¨æ å ±ãæ²è¼ãã¦ãã¾ãã', 166 'åéã®è©³ããå 容ã¯ãå社ã®ãã¼ã¸ã§ã確èªãã ãããä¼å¡ç¤¾ã®ä¸è¦§ããå社ã®ãã¼ã¸ãã覧ããã ããã¨ãã§ãã¾ãã' 167 ], 168 choices: [ 169 { t: 'æ±äººæ å ±ãè¦ã', url: 'jobs', goal: 'detail' }, 170 MEMBERS('æ£ä¼å¡ã®ä¸è¦§ãè¦ã', '') 171 ] 172 }, 173 about: { 174 text: [ 175 'ä¸è¬ç¤¾å£æ³äºº æ¥æ¬ç·¨éå¶ä½åä¼ï¼AJECï¼ã¯ããä¼ç»ã»ç·¨éã»å¶ä½ããæ ¸ã¨ãã¦äºæ¥ãå¶ãä¼ç¤¾ãéã¾ãæ¥çå£ä½ã§ãã1983å¹´4æã«åµè¨ããã¾ããã', 176 'æ¥çå å¤ã®æ å ±äº¤æãä¼å¡ç¸äºéã®æ¥åææºã»äº¤æµã®ã»ããç·¨éè¬åº§ãç·¨éãããã¯ã·ã§ã³ãã§ã¢ã®éå¬ãçµå¶è ã®ããã®åå¼·ä¼ãªã©ãè¡ã£ã¦ãã¾ããä¼å¡ç¤¾ã®ç¹æ§ãã¨ã«ãä¸è¬æ¸é¨ä¼ã»CCé¨ä¼ã»ææé¨ä¼ã»å ¨å½é¨ä¼ã®4ã¤ã®é¨ä¼ãããã¾ãã' 177 ], 178 choices: [ 179 { t: 'AJECã¨ã¯ï¼å伿¦è¦ï¼', url: 'about', goal: 'detail' }, 180 { t: 'é¨ä¼ã®ç´¹ä»', url: 'introduction', goal: 'detail' }, 181 MEMBERS('æ£ä¼å¡ã®ä¸è¦§ãè¦ã', '') 182 ] 183 }, 184 member: { 185 text: [ 186 'ä¼å¡ç¤¾ã®æ¹ã¯ãä¼å¡ãã°ã¤ã³ãããã¤ãã¼ã¸ã«ãå ¥ããã ããã', 187 'ãã¹ã¯ã¼ãããå¿ãã®å ´åãããã¹ã¯ã¼ãè¨å®ã®ãªã³ã¯ã®æéãåããå ´åã¯ãäºåå±ã¾ã§ãé£çµ¡ãã ãããæãè¿ããæ°ãããã¹ã¯ã¼ãè¨å®ãªã³ã¯ããéããã¾ãã' 188 ], 189 choices: [ 190 { t: 'ä¼å¡ãã°ã¤ã³ã¸', url: 'memberLogin', goal: 'detail' }, 191 LEAD('other', 'ãã£ããã§äºåå±ã«é£çµ¡ãã') 192 ] 193 }, 194 contact: { 195 text: [ 196 'äºåå±ã¸ã®ãåãåããã¯ããã®ã¾ã¾ãã£ããã§ãéãããã ãã¾ãã', 197 'ãåãåãããã©ã¼ã ãããé»è©±ï¼03-6869-7780ï¼ã§ãæ¿ã£ã¦ããã¾ãã' 198 ], 199 choices: [ 200 LEAD(''), 201 { t: 'ãåãåãããã©ã¼ã ã¸', url: 'formContact', goal: 'form' } 202 ] 203 }, 204 shigoto: { 205 text: ['ãä»äºãã«ã¤ãã¦ãã©ã¡ãã®ãç¨ä»¶ã§ããããã'], 206 choices: [ 207 { t: 'ç·¨éå¶ä½ã®ä»äºãä¾é ¼ããã', go: 'work' }, 208 { t: 'æ±äººæ å ±ï¼åãå ´æï¼ãæ¢ãã¦ãã', go: 'jobs' } 209 ] 210 }, 211 notFound: { 212 text: [ 213 'ç³ã訳ããã¾ãããã質åã«åããæ¡å ãè¦ã¤ããã¾ããã§ããã', 214 'ã¡ãã¥ã¼ãããé¸ã³ããã ããããã®ã¾ã¾ãã£ããã§äºåå±ã«ãåãåãããã ããã' 215 ], 216 choices: [LEAD('')] 217 }, 218 opened: { 219 text: ['ãã¼ã¸ãæ°ããã¿ãã§éãã¾ãããã»ãã«ãç¨ä»¶ã¯ããã¾ããï¼'], 220 choices: [{ t: 'æåã®ã¡ãã¥ã¼ã«æ»ã', go: 'n0' }, { t: 'çµäºãã', act: 'end' }], 221 noBack: true 222 }, 223 more: { 224 text: ['ã»ãã«ãç¨ä»¶ã¯ããã¾ããï¼'], 225 choices: [{ t: 'æåã®ã¡ãã¥ã¼ã«æ»ã', go: 'n0' }, { t: 'çµäºãã', act: 'end' }], 226 noBack: true 227 } 228 }; 229 230 /* ãããã質åãããï¼å ¥åæ¬ã®ä¸ã«å¸¸æè¡¨ç¤ºï¼ */ 231 var CHIPS = [ 232 { t: 'ä»äºãä¾é ¼ããã', go: 'work' }, 233 { t: 'å ¥ä¼ã»ä¼è²»', go: 'join' }, 234 { t: 'ç·¨éè¬åº§', go: 'kouza' }, 235 { t: 'å¥ç´æ¸ã»æéåºæºè¡¨', go: 'contract' }, 236 { t: 'æ±äººæ å ±', go: 'jobs' }, 237 { t: 'åãåãã', go: 'contact' } 238 ]; 239 240 /* å ¥ååè£: å ¥åä¸ã«æå¤§3ä»¶ã表示ããé¸ã¶ã¨ãã®ãã¼ãã¸é²ãï¼ã²ãããªã
240®èªã¿ãç»é²ï¼ */ 241 var SUGGESTS = [ 242 { t: 'ç·¨éå¶ä½ã®ä»äºãä¾é ¼ããã', k: ['ä¾é ¼', 'ããã', 'çºæ³¨', 'ã¯ã£ã¡ã ã', '夿³¨', 'å§è¨', 'é ¼ã¿', 'é ¼ã', 'ãã®ã¿', 'å¶ä½ä¼ç¤¾', 'ç·¨éãããã¯ã·ã§ã³', 'ç·¨ãã'], go: 'work' }, 243 { t: 'åéããä¼å¡ç¤¾ãæ¢ã', k: ['ä¼å¡ç¤¾', 'ãããããã', 'æ¢ã', 'ããã', 'ææ', 'æ¸ç±', 'éèª', 'ã³ããã¯', '漫ç»', 'ãã³ã¬', 'çµµæ¬', 'å³é', '社å²', '社å å ±', '翻訳', 'åç»'], go: 'workGenre' }, 244 { t: 'AJECã«å ¥ä¼ããã', k: ['å ¥ä¼', 'ã«ã ããã', 'å å ¥', 'ä¼å¡ã«ãªã', 'è³æ ¼', 'æºä¼å¡', 'è³å©'], go: 'join' }, 245 { t: 'ä¼è²»ãç¥ããã', k: ['ä¼è²»', 'ããã²', 'å ¥ä¼é', 'å¹´ä¼è²»'], go: 'joinFee' }, 246 { t: 'ç·¨éè¬åº§ã«åå ããã', k: ['è¬åº§', 'ããã', 'ã»ããã¼', 'ç ä¿®', 'åå¼·ä¼', 'ç³ãè¾¼ã¿', 'ç³è¾¼', 'ããããã¿', 'peatix'], go: 'kouza' }, 247 { t: 'ç·¨éãããã¯ã·ã§ã³ãã§ã¢ã«ã¤ãã¦', k: ['ãã§ã¢', 'ãµãã', 'å±ç¤ºä¼', 'ã¤ãã³ã'], go: 'fair' }, 248 { t: 'å¥ç´æ¸ã®ããåã»æéåºæºè¡¨', k: ['å¥ç´', 'ãããã', 'ããå', 'ã²ãªå', 'éå½¢', 'ã²ãªãã', 'ä¸è«', 'æé', 'ããããã', 'å価', 'ç¸å ´', 'åºæºè¡¨'], go: 'contract' }, 249 { t: 'æ±äººæ å ±ãè¦ãã', k: ['æ±äºº', 'ãã ããã', 'æ¡ç¨', 'ãããã', 'å°±è·', '転è·', 'å¿å', 'æ°å', 'åã'], go: 'jobs' }, 250 { t: 'AJECã«ã¤ãã¦ç¥ããã', k: ['ajec', 'åä¼', 'ããããã', 'é¨ä¼', 'ã¶ãã', 'æ¦è¦'], go: 'about' }, 251 { t: 'ä¼å¡ãã°ã¤ã³ã»ãã¹ã¯ã¼ã', k: ['ãã°ã¤ã³', 'ãããã', 'ãã¹ã¯ã¼ã', 'ã±ããã¼ã©', 'ãã¤ãã¼ã¸'], go: 'member' }, 252 { t: 'äºåå±ã«åãåããã', k: ['åãåãã', 'ååã', 'ã¨ãããã', 'ç¸è«', 'ããã ã', 'é£çµ¡', 'é»è©±', 'äºåå±'], go: 'contact' } 253 ]; 254 255 /* èªç±å ¥åã®ãã¼ã¯ã¼ãåå²ï¼ä¸ããé ã«è©ä¾¡ãå«ã¾ãã¦ããã°ãã®ãã¼ãã¸ï¼ */ 256 var ROUTES = [ 257 [['ä¼è²»', 'å ¥ä¼é', 'å¹´ä¼è²»'], 'joinFee'], 258 [['å ¥ä¼', 'å å ¥', 'ä¼å¡ã«ãªã', 'æºä¼å¡', 'è³å©'], 'join'], 259 [['ãã°ã¤ã³', 'ãã¹ã¯ã¼ã', 'ãã¤ãã¼ã¸'], 'member'], 260 [['è¬åº§', 'ã»ããã¼', 'ç ä¿®', 'åå¼·ä¼'], 'kouza'], 261 [['ãã§ã¢', 'å±ç¤ºä¼'], 'fair'], 262 [['å¥ç´', 'ããå', 'ã²ãªå', 'éå½¢', 'ä¸è«', 'æé', 'å価', 'ç¸å ´', 'åºæºè¡¨'], 'contract'], 263 [['æ±äºº', 'æ¡ç¨', 'å°±è·', '転è·', 'å¿å', 'æ°å'], 'jobs'], 264 [['ä¾é ¼', 'çºæ³¨', '夿³¨', 'å§è¨', 'é ¼ã¿', 'é ¼ã', 'å¶ä½ä¼ç¤¾', 'ãããã¯ã·ã§ã³', 'ç·¨ãã'], 'work'], 265 [['ææ', 'æ¸ç±', 'éèª', 'ã³ããã¯', '漫ç»', 'ãã³ã¬', 'çµµæ¬', 'å³é', '社å²', '社å å ±', '翻訳', 'åç»', 'ä¼å¡ç¤¾'], 'workGenre'], 266 [['ä»äº'], 'shigoto'], 267 [['åãåãã', 'ååã', 'ç¸è«', 'é£çµ¡', 'é»è©±', 'äºåå±'], 'contact'], 268 [['ajec', 'åä¼', 'é¨ä¼', 'ã©ããª'], 'about'] 269 ]; 270 271 /* å ¨è§è±æ°ã»è¨å·ãåè§ã«ãããã */ 272 function nfkc(s) { 273 s = String(s || ''); 274 return s.normalize ? s.normalize('NFKC') : s; 275 } 276 /* ãã¼ã¯ã¼ãç §åç¨ï¼åè§ã«ãããã¦è±åã¯å°æåï¼ */ 277 function norm(s) { 278 return nfkc(s).toLowerCase(); 279 } 280 281 function routeInput(q) { 282 var nq = norm(q); 283 for (var i = 0; i < ROUTES.length; i++) { 284 for (var j = 0; j < ROUTES[i][0].length; j++) { 285 if (nq.indexOf(norm(ROUTES[i][0][j])) !== -1) { 286 return { to: ROUTES[i][1], matched: ROUTES[i][0][j] }; 287 } 288 } 289 } 290 return { to: 'notFound', matched: null }; 291 } 292 293 function matchSuggests(q) { 294 var nq = norm(q); 295 var hits = []; 296 if (!nq) { return hits; } 297 for (var i = 0; i < SUGGESTS.length && hits.length < 3; i++) { 298 var s = SUGGESTS[i]; 299 var hit = norm(s.t).indexOf(nq) !== -1; 300 for (var j = 0; !hit && j < s.k.length; j++) { 301 var k = norm(s.k[j]); 302 hit = k.indexOf(nq) !== -1 || nq.indexOf(k) !== -1; 303 } 304 if (hit) { hits.push(s); } 305 } 306 return hits; 307 } 308 309 /* åãåãããã©ã¼ã ã«ã¼ãã®é ç®ï¼éä¿¡å ã®æ¤è¨¼ã¯ inc/chatbot-lead.phpï¼ */ 310 var LEAD_FIELDS = [ 311 { key: 'company', label: 'ä¼ç¤¾ã»å£ä½å', ph: 'ä¾ï¼æ ªå¼ä¼ç¤¾ããï¼åäººã®æ¹ã¯ç©ºæ¬ï¼', optional: true, auto: 'organization' }, 312 { key: 'name', label: 'ãåå', ph: 'ä¾ï¼å±±ç° 太
312é', auto: 'name' }, 313 { key: 'kana', label: 'ãµãããª', ph: 'ä¾ï¼ãã¾ã ããã' }, 314 { key: 'email', label: 'ã¡ã¼ã«ã¢ãã¬ã¹', ph: 'ä¾ï¼[email protected]', type: 'email', auto: 'email' }, 315 { key: 'tel', label: 'é»è©±çªå·', ph: 'ä¾ï¼03-1234-5678', type: 'tel', optional: true, auto: 'tel' }, 316 { key: 'message', label: 'ãåãåããå 容', multiline: true } 317 ]; 318 var MESSAGE_PH = { 319 work: 'ä¾ï¼å°å¦çåãããªã«ã®ç·¨éãä¾é ¼ãããã§ããåéãå¸æã®ææãªã©', 320 join: 'ä¾ï¼æ£ä¼å¡ã¨ãã¦å ¥ä¼ãæ¤è¨ãã¦ãã¾ããæç¶ãã«ã¤ãã¦ä¼ºãããã§ã', 321 kouza: 'ä¾ï¼è¬åº§ã®åè¬æ¹æ³ã«ã¤ãã¦è³ªåãããã¾ã', 322 other: 'ãåãåããå 容ããè¨å ¥ãã ãã' 323 }; 324 325 var ICONS = { 326 chat: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>', 327 minus: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/></svg>', 328 close: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg>', 329 plane: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 2L11 13"/><path d="M22 2l-7 20-4-9-9-4 20-7z"/></svg>', 330 // æ°ããã¿ãã§éããªã³ã¯ã®å°ï¼æåã®ãâãã¯ç°å¢ã«ãã£ã¦çµµæåã§è¡¨ç¤ºããããã SVGï¼ 331 ext: '<svg class="acb-ext" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7"/><path d="M8 7h9v9"/></svg>', 332 send: '<svg class="acb-cvicon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 2L11 13"/><path d="M22 2l-7 20-4-9-9-4 20-7z"/></svg>', 333 form: '<svg class="acb-cvicon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="13" y2="17"/></svg>' 334 }; 335 336 /* ===== ã»ãã·ã§ã³ã»ãã° ===== */ 337 function currentPath() { 338 try { return decodeURI(location.pathname); } catch (e) { return location.pathname; } 339 } 340 341 var session = null; 342 try { 343 session = sessionStorage.getItem('ajecChatSession'); 344 if (!session) { 345 session = 'cs-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8); 346 sessionStorage.setItem('ajecChatSession', session); 347 } 348 } catch (e) { session = 'cs-mem-' + Date.now().toString(36); } 349 350 var logQueue = []; 351 var logTimer = null; 352 function log(type, data) { 353 if (!CFG.restLog) { return; } 354 logQueue.push({ t: type, d: data || {} }); 355 clearTimeout(logTimer); 356 logTimer = setTimeout(flushLog, 2000); 357 } 358 function flushLog() { 359 clearTimeout(logTimer); 360 while (logQueue.length && CFG.restLog) { 361 var payload = JSON.stringify({ session: session, page: currentPath(), events: logQueue.splice(0, 20) }); 362 try { 363 navigator.sendBeacon(CFG.restLog, new Blob([payload], { type: 'application/json' })); 364 } catch (e) { /* noop */ } 365 } 366 } 367 window.addEventListener('pagehide', flushLog); 368 369 /* ===== ä¼è©±ã®ä¿åï¼ãã¼ã¸ãç§»ã£ã¦ãç¶ããã¿ããéããã¨æ¶ããï¼ ===== */ 370 var STORE_KEY = 'ajecChatState'; 371 var state = { msgs: [], choices: null, started: false, lead: null, nav: [] }; 372 function persist() { 373 try { 374 sessionStorage.setItem(STORE_KEY, JSON.stringify({ 375 v: SCENARIO_VER, 376 msgs: state.msgs.slice(-60), 377 choices: state.choices, 378 started: state.started, 379 lead: state.lead, 380 nav: state.nav 381 })); 382 } catch (e) { /* noop */ } 383 } 384 function restoreState() { 385 try { 386 var d = JSON.parse(sessionStorage.getItem(STORE_KEY) || 'null'); 387 if (!d) { return; } 388 if (d.v !== SCENARIO_VER || !Array.isArray(d.msgs)) { sessionStorage.removeItem(STORE_KEY); return; } 389 state.msgs = d.msgs; 390 state.choices = Array.isArray(d.choices) ? d.choices : null; 391 state.started = !!d.started; 392 state.lead = d.lead && d.lead.step ? d.lead : null; 393 state.nav = Array.isArray(d.nav) ? d.nav : []; 394 } catch (e) { /* noop */ } 395 } 396 function clearState() { 397 state = { msgs: [], choices: null, started: false, lead: null, nav: [] }; 398 try { sessionStorage.removeItem(STORE_KEY); } catch (e) { /* noop */ } 399 } 400 401 /* ===== DOM ===== */ 402 function el(tag, cls, text) { 403 var e = document.createElement(tag); 404 if (cls) { e.className = cls; } 405 if (text) { e.textContent = text; } 406 return e; 407 } 408 function fmtTime(ts) { 409 var d = ts ? new Date(ts) : new Date(); 410 var h = d.getHours(); 411 var m = d.getMinutes(); 412 return (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m); 413 } 414 415 // ãã¦ã¹çã®ç²¾å¯ãã¤ã³ã¿ç°å¢ãï¼ã¿ãã端æ«ã§ã¯éããç¬éã«ãã¼ãã¼ããåºããªãï¼ 416 var FINE_POINTER = !!(window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches); 417
418 /* è¦ãç®ã¯ãç®æ¬¡ã®ããæ¡å 帳ãï¼chatbot.css ã®åé åç §ï¼ãPC ã®å ¥å£ã¯ç»é¢å³ç«¯ã®ãããåã¿ã */ 419 var root = el('div', 'acb'); 420 root.innerHTML = 421 '<button type="button" class="acb-launcher" aria-haspopup="dialog" aria-expanded="false" aria-label="ãæ¡å ãã£ãããéã">' + 422 '<span class="acb-launcher__icon">' + ICONS.chat + '</span>' + 423 '<span class="acb-launcher__label" aria-hidden="true">ãæ¡å ãã£ãã</span>' + 424 '</button>' + 425 '<section class="acb-panel" role="dialog" aria-label="AJEC ãæ¡å ãã£ãã" tabindex="-1" hidden>' + 426 '<div class="acb-sheet">' + 427 '<header class="acb-head">' + 428 '<div class="acb-head__top">' + 429 '<span class="acb-head__kicker">GUIDE</span>' + 430 '<span class="acb-head__rule" aria-hidden="true"></span>' + 431 '<button type="button" class="acb-head__btn acb-head__min" aria-label="ãã£ãããæå°åï¼ä¼è©±ã¯ä¿æããã¾ãï¼">' + ICONS.minus + '</button>' + 432 '<button type="button" class="acb-head__btn acb-head__close" aria-label="ãã£ãããçµäº">' + ICONS.close + '</button>' + 433 '</div>' + 434 '<p class="acb-head__title">ãæ¡å ãã£ãã</p>' + 435 '<p class="acb-head__sub">æ¥æ¬ç·¨éå¶ä½åä¼ï½èªåå¿çã§ãæ¡å ãã¾ã</p>' + 436 '</header>' + 437 '<div class="acb-body" role="log" aria-live="polite"></div>' + 438 '<div class="acb-confirm" hidden>' + 439 '<div class="acb-confirm__box">' + 440 '<div class="acb-confirm__ask">' + 441 '<p>ãã£ãããçµäºãã¾ããï¼</p>' + 442 '<p class="acb-confirm__note">çµäºããã¨ä¼è©±ã®å å®¹ã¯æ¶å»ããã¾ãã</p>' + 443 '<div class="acb-confirm__btns">' + 444 '<button type="button" class="acb-confirm__yes">çµäºãã</button>' + 445 '<button type="button" class="acb-confirm__no">ãã£ã³ã»ã«</button>' + 446 '</div>' + 447 '</div>' + 448 '<div class="acb-confirm__fb" hidden>' + 449 '<p>ãæ¡å ã¯å½¹ã«ç«ã¡ã¾ãããï¼</p>' + 450 '<div class="acb-confirm__btns">' + 451 '<button type="button" class="acb-fb__good">å½¹ã«ç«ã£ã</button>' + 452 '<button type="button" class="acb-fb__bad">ãã¾ãã¡</button>' + 453 '</div>' + 454 '<button type="button" class="acb-fb__skip">åçããã«çµäºãã</button>' + 455 '</div>' + 456 '</div>' + 457 '</div>' + 458 '<footer class="acb-foot">' + 459 '<div class="acb-suggest" role="group" aria-label="å ¥ååè£" hidden></div>' + 460 '<div class="acb-index-row">' + 461 '<span class="acb-foot__kicker" aria-hidden="true">INDEX</span>' + 462 '<div class="acb-chips" role="group" aria-label="ãããã質å"></div>' + 463 '</div>' + 464 '<form class="acb-form">' + 465 '<input type="text" class="acb-input" maxlength="100" placeholder="ç¥ããããã¨ãå ¥åï¼ä¾ï¼å ¥ä¼ã®ä¼è²»ï¼" aria-label="ç¥ããããã¨ãå ¥å" enterkeyhint="send">' + 466 '<button type="submit" class="acb-send" aria-label="éä¿¡">' + ICONS.plane + '</button>' + 467 '</form>' + 468 '</footer>' + 469 '</div>' + 470 '</section>'; 471 472 var launcher = root.querySelector('.acb-launcher'); 473 var panel = root.querySelector('.acb-panel'); 474 var body = root.querySelector('.acb-body'); 475 var confirmBox = root.querySelector('.acb-confirm'); 476 var suggestBox = root.querySelector('.acb-suggest'); 477 var chipsBox = root.querySelector('.acb-chips'); 478 var form = root.querySelector('.acb-form'); 479 var input = root.querySelector('.acb-input'); 480 481 var busy = false;
482 function setBusy(next) { 483 busy = next; 484 root.classList.toggle('acb--busy', next); 485 } 486 487 /* ===== ã¡ãã»ã¼ã¸æç»ï¼norecord=ä¿åããªãï¼å¾©å æç¨ï¼ ===== */ 488 function scrollBottom() { body.scrollTop = body.scrollHeight; } 489 490 function addTurn(side, text, opts) { 491 opts = opts || {}; 492 var prev = body.lastElementChild; 493 var wrap = el('div', 'acb-turn acb-turn--' + side); 494 if (side === 'bot') { 495 // æ¡å æã®ã¾ã¨ã¾ãã®å é ã«ã ããæ¡ãã®å°ã»å·®åºäººã»æå»ãä»ããï¼ç¶ãæ¡å æã¯æ¬æã ãï¼ 496 if (!(prev && prev.classList.contains('acb-turn--bot'))) { 497 var byline = el('div', 'acb-byline'); 498 byline.appendChild(el('span', 'acb-byline__seal', 'æ¡')); 499 byline.appendChild(el('span', 'acb-byline__name', 'AJEC ãæ¡å ')); 500 byline.appendChild(el('span', 'acb-byline__time', fmtTime(opts.ts))); 501 wrap.appendChild(byline); 502 } 503 wrap.appendChild(el('div', 'acb-msg acb-msg--bot', text)); 504 } else { 505 wrap.appendChild(el('div', 'acb-msg acb-msg--user', text)); 506 wrap.appendChild(el('div', 'acb-time', fmtTime(opts.ts))); 507 } 508 body.appendChild(wrap); 509 scrollBottom(); 510 if (!opts.norecord) { 511 state.msgs.push({ k: side, v: text, ts: Date.now() }); 512 persist(); 513 } 514 } 515 function addBot(text, opts) { addTurn('bot', text, opts); } 516 function addUser(text, opts) { addTurn('user', text, opts); } 517 518 function resolveUrl(c) { 519 var base = Object.prototype.hasOwnProperty.call(URLS, c.url) ? URLS[c.url] : (/^https?:\/\//.test(c.url) ? c.url : ''); 520 if (!base) { return ''; } 521 if (c.tag) { base += (base.indexOf('?') === -1 ? '?' : '&') + 'tag=' + c.tag; } 522 return base; 523 } 524 525 function clearChoices() { 526 body.querySelectorAll('.acb-choices:not(.acb-lead-ui)').forEach(function (box) { 527 box.querySelectorAll('button').forEach(function (b) { b.disabled = true; }); 528 box.classList.add('acb-choices--done'); 529 }); 530 state.choices = null; 531 } 532 533 /* ç®æ¬¡ã®1è¡ï¼çªå·ã»è¦åºãã»ãªã¼ãã¼ç½«ã»ç¢å°ï¼ */ 534 function tocRow(label, no, isLink) { 535 var b = el('button', 'acb-toc__row' + (isLink ? ' acb-toc__row--link' : '')); 536 b.type = 'button'; 537 b.appendChild(el('span', 'acb-toc__no', (no < 10 ? '0' : '') + no)); 538 b.appendChild(el('span', 'acb-toc__label', label)); 539 b.insertAdjacentHTML('beforeend', '<span class="acb-toc__leader" aria-hidden="true"></span><span class="acb-toc__mark" aria-hidden="true">' + (isLink ? ICONS.ext : 'âº') + '</span>'); 540 return b; 541 } 542 543 /* æ»ãã»çµäºãªã©ã®å°ããªããã¹ããªã³ã¯ */ 544 function navLink(label, kind) { 545 var b = el('button', 'acb-navlink acb-navlink--' + kind, label); 546 b.type = 'button'; 547 return b; 548 } 549 550 /* 551 * 鏿è¢ã®æç»ã種é¡ãã¨ã«ä¸¦ã¹åãã: 552 * ç®æ¬¡ï¼çªå·ä»ãã®è¡ï¼ï¼ã¤ã³ããã¯ã¹ï¼ä¼å¡ç¤¾ã®åéï¼è²ä»ãã¿ãï¼ï¼ã¢ã¯ã·ã§ã³ï¼åãåããã»ãã©ã¼ã ï¼ï¼ããï¼æ»ãã»çµäºï¼ 553 */ 554 function renderChoices(choices, opts) { 555 opts = opts || {}; 556 // æ¡å å URL ãç¡ãç°å¢ï¼ä¾: ãã§ã¢ã®éçãã¼ã¸ãç½®ããã¦ããªãï¼ã§ã¯ãã®é¸æè¢ãåºããªã 557 var list = (choices || []).filter(function (c) { return !c.url || resolveUrl(c); }); 558 if (!list.length) { return; } 559 560 var box = el('div', 'acb-choices'); 561 var toc = el('div', 'acb-toc'); 562 var index = el('div', 'acb-index'); 563 var actions = el('div', 'acb-actions'); 564 var nav = el('div', 'acb-nav'); 565 var no = 0; 566 var tags = 0; 567 568 list.forEach(function (c) { 569 var b; 570 if (c.nav || c.act === 'end') { 571 b = navLink(c.t, c.act === 'navback' ? 'back' : (c.act === 'end' ? 'end' : 'top')); 572 nav.appendChild(b); 573 } else if (c.act === 'lead') { 574 // ãã£ããã§åãåããï¼å¡ãï¼ã¯ãã©ã¼ã ã¸ã®ãªã³ã¯ï¼æ ç·ï¼ããåã«ç½®ã 575 b = el('button', 'acb-action acb-action--primary', c.t); 576 b.insertAdjacentHTML('afterbegin', ICONS.send); 577 actions.insertBefore(b, actions.querySelector('.acb-action--link')); 578 } else if (c.goal === 'form') { 579 b = el('button', 'acb-action acb-action--link', c.t); 580 b.insertAdjacentHTML('afterbegin', ICONS.form); 581 b.insertAdjacentHTML('beforeend', ICONS.ext); 582 actions.appendChild(b); 583 } else if (c.goal === 'members' && c.url === 'members') { 584 b = el('button', 'acb-index__tag acb-index__tag--c' + (tags++ % 4), c.t); 585 index.appendChild(b); 586 } else { 587 b = tocRow(c.t, ++no, !!c.url); 588 toc.appendChild(b); 589 } 590 b.type = 'button'; 591 if (c.url) { b.setAttribute('aria-label', c.t + 'ï¼æ°ããã¿ãã§éãã¾ãï¼'); } 592 b.addEventListener('click', function () { 593 if (busy) { return; } 594 if (c.act !== 'end') { b.classList.add('is-picked'); }
594 // é¸ãã é ç®ã«èµ¤ç·ï¼æ ¡æ£ã®å°ï¼ 595 onChoice(c); 596 }); 597 }); 598 599 [toc, index, actions, nav].forEach(function (group) { 600 if (group.children.length) { box.appendChild(group); } 601 }); 602 body.appendChild(box); 603 scrollBottom(); 604 state.choices = list; 605 if (!opts.norecord) { persist(); } 606 } 607 608 /* ===== ãã¼ãé²è¡ ===== */ 609 var renderSeq = 0; // 表示éä¸ã«å¥ã®æä½ããã£ãããå¤ã表示ã®ç¶ããåºããªã 610 611 function showNode(id, instant) { 612 var node = typeof NODES[id] === 'function' ? NODES[id]() : NODES[id]; 613 if (!node) { return; } 614 // ãã²ã¨ã¤åã«æ»ããç¨ã®å±¥æ´ãn0 ã§ãªã»ãããæ»ãã¨ãã®å表示ã¯ç©ã¾ãªã 615 if (id === 'n0') { state.nav = ['n0']; } 616 else if (state.nav[state.nav.length - 1] !== id) { 617 state.nav.push(id); 618 if (state.nav.length > 20) { state.nav = state.nav.slice(-20); } 619 } 620 621 clearChoices(); 622 var seq = ++renderSeq; 623 var first = !body.querySelector('.acb-turn--bot'); 624 var typing = el('div', 'acb-typing'); 625 typing.setAttribute('aria-label', 'å ¥åä¸'); 626 typing.innerHTML = '<i>ã»</i><i>ã»</i><i>ã»</i>'; 627 body.appendChild(typing); 628 scrollBottom(); 629 630 setTimeout(function () { 631 typing.remove(); 632 if (seq !== renderSeq) { return; } 633 (function next(i) { 634 if (seq !== renderSeq) { return; } 635 if (i < node.text.length) { 636 addBot(node.text[i]); 637 setTimeout(function () { next(i + 1); }, instant ? 0 : 350); 638 return; 639 } 640 var choices = node.choices.slice(); 641 if (!node.noBack) { 642 var prev = state.nav.length >= 2 ? state.nav[state.nav.length - 2] : null; 643 if (prev && prev !== 'n0') { choices.push({ t: 'ã²ã¨ã¤åã«æ»ã', act: 'navback', nav: true }); } 644 choices.push({ t: 'æåã®ã¡ãã¥ã¼ã«æ»ã', go: 'n0', nav: true }); 645 } 646 renderChoices(choices); 647 // æåã®æ¨æ¶ã¯é ããèªããããå é ã表示 648 if (first) { body.scrollTop = 0; } 649 })(0); 650 }, instant ? 0 : 400); 651 } 652 653 function onChoice(c) { 654 if (busy) { return; } 655 if (c.act === 'end') { showConfirm(); return; } 656 addUser(c.t); 657 if (c.act === 'lead') { 658 log('choice', { label: c.t }); 659 startLead(c.preset); 660 return; 661 } 662 if (c.act === 'navback') { 663 state.nav.pop(); 664 var prevId = state.nav[state.nav.length - 1] || 'n0'; 665 log('choice', { label: c.t, to: prevId }); 666 showNode(prevId); 667 return; 668 } 669 if (c.url) { 670 var dest = resolveUrl(c); 671 // ã¯ãªãã¯ã®åæå¦çã§éãï¼ãããã¢ãããããã¯ãããªã 672 window.open(dest, '_blank', 'noopener'); 673 log('goal', { goal: c.goal || 'detail', label: c.t, url: dest.replace(location.origin, '') }); 674 showNode('opened'); 675 return; 676 } 677 log('choice', { label: c.t, to: c.go }); 678 showNode(c.go); 679 } 680 681 /* ===== ãã£ããå ã®åãåããï¼ç¨®é¡ãé¸ã¶âãã©ã¼ã ã«ã¼ãâéä¿¡ï¼ ===== */ 682 function leadActive() { return !!(state.lead && state.lead.step); } 683 function setLeadMode(on) { root.classList.toggle('acb--lead', on); } 684 function removeLeadUI() { body.querySelectorAll('.acb-lead-ui').forEach(function (n) { n.remove(); }); } 685 686 function startLead(preset) { 687 clearChoices(); 688 var hasPreset = Object.prototype.hasOwnProperty.call(LEAD_TYPES, preset); 689 state.lead = { step: hasPreset ? 'form' : 'type', type: hasPreset ? preset : '', data: {} }; 690 persist(); 691 setLeadMode(true); 692 log('lead', { ev: 'start', type: state.lead.type }); 693 addBot('æ¿ç¥ãã¾ããããã®ã¾ã¾ãã£ããã§ãäºåå±ã¸ãåãåããããéãããã ãã¾ãã'); 694 askLeadStep(state.lead.step); 695 } 696 697 function askLeadStep(step) { 698 state.lead.step = step; 699 persist(); 700 if (step === 'type') { 701 addBot('ãåãåããã®ç¨®é¡ããé¸ã³ãã ããã'); 702 renderLeadTypes(); 703 } else { 704 addBot('ä¸ã®ãåãåãã票ã«ãå ¥åã®ãããããã®å 容ã§éä¿¡ããããæ¼ãã¦ãã ããã'); 705 renderLeadForm(); 706 } 707 } 708 709 function cancelLead() { 710 removeLeadUI(); 711 state.lead = null; 712 persist(); 713 setLeadMode(false); 714 log('lead', { ev: 'cancel' }); 715 addBot('å ¥åã䏿¢ãã¾ãããå¼ãç¶ãã¡ãã¥ã¼ãããé¸ã³ããã ãããç¥ããããã¨ãå ¥åãã¦ãã ããã'); 716 showNode('n0', true); 717 } 718 719 /* ãå ¥åããããããªã³ã¯ï¼ããã®è¡ã«å ¥ãã¦è¿ãï¼ */ 720 function leadCancelNav() { 721 var nav = el('div', 'acb-nav'); 722 var b = navLink('å ¥åãããã', 'back'); 723 b.addEventListener('click', function () { if (!busy) { cancelLead(); } }); 724 nav.appendChild(b); 725 return nav; 726 } 727 728 function renderLeadTypes() { 729 var box = el('div', 'acb-choices acb-lead-ui'); 730 var toc = el('div', 'acb-toc');
731 Object.keys(LEAD_TYPES).forEach(function (key, i) { 732 var b = tocRow(LEAD_TYPES[key], i + 1, false); 733 b.addEventListener('click', function () { 734 state.lead.type = key; 735 removeLeadUI(); 736 addUser(LEAD_TYPES[key]); 737 askLeadStep('form'); 738 }); 739 toc.appendChild(b); 740 }); 741 box.appendChild(toc); 742 box.appendChild(leadCancelNav()); 743 body.appendChild(box); 744 scrollBottom(); 745 } 746 747 function renderLeadForm() { 748 var lead = state.lead; 749 if (!Object.prototype.hasOwnProperty.call(LEAD_TYPES, lead.type)) { lead.type = 'other'; } 750 var card = el('div', 'acb-lead-form acb-lead-ui'); 751 752 var head = el('div', 'acb-slip__head'); 753 head.appendChild(el('span', 'acb-slip__kicker', 'FORM')); 754 head.appendChild(el('span', 'acb-slip__title', 'ãåãåãã票')); 755 head.appendChild(el('span', 'acb-slip__to', 'å®å ï¼AJEC äºåå±')); 756 card.appendChild(head); 757 758 var row = el('div', 'acb-lf-row'); 759 var label = el('label', 'acb-lf-label', 'ãåãåããã®ç¨®é¡'); 760 label.htmlFor = 'acb-f-type'; 761 var select = el('select', 'acb-lf-input'); 762 select.id = 'acb-f-type'; 763 Object.keys(LEAD_TYPES).forEach(function (key) { 764 var o = el('option', '', LEAD_TYPES[key]); 765 o.value = key; 766 o.selected = key === lead.type; 767 select.appendChild(o); 768 }); 769 row.appendChild(label); 770 row.appendChild(select); 771 card.appendChild(row); 772 773 var inputs = {}; 774 LEAD_FIELDS.forEach(function (f) { 775 var r = el('div', 'acb-lf-row'); 776 var lab = el('label', 'acb-lf-label', f.label); 777 lab.htmlFor = 'acb-f-' + f.key; 778 lab.appendChild(el('span', f.optional ? 'acb-lf-opt' : 'acb-lf-req', f.optional ? 'ä»»æ' : 'å¿ é ')); 779 var inp = el(f.multiline ? 'textarea' : 'input', 'acb-lf-input'); 780 if (!f.multiline) { inp.type = f.type || 'text'; } 781 inp.id = 'acb-f-' + f.key; 782 inp.placeholder = f.key === 'message' ? (MESSAGE_PH[lead.type] || MESSAGE_PH.other) : f.ph; 783 if (f.auto) { inp.autocomplete = f.auto; } 784 inp.maxLength = f.multiline ? 2000 : (f.key === 'tel' ? 20 : 100); 785 inp.value = lead.data[f.key] || ''; 786 inp.addEventListener('input', function () { 787 lead.data[f.key] = inp.value; 788 persist(); 789 }); 790 inputs[f.key] = inp; 791 r.appendChild(lab); 792 r.appendChild(inp); 793 card.appendChild(r); 794 }); 795 select.addEventListener('change', function () { 796 lead.type = select.value; 797 inputs.message.placeholder = MESSAGE_PH[lead.type] || MESSAGE_PH.other; 798 persist(); 799 }); 800 801 // ããã¼ãããï¼äººã«ã¯è¦ããªãæ¬ãããããåããããµã¼ãã¼å´ã§éããªãï¼ 802 var hp = el('div', 'acb-hp'); 803 hp.setAttribute('aria-hidden', 'true'); 804 hp.innerHTML = '<label>ãã®æ¬ã¯ç©ºæ¬ã®ã¾ã¾éä¿¡ãã¦ãã ãã<input type="text" tabindex="-1" autocomplete="off"></label>'; 805 card.appendChild(hp); 806 807 card.appendChild(el('p', 'acb-lf-note', 'éä¿¡ããã¨ããå ¥åã®ã¡ã¼ã«ã¢ãã¬ã¹ã«åä»ç¢ºèªã®ã¡ã¼ã«ããéããã¾ãã')); 808 809 var err = el('div', 'acb-lf-error'); 810 err.setAttribute('role', 'alert'); 811 err.hidden = true; 812 card.appendChild(err); 813 814 var send = el('button', 'acb-action acb-action--primary acb-lf-send', 'ãã®å 容ã§éä¿¡ãã'); 815 send.type = 'button'; 816 send.insertAdjacentHTML('afterbegin', ICONS.send); 817 send.addEventListener('click', function () { 818 var message = validateLead(lead.data, inputs); 819 if (message) { 820 showLeadError(err, message); 821 return; 822 } 823 err.hidden = true; 824 submitLead(send, err, hp.querySelector('input').value); 825 }); 826 card.appendChild(send); 827 card.appendChild(leadCancelNav()); 828 body.appendChild(card); 829 scrollBottom(); 830 } 831 832 /* ã«ã¿ã«ãâã²ãããªï¼ããµãããªãæ¬ã®è¡¨è¨ãããããããï¼ */ 833 function toHiragana(str) { 834 return str.replace(/[ã¡-ã¶]/g, function (ch) { return String.fromCharCode(ch.charCo
834deAt(0) - 0x60); }); 835 } 836 837 function validateLead(d, inputs) { 838 ['company', 'name', 'kana', 'email', 'tel', 'message'].forEach(function (k) { 839 d[k] = String(d[k] || '').trim(); 840 }); 841 d.kana = toHiragana(d.kana); 842 d.email = nfkc(d.email).replace(/\s+/g, ''); 843 d.tel = nfkc(d.tel).replace(/[ã¼âââââ]/g, '-'); 844 ['kana', 'email', 'tel'].forEach(function (k) { inputs[k].value = d[k]; }); 845 persist(); 846 847 if (!d.name || !d.kana || !d.email || !d.message) { 848 return 'å¿ é é ç®ãå ¥åããã¦ãã¾ããã'; 849 } 850 if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(d.email)) { 851 return 'ã¡ã¼ã«ã¢ãã¬ã¹ã®å½¢å¼ãæ£ãããªãããã§ãã'; 852 } 853 var digits = d.tel.replace(/[^0-9]/g, ''); 854 if (d.tel && (/[^0-9+\-() ]/.test(d.tel) || digits.length < 10 || digits.length > 13)) { 855 return 'é»è©±çªå·ã¯å¸å¤å±çªãããæ°åã¨ãã¤ãã³ã§ãå ¥åãã ããã'; 856 } 857 return ''; 858 } 859 860 function showLeadError(box, message, withFormLink) { 861 box.textContent = message; 862 if (withFormLink && URLS.formContact) { 863 box.appendChild(document.createTextNode(' æéãããã¦å度ã試ãããã ããã')); 864 var a = el('a', '', 'ãåãåãããã©ã¼ã '); 865 a.href = URLS.formContact; 866 a.target = '_blank'; 867 a.rel = 'noopener'; 868 box.appendChild(a); 869 box.appendChild(document.createTextNode('ããå©ç¨ãã ããã')); 870 } 871 box.hidden = false; 872 scrollBottom(); 873 } 874 875 function submitLead(sendBtn, errBox, honeypot) { 876 if (busy || !CFG.restLead) { return; } 877 var type = state.lead.type; 878 var d = state.lead.data; 879 var sendHtml = sendBtn.innerHTML; // ã¢ã¤ã³ã³ä»ãã®å ã®è¡¨ç¤ºï¼å¤±ææã«æ»ãï¼ 880 setBusy(true); 881 sendBtn.disabled = true; 882 sendBtn.textContent = 'éä¿¡ãã¦ãã¾ãâ¦'; 883 884 var failed = function (message) { 885 setBusy(false); 886 log('lead', { ev: 'error' }); 887 sendBtn.disabled = false; 888 sendBtn.innerHTML = sendHtml; 889 showLeadError(errBox, message || 'éä¿¡ã«å¤±æãã¾ããã', true); 890 }; 891 892 fetch(CFG.restLead, { 893 method: 'POST', 894 headers: { 'Content-Type': 'application/json' }, 895 credentials: 'same-origin', 896 body: JSON.stringify({ 897 type: type, 898 company: d.company, 899 name: d.name, 900 kana: d.kana, 901 email: d.email, 902 tel: d.tel, 903 message: d.message, 904 website: honeypot, 905 page: currentPath(), 906 session: session 907 }) 908 }).then(function (res) { 909 return res.json().catch(function () { return {}; }); 910 }).then(function (data) { 911 if (!data || !data.ok) { 912 failed(data && data.message); 913 return; 914 } 915 // æåæã®å¾å¦çã§ä¾å¤ãèµ·ãã¦ããé信失æãã¨ã¯è¡¨ç¤ºããªãï¼then ã®ç¬¬2弿°ã¯éä¿¡ã»è§£æã®å¤±æã ããåããï¼ 916 setBusy(false); 917 removeLeadUI(); 918 state.lead = null; 919 setLeadMode(false); 920 addUser('å ¥åããå 容ãéä¿¡'); 921 log('goal', { goal: 'lead', type: type }); 922 flushLog(); 923 addBot('ãåãåãããéä¿¡ãã¾ããããããã¨ããããã¾ãã\nãå ¥åã®ã¡ã¼ã«ã¢ãã¬ã¹ã«åä»ç¢ºèªã®ã¡ã¼ã«ããéããã¾ãããäºåå±ããæãè¿ããé£çµ¡ãããã¾ãã'); 924 showNode('more'); 925 }, function () { 926 failed(); 927 }); 928 } 929 930 /* ===== å ¥åæ¬ã»ãããã»å ¥ååè£ ===== */ 931 // æ¥æ¬èª IME ã®å¤æç¢ºå® Enter ã§éä¿¡ããªãï¼Safari 㯠keyCode 229 ã§å¤å®ï¼ 932 var composing = false; 933 input.addEventListener('compositionstart', function () { composing = true; }); 934 input.addEventListener('compositionend', function () { composing = false; }); 935 input.addEventListener('keydown', function (ev) { 936 if (ev.key === 'Enter' && (composing || ev.isComposing || ev.keyCode === 229)) { ev.preventDefault(); } 937 if (ev.key === 'Escape') { hideSuggest(); } 938 }); 939 940 function hideSuggest() { 941 suggestBox.hidden = true; 942 suggestBox.innerHTML = ''; 943 } 944 input.addEventListener('input', function () { 945 var hits = matchSuggests(input.value.trim()); 946 if (!hits.length || leadActive()) { hideSuggest(); return; } 947 suggestBox.innerHTML = '';
948 hits.forEach(function (s) { 949 var b = el('button', 'acb-suggest__item', s.t); 950 b.type = 'button'; 951 b.addEventListener('click', function () { 952 if (busy) { return; } 953 input.value = ''; 954 hideSuggest(); 955 addUser(s.t); 956 log('chip', { label: s.t, suggest: 1 }); 957 showNode(s.go); 958 }); 959 suggestBox.appendChild(b); 960 }); 961 suggestBox.hidden = false; 962 }); 963 964 CHIPS.forEach(function (c, i) { 965 var b = el('button', 'acb-chip acb-chip--c' + (i % 4), c.t); // ã¤ã³ããã¯ã¹ã®è²ã¯é¨ä¼ã«ã©ã¼ãé ã«ä½¿ã 966 b.type = 'button'; 967 b.addEventListener('click', function () { 968 if (busy || leadActive()) { return; } 969 addUser(c.t); 970 log('chip', { label: c.t }); 971 showNode(c.go); 972 }); 973 chipsBox.appendChild(b); 974 }); 975 976 form.addEventListener('submit', function (ev) { 977 ev.preventDefault(); 978 if (busy || leadActive()) { return; } 979 var q = input.value.trim(); 980 if (!q) { return; } 981 input.value = ''; 982 hideSuggest(); 983 addUser(q); 984 var r = routeInput(q); 985 log('input', { q: q.slice(0, 200), matched: r.matched }); 986 showNode(r.to); 987 }); 988 989 /* ===== çµäºç¢ºèªã»éé ===== */ 990 function showConfirm() { 991 confirmBox.hidden = false; 992 confirmBox.querySelector('.acb-confirm__no').focus(); 993 } 994 function hideConfirm() { 995 confirmBox.hidden = true; 996 confirmBox.querySelector('.acb-confirm__ask').hidden = false; 997 confirmBox.querySelector('.acb-confirm__fb').hidden = true; 998 } 999 function endChat(feedback) { 1000 log('feedback', { v: feedback }); 1001 log('end', {}); 1002 flushLog(); 1003 hideConfirm(); 1004 ++renderSeq; 1005 body.innerHTML = ''; 1006 clearState(); 1007 setLeadMode(false); 1008 setOpen(false); 1009 } 1010 confirmBox.querySelector('.acb-confirm__no').addEventListener('click', hideConfirm); 1011 confirmBox.querySelector('.acb-confirm__yes').addEventListener('click', function () { 1012 confirmBox.querySelector('.acb-confirm__ask').hidden = true; 1013 confirmBox.querySelector('.acb-confirm__fb').hidden = false; 1014 confirmBox.querySelector('.acb-fb__good').focus(); 1015 }); 1016 confirmBox.querySelector('.acb-fb__good').addEventListener('click', function () { endChat('good'); }); 1017 confirmBox.querySelector('.acb-fb__bad').addEventListener('click', function () { endChat('bad'); }); 1018 confirmBox.querySelector('.acb-fb__skip').addEventListener('click', function () { endChat('skip'); }); 1019 1020 // éããã¿ã³: PC ã¯å³ä¸ã®ãã¿ã³ãSP ã¯è¿½å°¾ãã¼ã®ããã£ãããï¼footer.php ã® data-ajec-chat-openï¼ 1021 var openers = [launcher].concat(Array.prototype.slice.call(document.querySelectorAll('[data-ajec-chat-open]'))); 1022 var opened = false; 1023 var lastOpener = null; 1024 1025 function setOpen(next, from) { 1026 opened = next; 1027 panel.hidden = !opened; 1028 root.classList.toggle('acb--open', opened); 1029 document.documentElement.classList.toggle('acb-lock', opened); 1030 openers.forEach(function (b) { b.setAttribute('aria-expanded', opened ? 'true' : 'false'); }); 1031 if (opened) { 1032 lastOpener = from || null; 1033 // ååï¼ã¾ãã¯ä¿åãããä¼è©±ã空ï¼ãªãæ¨æ¶ããå§ããã2åç®ä»¥éã¯ç¶ããã 1034 if (!state.started || !body.querySelector('.acb-turn, .acb-lead-ui')) { 1035 state.started = true; 1036 persist(); 1037 showNode('n0'); 1038 } else { 1039 scrollBottom(); // éãã¦ããéã«å¾©å ããä¼è©±ã¯ãéããã¨ãã«ææ°ã®ä½ç½®ãè¦ãã 1040 } 1041 log('open', {}); 1042 // å ¥åæ¬ã¸ãã©ã¼ã«ã¹ããã®ã¯ãã¦ã¹ç°å¢ã ãï¼ã¿ãã端æ«ã§ãã¼ãã¼ããåæã«åºããªãï¼ã 1043 // åãåããã®å ¥åä¸ã¯å ¥åæ¬ãé ãã¦ããã®ã§ããã«èªä½ã¸ 1044 if (FINE_POINTER && !leadActive()) { input.focus(); } else { panel.focus({ preventScroll: true }); } 1045 } else { 1046 hideSuggest(); 1047 log('close', {}); 1048 flushLog(); 1049 if (lastOpener && document.body.contains(lastOpener)) { lastOpener.focu
1049s({ preventScroll: true }); } 1050 } 1051 } 1052 1053 openers.forEach(function (b) { 1054 b.addEventListener('click', function () { setOpen(!opened, b); }); 1055 }); 1056 root.querySelector('.acb-head__min').addEventListener('click', function () { setOpen(false); }); 1057 root.querySelector('.acb-head__close').addEventListener('click', function () { 1058 if (state.msgs.length) { showConfirm(); } else { setOpen(false); } 1059 }); 1060 document.addEventListener('keydown', function (ev) { 1061 if (ev.key !== 'Escape' || !opened) { return; } 1062 if (!confirmBox.hidden) { hideConfirm(); return; } 1063 setOpen(false); 1064 }); 1065 1066 /* ===== 復å ï¼ãã¼ã¸ãç§»ã£ã¦ãä¼è©±ãç¶ããï¼ ===== */ 1067 restoreState(); 1068 state.msgs.forEach(function (m) { 1069 if (m.k === 'bot' || m.k === 'user') { addTurn(m.k, m.v, { norecord: true, ts: m.ts }); } 1070 }); 1071 if (leadActive()) { 1072 setLeadMode(true); 1073 if (state.lead.step === 'type') { renderLeadTypes(); } else { renderLeadForm(); } 1074 } else if (state.choices) { 1075 renderChoices(state.choices, { norecord: true }); 1076 } 1077 1078 document.body.appendChild(root); 1079})();
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.