// ==UserScript== // @name iZhihu // @namespace https://github.com/unogz/izhihu // @version 2.13.3 // @description 知乎插件 // @match http://www.zhihu.com/* // @include http://www.zhihu.com/* // @match https://www.zhihu.com/* // @include https://www.zhihu.com/* // @require http://cdn.staticfile.org/jquery/1.8.2/jquery.min.js // @require http://cdn.staticfile.org/iCheck/1.0.1/icheck.min.js // @resource jqUI_CSS http://cdn.staticfile.org/iCheck/1.0.1/skins/square/blue.css // @resource ui-bg_icheck-skin_square_blue http://cdn.staticfile.org/iCheck/1.0.1/skins/square/blue.png // @resource ui-bg_icheck-skin_square_blue2x http://cdn.staticfile.org/iCheck/1.0.1/skins/square/blue@2x.png // @require http://cdn.staticfile.org/jqueryui/1.10.4/jquery-ui.min.js // @require http://cdn.staticfile.org/purl/2.3.1/purl.min.js // @require http://cdn.staticfile.org/underscore.js/1.6.0/underscore-min.js // @grant GM_xmlHttpRequest // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_getResourceURL // @icon https://raw.githubusercontent.com/unogz/izhihu/develop/misc/xpi-config/icon64.png // @copyright 2015+, @钢盅郭子 @刘勇 @墨磊 // @downloadURL none // ==/UserScript== var jqUI_CssSrc = GM_getResourceText("jqUI_CSS") GM_addStyle (jqUI_CssSrc.replace('url(blue', 'url(http://cdn.staticfile.org/iCheck/1.0.1/skins/square/blue')); var version='2.13.3'; var updateDate='2016-4-25'; if ( typeof unsafeWindow === "undefined") { unsafeWindow = ( function () { var dummyElem = document.createElement('p'); dummyElem.onclick=function(){return window;}; return dummyElem.onclick (); } ) (); } //主入口 //$(function main(){ /** * @class Utils 辅助类 */ function utils(){ }; var cfgDefault = { 'comment_sidebar': true , 'answer_orderByTime': false , 'AuthorList':false , 'ShowComment':true , 'HomeLayout':false , 'QuickFavo':true , 'QuickFavoPinned':{} , 'AuthorRear':false , 'HomeNoti':false , 'QuickBlock':false , 'Noti7':true , 'HomeFeedsColumns':false , 'RightComment_AutoScrollPageWhenClosing':true , 'TopNavAutoFold':false }; /** * 读取配置 */ utils.getCfg = function(key){ if(!key)return false; var cfg = $.extend(cfgDefault, this.getValue('izhihu',cfgDefault)); return key ? cfg[key] : cfg; }; utils.setCfg = function(key,value){ if(!key)return; var cfg = $.extend(cfgDefault, this.getValue('izhihu',cfgDefault)); cfg[key]=value; this.setValue('izhihu',cfg); }; /** * 读取存储 */ utils.getValue = function(key, defaultValue){ var v=unsafeWindow.localStorage[key]; if(v) return JSON.parse(v); else return defaultValue; }; /** * 写入存储 */ utils.setValue = function(key, value){ unsafeWindow.localStorage[key] = JSON.stringify(value); }; /** * 删除存储 */ utils.deleteValue = function(key){ return delete unsafeWindow.localStorage[key]; }; utils.transferOldCfg=function(){ var oldHomeLayout = unsafeWindow.localStorage['izh_HomeLayout'] , oldAuthorList = unsafeWindow.localStorage['izh_AuthorList'] , oldShowComment = unsafeWindow.localStorage['izh_ShowComment'] , oldQuickFavo = unsafeWindow.localStorage['izh_QuickFavo'] , oldAuthorRear = unsafeWindow.localStorage['izh_AuthorRear'] , oldHomeNoti = unsafeWindow.localStorage['izh_HomeNoti'] ; if(oldHomeLayout){ izhHomeLayout=oldHomeLayout; unsafeWindow.localStorage.removeItem('izh_HomeLayout'); this.setCfg('HomeLayout',izhHomeLayout); } if(oldAuthorList){ izhAuthorList=oldAuthorList; unsafeWindow.localStorage.removeItem('izh_AuthorList'); this.setCfg('AuthorList',izhAuthorList); } if(oldShowComment){ izhRightComment=oldShowComment; unsafeWindow.localStorage.removeItem('izh_ShowComment'); this.setCfg('ShowComment',izhRightComment); } if(oldQuickFavo){ izhQuickFavo=oldQuickFavo; unsafeWindow.localStorage.removeItem('izh_QuickFavo'); this.setCfg('QuickFavo',izhQuickFavo); } if(oldAuthorRear){ izhAuthorRear=oldAuthorRear; unsafeWindow.localStorage.removeItem('izh_AuthorRear'); this.setCfg('AuthorRear',izhAuthorRear); } if(oldHomeNoti){ izhHomeNoti=oldHomeNoti; unsafeWindow.localStorage.removeItem('izh_HomeNoti'); this.setCfg('HomeNoti',izhHomeNoti); } }; /** * @method formatStr * * 格式化字符串模版,支持2种格式: * * formatStr("i can speak {language} since i was {age}",{language:'javascript',age:10}); * formatStr("i can speak {0} since i was {1}",'javascript',10); * * 如果不希望被转义,则用两个括号,如: `formatStr("i can speak {0} since i was {{1}",'javascript',10);` * */ utils.formatStr = function(tpl,obj){ obj = typeof obj === 'object' ? obj : Array.prototype.slice.call(arguments, 1); return tpl.replace(/\{\{|\}\}|\{(\w+)\}/g, function (m, n){ if (m == "{{") { return "{"; } if (m == "}}") { return "}"; } return obj[n]; }); }; utils.getParamInQuery=function(queryStr,paramName){ var param=paramName+'=' , start=queryStr.indexOf(param)+param.length , end=queryStr.indexOf('&',start); return end', { 'type': 'text/css' }) , iPathAnswers=_path.indexOf('/answers') , iPathCollection=_path.indexOf('/collection') ; pageIs.Home='/'==_path; pageIs.Answer=0<_path.indexOf('/answer/'); pageIs.Question=!pageIs.Answer&&0==_path.indexOf('/question/'); pageIs.Answers=0div:last-child,.zm-item-answer:last-child { border-bottom:1px solid #EEE!important }' ,'' ,'.zu-autohide,' ,'.zm-comment-op-link,' ,'.zm-side-trend-del,' ,'.unpin {' ,' visibility:visible!important;' ,' opacity:0;' ,'}' ,'.feed-item:hover .zu-autohide,' ,'.zm-item-answer .zu-autohide,' ,'.zm-item-comment:hover .zm-comment-op-link,' ,'.zm-side-trend-row:hover .zm-side-trend-del,' ,'.zm-side-nav-li:hover .unpin {' ,' opacity:1;' ,'}' ,'.zm-item-vote-count:hover,.zm-votebar button:hover{' ,' background:#a6ce56!important;' ,' color:#3E5E00 !important' ,'}' ,'' ,'a,a:hover,' ,'i,' ,'.zu-autohide,' ,'.zm-votebar button,' ,'.zm-item-comment:hover .zm-comment-op-link,' ,'.zm-comment-op-link,' ,'.zm-side-trend-row:hover .zm-side-trend-del,' ,'.zm-side-trend-del,' ,'.zm-side-nav-li,' ,'.zu-main-feed-fresh-button,' ,'.zg-icon,' ,'.zm-side-nav-li:hover .zg-icon,' ,'.zm-side-nav-li:hover i,' ,'.unpin,' ,'.zm-side-nav-li:hover .unpin {' ,' -moz-transition:color .2s linear,opacity .15s linear,background-color .2s linear,background-position .2s linear .1s;' ,' -webkit-transition:color .2s linear,opacity .15s linear,background-color .2s linear,background-position .2s linear .1s;' ,' transition:color .2s linear,opacity .15s linear,background-color .2s linear,background-position .2s linear .1s;' ,'}' ,'' ,'h3{ line-height:25px }' ,'.zu-footer-inner {padding:15px 0!important}' ,'.zm-side-pinned-topics .zm-side-nav-li{float:left;padding-right:30px!important}' ,'.zm-side-list-content{clear:both}' ,'.unpin{ display:inline-block!important }' ,''].join('\n'); } var css_comment=''; if(pageIs.Home||pageIs.Question||pageIs.Answer){ css_comment = window.iZhihu.Comment.css; } css += window.iZhihu.Answer.css; if(window.iZhihu.QuickFavo){ css += window.iZhihu.QuickFavo.css; } if(window.iZhihu.QuickBlock){ css += window.iZhihu.QuickBlock.css; } if(window.iZhihu.Noti7){ css += window.iZhihu.Noti7.css; window.iZhihu.Noti7.enhance(); } var heads = _doc.getElementsByTagName("head"); if (heads.length > 0) { var node = _doc.createElement("style"); node.type = "text/css"; node.id = "izhCSS_main"; node.appendChild(_doc.createTextNode(css)); heads[0].appendChild(node); if(css_comment!=''){ node = _doc.createElement("style") node.type = "text/css"; node.id = "izhCSS_comment"; node.appendChild(_doc.createTextNode(css_comment)); heads[0].appendChild(node); } } if(!$('.modal-dialog-bg').length){ $body.append( $('',{ href:'#answer-'+$a.attr('data-aid') , target:'_self' , style:css_AuthorListItemA }) , $ppl=$('
  • ').append($ppla) , $uno=iZhihu.$unoAnswers if(collapsed){ $ppl.appendTo($pp) }else{ $ppl.insertBefore($uno.$endOfLastA) } if($a.attr('data-isowner')=='1'){ iZhihu.Answer._e=$a.get(0); $ppla.append($('', { 'class': 'me' })); } var nameCSS='name'; if($a.attr('data-isfriend')=='1'){ nameCSS+=' friend'; } if(collapsed){ nameCSS+=' collapsed' } if(!$author.length){ nameCSS+=' noname'; } $('',{ 'class':nameCSS , style:css_AuthorListItemA_name }).text(!$author.length?'匿名用户':$author.text()).appendTo($ppla); if ($ppl.width()>iZhihu.Answer.ppWidth) iZhihu.Answer.ppWidth=$ppl.width(); // Region end // Region: 回答篇幅指示 var nHP=Math.ceil($('.zm-editable-content',$a).text().length/100); $('',{ 'class':'hp' }).css({'width':nHP*10,'margin-left':-nHP*10}).appendTo($ppla); // Region end $ppla.mouseover(function(){ var $frm=$(this.parentNode.parentNode.parentNode) , $uno=iZhihu.$unoAnswers $(this).addClass('sel'); if(iZhihu.Answer._e){ $uno.children('.meT').css('display',0>iZhihu.Answer._e.offsetTop-$frm.scrollTop()?'':'none'); $uno.children('.meB').css('display',$frm.height() .zm-item-rich-text' , ctx=nam.is('.collapsed')?'#zh-question-collapsed-wrap':'#zh-question-answer-wrap' , div=$(sel,ctx) , cmt=$('.zm-item-meta > .zu-question-answer-meta-comment',div.parent()) ; if(!prv.length){ prv=$('
    ',{ 'class':div.class }) .addClass('izh-answer-preview').width(div.width()+22) .mouseover(function(){$uno.mouseover();$('li a[href=#'+$(this).attr('data-aid')+']',$uno).addClass('sel');$(this).show();}) .mouseout(function(){$uno.mouseout();$('li a[href=#'+$(this).attr('data-aid')+']',$uno).removeClass('sel');$(this).hide();}) .click(function(){$('li a[href=#'+$(this).attr('data-aid')+']',$uno)[0].click();}) .insertAfter($uno) ; } if(prv.attr('data-aid')!=aid){ prv.attr('data-aid',aid).empty().append(div.clone().children()).find('a').attr('onclick','return false;'); if($('span.me',this).length) prv.find('a.zu-edit-button').remove(); if(!nam.hasClass('noname')) $('img.zm-list-avatar',div.parent()).clone().appendTo(prv); var t=cmt.text(),i=t.indexOf('条评论'); if(cmt.length&&i>0) $('',{'class':'comment'}).text(t.substring(0,i)).prepend(cmt.children('i').clone()).appendTo(prv); } var th=div.height()+33 , maxTop=$uno.position().top+12 , contentPosition=''; if(maxTop+th<$win.height()){ if(top+th<$win.height()){ prv.css({'top':top>maxTop?top:maxTop,'bottom':''}); }else{ prv.css({'top':'','bottom':0}); } }else{ prv.css({'top':maxTop,'bottom':0}); contentPosition='absolute'; } prv.css({'left':$uno.width()}).show().children().first().css('position',contentPosition); // Region end }).mouseout(function(){ $(this).removeClass('sel'); var $uno=$(this.parentNode.parentNode.parentNode.parentNode); $uno.next().hide(); }).click(function(){$(this).mouseout(); iZhihu.$unoAnswers.css('left',9-iZhihu.$unoAnswers.width());}); if(iZhihu.Answer._e==$a.get(0)){ iZhihu.Answer._e=$ppla.get(0); } } } if(iZhihu.QuickFavo) iZhihu.QuickFavo.addQuickFavo($favo,$a); $meta.bind('DOMNodeInserted',function(event){ iZhihu.Comment.processComment($(event.target)); }); iZhihu.Comment.processCommentButton($a); var $cm=$('.zm-comment-box',$a); if($cm.length && $cm.is(':visible')){ var focusName = iZhihu.Comment.scrollFocusCommentOnPageLoad($cm); iZhihu.Comment.metaScrollToViewBottom($cm.closest('.zm-item-meta'),function(){ iZhihu.Comment.processComment($cm, focusName); }); } $a.attr('izh_processed','1'); }; return this; } /** * @class Comment */ function Comment(iZhihu) { if ( typeof iZhihu === 'undefined' || !iZhihu) { return null; } iZhihu.Comment = this; var css_comment={ 'background-color':'#fff' , 'outline':'none' , 'z-index':'9999' , 'border-radius':'0 6px 0 0' , 'position':'absolute' , 'visibility':'hidden' , 'top':-70 } ; this.RightComment = iZhihu.config['ShowComment']; this.AutoScrollPageWhenClosing = iZhihu.config['RightComment_AutoScrollPageWhenClosing']; if (!this.RightComment){ this.css = ['.zm-comment-box.empty .izh-button-cc{display:none;}' ,''].join('\n'); } else { this.css = ['.mention-popup{z-index:10000 !important;}' ,'.zm-item-meta .meta-item.toggle-comment{display:block;float:right;margin-left:7px !important;}' ,'.zm-comment-box{position:absolute;margin-top:0;}' ,'.zm-comment-box .icon-spike{display:none !important;}' ,'.zm-comment-box > .zm-comment-box-ft{position:absolute;top:0;left:0;right:0;}' ,'.zm-comment-box.empty{padding-top:10px !important;}' ,'.zm-comment-box > .zm-comment-form{margin:15px !important;}' ,'.zm-comment-box.empty > .zm-comment-form{bottom:25px;}' ,'.zm-comment-box > .zm-comment-form .zm-comment-editable{position:absolute;bottom:60px;top:0;left:0;right:0;overflow:auto;}' ,'.zm-comment-box.empty > .zm-comment-form .zm-comment-editable{bottom:25px;}' ,'.zm-comment-box > .zm-comment-form .zm-command{position:absolute;left:0;right:0;bottom:40px;}' ,'.zm-comment-box.empty > .zm-comment-form .zm-command{bottom:10px;}' ,'.zm-comment-box [class^=izh-buttons-cm]{position:absolute;top:70px;}' ,'.zm-comment-box.empty [class^=izh-buttons-cm]{top:auto;bottom:30px;z-index:10;}' ,'.zm-comment-box .izh-buttons-cm-L{left:0;}' ,'.zm-comment-box .izh-buttons-cm-L > a{margin-right:7px;}' ,'.zm-comment-box .izh-buttons-cm-R{right:1em;}' ,'.zm-comment-box .izh-buttons-cm-R > a{margin-left:7px;}' ,'.zm-comment-box a.izh-button.on{color:#225599;text-shadow:0 0 1px #225599;}' ,'.zm-comment-box a.izh-button .zg-icon{opacity:0.5;}' ,'.zm-comment-box a.izh-button.on .zg-icon{opacity:1;}' ,'.zm-comment-box a.izh-button.off{color:#eee;}' ,'.zm-comment-box a.izh-button.off .zg-icon{opacity:0.2;}' //,'.zm-comment-box.empty [class^=izh-buttons-cm]{top:auto;bottom:7px;}' ,'.zm-comment-box.empty .zm-comment-list{visibility:hidden;}' ,'.zm-comment-box .zm-comment-list .zm-item-comment[izh_hilight]{background-color:rgb(255,255,160);}' ,'.zm-comment-box .izh-button.on .zg-icon-comment-like{background-position:-222px -79px;}' ,'.zm-comment-box .izh-button .z-icon-fold{height:6px;}' ,''].join('\n'); this.onWinLoad=function(){ var iZhihu=window.iZhihu; iZhihu.$win.scroll(function(event){ if(iZhihu.Comment.Opening&&!iZhihu.Comment.PageNotScroll){ var animate=true; iZhihu.Comment.box($(iZhihu.Comment.Opening),true,animate); } }); iZhihu.$win.resize(function(event){ if(iZhihu.Comment.Opening){ var $cm=$(iZhihu.Comment.Opening); iZhihu.Comment.Opening = null; iZhihu.Comment.close(null,$cm); iZhihu.Comment.open(null,$cm); } }); if(iZhihu.ScrollTop){ document.body.scrollTop=iZhihu.ScrollTop; } } this.onWinLoad() } this.processCommentButton = function($a){ if(iZhihu.Comment.RightComment){ var $bc=$a.find('.meta-item.toggle-comment'); $bc.prependTo($bc.parent()); } }; this.scrollFocusCommentOnPageLoad = function($cm){ if(!iZhihu.Comment.RightComment)return; var focusName=url.data.attr.fragment; if(!focusName||focusName=='')return; if(window.iZhihu4CRX){ var $icm2C=$cm.find('.zm-comment-list .zm-item-comment a.zg-anchor-hidden[name="'+focusName+'"]').parent() , offsetTop=$icm2C.length?$icm2C.offset().top:0 ;if(offsetTop){document.body.scrollTop=offsetTop;} } return focusName; }; this.metaScrollToViewBottom = function($itemMeta,funcAfterScroll,always,animate){ if(!iZhihu.Comment.RightComment || !iZhihu.Comment.AutoScrollPageWhenClosing){ if(funcAfterScroll){funcAfterScroll();} return; } if(typeof always === 'undefined')always=true;//if false, scrolling only when the .zm-item-meta out of visible range if(typeof animate === 'undefined')animate=false;//if false, scrolling instantly if(always)$itemMeta.children('.zm-comment-box').css('position','fixed'); var winHeight=iZhihu.$win.height() , scrollObj=window.iZhihu4CRX?document.body:document.documentElement , scrollTopNow=scrollObj.scrollTop , navHeight=iZhihu.$body.children().first().height() , bar=$('.zu-global-notify.zu-global-notify-info:visible') , barHeight=!bar.length?0:bar.outerHeight() , baseTop=((barHeight&&bar.css('position')=='fixed')?barHeight:(scrollTopNow>barHeight?0:barHeight-scrollTopNow))+navHeight , maxHeight=winHeight-baseTop , metaHeight=$itemMeta.innerHeight() , offsetTop=$itemMeta.offset().top , offsetBottom=offsetTop+metaHeight , $item=iZhihu.getItem($itemMeta) , itemHeight=$item.innerHeight() , offsetTopA=$item.offset().top , offsetBottomA=offsetTopA+itemHeight , scrollTopEnd=itemHeight>maxHeight?offsetBottom-winHeight:(offsetTopA<=scrollTopNow?offsetTopA-baseTop:offsetBottom-winHeight) ; if(!always){ always=offsetTopscrollTopNow+winHeight-baseTop; } if(always){ iZhihu.ScrollTop=scrollTopEnd; if(animate){ $(scrollObj).animate({'scrollTop':scrollTopEnd},funcAfterScroll); }else{ $(scrollObj).scrollTop(scrollTopEnd); if(funcAfterScroll){funcAfterScroll();} } }else{ if(funcAfterScroll){funcAfterScroll();} } }; this.box = function($cm,keepSize,animate){if(!$cm||!$cm.length)return; $cm.stop(); if(typeof keepSize === 'undefined')keepSize=false; if(typeof animate === 'undefined')animate=false; var winHeight=iZhihu.$win.height() , th=keepSize?parseInt($cm.attr('izh_cmHeight')):0 , scrollTop=(document.body.scrollTop)?document.body.scrollTop:document.documentElement.scrollTop , navHeight=iZhihu.$body.children().first().height() , bar=$('.zu-global-notify.zu-global-notify-info:visible') , barHeight=!bar.length?0:bar.outerHeight() , baseTop=((barHeight&&bar.css('position')=='fixed')?barHeight:(scrollTop>barHeight?0:barHeight-scrollTop))+navHeight , minHeight=112 , maxHeight=winHeight-baseTop-35 , tooSmall=maxHeight0)$l.css({'position':'absolute','height':'','top':'','bottom':''}); th=$l.height(); th+=th==0?minHeight:100; $t.remove();$t=null;//console.log(th); $cm.css('height',th<=minHeight?minHeight:(thwinHeight){ target={'top':-offsetBottom-th-metaHeight+fixHeight,'bottom':offsetBottom}; }else{ offsetTop+=((!tooSmall)&&top>baseTop?top:baseTop); target={'top':offsetTop,'bottom':-offsetTop-th-metaHeight+fixHeight}; } $cm.filter('.empty').find('.zm-comment-form .zm-comment-editable').css({'bottom':''}); }else{ target={'top':offsetTop+baseTop,'bottom':offsetBottom}; $cm.filter('.empty').find('.zm-comment-form .zm-comment-editable').css({'bottom':'20px'}); } if(animate){ $cm.animate(target,function(){$cm.css(other);}); }else{ $cm.css($.extend(target,other)); } $cm; }; this.open = function($ac,$cm,icmFocus){// if $ac is null, just re-sizing and re-locating comment-box var noCommentOpening = iZhihu.Comment.Opening == null; iZhihu.Comment.Opening = $cm.attr('izh-opening','1').css({'display':'none'}).get(0); $('.zm-comment-box:visible:not([izh-opening=1])') .each(function(i,e){ $(e).css('visibility','hidden').closest('.zm-item-meta').find('.toggle-comment')[0].click(); }); var winWidth=iZhihu.$win.width() , mcLeft=iZhihu.$main.offset().left , $ct=$cm.closest('.zu-main-content-inner') , ctMarginL=parseInt($ct.css('margin-left')) , ctWidth=$ct.width()+ctMarginL , ctLeft=$ct.offset().left-ctMarginL , $meta=$cm.closest('.zm-item-meta') , mtWidth=$meta.innerWidth() , minWidth=iZhihu.$main.width()-ctWidth , cmWidth=mtWidth , maxWidth=winWidth-ctWidth , o=function(){ $cm.attr('opened','1'); if(!$ac){ iZhihu.Comment.box($cm); return; } var currTop=_doc.body.scrollTop , $n=$ac.next(),$n=$n.length?$n:$ac.parent().next() , t=$ac.offset().top-iZhihu.$main.offset().top , b=$ac.offset().top-iZhihu.$main.offset().top , w=$ac.width() , inAnswer=$ac.is('.zm-item-answer') , inQuestion=$ac.is('#zh-question-detail') , $questionMeta=$('#zh-question-meta-wrap')//question_meta , h=inQuestion?$questionMeta.offset().top+$questionMeta.height()+parseInt($questionMeta.css('padding-bottom'))-iZhihu.$main.offset().top :$ac.height()+parseInt($ac.css('padding-bottom'))+parseInt($n.css('padding-top')) ; if(!$ac.find('.izh_tape_a,.izh_tape_b').length) $ac .append($('
    ', { 'class': 'izh_tape_a' })) .append($('
    ', { 'class': 'izh_tape_b' })) if(!$cm)$cm=$ac.find('.zm-comment-box'); if($cm.length){ if(!$cm.attr('tabindex')){ $cm.attr('tabindex','-1').focus(); } if(inQuestion){ $('#izh_QuestionShadow').css({ 'height':h , 'margin-bottom':-h }).show(); $questionMeta.next(':visible').andSelf().addClass('izh_noBorder'); }else{ $ac.addClass('izh_boxShadow'); } $ac.find('.izh_tape_a').css({ 'position':'absolute' , 'width':1 , 'height':h , 'top':0 , 'margin-left':w-1 , 'z-index':'10000' , 'background-color':'#fff' }).show(); iZhihu.Comment.box( $cm.css({'left':mtWidth-1}).attr('izh_inQuestion',inQuestion?'1':'0').removeAttr('izh-opening') ); $('.mention-popup').attr('data-aid',$ac.attr('data-aid')); }else{ $ac.find('.zu-question-answer-meta-comment')[0].click(); } $ac.find('.izh_tape_b').css({ 'position':'absolute' , 'width':1 , 'height':h , 'top':0 , 'margin-left':w , 'z-index':'9998' , 'background-color':'#eee' }).show(); //$ac.css('border-color','#999999'); //$n.css('border-color','#999999'); $('.zh-backtotop').css('visibility','hidden'); iZhihu.$body.scrollTop(currTop); if(icmFocus){ var $icm=$(icmFocus).attr('izh_hilight','1') , $list=$icm.closest('.zm-comment-list'); $list.scrollTop(icmFocus.offsetTop-$list.get(0).offsetTop); iZhihu.Comment.HiLightItem=icmFocus; iZhihu.Comment.HiLightColor='rgb(255,255,160)'; $icm.click(function(){ var iZhihu=window.iZhihu; if(iZhihu&&iZhihu.Comment.HiLightItem){ $(iZhihu.Comment.HiLightItem).removeAttr('izh_hilight'); } }); } }; if(maxWidth>549)maxWidth=549; if(cmWidth>maxWidth) cmWidth=maxWidth; if(cmWidth0){ if(shiftLeft>ctLeft){shiftLeft=mcLeft;} else if(cmWidthOver>0){shiftLeft-=cmWidthOver;} } if(shiftLeft<0){shiftLeft=0;} if(shiftLeft && $ac){ $ct.css({'position':'relative','left':0}).animate({left:-shiftLeft},o); }else{ $ct.css({'position':'relative','left':-shiftLeft}); o(); } }else{ o(); } }; this.close = function($ac,$cm){ if(!$cm)$cm=$ac.find('.zm-comment-box'); var $ct=$cm.closest('.zu-main-content-inner'); var o=function(){ $(this).css('position',''); if(!$ac)return; var $n=$ac.next() , $n=$n.length?$n:$ac.parent().next() , inQuestion=$ac.is('#zh-question-detail'); if(!$ac){return;} if(inQuestion){ $('#izh_QuestionShadow').hide(); $('#zh-question-meta-wrap').next(':visible').andSelf().removeClass('izh_noBorder'); }else{ $ac.removeClass('izh_boxShadow'); } //$ac.css('border-color','#DDDDDD'); //$n.css('border-color','#DDDDDD'); $('.izh_tape_a:visible,.izh_tape_b:visible').hide(); $('.zh-backtotop').css('visibility','visible'); }; if(iZhihu.Comment.Opening == $cm.get(0)){ iZhihu.Comment.Opening = null; $ct.animate({left:0},o); }else{ if(!$ac){$ct.css({left:0});} o(); } }; this.processComment = function($cm,focusName){ var loading=false; if($cm.is('.zm-comment-spinner')){ $cm=$cm.closest('.zm-comment-box'); loading=true; } if(!$cm.is('.zm-comment-box'))return; var $item=iZhihu.getItem($cm); if(iZhihu.Comment.RightComment&&loading){ var cmLeft=$item.width()-1; $cm.css({'left':cmLeft,'width':216,'z-index':'10000'}); } if($cm.filter('.zm-comment-box').has('.zm-comment-list').length){ /* Collections for comment $cm.find('.zm-comment-editable').bind('DOMNodeInserted',function(event){ var $c=$(event.target),$cm=$c.closest('.zm-comment-box'); if($c.is('a.member_mention')){ if($cm.children('.izh_collections').length<=0){ $('
    loading...
    ').bind('mouseover',function(){ $(this).show(); }).bind('mouseout',function(){ $(this).hide(); }).appendTo($cm); } $c.bind('mouseover',function(){ var $ce=$(this).closest('.zm-comment-editable'),$cm=$(this).closest('.zm-comment-box'); $cm.children('.izh_collections').css({ 'bottom':$(this).height()-$(this).position().top-1 , 'left':$(this).position().left }).show(); $.post('http://www.zhihu.com'+$(this).attr('href')+'/collections' , $.param({_xsrf:$('input[name=_xsrf]').val()}) , function(result,status,xhr){ console.log(result); }); }); $c.bind('mouseout',function(){ var $ce=$(this).closest('.zm-comment-editable'),$cm=$(this).closest('.zm-comment-box'); $cm.children('.izh_collections').hide(); }); } }); */ if(iZhihu.Comment.RightComment){ $cm.closest('.zm-item-meta').find('.toggle-comment').click(function(event){ var $openedBy=$(this) , $ac=$openedBy.closest('.zm-item-meta') , $cm=($ac.parent().is('.zm-item-meta.feed-meta')?$ac.parent():$ac).find('.zm-comment-box').css('visibility','hidden') ; if($cm.length){ var $item=iZhihu.getItem($cm); if($cm.is(':hidden')){ iZhihu.Comment.open($item,$cm); }else{ iZhihu.Comment.close($item,$cm); } } }); } //if($cm.is('.empty')) return; var $list=$cm.find('.zm-comment-list'); $list.bind('DOMNodeInserted',function(event){ //utils.observeDOMNodeAdded($list[0],function(event){ /*if(!event.addedNodes)return; console.log('Nodes '+event.addedNodes.length+' inserted'); for(var i=0;i1){ return; } //console.log('Refreshing comment list'); $('.izh-quick-block-switch',$cm).add('.izh-buttons-cm-R',$cm).show(); iZhihu.Comment.box($cm,false,false); if(notAll||countRest<0)$list.scrollTop($icm.get(0).offsetTop); } } }else if($icm.is('.zm-comment-form')){ if(iZhihu.Comment.RightComment){ if($cm.length){ var $rcm=$icm; $icm=$rcm.closest('.zm-item-comment'); $rcm.find('a.zm-comment-close.zm-command-cancel').click(function(event){ var $rcm=$(this).closest('.zm-comment-form').hide() , $cm=$rcm.closest('.zm-comment-box:visible'); if($cm.length){ iZhihu.Comment.box($cm,false,false); } }); $rcm.parent().find('a.reply.zm-comment-op-link').click(function(event){ var $rcm=$(this).closest('.zm-comment-content-wrap').children('.zm-comment-form').toggle() , $icm=$(this).closest('.zm-item-comment') , $list=$icm.closest('.zm-comment-list') , $cm=$list.closest('.zm-comment-box:visible'); if($cm.length){ iZhihu.Comment.box($cm,false,false); if($rcm.is(':visible'))$list.scrollTop($icm.get(0).offsetTop-$list.get(0).offsetTop); $rcm.toggle(); } }); iZhihu.Comment.box($cm,false,false); $list.scrollTop($icm.get(0).offsetTop-$list.get(0).offsetTop); } } } }); var cmClose=function(event,alsoScrollToViewBottom){ var $cm=$(this).closest('.zm-comment-box'); if($(this).is('[name=closeform]')&&(!$cm.is('.empty')))return; var $item=iZhihu.getItem($cm)//.attr('tabindex','-1').focus().removeAttr('tabindex') , $itemMeta=$cm.closest('.zm-item-meta') , alsoScroll=this.getAttribute('izh-alsoScrollToViewBottom')||'' , scrollTop=(document.body.scrollTop)?document.body.scrollTop:document.documentElement.scrollTop ; if(alsoScroll!=='1'){ $itemMeta.find('.toggle-comment')[0].click(); setTimeout(function(){ document.body.scrollTop=scrollTop; document.documentElement.scrollTop=scrollTop; },100); return; } iZhihu.Comment.metaScrollToViewBottom($itemMeta,function(){ $itemMeta.find('.toggle-comment')[0].click(); },false,true); } , $btnCC=$('',{ 'class':'zu-question-answer-meta-comment izh-button-cc' , href:'javascript:void(0);' , click:cmClose , 'data-tip':'s$t$收起评论并跳转至所属回答' }).text('收起') , $buttonsL=$('
    ',{ 'class':'izh-buttons-cm-L' }).prependTo($cm) , $buttonsR=$('
    ',{ 'class':'izh-buttons-cm-R' }) ; if(iZhihu.Comment.RightComment){ $cm.children('.zm-comment-form').find('[name=closeform]').click(cmClose); $btnCC.clone(true).css({ 'background-image': 'url("/static/img/sprites-1.9.2.png")' , 'background-position': '-261px -62px' , 'background-repeat': 'no-repeat' , 'display': 'inline-block' , 'width': 15 , 'height': 15 , 'position': 'absolute' , 'left': 0 , 'top': 0 , 'z-index': '10000' }).attr('data-tip','s$l$收起评论').text('').prependTo($cm) $buttonsR.prependTo($cm); if($list.children().length==0){ $buttonsR.hide(); } $btnCC.css({ 'float':'left' , 'margin-left':7 }).attr('izh-alsoScrollToViewBottom','1').prepend('').prependTo($buttonsL); $('',{ 'class':'izh-button izh-back-top' , 'data-tip':'s$l$返回顶部' , href:'javascript:void(0);' , click:function(){ $(this.parentNode).nextAll('.zm-comment-list').scrollTop(0); } }).append( $('', { 'class': 'zg-icon z-icon-fold' }) ).add( $('',{ 'class':'izh-button izh-show-good' , 'data-tip':'s$l$人气妙评' , href:'javascript:void(0);' , click:function(){ var $e=$(this) , $c=$e.closest('.zm-comment-box') , $l=$c.find('.zm-comment-list') , $n=$l.find('.zm-item-comment').has('span.like-num.nil') ; if($e.hasClass('on')){ $e.attr('scrollTop_showgood',$l[0].scrollTop); $n.show(); iZhihu.Comment.box($c,false,false); $e.removeClass('on'); var scrollTop = parseInt($e.attr('scrollTop')); if(!isNaN(scrollTop)) $l.scrollTop(scrollTop); }else{ $e.attr('scrollTop',$l[0].scrollTop); $n.hide(); iZhihu.Comment.box($c,false,false); $e.addClass('on'); var scrollTop = parseInt($e.attr('scrollTop_showgood')); if(!isNaN(scrollTop)) $l.scrollTop(scrollTop); } } }).append( $('', { 'class': 'zg-icon zg-icon-comment-like' }) ) ).css({ 'float':'right' }).appendTo($buttonsR); iZhihu.Comment.PageNotScroll = true; $list.scroll(function(){ var $e=$(this) , $b=$e.closest('.zm-comment-box').find('.izh-back-top') ; if($e.height() < this.scrollTop){ $b.removeClass('off'); }else{ $b.addClass('off'); } }).scroll(); iZhihu.Comment.PageNotScroll = false; var icmFocus=null; $list.css({ 'height':$cm.is('.empty')?'':'100%' , 'overflow':'auto' }); $list.children('.zm-item-comment').each(function(i,e){ var $icm=$(e); $icm.bind('DOMNodeRemoved',function(event){ var $icm=$(event.target); if(!$icm.is('.zm-item-comment'))return; var $cm=$icm.hide().closest('.zm-comment-box:visible'); if($cm.length){ if($(this).closest('.zm-comment-list').children().length==1){ $('.izh-quick-block-switch',$cm).add('.izh-buttons-cm-R',$cm).hide(); } iZhihu.Comment.box($cm,false,false); } }); $icm.find('span.like-num').each(function(i,e){ var tip=e.getAttribute('data-tip').replace('s$r$','s$l$'); if(tip!='')e.setAttribute('data-tip',tip); }); if (!icmFocus&&focusName&&focusName!='' && $icm.children('a.zg-anchor-hidden[name="'+focusName+'"]').length){ icmFocus=$icm.get(0); } }); iZhihu.Comment.open($item,$cm,icmFocus); utils.observeDOMNodeAdded($cm.children('.zm-comment-form').children('.zm-comment-editable')[0],function(event){ var $e=$(event.target) , $f=$e.closest('.zm-comment-form') , $l=$f.prev('.zm-comment-list') , $c=$f.closest('.zm-comment-box[opened=1]') , ch=$c.height() , winHeight=iZhihu.$win.height() , scrollTop=document.documentElement.scrollTop+document.body.scrollTop , navHeight=iZhihu.$body.children().first().height() , bar=$('.zu-global-notify.zu-global-notify-info:visible') , barHeight=!bar.length?0:bar.outerHeight() , baseTop=((barHeight&&bar.css('position')=='fixed')?barHeight:(scrollTop>barHeight?0:barHeight-scrollTop))+navHeight , minHeight=112 , maxHeight=winHeight-baseTop-35 ; if(!$c.length)return; if(!$c.is('.empty')&&$l.children().length>0){ lh=$l.height(); }else{ lh=0; } var $t=$e.clone().appendTo(document.body) .css({'position':'absolute','z-index':'-1','width':$e.width(),'min-height':22}) , eh=$t.height() , h=Math.max(eh,lh)+(lh==0?90:100) ; $t.remove();$t=null; if(isNaN(ch)||ch!=h){ $c.attr('izh_cmHeight',h); iZhihu.Comment.box($c,true,false); } if(!$f.is('.expanded')&&event.addedNodes.length){ $f.css({'height':'','bottom':''}); }else{ eh+=30; $f.css(lh==0||eh>ch?{'height':'','bottom':25}:{'height':eh,'bottom':''}); } }); }else{ $btnCC.prepend('') .css({ 'position':'absolute' , 'cursor':'pointer' , 'margin-left':-1 , 'left':0 , 'background-color':'#fbfbfb' , 'padding':'2px 5px' , 'bottom':-22 , 'border':'1px solid #ddd' , 'border-radius':'4px' }).insertBefore($cm.find('.zm-comment-box-ft')); } if(iZhihu.QuickBlock){ iZhihu.QuickBlock.addQuickBlockInCommentList($buttonsL); } } }; return this; } /** * @class Noti7 */ function Noti7(iZhihu) { if ( typeof iZhihu === 'undefined' || !iZhihu || !iZhihu.config['Noti7']) { return null; } iZhihu.Noti7 = this; this.$noti7 = $('#zh-top-nav-live-new'); this.$frame = $('.zm-noti7-frame',this.$noti7); this.$content = $('.zm-noti7-content-body',this.$noti7); this.$footer = $('.zm-noti7-popup-footer',this.$noti7); this.$tab = $('.zm-noti7-popup-tab-container','#zh-top-nav-live-new-inner'); this.css = ['#zh-top-nav-live-new .zm-noti7-popup-footer a[unreadonly="1"]{color:#225599 !important;text-shadow:0 0 1px #225599;}' ,''].join('\n'); this.enhance = function(){ iZhihu.Noti7.$tab.find('.zm-noti7-popup-tab-item').each(function(i,e){ utils.observeDOMAttrModified(e,function(event){ var $e=$(event.target); if($e.is('.zm-noti7-popup-tab-item.current')){ var currentClass=$e.attr('class') , $bFilterRead=$('.izh-filter-read',iZhihu.Noti7.$footer); if(currentClass!=$bFilterRead.attr('currentClass')){ $bFilterRead.attr({'unreadOnly':'','currentClass':currentClass}); } } }); }); iZhihu.Noti7.$footer.append( $('',{ 'class':'izh-filter-read' , href:'javascript:void(0);' , 'unreadOnly':'' , click:function(){ var unreadOnly=this.getAttribute('unreadOnly')=='1' , $contentVisible=iZhihu.Noti7.$content.filter(':visible') , $scroller=$contentVisible.closest('.zh-scroller-inner') , $items=$contentVisible.find('.zm-noti7-content-item') ; unreadOnly=!unreadOnly; this.setAttribute('unreadOnly',unreadOnly?'1':''); if(unreadOnly){ $scroller.attr('scrollTop',$scroller[0].scrollTop); $items.not('.unread').hide(); var scrollTop = parseInt($scroller.attr('scrollTop_unread')); if(!isNaN(scrollTop)) $scroller.scrollTop(scrollTop); }else{ $scroller.attr('scrollTop_unread',$scroller[0].scrollTop); $items.not('.unread').show(); var scrollTop = parseInt($scroller.attr('scrollTop')); if(!isNaN(scrollTop)) $scroller.scrollTop(scrollTop); } } }).text('隐藏已读') ); }; return this; } /** * @class QuickBlock */ function QuickBlock(iZhihu) { if ( typeof iZhihu === 'undefined' || !iZhihu || !iZhihu.config['QuickBlock']) { return null; } iZhihu.QuickBlock = this; /* var css_QuickBlock = { 'background-position':'-146px -202px' , 'width':16 , 'height':16 } ; */ this.Pending = {Users:',',Count:0}; this.Blocking = {Users:',',Count:0}; this.Unfollowed = {Users:',',Count:0}; this.Refollowed = {Users:',',Count:0}; this.Users2B = [] this.Users2BBQ = [] this.css = ['.izh_blockCart{background-color:#0771C1;position:fixed;right:0;z-index:9;padding:0 30px 0 60px;border:1px solid #0771C1;border-left-width:10px;border-top-left-radius:6px;}' ,'.izh_blockCart .do{color:#fff;text-align:center;display:block;margin:2px;min-width:80px;width:100%;height:20px;}' ,'.izh_blockCart.pending .do:after{text-decoration:blink;color:red;}' ,'.izh_blockCart .do:after{position:relative;content:attr(izh_num2B);}' ,'.izh_blockCart .do .button{color:#fff;}' ,'.izh_blockCart .frame{overflow-y:auto;overflow-x:hidden;position:absolute;top:25px;bottom:0;left:0;right:0;background-color:#fff;padding-top:5px;}' ,'.izh_blockCart .list{display:block;margin:2px;width:100%;padding-right:5px;}' ,'.izh_blockCart .list .rel{border-width:0 2px;border-style:solid;border-color:#fff;width:24px;height:18px;}' ,'.izh_blockCart .list.i_fo .rel{border-left-color:#259;background-position:-120px -184px;}' ,'.izh_blockCart .list.fo_i .rel{border-right-color:#259;background-position:-120px -164px;}' ,'.izh_blockCart .list.i_fo.fo_i .rel{background-position:-78px -200px;}' ,'.izh_blockCart .user2B{display:block;margin:2px 0;padding:0 40px 0 60px;}' ,'.izh_blockCart .user2B i.zg-icon{display:block;position:absolute;right:0;margin-top:5px;}' ,'.izh_blockCart .user2B .name{display:block;color:#fff;background-color:#000;white-space:nowrap;padding:2px 5px;border-radius:3px;}' ,'.izh_blockCart .list .user2B.unfo .name{background-color:#f00;}' ,'.izh_blockCart .user2B .del{display:block;position:absolute;margin-left:-4.5em;}' ,'.izh_blockCart .user2B i.say{display:block;position:absolute;margin-left:-44px;border-radius:6px 6px 0 6px;border:1px solid #999;padding:0 5px 0 3px;}' ,'.izh_blockCart .user2B i.say_1{display:block;position:absolute;margin-left:-10px;height:6px;background-color:#fff;width:6px;margin-top:17px;border-bottom:1px solid #999;}' ,'.izh_blockCart .user2B i.say_2{display:block;position:absolute;margin-left:-9px;height:6px;background-color:#fff;width:6px;margin-top:17px;border-radius:0 0 0 6px;border:1px solid #999;border-width:0 0 1px 1px}' ,'.izh-quick-block{position:absolute;text-align:center;width:4em;margin-top:1.5em;white-space:nowrap;}' ,'.izh-quick-block [class^=izh-quick-block]{position:absolute;display:block;white-space:nowrap;}' ,'.izh-quick-block:after{content:attr(izh_num2B);margin-top:1em;display:block;}' ,'.zm-comment-hd .izh-quick-block-pend{position:absolute;left:0;top:40px;}' ,'' ].join('\n'); this.unblockAll = function(){ $('.blocked-users > .item-card').each(function(i,e){ var uid=$(e).attr('data-id'); $.post('/settings/unblockuser',$.param({ _xsrf:$('input[name=_xsrf]').val() , uid:uid }),function(r){ //console.log(r); }); }); }; this.doUnfollow = function(){ var $e = iZhihu.QuickBlock.Users2BBQ.shift() if(typeof $e === 'undefined') return var uid=$e.attr('uid'); $.post('/node/MemberFollowBaseV2' , $.param({ method:'unfollow_member' , params:JSON.stringify({'hash_id':uid}) , _xsrf:$('input[name=_xsrf]').val() }) , function(r){ var query=decodeURIComponent(this.data) , params=utils.getParamInQuery(query,'params') ; eval('params='+params); var bid='fb-'+params.hash_id , who=bid+',' , unfollowed=iZhihu.QuickBlock.Unfollowed , refollowed=iZhihu.QuickBlock.Refollowed , $cartDIV=$('#izh_blockCart') , $user=$cartDIV.find('.user2B[uid='+params.hash_id+']') , $list=$user.closest('.list') ; $user.prependTo($list.next().next()); if(unfollowed.Users.indexOf(','+who)<0) unfollowed.Users += who; if(refollowed.Users.indexOf(','+who)>=0) refollowed.Users = refollowed.replace(','+who,','); } ).always(function(data, textStatus, jqXHR){ iZhihu.QuickBlock.doUnfollow() }); }; this.doQuickBlock = function(){ var $e = iZhihu.QuickBlock.Users2BBQ.shift() if(typeof $e === 'undefined') return var blocking = iZhihu.QuickBlock.Blocking , href = $e.attr('href') , who = href.split('/').pop()+',' ; if(typeof blocking === 'undefined' || !blocking){ blocking = iZhihu.QuickBlock.Blocking = { Users:',', Count:0 }; }else if(blocking.Users.indexOf(','+who) >= 0){ return; // Already blocking } var $cartDIV=$('#izh_blockCart'); $cartDIV.addClass('blocking'); blocking.Users += who; blocking.Count ++; $.post(href+'/block',$.param({ action:'add' , _xsrf:$('input[name=_xsrf]').val() }),function(r){ var href=this.url.replace('/block','') , userID=href.split('/').pop() , who=','+userID+',' , blocking=iZhihu.QuickBlock.Blocking ; if(0==--blocking.Count)$cartDIV.removeClass('pending'); if(blocking.Users.indexOf(who) < 0) return; // No this user in pending blocking.Users = blocking.Users.replace(who,','); $('#izh_blockCart .user2B[href="'+href+'"]').find('.del')[0].click(); $('a[href$="'+href+'"]').css('text-decoration','line-through'); }).always(function(data, textStatus, jqXHR){ iZhihu.QuickBlock.doQuickBlock() }); }; this.resizeBlockCart = function($cartDIV){ function parseCssPx($item, name) { var m = $item.css(name); if (m != 'undefined') { return parseInt(m.replace('px','')); } return 0; } var $userDIV = $cartDIV.find('.list .user2B'); var $titleBox = $('#izh_blockCart .do'); var h = parseCssPx($cartDIV.find('div.frame'),'paddingTop') + ($userDIV.height() + parseCssPx($userDIV,'marginTop')) * $userDIV.length + $titleBox.height() + parseCssPx($titleBox, 'marginTop') + parseCssPx($titleBox, 'marginBottom'); if(h+iZhihu.$main.offset().top', { id: 'izh_blockCart', 'class': 'izh_blockCart' }).css({ 'top':iZhihu.$main.offset().top }).append( $('
    ',{ 'class':'do' , 'izh_num2B':0 , 'title':'下为「候审」列表\n点击左上角可收起/展开\n数字为人犯总数(红色表示仍有人犯正待入列)' }).append( $('',{ 'class':'button delAll' , href:'javascript:void(0);' , title:'清空「候审」列表' , click:function(){ var $cartDIV=$('#izh_blockCart'); $cartDIV.css('bottom','').find('.list').empty(); $(this.parentNode).attr('izh_num2B','0'); $cartDIV.css('height',''); } }).text('大赦').css({ 'display':'block' , 'position':'absolute' , 'left':24 }) ).append( $('',{ 'class':'unfo' , href:'javascript:void(0);' , type:'checkbox' , title:'选中后,将我关注之人标出,改以放逐(取消关注)论处' , click:function(){ var $cartDIV=$(this.parentNode.parentNode) , $users=$('.frame .list.i_fo .user2B',$cartDIV) , $action=$('.action',this.parentNode); if(this.checked){ $users.addClass('unfo'); $action.text('放逐').css('padding','0 2em 0 0').attr('title','对列表内我关注之人取消关注'); }else{ $users.removeClass('unfo'); $action.text('收监').css('padding','0 0 0 2em').attr('title','将下列人犯逐一加入黑名单'); } } }).css({ 'display':'block' , 'float':'left' , 'height':22 , 'line-height':22 }) ).append( $('',{ 'class':'' , href:'javascript:void(0);' , title:'选中后,将我关注的人标出,准备「取消关注」' }).text('从轻').css({ 'display':'block' , 'float':'left' , 'margin-right':20 }) ).append( $('',{ 'class':'button action' , href:'javascript:void(0);' , title:'将下列人犯逐一加入黑名单' , click:function(){ var $cartDIV=$(this.parentNode.parentNode); if($('.unfo',this.parentNode).is(':checked')){ $('.list.i_fo .user2B',$cartDIV).each(function(i,e){ iZhihu.QuickBlock.Users2BBQ.push($(e)) }); iZhihu.QuickBlock.doUnfollow(); }else{ $('.list .user2B',$cartDIV).each(function(i,e){ iZhihu.QuickBlock.Users2BBQ.push($(e)) }); iZhihu.QuickBlock.doQuickBlock(); } } }).text('收监').css({ 'display':'block' , 'float':'right' , 'margin-left':20 , 'margin-right':-10 , 'padding':'0 0 0 2em' }) ).append( $('',{ 'class':'zg-icon zg-icon-double-arrow' , href:'javascript:void(0);' , click:function(){ var $cartDIV=$('#izh_blockCart'); if($cartDIV.attr('mini')!='1'){ $cartDIV.find('.frame').hide(); $cartDIV.css({'height':'','bottom':''}); $cartDIV.attr('mini','1'); }else{ $cartDIV.find('.frame').show(); iZhihu.QuickBlock.resizeBlockCart($cartDIV); $cartDIV.attr('mini','0'); } } }).css({ 'position':'absolute' , 'left':0 , 'top':5 }) ) ).append( $('
    ',{'class':'frame'} ).append( $('
    ',{ 'class':'list i_fo fo_i' }) ).append( $('
    ',{ 'class':'list i_fo' }) ).append( $('
    ',{ 'class':'list fo_i' }) ).append( $('
    ',{ 'class':'list' }) ) ).appendTo(iZhihu.$body); } return $cartDIV } this.in2BlockCart = function(url,retriedCount){ var $e = iZhihu.QuickBlock.Users2B.shift() || null , $cartDIV = iZhihu.QuickBlock.getCartDIV() $cartDIV.addClass('pending'); if(typeof retriedCount == 'undefined') retriedCount = 0 //console.log(retriedCount) if (!$e || $e.length === 0){ if((url||'')==''){ $cartDIV.removeClass('pending') }else{ $.ajax(['',url].join(''),{ type:'GET' , maxRetryCount: 3 }).done(function(data, textStatus, jqXHR){ $.each(data.payload,function(i,e){ iZhihu.QuickBlock.addUser2B(e) }) iZhihu.QuickBlock.in2BlockCart(data.paging.next) }).fail(function(data,textStatus,jXHR){ if (++retriedCount < this.maxRetryCount){ iZhihu.QuickBlock.in2BlockCart(url,retriedCount) }else{ $cartDIV.removeClass('pending') } }) } return } var href = $e.attr('href') , username = href.split('/').pop() , who = username+',' ; if($cartDIV.find('.user2B[href="'+href+'"]').length){ return; } $.ajax('/node/MemberProfileCardV2?'+$.param({params:JSON.stringify({'url_token':username})}), { type: 'GET' , user2B: $e , maxRetryCount: 3 }).done(function(data, textStatus, jqXHR){ iZhihu.QuickBlock.addUser2B(data) iZhihu.QuickBlock.in2BlockCart(url) }).fail(function(data,textStatus,jXHR){ if (++retriedCount < this.maxRetryCount){ iZhihu.QuickBlock.Users2B.unshift(this.user2B) iZhihu.QuickBlock.in2BlockCart(url,retriedCount) }else{ } }).always(function(data,textStatus,jXHR){ $('#izh_blockCart').removeClass('pending'); }); }; this.addUser2B=function(data){ if (data === '') return var $html=$(data.replace(utils.RegexSrcPic, '')) , isZHPC=$html.is('.zh-profile-card') , $avatarLink=isZHPC?$html.find('.avatar-link:first'):$html.find('.zm-item-link-avatar:first') , href=$avatarLink.attr('href') if((href||'')=='')return var userID=href.substr(8) , userName=isZHPC?$avatarLink.text():$avatarLink.attr('title') , $btnFollow=$html.find('button[data-follow]') , hashID=!$btnFollow.length?'':$btnFollow.attr('data-id') , f_=$btnFollow.length&&$btnFollow.is('.zg-btn-unfollow') , _f=$btnFollow.length&&$btnFollow.is('[data-followme=1]') , cssF=_f||f_?'zg-icon rel ':'' , $cartDIV=iZhihu.QuickBlock.getCartDIV() , $cart=$cartDIV.find('.list') , who=','+userID+',' ; if(hashID==''){ return; // User blocked or you blocked } if($cartDIV.find('.list .user2B[href="'+href+'"]').length){ return; // User already in block list } var $user2B=$('
    ',{ 'class':'user2B'+(f_&&$cartDIV.find('.do .unfo:checked').length?' unfo':'') , 'href':href , 'uid':hashID }) .append( $('',{ 'class':'button del' , href:'javascript:void(0);' , click:function(){ var $user=$(this).closest('.user2B') , $cartDIV=$('#izh_blockCart') ; $user.remove(); var num2B=$cartDIV.find('.list .user2B').length; $cartDIV.children('.do').attr('izh_num2B',num2B==0?'0':num2B>999?'1k+':num2B); if(num2B) iZhihu.QuickBlock.resizeBlockCart($cartDIV); else $cartDIV.css('height',''); } }).text('赦') ).append( $('',{ 'class':'say' , 'data-tip':'p$t$'+userID }).text('冤枉') ).append($('',{'class':'say_1'}) ).append($('',{'class':'say_2'}) ).append($('',{'class':cssF}) ).append( $('',{ 'class':'name' , href:href , target:'_blank' }).text(userName) ).show() ; if(f_&&_f){ $cart.eq(0).append($user2B); }else if(f_){ $cart.eq(1).append($user2B); }else if(_f){ $cart.eq(2).append($user2B); }else{ $cart.eq(3).append($user2B); } var num2B=$cartDIV.find('.list .user2B').length; $cartDIV.children('.do').attr('izh_num2B',num2B==0?'0':num2B>9999?'10k+':num2B); iZhihu.QuickBlock.resizeBlockCart($cartDIV); } this.addQuickBlock = function($a){ var $voteInfo=$('.zm-item-vote-info',$a) if($voteInfo.length){ var $voters=$voteInfo.children('.voters') if($voters.length){ var s=[',',$voteInfo.attr('data-votecount'),'个也不能忍,果断撕'].join('') , aid=$a.attr('data-aid')||$a.children('[itemprop="ZReactor"]').attr('data-id') , url=['/',$a.attr('data-type')=='p'?'post':'answer','/',aid,'/voters_profile'].join('') $('',{href:'javascript:;','class':'text'}).text(s).bind('click',function(event){ var $t=$a.find('.author-info > a.name,.zm-item-answer-author-info > a.author-link') if($t&&$t.length){ iZhihu.QuickBlock.Users2B.push($t) } iZhihu.QuickBlock.in2BlockCart(url) }).appendTo($voteInfo) } } }; this.addQuickBlockInOneComment = function($cmItem){ var $where=$('.zm-comment-hd',$cmItem); if($where.find('.izh-quick-block-pend').length)return; $('',{ 'class':'izh-quick-block-pend izh-button' , href:'javascript:void(0);' , 'data-tip':'s$l$将此人列入候审名单以待收监' }).text('候审').click(function(){ var $e = $(this).next() iZhihu.QuickBlock.Users2B.push($e) iZhihu.QuickBlock.in2BlockCart(); }).prependTo($where).hide(); }; this.addQuickBlockInCommentList = function($where){ // Region: 快速屏蔽 var $cm=$where.is('.zm-comment-box')?$where:$where.closest('.zm-comment-box') , $u=$('.zm-item-comment',$cm) ; $u.each(function(i,e){ iZhihu.QuickBlock.addQuickBlockInOneComment($(e)); }); var $btnQuickBlock=$('',{ 'class':'izh-quick-block-switch izh-button' , href:'javascript:void(0);' , 'data-tip':'s$t$开始从评论者中选择屏蔽对象' }).text('快速屏蔽').css({'margin-left':7}).prependTo($where).click(function(){ if(this.getAttribute('on')=='1'){ $('.zm-comment-hd .izh-quick-block-pend').hide(); $(this).attr({'data-tip':'s$t$开始从评论者中选择屏蔽对象','on':'0'}).removeClass('on'); } else{ $('.zm-comment-hd .izh-quick-block-pend').show(); $(this).attr({'data-tip':'s$t$结束从评论者中选择屏蔽对象','on':'1'}).addClass('on'); } }) ; if($cm.is('.empty')){ $btnQuickBlock.hide(); } // Region end }; iZhihu.$body.bind('DOMNodeInserted',function(event){ $(event.target).filter('#zh-tooltip').bind('DOMNodeInserted',function(event){ var $a=$(event.target).filter('#zh-tooltip-people').find('a[name=focus]') , bid=$a.attr('id') , who=','+bid+',' ; if($a.is('.zg-btn-unfollow')&&iZhihu.QuickBlock.Unfollowed.Users.indexOf(who)>=0){ $a.text('关注').removeClass('zg-btn-unfollow').addClass('zg-btn-follow'); } if($a.is('.zg-btn-follow')&&iZhihu.QuickBlock.Refollowed.Users.indexOf(who)>=0){ $a.text('取消关注').removeClass('zg-btn-follow').addClass('zg-btn-unfollow'); } }); }); return this; } /** * @class QuickFavo */ function QuickFavo(iZhihu) { if ( typeof iZhihu === 'undefined' || !iZhihu || !iZhihu.config['QuickFavo']) { return null; } iZhihu.QuickFavo = this; this.DefaultCount = 4; this.PinnedList = iZhihu.config['QuickFavoPinned']; this.css = ['.izh-Pin4QuickFavo{padding:3px 5px 0;float:right;display:block;margin-top:4px;margin-right:2em;line-height:1.25;}' ,'.izh-Pin4QuickFavo .zm-item-top-btn{visibility:visible;margin:0 4px;float:right;}' ,'div.izh_fav{position:absolute;z-index:9999;display:none;border:1px solid #999999;background-color:#fff;border-radius:5px 5px 5px 0;margin-left:-1px;}' ,'div.izh_fav .title{padding:0 5px;background-color:#0874c4;color:#fff;font-weight:bold;font-size:15px;text-align:center;border-radius:3px 3px 0 0;}' ,'div.izh_fav a.fav{display:block;clear:both;float;left;padding:0 36px 0 24px;line-height:2;}' ,'div.izh_fav a.fav i{position:absolute;margin-top:0.5em;}' ,'div.izh_fav a.fav i.spinner-gray{left:0;}' ,'div.izh_fav a.fav i.z-icon-collect{left:10px;visibility:hidden;background-position:-56px -36px;}' ,'div.izh_fav a.fav.selected i.z-icon-collect{visibility:visible;}' ,'div.izh_fav a.fav:hover{text-decoration:none}' ,'div.izh_fav a.fav span{float:right;display:block;margin-right:-32px}' ,'.meta-item.on{position:relative;z-index:10000;background-color:#fff;border:1px solid #999999;border-top-color:#fff;margin:-1px -8px -1px -1px;padding:0 7px;border-radius:2px 2px 3px 3px;}' ,''].join('\n'); this.addQuickFavo = function($v,$a){ if($v.length){ if($a.children('.izh_fav').length<=0){ $('
    ', { 'class': 'izh_fav' }) .append($('', { 'class': 'spinner-gray' })) .append(' 加载中... ') .bind('mouseover', function(){ $(this).show().parent().find('.meta-item[name=favo]').addClass('on'); }) .bind('mouseout', function(){ $(this).hide().parent().find('.meta-item[name=favo]').removeClass('on'); }) .appendTo($a); } $v.bind('mouseenter',function(){ var $a=iZhihu.getItem($(this)) , $m=$(this).addClass('on').closest('.zm-item-meta') , aid=$a.attr('data-aid') , $op=$(this).offsetParent() , bottom1=parseInt($op.css('margin-bottom')) , bottom2=parseInt($a.css('padding-bottom')) , pos=$(this).position() ; $a.children('.izh_fav').css({ 'bottom':(isNaN(bottom1)?0:bottom1)+(isNaN(bottom2)?0:bottom2)+$op.height()-pos.top , 'left':pos.left+$m.position().left }).show(); $.getJSON('/collections/json',$.param({answer_id:aid}),function(result,status,xhr){ var aid=this.url.substr(this.url.indexOf('answer_id=')+10) , sel=pageIs.Question?'.zm-item-answer' :pageIs.Home?'.feed-item' :pageIs.Answer?'.zm-item-answer' :'' , $a=$(sel+'[data-aid='+aid+']') , $v=$a.children('.izh_fav').empty().append($('
    ',{'class':'title',title:'以下为最近选择的收藏夹'}).append('快速收藏')) ; if(''==sel)return; var favAll=result.msg[0] , favSel=result.msg[1] , num=iZhihu.QuickFavo.DefaultCount , fav=new Array() , favNormal=new Array() ; $.each(favAll,function(i,e){ var fID=e[0] , pinned=iZhihu.QuickFavo.PinnedList[fID] ; if(pinned){ fav.push(e); }else{ favNormal.push(e); } }); num -= fav.length; if(num > 0){ fav=fav.concat(favNormal.slice(0,num)); } favNormal.length=0; while(fav.length){ var e=fav.shift() , fID=e[0] , fName=e[1] ; favNormal[fID]=fName; var $f=$('',{ 'class':'fav' , href:'javascript:;' , aid:aid , fid:fID }).text(fName).click(function(){ var u='/collection/' , $f=$(this) , $i=$f.children(':first') ; if($i.hasClass('spinner-gray'))return; u+=$f.hasClass('selected')?'remove':'add'; $i.attr('class','spinner-gray'); $.post(u,$.param({_xsrf:$('input[name=_xsrf]').val(),answer_id:$(this).attr('aid'),favlist_id:$(this).attr('fid')}),function(result){ var act=this.url.substring(this.url.lastIndexOf('/')+1) , fid=utils.getParamInQuery(this.data,'favlist_id') , aid=utils.getParamInQuery(this.data,'answer_id') , sel=pageIs.Question?'.zm-item-answer' :pageIs.Home?'.feed-item' :'' , $vi=''==sel?null:$(sel+'[data-aid='+aid+'] .izh_fav a[fid='+fid+']') , inc=0; if(''==sel)return; if(act=='remove'&&result.msg=='OK'){ $vi.removeClass('selected'); inc=-1; }else if(act=='add'&&result.msg.length){ $vi.addClass('selected'); inc=1; } if(inc!=0){ $vi.children('span').text(parseInt($vi.children('span').text())+inc); } $vi.children(':first').attr('class','z-icon-collect'); }); }).prepend($('',{'class':'z-icon-collect'})) .append($('').text(e[3])); $f.appendTo($v/*.children(pinned?'.pinned':'.normal')*/); }; $.each(favSel,function(i,e){ if(favNormal[e]) $v.find('a.fav[fid='+e+']').addClass('selected'); }); }); }); $v.bind('mouseleave',function(){ var $a=iZhihu.getItem($(this).removeClass('on')); $a.children('.izh_fav').hide(); }); } }; iZhihu.$body.bind('DOMNodeInserted',function(event){ var $e=$(event.target); if($e.is('.modal-dialog')){ $e.bind('DOMNodeInserted',function(event){ var $e=$(event.target) , $favList=$e.find('.zm-favo-list-content') ; if($favList.length){ var $favItems=$favList.children('.zm-favo-list-item-link[data-lid]') , funcPin=function(e){ var pinned=e.checked , $e=$(e) , $f=$e.closest('.zm-favo-list-item-link') ;if(!$f.length)return; var lid=$e.attr('lid') , $checks=$e.closest('.zm-favo-list-content').find('.izh-Pin4QuickFavo .t_jchkbox') , time=50 , cssStart={position:'relative','background-color':'#0874C4','z-index':'100'} , cssEnd={position:'','background-color':'','z-index':''} , funcRollUp=function(){ var $b=$e.closest('.zm-favo-list-item-link') , $a=$b.prev() ; if(!$a.length||($a.hasClass('pinned')&&parseInt($a.attr('data-lid'))parseInt($a.attr('index')))){ return; } $a.animate({top:$b.outerHeight()},{ duration:time , step:function(now){$a.css(cssStart);} , complete:function(){ $a.css($.extend({top:0},cssEnd)); $a.insertAfter($b); funcRollDown(); } }); } ; if(pinned){ $f.addClass('pinned'); funcRollUp(); }else{ $f.removeClass('pinned'); funcRollDown(); } iZhihu.QuickFavo.PinnedList[lid]=pinned; utils.setCfg('QuickFavoPinned',iZhihu.QuickFavo.PinnedList); } ; $favItems.each(function(i,e){ var lid=e.getAttribute('data-lid') , $pin=$('',{ href:'javascript:void(0);' , 'class':'izh-Pin4QuickFavo' , 'lid':lid , 'data-tip':'s$b$保持在「快速收藏」菜单顶部显示' }).append($('').append('置顶').add('',{'class':'zm-item-top-btn'})) .appendTo($('.zg-gray',e)).attr('index',i) ; e.setAttribute('index',i); $pin.bind('click',function(event){ this.checked=!this.checked; funcPin(this); if(this.checked){ $(this).children('span').text('取消置顶'); $(this).children('i').addClass('zm-item-top-btn-cancel'); }else{ $(this).children('span').text('置顶'); $(this).children('i').removeClass('zm-item-top-btn-cancel'); } if(event.preventDefault) event.preventDefault(); else if(event.stopPropagation) event.stopPropagation(); else event.cancelBubble=true; return false; })[0].checked=false; if(iZhihu.QuickFavo.PinnedList[lid]){ $pin.click(); } }); } }); } }); return this; } /** * @class SearchingList */ function SearchingList(iZhihu) { if ( typeof iZhihu === 'undefined' || !iZhihu) { return null } iZhihu.SearchingList = this this.$topSearch = $('#zh-top-search-form') this.$topSearchInput = $('#zh-top-search-form > input#q') if (!this.$topSearch.length) return this.SearchEngineOutsideList = { 'google': {icon:'https://www.google.com/favicon.ico',url:'https://www.google.com/?q=site:zhihu.com%20{0}#q=site:zhihu.com+{0}'} , 'baidu': {icon:'http://www.baidu.com/favicon.ico',url:'http://www.baidu.com/s?wd=site:zhihu.com%20{0}'} } utils.observeDOMNodeAdded(this.$topSearch[0],function(event){ var _a = event.addedNodes || [] if (!_a.length) return utils.observeDOMNodeAdded(_a[0],function(event){console.log(iZhihu.config['SearchEngineOutside']) var _a = event.addedNodes || [null] , $item = $(_a[0]) , seoKey = iZhihu.config['SearchEngineOutside'] || 'baidu' , seo = iZhihu.SearchingList.SearchEngineOutsideList[seoKey] || {icon:'',url:''} , strSearchUrl = seo.url.replace(/\{0\}/g, function(){return iZhihu.SearchingList.$topSearchInput.val()}) console.log(seoKey) if ($item.is('.ac-row[role=option]')){ var $a = $item.children('a') , href = $a.attr('href') , css = 'float:right;background-position:-284px -2px;' , $aNew = $('', {class:'zg-icon',style:css,href:href,target:'_blank',click:function(event){ event.stopPropagation() }}) if (href.indexOf('/search?') === 0) { $aNew.css({marginTop:'0.5em'}) $item.append($('', {class:'icon',style:'margin-top:0.5em;float:left',href:strSearchUrl,target:'_blank',click:function(event){ event.stopPropagation() }}).append($('', {border:0,src:seo.icon,width:16,height:16}))) } else if (href.indexOf('/question/') < 0) { $aNew.css({marginTop:'-1.5em'}) } $item.append($aNew) } }) }) return this } /** * @class TopNav */ function TopNav(iZhihu) { if ( typeof iZhihu === 'undefined' || !iZhihu || !iZhihu.config['TopNavAutoFold']) { return null } iZhihu.TopNav = this this.$topNav = $('body > .zu-top:first') .on('mouseover', function(event){ this.style.top = '0' this.setAttribute('izh-mouseover', '1') $('#izhCSS_NotiNum').remove() }) .on('mouseout', function(event){ this.setAttribute('izh-mouseover', '0') iZhihu.TopNav.funcFold() }) if (!this.$topNav.length) return this.topNavHeight = this.$topNav.height() - 5 this.funcFold = function(event){ var scrollTop = document.documentElement.scrollTop || document.body.scrollTop || 0 , _self = iZhihu.TopNav , isMouseOver = '1' === (_self.$topNav.attr('izh-mouseover') || '') , $head = $('head:first') , $cssNotiNum = $('#izhCSS_NotiNum') , $floatingBar = $('body > .goog-scrollfloater-floating') if (scrollTop === 0) { _self.$topNav.css({top:0}) } else if (!isMouseOver) { if (scrollTop < _self.topNavHeight) { _self.$topNav.css({top:-scrollTop}) $floatingBar.css({marginTop:-scrollTop}) } else { _self.$topNav.css({top:-_self.topNavHeight}) $floatingBar.css({marginTop:-_self.topNavHeight}) } if (scrollTop > 20) { if (!$cssNotiNum.length) { $('