Flickr Zoomer for RSS Reader

By Semon Last update 3 hours ago — Installed 441 times. Daily Installs: 1, 2, 0, 0, 2, 1, 1, 4, 3, 1, 2, 0, 1, 2, 4, 2, 3, 5, 1, 2, 0, 6, 2, 1, 0, 0, 3, 0, 1, 0, 0, 4

There are 9 previous versions of this script.

// Flickr Zoomer for RSS reader
// version 0.6
// 2009-7-22
// Copyright (c) 2009, Semon Xue (semonxue@gmail.com)
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// --------------------------------------------------------------------
// ==UserScript==
// @name           Flickr Zoomer for RSS reader
// @namespace      http://diveintomark.org/projects/greasemonkey/
// @description    Flickr Zoomer for RSS Reader
// @include         http://reader.google.tld/reader/*
// @include         https://reader.google.tld/reader/*
// @include         http://www.google.tld/reader/*
// @include         https://www.google.tld/reader/*
// @include         https://xianguo.com/reader*
// @include         http://xianguo.com/reader*
// ==/UserScript==
//
//Change Logs
//0.7   - Add compatibility function to folder view.Now you can organise all your flickr RSS to a folder with keyword flickr.
//0.6	- Add auto scroll mode. Shortcuts :
//							 				Shift+1~5	- Change speeds(Slowest ~ Fastest);
//											Shift+z		- Switch between auto-scroll mode and manual-scroll mode;
//											Any Click to stop auto-scrolling;
//											
//0.5	- Increased URLs compatibility.  
//0.4	- Add support for Xianguo.com - a Chinese RSS reader like gReader. Update this script at Beijing airport.FOUR hours dely!
//		- Change name from 'Flickr Group Zoomer for Google Reader' to 'Flickr Zoomer for RSS reader'.
//0.3	- use mouse scroll event to replace click event,so you need not to waste clicks.

var _msgPanelId = 'scroll-info-panel-0';
var _msgPanelValue_mode = 'scroll-info-panel-mode';
var _msgPanelValue_speed = 'scroll-info-panel-speed';

var _autoScrollSpeedStep = 25;
var _autoScrollSpeed = 0;
var _autoScrollMode	= true;

var _autoScrollBody;


document.addEventListener('scroll', myScrollEventHandle, true);
document.addEventListener('keydown', myKeyDownEventHandle, true);
document.addEventListener('click', myClickEventHandle, true);

function myKeyDownEventHandle(event){
	
	//检测键盘输入,打开/关闭信息面板
	if(event.shiftKey && event.keyCode && checkFlickrRSS()){
		if(!_autoScrollBody){
			return true;
		}
		switch(String.fromCharCode(event.keyCode)){
			case 'z' :
			case 'Z' :
				setAutoScrollMode(!getAutoScrollMode());
				makeAutoScroll();
				showMsgPanel();
			break;	
			
			case '1' :
			case '2' :
			case '3' :
			case '4' :
			case '5' :
				setAutoScrollSpeed(String.fromCharCode(event.keyCode));
				makeAutoScroll();
				showMsgPanel();
			break;
			
		}
	}
}

function myClickEventHandle(event){
	//停止自动滚屏
	setAutoScrollMode(false);
	//alert(checkFlickrRSS());
	if(checkFlickrRSS()){
		showMsgPanel();
	}else{
		hideMsgPanel();
	}
}

function myScrollEventHandle(e){
	//alert(checkFlickrRSS());
	if(checkFlickrRSS()){
		doReparseFlickr();
		
		showMsgPanel();
	}else{
		hideMsgPanel();	
	}
}

function makeAutoScroll(){
	
	setTimeout(function(){
							if(!_autoScrollBody){
								return false;	
							}
							_autoScrollBody.scrollTop += getAutoScrollSpeed();

							//检测是否继续翻滚(是否自动滚动?是否越界?)
							//if(_autoScrollMode && (_autoScrollBody.scrollTop+_autoScrollBody.clientHeight)<_autoScrollBody.scrollHeight){
							if(getAutoScrollMode()){
								makeAutoScroll();
							}else{
								//alert("auto Stop");	
							}
						},200);
}

