- // ==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+, @钢盅郭子 @刘勇 @墨磊
- // ==/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<start?queryStr.substring(start):queryStr.substring(start,end);
- };
-
- utils.observeDOMAttrModified = (function(){
- var MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
- eventListenerSupported = window.addEventListener;
-
- return function(obj, callback){
- if( MutationObserver ){
- // define a new observer
- var obs = new MutationObserver(function(mutations, observer){
- if( mutations[0].type == 'attributes' )
- callback(mutations[0]);
- });
- obs.observe( obj, { attributes:true });
- }else if( eventListenerSupported ){
- obj.addEventListener('DOMAttrModified', callback, false);
- }
- }
- })();
-
- utils.observeDOMNodeAdded = (function(){
- var MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
- eventListenerSupported = window.addEventListener;
-
- return function(obj, callback){
- if( MutationObserver ){
- // define a new observer
- var obs = new MutationObserver(function(mutations, observer){
- mutations.forEach(function(mutation) {
- callback(mutation);
- });
- });
- obs.observe( obj, { childList:true });
- }else if( eventListenerSupported ){
- obj.addEventListener('DOMNodeInserted', callback, false);
- }
- }
- })();
-
- utils.RegexSrcPic = /src="[\s\S]+?.jpg"/g
-
- //console.log((new Date()).getTime());
-
- var $ = window.$;
- var _ = this._;
- var purl = window.purl||$.url;
-
- //使用CasperJS的模拟用户操作: http://casperjs.org/api.html#client-utils
- //var client = window.create();
-
- var url = purl();
- var page = url.segment(1);
-
- var pageIs={}
- , $win=$(window)
- , _doc=window.document
- , $body=$(_doc.body)
- , _path=window.frameElement?window.frameElement.src.replace(/https?:\/\/www.zhihu.com/,''):url.data.attr['path']
- , css=''
- , $h=$('head')
- , $s=$('<style>', { '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=0<iPathAnswers&&_path.substr(iPathAnswers)=='/answers';
- pageIs.Collection=0==iPathCollection;
- pageIs.Debuts=0==_path.indexOf('/debuts/');
- pageIs.MyCollection=0==_path.indexOf('/collections/mine');
- pageIs.SettingsFilter=0==_path.indexOf('/settings/filter')
-
- var i=0
- , $user=$('.zu-top-nav-userinfo')//user_avater
- , z=$user.length?$user.attr('href'):''
- , $banner=$(document.body).children().first()
- , $main=$('[role=main]')//main
- , css_AuthorListItemA='padding:0 10px 0 0;'
- , css_AuthorListItemA_name='padding:0 5px;'
- ;
-
- window.iZhihu = {
- $win:$win
- , $body:$body
- , $main:$main
- , config:$.extend(cfgDefault, utils.getValue('izhihu',cfgDefault))
- };
-
- var izhHomeLayout = window.iZhihu.config['HomeLayout']
- , izhAuthorList = window.iZhihu.config['AuthorList']
- , izhRightComment = window.iZhihu.config['ShowComment']
- , izhQuickFavo = window.iZhihu.config['QuickFavo']
- , izhAuthorRear = window.iZhihu.config['AuthorRear']
- , izhHomeNoti = window.iZhihu.config['HomeNoti']
- , izhQuickBlock = window.iZhihu.config['QuickBlock']
- , izhTopNavAutoFold = window.iZhihu.config['TopNavAutoFold']
- ;
-
- utils.transferOldCfg();
-
- $body.attr({
- 'izhHomeLayout' : izhHomeLayout?'1':''
- , 'izhAuthorList' : izhAuthorList?'1':''
- , 'izhRightComment' : izhRightComment?'1':''
- , 'izhQuickFavo' : izhQuickFavo?'1':''
- , 'izhAuthorRear' : izhAuthorRear?'1':''
- , 'izhHomeNoti' : izhHomeNoti?'1':''
- , 'izhQuickBlock' : izhQuickBlock?'1':''
- , 'izhTopNavAutoFold' : izhTopNavAutoFold?'1':''
- });
-
- var _QuickBlock = new QuickBlock(window.iZhihu)
- , _QuickFavo = new QuickFavo(window.iZhihu)
- , _Comment = new Comment(window.iZhihu)
- , _Noti7 = new Noti7(window.iZhihu)
- , _Answer = new Answer(window.iZhihu)
- , _SearchingList = new SearchingList(window.iZhihu)
- , _TopNav = new TopNav(window.iZhihu)
- ;
-
- css+=['.t_showframe{padding:10px 10px 10px 10px;background:#f0f0f0;border:1px solid #fff;box-shadow:2px 5px 15px #333;border-radius:10px;-moz-box-shadow:2px 5px 15px #333;-moz-border-radius:10px;-webkit-box-shadow:2px 5px 15px #333;-webkit-border-radius:10px}#iZhihu_rtjddiv{width:650px;height:437px}#iZhihu_setdiv{width:600px;height2:295px}.t_setdiv{padding-bottom:10px;background:#fcfcfc;width:100%;height:100%}.t_set_tb{font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif !important;font-size:12px !important;text-shadow:none !important;border-collapse:collapse !important;margin:0 !important;line-height:120%}.t_set_tb thead td{background:#0080c0;color:#fff;border:none !important;padding:4px 8px 4px !important;border-radius-topleft:10px;border-radius-topright:10px;-moz-border-radius-topleft:10px;-moz-border-radius-topright:10px;-webkit-border-top-left-radius:10px;-webkit-border-top-right-radius:10px}.t_set_tb th,.t_set_tb td{padding:8px;background:#e8edff;border:none !important;border-top:2px solid #fcfcfc !important;color:#669;line-height:1.1em !important}.t_set_tb td input,.t_set_tb td textarea{font-size:12px !important;padding:0 !important}.t_set_tb tbody tr:hover th,.t_set_tb tbody tr:hover td{background:#d0dafd}.t_set_tb tfoot td{border-radius-bottomleft:10px;border-radius-bottomright:10px;-moz-border-radius-bottomleft:10px;-moz-border-radius-bottomright:10px;-webkit-border-bottom-left-radius:10px;-webkit-border-bottom-right-radius:10px}.t_set_ft{font-family:Arial,sans-serif,瀹�� !important;font-size:12px !important;font-weight:bold !important;text-shadow:none !important;margin-top:15px !important}.t_set_ft a{text-decoration:none;color:#000}.t_setbtn{border:1px solid black;padding:2px;cursor:pointer;background:#fff;color:#0080c0}.t_setftbtn span{padding:2px 10px 2px 10px !important}.t_rtjdbtn{background:#0080c0 !important;color:#fff !important}.t_rtjdtxtpos{padding-top:5px}#iZhihu_rthint{font-family:Arial,sans-serif,瀹�� !important;font-size:16px !important;font-weight:bold;padding:5px 10px 5px 10px;position:fixed;top:20px;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;display:inline-block;opacity:0.7}.t_rthint_n{color:#fff !important;background:#000 !important}.t_rthint_f{background:#880000 !important;color:#ffffdd !important}.t_upbtn{background:#0080c0 !important;color:#fff !important}.t_upinfo{height:120px !important;vertical-align:text-top !important}#izh_updatediv th{border-right:2px solid #fcfcfc !important}#izh_updatediv tfoot td{border:none !important;border-top:2px solid #fcfcfc !important;font-family:Arial,sans-serif,瀹�� !important;font-size:12px !important;font-style:normal !important;text-shadow:none !important}.t_txtshow{text-align:center;background:#0080c0;color:#f0f0f0;user-select:none;-moz-user-select:none}.t_frshow{font-size:1.2em;position:fixed;z-index:99999;top:45px;width:200px;opacity:0.9;cursor:pointer}.t_tbox{padding:10px;position:relative;border:1px solid #f0f0f0;line-height:20px;*height:1%;width:200px;-moz-box-shadow:2px 5px 15px #333;-moz-border-radius:7px;-webkit-box-shadow:2px 5px 15px #333;-webkit-border-radius:7px}.t_tbox s{position:absolute;top:-20px;left:160px;display:block;height:0;width:0;font-size:0;line-height:0;border-color:transparent transparent #f0f0f0 transparent;border-style:dashed dashed solid dashed;border-width:10px}.t_tbox i{position:absolute;top:-9px;left:-10px;display:block;height:0;width:0;font-size:0;line-height:0;border-color:transparent transparent #0080c0 transparent;border-style:dashed dashed solid dashed;border-width:10px}@media screen and (-webkit-min-device-pixel-ratio:0){#iZhihu_rtjddiv{height:417px}#iZhihu_setdiv{height2:295px}#izh_updatediv{height:315px}}'
- ,''].join('\n');
- if(pageIs.Question&&izhAuthorList){
- css+=['div.uno{position:absolute;left:0;border:1px solid #0771C1;border-right-width:0;border-top-right-radius:6px}'
- ,'div.uno .frame{overflow-x:hidden;overflow-y:auto;direction:rtl}'
- ,'div.uno span.meT,div.uno span.meB,div.uno ul.pp li span.me{position:absolute;right:0;display:block;height:1px;width:1px;line-height:1px;background-color:transparent;border-style:solid;border-color:transparent;}'
- ,'div.uno span.meT{border-width:6px 4px;border-top-width:0px;border-bottom-color:#fff;}'
- ,'div.uno span.meB{border-width:6px 4px;border-bottom-width:0px;border-top-color:#fff;margin-top:-7px;}'
- ,'div.uno ul{background-color:#0771C1;padding:0;margin:0;direction:ltr}'
- ,'div.uno ul li{display:block;list-style-type:none;margin:0;padding:0;white-space:nowrap;}'
- ,'div.uno ul li a{display:block;}div.uno li a.sel{text-decoration:none;}'
- ,'div.uno ul li a{'+css_AuthorListItemA+'}'
- ,'div.uno ul.pp li span.me{position:static;margin:6px -8px;border-width:4px 6px;border-right-color:#fff;float:right;}'
- ,'div.uno li a span.name{text-align:right;display:block;'+css_AuthorListItemA_name+'background-color:#fff;}div.uno li a.sel span.name{color:#fff;background-color:#0771C1;}'
- ,'div.uno li a span.name.noname{color:#000;}'
- ,'div.uno li a span.name.collapsed{color:#999999;}'
- ,'div.uno li a span.name.friend{font-style:italic;}'
- ,'div.uno li span.hp{background-color:#999999;position:relative;float:right;margin-top:-2px;line-height:2px;height:2px;}'
- ,'div.uno table.plus{float:right;margin:7px -9px;height:7px;border-collapse:collapse;border-style:hidden;}div.uno table.plus td{border:1px solid #fff;width:1px;height:1px;}'
- ,'div.uno a.sel table.plus{}div.uno a.sel table.plus td{}'
- ,'div.uno li a span.func{text-align:center;}'
- ,'div.izh-answer-preview{position:fixed;margin-top:1px;background-color:#fff;border:1px solid #0771C1;border-top-width:22px;border-top-right-radius:6px;box-shadow:5px 5px 5px #777;}'
- ,'div.izh-answer-preview .zm-editable-content{top:0;bottom:0;left:0;right:0;overflow-y:auto;padding:10px;}'
- ,'div.izh-answer-preview img.zm-list-avatar{position:absolute;right:10px;top:-35px;border:1px solid #0771C1;border-radius:6px;}'
- ,'div.izh-answer-preview span.comment{position:absolute;top:-18px;line-height:18px;border-top-right-radius:3px;background-color:#fff;padding:0 5px;}'
- ,''].join('\n');
- }
- css+=['.z-icon-izh-fold{background-position:-173px -107px;width:15px;height:15px;}'
- ,''].join('\n');
- css+=['.t_set_tb{font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif !important;font-size:12px !important;text-shadow:none !important;border-collapse:collapse !important;margin:0 !important;line-height:120%}'
- ,'.t_set_tb thead td{background:#0080c0;color:#fff;border:none !important;padding:4px 8px 4px !important;border-top-left-radius:6px;border-top-right-radius:6px}'
- ,'.t_set_tb th,.t_set_tb td{padding:8px;background:#e7f3f9;border:none !important;border-top:2px solid #fcfcfc !important;color:#669;line-height:1.1em !important}'
- ,'.t_set_tb td input,.t_set_tb td textarea{font-size:12px !important;padding:0 !important}'
- ,'.t_set_tb tbody tr:hover th,.t_set_tb tbody tr:hover td{background:#d0dafd}'
- ,'.t_set_tb tfoot td{border-radius-bottomleft:10px;border-radius-bottomright:10px;-moz-border-radius-bottomleft:10px;-moz-border-radius-bottomright:10px;-webkit-border-bottom-left-radius:10px;-webkit-border-bottom-right-radius:10px}'
- ,'.t_set_tb td{white-space:nowrap;}'
- ,'.t_set_tb td .icon-help{float:right;}'
- ,''].join('\n');
- css+=['.izh_boxShadow{box-shadow: 5px 5px 3px 0px #999 !important;}'
- ,'#zh-question-meta-wrap.izh_noBorder{border-bottom-color:transparent !important;}'
- ,'#zh-question-filter-wrap.izh_noBorder{border-top-color:transparent !important;}'
- ,'a.izh-button.on{color:#225599;text-shadow:0 0 1px #225599;}'
- ,'a.izh-button .zg-icon{opacity:0.5;}'
- ,'a.izh-button.on .zg-icon{opacity:1;}'
- ,'a.izh-button.off{color:#eee;}'
- ,'a.izh-button.off .zg-icon{opacity:0.2;}'
- ,'.izh-feeds-filter{}'
- ,'.izh-feeds-filter .izh-feeds-filter-option{opacity:0.5;color:#999999;padding-left:5px;text-decoration:none;cursor:pointer;}'
- ,'.izh-feeds-filter .izh-feeds-filter-option i{background-position:-183px -4px;}'
- ,'.izh-feeds-filter .izh-feeds-filter-option.on{opacity:1;color:#225599;}'
- ,'.izh-feeds-filter .izh-feeds-filter-option.on i{background-position:-183px -24px;}'
- ,''].join('\n');
- if(izhHomeLayout){
- css += ['#zh-question-list { padding-left:30px!important }'
- ,'#zh-main-feed-fresh-button { margin-left:-30px!important }'
- ,'.feed-item {'
- ,' border-bottom:1px solid #EEE!important;'
- ,' margin-top:-1px!important'
- ,'}'
- ,'.feed-item .avatar { display:none!important }'
- ,''
- ,'.feed-main,.feed-item.combine { margin-left:0!important }'
- ,'.feed-item-q { margin-left:-30px!important;padding-left:0!important }'
- ,''
- ,window.iZhihu.Comment.RightComment ? '' : '.feed-item-a .zm-comment-box { max-width:602px!important }'
- ,window.iZhihu.Comment.RightComment ? '' : '.feed-item-q .zm-comment-box { max-width:632px!important; width:632px!important }'
- ,''
- ,'.zm-tag-editor,'
- ,'#zh-question-title,'
- ,'#zh-question-detail,'
- ,'#zh-question-meta-wrap,'
- ,'.zh-answers-title,'
- ,'#zh-question-filter-wrap {'
- ,' margin-left:-32px!important'
- ,'}'
- ,''
- ,'#zh-question-log-page-wrap .zm-tag-editor,'
- ,'#zh-question-log-page-wrap #zh-question-title {'
- ,' margin-left:0 !important'
- ,'}'
- ,''
- ,'.zh-answers-title,'
- ,'#zh-question-filter-wrap {'
- ,' border-bottom:1px solid #EEE!important;'
- ,' z-index:1000!important'
- ,'}'
- ,''
- ,'#zh-question-meta-wrap {'
- ,' margin-bottom:0!important;'
- ,' padding-bottom:10px!important;'
- ,' border-bottom:1px solid #EEE!important'
- ,'}'
- ,''
- ,'#zh-question-answer-wrap { margin-top:-1px!important }'
- ,''
- ,'#zh-question-collapsed-wrap,#zh-question-answer-wrap { border:none!important }'
- ,'.zu-question-collap-title { border-top:1px solid #EEE!important }'
- ,'#zh-question-collapsed-wrap>div: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(
- $('<div', { id: 'izh-dlg-bg', 'class': 'modal-dialog-bg' }).css({
- 'z-index': 95
- , 'opacity': 0.5
- , 'position': 'fixed'
- , 'top': 0
- , 'bottom': 0
- , 'left': 0
- , 'right': 0
- , 'display': 'none'
- })
- );
- }
-
- window.iZhihu.getItem=function($c){
- var $item=$(null);
- if($c && $c.length){
- var $itemMeta=$c.closest('.zm-item-meta');
- if ($itemMeta.is('.feed-meta') || $itemMeta.parent().is('.feed-meta')){
- $item=$c.closest('.feed-item');
- $item.attr('data-aid', $item.children('meta[itemprop=answer-id]').attr('content'))
- }else if($itemMeta.is('.answer-actions')){
- $item=$c.closest('.zm-item-answer,.feed-item');
- }else{
- $item=$itemMeta.prev();
- }
- }
- return $item;
- };
-
- utils.observeDOMNodeAdded(document.body,function(event){
- if(izhTopNavAutoFold){
- window.iZhihu.TopNav.onNodeAdded(event)
- }
- })
- /**
- * @class Answer
- */
- function Answer(iZhihu) {
- if ( typeof iZhihu === 'undefined' || !iZhihu) {
- return null;
- }
- iZhihu.Answer = this;
-
- this._e=null;
- this.ppWidth=0;
- this.ppHeight=400;
-
- this.css =
- ['.zm-votebar .izh-button.fold{margin:5px 0px 0px;display:block;color:#698EBF;height:24px;line-height:24px;width:38px;border-radius:3px;border:0px none;cursor:pointer;background:none repeat scroll 0% 0% #EFF6FA;font-weight:font-weight;position:relative;}'
- ,''].join('\n');
-
- this.processAnswer=function($a,$pp,bAuthorRear,bAuthorList){
- if(!$a||!$a.length)return;
- if($a.attr('izh_processed')=='1')return;
- var selCollapse='.meta-item[name=collapse]'
- , $meta=$a.find('.zm-item-meta')
- , $author=$a.find('.zm-item-answer-author-info')
- , $favo=$a.find('.meta-item[name=favo]')
- , $vote=$a.find('.zm-votebar')
- ;
- if(iZhihu.QuickBlock){
- // Region: 快速屏蔽
- iZhihu.QuickBlock.addQuickBlock($a)
-
- // Region end
- }
- if($author.length){//relocatePersonInfo
- if(bAuthorRear){
- $author.css({
- 'textAlign':'right'
- });
- if($a.is('.feed-item')){
- $a.find('.entry-body .zm-item-answer-detail .zm-item-rich-text')
- .append($author.hide()).bind('DOMNodeInserted',function(event){
- var $c=$(event.target);
- if($c.is('.zm-editable-content')){
- $(this).children('.zm-item-answer-author-info')
- .insertBefore($c.children('.answer-date-link-wrap'))
- .css({
- 'position':'absolute'
- , 'right':0
- }).show();
- }
- });
- }else{
- $author.insertBefore($meta);
- }
- }
- $author=$author.children().eq(1);
- if ($pp && bAuthorList){
- // Region: 回答目录项
- var collapsed=$a.attr('data-collapsed')=='1'
- , $ppla=$('<a>',{
- href:'#answer-'+$a.attr('data-aid')
- , target:'_self'
- , style:css_AuthorListItemA
- })
- , $ppl=$('<li>').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($('<span>', { 'class': 'me' }));
- }
- var nameCSS='name';
- if($a.attr('data-isfriend')=='1'){
- nameCSS+=' friend';
- }
- if(collapsed){
- nameCSS+=' collapsed'
- }
- if(!$author.length){
- nameCSS+=' noname';
- }
- $('<span>',{
- '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);
- $('<span>',{
- '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()<iZhihu.Answer._e.offsetTop-$frm.scrollTop()+iZhihu.Answer._e.offsetHeight?'':'none');
- }
- // Region: 回答预览
- var nam=$('span.name',this);
- if(!nam.length)return;
- var aid=$(this).attr('href').replace('#answer-','')
- , prv=$uno.next('.izh-answer-preview')
- , top=$(this).position().top+$uno.position().top
- , sel='.zm-item-answer[data-aid='+aid+'] > .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=$('<div>',{
- '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)
- $('<span>',{'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=offsetTop<scrollTopNow+baseTop||offsetBottom>scrollTopNow+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=maxHeight<minHeight
- , $meta=$cm.closest('.zm-item-meta')
- , metaHeight=2*$meta.height()-$meta.innerHeight()
- , offsetTop=scrollTop-$meta.offset().top
- , offsetBottom=-offsetTop-winHeight
- ;if(tooSmall)maxHeight=minHeight;
- if(!th||isNaN(th)){
- var $t=$cm.clone().css({'position':'absolute','z-index':'-1'}).appendTo(document.body).show()
- , $l=$t.children('.zm-comment-list')
- ;
- if(!$cm.is('.empty')&&$l.children().length>0)$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:(th<maxHeight?th-100:maxHeight-80));
- }
- var target={},other={'height':''};
- $cm.attr('izh_cmHeight',th).css({'display':'','visibility':'visible','position':'absolute'});
- if(th<=maxHeight){
- var top=-offsetTop-70,fixHeight=(th<=minHeight?-1:7);
- if(!tooSmall&&top+th>winHeight){
- 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($('<div>', { 'class': 'izh_tape_a' }))
- .append($('<div>', { '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(cmWidth<minWidth)
- cmWidth=minWidth;
- $cm.addClass('izh_boxShadow').css($.extend(css_comment,{'width':cmWidth-9}));
- //if(!$cm.is('.empty'))
- $cm.css({'padding':'100px 0px 0px 7px'});
- $('i.zm-comment-bubble',$cm).hide();
- if(noCommentOpening){
- var cmWidthOver=cmWidth-winWidth
- , shiftLeft=cmWidthOver+ctWidth+ctLeft
- ;
- if(shiftLeft>0){
- 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){
- $('<div class="izh_collections">loading...</div>').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;i<event.addedNodes.length;i++){
- var $icm=$(event.addedNodes[i]);
- }*/
- var $icm=$(event.target).filter('.zm-item-comment,.zm-comment-form');
- if(!$icm.length)return;
- var $list=$(this)
- , $cm=$list.closest('.zm-comment-box:visible');
- if($icm.is('.zm-item-comment')){
- //console.log($icm);
- if(iZhihu.QuickBlock){
- //console.log('Adding QuickBlock');
- iZhihu.QuickBlock.addQuickBlockInOneComment($icm);
- }
- if(iZhihu.Comment.RightComment){
- $list.css('height','100%');
- $icm.show().bind('DOMNodeRemoved',function(event){
- var $icm=$(event.target);
- if(!$icm.is('.zm-item-comment'))return;
- var $list=$icm.hide().closest('.zm-comment-list')
- , $cm=$list.closest('.zm-comment-box:visible');
- if($cm.length){
- //console.log('Refreshing comment list');
- if($list.children().length==1){
- $('.izh-quick-block-switch',$cm).add('.izh-buttons-cm-R',$cm).hide();
- }
- iZhihu.Comment.box($cm,false,false);
- }
- });
-
- if($cm.length){
- var countNow=$list.children().length
- , countAll=parseInt($cm.attr('data-count'))
- , countRest=countAll-countNow
- , notAll=$(this).has('.load-more').length
- ;
- if((!notAll)&&countRest>1){
- 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=$('<a>',{
- 'class':'zu-question-answer-meta-comment izh-button-cc'
- , href:'javascript:void(0);'
- , click:cmClose
- , 'data-tip':'s$t$收起评论并跳转至所属回答'
- }).text('收起')
- , $buttonsL=$('<div>',{
- 'class':'izh-buttons-cm-L'
- }).prependTo($cm)
- , $buttonsR=$('<div>',{
- '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('<i class="z-icon-izh-fold"/>').prependTo($buttonsL);
- $('<a>',{
- '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(
- $('<i>', { 'class': 'zg-icon z-icon-fold' })
- ).add(
- $('<a>',{
- '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(
- $('<i>', { '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('<i class="z-icon-fold"/>')
- .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(
- $('<a>',{
- '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<iZhihu.$win.height()){
- $cartDIV.css({'height':h,'bottom':''});
- }else{
- $cartDIV.css({'height':'','bottom':0});
- }
- };
- this.getCartDIV=function(){
- var $cartDIV=$('#izh_blockCart');
- if(!$cartDIV.length){
- $cartDIV=$('<div>', { id: 'izh_blockCart', 'class': 'izh_blockCart' }).css({
- 'top':iZhihu.$main.offset().top
- }).append(
- $('<div>',{
- 'class':'do'
- , 'izh_num2B':0
- , 'title':'下为「候审」列表\n点击左上角可收起/展开\n数字为人犯总数(红色表示仍有人犯正待入列)'
- }).append(
- $('<a>',{
- '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(
- $('<input>',{
- '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(
- $('<span>',{
- 'class':''
- , href:'javascript:void(0);'
- , title:'选中后,将我关注的人标出,准备「取消关注」'
- }).text('从轻').css({
- 'display':'block'
- , 'float':'left'
- , 'margin-right':20
- })
- ).append(
- $('<a>',{
- '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(
- $('<a>',{
- '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(
- $('<div>',{'class':'frame'}
- ).append(
- $('<div>',{
- 'class':'list i_fo fo_i'
- })
- ).append(
- $('<div>',{
- 'class':'list i_fo'
- })
- ).append(
- $('<div>',{
- 'class':'list fo_i'
- })
- ).append(
- $('<div>',{
- '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=$('<div>',{
- 'class':'user2B'+(f_&&$cartDIV.find('.do .unfo:checked').length?' unfo':'')
- , 'href':href
- , 'uid':hashID
- })
- .append(
- $('<a>',{
- '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(
- $('<i>',{
- 'class':'say'
- , 'data-tip':'p$t$'+userID
- }).text('冤枉')
- ).append($('<i>',{'class':'say_1'})
- ).append($('<i>',{'class':'say_2'})
- ).append($('<i>',{'class':cssF})
- ).append(
- $('<a>',{
- '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('')
- $('<a>',{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;
- $('<a>',{
- '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=$('<a>',{
- '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){
- $('<div>', { 'class': 'izh_fav' })
- .append($('<i>', { '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($('<div>',{'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=$('<a/>',{
- '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($('<i/>',{'class':'z-icon-collect'}))
- .append($('<span/>').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($b.attr('data-lid')))){
- return;
- }
- $b.animate({bottom:$a.outerHeight()},{
- duration:time
- , step:function(now){$b.css(cssStart);}
- , complete:function(){
- $b.css($.extend({bottom:0},cssEnd));
- $b.insertBefore($a);
- funcRollUp();
- }
- });
- }
- , funcRollDown=function(){
- var $a=$e.closest('.zm-favo-list-item-link')
- , $b=$a.next()
- ;
- if(!$b.length||(!$b.hasClass('pinned')&&parseInt($b.attr('index'))>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=$('<a/>',{
- href:'javascript:void(0);'
- , 'class':'izh-Pin4QuickFavo'
- , 'lid':lid
- , 'data-tip':'s$b$保持在「快速收藏」菜单顶部显示'
- }).append($('<span/>').append('置顶').add('<i/>',{'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 = $('<a>', {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($('<a>', {class:'icon',style:'margin-top:0.5em;float:left',href:strSearchUrl,target:'_blank',click:function(event){
- event.stopPropagation()
- }}).append($('<img>', {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) {
- $('<style>', {
- id: 'izhCSS_NotiNum'
- , type: 'text/css'
- }).appendTo('head:first').text('#zh-top-nav-count,#zh-top-nav-new-pm{position:absolute;top:40px;border-radius:0 !important}.top-nav-profile .zu-top-nav-userinfo{overflow:visible !important}')
- }
- return
- }
- }
- $cssNotiNum.remove()
- }
-
- iZhihu.$win.scroll(this.funcFold)
-
- this.onNodeAdded = function(event){
- iZhihu.TopNav.funcFold()
- $.each(event.removedNodes, function(i, e){
- var $floatingBar = $(e).filter('.goog-scrollfloater').css({marginTop:''})
- })
- }
-
- return this
- }
-
- allLinks = function(_name, _listSel, _listName) {
- this.name = _name
- this.listSel = _listSel
- this.listName = _listName
- this.dlgID = 'izh-dlg-' + _name
- this.$dlg = null
- var _initialTitle = _listName + '地址清单'
- , _result = new Array()
- , _loadTimes = 0
-
- //分析内容
- var processNode = function(content,$dlg){
- var $qCurrent = null;
- $('.zm-item-answer', content).each(function(index, item){
- var $a = $(item)
- , $q = $a.closest(".zm-item").children("h2").children("a")
- ;
- if($q.length){
- $qCurrent=$q;
- }else if($qCurrent){
- $q=$qCurrent;
- }else{
- return;
- }
- var hrefQuestion = url.data.attr["base"] + $q.attr("href").replace(url.data.attr["base"],'');
- var obj = {
- title: $q.text(),
- //questionUrl: hrefQuestion,
- answerUrl: hrefQuestion + ($a.parent().is(".zm-item-fav") ? "/answer/" + $a.attr("data-atoken") : ""),
- answerAuthor: $a.find('.zm-item-answer-author-wrap a[href^="/people"]').text().trim(),
- summary: $a.find(".zm-item-answer-summary").children().remove().end().text(),
- content: $a.find(".zm-editable-content").html()
- };
- _result.push(obj);
- var strTitle = utils.formatStr('* 《{title}》 * {answerAuthor}: * {summary}', obj)
- , strURL = utils.formatStr('{answerUrl}', obj)
- , $li = $('<li>').append($('<a>', { href: strURL, title: strTitle }).text(strURL)).css({ 'list-style-type': 'none' })
- $('.izhihu-collection-links',$dlg).append($li);
- var count=_result.length;
- $('.izhihu-collection-info',$dlg).text('(努力加载中...已得到记录 ' + count + ' 条)');
- });
- };
-
- var handler = function(pageWant,pageNow,$dlg){
- if (!pageNow)pageNow=1;
- if($dlg.is(':hidden')){
- var count=_result.length;
- $('.izhihu-collection-info',$dlg).text('(加载被终止...已得到记录 ' + count + ' 条)');
- $('#zh-global-spinner').hide();
- return;
- }
-
- if(pageWant==1){
- $('.izhihu-collection-links',$dlg).empty();
- $('#zh-global-spinner').show();
- _result.length=0;
- _loadTimes++;
- $('.izhihu-collection-info',$dlg).text('');
- }
- var $pager=$(_listSel).parent().find('.zm-invite-pager')
- , $lastPage=$pager.children('span').last().prev()
- , totalCount=$pager.length==0?1:Number($lastPage.text())
- ;
- if(pageWant>totalCount){
- $('.izhihu-collection-info',$dlg).text('(加载完成,共得到记录 ' + _result.length + ' 条)');
- $('#zh-global-spinner').hide();
- $('.selAll',$dlg).click();
- return;
- }
-
- var pageNext=pageWant+1;
- if(pageWant==pageNow){
- processNode($(_listSel).html(),$dlg);
- handler(pageNext,pageNow,$dlg)
- }else{
- var _url=url.data.attr['base']+url.data.attr['path']+'?page='+pageWant;
- $.ajax(_url,{type:'get',context:{loadTimes:_loadTimes}}).done(function(result){
- if(this.loadTimes!=_loadTimes)return;
- processNode(result,$dlg);
- handler(pageNext,pageNow,$dlg)
- });
- }
- };
-
- //初始化弹出框
- this.initDialog = function(){
- this.$dlg=$('#'+this.dlgID);
- var retVal=0<this.$dlg.length;
- if(!retVal){
- this.$dlg = $('<div>', { id: this.dlgID, 'class': 'modal-dialog allLinks', tabindex: '0', style: 'display: none;width:500px', name: _name, 'listSel': _listSel })
- .append($('<div>', { 'class': 'modal-dialog-title modal-dialog-title-draggable' })
- .append($('<span>', { 'class': 'modal-dialog-title-text' }).text(_initialTitle))
- .append($('<span>', { 'class': 'modal-dialog-title-text izhihu-collection-info' }))
- .append($('<span>', {
- 'class': 'modal-dialog-title-close'
- , click: function() {
- $('#zh-global-spinner').hide()
- $('.modal-dialog-bg').hide()
- $(this).closest('.modal-dialog').hide()
- }
- }))
- )
- .append($('<div>', { 'class': 'modal-dialog-content' })
- .append($('<div>')
- .append($('<div>', { 'class': 'zg-section' })
- .append($('<div>', { 'class': 'izhihu-collection-links zg-form-text-input', tabIndex: '-1', style: 'height:300px;overflow-y:scroll;outline:none;' }))
- .append($('<form>', { action: 'http://ilovezhihu.duapp.com/saveMe.py', method: 'post', target: '_blank', style: 'display:none' })
- .append($('<textarea>', { style: "width: 100%;", name: "links", 'class': "izhihu-collection-links-post" }))
- .append($('<input>', { name: 'title' }))
- )
- )
- .append($('<div>', { 'class': 'zm-command' })
- .append($('<div>', { 'class': 'zg-left' })
- .append($('<a>', {
- 'class': 'zg-btn-blue reload'
- , href: 'javascript:void(0);'
- , click: function() {
- var $d = $(this).closest('.modal-dialog')
- handler(1, Number(url.data.param.query['page']), $d)
- }
- }).text('重新获取'))
- )
- .append($('<a>', {
- 'class': 'zg-btn-blue save'
- , href: 'javascript:void(0);'
- , click: function() {
- var $dlg = $(this).closest('.modal-dialog-content')
- , $links = $dlg.find('.izhihu-collection-links')
- , $linksPost = $dlg.find('.izhihu-collection-links-post')
- , $linksTitle = $linksPost.next()
- , $form = $linksPost.parent()
- , links = ''
- ;
- $links.find('li a').each(function(i, e) {
- links += e.getAttribute('href') + '\n'
- })
- $linksPost.val(links)
- $linksTitle.val($('#zh-fav-head-title,.zm-profile-header-main .title-section a.name').text())
- $form.submit()
- }
- }).text('保存'))
- )
- )
- ).appendTo(document.body)
- .draggable({ handle: '.modal-dialog-title-draggable' })
-
- if(this.$dlg.length)
- retVal = true
-
- }
- return retVal
- }
-
- this.start = function($d) {
- if ($('#zh-global-spinner:visible').length) return
- if (!$d) $d = this.$dlg
- if (!$d) return
- if (!$('.izhihu-collection-links', $d).children().length) {
- handler(1, Number(url.data.param.query['page']), $d)
- }
- }
-
- }
-
- /**
- * 回答页
- */
-
- if(pageIs.Answer){
-
- var $lblQuestionMeta=$('#zh-question-meta-wrap')//question_meta
- ;
-
- var $questionWrap=$('#zh-question-meta-wrap');
- $questionWrap.children('.panel-container').bind('DOMNodeInserted',function(event){
- window.iZhihu.Comment.processComment($(event.target));
- });
- if(window.iZhihu.Comment.RightComment){
- //$questionWrap.children('.meta-item[name=addcomment]').prependTo($questionWrap);
- window.iZhihu.Comment.processCommentButton($questionWrap);
- if(!$('#izh_QuestionShadow').length){
- $('<div>',{'class':'izh_boxShadow',id:'izh_QuestionShadow'}).css({
- 'z-index': '-1'
- , 'position': 'relative'
- , 'top': -25
- , 'margin-left': -32
- }).prependTo('body>.zu-main:first').hide();
- }
- }
-
- //process each answer
- var $listAnswers=$('.zm-item-answer,.feed-item','#zh-question-answer-wrap');
- if($listAnswers&&$listAnswers.length){
- $listAnswers.each(function(i,e){
- window.iZhihu.Answer.processAnswer($(e),null
- , izhAuthorRear
- , false);
- });
- }
-
- $('#zh-question-answer-wrap').bind('DOMNodeInserted',function(event){
- var $na=$(event.target).filter('.zm-item-answer');
- if($na.length){
- window.iZhihu.Answer.processAnswer($na,null
- , izhAuthorRear
- , false);
- }
- });
-
- var $cm=$('.zm-comment-box',$questionWrap);
- 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);
- });
- }
- }
-
- /**
- * 收藏页
- */
- if(pageIs.Collection){
- //添加按钮
- $('#zh-list-meta-wrap')
- .append($('<span>', { 'class': 'zg-bull' }).text('•'))
- .append($('<a>', { href: 'javascript:;', id: 'getAllLinks' }).text('地址清单'));
-
- var btn = $('#getAllLinks');
- var result = [];
-
- //注册(不可用)点击事件
- btn.click(function(){
- var allLinksCollection=new allLinks('Collections','#zh-list-answer-wrap','收藏夹内容');
- if(!allLinksCollection.initDialog())return;
- $('.modal-dialog-bg').show();
- var y = ($win.height() - allLinksCollection.$dlg.width()) / 2
- , x = ($win.width() - allLinksCollection.$dlg.width()) / 2
- ;
- allLinksCollection.$dlg.css({'top': y, 'left': x}).fadeIn('slow');
- allLinksCollection.start();
- });
- }
- if(pageIs.Answers){
- //添加按钮
- $('.zm-profile-section-name')
- .append($('<span>', { 'class': 'zg-bull' }).text('•'))
- .append($('<a>', { href: 'javascript:;', id: 'getAllLinks' }).text('地址清单'));
-
- var btn = $('#getAllLinks');
- var result = [];
-
- //注册(不可用)点击事件
- btn.click(function(){
- var allLinksAnswers=new allLinks('Answers','#zh-profile-answer-list','用户回答');
- if(!allLinksAnswers.initDialog())return;
- $('.modal-dialog-bg').show();
- var y = ($win.height() - allLinksAnswers.$dlg.width()) / 2
- , x = ($win.width() - allLinksAnswers.$dlg.width()) / 2
- ;
- allLinksAnswers.$dlg.css({'top': y, 'left': x}).fadeIn('slow');
- allLinksAnswers.start();
- });
- }
-
- if(pageIs.MyCollection&&window.iZhihu.QuickFavo){
- var $favItems=$('#zh-favlists-wrap').children('.zm-item');
- $favItems.each(function(i,e){
- });
- }
-
- /*
- * 首页
- */
- var $topstory=$('#is-topstory2')
- , isTopStory=$topstory&&$topstory.length
- , propFeedType='data-type'//:'data-feedtype'
- , $lblHomeTitle=$('#zh-home-list-title')//activity_caption
- , $btnNewActivity=$('#zh-main-feed-fresh-button')//new_activity
- , $feedList=$('.zh-general-list')//feed_list
- , $topLinkHome=$('#zh-top-link-home')
- , $filter=//isTopStory?
- $('<span>', { 'class':'izh-feeds-filter' })
- .append($('<a>', { 'class': 'izh-button izh-feeds-filter-option', 'showFeeds': 'q' })
- .append($('<i>', { 'class': 'zg-icon' }))
- .append('问题')
- )
- .append($('<a>', { 'class': 'izh-button izh-feeds-filter-option', 'showFeeds': 'a' })
- .append($('<i>', { 'class': 'zg-icon' }))
- .append('回答')
- )
- .append($('<a>', { 'class': 'izh-button izh-feeds-filter-option', 'showFeeds': 'p,r', 'data-tip': 's$t$专栏、圆桌' })
- .append($('<i>', { 'class': 'zg-icon' }))
- .append('其他')
- )
- , $filterInfo=$('<a>',{'class':'izh-feeds-filter-info nothing',href:'javascript:void(0);'}).on('click',function(){$filter.trigger($filter.is(':hidden')||$filter.attr('doing')=='hide'?'show':'hide');})
- , ShowFeeds=function(type,enable){
- var id="izhCSS_FilterFeed_"+type
- , nd=document.getElementById(id)
- ;
- if(enable){
- if(nd)nd.parentNode.removeChild(nd);
- }else if(heads.length){
- if(!nd){
- nd=_doc.createElement('style');
- nd.type='text/css';
- nd.id=id;
- nd.appendChild(_doc.createTextNode('.feed-item['+propFeedType+'^="'+type+'"]{display:none}'));
- heads[0].appendChild(nd);
- }
- //{ROUNDTABLE_ADD_RELATED: "roundtable",ARTICLE_VOTE_UP: "post_vote",ARTICLE_CREATE: "post_create",RECOMMENDED: "feed_recommended",QUESTION_FOLLOW: "feed_question_follow",QUESTION_CREATE: "feed_question",ANSWER_VOTE_UP: "feed_answer_vote",ANSWER_CREATE: "feed_answer_answer"};
- }
- }
- , refreshFilterInfo=function(){
- var count=$feedList.children('.feed-item:hidden').length
- , info=' >过滤选项<'
- ;
- if(count){
- info='('+count+'条动态被隐藏)';
- $filterInfo.removeClass('nothing').css({display:''});
- }else{
- $filterInfo.addClass('nothing');
- }
- $filterInfo.text(info);
- }
- , feedsColumns=function(){ // Implemented by morley, modified by unogz
- //动态的类型
- var feedTypes = //isTopStory?
- [{
- index: 0,
- name: '全部',
- codeName: ''
- }, {
- index: 1,
- name: '问题',
- codeName: 'q'
- }, {
- index: 2,
- name: '回答',
- codeName: 'a'
- }, {
- index: 3,
- name: '专栏',
- codeName: 'p'
- }];
-
- //自定义 CSS 到 head
- var styles = [];
-
- styles.push('.za-filter{display: inline-block;margin-right:10px;cursor:pointer;color:#999;}');
- styles.push('.za-filter.active{color:#259;}');
- styles.push('.za-filter>.zg-num.hide{display:none;}');
-
- $('<style/>').text(styles.join('')).appendTo('head');
-
- var $zhHomeListTitle = $lblHomeTitle;
-
- //根据类型添加过滤按钮 到 #zh-home-list-title
- var filterBtns = []
- , i = feedTypes.length;
-
- while (i--) {
- filterBtns.push(
- $('<span>').addClass('za-filter')
- .attr('typeIndex', feedTypes[i].index)
- .text(feedTypes[i].name)
- .append($('<span>', { 'class': 'zg-num' }).addClass('hide'))
- .on('click', toggleFeedType)
- );
- }
-
- filterBtns.reverse();
- filterBtns[0].addClass('active');
-
- $zhHomeListTitle.contents().filter(function(i,e){
- return (e!=null&&(e.nodeValue||'').indexOf('最新动态')>=0)
- }).remove()
- $zhHomeListTitle.find('i').eq(0).after(filterBtns).remove();
-
- var $targetZero = filterBtns[0].find('.zg-num')
- , curfeedTypeCodeName = ''
-
- function typeMatch($elem) {
- if (curfeedTypeCodeName == '') {
- $elem.show();
- } else if (0 <= $elem.attr(propFeedType).indexOf(curfeedTypeCodeName)) {
- $elem.show();
- } else {
- $elem.hide();
- }
- }
-
- //按钮事件
- function toggleFeedType() {
- var $clicked = $(this);
- $clickedNum = $clicked.find('.zg-num');
- // 交互效果
- filterBtns.forEach(function(item) {
- item.removeClass('active');
- });
-
- $clicked.addClass('active');
-
- if ($clicked.attr('typeIndex') == 0) {
- $('.zg-num', '.za-filter').text('').addClass('hide');
- } else {
- var totalUnread = (parseInt($targetZero.text()) || 0) - (parseInt($clickedNum.text()) || 0);
- if (totalUnread != 0) {
- $targetZero.text(totalUnread);
- } else {
- $targetZero.text('').addClass('hide');
- }
-
- $clickedNum.text('').addClass('hide');
- }
- curfeedTypeCodeName = feedTypes[$clicked.attr('typeIndex')].codeName;
- // 信息流过滤
- $('.feed-item').each(function() {
- typeMatch($(this));
- });
- }
-
- function getTypeIndexByCodeName(codeName) {
- var i = feedTypes.length;
- while (i--) {
- if (codeName == feedTypes[i].codeName) {
- return i;
- };
- }
- }
-
- var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
-
- //监听推送
- var hasNewFeed = false;
- //create an observer instance
- var observer = new MutationObserver(function(mutations) {
- if ( !! parseInt($btnNewActivity.text())) {
- mutations.forEach(function(mutation) {
- if (mutation.type === 'childList') {
- console.log('Has New Feed');
- // 有新推送则触发之
- hasNewFeed = true;
- $btnNewActivity.text('');
- $.when($btnNewActivity[0].click()).done(function() {
- setTimeout(function() {
- hasNewFeed = false;
- }, 1000);
- });
- }
- });
- };
- });
-
- //pass in the target node, as well as the observer options
- observer.observe(
- $btnNewActivity[0], {
- childList: true
- });
-
- //监听插入
- $feedList.on("DOMNodeInserted", function(e) {
- var $self = $(e.target);
-
- if ($self.hasClass('feed-item')) {
- if (hasNewFeed) {
- $self.hide();
- var $target = filterBtns[getTypeIndexByCodeName($self.attr(propFeedType))].find('.zg-num');
- $target.text((parseInt($target.text()) || 0) + 1).removeClass('hide');
- $targetZero.text((parseInt($targetZero.text()) || 0) + 1).removeClass('hide');
- } else {
- typeMatch($self);
- }
- }
- });
- }
- , homeFeeds=function(izhHomeFeedsColumns){
- if (izhHomeFeedsColumns){
- feedsColumns();
- }else{
- $filter.children('.izh-feeds-filter-option').addClass('on').click(function(event){
- var i=0
- , $e=$(this)
- , fs=$e.attr('showFeeds')
- , fa=fs.split(',')
- ;
- $('.izh-feeds-filter-option[showFeeds="'+fs+'"]').toggleClass('on');
- for(;i<fa.length;i++){
- ShowFeeds(fa[i],$e.is('.on'));
- }
- refreshFilterInfo();
- });
- if($topLinkHome.length){
- var $filter2=$('<div>')
- .css({position:'absolute',border:'1px solid #777',backgroundColor:'#fff'}).hide()
- .append($filter.clone(true,true).css({display:'block'}))
- .on('show',function(){
- var $e=$(this).stop();
- if($e.is(':hidden'))
- $e.css({display:'',opacity:0})
- $e.animate({opacity:1},'slow');
- })
- .on('hide',function(){
- var $e=$(this).stop();
- $e.fadeOut('slow');
- })
- ;
- $topLinkHome.after($filter2).parent()
- .on('mouseenter',function(event){
- var $e=$(this)
- , $f=$e.children().last()
- ;
- $f.trigger('show');
- $filterInfo.filter('.nothing').hide();
- })
- .on('mouseleave',function(event){
- var $e=$(this)
- , $f=$e.children().last()
- ;
- $f.trigger('hide');
- $filterInfo.filter('.nothing').hide();
- })
- ;
- }
- if($lblHomeTitle.length){
- $filterInfo.css({
- display:'none'
- , textDecoration:'none'
- , cursor:'pointer'
- }).insertBefore(isTopStory?$topstory:$('#feed-ver'));
- $lblHomeTitle.css({overflow:'hidden'})
- .prepend($filter)
- //.children('i:first')
- .on('mouseenter',function(event){
- var $e=$(this)
- , $f=$e.children('.izh-feeds-filter-info.nothing').stop()
- ;
- if($f.is(':hidden'))
- $f.css({display:'',opacity:0})
- $f.animate({opacity:1},'fast');
- })
- .on('mouseleave',function(event){
- var $e=$(this)
- , $f=$e.children('.izh-feeds-filter-info.nothing').stop()
- ;
- $f.fadeOut('fast');
- })
- ;
- $filter.css({marginLeft:-$filter.width(),display:'none'})
- .on('show',function(){
- var $e=$(this);
- if($e.attr('doing')==='show')return;
- $e.attr('doing','show').stop();
- if($e.is(':hidden'))
- $e.css({display:''})
- $e.animate({marginLeft:0},'slow',function(){$(this).css('display','').removeAttr('doing');});
- })
- .on('hide',function(){
- var $e=$(this);
- if($e.attr('doing')==='hide')return;
- $e.attr('doing','hide').stop();
- $e.animate({marginLeft:-$filter.width()},'slow',function(){$(this).css('display','none').removeAttr('doing');});
- })
- .on('mouseenter',function(event){
- var $e=$(this)
- ;
- $e.trigger('show');
- })
- .on('mouseleave',function(event){
- var $e=$(this)
- ;
- $e.trigger('hide');
- })
- ;
- refreshFilterInfo();
- }
- }
- }
- ;
- if(pageIs.Home||pageIs.Debuts){
- $feedList.find('.feed-item').each(function(i,e){
- window.iZhihu.Answer.processAnswer($(e),null
- , izhAuthorRear
- , izhAuthorList
- );
- });
- $feedList.bind('DOMNodeInserted',function(event){
- var $item=$(event.target);
- if($item.is('.feed-item')){
- window.iZhihu.Answer.processAnswer($item,null
- , $body.attr('izhAuthorRear')=='1'
- , $body.attr('izhAuthorList')=='1'
- );
- refreshFilterInfo();
- }
- });
- }
-
- if (pageIs.Home){
- var bHomeFeedsColumns=window.iZhihu.config['HomeFeedsColumns']
- if (izhHomeNoti&&!bHomeFeedsColumns
- && $lblHomeTitle.length
- && $btnNewActivity.length
- ){
- $lblHomeTitle.css({
- 'float':'left'
- , 'margin-bottom':'2px'
- , 'line-height':'32px'
- , 'width':'100%'
- }).next().css('clear','both');
- $btnNewActivity.css({
- 'float':'right'
- , 'margin':'0'
- , 'line-height':'22px'
- }).appendTo($lblHomeTitle);
- }
- homeFeeds(bHomeFeedsColumns);
- }
-
-
- /**
- * 问题页
- */
-
- if(pageIs.Question){
-
- var $lblQuestionMeta=$('#zh-question-meta-wrap')//question_meta
- , $listAnswers=$('#zh-question-answer-wrap,#zh-question-collapsed-wrap').children()//$('.zm-item-answer','#zh-single-question')
- , numAnswersCount=$listAnswers.length
- , $btnCollapsedSwitcher=$('#zh-question-collapsed-switcher')
- , numCollapsedCount=!$btnCollapsedSwitcher.length||$btnCollapsedSwitcher.is(':hidden')?0:parseInt($('#zh-question-collapsed-num').text())
- , numAnswersCountTotal=numAnswersCount+numCollapsedCount
- , $reply=$('#zh-question-answer-form-wrap')//reply_form
- ;
- if($lblQuestionMeta.length){
- var s=new Array()
- , $a=$('<a>')
- , $c=$('<span>',{'class':'zg-bull'}).text('•')
- , $p=$lblQuestionMeta.children('.zm-meta-panel').children('a.meta-item:last')
- , $m=$('.zu-answer-form-disabled-wrap:visible > a','#zh-question-answer-form-wrap')
- ;
- if($m.length){
- s.push($m.attr('href'));
- $a.text('我的回答');
- }else if($reply.length){
- var id='new_answer'
- , $b=$('<a>',{name:id}).before($reply.children().first());
- s.push('#draft');
- $a.text('我要回答');
- }
- $c.insertAfter($p);
- $a.attr('href',s.join('')).attr('target','_self')
- .insertAfter($c);
- }
- if (izhAuthorList&&
- numAnswersCountTotal>100&&
- confirm('这个问题的回答数较多,是否暂时关闭「iZhihu 回答目录」?')){
- //$('#izhCSS_comment').remove();
- //return;
- izhAuthorList=false;
- $body.attr('izhAuthorList','0');
- }
- //console.log((new Date()).getTime());
-
- var $lblAnswersCount=$('#zh-question-answer-num')//answers_count
- , $uno=$('<div>',{'class':'uno',style:'float:left'})//izh_AuthorsList
- , $ppT=$('<span>',{'class':'meT',style:'display:none'})//izh_AuthorsList_TopSelfIndicator
- , $frm=$('<div>',{'class':'frame'})//izh_AuthorsList_frame
- , $ppB=$('<span>',{'class':'meB',style:'display:none'})//izh_AuthorsList_BottomSelfIndicator
- , $pp=$('<ul>',{'class':'pp'})//izh_AuthorsList_UL
- , $ppI=$('<div>')
-
- ;
-
- window.iZhihu.$unoAnswers = $uno
- /*
- //答案按时间排序
- if(utils.getCfg('answer_orderByTime')){
- client.click('.zh-answers-filter-popup div[data-key=added_time]');
- }
- */
- var $questionWrap=$('#zh-question-meta-wrap');
- $questionWrap.children('.panel-container').bind('DOMNodeInserted',function(event){
- window.iZhihu.Comment.processComment($(event.target));
- });
- if(window.iZhihu.Comment.RightComment){
- //$questionWrap.children('.meta-item[name=addcomment]').prependTo($questionWrap);
- window.iZhihu.Comment.processCommentButton($questionWrap);
- if(!$('#izh_QuestionShadow').length){
- $('<div>',{'class':'izh_boxShadow',id:'izh_QuestionShadow'}).css({
- 'z-index': '-1'
- , 'position': 'relative'
- , 'top': -25
- , 'margin-left': -32
- }).prependTo('body>.zu-main:first').hide();
- }
- }
-
- //process each answer
- if($listAnswers&&$listAnswers.length){
- if(izhAuthorList){
- $uno.appendTo($banner);
- $ppT.appendTo($uno);
- $frm.appendTo($uno);
- $pp.appendTo($frm);
- $ppB.appendTo($uno);
- //uno.appendChild(ppI);
- $uno.$endOfLastA=$('<li>').addClass('endOfLastA').appendTo($pp)
- }
- $listAnswers.each(function(i,e){
- window.iZhihu.Answer.processAnswer($(e),$pp
- , izhAuthorRear
- , izhAuthorList);
- });
- if($reply.children('.zu-answer-form-disabled-wrap').is(':hidden')){
- var $ppla=$('<a>',{href:'#draft',target:'_self'})
- .append($('<table>', { 'class': 'plus' })
- .append($('<tr>')
- .append($('<td>'))
- .append($('<td>'))
- )
- .append($('<tr>')
- .append($('<td>'))
- .append($('<td>'))
- )
- )
- .append($('<span>', { 'class': 'name func' }).text('-new-'))
- , $ppl=$('<li>')
- .append($ppla)
- .appendTo($pp)
- ;
- }
- }
- var resizeAuthorList=function($f){
- // Adjust AuthorList's size and locate its position
- if(!$f||!$f.length)return;
- var frm=$f.get(0);
- var width=window.iZhihu.Answer.ppWidth
- , height=$win.height()-$main.offset().top-3-$f.position().top;
- if(frm.scrollHeight>height){
- $f.height(height);
- width+=20;
- }else{
- $f.height('');
- }
- $f.width(width);
- };
- if(isNaN(numCollapsedCount))numCollapsedCount=0;
- if($listAnswers.length||numCollapsedCount){
- if(izhAuthorList){
- $uno.css({
- 'float':'none'
- , 'left':9-$uno.width()
- });
- if(!$btnCollapsedSwitcher.length&&!numCollapsedCount)
- resizeAuthorList($frm);
- $('<div>',{'class':'modal-dialog-title'}).css({
- 'border-top-left-radius':0
- }).insertBefore($ppT);
- $uno.mouseover(function(){
- resizeAuthorList($('.frame',this));
- $(this).css('left','0');
- }).mouseout(function(){
- $(this).css('left',9-$(this).width());
- });
- if(window.iZhihu.Answer._e){
- $uno.children('.meT').css('display',0>window.iZhihu.Answer._e.offsetTop-$frm.scrollTop()?'':'none');
- $uno.children('.meB').css('display',$frm.height()<window.iZhihu.Answer._e.offsetTop-$frm.scrollTop()+window.iZhihu.Answer._e.offsetHeight?'':'none');
- }
- }
- if($btnCollapsedSwitcher.length){
- if(numCollapsedCount>0){
- $('#zh-question-collapsed-wrap').show().bind('DOMNodeInserted',function(event){
- var $a=$(event.target);
- if($a.is('.zm-item-answer')){
- window.iZhihu.Answer.processAnswer($a,$pp
- , $body.attr('izhAuthorRear')=='1'
- , $body.attr('izhAuthorList')=='1'
- );
- var count = $('.zm-item-answer[izh_processed=1]','#zh-question-collapsed-wrap').length;
- if(count==numCollapsedCount){
- resizeAuthorList($frm);
- }
- }
- });
- }
- $btnCollapsedSwitcher[0].click();
- }
- }
-
- $('#zh-question-answer-wrap').bind('DOMNodeInserted',function(event){
- var $na=$(event.target).filter('.zm-item-answer');
- if($na.length){
- window.iZhihu.Answer.processAnswer($na,$pp
- , $body.attr('izhAuthorRear')=='1'
- , $body.attr('izhAuthorList')=='1'
- );
- }
- });
- //console.log((new Date()).getTime());
-
- var $cm=$('.zm-comment-box',$questionWrap);
- 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);
- });
- }
- }
-
- /**
- * 配置界面
- */
-
- var $btnSettings = $('<li>')
- .append($('<a>', { href: 'javascript:void(0);', tabindex: '-1' })
- .append($('<i>', { 'class': 'zg-icon zg-icon-dd-settings izhihu-settings' }))
- .append('iZhihu')
- ).click(function(){
- var $settings = $('#izh-dlg-settings')
- $('.modal-dialog-bg').show()
- $('.izh-option', '#izh-dlg-settings').each(function(i, e){
- var key = e.getAttribute('name')
- , value = utils.getCfg(key)
- , $e = $(e)
- if ($e.is('input:checkbox')) {
- if(value)
- $(e).iCheck('check')
- } else if ($e.is('select')) {
- e.value = value
- }
- })
- $settings.css({
- 'z-index':'99'
- , 'position':'fixed'
- , 'top': ($win.height() - $settings.height()) / 2
- , 'left': ($win.width() - $settings.width()) / 2
- }).fadeIn('slow')
- }).insertBefore($('ul#top-nav-profile-dropdown li:last'))
- , $dlgSettings = $('<div>', { id: 'izh-dlg-settings', 'class': 'modal-dialog', tabindex: '0', style: 'display:none;width:600px'})
- .append($('<div>', { 'class': 'modal-dialog-title modal-dialog-title-draggable' })
- .append($('<span>', { 'class': 'modal-dialog-title-text' }).text('配置选项'))
- .append($('<span>', {
- 'class': 'modal-dialog-title-close'
- , click: function(){
- $('.modal-dialog-bg').hide()
- $('#izh-dlg-settings').first().hide()
- }
- }))
- )
- .append($('<div>', { 'class': 'modal-dialog-content' })
- .append($('<div>', {})
- .append($('<div>', { 'class': 'zg-section' })
- .append($('<table>', { 'class': 't_set_tb', border: 0, cellspacing: 0, cellpadding: 5, width: '100%' })
- .append($('<thead>', {})
- .append($('<tr>', {})
- .append($('<td>', { colspan: 6, align: 'left' }).text('(更改后设置将立刻保存,但只有当页面再次打开时才会生效)')
- .prepend(
- $('<b>').text('功能开关')
- )
- )
- )
- )
- .append($('<tbody>', {})
- /*
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('在首页直接浏览常去话题'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': ""}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setHomeTopics", name: "HomeTopics" }))
- )
- )
- */
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('改变网页样式外观'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$* 首页隐藏大头像<br/>* 缩进投票按钮(问题/回答页)<br/>* 按钮图标动画 "}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setHomeLayout", name: "HomeLayout" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('自动收起导航栏'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$* 滚动页面至下方时,自动收起顶部导航栏 "}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setTopNavAutoFold", name: "TopNavAutoFold" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('调整首页「新动态」提醒按钮'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$挪到 Timeline 右上角<br/>与标题「最新动态」平行"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setHomeNoti", name: "HomeNoti" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('开启「首页分栏」'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$将首页动态分类单独显示:<br/>问题、回答、专栏"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setHomeFeedsColumns", name: "HomeFeedsColumns" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('将用户信息挪到回答下方'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': ""}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setAuthorRear", name: "AuthorRear" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { align: 'left' }).text('开启「右舷评论」'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$在页面右侧浮动显示打开的评论列表<br/>在首页、问题、回答页中生效"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setRightComment", name: "ShowComment" }))
- )
- .append($('<td>', { width: 1, nowrap: 'nowrap', align: 'left' }).text('关闭时自动卷屏至对应条目'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$仅对右舷评论生效"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setRightComment_AutoScrollPageWhenClosing", name: "RightComment_AutoScrollPageWhenClosing" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('开启「快速屏蔽」(加入黑名单/取消关注)功能'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$在赞同列表、评论列表中使用"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setQuickBlock", name: "QuickBlock" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('开启「快速收藏」菜单'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$鼠标移上「收藏」按钮时显示"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setQuickFavo", name: "QuickFavo" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('开启「回答目录」'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$在问题页面左侧掩藏,鼠标移上时展开<br/>并在右侧即时显示回答预览"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<input>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setAuthorList", name: "AuthorList" }))
- )
- )
- .append($('<tr>', {})
- .append($('<td>', { colspan: 4, align: 'left' }).text('选择「外部搜索引擎」'))
- .append($('<td>', { align: 'right'})
- .append($('<i>', { 'class': 'icon icon-help', 'data-tip': "s$t$你懂的"}))
- )
- .append($('<td>', { align: 'right'})
- .append($('<select>', { type: "checkbox", 'class': "izh-option", id: "iZhihu_setSearchEngineOutside", name: "SearchEngineOutside"})
- .append($('<option>', { value:'google' }).text('Google'))
- .append($('<option>', { value:'baidu' }).text('百度'))
- )
- )
- )
- )
- )
- )
- .append($('<div>', { 'class': 'zg-left' })
- .append('当前版本:'+version+';')
- .append('最后更新:'+updateDate)
- .append($('<br>'))
- .append('制作:')
- .append($('<a>', { 'data-tip': "p$t$unogzx", href: "/people/unogzx" }).text('@钢盅郭子'))
- .append(',')
- .append($('<a>', { 'data-tip': "p$t$liuyong25", href: "/people/liuyong25" }).text('@天猪(刘勇)'))
- .append(',')
- .append($('<a>', { 'data-tip': "p$t$luoxr", href: "/people/luoxr" }).text('@yukirock'))
- .append(',')
- .append($('<a>', { 'data-tip': "p$t$morlay", href: "/people/morlay" }).text('@墨磊'))
- .append($('<br>'))
- .append('感谢:')
- .append($('<a>', { 'data-tip': "p$t$PeterDeng", href: "/people/PeterDeng" }).text('@邓文博'))
- .append(',')
- .append($('<a>', { 'data-tip': "p$t$cakvfcwz", href: "/people/cakvfcwz" }).text('@水云逸'))
- )
- .append($('<div>', { 'class': 'zm-command' })
- .append($('<a>', { id: 'izhRefresh', 'class': 'zg-btn-blue', href: 'javascript:void(0);' }).text('刷新网页'))
- )
- )
- ).appendTo(_doc.body).draggable({handle: '.modal-dialog-title-draggable'})
-
- $('.izh-option', $dlgSettings).each(function(i, e){
- var key = e.getAttribute('name')
- , $chk = $(e).filter('input:checkbox').iCheck({
- checkboxClass: 'icheckbox_square-blue'
- , increaseArea: '20%' // optional
- }).bind('ifChanged', function(event){
- var value = this.checked
- utils.setCfg(key, value)
- })
- , $sel = $(e).filter('select').bind('change', function() {
- utils.setCfg(key, this.value)
- })
- })
- $('#izhRefresh').click(function(){
- location.reload()
- })
-
- /*
- * 设置-屏蔽
- */
- if (pageIs.SettingsFilter){
- var all=[]
- , $secBlockedUsers = $('#section-blocked-users')
- , $secBlockedUsersTitle = $secBlockedUsers.children('.settings-section-title:first').children('h2:first')
- , $pnlUnBlockedUsers = $('<div>').appendTo($secBlockedUsersTitle).css({
- float: 'right'
- })
- , $lbFilterBlockedUsers = $('<label/>').appendTo($pnlUnBlockedUsers).css({
- float: 'left'
- })
- , $tbFilterBlockedUsers = $('<input/>', {
- 'class': 'zg-form-text-input zg-mr15'
- , placeholder: '用户名或昵称'
- }).appendTo($pnlUnBlockedUsers).on('keyup', function(event){
- var kw=this.value
- , n=0
- , $listBlockedUsers=$secBlockedUsers.find('.blocked-users > .item > .body > a').each(function(i,e){
- var $a = $(e)
- , href = e.getAttribute('href') || ''
- , text = e.innerHTML
- , notMatch = (href.indexOf(kw) < 0 && text.indexOf(kw) < 0)
- if(!notMatch){
- n++
- }
- $a.closest('.item').css('display', notMatch ? 'none' : '')
- })
- $lbFilterBlockedUsers.text([n?n+' ':'无','人匹配:'].join(''))
- }).css({
- float: 'left'
- }).trigger('keyup')
- , funcUnblock=function(){
- if(all.length==0){return}
- var e=all.shift()
- $.post('/settings/unblockuser', $.param({
- _xsrf: $('input[name=_xsrf]').val()
- , uid: e.getAttribute('data-id')
- })).done(function(result){
- $(e).remove()
- }).fail(function(result){
- all.push(e)
- }).always(function(result){
- $lbFilterBlockedUsers.text([all.length?all.length+' ':'无','人匹配:'].join(''))
- funcUnblock()
- })
- }
- , h=$tbFilterBlockedUsers.outerHeight()
- , $btUnBlockedUsers = $('<input/>', {
- 'class': 'zg-btn zg-btn-unfollow'
- , type: 'button'
- , value: '取消屏蔽'
- }).appendTo($pnlUnBlockedUsers).on('click', function(event){
- $('#section-blocked-users > .settings-item > .settings-item-content > .blocked-users > .item').each(function(i,e){
- var $e = $(e)
- if($e.is(':visible')){
- all.push(e)
- }
- })
- funcUnblock()
- }).css({
- float: 'left'
- }).height(h)
- $lbFilterBlockedUsers.css('line-height', h+'px')
- }
-
- var firstRun = parseInt(utils.getValue('izh_fr','1'));
-
- function _FRshow(){
- if(firstRun>0 && document.domain=='zhihu.com'){
- var tboxleft=0;
- var accitem1= $('#zh-top-inner div.top-nav-profile .zu-top-nav-userinfo');
- if(accitem1.length>0){
- tboxleft = accitem1.offset().left;
- }
- if(tboxleft>0){
- $('<div>', { id: 'iZhihu_tbox', 'class': 't_frshow' }).appendTo('body.zhi').hide()
- .append($('<div>', { 'class': 't_txtshow t_tbox' })
- .append('感谢使用')
- .append($('<b>').text('iZhihu'))
- .append($('<br />'))
- .append('您可通过菜单【iZhihu】对功能进行设置')
- .append($('<br />'))
- .append($('<s>')
- .append($('<i>'))
- )
- );
- $('#iZhihu_tbox').css('left',tboxleft-100).show().mouseenter(function(){
- utils.setValue('izh_fr','0');
- //_Menu();
- $(this).remove();
- });
- }
- }
- }
-
- setTimeout(function(){
- _FRshow();
- },1000);
-
-
- console.log('iZhihu '+version+' started.');
- //console.log(window.iZhihu);
- //console.log((new Date()).getTime());
- //});