resources: Remove jquery.color, jquery.fullscreen, and jquery.form

Bug: T335723
Change-Id: I530bae259291949e0f0853bb8bd8264acd131ff4
这个提交包含在:
Hannah Okwelum 2023-10-06 21:35:56 +01:00 提交者 Krinkle
父节点 97e269836f
当前提交 1457308c31
共有 12 个文件被更改,包括 3 次插入1695 次删除

查看文件

@ -156,6 +156,9 @@ For notes on 1.40.x and older releases, see HISTORY.
* jquery.hoverIntent was removed.
* codex-search was removed, it's part of codex now.
* wikimedia/ip-set was removed, it's part of wikimedia/ip-utils now.
* jquery.color was removed.
* jquery.fullscreen was removed.
* jquery.form was removed.
* …
=== Bug fixes in 1.41 ===

查看文件

@ -12,7 +12,6 @@
"--exclude": [
"resources/src/codex",
"resources/src/codex-search",
"resources/src/jquery.color/jquery.color.js",
"resources/src/jquery.tablesorter",
"resources/src/jquery.tipsy",
"resources/src/jquery/jquery.highlightText.js",

查看文件

@ -88,7 +88,6 @@
"name": "Plugins",
"classes": [
"jQuery.client",
"jQuery.colorUtil",
"jQuery.plugin.*"
]
}

查看文件

