// ==UserScript== // @name Dmhy Download Enhance // @namespace kind.stranger // @version 0.2.2 // @description 在下载列表中增加magnet列和torrent列 // @include http*://share.dmhy.org/ // @include http*://share.dmhy.org/topics/list* // @grant none // @author Anonymous // @license GPL version 3 (http://www.gnu.org/licenses/gpl.txt) // @downloadURL https://update.greasyfork.icu/scripts/24762/Dmhy%20Download%20Enhance.user.js // @updateURL https://update.greasyfork.icu/scripts/24762/Dmhy%20Download%20Enhance.meta.js // ==/UserScript== if (window.jQuery) { var $ = window.jQuery; } else { console.log('Do Not support jQuery'); return false; } $.fn.tagNameLowerCase = function() { return this.prop ? this.prop('tagName').toLowerCase() : this.attr('tagName').toLowerCase(); } // http://99jty.com/?p=587 // http://ejohn.org/blog/comparing-document-position/ if (!$.contains) { $.contains = function(a, b) { return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(b) & 16); }; } var basePage = {}; basePage = (function() { var torrentList = $('#topic_list'); var torrentRows = torrentList.find('tr'); var theadRows = torrentList.find('>thead tr'); var tbodyRows = torrentList.find('>tbody tr'); var thead = torrentList.find('>thead'); var tbody = torrentList.find('>tbody'); /** * Get the current
addTorrentCol is not execute first, this will get an empty object
function getTorrentTitle() {
return exist('torrent') ? $('#torrentTitle') : false;
}
function getMagnetTitle() {
return exist('magnet') ? $('#magnetTitle') : false;
}
function getTorrentArrows() {
return exist('torrent') ? $('.dde-torrent > a') : false;
}
function getMagnetArrows() {
return exist('magnet') ? $('.dde-magnet > a') : false;
}
return {
//module
'addTorrentCol' : addTorrentCol,
'addMagnetCol' : addMagnetCol,
// getter
'getTorrentTitle' : getTorrentTitle,
'getMagnetTitle' : getMagnetTitle,
'getTorrentArrows' : getTorrentArrows,
'getMagnetArrows' : getMagnetArrows,
//method
'getMagnetCol' : getMagnetCol,
'getTorrentCol' : getTorrentCol,
'getTorrentArrow' : getTorrentArrow,
'getMagnetArrow' : getMagnetArrow,
'magnetHref' : magnetHref,
'torrentHref' : torrentHref,
'setTorrentCss' : setTorrentCss,
'setMagnetCss' : setMagnetCss,
};
})();
var prepaerEvent = {};
prepaerEvent = (function() {
var bp = basePage;
var pp = preparePage;
// origin css: background: url("/images/icons.gif") no-repeat scroll -17px -40px rgba(0, 0, 0, 0);
var SuccCss = {
'background-position' : '0px -40px',
}
var FailCss = {
'background-position' : '-34px -40px',
}
function responsedataToTorrentLink(data) {
var reg = /dl\.dmhy\.org.*\.torrent/;
var matchs = reg.exec(data);
var torrentLink = 'http://' + matchs[0];
return matchs[0] ? torrentLink : '';
}
function hashTomagnetLink(hash) {
var magnetLink = 'magnet:?xt=urn:btih:' + hash
return hash ? magnetLink : '';
}
function torrentLinkToHash(torrentLink) {
var hashStart = torrentLink.lastIndexOf('/');
var hashEnd = torrentLink.lastIndexOf('.');
var hash = torrentLink.slice(hashStart + 1, hashEnd);
return hash ? hash : '';
}
/**
* onmouseover:
* change torrent link if exist and is NOT changed
* TRY to change magnet link if exist
* change css after change link successfully
*/
function addTorrentMouseOver() {
var torrentArrows = pp.getTorrentArrows();
if (!torrentArrows) {
return false;
}
torrentArrows.mouseover(function(event) {
var target = this;
if (!pp.torrentHref(target) ||
pp.torrentHref(target) !== '#') { // not a valid target OR torrent link is set
return;
}
var requestLink = bp.getTitleLink(target);
if (!requestLink) {
return false;
}
// every time a ajax response is received, program will TRY to process BOTH magnet AND torrent link
$.get(requestLink, function(data) {
var torrentLink = responsedataToTorrentLink(data);
if (! torrentLink) {return;}
pp.torrentHref(target, torrentLink) && pp.setTorrentCss(target, SuccCss);
if (pp.magnetHref(target) &&
pp.magnetHref(target) === '#') {
var magnetLink = hashTomagnetLink(torrentLinkToHash(torrentLink));
if (!magnetLink) {return false;}
pp.magnetHref(target, magnetLink) && pp.setMagnetCss(target, SuccCss);
}
});
event.stopPropagation();
});
}
/**
* onmouseover:
* change magnet link if exist and is NOT changed
* TRY to change torrent link if exist
* change css after change link successfully
*/
function addMagnetMouseOver() {
var magnetArrows = pp.getMagnetArrows();
if (!magnetArrows) {
return false;
}
magnetArrows.mouseover(function(event) {
var target = this;
if (!pp.magnetHref(target) ||
pp.magnetHref(target) !== '#') { //not a valid target OR magnet link is set
return ;
}
var requestLink = bp.getTitleLink(target);
if (!requestLink) {
return false;
}
// every time a ajax response is received, program will TRY to process BOTH magnet AND torrent link
$.get(requestLink, function(data) {
var torrentLink = responsedataToTorrentLink(data);
var magnetLink = hashTomagnetLink(torrentLinkToHash(torrentLink));
if (!torrentLink || !magnetLink) {return false;}
pp.magnetHref(target, magnetLink) && pp.setMagnetCss(target, SuccCss);
if (pp.torrentHref(target) &&
pp.torrentHref(target) === '#') {
pp.torrentHref(target, torrentLink) && pp.setTorrentCss(target, SuccCss);
}
});
event.stopPropagation();
});
}
return {
'addTorrentMouseOver' : addTorrentMouseOver,
'addMagnetMouseOver' : addMagnetMouseOver,
}
})();
// TODO add configuration options and a controller
$(document).ready(function() {
preparePage.addTorrentCol();
preparePage.addMagnetCol();
prepaerEvent.addTorrentMouseOver();
prepaerEvent.addMagnetMouseOver();
});