/* global window, document, jQuery */
// ==UserScript==
// @name Pixiv hover zoom
// @namespace https://github.com/rplus
// @version 1.1.2
// @description hover zoom for Pixiv
// @author Rplus
// @include http://www.pixiv.net/*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/10906/Pixiv%20hover%20zoom.user.js
// @updateURL https://update.greasyfork.icu/scripts/10906/Pixiv%20hover%20zoom.meta.js
// ==/UserScript==
;(function(window, document, $) {
'use strict';
var phzw = $('#pixiv-hz-wrap');
var phzwPos = [];
var phzwPattern = /member_illust\.php\?mode=medium&illust_id=(\d+)/;
var phzwAPI = '//www.pixiv.net/rpc/index.php?mode=get_illust_detail_by_ids&illust_ids=';
var phzwAPICache = {};
var imgSize = 'm'; // size: '240mw', m', 'big'
var body = document.body;
var isAutoLoadNextPage = true;
var pager = {};
var phzwToggle = function(_switch) {
if (_switch) {
phzw.css({
'top': phzwPos[0],
'left': phzwPos[1],
'opacity': 1,
'visibility': 'visible',
'transform': 'translateX(' + phzwPos[2] + '%)'
});
} else {
if ('0' !== phzw[0].style.opacity) {
phzw.css({
'visibility': 'hidden',
'opacity': 0
});
}
}
};
var getAllId = function() {
var ids = [];
$.each($('#wrapper').find('a'), function() {
var _href = $(this).attr('href');
var _match = _href && _href.match(phzwPattern);
if (_match) {
ids.push(_match.pop());
}
});
return ids;
};
var pullIdsData = function(idsArr) {
var deferred = $.Deferred();
$.getJSON(phzwAPI + idsArr.join())
.done(function(data) {
if (!data.error) {
for (var _item in data.body) {
if (data.body.hasOwnProperty(_item)) {
phzwAPICache[_item] = data.body[_item];
}
}
deferred.resolve(); //update state
} else {
deferred.reject();
}
})
.fail(function() {
deferred.reject();
});
return deferred.promise();
};
var render = function(_id) {
var data = phzwAPICache[_id];
if (!data) { return; }
if (_id !== phzw.data('id')) {
var tpl = '';
phzw.html(tpl);
phzw.data('id', _id);
}
phzwToggle(true);
};
var updatePos = function(ele) {
var eleRect = ele.getBoundingClientRect();
phzwPos = [eleRect.top + body.scrollTop + eleRect.height, eleRect.left, -100 * eleRect.left / body.scrollWidth];
};
$(function() {
// phzw init
if (!phzw.length) {
$(body).append('