HKGalden Quote Folder

縮短引用、縮小引用內圖片

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        HKGalden Quote Folder
// @namespace   https://userscripts.org/scripts/show/406097
// @description 縮短引用、縮小引用內圖片
// @author      HKGalden 小磁怪
// @license     MIT License
// @include     https://hkgalden.com/view/*
// @include     http://hkgalden.com/view/*
// @version     140728
// @icon        https://hkgalden.com/favicon.ico
// @grant       none
// ==/UserScript==

/* ********* 更新記錄 *********
版本140728
 - 連結修正
版本140725
 - 沒有更新
版本140310
 - 修復一個會令「快速引用」不能正常彈出的BUG
版本140309
 - 改善程式碼
 - 以圖示取代原有的文字按鈕
 - 在所有引用層加入暫時縮短功能
版本140307-1
 - 走位修正
*************************** */

/*jslint browser: true, devel: true, plusplus: true, es5: true,  white: true */
/*jshint browser: true, devel: true, jquery: true, multistr: true, globalstrict: true */
/*global Storage, $*/
'use strict';

var qf_version = '140728';

//載入設定
var show_level, img_height, have_storage, tmp;
have_storage = (Storage !== undefined);
if (have_storage) {
	tmp = localStorage.getItem('qf_settings_show_level');
	if (!tmp) {
		localStorage.setItem('qf_settings_show_level', 3);
		show_level = 3;
	} else {
		show_level = parseInt(tmp, 10);
		console.log('HKG Quote Folder : localStorage Quote Level = ' + show_level);
	}
	tmp = localStorage.getItem('qf_settings_img_height');
	if (!tmp) {
		localStorage.setItem('qf_settings_img_height', 150);
		img_height = 150;
	} else {
		img_height = parseInt(tmp, 10);
		console.log('HKG Quote Folder : localStorage Image Max Height = ' + img_height);
	}
} else {
	show_level = 3;
	img_height = 150;
	console.log('HKG Quote Folder : No localStorage support');
}

//判斷A<=x<=B的簡便方法
//http://indisnip.wordpress.com/2010/08/26/quicktip-check-if-a-number-is-between-two-numbers/
Number.prototype.between = function (first, last) {
	return (first < last ? this >= first && this <= last : this >= last && this <= first);
};

