//
// Embed Image Helper
// Copyright © 2013, 2014 Anton Chugunov
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ==UserScript==
// @name Embed Image Helper
// @namespace trm81
// @description Makes tags for embed image with link to original (full size) image.
// @version 0.06
// @include http://photo.qip.ru/users/*/*/*/*
// @include https://photo.qip.ru/users/*/*/*/*
// @include http://fotki.yandex.ru/users/*/album/*/share/*
// @include https://fotki.yandex.ru/users/*/album/*/share/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant None
// @copyright 2013, 2014 Anton Chugunov (https://greasyfork.org/en/users/6997-trm81)
// @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// ==/UserScript==
var photo_qip_ru = 'photo.qip.ru';
var fotki_yandex_ru = 'fotki.yandex.ru';
/////////////////////////////////////////////////////////////////////////////////////
// photo.qip.ru
function replaceUrls(user, album, photo)
{
var pattern = 'users\\/' + user + '\\/' + album + '\\/' + photo + '\\/';
var re = new RegExp(pattern, "igm");
$('#ff_allGetLinks').find('textarea').each(function() {
var text = $(this).text();
text = text.replace(re, 'photo/' + user + '/' + album + '/' + photo + '.jpg');
$(this).text(text);
});
}
handler_onPhotopQipRu = function onPhotopQipRu()
{
var user = '', album = '', photo = '';
var photoParamsRegex = /\/users\/([^\/]+)\/([^\/]+)\/([^\/]+)/i;
var match = photoParamsRegex.exec(window.location.pathname);
if (match != null)
{
user = match[1];
album = match[2];
photo = match[3];
}
unsafeWindow.getLink(user, album, photo);
unsafeWindow.showDiv('ff_get_link');
$('div.linksbox a.slink[href*="getLink"]').removeAttr('href').click(function(){
unsafeWindow.showDiv('ff_get_link');
replaceUrls(user, album, photo);
});
};
/////////////////////////////////////////////////////////////////////////////////////
// fotki.yandex.ru
function replaceText(viewUrlPattern, previewUrlPattern, removeLinkPattern, embUrls)
{
replacedText = [];
for (var i = 0; i < embUrls.length; i++)
{
var string = embUrls[i].trim();
if (!string.length)
continue;
if (string.indexOf('[url') != 0 && string.indexOf('<a href') != 0)
continue;
var baseUrl = null, size = null, ext = null;
while(match = previewUrlPattern.exec(string))
{
baseUrl = match[1];
size = match[2];
ext = match[3];
}
if (size == 'orig')
string = string.replace(removeLinkPattern, '');
else
string = string.replace(viewUrlPattern, baseUrl + '_orig' + ext);
replacedText.push(string);
}
return replacedText.length ? replacedText : embUrls;
}
function replaceHTMLCodeText(viewUrl, textarea)
{
var previewUrlPattern = new RegExp('src="(http.+)_(\\w+)(\\.[\\w\\d]+)', 'g');
var viewUrlPattern = new RegExp(viewUrl + '[^\\"]+', 'ig');
var removeLinkPattern = new RegExp('(<a[^>]+>|</a>)', 'ig');
var embUrls = textarea.val().replace('<!--more-->', '<br/>').split('<br/>');
var text = replaceText(viewUrlPattern, previewUrlPattern, removeLinkPattern, embUrls);
textarea.val(text.join('<br/>'));
textarea.select();
}
function replaceBBCodeText(viewUrl, textarea)
{
var previewUrlPattern = new RegExp('img\\](http.+)_(\\w+)(\\.[\\w\\d]+)', 'g');
var viewUrlPattern = new RegExp(viewUrl + '[^\\]]+', 'ig');
var removeLinkPattern = new RegExp('(\\[url[^\\]]+\\]|\\[/url\\])', 'ig');
var embUrls = textarea.val().split('\n');
var text = replaceText(viewUrlPattern, previewUrlPattern, removeLinkPattern, embUrls);
textarea.val(text.join('\n'));
textarea.select();
}
handler_onFotkiYandexRu = function onFotkiYandexRu()
{
var shareParamsElem = $('div.share.js-share');
var shareParams = shareParamsElem.attr('onclick');
shareParams = shareParams.replace(/^return/, '').replace(/;$/, '');
var json = jQuery.parseJSON(shareParams);
var viewUrl = json['url'];
var idx = viewUrl.indexOf('view');
if (idx == -1)
return;
viewUrl = viewUrl.substring(0, idx);
$('#codes_bbcode').click(function(){
replaceBBCodeText(viewUrl, $(this));
});
$('#codes_html').click(function(){
replaceHTMLCodeText(viewUrl, $(this));
});
};
/////////////////////////////////////////////////////////////////////////////////////
$(document).ready(function()
{
var urlHandlers = {};
urlHandlers[photo_qip_ru] = handler_onPhotopQipRu;
urlHandlers[fotki_yandex_ru] = handler_onFotkiYandexRu;
var domain = window.location.hostname.replace('www.', '');
handler = urlHandlers[domain];
if(typeof handler === 'function')
handler();
});