@ -170,12 +170,6 @@ return [
'jquery.client' => [
'scripts' => 'resources/lib/jquery.client/jquery.client.js',
],
'jquery.color' => [
'scripts' => [
'resources/src/jquery.color/jquery.colorUtil.js',
'resources/src/jquery.color/jquery.color.js',
],
],
'jquery.confirmable' => [
'scripts' => [
'resources/src/jquery/jquery.confirmable.js',
@ -194,12 +188,6 @@ return [
'deprecated' => 'Merged into "mediawiki.cookie", use that module instead (T271995)',
'dependencies' => 'mediawiki.cookie',
],
'jquery.form' => [
'scripts' => 'resources/lib/jquery.form/jquery.form.js',
],
'jquery.fullscreen' => [
'scripts' => 'resources/lib/jquery.fullscreen/jquery.fullscreen.js',
],
'jquery.highlightText' => [
'scripts' => 'resources/src/jquery/jquery.highlightText.js',
'dependencies' => [

查看文件

@ -288,24 +288,6 @@ jquery.client:
package/LICENSE-MIT:
package/README.md:
jquery.form:
license: GPL-2.0+ OR MIT
homepage: https://github.com/jquery-form/form
authors: Mike Alsup and Kevin Morris
version: 3.14-ff80d9ddf4
type: file
src: https://raw.githubusercontent.com/jquery-form/form/ff80d9ddf4/jquery.form.js
integrity: sha384-h4G2CrcSbixzMvrrK259cNBYaL/vS1D4+KdUN9NJDzQnTU1bQ6Avluget+Id13M7
jquery.fullscreen:
license: GPL-2.0+
homepage: https://github.com/theopolisme/jquery-fullscreen
authors: Theo Patt, Timo Tijhof, Gilles Dubuc
version: 2.1.0
type: file
src: https://raw.githubusercontent.com/theopolisme/jquery-fullscreen/v2.1.0/jquery.fullscreen.js
integrity: sha384-G4KPs2d99tgcsyUnJ3eeZ1r2hEKDwZfc4+/xowL/LIemq2VVwEE8HpVAWt4WYNLR
jquery.i18n:
license: MIT OR GPL-2.0-or-later
homepage: https://github.com/wikimedia/jquery.i18n

文件差异内容过多而无法显示 加载差异

查看文件

@ -1,175 +0,0 @@
/**
* jQuery fullscreen plugin
* https://github.com/theopolisme/jquery-fullscreen
*
* Copyright (c) 2013 Theopolisme <theopolismewiki@gmail.com>
*
* 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 2 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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
( function ( $ ) {
var setupFullscreen,
fsClass = 'jq-fullscreened';
/**
* On fullscreenchange, trigger a jq-fullscreen-change event
* The event is given an object, which contains the fullscreened DOM element (element), if any
* and a boolean value (fullscreen) indicating if we've entered or exited fullscreen mode
* Also remove the 'fullscreened' class from elements that are no longer fullscreen
*/
function handleFullscreenChange () {
var fullscreenElement = document.fullscreenElement ||
document.mozFullScreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement;
if ( !fullscreenElement ) {
$( '.' + fsClass ).data( 'isFullscreened', false ).removeClass( fsClass );
}
$( document ).trigger( $.Event( 'jq-fullscreen-change', { element: fullscreenElement, fullscreen: !!fullscreenElement } ) );
}
/**
* Enters full screen with the "this" element in focus.
* Check the .data( 'isFullscreened' ) of the return value to check
* success or failure, if you're into that sort of thing.
* @chainable
* @return {jQuery}
*/
function enterFullscreen () {
var element = this.get(0),
$element = this.first();
if ( element ) {
if ( element.requestFullscreen ) {
element.requestFullscreen();
} else if ( element.mozRequestFullScreen ) {
element.mozRequestFullScreen();
} else if ( element.webkitRequestFullscreen ) {
element.webkitRequestFullscreen();
} else if ( element.msRequestFullscreen ) {
element.msRequestFullscreen();
} else {
// Unable to make fullscreen
$element.data( 'isFullscreened', false );
return this;
}
// Add the fullscreen class and data attribute to `element`
$element.addClass( fsClass ).data( 'isFullscreened', true );
return this;
} else {
$element.data( 'isFullscreened', false );
return this;
}
}
/**
* Brings the "this" element out of fullscreen.
* Check the .data( 'isFullscreened' ) of the return value to check
* success or failure, if you're into that sort of thing.
* @chainable
* @return {jQuery}
*/
function exitFullscreen () {
var fullscreenElement = ( document.fullscreenElement ||
document.mozFullScreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement );
// Ensure that we only exit fullscreen if exitFullscreen() is being called on the same element that is currently fullscreen
if ( fullscreenElement && this.get(0) === fullscreenElement ) {
if ( document.exitFullscreen ) {
document.exitFullscreen();
} else if ( document.mozCancelFullScreen ) {
document.mozCancelFullScreen();
} else if ( document.webkitCancelFullScreen ) {
document.webkitCancelFullScreen();
} else if ( document.msExitFullscreen ) {
document.msExitFullscreen();
} else {
// Unable to cancel fullscreen mode
return this;
}
// We don't need to remove the fullscreen class here,
// because it will be removed in handleFullscreenChange.
// But we should change the data on the element so the
// caller can check for success.
this.first().data( 'isFullscreened', false );
}
return this;
}
/**
* Set up fullscreen handling and install necessary event handlers.
* Return false if fullscreen is not supported.
*/
setupFullscreen = function () {
if ( $.support.fullscreen ) {
// When the fullscreen mode is changed, trigger the
// fullscreen events (and when exiting,
// also remove the fullscreen class)
$( document ).on( 'fullscreenchange webkitfullscreenchange mozfullscreenchange MSFullscreenChange', handleFullscreenChange);
// Convenience wrapper so that one only needs to listen for
// 'fullscreenerror', not all of the prefixed versions
$( document ).on( 'webkitfullscreenerror mozfullscreenerror MSFullscreenError', function () {
$( document ).trigger( $.Event( 'fullscreenerror' ) );
} );
// Fullscreen has been set up, so always return true
setupFullscreen = function () { return true; };
return true;
} else {
// Always return false from now on, since fullscreen is not supported
setupFullscreen = function () { return false; };
return false;
}
};
/**
* Set up fullscreen handling if necessary, then make the first element
* matching the given selector fullscreen
* @chainable
* @return {jQuery}
*/
$.fn.enterFullscreen = function () {
if ( setupFullscreen() ) {
$.fn.enterFullscreen = enterFullscreen;
return this.enterFullscreen();
} else {
$.fn.enterFullscreen = function () { return this; };
return this;
}
};
/**
* Set up fullscreen handling if necessary, then cancel fullscreen mode
* for the first element matching the given selector.
* @chainable
* @return {jQuery}
*/
$.fn.exitFullscreen = function () {
if ( setupFullscreen() ) {
$.fn.exitFullscreen = exitFullscreen;
return this.exitFullscreen();
} else {
$.fn.exitFullscreen = function () { return this; };
return this;
}
};
$.support.fullscreen = document.fullscreenEnabled ||
document.webkitFullscreenEnabled ||
document.mozFullScreenEnabled ||
document.msFullscreenEnabled;
}( jQuery ) );

查看文件

@ -1,55 +0,0 @@
/**
* jQuery Color Animations
*
* @author John Resig, 2007
* @author Krinkle, 2011
* Released under the MIT and GPL licenses.
*
* - 2011-01-05: Forked for MediaWiki. See also jQuery.colorUtil plugin
*/
( function () {
function getColor( elem, attr ) {
var color;
do {
color = $.css( elem, attr );
// Keep going until we find an element that has color, or we hit the body
if ( color !== '' && color !== 'transparent' || elem.nodeName.toLowerCase() === 'body' ) {
break;
}
attr = 'backgroundColor';
// eslint-disable-next-line no-cond-assign
} while ( elem = elem.parentNode );
return $.colorUtil.getRGB( color );
}
// We override the animation for all of these color styles
[
'backgroundColor',
'borderBottomColor',
'borderLeftColor',
'borderRightColor',
'borderTopColor',
'color',
'outlineColor'
].forEach( function ( attr ) {
$.fx.step[ attr ] = function ( fx ) {
if ( !fx.colorInit ) {
fx.start = getColor( fx.elem, attr );
fx.end = $.colorUtil.getRGB( fx.end );
fx.colorInit = true;
}
fx.elem.style[ attr ] = 'rgb(' + [
Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 0 ] - fx.start[ 0 ] ) ) + fx.start[ 0 ], 10 ), 255 ), 0 ),
Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 1 ] - fx.start[ 1 ] ) ) + fx.start[ 1 ], 10 ), 255 ), 0 ),
Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 2 ] - fx.start[ 2 ] ) ) + fx.start[ 2 ], 10 ), 255 ), 0 )
].join( ',' ) + ')';
};
} );
}() );

