resources: Move to library version of jquery.client

The jQuery Client library is no longer mastered in MediaWiki, and is
instead a proper, published library, which is now tagged as v1.0.0.

Change-Id: Idd19d738b392a5f742fef6f98c885e8c391a5cbf
This commit is contained in:
James D. Forrester 2015-03-11 16:14:46 -07:00
parent 4938afe99b
commit 97c4e93eef
9 changed files with 50 additions and 662 deletions

View file

@ -113,6 +113,8 @@ production.
links of a group of changes in EnhancedChangesList.
* A full interface for StatsD metric reporting has been added to the context
interface, reachable via IContextSource::getStats().
* Move the jQuery Client library from being mastered in MediaWiki as v0.1.0 to a
proper, published library, which is now tagged as v1.0.0.
==== External libraries ====
* MediaWiki now requires certain external libraries to be installed. In the past

View file

@ -25,7 +25,6 @@
"resources/src/jquery/jquery.byteLength.js",
"resources/src/jquery/jquery.byteLimit.js",
"resources/src/jquery/jquery.checkboxShiftClick.js",
"resources/src/jquery/jquery.client.js",
"resources/src/jquery/jquery.colorUtil.js",
"resources/src/jquery/jquery.confirmable.js",
"resources/src/jquery/jquery.footHovzer.js",
@ -35,6 +34,7 @@
"resources/src/jquery/jquery.makeCollapsible.js",
"resources/src/jquery/jquery.spinner.js",
"resources/src/jquery/jquery.tabIndex.js",
"resources/lib/jquery.client/jquery.client.js",
"resources/lib/oojs",
"resources/lib/oojs-ui"
]

View file