function checkFlickrRSS(){
	
	// for Google Reader
	if(		checkString(top.location.href,"api\\.flickr\\.com") ||
			checkString(top.location.href,"flickr")){
		if(document.getElementById('entries')){
			_autoScrollBody = 	document.getElementById('entries');	
			return 'flickr'	;
		}
	}
	
	// for xianguo.com
	if(document.getElementById('itemList_header')){
		if(checkString(document.getElementById('itemList_header').innerHTML,"flickr\\.com")){
		_autoScrollBody = 	document.getElementById('context_itemList');
		return 'xianguo';
		}
	}
	
	return false;
}

function setAutoScrollMode(_mode){
		_autoScrollMode = _mode ? true : false;
		setMsg(_msgPanelValue_mode , _autoScrollMode ? "On" : "Off");
		return _autoScrollMode;
}

function getAutoScrollMode(){
	return _autoScrollMode;
}

function setAutoScrollSpeed(_speedLevel){
	_speedLevel = parseInt(_speedLevel);
	_autoScrollSpeed = (_speedLevel >=0 ? _speedLevel :  _autoScrollSpeed) * _autoScrollSpeedStep;
	setMsg(_msgPanelValue_speed , (_speedLevel*20)+" %");
	return _autoScrollSpeed;
}

function getAutoScrollSpeed(){
	return 	_autoScrollSpeed;
}

function setMsg(k,v){
	if(document.getElementById(k)){
		document.getElementById(k).innerHTML = v;
	}else{
		return false;	
	}
}

function createMsgPanel(){
	if(document.getElementById(_msgPanelId)){
		return true;
	}
	var div,desc;
	div = document.createElement('div');
	div.id = _msgPanelId;
	div.style.position			= 'fixed';
	div.style.right				= '260px';
	div.style.bottom			= '2px';
	div.style.border			= '0px';
	div.style.backgroundColor	= '#333333';
	div.style.color				= '#ffffff';
	div.style.margin			= '2px';
	div.style.padding			= '4px';
	div.style.width				= '25%';
	div.style.fontSize			= '9pt';
	div.style.display			= 'none';
	
	desc = '<div align="center">';
	desc += 'Active(Shift+Z) : <b><span id='+_msgPanelValue_mode+'>-</span></b>&nbsp;&nbsp;';
	desc += 'Speed(Shift+1~5) : <b><span id='+_msgPanelValue_speed+'>-</span></b>&nbsp;&nbsp;';
	desc +=	'';
	desc += '</div>';
	div.innerHTML = desc;
	
	window.addEventListener(
	    "load",
	   function() {
	        document.body.appendChild(div);
			setAutoScrollMode(false);
			setAutoScrollSpeed(1);
	    },
	    true);
	
}

function showMsgPanel(){
	if(!document.getElementById(_msgPanelId)){
		return false;	
	}
	if(checkFlickrRSS()){
		document.getElementById(_msgPanelId).style.display = 'block';
		//setTimeout(function(){hideMsgPanel();},5000);
	}
}

function hideMsgPanel(){
	if(document.getElementById(_msgPanelId)){
		document.getElementById(_msgPanelId).style.display = 'none';
	}
}

function doReparseFlickr(){
   	var allTextareas = document.getElementsByTagName('img');
	for (var i = 0; i < allTextareas.length; i++) {
		if(checkString(allTextareas[i].src,"static\\.flickr\\.com") && !allTextareas[i].hasAttribute("isReplaced")){
			allTextareas[i].removeAttribute("width");
			allTextareas[i].removeAttribute("height");
			allTextareas[i].setAttribute("style","border:#cccccc solid 4px");
			var tmpStr = allTextareas[i].src;
			allTextareas[i].src = tmpStr.substring(0,tmpStr.length-6)+"_d.jpg";
			//
			var photoLinkObj = allTextareas[i].parentNode;
			//
			var photoHolderObj = allTextareas[i].parentNode.parentNode;
						
			allTextareas[i].setAttribute("isReplaced","true");
			}
		}
		
	}

function checkString(str,reg){
	if(str.length){
		var re = new RegExp(reg);
		var result = re.exec(str);
		return result ? result : false;

	}else{
		return false;
	}
}

createMsgPanel();