Greasy Fork is available in English.
You can place a marker on the last newsfeed you have read, so it can be found easily next time. Ctrl-Click on an item to mark it, again to remove the mark.
当前为
var Flower;
(function (Flower) {
(function (csser) {
/**
* class names are case sensitive: http://devedge-temp.mozilla.org/viewsource/2001/css-class-id/
*/
function hasClass(e, name) {
return (new RegExp('(^|\\s)' + name + '(\\s|$)', 'gm')).test(e.className);
}
csser.hasClass = hasClass;
})(Flower.csser || (Flower.csser = {}));
var csser = Flower.csser;
})(Flower || (Flower = {}));
/// <reference path="hasClass.ts" />
var Flower;
(function (Flower) {
(function (csser) {
function addClass(e, name) {
if (!csser.hasClass(e, name)) {
e.className += (' ' + name);
}
}
csser.addClass = addClass;
})(Flower.csser || (Flower.csser = {}));
var csser = Flower.csser;
})(Flower || (Flower = {}));
var Flower;
(function (Flower) {
(function (csser) {
function removeClass(e, name) {
e.className = e.className.replace(new RegExp('(^|\\s+)' + name + '(?=\\s|$)', 'gm'), '');
}
csser.removeClass = removeClass;
})(Flower.csser || (Flower.csser = {}));
var csser = Flower.csser;
})(Flower || (Flower = {}));
var Flower;
(function (Flower) {
(function (csser) {
function createStyle(rule) {
var style = document.createElement('style');
style.type = 'text/css';
if (style.styleSheet) {
style.styleSheet.cssText = rule; // IE
} else {
style.appendChild(document.createTextNode(rule));
}
return style;
}
csser.createStyle = createStyle;
})(Flower.csser || (Flower.csser = {}));
var csser = Flower.csser;
})(Flower || (Flower = {}));
/// <reference path="createStyle.ts" />
var Flower;
(function (Flower) {
(function (csser) {
function addSheet(rule) {
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(csser.createStyle(rule));
}
csser.addSheet = addSheet;
})(Flower.csser || (Flower.csser = {}));
var csser = Flower.csser;
})(Flower || (Flower = {}));
// ==UserScript==
// @name Douban Timeline Marker
// @namespace https://github.com/henix/userjs/douban_feedmark
// @description You can place a marker on the last newsfeed you have read, so it can be found easily next time. Ctrl-Click on an item to mark it, again to remove the mark.
// @author henix
// @version 20140620.3
// @include http://www.douban.com/*
// @license MIT License
// @grant none
// ==/UserScript==
/**
* ChangeLog:
*
* 2012-2-29 henix
* don't listen on load event
*
* 2012-2-27 henix
* change trigger action from "click" to "Ctrl-click"
*
* 2012-2-14 henix
* add another yellow marker on the previous position, and it can't be removed
*
* 2012-2-14 henix
* Version 0.1
*/
/// <reference path="flower/csser/addClass.ts" />
/// <reference path="flower/csser/removeClass.ts" />
/// <reference path="flower/csser/addSheet.ts" />
var csser = Flower.csser;
var curMark;
function markItem(e) {
if (curMark) {
demarkItem(curMark);
}
csser.addClass(e, 'feedmarker');
curMark = e;
}
function demarkItem(e) {
csser.removeClass(e, 'feedmarker');
curMark = null;
}
function getTarget(ev, mse) {
if (ev) {
return ev.target;
} else {
return mse.srcElement;
}
}
function clickHandler(ev) {
var e = (ev || window.event);
if (!e.ctrlKey) {
return;
}
var tg = getTarget(ev, window.event);
if (tg.nodeName === 'A') {
return;
}
if (curMark !== this) {
markItem(this);
localStorage.setItem('feedmarkid', this.getAttribute('data-sid'));
} else {
demarkItem(this);
localStorage.removeItem('feedmarkid');
}
}
var markId = localStorage.getItem('feedmarkid');
var stitems = document.querySelectorAll('div.status-item');
csser.addSheet('' + '.feedmarker, .feedmarker-old { border: 1px dashed black }\n' + '.feedmarker-old { border-top: 20px solid #ff6 }\n' + '.feedmarker { border-top: 20px solid #ccc }\n');
for (var i = stitems.length - 1; i >= 0; i--) {
var stitem = stitems[i];
if (markId && stitem.getAttribute('data-sid') === markId) {
csser.addClass(stitem, 'feedmarker-old');
}
stitem.addEventListener('click', clickHandler, true); // register for capturing
}