@ -185,7 +185,7 @@ return array(
'styles' => 'resources/lib/jquery.chosen/chosen.css',
),
'jquery.client' => array(
'scripts' => 'resources/src/jquery/jquery.client.js',
'scripts' => 'resources/lib/jquery.client/jquery.client.js',
'targets' => array( 'desktop', 'mobile' ),
),
'jquery.color' => array(

View file

@ -0,0 +1,9 @@
Trevor Parscal <trevorparscal@gmail.com>
Timo Tijhof <krinklemail@gmail.com>
Roan Kattouw <roan.kattouw@gmail.com>
Derk-Jan Hartman <hartman.wiki@gmail.com>
Bartosz Dziewoński <matma.rex@gmail.com>
Rob Moen <rmoen@wikimedia.org>
Ed Sanders <esanders@wikimedia.org>
Alex Monk <krenair@gmail.com>
James D. Forrester <jforrester@wikimedia.org>

View file

@ -0,0 +1,20 @@
Copyright 2010-2015 jquery-client maintainers and other contributors.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,6 @@
[![Build Status](https://travis-ci.org/wikimedia/jquery-client.svg?branch=master)](https://travis-ci.org/wikimedia/jquery-client) [![npm](https://img.shields.io/npm/v/jquery-client.svg?style=flat)](https://www.npmjs.com/package/jquery-client)
jQuery Client
=================
jQuery Client is a jQuery plugin for user-agent detection.

View file

@ -1,3 +1,12 @@
/*!
* jQuery Client v1.0.0
* https://www.mediawiki.org/wiki/JQuery_Client
*
* Copyright 2010-2015 jquery-client maintainers and other contributors.
* Released under the MIT license
* http://jquery-client.mit-license.org
*/
/**
* User-agent detection
*
@ -33,7 +42,7 @@
* }
*/
profile: function ( nav ) {
/*jshint boss: true */
/*jshint boss:true */
if ( nav === undefined ) {
nav = window.navigator;
@ -243,7 +252,7 @@
* @return {boolean} The current browser is in the support map
*/
test: function ( map, profile, exactMatchOnly ) {
/*jshint evil: true */
/*jshint evil:true */
var conditions, dir, i, op, val, j, pieceVersion, pieceVal, compare;
profile = $.isPlainObject( profile ) ? profile : $.client.profile();

View file

@ -48,7 +48,6 @@ return array(
'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js',
'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
'tests/qunit/suites/resources/jquery/jquery.client.test.js',
'tests/qunit/suites/resources/jquery/jquery.color.test.js',
'tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js',
'tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js',
@ -86,7 +85,6 @@ return array(
'jquery.autoEllipsis',
'jquery.byteLength',
'jquery.byteLimit',
'jquery.client',
'jquery.color',
'jquery.colorUtil',
'jquery.getAttrs',

View file

@ -1,656 +0,0 @@
( function ( $ ) {
QUnit.module( 'jquery.client', QUnit.newMwEnvironment() );
var uacount = 0,
// Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
uas = {
// Internet Explorer 6
// Internet Explorer 7
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': {
title: 'Internet Explorer 7',
platform: 'Win32',
profile: {
name: 'msie',
layout: 'trident',
layoutVersion: 'unknown',
platform: 'win',
version: '7.0',
versionBase: '7',
versionNumber: 7
},
wikiEditor: {
ltr: true,
rtl: false
}
},
// Internet Explorer 8
// Internet Explorer 9
// Internet Explorer 10
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': {
title: 'Internet Explorer 10',
platform: 'Win32',
profile: {
name: 'msie',
layout: 'trident',
layoutVersion: 6,
platform: 'win',
version: '10.0',
versionBase: '10',
versionNumber: 10
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Internet Explorer 11
'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko': {
title: 'Internet Explorer 11',
platform: 'Win32',
profile: {
name: 'msie',
layout: 'trident',
layoutVersion: 7,
platform: 'win',
version: '11.0',
versionBase: '11',
versionNumber: 11
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Internet Explorer 11 - Windows 8.1 x64 Modern UI
'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko': {
title: 'Internet Explorer 11',
platform: 'Win64',
profile: {
name: 'msie',
layout: 'trident',
layoutVersion: 7,
platform: 'win',
version: '11.0',
versionBase: '11',
versionNumber: 11
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Internet Explorer 11 - Windows 8.1 x64 desktop UI
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko': {
title: 'Internet Explorer 11',
platform: 'WOW64',
profile: {
name: 'msie',
layout: 'trident',
layoutVersion: 7,
platform: 'win',
version: '11.0',
versionBase: '11',
versionNumber: 11
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Internet Explorer 12
'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0': {
title: 'Internet Explorer 12',
platform: 'WOW64',
profile: {
name: 'msie',
layout: 'edge',
layoutVersion: 12,
platform: 'win',
version: '12.0',
versionBase: '12',
versionNumber: 12
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Firefox 2
// Firefox 3.5
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': {
title: 'Firefox 3.5',
platform: 'MacIntel',
profile: {
name: 'firefox',
layout: 'gecko',
layoutVersion: 20110420,
platform: 'mac',
version: '3.5.19',
versionBase: '3',
versionNumber: 3.5
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Firefox 3.6
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': {
title: 'Firefox 3.6',
platform: 'Linux i686',
profile: {
name: 'firefox',
layout: 'gecko',
layoutVersion: 20110422,
platform: 'linux',
version: '3.6.17',
versionBase: '3',
versionNumber: 3.6
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Firefox 4
'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': {
title: 'Firefox 4',
platform: 'Win32',
profile: {
name: 'firefox',
layout: 'gecko',
layoutVersion: 20100101,
platform: 'win',
version: '4.0.1',
versionBase: '4',
versionNumber: 4
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Firefox 10 nightly build
'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': {
title: 'Firefox 10 nightly',
platform: 'Linux',
profile: {
name: 'firefox',
layout: 'gecko',
layoutVersion: 20111103,
platform: 'linux',
version: '10.0a1',
versionBase: '10',
versionNumber: 10
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Iceweasel 10.0.6
'Mozilla/5.0 (X11; Linux i686; rv:10.0.6) Gecko/20100101 Iceweasel/10.0.6': {
title: 'Iceweasel 10.0.6',
platform: 'Linux',
profile: {
name: 'iceweasel',
layout: 'gecko',
layoutVersion: 20100101,
platform: 'linux',
version: '10.0.6',
versionBase: '10',
versionNumber: 10
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Iceweasel 15.0.1
'Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1': {
title: 'Iceweasel 15.0.1',
platform: 'Linux',
profile: {
name: 'iceweasel',
layout: 'gecko',
layoutVersion: 20100101,
platform: 'linux',
version: '15.0.1',
versionBase: '15',
versionNumber: 15
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Firefox 5
// Safari 3
// Safari 4
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
title: 'Safari 4',
platform: 'MacIntel',
profile: {
name: 'safari',
layout: 'webkit',
layoutVersion: 531,
platform: 'mac',
version: '4.0.5',
versionBase: '4',
versionNumber: 4
},
wikiEditor: {
ltr: true,
rtl: true
}
},
'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
title: 'Safari 4',
platform: 'Win32',
profile: {
name: 'safari',
layout: 'webkit',
layoutVersion: 533,
platform: 'win',
version: '4.0.5',
versionBase: '4',
versionNumber: 4
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Safari 5
// Safari 6
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13': {
title: 'Safari 6',
platform: 'MacIntel',
profile: {
name: 'safari',
layout: 'webkit',
layoutVersion: 536,
platform: 'mac',
version: '6.0.4',
versionBase: '6',
versionNumber: 6
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Safari 6.0.5+ (doesn't have the comma in "KHTML, like Gecko")
'Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/536.30.1 (KHTML like Gecko) Version/6.0.5 Safari/536.30.1': {
title: 'Safari 6',
platform: 'MacIntel',
profile: {
name: 'safari',
layout: 'webkit',
layoutVersion: 536,
platform: 'mac',
version: '6.0.5',
versionBase: '6',
versionNumber: 6
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Opera 10+
'Opera/9.80 (Windows NT 5.1)': {
title: 'Opera 10+ (exact version unspecified)',
platform: 'Win32',
profile: {
name: 'opera',
layout: 'presto',
layoutVersion: 'unknown',
platform: 'win',
version: '10',
versionBase: '10',
versionNumber: 10
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Opera 12
'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.11': {
title: 'Opera 12',
platform: 'Win32',
profile: {
name: 'opera',
layout: 'presto',
layoutVersion: 'unknown',
platform: 'win',
version: '12.11',
versionBase: '12',
versionNumber: 12.11
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Opera 15 (WebKit-based)
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130': {
title: 'Opera 15',
platform: 'Win32',
profile: {
name: 'opera',
layout: 'webkit',
layoutVersion: 537,
platform: 'win',
version: '15.0.1147.130',
versionBase: '15',
versionNumber: 15
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Chrome 5
// Chrome 6
// Chrome 7
// Chrome 8
// Chrome 9
// Chrome 10
// Chrome 11
// Chrome 12
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': {
title: 'Chrome 12',
platform: 'MacIntel',
profile: {
name: 'chrome',
layout: 'webkit',
layoutVersion: 534,
platform: 'mac',
version: '12.0.742.112',
versionBase: '12',
versionNumber: 12
},
wikiEditor: {
ltr: true,
rtl: true
}
},
'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': {
title: 'Chrome 12',
platform: 'Linux i686',
profile: {
name: 'chrome',
layout: 'webkit',
layoutVersion: 534,
platform: 'linux',
version: '12.0.742.68',
versionBase: '12',
versionNumber: 12
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Android WebKit Browser 2.3
'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1': {
title: 'Android WebKit Browser 2.3',
platform: 'Linux armv7l',
profile: {
name: 'android',
layout: 'webkit',
layoutVersion: 533,
platform: 'linux',
version: '2.3.5',
versionBase: '2',
versionNumber: 2.3
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Rekonq (bug 34924)
'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34': {
title: 'Rekonq',
platform: 'Linux i686',
profile: {
name: 'rekonq',
layout: 'webkit',
layoutVersion: 534,
platform: 'linux',
version: '534.34',
versionBase: '534',
versionNumber: 534.34
},
wikiEditor: {
ltr: true,
rtl: true
}
},
// Konqueror
'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9': {
title: 'Konqueror',
platform: 'Linux i686',
profile: {
name: 'konqueror',
layout: 'khtml',
layoutVersion: 'unknown',
platform: 'linux',
version: '4.9.1',
versionBase: '4',
versionNumber: 4.9
},
wikiEditor: {
// '4.9' is less than '4.11'.
ltr: false,
rtl: false
},
wikiEditorLegacy: {
// The check is missing in legacyTestMap
ltr: true,
rtl: true
}
},
// Amazon Silk
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true': {
title: 'Silk',
platform: 'Desktop',
profile: {
name: 'silk',
layout: 'webkit',
layoutVersion: 533,
platform: 'unknown',
version: '1.0.13.81_10003810',
versionBase: '1',
versionNumber: 1
},
wikiEditor: {
ltr: true,
rtl: true
}
},
'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true': {
title: 'Silk',
platform: 'Mobile',
profile: {
name: 'silk',
layout: 'webkit',
layoutVersion: 535,
platform: 'unknown',
version: '2.1',
versionBase: '2',
versionNumber: 2.1
},
wikiEditor: {
ltr: true,
rtl: true
}
}
},
testMap = {
// Example from WikiEditor, modified to provide version identifiers as strings and with
// Konqueror 4.11 check added.
'ltr': {
'msie': [['>=', '7.0']],
'firefox': [['>=', '2']],
'opera': [['>=', '9.6']],
'safari': [['>=', '3']],
'chrome': [['>=', '3']],
'netscape': [['>=', '9']],
'konqueror': [['>=', '4.11']],
'blackberry': false,
'ipod': false,
'iphone': false
},
'rtl': {
'msie': [['>=', '8']],
'firefox': [['>=', '2']],
'opera': [['>=', '9.6']],
'safari': [['>=', '3']],
'chrome': [['>=', '3']],
'netscape': [['>=', '9']],
'konqueror': [['>=', '4.11']],
'blackberry': false,
'ipod': false,
'iphone': false
}
},
legacyTestMap = {
// Original example from WikiEditor.
// This is using the old, but still supported way of providing version identifiers as numbers
// instead of strings; with this method, 4.9 would be considered larger than 4.11.
'ltr': {
'msie': [['>=', 7.0]],
'firefox': [['>=', 2]],
'opera': [['>=', 9.6]],
'safari': [['>=', 3]],
'chrome': [['>=', 3]],
'netscape': [['>=', 9]],
'blackberry': false,
'ipod': false,
'iphone': false
},
'rtl': {
'msie': [['>=', 8]],
'firefox': [['>=', 2]],
'opera': [['>=', 9.6]],
'safari': [['>=', 3]],
'chrome': [['>=', 3]],
'netscape': [['>=', 9]],
'blackberry': false,
'ipod': false,
'iphone': false
}
}
;
// Count test cases
$.each( uas, function () {
uacount++;
} );
QUnit.test( 'profile( navObject )', 7, function ( assert ) {
var p = $.client.profile();
function unknownOrType( val, type, summary ) {
assert.ok( typeof val === type || val === 'unknown', summary );
}
assert.equal( typeof p, 'object', 'profile returns an object' );
unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' );
unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' );
unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' );
unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' );
unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' );
assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
} );
QUnit.test( 'profile( navObject ) - samples', uacount, function ( assert ) {
// Loop through and run tests
$.each( uas, function ( rawUserAgent, data ) {
// Generate a client profile object and compare recursively
var ret = $.client.profile( {
userAgent: rawUserAgent,
platform: data.platform
} );
assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
} );
} );
QUnit.test( 'test( testMap )', 4, function ( assert ) {
// .test() uses eval, make sure no exceptions are thrown
// then do a basic return value type check
var testMatch = $.client.test( testMap ),
ie7Profile = $.client.profile( {
'userAgent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'platform': ''
} );
assert.equal( typeof testMatch, 'boolean', 'map with ltr/rtl split returns a boolean value' );
testMatch = $.client.test( testMap.ltr );
assert.equal( typeof testMatch, 'boolean', 'simple map (without ltr/rtl split) returns a boolean value' );
assert.equal( $.client.test( {
'msie': null
}, ie7Profile ), true, 'returns true if any version of a browser are allowed (null)' );
assert.equal( $.client.test( {
'msie': false
}, ie7Profile ), false, 'returns false if all versions of a browser are not allowed (false)' );
} );
QUnit.test( 'test( testMap, exactMatchOnly )', 2, function ( assert ) {
var ie7Profile = $.client.profile( {
'userAgent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'platform': ''
} );
assert.equal( $.client.test( {
'firefox': [['>=', 2]]
}, ie7Profile, false ), true, 'returns true if browser not found and exactMatchOnly not set' );
assert.equal( $.client.test( {
'firefox': [['>=', 2]]
}, ie7Profile, true ), false, 'returns false if browser not found and exactMatchOnly is set' );
} );
QUnit.test( 'test( testMap ), test( legacyTestMap ) - WikiEditor sample', uacount * 2 * 2, function ( assert ) {
var $body = $( 'body' ),
bodyClasses = $body.attr( 'class' );
// Loop through and run tests
$.each( uas, function ( agent, data ) {
$.each( ['ltr', 'rtl'], function ( i, dir ) {
var profile, testMatch, legacyTestMatch;
$body.removeClass( 'ltr rtl' ).addClass( dir );
profile = $.client.profile( {
userAgent: agent,
platform: data.platform
} );
testMatch = $.client.test( testMap, profile );
legacyTestMatch = $.client.test( legacyTestMap, profile );
$body.removeClass( dir );
assert.equal(
testMatch,
data.wikiEditor[dir],
'testing comparison based on ' + dir + ', ' + agent
);
assert.equal(
legacyTestMatch,
data.wikiEditorLegacy ? data.wikiEditorLegacy[dir] : data.wikiEditor[dir],
'testing comparison based on ' + dir + ', ' + agent + ' (legacyTestMap)'
);
} );
} );
// Restore body classes
$body.attr( 'class', bodyClasses );
} );
}( jQuery ) );