查看文件

@ -1,268 +0,0 @@
/*!
* jQuery Color Utilities
*
* Released under the MIT and GPL licenses.
*
* Mostly based on other plugins and functions (linted and optimized a little).
* Sources cited inline.
*/
( function () {
/**
* @class jQuery.colorUtil
* @singleton
*/
$.colorUtil = {
/**
* Parse CSS color strings looking for color tuples
*
* Based on highlightFade by Blair Mitchelmore
* <http://jquery.offput.ca/highlightFade/>
*
* @param {Array|string} color
* @return {Array}
*/
getRGB: function ( color ) {
var result;
// Check if we're already dealing with an array of colors
if ( color && Array.isArray( color ) && color.length === 3 ) {
return color;
}
if ( typeof color !== 'string' ) {
return undefined;
}
// Look for rgb(num,num,num)
// eslint-disable-next-line no-cond-assign
if ( result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec( color ) ) {
return [
parseInt( result[ 1 ], 10 ),
parseInt( result[ 2 ], 10 ),
parseInt( result[ 3 ], 10 )
];
}
// Look for rgb(num%,num%,num%)
// eslint-disable-next-line no-cond-assign, security/detect-unsafe-regex
if ( result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)%\s*,\s*([0-9]+(?:\.[0-9]+)?)%\s*,\s*([0-9]+(?:\.[0-9]+)?)%\s*\)/.exec( color ) ) {
return [
parseFloat( result[ 1 ] ) * 2.55,
parseFloat( result[ 2 ] ) * 2.55,
parseFloat( result[ 3 ] ) * 2.55
];
}
// Look for #a0b1c2
// eslint-disable-next-line no-cond-assign
if ( result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec( color ) ) {
return [
parseInt( result[ 1 ], 16 ),
parseInt( result[ 2 ], 16 ),
parseInt( result[ 3 ], 16 )
];
}
// Look for #fff
// eslint-disable-next-line no-cond-assign
if ( result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec( color ) ) {
return [
parseInt( result[ 1 ] + result[ 1 ], 16 ),
parseInt( result[ 2 ] + result[ 2 ], 16 ),
parseInt( result[ 3 ] + result[ 3 ], 16 )
];
}
// Look for rgba(0, 0, 0, 0) == transparent in Safari 3
// eslint-disable-next-line no-cond-assign
if ( result = /rgba\(0, 0, 0, 0\)/.exec( color ) ) {
return $.colorUtil.colors.transparent;
}
// Otherwise, we're most likely dealing with a named color
return $.colorUtil.colors[ color.trim().toLowerCase() ];
},
/**
* Named color map
*
* Based on Interface by Stefan Petre
* <http://interface.eyecon.ro/>
*
* @property {Object}
*/
colors: {
aqua: [ 0, 255, 255 ],
azure: [ 240, 255, 255 ],
beige: [ 245, 245, 220 ],
black: [ 0, 0, 0 ],
blue: [ 0, 0, 255 ],
brown: [ 165, 42, 42 ],
cyan: [ 0, 255, 255 ],
darkblue: [ 0, 0, 139 ],
darkcyan: [ 0, 139, 139 ],
darkgrey: [ 169, 169, 169 ],
darkgreen: [ 0, 100, 0 ],
darkkhaki: [ 189, 183, 107 ],
darkmagenta: [ 139, 0, 139 ],
darkolivegreen: [ 85, 107, 47 ],
darkorange: [ 255, 140, 0 ],
darkorchid: [ 153, 50, 204 ],
darkred: [ 139, 0, 0 ],
darksalmon: [ 233, 150, 122 ],
darkviolet: [ 148, 0, 211 ],
fuchsia: [ 255, 0, 255 ],
gold: [ 255, 215, 0 ],
green: [ 0, 128, 0 ],
indigo: [ 75, 0, 130 ],
khaki: [ 240, 230, 140 ],
lightblue: [ 173, 216, 230 ],
lightcyan: [ 224, 255, 255 ],
lightgreen: [ 144, 238, 144 ],
lightgrey: [ 211, 211, 211 ],
lightpink: [ 255, 182, 193 ],
lightyellow: [ 255, 255, 224 ],
lime: [ 0, 255, 0 ],
magenta: [ 255, 0, 255 ],
maroon: [ 128, 0, 0 ],
navy: [ 0, 0, 128 ],
olive: [ 128, 128, 0 ],
orange: [ 255, 165, 0 ],
pink: [ 255, 192, 203 ],
purple: [ 128, 0, 128 ],
violet: [ 128, 0, 128 ],
red: [ 255, 0, 0 ],
silver: [ 192, 192, 192 ],
white: [ 255, 255, 255 ],
yellow: [ 255, 255, 0 ],
transparent: [ 255, 255, 255 ]
},
/**
* Convert an RGB color value to HSL.
*
* Conversion formula based on
* <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
*
* Adapted from <https://en.wikipedia.org/wiki/HSL_color_space>.
*
* Assumes `r`, `g`, and `b` are contained in the set `[0, 255]` and
* returns `h`, `s`, and `l` in the set `[0, 1]`.
*
* @param {number} r The red color value
* @param {number} g The green color value
* @param {number} b The blue color value
* @return {number[]} The HSL representation
*/
rgbToHsl: function ( r, g, b ) {
var d, h, s, l, min, max;
r = r / 255;
g = g / 255;
b = b / 255;
max = Math.max( r, g, b );
min = Math.min( r, g, b );
l = ( max + min ) / 2;
if ( max === min ) {
// achromatic
h = s = 0;
} else {
d = max - min;
s = l > 0.5 ? d / ( 2 - max - min ) : d / ( max + min );
switch ( max ) {
case r:
h = ( g - b ) / d + ( g < b ? 6 : 0 );
break;
case g:
h = ( b - r ) / d + 2;
break;
case b:
h = ( r - g ) / d + 4;
break;
}
h /= 6;
}
return [ h, s, l ];
},
/**
* Convert an HSL color value to RGB.
*
* Conversion formula based on
* <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
*
* Adapted from <https://en.wikipedia.org/wiki/HSL_color_space>.
*
* Assumes `h`, `s`, and `l` are contained in the set `[0, 1]` and
* returns `r`, `g`, and `b` in the set `[0, 255]`.
*
* @param {number} h The hue
* @param {number} s The saturation
* @param {number} l The lightness
* @return {number[]} The RGB representation
*/
hslToRgb: function ( h, s, l ) {
var r, g, b, hue2rgb, q, p;
if ( s === 0 ) {
r = g = b = l; // achromatic
} else {
hue2rgb = function ( t ) {
if ( t < 0 ) {
t += 1;
}
if ( t > 1 ) {
t -= 1;
}
if ( t < 1 / 6 ) {
return p + ( q - p ) * 6 * t;
}
if ( t < 1 / 2 ) {
return q;
}
if ( t < 2 / 3 ) {
return p + ( q - p ) * ( 2 / 3 - t ) * 6;
}
return p;
};
q = l < 0.5 ? l * ( 1 + s ) : l + s - l * s;
p = 2 * l - q;
r = hue2rgb( h + 1 / 3 );
g = hue2rgb( h );
b = hue2rgb( h - 1 / 3 );
}
return [ r * 255, g * 255, b * 255 ];
},
/**
* Get a brighter or darker rgb() value string.
*
* Usage:
*
* $.colorUtil.getColorBrightness( 'red', +0.1 );
* // > "rgb(255,50,50)"
* $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 );
* // > "rgb(118,29,29)"
*
* @param {Mixed} currentColor Current value in css
* @param {number} mod Wanted brightness modification between -1 and 1
* @return {string} Like `'rgb(r,g,b)'`
*/
getColorBrightness: function ( currentColor, mod ) {
var rgbArr = $.colorUtil.getRGB( currentColor ),
hslArr = $.colorUtil.rgbToHsl( rgbArr[ 0 ], rgbArr[ 1 ], rgbArr[ 2 ] );
rgbArr = $.colorUtil.hslToRgb( hslArr[ 0 ], hslArr[ 1 ], hslArr[ 2 ] + mod );
return 'rgb(' +
[ parseInt( rgbArr[ 0 ], 10 ), parseInt( rgbArr[ 1 ], 10 ), parseInt( rgbArr[ 2 ], 10 ) ].join( ',' ) +
')';
}
};
}() );

