thread win

sort comments by favorites

2014-07-31 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name           thread win
// @namespace      bperkins
// @description    sort comments by favorites
// @include        http://www.metafilter.com/*
// @include http://ask.metafilter.com/*
// @include http://metatalk.metafilter.com/*
// @version        1.2
// ==/UserScript==


var savedstuff;

var winNode;
var unwinNode;
var copy;



function sortFav(a,b) {



    return (-(getFav(a)-getFav(b)));

}
function getFav(a) 
{
   var thing = a.getElementsByTagName("SPAN");
   if (thing.length ==0 ) {
          return 1;
    }   

    thing = thing[0].getElementsByTagName("SPAN");


    if (thing.length ==0) {
    	
       thing = a.getElementsByTagName("SPAN");
       if (thing.length ==0 ) {
          return 1;
       }
       thing =thing[0].getElementsByTagName("A");
           

       thing =new Array(thing[2]);

	if (thing == undefined) {
          thing= new Array();
          
        }	

    } else {


    thing = thing[0].getElementsByTagName("SPAN");
    

    thing = thing[0].getElementsByTagName("A");
    }
    var fav =0;
    re = new RegExp("\\d+")


    if (thing.length > 0 &&thing[0] != undefined ) { 

      var m =re.exec(thing[0].innerHTML);
      fav=m[0]

        }


    return (1*fav)+1;

}




function  unwin () {

    copy.replaceChild(winNode,unwinNode);

    page = document.evaluate(
			     "//div[@id='page']",
			     document,
			     null,
			     XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
			     null);


    for (var i = 0; i < page.snapshotLength; i++) {
   
	var parent=page.snapshotItem(i);
	
	var newstuff = parent.childNodes;
		
	while ( newstuff.length >0 ) {
	    
	    parent.removeChild(newstuff[0]);
	}
	

	for (var j = 0; j < savedstuff.length; j++) {
	    parent.appendChild(savedstuff[j]);
	}   
	
    }
}


function  threadwin () {

    copy.replaceChild(unwinNode,winNode);


    page = document.evaluate(
			     "//div[@id='page']",
			     document,
			     null,
			     XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
			     null);


    for (var i = 0; i < page.snapshotLength; i++) {
   
	var parent=page.snapshotItem(i);
	    
	var stuff = parent.childNodes;
	var commentidxs = new Array;
	var comments = new Array;
	var objects = new Array ;
	 savedstuff=new Array;

	var k=0;     
	var favs =""

	    for (var j = 0; j < stuff.length; j++) {

        if (stuff[j].nodeName.toUpperCase()=="DIV" &&
          (stuff[j].getAttribute("class") == "comments" ||
           stuff[j].getAttribute("class") == "comments bestleft"||
           stuff[j].getAttribute("class") == "comments best")) {
		
      
		    commentidxs.push(j);
		    comments.push(stuff[j]);
		} 
   
		objects.push(stuff[j]);
		savedstuff.push(stuff[j]);

	    }

	comments.sort(sortFav);

	for (var j = 0; j < comments.length; j++) {
	    objects[commentidxs[j]]=comments[j];
	}


	while ( stuff.length >0 ) {

	    parent.removeChild(stuff[0]);
	}


	for (var j = 0; j < objects.length; j++) {
	    parent.appendChild(objects[j]);
	}   

    }
}


res = document.evaluate(
    "//div[@class='copy']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

copy=res.snapshotItem(0)

    if (copy.parentNode.id == "page" ) {


	winNode = document.createElement('a');
	winNode.innerHTML = "<small>[threadwin]</small> ";
	winNode.href ="#";
	winNode.addEventListener("click", threadwin, true);
	
	copy.appendChild( winNode );
	
	unwinNode = document.createElement('a');
	unwinNode.innerHTML = "<small>[unwin]</small>";
	unwinNode.href ="#";
	unwinNode.addEventListener("click", unwin, true);
	

	
    }