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> ';
desc += 'Speed(Shift+1~5) : <b><span id='+_msgPanelValue_speed+'>-</span></b> ';
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();
