بۇ قوليازمىنى بىۋاسىتە قاچىلاشقا بولمايدۇ. بۇ باشقا قوليازمىلارنىڭ ئىشلىتىشى ئۈچۈن تەمىنلەنگەن ئامبار بولۇپ، ئىشلىتىش ئۈچۈن مېتا كۆرسەتمىسىگە قىستۇرىدىغان كود: // @require https://update.greasyforks.org/scripts/9160/111519/My%20Function%20library.js
"use strict";
//// ==UserScript==
// @name My Function library
// @namespace http://use.i.E.your.homepage/
// @version 0.35
// @description enter something useful
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @run-at document-start
// @created 2015-04-06
// @released 2014-00-00
// @updated 2014-00-00
// @history @version 0.25 - first version: public@released - 2015-04-12
// @history @version 0.30 - Second version: public@released - 2015-12-10
// @history @version 0.35 - Second version: public@released - 2016-03-04
// @compatible Greasemonkey, Tampermonkey
// @license GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html)
// @copyright 2014+, Magnus Fohlström
// ==/UserScript==
/*global $, jQuery*/
/*jshint -W014, -W030, -W082*/
// -W014, laxbreak, Bad line breaking before '+'
// -W030, Expected assignment or function call instead saw an expression
// -W082, a function declaration inside a block statement
/*
$("li").not(function() {
// returns true for those elements with at least one span as child element
return $(this).children('span').length > 0
}).each(function() { /* ... })
*/
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.debug('Error: ' + errorMsg + '\nScript: ' + url + '\nLine: ' + lineNumber
+ '\nColumn: ' + column + '\nStackTrace: ' + errorObj);
};
/**
* @namespace waitUntilExists_Intervals
*/
$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild){
var found = 'found',
$this = $(this.selector),
$elements = $this.not(function () { return $(this).data(found); }).each(handler).data(found, true);
if( !isChild ) {
(window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] =
window.setInterval(function () {
$this.waitUntilExists(
handler, shouldRunHandlerOnce, true);
}, 500);
}
else if (shouldRunHandlerOnce && $elements.length){
window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
}
return $this;
};
$.fn.extend({
exists : function () {
return !!this.length;
},
swapClass : function (replace, newClass) {
this.className.replace(replace, newClass);
},
toggleClasses : function (add, remove, if_none) {
var $this = $(this.selector);
if_none !== undefined && !$this.hasClass(add) && !$this.hasClass(remove) && $this.addClass(if_none);
$this.addClass(add).removeClass(remove);
},
hasId : function (id) {
return id === this.attr('id');
},
/* hasParent : function( parentSelection ){
return parentSelection.inElem('#') ? this.parent().hasId( parentSelection.split('#').shift() ) : this.parent().hasClass( parentSelection.split('.').shift() );
},
*/
hasNoChildren : function ( element ) {
return $( this ).filter( function(){ return !$( this ).children( element ).length; });
//return !$( this ).children().length
},
hasParent : function (e) {
return !$( this ).parent(e).length
},
hasParents : function (e) {
return !$(this).parents(e).length
},
hasQuery : function (query) {
return d.querySelector(query).length;
},
isTag : function (tag) {
var e = this[0] || $('<undefined/>');
//noinspection JSValidateTypes
return e.nodeName !== undefined && e.nodeName.toLowerCase() === tag.toLowerCase();
},
isNode : function (node) {
var e = this[0] || $('<undefined/>');
//noinspection JSValidateTypes
return e.nodeName !== undefined && e.nodeName.toLowerCase() === node.toLowerCase();
},
attrs : function (search, type, chklen) { //bool name value length or 1 2 3 4
var attribs = this[0].attributes;
c.i('attribs', attribs)
if (arguments.length === 0) {
var obj = {};
$.each(attribs, function () {
this.specified && ( obj[this.name] = this.value );
});
return obj;
} else if (search != undefined) {
var name = '', val = '';
$.each(attribs, function () {
if (this.specified && type == 'length') {
if (this.name.length > chklen) {
name = this.name;
return false;
}
}
else if (this.specified && this.name.inElem(search)) {
name = this.name;
val = this.value;
return false;
}
});
return ( type == 'bool' || type == 1) ? name.length ? true : false :
( type == 'name' || type == 2) ? name :
( type == 'value' || type == 3) ? val :
( type == 'length' || type == 4) && name;
}
},
findClass : function (Class) {
return this.find('.' + Class)
},
href : function (newURL) {
return arguments.length === 0 ? this.attr('href') : this.attr('href', newURL);
},
src : function (newSRC) {
return arguments.length === 0 ? this.attr('src') : this.attr('src', newSRC);
},
equals : function (compareTo) {
if (!compareTo || this.length != compareTo.length)
return false;
for (var i = 0; i < this.length; ++i) {
if (this[i] !== compareTo[i])
return false;
}
return true;
},
justText : function (newText) {
var $children = null;
if ( newText ) {
$children = $( this )
.children()
.clone();
$( this )
.children()
.remove()
.end()
.text( newText )
.prepend( $children );
return $(this);
}
else {
return $.trim( $( this )
.clone()
.children()
.remove()
.end()
.text());
}
}
});
$.fn.ifExists = function( fn ) {
this.length && fn( this );
};
/*
$("#element").ifExists(
function( $this ){
$this.addClass('someClass').animate({marginTop:20},function(){alert('ok')});
});
*/
$.fn.Exists = function( callback ) {
var self = this;
var wrapper = (function(){
function notExists(){}
notExists.prototype.ExistsNot = function( fallback ){
!self.length && fallback.call(); };
return new notExists;
})();
self.length && callback.call();
return wrapper;
};
//And now i can write code like this -
/* $("#elem").Exists(function(){
alert ("it exists");
}).ExistsNot(function(){
alert ("it doesn't exist");
});
*/
$.extend($.expr[":"], {
ldata: function(el, idx, selector) {
var attr = selector[3].split(", ");
return el.dataset[attr[0]] === attr[1];
},
value: function(el, idx, selector) {
return el.value === selector[selector.length - 1];
}
});
$.extend({
confirm: function (title, message, yesText, noText, yesCallback) {
//dialog needs jQueryUI
$("<div></div>").dialog( {
buttons: [{
text: yesText,
click: function() {
yesCallback();
$( this ).remove();
}
},
{
text: noText,
click: function() {
$( this ).remove();
}
}
],
close: function (event, ui) { $(this).remove(); },
resizable: false,
title: title,
modal: true
}).text(message).parent().addClass("alert");
}
});
$.extend( $.expr[':'], {
isEmptyTrimmed: function(el){
return !$.trim($(el).html());
},
data: $.expr.createPseudo ?
$.expr.createPseudo(function( dataName ) {
return function( elem ) {
return !!$.data( elem, dataName );
};
}) :
// support: jQuery <1.8
function( elem, i, match ) {
return !!$.data( elem, match[ 3 ] );
}
});
/*
$.confirm(
"CONFIRM", //title
"Delete " + filename + "?", //message
"Delete", //button text
deleteOk //"yes" callback
);
*/
//ScrollZoomTune("div.thumb .title a",1,-25,1,'slow');
function ScrollZoomTune(selection, zooms, tune, ani, speed){
var body = $('body'), sel = $( selection), position;
//noinspection JSValidateTypes
sel.size() !== 0 && (
body.css('zoom',zooms),
position = sel.position().top + tune,
ani === 1 ?
body.animate({ scrollTop: position * zooms }, speed ) :
body.scrollTop( position * zooms )
);
}
function inURL( search ){
var winLoc = window.location.href;
return winLoc.search(search) !== -1;
}
function loadDoc( href ){
$(location).attr('href', href );
}
function checkDividedIsInteger( num, div ){
return ( num % div === 0 );
}
function isEven( value ){
return ( value % 2 === 0 );
}
function autoCopyToClipboard( input ){
$( 'body' ).append( $('<textarea/>',{ id:'copyThis', rows:"4", cols:"50", type:"text", value: input }) );
$( '#copyThis').focus().select();
document.execCommand("copy");
$( '#copyThis' ).remove();
}
function fn_arrayElemExistsInDom( array ) {
var found = false;
jQuery.each( array, function( i, value ) {
$( value ).length && ( found = true );
});
return found;
}
function toggleClassState( config, Class, state, elem ){
config[ Class ] = typeof state === 'string' ? !config[ Class ] : state;
$( elem || 'html' )[ config[ Class ] ? 'addClass' : 'removeClass' ]( Class );
}
function wrapWithTag( tag, text, selection ){
var thisAttr = selection != undefined && selection.startsWith('.') ? 'class' : selection.startsWith('#') && 'id',
thisTag = $('<' + tag + '/>', { text: text });
return thisAttr.length ? thisTag.attr( thisAttr, selection.splice( 1 ) ) : thisTag;
}
// will return true if the value is a primitive value
function isPrimitiveType( value ){
switch ( typeof value ) {
case 'string': case 'number': case 'boolean': case 'undefined': {
return true;
}
case 'object': {
return !value;
}
}
return false;
}
Array.prototype.findArrayObj = function( find, value ){
return this.filter(function( obj ){
return obj[ find ] === value;
})[0];
};
String.prototype.advSplit = function(chr,nbr) {
var str = this.split(chr),
strLen = str.length,
chrLen = chr.length,
newStr = ['',''],
newArr = [];
$.each( str, function( index ) {
newStr[ index < nbr ? 0 : 1 ] += str[ index ] + chr;
});
$.each( newStr, function( index ) {
newStr[ index ] = newStr[ index ].slice(0, - chrLen);
newStr[ index ].length > 0 && newArr.push( newStr[ index] );
});
return newArr;
};
String.prototype.advSplitJoin = function(chr,nbr,ips) {
var str = this.split(chr),
strLen = str.length,
ipsLen = ips.length,
newStr = '',
newStrLen;
$.each( str, function( index ) {
var add = index < strLen - 1 ? chr : '';
newStr += index + 1 === nbr ? str[index] + ips : str[index] + add;
});
newStrLen = newStr.length;
newStr.slice( newStrLen - ipsLen ) === ips && ( newStr = newStr.slice( 0, newStrLen - ipsLen ) );
return newStr;
};
String.prototype.lpad = function(padString, length) {
var str = this;
while ( str.length < length ) {
str = padString + str; }
return str;
};
String.prototype.reduceWhiteSpace = function() {
return this.replace(/\s+/g, ' ');
};
String.prototype.formatString = function(){
return this.toString()
.split('!').join(' !').split('!;').join("!important;")
.split(/\s+/g).join(' ')
.split('{').join('{\n\t')
.split('; ').join(';')
.split('( ').join('(')
.split(' )').join(')')
.split(';').join(';\n\t')
.split('*/').join('*/\n')
.split(')*(').join(') * (')
.split('}').join('}\n');
};
String.prototype.inURL = function(){
var winLoc = window.location.href;
return winLoc.search(this) !== -1;
};
String.prototype.inString = function(string){
return string !== undefined ? string.search(this) !== -1 : false;
};
String.prototype.inElem = function(search){
return this !== undefined ? this.search(search) !== -1 : false;
};
String.prototype.undef = function(replace){
return this === undefined ? replace : this;
};
String.prototype.extract = function( startChar, endChar, inside ){
var str = this,
startCharIndex = str.indexOf( startChar ),
endCharIndex = str.indexOf( endChar );
str = ( inside === 'yes' || inside === 1 || inside === true || inside === 'inside' ) ?
str.replace( startChar, '').replace( endChar, '') : str.substr( startCharIndex, endCharIndex);
return str;
};
// use full to convert String URL, so that you can use location commands
String.prototype.toLocation = function() {
var a = document.createElement('a');
a.href = this;
return a;
};
String.prototype.count = function( char, UpperCase ) {
var numberOf = this.toString().match( new RegExp( char, ( UpperCase ? "gi" : "g" ) ) );
return numberOf != null ? numberOf.length : 0;
};
String.prototype.startsWith = function( str ){
return this.slice(0, str.length) == str;
};
String.prototype.endsWith = function( str ){
return this.slice(-str.length) == str;
};
String.prototype.capitalizeFirst = function(){
return this.charAt(0).toUpperCase() + this.slice(1);
};
String.prototype.str2html = function(){
return $('<div/>').html( this ).contents();
};
//HTMLObjectElement.prototype.obj2Str = function(){var objArr = $.makeArray( this );return objArr[0].outerHTML;};
/*
String.prototype.replaceAll = function( target, replacement ) {
return this.split(target).join(replacement);
};
*/
/**
* @return {string}
*/
function Undefined(check,replace){
return check === undefined ? replace.toString() : check.toString();
}
function GM_lister( remove ){
var keys = GM_listValues();
for (var i = 0, key = null; key = keys[i]; i++) {
GM_listValues()[i] !== undefined && c.i('GM_ListItem: ' + GM_listValues()[i] + ':', GM_getValue(key));
( remove === true || remove === 'yes' || remove === 1 ) && GM_deleteValue(key);
}
}
function filterClick( e, $this ){
return e.which == 1 && e.target == $this;
}
function roundFloat(num,dec){
var d = 1;
for (var i=0; i<dec; i++){
d += "0";
}
return Math.round(num * d) / d;
}
function randomFloatBetween( min, max, dec ){
dec = typeof( dec ) == 'undefined' ? 2 : dec;
return parseFloat( Math.min( min + ( Math.random() * ( max - min ) ), max ).toFixed( dec ) );
}
function refreshElement( elem , speed ){ //refreshElement('.videoPlayer','slow');
var $elem = $( elem ), data = $elem.html();
$elem.empty().html( data ).fadeIn( speed );
}
function getGlobal(){
return (function(){
return this;
})();
}
function random( max ){
var min = 1,
rand = function(){
return Math.floor( Math.random() * ( max - min + 1 ) + min );
},
num1 = rand(),
num2 = rand();
return ( num1 > num2 ? num2/num1 : num1/num2 ) * max;
}
function roundNearPeace( number, peaces, dec ) {
return ( Math.round( number * peaces ) / peaces ).toFixed( dec );
}
function isFunction( functionToCheck ) {
var getType = {};
return functionToCheck && getType.toString.call( functionToCheck ) === '[object Function]';
}
//VideoTitleA("div.thumb .title a",'on');
var VideoTitleA = function( elem , state ){
$( elem ).each(function(){
var $this = $(this),
strTitle = $this.attr('title'),
strText = $this.attr('data-text'),
strHtml = $this.text();
state === 'on' ? $this.text(strTitle).attr('data-text',strHtml) : $this.text(strText);
});
},
isNumeric = function( value ){
return /^\d+$/.test( value );
},
obj2Str = function( obj ){
var objArr = $.makeArray(obj);
return objArr[0].outerHTML;
},
/**
* @return {string}
*/
MultiString = function(f){
return f.toString().split('\n').slice(1, -1).join('\n');
},
w = window,
glob = w,
$w = $(w),
$l = $(location),
locDoc = window.location.href,
d = document,
$d = $(d),
c = {
defaultState: 3,
cute : function( type, msg, color ) {
color = color || "black";
var newColor, bgc = "White";
switch ( color ) {
case "success": newColor = "Green"; bgc = "LimeGreen"; break;
case "info": newColor = "DodgerBlue"; bgc = "Turquoise"; break;
case "error": newColor = "Red"; bgc = "Black"; break;
case "start": newColor = "OliveDrab"; bgc = "PaleGreen"; break;
case "warning": newColor = "Tomato"; bgc = "Black"; break;
case "end": newColor = "Orchid"; bgc = "MediumVioletRed"; break;
default: //noinspection SillyAssignmentJS
newColor = color;
}
typeof msg == "object" ?
window.console[ type ]( msg )
: typeof color == "object" ? (
window.console[ type ]("%c" + msg, "color: PowderBlue;font-weight:bold; background-color: RoyalBlue;"),
window.console[ type ]( newColor )
):
window.console[ type ]("%c" + msg, "color:" + newColor + "; background-color: " + bgc + ";")
},
show: function( showThis, type ){
var State = GM_getValue( type + 'StateValue' ) || this.defaultState;
return showThis !== 0 && State !== 0 && State === ( showThis || State ) || State === 'all';
},
pre: function( type, name, fn, line, color ){
line = line == undefined ? '' : line + ': ';
var Fn = function(){ return fn !== undefined ? fn : ''; };
typeof fn == "object" ?
window.console[ type ]( name, Fn() ) : c.cute( type, line + name + ': ' + Fn(), color );
},
l: function( name, fn, line, color, showThis ){
var type = 'log';
this.show( showThis, type ) && this.pre( type, name, fn, line, color );
},
h: function( name, fn, line, color, showThis ){
var type = 'handled';
this.show( showThis, type ) && this.pre( type, name, fn, line, color );
},
//c.l('name', 'fn'=='fn', 'line', 'blue')
i: function( name, fn, line, color, showThis ){
var type = 'info';
this.show( showThis, type ) && this.pre( type, name, fn, line, color );
},
d: function( name, fn, line, color, showThis ){
var type = 'debug';
this.show( showThis, type ) && this.pre( type, name, fn, line, color );
}
},
advTimer = {
start : function( name, ms ){
advTimer[name] = ms;
setTimeout(function(){ advTimer[name] = 0; }, ms );
},
check : function( name ){
advTimer[name] || ( advTimer[name] = 0 );
return advTimer[name];
},
stop : function( name ){
advTimer[name] = 0;
}
},
g = {
locDoc : window.location.href,
ms : 0,
timer : function(ms){
g.ms = ms;
setTimeout(function(){ g.ms = 0; },ms);
},
lap : {
data : {},
tid : function(){ return performance.now(); },
set : function(name){ this.data[name] = this.tid(); },
get : function(name){ this.print(name); },
end : function(name){ this.print(name); this.del(name); },
del : function(name){ delete this.data[name]; },
print: function(name){ c.i( name, this.tid() - this.data[name] + 'ms'); }
},
GM : {
engine : function( mode, val, range ){
switch (mode){
case 'set': GM_setValue( val.name, val.default );
break;
case 'get': range ? config[ val.name ] = GM_getValue( val.name ):
ui.config[ val.name ] = GM_getValue( val.name );
break;
case 'del': GM_deleteValue( val.name );
}
},
manager : function( mode, array, range ){
$.each( array, function( i, val ){ this.engine( mode, val, range === undefined ); });
mode === 'del' && ( GM_deleteValue( 'firstRun' ), GM_deleteValue( 'yourVer' ) );
}
}
},
testPerformance = function(name, fn, testCycles ) {
g.lap.set( name );
var i = 0;
for ( i ; i < testCycles; i++ ){
fn;
}
g.lap.end( name );
};
var perf = function (testName, fn) {
var startTime = new Date().getTime();
fn();
var endTime = new Date().getTime();
console.log(testName + ": " + (endTime - startTime) + "ms");
};
$(document).on('click','*',function(e){
this == e.target && c.i('target:', e.target ); });
c.i('my Function Library ö');
/*
isScrolledIntoView = (elem) ->
docViewTop = $(window).scrollTop()
docViewBottom = docViewTop + $(window).height()
elemTop = $(elem).offset().top
elemBottom = elemTop + $(elem).height()
(elemBottom - 200 < docViewBottom) and (elemBottom + $(elem).height() > docViewBottom )
*/