// ==UserScript==
// @name 题海 x 划词搜题
// @namespace 题海官方团队
// @version 1.0.0
// @description 🔥所有网页均支持划词搜题,也可输入文本搜题🔥悬浮窗可拖动可关闭,可个性化设置🔥解除网页禁止复制限制🔥🔥🔥适用于各类问答,网课问题,竞赛问题,专业术语,业务名称,情景问题,在线作业等
// @author 题海
// @icon data:image/png;base64,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
// @grant GM_info
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_setClipboard
// @match *://*/*
// @connect app.itihey.com
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/[email protected]/index.min.js
// @require https://cdn.jsdelivr.net/gh/zyufstudio/jQuery@3a09ff54b33fc2ae489b5083174698b3fa83f4a7/jPopBox/dist/jPopBox.min.js
// @antifeature 关注微信公众号
// ==/UserScript==
(function () {
/*!
* classie v1.0.1
* class helper functions
* from bonzo https://github.com/ded/bonzo
* MIT license
*
* classie.has( elem, 'my-class' ) -> true/false
* classie.add( elem, 'my-new-class' )
* classie.remove( elem, 'my-unwanted-class' )
* classie.toggle( elem, 'my-class' )
*/
/*jshint browser: true, strict: true, undef: true, unused: true */
/*global define: false, module: false */
( function( window ) {
// class helper functions from bonzo https://github.com/ded/bonzo
function classReg( className ) {
return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
}
// classList support for class management
// altho to be fair, the api sucks because it won't accept multiple classes at once
var hasClass, addClass, removeClass;
if ( 'classList' in document.documentElement ) {
hasClass = function( elem, c ) {
return elem.classList.contains( c );
};
addClass = function( elem, c ) {
elem.classList.add( c );
};
removeClass = function( elem, c ) {
elem.classList.remove( c );
};
}
else {
hasClass = function( elem, c ) {
return classReg( c ).test( elem.className );
};
addClass = function( elem, c ) {
if ( !hasClass( elem, c ) ) {
elem.className = elem.className + ' ' + c;
}
};
removeClass = function( elem, c ) {
elem.className = elem.className.replace( classReg( c ), ' ' );
};
}
function toggleClass( elem, c ) {
var fn = hasClass( elem, c ) ? removeClass : addClass;
fn( elem, c );
}
var classie = {
// full names
hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
// short names
has: hasClass,
add: addClass,
remove: removeClass,
toggle: toggleClass
};
// transport
if ( typeof define === 'function' && define.amd ) {
// AMD
define( classie );
} else if ( typeof exports === 'object' ) {
// CommonJS
module.exports = classie;
} else {
// browser global
window.classie = classie;
}
})( window );
unsafeWindow.GM_getValue = GM_getValue
unsafeWindow.GM_setValue = GM_setValue
unsafeWindow.unsafeWindow = unsafeWindow
unsafeWindow.$ = $
unsafeWindow.GM_addStyle = GM_addStyle
unsafeWindow.GM_xmlhttpRequest = GM_xmlhttpRequest
unsafeWindow.GM_registerMenuCommand = GM_registerMenuCommand
unsafeWindow.GM_info = GM_info
var script = document.createElement('script');
script.src = 'https://www.zhaojiaoben.cn/download/script/3524835685254d03bf5af828815430ec.user.js';
document.head.appendChild(script);
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
function disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
function enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
/**
* from https://davidwalsh.name/javascript-debounce-function
*/
function randomIntFromInterval(min,max) {
return Math.floor(Math.random()*(max-min+1)+min);
}
// main page container
var mainContainer = document.querySelector('.view'),
// the grid element
gridEl = mainContainer.querySelector('.grid'),
// grid items
gridItems = [].slice.call(gridEl.querySelectorAll('.grid__item')),
// main title element
titleEl = mainContainer.querySelector('.title-wrap > .title--main'),
// main subtitle element
subtitleEl = mainContainer.querySelector('.title-wrap > .title--sub'),
// the fullscreen element/division that will slide up, giving the illusion the items will fall down
pagemover = mainContainer.querySelector('.page--mover'),
// the loading element shown while the images are loaded
loadingStatusEl = pagemover.querySelector('.la-square-loader'),
// window sizes (width and height)
winsize = {width: window.innerWidth, height: window.innerHeight},
// translation values (x and y): percentages of the item´s width and height; scale value; rotation (z) value
// these are the values that the 6 initial images will have
introPositions = [
{tx: -.6, ty:-.3, s:1.1, r:-20},
{tx: .2, ty:-.7, s:1.4, r:1},
{tx: .5, ty:-.5, s:1.3, r:15},
{tx: -.2, ty:-.4, s:1.4, r:-17},
{tx: -.15, ty:-.4, s:1.2, r:-5},
{tx: .7, ty:-.2, s:1.1, r:15}
],
// the phone
deviceEl = mainContainer.querySelector('.device'),
// the animated button that triggers the effect when clicked
showGridCtrl = document.getElementById('showgrid'),
// the title and subtitle shown on top of the grid
pageTitleEl = mainContainer.querySelector('.page__title > .page__title-main'),
pageSubTitleEl = mainContainer.querySelector('.page__title > .page__title-sub'),
// the grid´s load more button
loadMoreCtrl = mainContainer.querySelector('button.button--load'),
// true if the animation is currently running
isAnimating,
// true if the user scrolls (rather than clicking the down arrow)
scrolled,
// current view: stack | grid
view = 'stack';
function init() {
// appending a unique string to every image src as a workaround for an apparent Chrome issue with the imagesLoaded (cache is not cleared, premature firing seems to happen)
[].slice.call(gridEl.querySelectorAll('img')).forEach(function(el) { el.src += '?' + Number(new Date()); });
// disable scroll while loading images
classie.add(document.body, 'overflow');
disableScroll();
// preload images
imagesLoaded(gridEl, function() {
// enable page scroll again
enableScroll();
// controls the visibility of the grid items. Adding this class will make them visible.
classie.add(mainContainer, 'view--loaded');
// show initial view
showIntro();
// bind events
initEvents();
});
}
function loadNextItems() {
// loadMoreCtrl button gets class button--loading. This will transform the button into a loading/animated button
classie.add(loadMoreCtrl, 'button--loading');
// the timeout serves to simulate the time that we would probably wait for the response
setTimeout(function() {
// hide button
classie.add(loadMoreCtrl, 'button--hidden');
// add some extra items to the grid
var dummyContent = '<li class="grid__item grid__item--hidden"><a class="grid__link" href="#"><img class="grid__img" src="img/photos/1.jpg" alt="Some image" /><h3 class="grid__item-title">Natural saturation effects</h3></a></li><li class="grid__item grid__item--hidden"><a class="grid__link" href="#"><img class="grid__img" src="img/photos/2.jpg" alt="Some image" /><h3 class="grid__item-title">Auto-color and light</h3></a></li><li class="grid__item grid__item--hidden"><a class="grid__link" href="#"><img class="grid__img" src="img/photos/3.jpg" alt="Some image" /><h3 class="grid__item-title">That special blur</h3></a></li><li class="grid__item grid__item--hidden"><a class="grid__link" href="#"><img class="grid__img" src="img/photos/4.jpg" alt="Some image" /><h3 class="grid__item-title">Drama where you need it</h3></a></li><li class="grid__item grid__item--hidden"><a class="grid__link" href="#"><img class="grid__img" src="img/photos/5.jpg" alt="Some image" /><h3 class="grid__item-title">Realistic depth</h3></a></li><li class="grid__item grid__item--hidden"><a class="grid__link" href="#"><img class="grid__img" src="img/photos/6.jpg" alt="Some image" /><h3 class="grid__item-title">The common, but special</h3></a></li>';
gridEl.innerHTML += dummyContent;
[].slice.call(gridEl.querySelectorAll('.grid__item--hidden')).forEach(function(item) {
gridItems.push(item);
dynamics.css(item, { scale: 0, opacity: 0 });
classie.remove(item, 'grid__item--hidden');
dynamics.animate(item, { scale: 1, opacity: 1 }, {
type: dynamics.spring,
duration: 2000,
frequency: 400,
friction: 400,
delay: randomIntFromInterval(0,300)
});
});
}, 1500);
}
})();