PageSourceSearch

https://www.zoshindo.co.jp/mt.js

js zoshindo.co.jp collected 2026-10-02 14:57:16 UTC 35,995 bytes, 1,205 lines download raw bytes

1// The cookie name to use for storing the blog-side comment session cookie.
2var mtCookieName = "mt_blog_user";
3var mtCookieDomain = ".zoshindo.co.jp";
4var mtCookiePath = "/";
5var mtCookieTimeout = 14400;
6
7
8function mtHide(id) {
9    var el = (typeof id == "string") ? document.getElementById(id) : id;
10    if (el) el.style.display = 'none';
11}
12
13
14function mtShow(id) {
15    var el = (typeof id == "string") ? document.getElementById(id) : id;
16    if (el) el.style.display = 'block';
17}
18
19
20function mtAttachEvent(eventName,func) {
21    var onEventName = 'on' + eventName;
22    var old = window[onEventName];
23    if( typeof old != 'function' )
24        window[onEventName] = func;
25    else {
26        window[onEventName] = function( evt ) {
27            old( evt );
28            return func( evt );
29        };
30    }
31}
32
33
34function mtFireEvent(eventName,param) {
35    var fn = window['on' + eventName];
36    if (typeof fn == 'function') return fn(param);
37    return;
38}
39
40if(!this.JSON){JSON={};}(function(){function f(n){return n<10?'0'+n:n;}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z';};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value});};}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}throw new SyntaxError('JSON.parse');};}}());
41
42var MT = window.MT || {};
43
44MT.cons = function () {
45  return {
46    LOG : 'log',
47    WARN : 'warn',
48    DEBUG : 'debug',
49    INFO : 'info',
50    ERR : 'error',
51    JSON : 'json'
52  };
53}();
54
55
56MT.core = function (o) {
57  var _debug = false;
58  
59  return {
60    
61    connect : function (url,respType,respHandler) {
62      var xh = mtGetXmlHttp();
63      if (!xh) return false;
64      
65      xh.onreadystatechange = function() {
66        if ( xh.readyState == 4 ) {
67          if ( xh.status && ( xh.status != 200 ) ) {
68            // error - ignore
69          } else {
70            switch (respType) {
71              case 'json':
72                respHandler(JSON.parse(xh.responseText));
73                break;
74                
75              case 'xml':
76                break;
77                
78              case 'text':
79                break;
80            }
81          }
82        }
83      };
84      
85      xh.open('GET',url);
86      xh.send(null);
87    },
88    
89    getEl : function (el) {
90      return MT.util.checkNodeType(el)==='element' ? id : (document.getElementById(el) || false);
91    },
92    
93    addEvent : function (el,type,func,obj) {
94      if(!obj && document.addEventListener) {
95        el.addEventListener(type,func,false);
96      } else if(obj && document.addEventListener) {
97        el.addEventListener(type,function () {
98          func.call(obj,event);
99        },false);
100      } else {
101        if(obj) {
102          el.attachEvent('on' + type,function () {
103            func.call(obj,event);
104          });
105        } else {
106          el.attachEvent('on' + type,function () {          
107            func.call(el,event);
108          });
109        }
110      }
111    },
112    
113    
114    log : function (level,msg) {
115      if(_debug && window.console) {
116        switch(level) {
117          case 'warn':
118          case 'debug':
119          case 'info':
120          case 'error':
121          case 'log':
122            console[level](msg);
123            break;
124            
125          default:
126            return false; 
127        }
128      } else {
129        return false;
130      }
131    }
132  }
133}();
134
135
136MT.util = function () {
137  return {
138    toggleVisibility : {
139      show : function () {
140        var i = arguments.length;
141        
142        while(i--) {
143          if(MT.util.checkNodeType(arguments[i])==='element') {
144            arguments[i].style.visibility = 'visible';
145          } else {
146            MT.core.getEl(arguments[i]).style.visibility = 'visible';
147          }
148        }
149      },
150      
151      hide : function () {
152        var i = arguments.length;
153        while(i--) {
154          if(MT.util.checkNodeType(arguments[i])==='element') {
155            arguments[i].style.visibility = 'hidden';
156          } else {
157            MT.core.getEl(arguments[i]).style.visibility = 'hidden';
158          }
159        }
160      }
161    },
162    
163    toggleDisplay : {
164      show : function () {
165        var i = arguments.length;
166        while(i--) {
167          if(MT.util.checkNodeType(arguments[i])==='element') {
168            arguments[i].style.display = '';
169          } else {
170            MT.core.getEl(arguments[i]).style.display = '';
171          }
172        }
173      },
174      
175      hide : function () {
176        var i = arguments.length;
177        while(i--) {
178          if(MT.util.checkNodeType(arguments[i])==='element') {
179            arguments[i].style.display = 'none';
180          } else {
181            MT.core.getEl(arguments[i]).style.display = 'none';
182          }
183        }
184      }
185    },
186    
187    
188    findDefiningParent : function (origin) {
189      if(MT.util.checkNodeType(origin)==='element') {
190        for(var node=origin.parentNode;node.parentNode;node=node.parentNode) {
191          if((node.hasAttribute && node.hasAttribute('id')) || node.getAttribute('id')) {
192            return node;
193          }
194        }
195      }
196      return false;
197    },
198    
199    
200    checkNodeType : function (obj) {
201      if (obj && obj.nodeName){
202        switch (obj.nodeType) {
203          case 1: return 'element';
204          case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
205        }
206      }
207    }
208  }
209}();
210
211
212(function () {
213  var M = MT.core,
214      c = MT.cons,
215      u = MT.util,
216      cache,
217      isLoading,
218      direction,
219      currentComments,
220      commentAnchor,
221      commentArrId,
222      commentsPerPage,
223      commentsTotalPages,
224      loadingIcon,
225      pageNum,
226      commentsOffset,
227      totalComments,
228      entryID,
229      commentContentDiv,
230      topNav,
231      nav,
232      currentCommentsSpan,
233      topCurrentCommentsSpan;
234            
235  M.addEvent(window,'load',_init);
236  
237  /**
238   * Initializes the class
239   * 
240   * @return void
241   */
242  function _init () {
243    if(!MT.entryCommentCount) {
244      return;
245    }
246    
247    _initializeVariables();
248    _setCommentOffset(false);
249    _checkForAnchor();
250		_setCurrentComments();
251    _toggleNavLinks();
252    _initializeEvents();
253  }
254  
255  
256  function _initializeVariables() {
257    cache = {};
258    isLoading = false;
259    commentAnchor = '';
260    commentArrId = '';
261    commentsPerPage = MT.commentsPerPage || 50;
262    currentComments = '';
263    direction = 'ascend';
264    entryID = MT.entryID;
265    totalComments = MT.entryCommentCount;
266    commentsTotalPages = Math.ceil(totalComments / commentsPerPage);
267    pageNum = 1;
268    
269    loadingIcon = "<img title='Loading...' src='https://www.zoshindo.co.jp/mt-static/images/indicator.white.gif' alt='Loading' />";
270    
271    commentContentDiv = M.getEl("comments-content");
272    topNav = M.getEl("top-comment-nav");
273    nav = M.getEl("comment-nav");
274    
275    currentCommentsSpan = M.getEl("current-comments");
276    topCurrentCommentsSpan = M.getEl("top-current-comments");
277  }
278  
279  function _initializeEvents() {
280    if (commentsPerPage < totalComments) {
281      M.addEvent(nav,'click',_handleEvents);
282      M.addEvent(topNav,'click',_handleEvents);
283    }
284  }
285  
286  
287  function _checkForAnchor() {
288    var found = String(window.location.hash).match( /comment-(\d{1,6})/ );
289		
290		if (found) {
291		  M.log(c.DEBUG,found);
292			if (!Object.prototype.hasOwnProperty.call(M.getEl(found[0]), 'className')) {
293				if (_findIdMatch(found[1])) {
294    			pageNum = Math.floor(commentArrId / commentsPerPage) + 1;
295    			M.log(c.DEBUG,'Comment Array Id: ' + commentArrId);
296    			M.log(c.DEBUG,'Comments Per Page: ' + commentsPerPage);
297    			M.log(c.DEBUG,'Page Number: ' + pageNum);
298    			M.log(c.DEBUG,'Comment Offset: ' + _getCommentOffset());
299    			_updateComments();
300    		}
301			}
302		}
303  }
304  
305  
306  function _setCommentOffset() {
307    commentsOffset = commentsPerPage * (pageNum-1);
308  }
309  
310  
311  function _getCommentOffset() {
312    return commentsOffset;
313  }
314  
315  
316  function _handleEvents (e) {
317    var origin = e.target || e.srcElement,
318        parentId;
319        
320    // stupid IE
321    origin = origin.id && M.getEl(origin.id) || false;
322
323    if(origin) {
324      parentId = u.checkNodeType(origin.parentNode)==='element' && origin.parentNode.getAttribute('id') && origin.parentNode.id;
325    } else {
326      return false;
327    }
328    
329    switch(origin.nodeName) {
330      case 'A':
331        switch (parentId) {
332          case 'prev-comments':
333          case 'top-prev-comments':
334            if(e.preventDefault) {
335              e.preventDefault();
336            } else {
337              e.returnValue =	false;
338            }
339            if(!isLoading) {
340              _previousPage();
341            }
342            break;
343          case 'next-comments':
344          case 'top-next-comments':
345            if(e.preventDefault) {
346              e.preventDefault();
347            } else {
348              e.returnValue =	false;
349            }
350            if(!isLoading) {
351              _nextPage();
352            }
353            break;
354        }
355        break;
356    }
357  }
358  
359  
360  function _toggleNavLinks () {
361    M.log(c.DEBUG,M.getEl('top-prev-comments'));
362    if(pageNum <= commentsTotalPages && pageNum !== 1) {
363      u.toggleVisibility.show('prev-comments');
364      u.toggleVisibility.show('top-prev-comments');
365    }
366    
367    if(pageNum >= 1 && pageNum !== commentsTotalPages) {
368      u.toggleVisibility.show('next-comments');
369      u.toggleVisibility.show('top-next-comments');
370    }
371    
372    if(pageNum===1 || nav.style.visibility==='hidden') {
373      u.toggleVisibility.hide('prev-comments');
374      u.toggleVisibility.hide('top-prev-comments');
375    }
376    
377    if(pageNum===commentsTotalPages || nav.style.visibility==='hidden') {
378      u.toggleVisibility.hide('next-comments');
379      u.toggleVisibility.hide('top-next-comments');
380    }
381  }
382  
383  
384  function _nextPage () {
385    if(pageNum < commentsTotalPages) {
386      pageNum++;
387      _updateComments();
388    }
389  }
390  
391  
392  function _previousPage() {
393    if(pageNum > 1) {
394      pageNum--;
395      _updateComments();
396    }
397  }
398  
399  
400  function _findIdMatch (id) {
401    var len = MT.commentIds.length;
402    
403  	while (len--) {
404  		if (MT.commentIds[len] == id) {
405  			commentAnchor = "comment-" + id;
406  			commentArrId = len;
407  			return true;
408  		}
409  	}
410  	
411  	return false;
412  }
413  
414  
415  function _setCurrentComments() {
416    var commentsOnPage = pageNum != commentsTotalPages ? commentsOffset + commentsPerPage : totalComments;
417    
418    _setCurrentCommentsContent([commentsOffset+1," - ",commentsOnPage].join(''));
419  }
420  
421  
422  function _setCurrentCommentsContent(currentCommentsHTML) {
423    currentCommentsSpan.innerHTML = currentCommentsHTML;
424    topCurrentCommentsSpan.innerHTML = currentCommentsHTML;
425  }
426  
427  
428  function _setCommentContent(commentHTML) {
429    commentContentDiv.innerHTML = commentHTML;
430  }
431  
432  
433  function _updateComments() {
434    var comments, jsonUrl, cacheKey, offset;
435    isLoading = true;
436    _setCurrentCommentsContent(loadingIcon);
437    _setCommentOffset();
438
439    offset   = _getCommentOffset();
440    cacheKey = [direction, entryID, commentsPerPage, offset]
441        .join('-')
442        .replace(/[^a-zA-Z0-9-]/g, '');
443    jsonUrl  = [
444        "https://www.zoshindo.co.jp/cgi-bin/mt/mt-comments.cgi?__mode=comment_listing&direction=",
445        direction,
446        "&entry_id=",
447        entryID,
448        "&limit=",
449        commentsPerPage,
450        "&offset=",
451        offset,
452        "&cacheKey=",
453        cacheKey,
454        "&jsonp=mtUpdateCommentsCallback",
455        "&ts=",
456        new Date().getTime()
457      ].join('');
458  	
459  	if (!commentAnchor) {
460      commentAnchor = "comments-content";
461    }
462
463    if(cache.hasOwnProperty(cacheKey)) {
464      _refreshComments(cache[cacheKey]);
465      isLoading = false;
466    } else {
467      var script = document.createElement('script');
468      script.src = jsonUrl;
469      (document.getElementsByTagName('head'))[0].appendChild(script);
470    }
471  }
472
473  window['mtUpdateCommentsCallback'] = function(json) {
474    cache[json.cacheKey] = json.comments;
475    _refreshComments(json.comments);
476    isLoading = false;
477  }
478  
479  
480  function _refreshComments(commentData) {
481    _setCommentContent(commentData);
482    _setCurrentComments();
483    window.location.hash = 'reset';
484    window.location.hash = commentAnchor;
485    _toggleNavLinks();
486  }
487})();
488
489
490function mtRelativeDate(ts, fds) {
491    var now = new Date();
492    var ref = ts;
493    var delta = Math.floor((now.getTime() - ref.getTime()) / 1000);
494
495    var str;
496    if (delta < 60) {
497        str = '直前';
498    } else if (delta <= 86400) {
499        // less than 1 day
500        var hours = Math.floor(delta / 3600);
501        var min = Math.floor((delta % 3600) / 60);
502        if (hours == 1)
503            str = '1 時間前';
504        else if (hours > 1)
505            str = '2 時間前'.replace(/2/, hours);
506        else if (min == 1)
507            str = '1 分前';
508        else
509            str = '2 分前'.replace(/2/, min);
510    } else if (delta <= 604800) {
511        // less than 1 week
512        var days = Math.floor(delta / 86400);
513        var hours = Math.floor((delta % 86400) / 3600);
514        if (days == 1)
515            str = '1 日前';
516        else if (days > 1)
517            str = '2 日前'.replace(/2/, days);
518        else if (hours == 1)
519            str = '1 時間前';
520        else
521            str = '2 時間前'.replace(/2/, hours);
522    }
523    return str ? str : fds;
524}
525
526
527function mtEditLink(entry_id, author_id) {
528    
529    
530}
531
532
533function mtCommentFormOnFocus() {
534    // if CAPTCHA is enabled, this causes the captcha image to be
535    // displayed if it hasn't been already.
536    mtShowCaptcha();
537}
538
539
540var mtCaptchaVisible = false;
541function mtShowCaptcha() {
542    var u = mtGetUser();
543    if ( u && u.is_authenticated ) return;
544    if (mtCaptchaVisible) return;
545    var div = document.getElementById('comments-open-captcha');
546    if (div) {
547        div.innerHTML = '';
548        mtCaptchaVisible = true;
549    }
550}
551
552
553
554var is_preview;
555var user;
556
557function mtSetUser(u) {
558    if (u) {
559        // persist this
560        user = u;
561        mtSaveUser();
562        // sync up user greeting
563        mtFireEvent('usersignin');
564    }
565}
566
567
568function mtEscapeJS(s) {
569    s = s.replace(/'/g, "&apos;");
570    return s;
571}
572
573
574function mtUnescapeJS(s) {
575    s = s.replace(/&apos;/g, "'");
576    return s;
577}
578
579
580function mtBakeUserCookie(u) {
581    var str = "";
582    if (u.name) str += "name:'" + mtEscapeJS(u.name) + "';";
583    if (u.url) str += "url:'" + mtEscapeJS(u.url) + "';";
584    if (u.email) str += "email:'" + mtEscapeJS(u.email) + "';";
585    if (u.is_authenticated) str += "is_authenticated:'1';";
586    if (u.profile) str += "profile:'" + mtEscapeJS(u.profile) + "';";
587    if (u.userpic) str += "userpic:'" + mtEscapeJS(u.userpic) + "';";
588    if (u.sid) str += "sid:'" + mtEscapeJS(u.sid) + "';";
589    str += "is_trusted:'" + (u.is_trusted ? "1" : "0") + "';";
590    str += "is_author:'" + (u.is_author ? "1" : "0") + "';";
591    str += "is_banned:'" + (u.is_banned ? "1" : "0") + "';";
592    str += "can_post:'" + (u.can_post ? "1" : "0") + "';";
593    str += "can_comment:'" + (u.can_comment ? "1" : "0") + "';";
594    str = str.replace(/;$/, '');
595    return str;
596}
597
598
599function mtUnbakeUserCookie(s) {
600    if (!s) return;
601
602    var u = {};
603    var m;
604    while (m = s.match(/^((name|url|email|is_authenticated|profile|userpic|sid|is_trusted|is_author|is_banned|can_post|can_comment):'([^']+?)';?)/)) {
605        s = s.substring(m[1].length);
606        if (m[2].match(/^(is|can)_/)) // boolean fields
607            u[m[2]] = m[3] == '1' ? true : false;
608        else
609            u[m[2]] = mtUnescapeJS(m[3]);
610    }
611    if (u.is_authenticated) {
612        u.is_anonymous = false;
613    } else {
614        u.is_anonymous = true;
615        u.can_post = false;
616        u.is_author = false;
617        u.is_banned = false;
618        u.is_trusted = false;
619    }
620    return u;
621}
622
623
624function mtGetUser() {
625    if (!user) {
626        var cookie = mtGetCookie(mtCookieName);
627        if (!cookie) return;
628        user = mtUnbakeUserCookie(cookie);
629        if (! user) {
630            user = {};
631            user.is_anonymous = true;
632            user.can_post = false;
633            user.is_author = false;
634            user.is_banned = false;
635            user.is_trusted = false;
636        }
637    }
638    return user;
639}
640
641
642var mtFetchedUser = false;
643
644function mtFetchUser(cb) {
645    if (!cb) cb = 'mtSetUser';
646    if ( ( cb == 'mtSetUser' ) && mtGetUser() ) {
647        var url = document.URL;
648        url = url.replace(/#.+$/, '');
649        url += '#comments-open';
650        location.href = url;
651    } else {
652        // we aren't using AJAX for this, since we may have to request
653        // from a different domain. JSONP to the rescue.
654        mtFetchedUser = true;
655        var u = mtGetUser();
656        var script = document.createElement('script');
657        var ts = new Date().getTime();
658        script.src = 'https://www.zoshindo.co.jp/cgi-bin/mt/mt-comments.cgi?__mode=userinfo&blog_id=1&jsonp=' + cb + '&ts=' + ts + '&sid=' + u.sid;
659        (document.getElementsByTagName('head'))[0].appendChild(script);
660    }
661}
662
663function mtVerifySession(cb) {
664    if (!cb) return;
665    var script = document.createElement('script');
666    var ts = new Date().getTime();
667    var u = mtGetUser();
668    script.src = 'https://www.zoshindo.co.jp/cgi-bin/mt/mt-comments.cgi?__mode=verify_session&blog_id=1&jsonp=' + cb + '&ts=' + ts + '&sid=' + u.sid;
669    (document.getElementsByTagName('head'))[0].appendChild(script);
670}
671
672
673
674function mtRememberMeOnClick(b) {
675    if (!b.checked)
676        mtClearUser(b.form);
677    return true;
678}
679
680
681
682var mtRequestSubmitted = false;
683function mtCommentOnSubmit(f) {
684    if (!mtRequestSubmitted) {
685        mtRequestSubmitted = true;
686
687        if (f.armor)
688            f.armor.value = '90a15c4b4e9268d24625d4f7ffa61ba2adc6c42e';
689        if (f.bakecookie && f.bakecookie.checked)
690            mtSaveUser(f);
691
692        // disable submit buttons
693        if (f.preview_button) f.preview_button.disabled = true;
694        if (f.post) f.post.disabled = true;
695
696        var u = mtGetUser();
697        if ( !is_preview && ( u && u.is_authenticated ) ) {
698            // validate session; then submit
699            mtVerifySession('mtCommentSessionVerify');
700            return false;
701        }
702
703        return true;
704    }
705    return false;
706}
707
708function mtCommentSessionVerify(app_user) {
709    var f = document['comments_form'];
710    if ( app_user && app_user.verified ) {
711        f.submit();
712    } else {
713        alert('セッションの有効期限が切れています。再度サインインしてください。');
714        mtClearUser();
715        mtFireEvent('usersignin');
716
717        mtShow('comments-form');
718        mtHide('comments-open-footer');
719
720    }
721}
722
723function mtUserOnLoad() {
724    var u = mtGetUser();
725
726    // if the user is authenticated, hide the 'anonymous' fields
727    // and any captcha input if already shown
728    if ( document.getElementById('comments-form')) {
729        if ( u && u.is_authenticated ) {
730            mtShow('comments-form');
731            mtHide('comments-open-data');
732            if (mtCaptchaVisible)
733                mtHide('comments-open-captcha');
734        } else {
735
736            mtHide('comments-form');
737
738        }
739        if ( u && u.is_banned )
740            mtHide('comments-form');
741
742        // if we're previewing a comment, make sure the captcha
743        // field is visible
744        if (is_preview)
745            mtShowCaptcha();
746        else
747            mtShowGreeting();
748
749        // populate anonymous comment fields if user is cookied as anonymous
750        var cf = document['comments_form'];
751        if (cf) {
752            if (u && u.is_anonymous) {
753                if (u.email) cf.email.value = u.email;
754                if (u.name) cf.author.value = u.name;
755                if (u.url) cf.url.value = u.url;
756                if (cf.bakecookie)
757                    cf.bakecookie.checked = u.name || u.email;
758            } else {
759                if (u && u.sid && cf.sid)
760                    cf.sid.value = u.sid;
761            }
762            if (cf.post && cf.post.disabled)
763                cf.post.disabled = false;
764            if (cf.preview_button && cf.preview_button.disabled)
765                cf.preview_button.disabled = false;
766            mtRequestSubmitted = false;
767        }
768    }
769}
770
771
772
773
774function mtEntryOnLoad() {
775    var cf = document['comments_form'];
776    if (cf && cf.preview) cf.preview.value = '';
777    
778    
779    mtFireEvent('usersignin');
780}
781
782function mtEntryOnUnload() {
783    if (mtRequestSubmitted) {
784        var cf = document['comments_form'];
785        if (cf) {
786            if (cf.post && cf.post.disabled)
787                cf.post.disabled = false;
788            if (cf.preview_button && cf.preview_button.disabled)
789                cf.preview_button.disabled = false;
790        }
791        mtRequestSubmitted = false;
792    }
793    return true;
794}
795
796mtAttachEvent('usersignin', mtUserOnLoad);
797
798
799
800function mtSignIn() {
801    var doc_url = document.URL;
802    doc_url = doc_url.replace(/#.+/, '');
803    var url = 'https://www.zoshindo.co.jp/cgi-bin/mt/mt-cp.cgi?__mode=login&blog_id=1';
804    if (is_preview) {
805        if ( document['comments_form'] ) {
806            var entry_id = document['comments_form'].entry_id.value;
807            url += '&entry_id=' + entry_id;
808        } else {
809            url += '&return_url=https%3A%2F%2Fwww.zoshindo.co.jp%2F';
810        }
811    } else {
812        url += '&return_url=' + encodeURIComponent(doc_url);
813    }
814    mtClearUser();
815    location.href = url;
816}
817
818function mtSignInOnClick(sign_in_element) {
819    var el;
820    if (sign_in_element) {
821        // display throbber
822        el = document.getElementById(sign_in_element);
823        if (!el)  // legacy MT 4.x element id
824            el = document.getElementById('comment-form-external-auth');
825    }
826    if (el)
827        el.innerHTML = 'サインインします... <span class="status-indicator">&nbsp;</span>';
828
829    mtClearUser(); // clear any 'anonymous' user cookie to allow sign in
830    mtSignIn();
831    return false;
832}
833
834function mtSetUserOrLogin(u) {
835    if (u && u.is_authenticated) {
836        mtSetUser(u);
837    } else {
838        // user really isn't logged in; so let's do this!
839        mtSignIn();
840    }
841}
842
843
844function mtSignOut(entry_id) {
845    mtClearUser();
846    var doc_url = document.URL;
847    doc_url = doc_url.replace(/#.+/, '');
848    var url = 'https://www.zoshindo.co.jp/cgi-bin/mt/mt-cp.cgi?__mode=logout&static=0&blog_id=1';
849    if (is_preview) {
850        if ( document['comments_form'] ) {
851            var entry_id = document['comments_form'].entry_id.value;
852            url += '&entry_id=' + entry_id;
853        } else {
854            url += '&return_url=https%3A%2F%2Fwww.zoshindo.co.jp%2F';
855        }
856    } else {
857        url += '&return_url=' + encodeURIComponent(doc_url);
858    }
859    location.href = url;
860}
861
862
863function mtSignOutOnClick() {
864    mtSignOut();
865    return false;
866}
867
868
869
870function mtShowGreeting() {
871
872    var reg_reqd = true;
873
874    var cf = document['comments_form'];
875    if (!cf) return;
876
877    var el = document.getElementById('comment-greeting');
878    if (!el)  // legacy MT 4.x element id
879        el = document.getElementById('comment-form-external-auth');
880    if (!el) return;
881
882    var eid = cf.entry_id;
883    var entry_id;
884    if (eid) entry_id = eid.value;
885
886    var phrase;
887    var u = mtGetUser();
888
889    if ( u && u.is_authenticated ) {
890        if ( u.is_banned ) {
891            phrase = 'このブログにコメントする権限を持っていません。(\<a href=\"javas\cript:void(0);\" onclick=\"return mtSignOutOnClick();\"\>サインアウトする\<\/a\>)';
892        } else {
893            var user_link;
894            if ( u.is_author ) {
895                user_link = '<a href="https://www.zoshindo.co.jp/cgi-bin/mt/mt-comments.cgi?__mode=edit_profile&blog_id=1&return_url=' + encodeURIComponent( location.href );
896                user_link += '">' + u.name + '</a>';
897            } else {
898                // registered user, but not a user with posting rights
899                if (u.url)
900                    user_link = '<a href="' + u.url + '">' + u.name + '</a>';
901                else
902                    user_link = u.name;
903            }
904            // TBD: supplement phrase with userpic if one is available.
905            phrase = '__NAME__としてサインインしています。(\<a href=\"javas\cript:void(0)\" onclick=\"return mtSignOutOnClick();\"\>サインアウト\<\/a\>)';
906            phrase = phrase.replace(/__NAME__/, user_link);
907        }
908    } else {
909        if (reg_reqd) {
910            phrase = 'コメントするにはまず\<a href=\"javas\cript:void(0)\" onclick=\"return mtSignInOnClick(\'comment-greeting\')\"\>サインイン\<\/a\>してください。';
911        } else {
912            phrase = 'コメントする前に\<a href=\"javas\cript:void(0)\" onclick=\"return mtSignInOnClick(\'comment-greeting\')\"\>サインイン\<\/a\>することもできます。';
913        }
914    }
915    el.innerHTML = phrase;
916
917}
918
919
920
921function mtReplyCommentOnClick(parent_id, author) {
922    mtShow('comment-form-reply');
923
924    var checkbox = document.getElementById('comment-reply');
925    var label = document.getElementById('comment-reply-label');
926    var text = document.getElementById('comment-text');
927
928    // Populate label with new values
929    var reply_text = '\<a href=\"#comment-__PARENT__\" onclick=\"location.href=this.href; return false\"\>__AUTHOR__からのコメント\<\/a\>に返信';
930    reply_text = reply_text.replace(/__PARENT__/, parent_id);
931    reply_text = reply_text.replace(/__AUTHOR__/, author);
932    label.innerHTML = reply_text;
933
934    checkbox.value = parent_id; 
935    checkbox.checked = true;
936    try {
937        // text field may be hidden
938        text.focus();
939    } catch(e) {
940    }
941
942    mtSetCommentParentID();
943}
944
945
946function mtSetCommentParentID() {
947    var checkbox = document.getElementById('comment-reply');
948    var parent_id_field = document.getElementById('comment-parent-id');
949    if (!checkbox || !parent_id_field) return;
950
951    var pid = 0;
952    if (checkbox.checked == true)
953        pid = checkbox.value;
954    parent_id_field.value = pid;
955}
956
957
958function mtSaveUser(f) {
959    // We can't reliably store the user cookie during a preview.
960    if (is_preview) return;
961
962    var u = mtGetUser();
963
964    if (f && (!u || u.is_anonymous)) {
965        if ( !u ) {
966            u = {};
967            u.is_authenticated = false;
968            u.can_comment = true;
969            u.is_author = false;
970            u.is_banned = false;
971            u.is_anonymous = true;
972            u.is_trusted = false;
973        }
974        if (f.author != undefined) u.name = f.author.value;
975        if (f.email != undefined) u.email = f.email.value;
976        if (f.url != undefined) u.url = f.url.value;
977    }
978
979    if (!u) return;
980
981    var cache_period = mtCookieTimeout * 1000;
982
983    // cache anonymous user info for a long period if the
984    // user has requested to be remembered
985    if (u.is_anonymous && f && f.bakecookie && f.bakecookie.checked)
986        cache_period = 365 * 24 * 60 * 60 * 1000;
987
988    var now = new Date();
989    mtFixDate(now);
990    now.setTime(now.getTime() + cache_period);
991
992    var cmtcookie = mtBakeUserCookie(u);
993    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,
994        location.protocol == 'https:');
995}
996
997
998function mtClearUser() {
999    user = null;
1000    mtDeleteCookie(mtCookieName, mtCookiePath, mtCookieDomain,
1001        location.protocol == 'https:');
1002}
1003
1004
1005function mtSetCookie(name, value, expires, path, domain, secure) {
1006    if (domain && ( domain.match(/^\.?localhost$/) || domain.match(/^[0-9\.]+$/) ))
1007        domain = null;
1008    var curCookie = name + "=" + encodeURIComponent(value) +
1009        (expires ? "; expires=" + expires.toGMTString() : "") +
1010        (path ? "; path=" + path : "") +
1011        (domain ? "; domain=" + domain : "") +
1012        (secure ? "; secure" : "");
1013    document.cookie = curCookie;
1014}
1015
1016
1017function mtGetCookie(name) {
1018    var prefix = name + '=';
1019    var c = document.cookie;
1020    var cookieStartIndex = c.indexOf(prefix);
1021    if (cookieStartIndex == -1)
1022        return '';
1023    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
1024    if (cookieEndIndex == -1)
1025        cookieEndIndex = c.length;
1026    var this_cookie = c.substring(cookieStartIndex + prefix.length, cookieEndIndex);
1027    if ( this_cookie.match(/\%u/i) ) {
1028        return '';
1029    }
1030    return decodeURIComponent( this_cookie );
1031}
1032
1033
1034function mtDeleteCookie(name, path, domain, secure) {
1035    if (mtGetCookie(name)) {
1036        if (domain && domain.match(/^\.?localhost$/))
1037            domain = null;
1038        document.cookie = name + "=" +
1039            (path ? "; path=" + path : "") +
1040            (domain ? "; domain=" + domain : "") +
1041            (secure ? "; secure" : "") +
1042            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
1043    }
1044}
1045
1046function mtFixDate(date) {
1047    var skew = (new Date(0)).getTime();
1048    if (skew > 0)
1049        date.setTime(date.getTime() - skew);
1050}
1051
1052
1053function mtGetXmlHttp() {
1054    if ( !window.XMLHttpRequest ) {
1055        window.XMLHttpRequest = function() {
1056            var types = [
1057                "Microsoft.XMLHTTP",
1058                "MSXML2.XMLHTTP.5.0",
1059                "MSXML2.XMLHTTP.4.0",
1060                "MSXML2.XMLHTTP.3.0",
1061                "MSXML2.XMLHTTP"
1062            ];
1063
1064            for ( var i = 0; i < types.length; i++ ) {
1065                try {
1066                    return new ActiveXObject( types[ i ] );
1067                } catch( e ) {}
1068            }
1069
1070            return undefined;
1071        };
1072    }
1073    if ( window.XMLHttpRequest )
1074        return new XMLHttpRequest();
1075}
1076
1077// BEGIN: fast browser onload init
1078// Modifications by David Davis, DWD
1079// Dean Edwards/Matthias Miller/John Resig
1080// http://dean.edwards.name/weblog/2006/06/again/?full#comment5338
1081
1082function mtInit() {
1083    // quit if this function has already been called
1084    if (arguments.callee.done) return;
1085
1086    // flag this function so we don't do the same thing twice
1087    arguments.callee.done = true;
1088
1089    // kill the timer
1090    // DWD - check against window
1091    if ( window._timer ) clearInterval(window._timer);
1092
1093    // DWD - fire the window onload now, and replace it
1094    if ( window.onload && ( window.onload !== window.mtInit ) ) {
1095        window.onload();
1096        window.onload = function() {};
1097    }
1098
1099
1100    mtInitCommenter();
1101
1102
1103}
1104
1105/* for Mozilla/Opera9 */
1106if (document.addEventListener) {
1107    document.addEventListener("DOMContentLoaded", mtInit, false);
1108}
1109
1110/* for Internet Explorer */
1111/*@cc_on @*/
1112/*@if (@_win32)
1113document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
1114var script = document.getElementById("__ie_onload");
1115script.onreadystatechange = function() {
1116    if (this.readyState == "complete") {
1117        mtInit(); // call the onload handler
1118    }
1119};
1120/*@end @*/
1121
1122/* for Safari */
1123if (/WebKit/i.test(navigator.userAgent)) { // sniff
1124    _timer = setInterval(function() {
1125        if (/loaded|complete/.test(document.readyState)) {
1126            mtInit(); // call the onload handler
1127        }
1128    }, 10);
1129}
1130
1131/* for other browsers */
1132window.onload = mtInit;
1133
1134// END: fast browser onload init
1135
1136
1137
1138
1139function mtLoggedIn(ott) {
1140    var script = document.createElement('script');
1141    var ts = new Date().getTime();
1142    script.src = 'https://www.zoshindo.co.jp/cgi-bin/mt/mt-comments.cgi?__mode=userinfo&jsonp=mtSaveUserInfo&ott=' + ott;
1143    (document.getElementsByTagName('head'))[0].appendChild(script);
1144}
1145
1146function mtRefreshUserInfo(sid) {
1147    var script = document.createElement('script');
1148    var ts = new Date().getTime();
1149    script.src = 'https://www.zoshindo.co.jp/cgi-bin/mt/mt-comments.cgi?__mode=userinfo&jsonp=mtSaveUserInfo&sid=' + sid;
1150    (document.getElementsByTagName('head'))[0].appendChild(script);
1151}
1152
1153function mtSaveUserInfo (u) {
1154    if ( u.error ) {
1155        if ( !user ) {
1156            alert('サインインできませんでした。');
1157        }
1158        return;
1159    }
1160    user = null;
1161    var cmtcookie = mtBakeUserCookie(u);
1162    var now = new Date();
1163    var cache_period = mtCookieTimeout * 1000;
1164
1165    // cache anonymous user info for a long period if the
1166    // user has requested to be remembered
1167    mtFixDate(now);
1168    now.setTime(now.getTime() + cache_period);
1169    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,
1170        location.protocol == 'https:');
1171    mtFireEvent('usersignin');
1172}
1173
1174function mtInitCommenter () {
1175    /***
1176     * If request contains a '#_login' or '#_logout' hash, use this to
1177     * also delete the blog-side user cookie, since we're coming back from
1178     * a login, logout or edit profile operation.
1179     */
1180
1181    var hash = ( window.location.hash );
1182    hash.match( /^#_(.*)$/ );
1183    var command = RegExp.$1 || '';
1184    if ( command === 'refresh' ) {
1185        // Back from profile edit screen.
1186        // Reload userinfo with current session ID.
1187        var u = mtGetUser();
1188        user  = null;
1189        mtRefreshUserInfo(u.sid);
1190    }
1191    else if ( command === 'logout' ) {
1192        // clear any logged in state
1193        mtClearUser();
1194        mtFireEvent('usersignin');
1195    }
1196    else if ( command.match( /^login_(.*)$/ ) ) {
1197        var sid = RegExp.$1;
1198        mtLoggedIn(sid);
1199    }
1200    else {
1201        mtFireEvent('usersignin');
1202    }
1203}
1204
1205

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.