diff options
Diffstat (limited to 'www/wiki/extensions/UploadWizard/resources/mw.QuickTitleChecker.js')
-rw-r--r-- | www/wiki/extensions/UploadWizard/resources/mw.QuickTitleChecker.js | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/www/wiki/extensions/UploadWizard/resources/mw.QuickTitleChecker.js b/www/wiki/extensions/UploadWizard/resources/mw.QuickTitleChecker.js new file mode 100644 index 00000000..785531b7 --- /dev/null +++ b/www/wiki/extensions/UploadWizard/resources/mw.QuickTitleChecker.js @@ -0,0 +1,84 @@ +/** + * Does some local checking of a filename. + * If you want more specific filename checks (such as bad words, other blacklisted stuff) use the TitleBlacklist API. + * + * These checks are ignored when the TitleBlacklist API is available, since presumably they should be configured there instead, where it's + * possible to update them easily and higher-quality error messages are available. + * + * This is an incomplete rendering of some of the meta.wikimedia.org and commons.wikimedia.org blacklist as they existed on 2011-05-05, and + * ignores cases that are irrelevant to uploading new media images. + * - all regexes are case INsensitive by default + * - namespaces and File: prefix are removed since everything we upload is under File: anyway + * - noedit, moveonly, repuload is irrelevant + * - we can't check autoconfirmed-ness of users here, so we ignore it + * - Javascript doesn't have a standard way to access unicode character properties in regexes, so \p{PROPERTY}, \P{PROPERTY}, and [[:PROPERTY:]] have been changed when possible + * or the associated regex removed +*/ +( function ( mw, $ ) { + + mw.QuickTitleChecker = {}; + + mw.QuickTitleChecker.regexSets = { + + invalid: [ + /[\u00A0\u1680\u180E\u2000-\u200B\u2028\u2029\u202F\u205F\u3000]/, // NBSP and other unusual spaces + /[\u202A-\u202E]/, // BiDi overrides + // eslint-disable-next-line no-control-regex + /[\x00-\x1f]/, // Control characters + /\uFEFF/, // Byte order mark + /\u00AD/, // Soft-hyphen + /[\uD800-\uDFFF\uE000-\uF8FF\uFFF0-\uFFFF]/, // Surrogates, Private Use Area and Specials, including the Replacement Character U+FFFD + /[^\0-\uFFFF]/, // Very few characters outside the Basic Multilingual Plane are useful in titles + /''/ + ], + + // note lack of extension, since we test title without extension. + senselessimagename: [ + /^DCP[\d\s]+$/i, // Kodak + /^DSC.[\d\s]+$/i, // [[w:Design rule for Camera File system]] (Nikon, Fuji, Polaroid) + /^MVC-?[\d\s]+$/i, // Sony Mavica + /^P[\dA-F][\d\s]+$/, // Olympus, Kodak + /^I?MG[P_]?[\d\s]+$/, // Canon, Pentax + /^1\d+-\d+(_IMG)?$/, // Canon + /^(IM|EX)[\d\s]+$/, // HP Photosmart + /^DC[\d\s]+[SML]$/, // Kodak + /^PIC[T_]?[\d\s]+$/, // Minolta + /^PANA[\d\s]+$/, // Panasonic + /^DUW[\d\s]+$/, // some mobile phones + /^CIMG[\d\s]+$/, // Casio + /^JD[\d\s]+$/, // Jenoptik + /^SDC[\d\s]+$/, // Samsung + /^DVC[\d\s]+$/, // DoCoMo + /^SANY[\d\s]+$/ // Sanyo + ], + + thumbnail: [ + /^\d+px-.*/ + ], + + extension: [ + /\.(jpe?g|png|gif|svg|ogg|ogv|oga)$/ + ] + + }; + + /** + * Check title for validity, without relying on TitleBlacklist extension or API requests. + * + * @param {string} title + * @return {string[]} Array of error codes; if it's empty, the title is acceptable. + * Possible error codes are 'invalid', 'senselessimagename', 'thumbnail', 'extension'. + */ + mw.QuickTitleChecker.checkTitle = function ( title ) { + var errors = []; + $.each( mw.QuickTitleChecker.regexSets, function ( setName, regexes ) { + $.each( regexes, function ( i, regex ) { + if ( title.match( regex ) ) { + errors.push( setName ); + } + } ); + } ); + return errors; + }; + +}( mediaWiki, jQuery ) ); |