$(function () {

	//修正Firefox按鈕虛線外框問題,此項CSS無法透過jQuery.fn.css方法添加
	//http://www.karlrixon.co.uk/writing/remove-button-focus-outline-using-css/
	$('head').append('<style type="text/css"> \
						button[class^="qf_btn_"]::-moz-focus-inner { \
							border: 0; \
						} \
						</style> \
					');

	//圖示
	//Tango Icon Library | https://www.iconfinder.com/search/?q=iconset:tango-icon-library
	var icon_plus = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAABzklEQVRIie2UvWuTURTGf+fNR41iRWxV/FgU3QQXVxEcFJyEDo6dHATFzdEU/AMsrh10EAQt/QvaDg6uOpRu6pDUxqavxIbqmzf3PA5JNNFoXkFBpA/c5d5zz/Oc+5xzYQf/PSxr4PlbTx9Gke0CMClZnp2aBtOoe/msBFcvnL5y8tjEBMDrSn1zef+MUebPEWAQNxMEo7P2IfqNWAAkCO5/h0ACZODZixj6RBdvzz8qjOVKg7tWEIYANytcSs7OcWfhK1H6OYSl2anr3+ca2kX3F15tnDjaMVQIZLhE3EyRYN/uPC5DEi4hweqbWu3e9LnDGSqQJa2XXom3QR1DJSN4J1EaYHMrpR1E20UIIjh82EqGGvMjQXnG4uZlL5RKyCGIrkrjXZzgwMHxIi4RXLg6MR8/tUJGgrt6cfPZY8tVi/3bZ04dumbFvZMSVNc36qtv3z8xfRs0dyXDCDJP8o0Hz6s2Nn5EgtZ2Y22usXSccnlkv2ZpUwNy7o4ELnAXrKxkEvezSY6AXPc8B0TtICuoZ7gbi4t7gBRoAwHIaPIgQW/lK2uxTR5I111Srd6ISNMCg7/G0F/kV2VGXQFR3+rFq6u4p7w9LPkO/g18ATeq4QJygwMsAAAAAElFTkSuQmCC)';
	//FS Icons Ubuntu | https://www.iconfinder.com/search/?q=iconset:fs-icons-ubuntu-by-franksouza-
	var icon_minus = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADhSURBVDiN7dRBSgNBFITh/3WcEXSrLlWI5/FArryA9/EOHkDwAAaUKEJIGKe7yoUG02QUN9nI1O5R3R80NC9ss4uknagjPMKD2dscZjeXR23y/vaxZTWtBqoSjc6ubmeDcDu9uMvz53MwCWPrs/ABWGDAorEJjGSiNUUC0ioiTmwvtuB+/lL6h3uaScLx8zPXVQJssEznVHkVnLNQV/BEv8KbsUHFmFTdqOE+s+wyXQqCv8nGFEGmVB+hgh+fXq/fDo9PkbAxCL62lEohHBbiuwdJgHBEBt7XVozbbYT/AfwBNxB4sYl2bPoAAAAASUVORK5CYII=)';

	//摺疊按鈕
	$('head').append('<style type="text/css"> \
						div.qf_fold_btn { \
							width: 30px; \
							height: 30px; \
							background-repeat: no-repeat; \
							cursor: pointer; \
							position: absolute; \
							display: inherit; \
							margin-left: -27px; \
							opacity: 0; \
						} \
						div.qf_btn_plus { \
							background-image: ' + icon_plus + ' \
						} \
						div.qf_btn_minus { \
							background-image: ' + icon_minus + ' \
						} \
					</style>');

	//根據顯示層數產生Selector
	function quote_selector(n) {
		var i, r = 'div.ctn';
		for (i = 1; i <= show_level; i++) {
			r += ' > blockquote' + (n===true?' > div':'');
		}
		return r;
	}

	//產生摺疊按鈕
	function create_fold_btn() {
		$('div.ctn').find('blockquote')
			.each(function (index) {
				if ((!$(this).hasClass('qf_quote_mod'))) {
					$(this)
						.addClass('qf_quote_mod qf_quote_' + index)
						.wrapInner('<div class="qf_content"></div>')
						.prepend('<div class="qf_fold_btn qf_btn_minus"></div>');
				}
			});
		$('div.ctn > blockquote')
			.off('mouseover mouseout')
			.on('mouseover mouseout', function (e) {
				e.stopPropagation();
				var target = $(e.target),
					target_bq = (target.prop('tagName') === 'BLOCKQUOTE') ? target : target.parent('blockquote'),
					target_btn = target_bq.children('.qf_fold_btn').first();
				if (e.type === 'mouseover') {
					target_btn.fadeTo(100, 1).clearQueue();
				} else {
					if (target_btn.hasClass('qf_btn_minus')) {
						target_btn.fadeTo(100, 0).clearQueue();
					}
				}
				if (target.hasClass('qf_fold_btn')) {
					if (e.type === 'mouseover') {
						if (target_bq.children('div.qf_content').first().is(':visible')) {
							target_bq.css('outline', '1px dotted black');
						}
					} else {
						target_bq.css('outline', 'none');
						if (target.hasClass('qf_btn_minus')) {
							target.fadeTo(100, 0).clearQueue();
						}
					}
				}
			});
		$('.qf_fold_btn')
			.unbind('click') 
			.click(function (e, d) {
				if (d === undefined) {d = false;}
				var blockquote = $(this).closest('blockquote');
				if ($(this).hasClass('qf_btn_minus')) {
					if (!(d && blockquote.hasClass('qf_d'))) {
						blockquote
							.css({
								'outline'	: 'none',
								'height'	: '20px'
							})
							.children('div.qf_content').first().hide();
						$(this)
							.removeClass('qf_btn_minus').addClass('qf_btn_plus');
					}
					if (d) {
						$(this).fadeTo(0, 1).clearQueue();
						blockquote
							.addClass('qf_d');
					}
				} else if (!d && $(this).hasClass('qf_btn_plus')) {
					blockquote
						.css({
							'outline'		: '1px dotted black',
							'height'		: 'auto'
						})
						.children('div.qf_content').first().show();
					$(this)
						.removeClass('qf_btn_plus').addClass('qf_btn_minus');
				}
			});
		$(quote_selector(true) + '.qf_fold_btn')
			.trigger('click', [true]);
	}

	if (img_height >= 1) {
		$('blockquote').find('img').css('max-height', img_height + 'px');
	}
	if (show_level >= 1) {
		create_fold_btn();
		$(document).ajaxComplete(function (event, xhr, settings) {
			if (settings.url === '/ajax/loadReplies') {
				console.log('HKG Quote Folder : ajaxComplete');
				create_fold_btn();
			}
		});
	}

	//設定面版
	$('section.gpt.author > div > div > div.ract')
		.prepend('<span class="qf_panel_show">引用縮短設定</span>');
	$('div#main > article')
		.before('<div class="qf_panel nxt"></div>');
	$('span.qf_panel_show')
		.click(function () {
			if (!$('.qf_panel').is(':visible')) {
				if (have_storage) {
					$('.qf_panel').fadeIn(100);
				} else {
					alert('你的瀏覽器不支援 localStorage,無法更改設定');
				}
			}
		});
	$('.qf_panel')
		.css({
			'width'				: '325px',
			'height'			: '210px',
			'padding'			: '10px 10px 10px 10px',
			'z-index'			: '2046',
			'position'			: 'fixed',
			'top'				: '50%',
			'left'				: '50%',
			'margin-top'		: '-105px',
			'margin-left'		: '-162px',
			'box-shadow'		: '3px 3px 4px #888888',
			'box-sizing'		: 'border-box',
			'-moz-box-sizing'	: 'border-box'
		})
		.hide()
		.draggable({containment: 'window'})
		.html('<span class="qf_title">引用縮短設定</span><br /> \
				<div class="qf_options"> \
					顯示層數<br />預設3,最小1(隱藏引用),0關閉<br /> \
					<input type="number" class="qf_panel_level" name="qf_panel_level" min="0" max="100"></input><br /> \
					引用圖片最大高度(px),0關閉<br /> \
					<input type="number" class="qf_panel_imgh" name="qf_panel_imgh" min="1" max="10000"></input><br /> \
				</div> \
				<button class="qf_save qf_btn">儲存</button> \
				<button class="qf_cancel qf_btn">取消</button> \
				<span class="qf_about">版本 ' + qf_version + '</span>'
		);
	$('.qf_panel *')
		.css({
			'box-sizing'		: 'content-box',
			'-moz-box-sizing'	: 'content-box'
		});
	$('.qf_options')
		.css({
			'padding'			: '10px 15px 2px 15px'
		});
	$('.qf_options input')
		.css({
			'border-style'		: 'dotted',
			'border-width'		: '1px',
			'width'				: '240px'
		});
	$('.qf_panel_level')
		.val(show_level);
	$('.qf_panel_imgh')
		.val(img_height);
	$('.qf_title')
		.css({
			'padding'			: '10px 0 0 10px',
			'font-weight'		: 'bolder'
		});
	$('.qf_about')
		.css({
			'font-size'			: '12px',
			'position'			: 'absolute',
			'right'				: '15px',
			'bottom'			: '10px',
			'cursor'			: 'pointer'
		})
		.click(function () {
			window.open('https://greasyfork.org/scripts/3620-hkgalden-quote-folder');
		});
	$('.qf_save')
		.css({
			'position'			: 'absolute',
			'left'				: '5px',
			'bottom'			: '5px',
			'cursor'			: 'pointer'
		})
		.click(function () {
			if (parseInt($('.qf_panel_level').val(), 10).between(0, 100)) {
				if (parseInt($('.qf_panel_imgh').val(), 10).between(0, 10000)) {
					localStorage.setItem('qf_settings_show_level', parseInt($('.qf_panel_level').val(), 10));
					localStorage.setItem('qf_settings_img_height', parseInt($('.qf_panel_imgh').val(), 10));
					$('.qf_about')
						.css({
							'color'		: 'red'
						})
						.html('設定已儲存, 自動F5中...');
					window.setTimeout(function () { location.reload(false); }, 200);
				} else {
					alert('圖片高度範圍必須為0-10000px');
				}
			} else {
				alert('引用層數必須為0-100');
			}
		});
	$('.qf_cancel')
		.css({
			'position'			: 'absolute',
			'left'				: '65px',
			'bottom'			: '5px',
			'cursor'			: 'pointer'
		})
		.click(function () {
			$('.qf_panel').fadeOut(100);
		});

});