查看文件

@ -61,8 +61,6 @@ return [
}
],
'tests/qunit/resources/startup/clientprefs.test.js',
'tests/qunit/resources/jquery.color.test.js',
'tests/qunit/resources/jquery.colorUtil.test.js',
'tests/qunit/resources/jquery.highlightText.test.js',
'tests/qunit/resources/jquery.lengthLimit.test.js',
'tests/qunit/resources/jquery.makeCollapsible.test.js',
@ -112,7 +110,6 @@ return [
'tests/qunit/resources/mediawiki.visibleTimeout.test.js',
],
'dependencies' => [
'jquery.color',
'jquery.highlightText',
'jquery.lengthLimit',
'jquery.makeCollapsible',

查看文件

@ -1,15 +0,0 @@
QUnit.module( 'jquery.color', () => {
QUnit.test( 'animate', async ( assert ) => {
const $canvas = $( '<div>' )
.css( 'background-color', '#fff' )
.appendTo( '#qunit-fixture' );
// eslint-disable-next-line no-jquery/no-animate
await $canvas.animate( { 'background-color': '#000' }, 3 ).promise();
const endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
assert.deepEqual( endColors, [ 0, 0, 0 ], 'end state' );
} );
} );

查看文件

@ -1,58 +0,0 @@
QUnit.module( 'jquery.colorUtil', () => {
QUnit.test( 'getRGB [no arguments]', ( assert ) => {
assert.strictEqual( $.colorUtil.getRGB(), undefined );
} );
QUnit.test.each( 'getRGB', {
'empty string': [ '', undefined ],
'array of rgb': [ [ 0, 100, 255 ], [ 0, 100, 255 ] ],
'rgb string': [ 'rgb(0,100,255)', [ 0, 100, 255 ] ],
'rgb spaces': [ 'rgb(0, 100, 255)', [ 0, 100, 255 ] ],
'rgb percent': [ 'rgb(0%,20%,40%)', [ 0, 51, 102 ] ],
'rgb percent spaces': [ 'rgb(0%, 20%, 40%)', [ 0, 51, 102 ] ],
'hex 6 lowercase': [ '#f2ddee', [ 242, 221, 238 ] ],
'hex 6 uppercase': [ '#f2DDEE', [ 242, 221, 238 ] ],
'hex 6 mixed': [ '#f2DdEe', [ 242, 221, 238 ] ],
'hex 3 lowercase': [ '#eee', [ 238, 238, 238 ] ],
'hex 3 uppercase': [ '#EEE', [ 238, 238, 238 ] ],
'hex 3 mixed': [ '#eEe', [ 238, 238, 238 ] ],
'rgba zeros': [ 'rgba(0, 0, 0, 0)', [ 255, 255, 255 ] ],
// Known limitation, not yet supported
'rgba zeros nospace': [ 'rgba(0,0,0,0)', undefined ],
'literal name lightGreen': [ 'lightGreen', [ 144, 238, 144 ] ],
'literal keyword transparent': [ 'transparent', [ 255, 255, 255 ] ],
'literal invalid': [ 'mediaWiki', undefined ]
}, ( assert, [ input, expected ] ) => {
assert.deepEqual( $.colorUtil.getRGB( input ), expected );
} );
function normalDecimal( a ) {
return Math.round( a * 100 ) / 100;
}
QUnit.test( 'rgbToHsl', ( assert ) => {
const hsl = $.colorUtil.rgbToHsl( 144, 238, 144 );
// Limit testing to two decimals to normalize cross-browser differences.
const ret = [ normalDecimal( hsl[ 0 ] ), normalDecimal( hsl[ 1 ] ), normalDecimal( hsl[ 2 ] ) ];
assert.deepEqual( ret, [ 0.33, 0.73, 0.75 ], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
} );
QUnit.test( 'hslToRgb', ( assert ) => {
const rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
// Limit to whole numbers to normalize cros-browser differences.
const ret = [ Math.round( rgb[ 0 ] ), Math.round( rgb[ 1 ] ), Math.round( rgb[ 2 ] ) ];
assert.deepEqual( ret, [ 183, 240, 168 ], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
} );
QUnit.test( 'getColorBrightness', ( assert ) => {
let ret;
ret = $.colorUtil.getColorBrightness( 'red', +0.1 );
assert.strictEqual( ret, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' );
ret = $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 );
assert.strictEqual( ret, 'rgb(118,29,29)', 'Start with rgb string "rgb(200,50,50)", darken 20%' );
} );
} );