1//--------------------------------------------------------------------------- 2// KanaboWeb S JavaScript for Client v1.0.7 3// kanaboweb_s.1.0.7.js 4// 5// (C)Copyright WAC.com inc. All Rights Reserved. 6//--------------------------------------------------------------------------- 7// KanaboWeb.execCommand( command, params ) 8// command : 'on' / 'off' / 'toggle' 9// params : reserved 10// KanaboWeb.isTranslated() : true/false 11//--------------------------------------------------------------------------- 12// v1.0.0 2019/01/15 RTM 13// v1.0.1 2019/01/18 夿å¾ã«document.titleãæ»ã 14// v1.0.2 2019/02/06 onTranslatedã¤ãã³ãã®è¿½å ãã¹ã¯ãªããã®ãªãã¼ã颿°è¿½å 15// v1.0.3 2019/02/15 ããã°ã¬ã¹ã®è¡¨ç¤ºãã¢ã³ã«ã¼#å¯¾å¿ 16// v1.0.4 2019/03/28 ããã°ã¬ã¹ã®è¡¨ç¤ºã¹ã¿ã¤ã«è¨å® 17// v1.0.5 2019/09/19 onReceivedã¤ãã³ãã®è¿½å 18// v1.0.6 2019/11/12 Cokkie ãã©ã¡ã¼ã¿ã®æå¹å 19// v1.0.7 2019/11/25 ãããã¼/ããã¿ã¼ãã¯ãã 20 21 22 23//------------------------------------------------------- 24// ããªæ£ããWebS ã¯ã©ã¹ 25//------------------------------------------------------- 26 27function KanaboWebSClass() 28{ 29 //------------------------------------------------------- 30 // ãããã㣠31 //------------------------------------------------------- 32 this.host_id = ""; // ãã¹ãèå¥å 33 this.host_url = ""; // unused 34 35 36 this.host_names = [location.hostname]; 37 38 this.progress_style="top:50px;width:200px;height:36px;"; 39 this.progress_top="top:50px;"; 40 this.progress_color="color:white;"; 41 this.progress_background_color="background-color:rgba(39,137,179,0.7);"; 42 43 this.cookie = new CookieClass(); 44 this.cookieName = "KBW_PARAMS"; 45 // ãã©ã¡ã¼ã¿ ä¾ï¼'kb_lv=0&kb_md=0&kb_sz=70%&kb_ft=custom' 46 47 48 49 //------------------------------------------------------- 50 // ã³ãã³ãã®å®è¡ cmd:toggle/on/off 51 //------------------------------------------------------- 52 this.execCommand = function( cmd, params ) 53 { 54 try { 55 if( params != "" && params != undefined ) { 56 this.cookie.setValue(this.cookieName, params, 1); 57 } else { 58 this.cookie.deleteValue(this.cookieName); 59 } 60 61 switch( cmd ) 62 { 63 case "toggle" : 64 { 65 if( this.isTranslated() == true ) 66 { 67 this.reset(); 68 } 69 else 70 { 71 this.reload("furigana=on"); 72 } 73 } break; 74 case "off" : 75 { 76 this.reset(); 77 } break; 78 case "on" : 79 { 80 this.reload("furigana=on"); 81 } break; 82 default : 83 { 84 this.reload("furigana=on"); 85 } break; 86 } 87 88 } catch ( e ) { 89 90 } 91 } 92 93 //------------------------------------------------------- 94 // ãã¼ã¸ã®ãã©ã¡ã¼ã¿ãfurigana=onã®å ´åãµãããªå¤æãå®è¡ 95 //------------------------------------------------------- 96 this.start = function() 97 { 98 try { 99 _TRACE( "start function called." ); 100 101 // ãã©ã¡ã¼ã¿ã®åå¾ 102 var url_params = _getUrlParams(); 103 104 // ?furigana=onã®å ´åã«ãµãããªå¤æ 105 if( url_params.furigana == "on" ) { 106 var kb_params = this.cookie.readValue(this.cookieName); 107 this.translate(kb_params); 108 } 109 110 111 } catch ( e ) { 112 113 _TRACE( "Error : start function failed." ); 114 } 115 } 116 117 //------------------------------------------------------- 118 // ãµãããªå¤æã®å®è¡ 119 //------------------------------------------------------- 120 this.translate = function(params) 121 { 122 try { 123 _TRACE("translate function started."); 124 125 126 // ããªæ£ããWebSã¸ã®ãªã¯ã¨ã¹ãURLã®ä½æ 127 if( this.host_id == "" ) { 128 _TRACE( "Error : host_id not found." ); 129 return; 130 } 131 var dir = this.host_id.replace(".","/"); 132 var url = location.protocol + "//furigana.kanabo.com/s/cloud/" + dir + "/default.ashx?kb_bodyonly=true&kb_ht=none&kb_ft=none&kb_id=" + this.host_id +"&"; 133 if( params != undefined ) 134 { 135 url = url + params; 136 url = url + "&"; 137 } 138 139 // location.hrefããfurigana=onãçã 140 var target = _removeUrlParam(location.href,"furigana=on"); 141 142 // ãªã¯ã¨ã¹ãURL 143 var requestURL = url + "kb_url=" + target; 144 145 _TRACE( "requestUL = " + requestURL ); 146 147 _this = this; 148 xhr = _createXMLHttpRequest(); 149 xhr.onload = function(ev) { 150 if (xhr.status == 200) { 151 _this.onReceiveHtml(ev, _this.onReceived, _this.onTranslated); 152 153 } else { 154 // ããã°ã¬ã¹ãé表示ã«ããã 155 _showProgress(false); 156 157 _TRACE( "Error : " + xhr.status + " server error." ); 158 } 159 }; 160 xhr.open("get",requestURL, true); 161 xhr.responseType = "document"; 162 xhr.send(); 163 164 165 // ããã°ã¬ã¹ã表示ãã 166 _showProgress(true); 167 168 } catch ( e ) { 169 170 // ããã°ã¬ã¹ãé表示ã«ãã 171 _showProgress(false); 172 173 _TRACE( "Error : translate function failed." ); 174 } 175 } 176 177 178 179 180 181 182 //------------------------------------------------------- 183 // å¤æçµæã®HTMLãåä¿¡ãã 184 //------------------------------------------------------- 185 this.onReceiveHtml = function(event, callback1, callback2) 186 { 187 try { 188 var dom = event.target.responseXML; 189 190 // ç¾å¨ã®ããã¥ã¡ã³ãã®ã¿ã¤ãã«ãä¿æ 191 var title = document.title; 192 193 // ããã¥ã¡ã³ããå·®ãæ¿ããåã«éç¥ 194 if( callback1 != null ) { 195 callback1(); 196 } 197 198 // ç¾å¨ã®ããã¥ã¡ã³ããå·®ãæ¿ãã 199 var htmlText = dom.querySelector("body").innerHTML; 200 _TRACE(htmlText); 201 document.body.innerHTML = htmlText; 202 203 204 // bodyã«ã¯ã©ã¹"furigana"ã追å ãã 205 document.body.classList.add("furigana"); 206 207 // ãªã³ã¯ã®èª¿æ´ 208 var elems = document.getElementsByTagName("A"); 209 for( var i = 0; i < elems.length; i++ ) { 210 var a = elems[i]; 211 var href = a.href; 212 213 // kb_urlãå«ã¾ãã¦ãã¦ãã®URLãç»é²ãã¦ãããã¹ãåã¨åãå ´å 214 // kb_url + furigana=onãã©ã¡ã¼ã¿ã追å ãã¦å·®ãæ¿ãã 215 216 var s = href.indexOf("kb_url="); 217 if( s > -1 ) { 218 // kb_url=以ä¸ãåãåºã 219 href = href.slice(s+7); 220 221 // ããªæ£ããWebSãåãè¾¼ãã§ããæå¹ãªãã¹ãåã®å ´åã¯furigana=onã追å 222 for( var j = 0; j < this.host_names.length; j++ ) { 223 var host_name = this.host_names[j]; 224 225 // ãã¹ãåãä¸è´ 226 if( href.indexOf(host_name) > -1) { 227 // furiganaãã©ã¡ã¼ã¿ã®æç¡ 228 if( href.indexOf("furigana=on") > -1 ){ 229 a.href = href; 230 231 } else { 232 // ã¯ã¨ãªã¼(?)ãããå ´åã¯ãã©ã¡ã¼ã¿ãå¾ãã«è¿½å 233 if( href.indexOf("?") > -1 ) { 234 href = href + "&furigana=on"; 235 } else { 236 // ã¢ã³ã«ã¼(#)ãããå ´åã¯ã¢ã³ã«ã¼ãå¾ãã«å·®ãæ¿ãã 237 var idx = href.indexOf("#"); 238 if( idx == -1 ) { 239 href = href + "?furigana=on"; 240 } else { 241 var pair = href.split("#"); 242 href = pair[0] + "?furigana=on" + "#" + pair[1]; 243 } 244 } 245 a.href = href; 246 } 247 } 248 } 249 } 250 } 251 252 // ã¿ã¤ãã«ãæ»ã 253 document.title = title; 254 255 // ãµãããªå¤æå®äºã®ã³ã¼ã«ããã¯ãå®è¡ 256 if( callback2 != null ) { 257 callback2(); 258 } 259 260 _TRACE( "OK : translate function suceeded." ); 261 262 263 } catch ( e ) { 264 265 _TRACE( "Error : onReceiveHtml event failed." ); 266 } 267 268 } 269 270 271 //------------------------------------------------------- 272 // ã¬ã¹ãã³ã¹ã®åä¿¡ã¤ãã³ããã³ãã©ï¼ãªã¼ãã¼ã©ã¤ãå¯ï¼ 273 //------------------------------------------------------- 274 this.onReceived = function() { 275 _TRACE("KanaboWeb.onReceiveResponse"); 276 return true; 277 }; 278 279 //------------------------------------------------------- 280 // ãã¿ããªå¤æå®äºã¤ãã³ããã³ãã©ï¼ãªã¼ãã¼ã©ã¤ãå¯ï¼ 281 //------------------------------------------------------- 282 this.onTranslated = function() { 283 _TRACE("KanaboWeb.onTranslated."); 284 }; 285 286 287 //------------------------------------------------------- 288 // ãµãããªå¤æå¤å® 289 //------------------------------------------------------- 290 this.isTranslated = function() 291 { 292 try { 293 // ããã¥ã¡ã³ãã®bodyã«"furigana"ã¯ã©ã¹ãåå¨ãããã©ãã 294 return document.body.classList.contains("furigana"); 295 296 } catch( e ) { 297 298 _TRACE( "Error : isTranslated function failed." ); 299 } 300 return false; 301 } 302 303 //------------------------------------------------------- 304 // ãµãããªå®è¡ ãªãã¼ã furigana=on 305 //------------------------------------------------------- 306 this.reload = function() 307 { 308 try { 309 // ç¾å¨ã®ãã¼ã¸ã®URLãåå¾ 310 var url = window.location.href; 311 312 // urlã«furigana=onã追å 313 url = _addUrlParam(url,"furigana=on"); 314 315 // ãã¼ã¸ã®åèªã¿è¾¼ã¿ 316 window.location.href = url; 317 318 319 } catch ( e ) { 320 321 _TRACE( "Error : reload function failed." ); 322 } 323 } 324 325 //------------------------------------------------------- 326 // ãµãããªãã¯ãã 327 //------------------------------------------------------- 328 this.reset = function() 329 { 330 try { 331 // ç¾å¨ã®ãã¼ã¸ã®URLãåå¾ 332 var url = window.location.href; 333 334 // urlããfurigana=onãçã 335 url = _removeUrlParam(url,"furigana=on"); 336 337 338 // ãã¼ã¸ã®åèªã¿è¾¼ã¿ 339 window.location.href = url; 340 341 } catch ( e ) { 342 343 _TRACE( "Error : reset function failed." ); 344 } 345 } 346 347 //------------------------------------------------------- 348 // ãã¹ãåã®è¿½å 349 // ããªæ£ããWebSãåãè¾¼ãã§ãã該å½ãã¹ãåã®ãã¼ã¸ã§ã 350 // ãªã³ã¯ãæå¹ã«ãã 351 //------------------------------------------------------- 352 this.addHostName = function( host_name ) 353 { 354 try { 355 this.host_names.push( host_name ); 356 357 } catch ( e ) { 358 359 _TRACE( "Error : addHostName function failed." ); 360 } 361 } 362} 363 364 365 366//------------------------------------------------------- 367// Create KanaboWebS Object 368//------------------------------------------------------- 369var KanaboWeb = new KanaboWebSClass(); 370 371//------------------------------------------------------- 372// Override function 373//------------------------------------------------------- 374function _originalPage() { 375 KanaboWeb.reset(); 376} 377 378 379//------------------------------------------------------- 380// Cookie Control Class 381//------------------------------------------------------- 382function CookieClass() 383{ 384 // Cookie Settings 385 this.host_id = ""; 386 this.path = "/"; 387 // Cookie avaliable duration (Default 2days) 388 this.avaliableDuration = 2; 389 390 391 392 //--------------------------------------------- 393 // Create New Cookie 394 //--------------------------------------------- 395 this.setValue = function( name, value, days) 396 { 397 if (!days) 398 { 399 days = this.avaliableDuration; 400 } 401 402 var date = new Date(); 403 date.setTime( date.getTime() + ( days * 24 * 60 * 60 * 1000 ) ); 404 var expires = "; expires=" + date.toGMTString(); 405 406 document.cookie = name + "=" + escape(value) + expires + "; path=" + this.path ; 407 }; 408 409 //--------------------------------------------- 410 // Read item data from Cookie 411 //--------------------------------------------- 412 this.readValue = function( name ) 413 { 414 var cookieName = name + "="; 415 var cookieDataArray = document.cookie.split(';'); 416 417 for(var i=0 ; i < cookieDataArray.length ; i++) 418 { 419 var cookieItem = cookieDataArray[i]; 420 while (cookieItem.charAt(0)==' ') 421 { 422 cookieItem = cookieItem.substring(1, cookieItem.length); 423 } 424 425 if (cookieItem.indexOf(cookieName) == 0) 426 { 427 return cookieItem.substring(cookieName.length, cookieItem.length); 428 } 429 } 430 431 return null; 432 }; 433 434 //--------------------------------------------- 435 // Delete item data from Cookie 436 //--------------------------------------------- 437 this.deleteValue = function( name ) 438 { 439 440 if(this.readValue(name)) 441 { 442 //document.cookie = name + '='+ escape(100) + '; expires=Thu, 01-Jan-70 00:00:01 GMT;path=' + this.cookiePath; 443 document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;path=' + this.cookiePath; 444 } 445 }; 446 447 //--------------------------------------------- 448 // Get item from Cookie 449 //--------------------------------------------- 450 this.getItem = function( startPosition ) 451 { 452 var endPosition = document.cookie.indexOf(";", startPosition); 453 if(endPosition == -1) 454 { 455 endPosition = document.cookie.length; 456 } 457 return unescape(document.cookie.substring(startPosition, endPosition)); 458 } 459 460 461} 462//------------------------------------------------------- 463// Utility functions 464//------------------------------------------------------- 465 466// éçºè ãã¼ã«ã®ã³ã³ã½ã¼ã«ã«è¡¨ç¤º 467function _TRACE( message ) { 468 console.log( "[KanaboWeb S] : " + message ); 469} 470 471// XMLHttpRequestãçæ 472function _createXMLHttpRequest(){ 473 if(window.XMLHttpRequest){return new XMLHttpRequest()} 474 if(window.ActiveXObject){ 475 try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){} 476 try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){} 477 try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){} 478 } 479 return null; 480} 481 482// URLã«æå®ãããã©ã¡ã¼ã¿ã追å ãã 483function _addUrlParam( url, param ) { 484 var ret = url; 485 486 try { 487 488 if( param == null || param == "" ) 489 return ret; 490 491 // ãã§ã«ãã©ã¡ã¼ã¿ã追å ããã¦ããããã®ã¾ã¾ 492 if( ret.indexOf(param) > -1 ) { 493 return ret; 494 } 495 496 if( ret.indexOf("?") > -1 ) { 497 // ã¯ã¨ãªã¼ããã§ã«ããå ´åã¯ãã©ã¡ã¼ã¿ãå ã«ã¤ãã 498 ret = ret.replace( "?", "?"+param+"&" ); 499 500 } else {
501 // ã¯ã¨ãªã¼ããªãå ´åã¯ãã©ã¡ã¼ã¿ãã¤ãã 502 idx = ret.indexOf("#"); 503 if( idx == -1 ) { 504 ret = ret + "?" + param; 505 } else { 506 // ã¢ã³ã«ã¼ããã£ãå ´åã¯å¾ãã«å·®ãæ¿ãã 507 var pair = ret.split("#"); 508 ret = pair[0] + "?" + param + "#" + pair[1]; 509 } 510 } 511 512 } catch ( e ) { 513 514 _TRACE( "Error : _addUrlParam function failed." ); 515 } 516 517 return ret; 518} 519 520 521 522 523 524 525// URLããæå®ãããã©ã¡ã¼ã¿ãåãé¤ã 526function _removeUrlParam( url, param ) { 527 var ret = url; 528 try { 529 // urlããfurigana=onãçã 530 ret = ret.replace("&" + param, ""); 531 ret = ret.replace("?" + param + "&","?"); 532 ret = ret.replace("?" + param, ""); 533 534 } catch ( e ) { 535 536 _TRACE( "Error : removeUrlParam function failed." ); 537 } 538 539 return ret; 540} 541 542// URLãããã©ã¡ã¼ã¿ãåå¾ 543function _getUrlParams() { 544 var urlParams = new Object; 545 546 try { 547 var pair=location.search.substring(1).split('&'); 548 549 _TRACE("query parameter:" + location.search); 550 for(var i=0;pair[i];i++) { 551 var kv = pair[i].split('='); 552 urlParams[kv[0]]=kv[1]; 553 } 554 555 } catch (e) { 556 _TRACE( "Error : _getUrlParams function failed." ); 557 } 558 return urlParams; 559} 560 561 562// ã¹ã¯ãªããããªãã¼ããã 563function _reloadScript(filename) { 564 try { 565 _TRACE("_reloadScript(" + filename + ")" ); 566 567 var script = document.createElement( 'script' ); 568 569 script.type = 'text/javascript'; 570 script.src = filename; 571 572 var firstScript = document.getElementsByTagName( 'script' )[0]; 573 firstScript.parentNode.insertBefore( script, firstScript ); 574 575 } catch ( e ) { 576 577 _TRACE( "Error : reloadScript(" + filename + ")function failed." ); 578 } 579} 580 581 582// ã¤ãã³ããçºç«ãã 583function _triggerEvent(element, event) { 584 try { 585 _TRACE("_triggerEvent(" + element + "," + event + ")" ); 586 if (document.createEvent) { 587 // IEä»¥å¤ 588 var evt = document.createEvent("HTMLEvents"); 589 evt.initEvent(event, false, true ); // event type, bubbling, cancelable 590 return element.dispatchEvent(evt); 591 } else { 592 // IE 593 var evt = document.createEventObject(); 594 return element.fireEvent("on"+event, evt) 595 } 596 } catch ( e ) { 597 598 _TRACE( "Error : _trigerEvent function failed." ); 599 } 600} 601 602var _ID_KANABO_PROGRESS = "kanaboProgress"; 603 604// ããã°ã¬ã¹ã表示ãã 605function _showProgress(show) { 606 try { 607 _TRACE("_showProgress(" + show + ")"); 608 609 var progress = document.getElementById(_ID_KANABO_PROGRESS); 610 if (progress) { 611 if( show ) { 612 progress.style.display="block"; 613 } else { 614 progress.style.display="none"; 615 } 616 } else { 617 if( show ) { 618 //ããã°ã¬ã¹ãçæ 619 progress = document.createElement("div"); 620 progress.setAttribute("id",_ID_KANABO_PROGRESS); 621 622 623 var progressStyle = "position:absolute;z-index:256;left:50%;margin-left:-100px;align:center;padding-top:15px;text-align:center;border-radius:7px;" 624 + KanaboWeb.progress_style 625 + KanaboWeb.progress_color 626 + KanaboWeb.progress_background_color; 627 628 629 630 progress.setAttribute("style",progressStyle); 631 progress.innerHTML="<div>ãµãããªå¤æä¸...</div>"; 632 633 var element = document.body; 634 635 element.insertBefore(progress,element.nextSibling); 636 637 } 638 } 639 640 } catch (e) { 641 642 _TRACE( "Error : _showProgress function failed." ); 643 } 644} 645 646 647//------------------------------------------- 648// EventHandler 649//------------------------------------------- 650 651try 652{ 653 // ãã¼ã¸ã®èªã¿è¾¼ã¿ã¤ãã³ã 654 if( typeof jQuery != "undefined" ) { 655 // JQueryãèªã¿è¾¼ã¾ãã¦ããå ´åã¯$document.readyã使ç¨ãã 656 jQuery(document).ready(function() { 657 KanaboWeb.start(); 658 }); 659 660 } else { 661 window.addEventListener('load', function(event) { 662 KanaboWeb.start(); 663 },false); 664 } 665 666} catch ( e ) { 667 668} 669 670 671//------------------------------------------------------- 672//------------------------------------------------------- 673 674
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.