* .jshintrc: Updated to include more strict options that match our code conventions. Also separated into 3 groups: - stricter (curly, eqeqeq etc.) - laxer (smarttabs, laxbreak) - envrionment (browser) * .jshintignore: Updated to include more third-party/upstream files that should not be linted. * Most of it is just routine cleanup, a few notable points: - jquery.autoEllipsis: Removed unused variable $protectedText. - jquery.arrowSteps.js: Remove <!-- --> and language="javascript" that hasn't been needed for almost a decade. - jquery.byteLimit: Use dashToCamel key for .data(), this already happens internally in jQuery data(), since data storage should use keys that are usable as identifiers. The dashed versions are to populate these from data-attribute-names, which then becomes data.attributeNames. jQuery data() takes both forms as convenience. - jquery.client.js: To avoid a rewrite of it, allowing unexpected assignments (boss) and eval (evil) in the functions that use that. Left as it is for now, could use a rewrite later. - jquery.color.js: Tolerate unexpected assignment for now (boss). Left as it is for now, should perhaps be refactored later. Also re-ordered per jshint/jslint to put definition before invocation. This option can be disabled, but then it doesn't warn for invoking undefined functions (or typos) at all. - jquery.expandableField.js: Remove empty switch/case. - jquery.localize.js: Alias mw global. - jquery.suggestions.js: Use e.which; jQuery.Event normalizes e.keyCode etc. - jquery.tablesorter.js: Alias mw global. - jquery.textSelection.js: Fix leakage of variable in global scope of var "i" and "j". - mediawiki.util.test.js: Fixed implied global `pCustom`. * Review with -w for your own sanity. Change-Id: Ia972f79539a96a38357ec4e92b0b6e38cc301681
19 lines
738 B
JavaScript
19 lines
738 B
JavaScript
/**
|
|
* jQuery.byteLength
|
|
*
|
|
* Calculate the byte length of a string (accounting for UTF-8).
|
|
*
|
|
* @author Jan Paul Posma, 2011
|
|
*/
|
|
jQuery.byteLength = function ( str ) {
|
|
|
|
// This basically figures out how many bytes a UTF-16 string (which is what js sees)
|
|
// will take in UTF-8 by replacing a 2 byte character with 2 *'s, etc, and counting that.
|
|
// Note, surrogate (\uD800-\uDFFF) characters are counted as 2 bytes, since there's two of them
|
|
// and the actual character takes 4 bytes in UTF-8 (2*2=4). Might not work perfectly in
|
|
// edge cases such as illegal sequences, but that should never happen.
|
|
return str
|
|
.replace( /[\u0080-\u07FF\uD800-\uDFFF]/g, '**' )
|
|
.replace( /[\u0800-\uD7FF\uE000-\uFFFF]/g, '***' )
|
|
.length;
|
|
};
|