Browse Source
add karma/jasmine config for js unit testing
add karma/jasmine config for js unit testing
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>pull/54/head
No known key found for this signature in database
GPG Key ID: CC42AC2A7F0E56D8
118 changed files with 21088 additions and 2 deletions
-
10.drone.yml
-
2.eslintignore
-
5.gitignore
-
3bower.json
-
25js/tests/dummy_spec.js
-
21js/tests/main.js
-
25js/vendor/jquery/.bower.json
-
278js/vendor/jquery/AUTHORS.txt
-
36js/vendor/jquery/LICENSE.txt
-
65js/vendor/jquery/README.md
-
14js/vendor/jquery/bower.json
-
9814js/vendor/jquery/dist/jquery.js
-
4js/vendor/jquery/dist/jquery.min.js
-
1js/vendor/jquery/dist/jquery.min.map
-
36js/vendor/jquery/external/sizzle/LICENSE.txt
-
2143js/vendor/jquery/external/sizzle/dist/sizzle.js
-
3js/vendor/jquery/external/sizzle/dist/sizzle.min.js
-
1js/vendor/jquery/external/sizzle/dist/sizzle.min.map
-
29js/vendor/jquery/src/.jshintrc
-
845js/vendor/jquery/src/ajax.js
-
100js/vendor/jquery/src/ajax/jsonp.js
-
83js/vendor/jquery/src/ajax/load.js
-
13js/vendor/jquery/src/ajax/parseJSON.js
-
27js/vendor/jquery/src/ajax/parseXML.js
-
68js/vendor/jquery/src/ajax/script.js
-
3js/vendor/jquery/src/ajax/var/location.js
-
5js/vendor/jquery/src/ajax/var/nonce.js
-
3js/vendor/jquery/src/ajax/var/rquery.js
-
167js/vendor/jquery/src/ajax/xhr.js
-
11js/vendor/jquery/src/attributes.js
-
142js/vendor/jquery/src/attributes/attr.js
-
177js/vendor/jquery/src/attributes/classes.js
-
125js/vendor/jquery/src/attributes/prop.js
-
36js/vendor/jquery/src/attributes/support.js
-
177js/vendor/jquery/src/attributes/val.js
-
232js/vendor/jquery/src/callbacks.js
-
494js/vendor/jquery/src/core.js
-
65js/vendor/jquery/src/core/access.js
-
134js/vendor/jquery/src/core/init.js
-
41js/vendor/jquery/src/core/parseHTML.js
-
103js/vendor/jquery/src/core/ready.js
-
5js/vendor/jquery/src/core/var/rsingleTag.js
-
502js/vendor/jquery/src/css.js
-
24js/vendor/jquery/src/css/addGetHookIf.js
-
65js/vendor/jquery/src/css/adjustCSS.js
-
60js/vendor/jquery/src/css/curCSS.js
-
72js/vendor/jquery/src/css/defaultDisplay.js
-
18js/vendor/jquery/src/css/hiddenVisibleSelectors.js
-
48js/vendor/jquery/src/css/showHide.js
-
121js/vendor/jquery/src/css/support.js
-
3js/vendor/jquery/src/css/var/cssExpand.js
-
15js/vendor/jquery/src/css/var/getStyles.js
-
16js/vendor/jquery/src/css/var/isHidden.js
-
3js/vendor/jquery/src/css/var/rmargin.js
-
5js/vendor/jquery/src/css/var/rnumnonpx.js
-
24js/vendor/jquery/src/css/var/swap.js
-
187js/vendor/jquery/src/data.js
-
200js/vendor/jquery/src/data/Data.js
-
18js/vendor/jquery/src/data/var/acceptData.js
-
5js/vendor/jquery/src/data/var/dataPriv.js
-
5js/vendor/jquery/src/data/var/dataUser.js
-
158js/vendor/jquery/src/deferred.js
-
32js/vendor/jquery/src/deprecated.js
-
54js/vendor/jquery/src/dimensions.js
-
629js/vendor/jquery/src/effects.js
-
121js/vendor/jquery/src/effects/Tween.js
-
13js/vendor/jquery/src/effects/animatedSelector.js
-
711js/vendor/jquery/src/event.js
-
20js/vendor/jquery/src/event/ajax.js
-
27js/vendor/jquery/src/event/alias.js
-
53js/vendor/jquery/src/event/focusin.js
-
9js/vendor/jquery/src/event/support.js
-
183js/vendor/jquery/src/event/trigger.js
-
24js/vendor/jquery/src/exports/amd.js
-
26js/vendor/jquery/src/exports/global.js
-
44js/vendor/jquery/src/intro.js
-
37js/vendor/jquery/src/jquery.js
-
481js/vendor/jquery/src/manipulation.js
-
20js/vendor/jquery/src/manipulation/_evalUrl.js
-
102js/vendor/jquery/src/manipulation/buildFragment.js
-
21js/vendor/jquery/src/manipulation/getAll.js
-
20js/vendor/jquery/src/manipulation/setGlobalEval.js
-
33js/vendor/jquery/src/manipulation/support.js
-
3js/vendor/jquery/src/manipulation/var/rcheckableType.js
-
3js/vendor/jquery/src/manipulation/var/rscriptType.js
-
3js/vendor/jquery/src/manipulation/var/rtagName.js
-
27js/vendor/jquery/src/manipulation/wrapMap.js
-
218js/vendor/jquery/src/offset.js
-
2js/vendor/jquery/src/outro.js
-
143js/vendor/jquery/src/queue.js
-
22js/vendor/jquery/src/queue/delay.js
-
211js/vendor/jquery/src/selector-native.js
-
14js/vendor/jquery/src/selector-sizzle.js
-
1js/vendor/jquery/src/selector.js
-
125js/vendor/jquery/src/serialize.js
-
175js/vendor/jquery/src/traversing.js
-
100js/vendor/jquery/src/traversing/findFilter.js
-
20js/vendor/jquery/src/traversing/var/dir.js
-
6js/vendor/jquery/src/traversing/var/rneedsContext.js
-
15js/vendor/jquery/src/traversing/var/siblings.js
@ -1,2 +1,4 @@ |
|||
js/simplewebrtc.js |
|||
js/vendor/* |
|||
js/tests/* |
|||
karma.conf.js |
|||
@ -0,0 +1,5 @@ |
|||
# Exclude npm deps |
|||
node_modules |
|||
|
|||
# Karma/jasmine coverage data |
|||
coverage |
|||
@ -0,0 +1,25 @@ |
|||
/** |
|||
* @author Christoph Wurst <christoph@winzerhof-wurst.at> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
* |
|||
*/ |
|||
|
|||
describe('nothing', function() { |
|||
it('never fails', function() { |
|||
expect('true words').toBe('true words'); |
|||
}); |
|||
}); |
|||
@ -0,0 +1,21 @@ |
|||
/** |
|||
* @author Christoph Wurst <christoph@winzerhof-wurst.at> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
* |
|||
*/ |
|||
|
|||
var OCA = {}; |
|||
@ -0,0 +1,25 @@ |
|||
{ |
|||
"name": "jquery", |
|||
"main": "dist/jquery.js", |
|||
"license": "MIT", |
|||
"ignore": [ |
|||
"package.json" |
|||
], |
|||
"keywords": [ |
|||
"jquery", |
|||
"javascript", |
|||
"browser", |
|||
"library" |
|||
], |
|||
"homepage": "https://github.com/jquery/jquery-dist", |
|||
"version": "2.2.4", |
|||
"_release": "2.2.4", |
|||
"_resolution": { |
|||
"type": "version", |
|||
"tag": "2.2.4", |
|||
"commit": "c0185ab7c75aab88762c5aae780b9d83b80eda72" |
|||
}, |
|||
"_source": "https://github.com/jquery/jquery-dist.git", |
|||
"_target": "^2.0", |
|||
"_originalSource": "jquery" |
|||
} |
|||
@ -0,0 +1,278 @@ |
|||
Authors ordered by first contribution. |
|||
|
|||
John Resig <jeresig@gmail.com> |
|||
Gilles van den Hoven <gilles0181@gmail.com> |
|||
Michael Geary <mike@geary.com> |
|||
Stefan Petre <stefan.petre@gmail.com> |
|||
Yehuda Katz <wycats@gmail.com> |
|||
Corey Jewett <cj@syntheticplayground.com> |
|||
Klaus Hartl <klaus.hartl@gmail.com> |
|||
Franck Marcia <franck.marcia@gmail.com> |
|||
Jörn Zaefferer <joern.zaefferer@gmail.com> |
|||
Paul Bakaus <paul.bakaus@gmail.com> |
|||
Brandon Aaron <brandon.aaron@gmail.com> |
|||
Mike Alsup <malsup@gmail.com> |
|||
Dave Methvin <dave.methvin@gmail.com> |
|||
Ed Engelhardt <edengelhardt@gmail.com> |
|||
Sean Catchpole <littlecooldude@gmail.com> |
|||
Paul Mclanahan <pmclanahan@gmail.com> |
|||
David Serduke <davidserduke@gmail.com> |
|||
Richard D. Worth <rdworth@gmail.com> |
|||
Scott González <scott.gonzalez@gmail.com> |
|||
Ariel Flesler <aflesler@gmail.com> |
|||
Jon Evans <jon@springyweb.com> |
|||
TJ Holowaychuk <tj@vision-media.ca> |
|||
Michael Bensoussan <mickey@seesmic.com> |
|||
Robert Katić <robert.katic@gmail.com> |
|||
Louis-Rémi Babé <lrbabe@gmail.com> |
|||
Earle Castledine <mrspeaker@gmail.com> |
|||
Damian Janowski <damian.janowski@gmail.com> |
|||
Rich Dougherty <rich@rd.gen.nz> |
|||
Kim Dalsgaard <kim@kimdalsgaard.com> |
|||
Andrea Giammarchi <andrea.giammarchi@gmail.com> |
|||
Mark Gibson <jollytoad@gmail.com> |
|||
Karl Swedberg <kswedberg@gmail.com> |
|||
Justin Meyer <justinbmeyer@gmail.com> |
|||
Ben Alman <cowboy@rj3.net> |
|||
James Padolsey <cla@padolsey.net> |
|||
David Petersen <public@petersendidit.com> |
|||
Batiste Bieler <batiste.bieler@gmail.com> |
|||
Alexander Farkas <info@corrupt-system.de> |
|||
Rick Waldron <waldron.rick@gmail.com> |
|||
Filipe Fortes <filipe@fortes.com> |
|||
Neeraj Singh <neerajdotname@gmail.com> |
|||
Paul Irish <paul.irish@gmail.com> |
|||
Iraê Carvalho <irae@irae.pro.br> |
|||
Matt Curry <matt@pseudocoder.com> |
|||
Michael Monteleone <michael@michaelmonteleone.net> |
|||
Noah Sloan <noah.sloan@gmail.com> |
|||
Tom Viner <github@viner.tv> |
|||
Douglas Neiner <doug@dougneiner.com> |
|||
Adam J. Sontag <ajpiano@ajpiano.com> |
|||
Dave Reed <dareed@microsoft.com> |
|||
Ralph Whitbeck <ralph.whitbeck@gmail.com> |
|||
Carl Fürstenberg <azatoth@gmail.com> |
|||
Jacob Wright <jacwright@gmail.com> |
|||
J. Ryan Stinnett <jryans@gmail.com> |
|||
unknown <Igen005@.upcorp.ad.uprr.com> |
|||
temp01 <temp01irc@gmail.com> |
|||
Heungsub Lee <h@subl.ee> |
|||
Colin Snover <github.com@zetafleet.com> |
|||
Ryan W Tenney <ryan@10e.us> |
|||
Pinhook <contact@pinhooklabs.com> |
|||
Ron Otten <r.j.g.otten@gmail.com> |
|||
Jephte Clain <Jephte.Clain@univ-reunion.fr> |
|||
Anton Matzneller <obhvsbypqghgc@gmail.com> |
|||
Alex Sexton <AlexSexton@gmail.com> |
|||
Dan Heberden <danheberden@gmail.com> |
|||
Henri Wiechers <hwiechers@gmail.com> |
|||
Russell Holbrook <russell.holbrook@patch.com> |
|||
Julian Aubourg <aubourg.julian@gmail.com> |
|||
Gianni Alessandro Chiappetta <gianni@runlevel6.org> |
|||
Scott Jehl <scottjehl@gmail.com> |
|||
James Burke <jrburke@gmail.com> |
|||
Jonas Pfenniger <jonas@pfenniger.name> |
|||
Xavi Ramirez <xavi.rmz@gmail.com> |
|||
Jared Grippe <jared@deadlyicon.com> |
|||
Sylvester Keil <sylvester@keil.or.at> |
|||
Brandon Sterne <bsterne@mozilla.com> |
|||
Mathias Bynens <mathias@qiwi.be> |
|||
Timmy Willison <timmywillisn@gmail.com> |
|||
Corey Frang <gnarf37@gmail.com> |
|||
Digitalxero <digitalxero> |
|||
Anton Kovalyov <anton@kovalyov.net> |
|||
David Murdoch <david@davidmurdoch.com> |
|||
Josh Varner <josh.varner@gmail.com> |
|||
Charles McNulty <cmcnulty@kznf.com> |
|||
Jordan Boesch <jboesch26@gmail.com> |
|||
Jess Thrysoee <jess@thrysoee.dk> |
|||
Michael Murray <m@murz.net> |
|||
Lee Carpenter <elcarpie@gmail.com> |
|||
Alexis Abril <me@alexisabril.com> |
|||
Rob Morgan <robbym@gmail.com> |
|||
John Firebaugh <john_firebaugh@bigfix.com> |
|||
Sam Bisbee <sam@sbisbee.com> |
|||
Gilmore Davidson <gilmoreorless@gmail.com> |
|||
Brian Brennan <me@brianlovesthings.com> |
|||
Xavier Montillet <xavierm02.net@gmail.com> |
|||
Daniel Pihlstrom <sciolist.se@gmail.com> |
|||
Sahab Yazdani <sahab.yazdani+github@gmail.com> |
|||
avaly <github-com@agachi.name> |
|||
Scott Hughes <hi@scott-hughes.me> |
|||
Mike Sherov <mike.sherov@gmail.com> |
|||
Greg Hazel <ghazel@gmail.com> |
|||
Schalk Neethling <schalk@ossreleasefeed.com> |
|||
Denis Knauf <Denis.Knauf@gmail.com> |
|||
Timo Tijhof <krinklemail@gmail.com> |
|||
Steen Nielsen <swinedk@gmail.com> |
|||
Anton Ryzhov <anton@ryzhov.me> |
|||
Shi Chuan <shichuanr@gmail.com> |
|||
Berker Peksag <berker.peksag@gmail.com> |
|||
Toby Brain <tobyb@freshview.com> |
|||
Matt Mueller <mattmuelle@gmail.com> |
|||
Justin <drakefjustin@gmail.com> |
|||
Daniel Herman <daniel.c.herman@gmail.com> |
|||
Oleg Gaidarenko <markelog@gmail.com> |
|||
Richard Gibson <richard.gibson@gmail.com> |
|||
Rafaël Blais Masson <rafbmasson@gmail.com> |
|||
cmc3cn <59194618@qq.com> |
|||
Joe Presbrey <presbrey@gmail.com> |
|||
Sindre Sorhus <sindresorhus@gmail.com> |
|||
Arne de Bree <arne@bukkie.nl> |
|||
Vladislav Zarakovsky <vlad.zar@gmail.com> |
|||
Andrew E Monat <amonat@gmail.com> |
|||
Oskari <admin@o-programs.com> |
|||
Joao Henrique de Andrade Bruni <joaohbruni@yahoo.com.br> |
|||
tsinha <tsinha@Anthonys-MacBook-Pro.local> |
|||
Matt Farmer <matt@frmr.me> |
|||
Trey Hunner <treyhunner@gmail.com> |
|||
Jason Moon <jmoon@socialcast.com> |
|||
Jeffery To <jeffery.to@gmail.com> |
|||
Kris Borchers <kris.borchers@gmail.com> |
|||
Vladimir Zhuravlev <private.face@gmail.com> |
|||
Jacob Thornton <jacobthornton@gmail.com> |
|||
Chad Killingsworth <chadkillingsworth@missouristate.edu> |
|||
Nowres Rafid <nowres.rafed@gmail.com> |
|||
David Benjamin <davidben@mit.edu> |
|||
Uri Gilad <antishok@gmail.com> |
|||
Chris Faulkner <thefaulkner@gmail.com> |
|||
Elijah Manor <elijah.manor@gmail.com> |
|||
Daniel Chatfield <chatfielddaniel@gmail.com> |
|||
Nikita Govorov <nikita.govorov@gmail.com> |
|||
Wesley Walser <waw325@gmail.com> |
|||
Mike Pennisi <mike@mikepennisi.com> |
|||
Markus Staab <markus.staab@redaxo.de> |
|||
Dave Riddle <david@joyvuu.com> |
|||
Callum Macrae <callum@lynxphp.com> |
|||
Benjamin Truyman <bentruyman@gmail.com> |
|||
James Huston <james@jameshuston.net> |
|||
Erick Ruiz de Chávez <erickrdch@gmail.com> |
|||
David Bonner <dbonner@cogolabs.com> |
|||
Akintayo Akinwunmi <aakinwunmi@judge.com> |
|||
MORGAN <morgan@morgangraphics.com> |
|||
Ismail Khair <ismail.khair@gmail.com> |
|||
Carl Danley <carldanley@gmail.com> |
|||
Mike Petrovich <michael.c.petrovich@gmail.com> |
|||
Greg Lavallee <greglavallee@wapolabs.com> |
|||
Daniel Gálvez <dgalvez@editablething.com> |
|||
Sai Lung Wong <sai.wong@huffingtonpost.com> |
|||
Tom H Fuertes <TomFuertes@gmail.com> |
|||
Roland Eckl <eckl.roland@googlemail.com> |
|||
Jay Merrifield <fracmak@gmail.com> |
|||
Allen J Schmidt Jr <cobrasoft@gmail.com> |
|||
Jonathan Sampson <jjdsampson@gmail.com> |
|||
Marcel Greter <marcel.greter@ocbnet.ch> |
|||
Matthias Jäggli <matthias.jaeggli@gmail.com> |
|||
David Fox <dfoxinator@gmail.com> |
|||
Yiming He <yiminghe@gmail.com> |
|||
Devin Cooper <cooper.semantics@gmail.com> |
|||
Paul Ramos <paul.b.ramos@gmail.com> |
|||
Rod Vagg <rod@vagg.org> |
|||
Bennett Sorbo <bsorbo@gmail.com> |
|||
Sebastian Burkhard <sebi.burkhard@gmail.com> |
|||
Zachary Adam Kaplan <razic@viralkitty.com> |
|||
nanto_vi <nanto@moon.email.ne.jp> |
|||
nanto <nanto@moon.email.ne.jp> |
|||
Danil Somsikov <danilasomsikov@gmail.com> |
|||
Ryunosuke SATO <tricknotes.rs@gmail.com> |
|||
Jean Boussier <jean.boussier@gmail.com> |
|||
Adam Coulombe <me@adam.co> |
|||
Andrew Plummer <plummer.andrew@gmail.com> |
|||
Mark Raddatz <mraddatz@gmail.com> |
|||
Isaac Z. Schlueter <i@izs.me> |
|||
Karl Sieburg <ksieburg@yahoo.com> |
|||
Pascal Borreli <pascal@borreli.com> |
|||
Nguyen Phuc Lam <ruado1987@gmail.com> |
|||
Dmitry Gusev <dmitry.gusev@gmail.com> |
|||
Michał Gołębiowski <m.goleb@gmail.com> |
|||
Li Xudong <istonelee@gmail.com> |
|||
Steven Benner <admin@stevenbenner.com> |
|||
Tom H Fuertes <tomfuertes@gmail.com> |
|||
Renato Oliveira dos Santos <ros3@cin.ufpe.br> |
|||
ros3cin <ros3@cin.ufpe.br> |
|||
Jason Bedard <jason+jquery@jbedard.ca> |
|||
Kyle Robinson Young <kyle@dontkry.com> |
|||
Chris Talkington <chris@talkingtontech.com> |
|||
Eddie Monge <eddie@eddiemonge.com> |
|||
Terry Jones <terry@jon.es> |
|||
Jason Merino <jasonmerino@gmail.com> |
|||
Jeremy Dunck <jdunck@gmail.com> |
|||
Chris Price <price.c@gmail.com> |
|||
Guy Bedford <guybedford@gmail.com> |
|||
Amey Sakhadeo <me@ameyms.com> |
|||
Mike Sidorov <mikes.ekb@gmail.com> |
|||
Anthony Ryan <anthonyryan1@gmail.com> |
|||
Dominik D. Geyer <dominik.geyer@gmail.com> |
|||
George Kats <katsgeorgeek@gmail.com> |
|||
Lihan Li <frankieteardrop@gmail.com> |
|||
Ronny Springer <springer.ronny@gmail.com> |
|||
Chris Antaki <ChrisAntaki@gmail.com> |
|||
Marian Sollmann <marian.sollmann@cargomedia.ch> |
|||
njhamann <njhamann@gmail.com> |
|||
Ilya Kantor <iliakan@gmail.com> |
|||
David Hong <d.hong@me.com> |
|||
John Paul <john@johnkpaul.com> |
|||
Jakob Stoeck <jakob@pokermania.de> |
|||
Christopher Jones <chris@cjqed.com> |
|||
Forbes Lindesay <forbes@lindesay.co.uk> |
|||
S. Andrew Sheppard <andrew@wq.io> |
|||
Leonardo Balter <leonardo.balter@gmail.com> |
|||
Roman Reiß <me@silverwind.io> |
|||
Benjy Cui <benjytrys@gmail.com> |
|||
Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> |
|||
John Hoven <hovenj@gmail.com> |
|||
Philip Jägenstedt <philip@foolip.org> |
|||
Christian Kosmowski <ksmwsk@gmail.com> |
|||
Liang Peng <poppinlp@gmail.com> |
|||
TJ VanToll <tj.vantoll@gmail.com> |
|||
Senya Pugach <upisfree@outlook.com> |
|||
Aurelio De Rosa <aurelioderosa@gmail.com> |
|||
Nazar Mokrynskyi <nazar@mokrynskyi.com> |
|||
Amit Merchant <bullredeyes@gmail.com> |
|||
Jason Bedard <jason+github@jbedard.ca> |
|||
Arthur Verschaeve <contact@arthurverschaeve.be> |
|||
Dan Hart <danhart@notonthehighstreet.com> |
|||
Bin Xin <rhyzix@gmail.com> |
|||
David Corbacho <davidcorbacho@gmail.com> |
|||
Veaceslav Grimalschi <grimalschi@yandex.ru> |
|||
Daniel Husar <dano.husar@gmail.com> |
|||
Frederic Hemberger <mail@frederic-hemberger.de> |
|||
Ben Toews <mastahyeti@gmail.com> |
|||
Aditya Raghavan <araghavan3@gmail.com> |
|||
Victor Homyakov <vkhomyackov@gmail.com> |
|||
Shivaji Varma <contact@shivajivarma.com> |
|||
Nicolas HENRY <icewil@gmail.com> |
|||
Anne-Gaelle Colom <coloma@westminster.ac.uk> |
|||
George Mauer <gmauer@gmail.com> |
|||
Leonardo Braga <leonardo.braga@gmail.com> |
|||
Stephen Edgar <stephen@netweb.com.au> |
|||
Thomas Tortorini <thomastortorini@gmail.com> |
|||
Winston Howes <winstonhowes@gmail.com> |
|||
Jon Hester <jon.d.hester@gmail.com> |
|||
Alexander O'Mara <me@alexomara.com> |
|||
Bastian Buchholz <buchholz.bastian@googlemail.com> |
|||
Arthur Stolyar <nekr.fabula@gmail.com> |
|||
Calvin Metcalf <calvin.metcalf@gmail.com> |
|||
Mu Haibao <mhbseal@163.com> |
|||
Richard McDaniel <rm0026@uah.edu> |
|||
Chris Rebert <github@rebertia.com> |
|||
Gabriel Schulhof <gabriel.schulhof@intel.com> |
|||
Gilad Peleg <giladp007@gmail.com> |
|||
Martin Naumann <martin@geekonaut.de> |
|||
Marek Lewandowski <m.lewandowski@cksource.com> |
|||
Bruno Pérel <brunoperel@gmail.com> |
|||
Reed Loden <reed@reedloden.com> |
|||
Daniel Nill <daniellnill@gmail.com> |
|||
Yongwoo Jeon <yongwoo.jeon@navercorp.com> |
|||
Sean Henderson <seanh.za@gmail.com> |
|||
Richard Kraaijenhagen <stdin+git@riichard.com> |
|||
Connor Atherton <c.liam.atherton@gmail.com> |
|||
Gary Ye <garysye@gmail.com> |
|||
Christian Grete <webmaster@christiangrete.com> |
|||
Liza Ramo <liza.h.ramo@gmail.com> |
|||
Julian Alexander Murillo <julian.alexander.murillo@gmail.com> |
|||
Joelle Fleurantin <joasqueeniebee@gmail.com> |
|||
Jun Sun <klsforever@gmail.com> |
|||
Devin Wilson <dwilson6.github@gmail.com> |
|||
Todor Prikumov <tono_pr@abv.bg> |
|||
Zack Hall <zackhall@outlook.com> |
|||
@ -0,0 +1,36 @@ |
|||
Copyright jQuery Foundation and other contributors, https://jquery.org/ |
|||
|
|||
This software consists of voluntary contributions made by many |
|||
individuals. For exact contribution history, see the revision history |
|||
available at https://github.com/jquery/jquery |
|||
|
|||
The following license applies to all parts of this software except as |
|||
documented below: |
|||
|
|||
==== |
|||
|
|||
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. |
|||
|
|||
==== |
|||
|
|||
All files located in the node_modules and external directories are |
|||
externally maintained libraries used by this software which have their |
|||
own licenses; we recommend you read them, as their terms may differ from |
|||
the terms above. |
|||
@ -0,0 +1,65 @@ |
|||
# jQuery |
|||
|
|||
> jQuery is a fast, small, and feature-rich JavaScript library. |
|||
|
|||
For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/). |
|||
For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery). |
|||
|
|||
## Including jQuery |
|||
|
|||
Below are some of the most common ways to include jQuery. |
|||
|
|||
### Browser |
|||
|
|||
#### Script tag |
|||
|
|||
```html |
|||
<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script> |
|||
``` |
|||
|
|||
#### Babel |
|||
|
|||
[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively. |
|||
|
|||
```js |
|||
import $ from "jquery"; |
|||
``` |
|||
|
|||
#### Browserify/Webpack |
|||
|
|||
There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this... |
|||
|
|||
```js |
|||
var $ = require("jquery"); |
|||
``` |
|||
|
|||
#### AMD (Asynchronous Module Definition) |
|||
|
|||
AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html). |
|||
|
|||
```js |
|||
define(["jquery"], function($) { |
|||
|
|||
}); |
|||
``` |
|||
|
|||
### Node |
|||
|
|||
To include jQuery in [Node](nodejs.org), first install with npm. |
|||
|
|||
```sh |
|||
npm install jquery |
|||
``` |
|||
|
|||
For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes. |
|||
|
|||
```js |
|||
require("jsdom").env("", function(err, window) { |
|||
if (err) { |
|||
console.error(err); |
|||
return; |
|||
} |
|||
|
|||
var $ = require("jquery")(window); |
|||
}); |
|||
``` |
|||
@ -0,0 +1,14 @@ |
|||
{ |
|||
"name": "jquery", |
|||
"main": "dist/jquery.js", |
|||
"license": "MIT", |
|||
"ignore": [ |
|||
"package.json" |
|||
], |
|||
"keywords": [ |
|||
"jquery", |
|||
"javascript", |
|||
"browser", |
|||
"library" |
|||
] |
|||
} |
|||
9814
js/vendor/jquery/dist/jquery.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
4
js/vendor/jquery/dist/jquery.min.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1
js/vendor/jquery/dist/jquery.min.map
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,36 @@ |
|||
Copyright jQuery Foundation and other contributors, https://jquery.org/ |
|||
|
|||
This software consists of voluntary contributions made by many |
|||
individuals. For exact contribution history, see the revision history |
|||
available at https://github.com/jquery/sizzle |
|||
|
|||
The following license applies to all parts of this software except as |
|||
documented below: |
|||
|
|||
==== |
|||
|
|||
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. |
|||
|
|||
==== |
|||
|
|||
All files located in the node_modules and external directories are |
|||
externally maintained libraries used by this software which have their |
|||
own licenses; we recommend you read them, as their terms may differ from |
|||
the terms above. |
|||
2143
js/vendor/jquery/external/sizzle/dist/sizzle.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
3
js/vendor/jquery/external/sizzle/dist/sizzle.min.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1
js/vendor/jquery/external/sizzle/dist/sizzle.min.map
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,29 @@ |
|||
{ |
|||
"boss": true, |
|||
"curly": true, |
|||
"eqeqeq": true, |
|||
"eqnull": true, |
|||
"expr": true, |
|||
"immed": true, |
|||
"noarg": true, |
|||
"quotmark": "double", |
|||
"undef": true, |
|||
"unused": true, |
|||
|
|||
"sub": true, |
|||
|
|||
// Support: IE < 10, Android < 4.1 |
|||
// The above browsers are failing a lot of tests in the ES5 |
|||
// test suite at http://test262.ecmascript.org. |
|||
"es3": true, |
|||
|
|||
"globals": { |
|||
"window": true, |
|||
"JSON": false, |
|||
|
|||
"jQuery": true, |
|||
"define": true, |
|||
"module": true, |
|||
"noGlobal": true |
|||
} |
|||
} |
|||
@ -0,0 +1,845 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/document", |
|||
"./var/rnotwhite", |
|||
"./ajax/var/location", |
|||
"./ajax/var/nonce", |
|||
"./ajax/var/rquery", |
|||
|
|||
"./core/init", |
|||
"./ajax/parseJSON", |
|||
"./ajax/parseXML", |
|||
"./event/trigger", |
|||
"./deferred" |
|||
], function( jQuery, document, rnotwhite, location, nonce, rquery ) { |
|||
|
|||
var |
|||
rhash = /#.*$/, |
|||
rts = /([?&])_=[^&]*/, |
|||
rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, |
|||
|
|||
// #7653, #8125, #8152: local protocol detection
|
|||
rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, |
|||
rnoContent = /^(?:GET|HEAD)$/, |
|||
rprotocol = /^\/\//, |
|||
|
|||
/* Prefilters |
|||
* 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) |
|||
* 2) These are called: |
|||
* - BEFORE asking for a transport |
|||
* - AFTER param serialization (s.data is a string if s.processData is true) |
|||
* 3) key is the dataType |
|||
* 4) the catchall symbol "*" can be used |
|||
* 5) execution will start with transport dataType and THEN continue down to "*" if needed |
|||
*/ |
|||
prefilters = {}, |
|||
|
|||
/* Transports bindings |
|||
* 1) key is the dataType |
|||
* 2) the catchall symbol "*" can be used |
|||
* 3) selection will start with transport dataType and THEN go to "*" if needed |
|||
*/ |
|||
transports = {}, |
|||
|
|||
// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
|
|||
allTypes = "*/".concat( "*" ), |
|||
|
|||
// Anchor tag for parsing the document origin
|
|||
originAnchor = document.createElement( "a" ); |
|||
originAnchor.href = location.href; |
|||
|
|||
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
|
|||
function addToPrefiltersOrTransports( structure ) { |
|||
|
|||
// dataTypeExpression is optional and defaults to "*"
|
|||
return function( dataTypeExpression, func ) { |
|||
|
|||
if ( typeof dataTypeExpression !== "string" ) { |
|||
func = dataTypeExpression; |
|||
dataTypeExpression = "*"; |
|||
} |
|||
|
|||
var dataType, |
|||
i = 0, |
|||
dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; |
|||
|
|||
if ( jQuery.isFunction( func ) ) { |
|||
|
|||
// For each dataType in the dataTypeExpression
|
|||
while ( ( dataType = dataTypes[ i++ ] ) ) { |
|||
|
|||
// Prepend if requested
|
|||
if ( dataType[ 0 ] === "+" ) { |
|||
dataType = dataType.slice( 1 ) || "*"; |
|||
( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); |
|||
|
|||
// Otherwise append
|
|||
} else { |
|||
( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
} |
|||
|
|||
// Base inspection function for prefilters and transports
|
|||
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { |
|||
|
|||
var inspected = {}, |
|||
seekingTransport = ( structure === transports ); |
|||
|
|||
function inspect( dataType ) { |
|||
var selected; |
|||
inspected[ dataType ] = true; |
|||
jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { |
|||
var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); |
|||
if ( typeof dataTypeOrTransport === "string" && |
|||
!seekingTransport && !inspected[ dataTypeOrTransport ] ) { |
|||
|
|||
options.dataTypes.unshift( dataTypeOrTransport ); |
|||
inspect( dataTypeOrTransport ); |
|||
return false; |
|||
} else if ( seekingTransport ) { |
|||
return !( selected = dataTypeOrTransport ); |
|||
} |
|||
} ); |
|||
return selected; |
|||
} |
|||
|
|||
return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); |
|||
} |
|||
|
|||
// A special extend for ajax options
|
|||
// that takes "flat" options (not to be deep extended)
|
|||
// Fixes #9887
|
|||
function ajaxExtend( target, src ) { |
|||
var key, deep, |
|||
flatOptions = jQuery.ajaxSettings.flatOptions || {}; |
|||
|
|||
for ( key in src ) { |
|||
if ( src[ key ] !== undefined ) { |
|||
( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; |
|||
} |
|||
} |
|||
if ( deep ) { |
|||
jQuery.extend( true, target, deep ); |
|||
} |
|||
|
|||
return target; |
|||
} |
|||
|
|||
/* Handles responses to an ajax request: |
|||
* - finds the right dataType (mediates between content-type and expected dataType) |
|||
* - returns the corresponding response |
|||
*/ |
|||
function ajaxHandleResponses( s, jqXHR, responses ) { |
|||
|
|||
var ct, type, finalDataType, firstDataType, |
|||
contents = s.contents, |
|||
dataTypes = s.dataTypes; |
|||
|
|||
// Remove auto dataType and get content-type in the process
|
|||
while ( dataTypes[ 0 ] === "*" ) { |
|||
dataTypes.shift(); |
|||
if ( ct === undefined ) { |
|||
ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); |
|||
} |
|||
} |
|||
|
|||
// Check if we're dealing with a known content-type
|
|||
if ( ct ) { |
|||
for ( type in contents ) { |
|||
if ( contents[ type ] && contents[ type ].test( ct ) ) { |
|||
dataTypes.unshift( type ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Check to see if we have a response for the expected dataType
|
|||
if ( dataTypes[ 0 ] in responses ) { |
|||
finalDataType = dataTypes[ 0 ]; |
|||
} else { |
|||
|
|||
// Try convertible dataTypes
|
|||
for ( type in responses ) { |
|||
if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { |
|||
finalDataType = type; |
|||
break; |
|||
} |
|||
if ( !firstDataType ) { |
|||
firstDataType = type; |
|||
} |
|||
} |
|||
|
|||
// Or just use first one
|
|||
finalDataType = finalDataType || firstDataType; |
|||
} |
|||
|
|||
// If we found a dataType
|
|||
// We add the dataType to the list if needed
|
|||
// and return the corresponding response
|
|||
if ( finalDataType ) { |
|||
if ( finalDataType !== dataTypes[ 0 ] ) { |
|||
dataTypes.unshift( finalDataType ); |
|||
} |
|||
return responses[ finalDataType ]; |
|||
} |
|||
} |
|||
|
|||
/* Chain conversions given the request and the original response |
|||
* Also sets the responseXXX fields on the jqXHR instance |
|||
*/ |
|||
function ajaxConvert( s, response, jqXHR, isSuccess ) { |
|||
var conv2, current, conv, tmp, prev, |
|||
converters = {}, |
|||
|
|||
// Work with a copy of dataTypes in case we need to modify it for conversion
|
|||
dataTypes = s.dataTypes.slice(); |
|||
|
|||
// Create converters map with lowercased keys
|
|||
if ( dataTypes[ 1 ] ) { |
|||
for ( conv in s.converters ) { |
|||
converters[ conv.toLowerCase() ] = s.converters[ conv ]; |
|||
} |
|||
} |
|||
|
|||
current = dataTypes.shift(); |
|||
|
|||
// Convert to each sequential dataType
|
|||
while ( current ) { |
|||
|
|||
if ( s.responseFields[ current ] ) { |
|||
jqXHR[ s.responseFields[ current ] ] = response; |
|||
} |
|||
|
|||
// Apply the dataFilter if provided
|
|||
if ( !prev && isSuccess && s.dataFilter ) { |
|||
response = s.dataFilter( response, s.dataType ); |
|||
} |
|||
|
|||
prev = current; |
|||
current = dataTypes.shift(); |
|||
|
|||
if ( current ) { |
|||
|
|||
// There's only work to do if current dataType is non-auto
|
|||
if ( current === "*" ) { |
|||
|
|||
current = prev; |
|||
|
|||
// Convert response if prev dataType is non-auto and differs from current
|
|||
} else if ( prev !== "*" && prev !== current ) { |
|||
|
|||
// Seek a direct converter
|
|||
conv = converters[ prev + " " + current ] || converters[ "* " + current ]; |
|||
|
|||
// If none found, seek a pair
|
|||
if ( !conv ) { |
|||
for ( conv2 in converters ) { |
|||
|
|||
// If conv2 outputs current
|
|||
tmp = conv2.split( " " ); |
|||
if ( tmp[ 1 ] === current ) { |
|||
|
|||
// If prev can be converted to accepted input
|
|||
conv = converters[ prev + " " + tmp[ 0 ] ] || |
|||
converters[ "* " + tmp[ 0 ] ]; |
|||
if ( conv ) { |
|||
|
|||
// Condense equivalence converters
|
|||
if ( conv === true ) { |
|||
conv = converters[ conv2 ]; |
|||
|
|||
// Otherwise, insert the intermediate dataType
|
|||
} else if ( converters[ conv2 ] !== true ) { |
|||
current = tmp[ 0 ]; |
|||
dataTypes.unshift( tmp[ 1 ] ); |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Apply converter (if not an equivalence)
|
|||
if ( conv !== true ) { |
|||
|
|||
// Unless errors are allowed to bubble, catch and return them
|
|||
if ( conv && s.throws ) { |
|||
response = conv( response ); |
|||
} else { |
|||
try { |
|||
response = conv( response ); |
|||
} catch ( e ) { |
|||
return { |
|||
state: "parsererror", |
|||
error: conv ? e : "No conversion from " + prev + " to " + current |
|||
}; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
return { state: "success", data: response }; |
|||
} |
|||
|
|||
jQuery.extend( { |
|||
|
|||
// Counter for holding the number of active queries
|
|||
active: 0, |
|||
|
|||
// Last-Modified header cache for next request
|
|||
lastModified: {}, |
|||
etag: {}, |
|||
|
|||
ajaxSettings: { |
|||
url: location.href, |
|||
type: "GET", |
|||
isLocal: rlocalProtocol.test( location.protocol ), |
|||
global: true, |
|||
processData: true, |
|||
async: true, |
|||
contentType: "application/x-www-form-urlencoded; charset=UTF-8", |
|||
/* |
|||
timeout: 0, |
|||
data: null, |
|||
dataType: null, |
|||
username: null, |
|||
password: null, |
|||
cache: null, |
|||
throws: false, |
|||
traditional: false, |
|||
headers: {}, |
|||
*/ |
|||
|
|||
accepts: { |
|||
"*": allTypes, |
|||
text: "text/plain", |
|||
html: "text/html", |
|||
xml: "application/xml, text/xml", |
|||
json: "application/json, text/javascript" |
|||
}, |
|||
|
|||
contents: { |
|||
xml: /\bxml\b/, |
|||
html: /\bhtml/, |
|||
json: /\bjson\b/ |
|||
}, |
|||
|
|||
responseFields: { |
|||
xml: "responseXML", |
|||
text: "responseText", |
|||
json: "responseJSON" |
|||
}, |
|||
|
|||
// Data converters
|
|||
// Keys separate source (or catchall "*") and destination types with a single space
|
|||
converters: { |
|||
|
|||
// Convert anything to text
|
|||
"* text": String, |
|||
|
|||
// Text to html (true = no transformation)
|
|||
"text html": true, |
|||
|
|||
// Evaluate text as a json expression
|
|||
"text json": jQuery.parseJSON, |
|||
|
|||
// Parse text as xml
|
|||
"text xml": jQuery.parseXML |
|||
}, |
|||
|
|||
// For options that shouldn't be deep extended:
|
|||
// you can add your own custom options here if
|
|||
// and when you create one that shouldn't be
|
|||
// deep extended (see ajaxExtend)
|
|||
flatOptions: { |
|||
url: true, |
|||
context: true |
|||
} |
|||
}, |
|||
|
|||
// Creates a full fledged settings object into target
|
|||
// with both ajaxSettings and settings fields.
|
|||
// If target is omitted, writes into ajaxSettings.
|
|||
ajaxSetup: function( target, settings ) { |
|||
return settings ? |
|||
|
|||
// Building a settings object
|
|||
ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : |
|||
|
|||
// Extending ajaxSettings
|
|||
ajaxExtend( jQuery.ajaxSettings, target ); |
|||
}, |
|||
|
|||
ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), |
|||
ajaxTransport: addToPrefiltersOrTransports( transports ), |
|||
|
|||
// Main method
|
|||
ajax: function( url, options ) { |
|||
|
|||
// If url is an object, simulate pre-1.5 signature
|
|||
if ( typeof url === "object" ) { |
|||
options = url; |
|||
url = undefined; |
|||
} |
|||
|
|||
// Force options to be an object
|
|||
options = options || {}; |
|||
|
|||
var transport, |
|||
|
|||
// URL without anti-cache param
|
|||
cacheURL, |
|||
|
|||
// Response headers
|
|||
responseHeadersString, |
|||
responseHeaders, |
|||
|
|||
// timeout handle
|
|||
timeoutTimer, |
|||
|
|||
// Url cleanup var
|
|||
urlAnchor, |
|||
|
|||
// To know if global events are to be dispatched
|
|||
fireGlobals, |
|||
|
|||
// Loop variable
|
|||
i, |
|||
|
|||
// Create the final options object
|
|||
s = jQuery.ajaxSetup( {}, options ), |
|||
|
|||
// Callbacks context
|
|||
callbackContext = s.context || s, |
|||
|
|||
// Context for global events is callbackContext if it is a DOM node or jQuery collection
|
|||
globalEventContext = s.context && |
|||
( callbackContext.nodeType || callbackContext.jquery ) ? |
|||
jQuery( callbackContext ) : |
|||
jQuery.event, |
|||
|
|||
// Deferreds
|
|||
deferred = jQuery.Deferred(), |
|||
completeDeferred = jQuery.Callbacks( "once memory" ), |
|||
|
|||
// Status-dependent callbacks
|
|||
statusCode = s.statusCode || {}, |
|||
|
|||
// Headers (they are sent all at once)
|
|||
requestHeaders = {}, |
|||
requestHeadersNames = {}, |
|||
|
|||
// The jqXHR state
|
|||
state = 0, |
|||
|
|||
// Default abort message
|
|||
strAbort = "canceled", |
|||
|
|||
// Fake xhr
|
|||
jqXHR = { |
|||
readyState: 0, |
|||
|
|||
// Builds headers hashtable if needed
|
|||
getResponseHeader: function( key ) { |
|||
var match; |
|||
if ( state === 2 ) { |
|||
if ( !responseHeaders ) { |
|||
responseHeaders = {}; |
|||
while ( ( match = rheaders.exec( responseHeadersString ) ) ) { |
|||
responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; |
|||
} |
|||
} |
|||
match = responseHeaders[ key.toLowerCase() ]; |
|||
} |
|||
return match == null ? null : match; |
|||
}, |
|||
|
|||
// Raw string
|
|||
getAllResponseHeaders: function() { |
|||
return state === 2 ? responseHeadersString : null; |
|||
}, |
|||
|
|||
// Caches the header
|
|||
setRequestHeader: function( name, value ) { |
|||
var lname = name.toLowerCase(); |
|||
if ( !state ) { |
|||
name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; |
|||
requestHeaders[ name ] = value; |
|||
} |
|||
return this; |
|||
}, |
|||
|
|||
// Overrides response content-type header
|
|||
overrideMimeType: function( type ) { |
|||
if ( !state ) { |
|||
s.mimeType = type; |
|||
} |
|||
return this; |
|||
}, |
|||
|
|||
// Status-dependent callbacks
|
|||
statusCode: function( map ) { |
|||
var code; |
|||
if ( map ) { |
|||
if ( state < 2 ) { |
|||
for ( code in map ) { |
|||
|
|||
// Lazy-add the new callback in a way that preserves old ones
|
|||
statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; |
|||
} |
|||
} else { |
|||
|
|||
// Execute the appropriate callbacks
|
|||
jqXHR.always( map[ jqXHR.status ] ); |
|||
} |
|||
} |
|||
return this; |
|||
}, |
|||
|
|||
// Cancel the request
|
|||
abort: function( statusText ) { |
|||
var finalText = statusText || strAbort; |
|||
if ( transport ) { |
|||
transport.abort( finalText ); |
|||
} |
|||
done( 0, finalText ); |
|||
return this; |
|||
} |
|||
}; |
|||
|
|||
// Attach deferreds
|
|||
deferred.promise( jqXHR ).complete = completeDeferred.add; |
|||
jqXHR.success = jqXHR.done; |
|||
jqXHR.error = jqXHR.fail; |
|||
|
|||
// Remove hash character (#7531: and string promotion)
|
|||
// Add protocol if not provided (prefilters might expect it)
|
|||
// Handle falsy url in the settings object (#10093: consistency with old signature)
|
|||
// We also use the url parameter if available
|
|||
s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) |
|||
.replace( rprotocol, location.protocol + "//" ); |
|||
|
|||
// Alias method option to type as per ticket #12004
|
|||
s.type = options.method || options.type || s.method || s.type; |
|||
|
|||
// Extract dataTypes list
|
|||
s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; |
|||
|
|||
// A cross-domain request is in order when the origin doesn't match the current origin.
|
|||
if ( s.crossDomain == null ) { |
|||
urlAnchor = document.createElement( "a" ); |
|||
|
|||
// Support: IE8-11+
|
|||
// IE throws exception if url is malformed, e.g. http://example.com:80x/
|
|||
try { |
|||
urlAnchor.href = s.url; |
|||
|
|||
// Support: IE8-11+
|
|||
// Anchor's host property isn't correctly set when s.url is relative
|
|||
urlAnchor.href = urlAnchor.href; |
|||
s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== |
|||
urlAnchor.protocol + "//" + urlAnchor.host; |
|||
} catch ( e ) { |
|||
|
|||
// If there is an error parsing the URL, assume it is crossDomain,
|
|||
// it can be rejected by the transport if it is invalid
|
|||
s.crossDomain = true; |
|||
} |
|||
} |
|||
|
|||
// Convert data if not already a string
|
|||
if ( s.data && s.processData && typeof s.data !== "string" ) { |
|||
s.data = jQuery.param( s.data, s.traditional ); |
|||
} |
|||
|
|||
// Apply prefilters
|
|||
inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); |
|||
|
|||
// If request was aborted inside a prefilter, stop there
|
|||
if ( state === 2 ) { |
|||
return jqXHR; |
|||
} |
|||
|
|||
// We can fire global events as of now if asked to
|
|||
// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
|
|||
fireGlobals = jQuery.event && s.global; |
|||
|
|||
// Watch for a new set of requests
|
|||
if ( fireGlobals && jQuery.active++ === 0 ) { |
|||
jQuery.event.trigger( "ajaxStart" ); |
|||
} |
|||
|
|||
// Uppercase the type
|
|||
s.type = s.type.toUpperCase(); |
|||
|
|||
// Determine if request has content
|
|||
s.hasContent = !rnoContent.test( s.type ); |
|||
|
|||
// Save the URL in case we're toying with the If-Modified-Since
|
|||
// and/or If-None-Match header later on
|
|||
cacheURL = s.url; |
|||
|
|||
// More options handling for requests with no content
|
|||
if ( !s.hasContent ) { |
|||
|
|||
// If data is available, append data to url
|
|||
if ( s.data ) { |
|||
cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); |
|||
|
|||
// #9682: remove data so that it's not used in an eventual retry
|
|||
delete s.data; |
|||
} |
|||
|
|||
// Add anti-cache in url if needed
|
|||
if ( s.cache === false ) { |
|||
s.url = rts.test( cacheURL ) ? |
|||
|
|||
// If there is already a '_' parameter, set its value
|
|||
cacheURL.replace( rts, "$1_=" + nonce++ ) : |
|||
|
|||
// Otherwise add one to the end
|
|||
cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; |
|||
} |
|||
} |
|||
|
|||
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
|||
if ( s.ifModified ) { |
|||
if ( jQuery.lastModified[ cacheURL ] ) { |
|||
jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); |
|||
} |
|||
if ( jQuery.etag[ cacheURL ] ) { |
|||
jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); |
|||
} |
|||
} |
|||
|
|||
// Set the correct header, if data is being sent
|
|||
if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { |
|||
jqXHR.setRequestHeader( "Content-Type", s.contentType ); |
|||
} |
|||
|
|||
// Set the Accepts header for the server, depending on the dataType
|
|||
jqXHR.setRequestHeader( |
|||
"Accept", |
|||
s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? |
|||
s.accepts[ s.dataTypes[ 0 ] ] + |
|||
( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : |
|||
s.accepts[ "*" ] |
|||
); |
|||
|
|||
// Check for headers option
|
|||
for ( i in s.headers ) { |
|||
jqXHR.setRequestHeader( i, s.headers[ i ] ); |
|||
} |
|||
|
|||
// Allow custom headers/mimetypes and early abort
|
|||
if ( s.beforeSend && |
|||
( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { |
|||
|
|||
// Abort if not done already and return
|
|||
return jqXHR.abort(); |
|||
} |
|||
|
|||
// Aborting is no longer a cancellation
|
|||
strAbort = "abort"; |
|||
|
|||
// Install callbacks on deferreds
|
|||
for ( i in { success: 1, error: 1, complete: 1 } ) { |
|||
jqXHR[ i ]( s[ i ] ); |
|||
} |
|||
|
|||
// Get transport
|
|||
transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); |
|||
|
|||
// If no transport, we auto-abort
|
|||
if ( !transport ) { |
|||
done( -1, "No Transport" ); |
|||
} else { |
|||
jqXHR.readyState = 1; |
|||
|
|||
// Send global event
|
|||
if ( fireGlobals ) { |
|||
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); |
|||
} |
|||
|
|||
// If request was aborted inside ajaxSend, stop there
|
|||
if ( state === 2 ) { |
|||
return jqXHR; |
|||
} |
|||
|
|||
// Timeout
|
|||
if ( s.async && s.timeout > 0 ) { |
|||
timeoutTimer = window.setTimeout( function() { |
|||
jqXHR.abort( "timeout" ); |
|||
}, s.timeout ); |
|||
} |
|||
|
|||
try { |
|||
state = 1; |
|||
transport.send( requestHeaders, done ); |
|||
} catch ( e ) { |
|||
|
|||
// Propagate exception as error if not done
|
|||
if ( state < 2 ) { |
|||
done( -1, e ); |
|||
|
|||
// Simply rethrow otherwise
|
|||
} else { |
|||
throw e; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Callback for when everything is done
|
|||
function done( status, nativeStatusText, responses, headers ) { |
|||
var isSuccess, success, error, response, modified, |
|||
statusText = nativeStatusText; |
|||
|
|||
// Called once
|
|||
if ( state === 2 ) { |
|||
return; |
|||
} |
|||
|
|||
// State is "done" now
|
|||
state = 2; |
|||
|
|||
// Clear timeout if it exists
|
|||
if ( timeoutTimer ) { |
|||
window.clearTimeout( timeoutTimer ); |
|||
} |
|||
|
|||
// Dereference transport for early garbage collection
|
|||
// (no matter how long the jqXHR object will be used)
|
|||
transport = undefined; |
|||
|
|||
// Cache response headers
|
|||
responseHeadersString = headers || ""; |
|||
|
|||
// Set readyState
|
|||
jqXHR.readyState = status > 0 ? 4 : 0; |
|||
|
|||
// Determine if successful
|
|||
isSuccess = status >= 200 && status < 300 || status === 304; |
|||
|
|||
// Get response data
|
|||
if ( responses ) { |
|||
response = ajaxHandleResponses( s, jqXHR, responses ); |
|||
} |
|||
|
|||
// Convert no matter what (that way responseXXX fields are always set)
|
|||
response = ajaxConvert( s, response, jqXHR, isSuccess ); |
|||
|
|||
// If successful, handle type chaining
|
|||
if ( isSuccess ) { |
|||
|
|||
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
|||
if ( s.ifModified ) { |
|||
modified = jqXHR.getResponseHeader( "Last-Modified" ); |
|||
if ( modified ) { |
|||
jQuery.lastModified[ cacheURL ] = modified; |
|||
} |
|||
modified = jqXHR.getResponseHeader( "etag" ); |
|||
if ( modified ) { |
|||
jQuery.etag[ cacheURL ] = modified; |
|||
} |
|||
} |
|||
|
|||
// if no content
|
|||
if ( status === 204 || s.type === "HEAD" ) { |
|||
statusText = "nocontent"; |
|||
|
|||
// if not modified
|
|||
} else if ( status === 304 ) { |
|||
statusText = "notmodified"; |
|||
|
|||
// If we have data, let's convert it
|
|||
} else { |
|||
statusText = response.state; |
|||
success = response.data; |
|||
error = response.error; |
|||
isSuccess = !error; |
|||
} |
|||
} else { |
|||
|
|||
// Extract error from statusText and normalize for non-aborts
|
|||
error = statusText; |
|||
if ( status || !statusText ) { |
|||
statusText = "error"; |
|||
if ( status < 0 ) { |
|||
status = 0; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Set data for the fake xhr object
|
|||
jqXHR.status = status; |
|||
jqXHR.statusText = ( nativeStatusText || statusText ) + ""; |
|||
|
|||
// Success/Error
|
|||
if ( isSuccess ) { |
|||
deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); |
|||
} else { |
|||
deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); |
|||
} |
|||
|
|||
// Status-dependent callbacks
|
|||
jqXHR.statusCode( statusCode ); |
|||
statusCode = undefined; |
|||
|
|||
if ( fireGlobals ) { |
|||
globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", |
|||
[ jqXHR, s, isSuccess ? success : error ] ); |
|||
} |
|||
|
|||
// Complete
|
|||
completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); |
|||
|
|||
if ( fireGlobals ) { |
|||
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); |
|||
|
|||
// Handle the global AJAX counter
|
|||
if ( !( --jQuery.active ) ) { |
|||
jQuery.event.trigger( "ajaxStop" ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
return jqXHR; |
|||
}, |
|||
|
|||
getJSON: function( url, data, callback ) { |
|||
return jQuery.get( url, data, callback, "json" ); |
|||
}, |
|||
|
|||
getScript: function( url, callback ) { |
|||
return jQuery.get( url, undefined, callback, "script" ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.each( [ "get", "post" ], function( i, method ) { |
|||
jQuery[ method ] = function( url, data, callback, type ) { |
|||
|
|||
// Shift arguments if data argument was omitted
|
|||
if ( jQuery.isFunction( data ) ) { |
|||
type = type || callback; |
|||
callback = data; |
|||
data = undefined; |
|||
} |
|||
|
|||
// The url can be an options object (which then must have .url)
|
|||
return jQuery.ajax( jQuery.extend( { |
|||
url: url, |
|||
type: method, |
|||
dataType: type, |
|||
data: data, |
|||
success: callback |
|||
}, jQuery.isPlainObject( url ) && url ) ); |
|||
}; |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,100 @@ |
|||
define( [ |
|||
"../core", |
|||
"./var/nonce", |
|||
"./var/rquery", |
|||
"../ajax" |
|||
], function( jQuery, nonce, rquery ) { |
|||
|
|||
var oldCallbacks = [], |
|||
rjsonp = /(=)\?(?=&|$)|\?\?/; |
|||
|
|||
// Default jsonp settings
|
|||
jQuery.ajaxSetup( { |
|||
jsonp: "callback", |
|||
jsonpCallback: function() { |
|||
var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); |
|||
this[ callback ] = true; |
|||
return callback; |
|||
} |
|||
} ); |
|||
|
|||
// Detect, normalize options and install callbacks for jsonp requests
|
|||
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { |
|||
|
|||
var callbackName, overwritten, responseContainer, |
|||
jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? |
|||
"url" : |
|||
typeof s.data === "string" && |
|||
( s.contentType || "" ) |
|||
.indexOf( "application/x-www-form-urlencoded" ) === 0 && |
|||
rjsonp.test( s.data ) && "data" |
|||
); |
|||
|
|||
// Handle iff the expected data type is "jsonp" or we have a parameter to set
|
|||
if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { |
|||
|
|||
// Get callback name, remembering preexisting value associated with it
|
|||
callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? |
|||
s.jsonpCallback() : |
|||
s.jsonpCallback; |
|||
|
|||
// Insert callback into url or form data
|
|||
if ( jsonProp ) { |
|||
s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); |
|||
} else if ( s.jsonp !== false ) { |
|||
s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; |
|||
} |
|||
|
|||
// Use data converter to retrieve json after script execution
|
|||
s.converters[ "script json" ] = function() { |
|||
if ( !responseContainer ) { |
|||
jQuery.error( callbackName + " was not called" ); |
|||
} |
|||
return responseContainer[ 0 ]; |
|||
}; |
|||
|
|||
// Force json dataType
|
|||
s.dataTypes[ 0 ] = "json"; |
|||
|
|||
// Install callback
|
|||
overwritten = window[ callbackName ]; |
|||
window[ callbackName ] = function() { |
|||
responseContainer = arguments; |
|||
}; |
|||
|
|||
// Clean-up function (fires after converters)
|
|||
jqXHR.always( function() { |
|||
|
|||
// If previous value didn't exist - remove it
|
|||
if ( overwritten === undefined ) { |
|||
jQuery( window ).removeProp( callbackName ); |
|||
|
|||
// Otherwise restore preexisting value
|
|||
} else { |
|||
window[ callbackName ] = overwritten; |
|||
} |
|||
|
|||
// Save back as free
|
|||
if ( s[ callbackName ] ) { |
|||
|
|||
// Make sure that re-using the options doesn't screw things around
|
|||
s.jsonpCallback = originalSettings.jsonpCallback; |
|||
|
|||
// Save the callback name for future use
|
|||
oldCallbacks.push( callbackName ); |
|||
} |
|||
|
|||
// Call if it was a function and we have a response
|
|||
if ( responseContainer && jQuery.isFunction( overwritten ) ) { |
|||
overwritten( responseContainer[ 0 ] ); |
|||
} |
|||
|
|||
responseContainer = overwritten = undefined; |
|||
} ); |
|||
|
|||
// Delegate to script
|
|||
return "script"; |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,83 @@ |
|||
define( [ |
|||
"../core", |
|||
"../core/parseHTML", |
|||
"../ajax", |
|||
"../traversing", |
|||
"../manipulation", |
|||
"../selector", |
|||
|
|||
// Optional event/alias dependency
|
|||
"../event/alias" |
|||
], function( jQuery ) { |
|||
|
|||
// Keep a copy of the old load method
|
|||
var _load = jQuery.fn.load; |
|||
|
|||
/** |
|||
* Load a url into a page |
|||
*/ |
|||
jQuery.fn.load = function( url, params, callback ) { |
|||
if ( typeof url !== "string" && _load ) { |
|||
return _load.apply( this, arguments ); |
|||
} |
|||
|
|||
var selector, type, response, |
|||
self = this, |
|||
off = url.indexOf( " " ); |
|||
|
|||
if ( off > -1 ) { |
|||
selector = jQuery.trim( url.slice( off ) ); |
|||
url = url.slice( 0, off ); |
|||
} |
|||
|
|||
// If it's a function
|
|||
if ( jQuery.isFunction( params ) ) { |
|||
|
|||
// We assume that it's the callback
|
|||
callback = params; |
|||
params = undefined; |
|||
|
|||
// Otherwise, build a param string
|
|||
} else if ( params && typeof params === "object" ) { |
|||
type = "POST"; |
|||
} |
|||
|
|||
// If we have elements to modify, make the request
|
|||
if ( self.length > 0 ) { |
|||
jQuery.ajax( { |
|||
url: url, |
|||
|
|||
// If "type" variable is undefined, then "GET" method will be used.
|
|||
// Make value of this field explicit since
|
|||
// user can override it through ajaxSetup method
|
|||
type: type || "GET", |
|||
dataType: "html", |
|||
data: params |
|||
} ).done( function( responseText ) { |
|||
|
|||
// Save response for use in complete callback
|
|||
response = arguments; |
|||
|
|||
self.html( selector ? |
|||
|
|||
// If a selector was specified, locate the right elements in a dummy div
|
|||
// Exclude scripts to avoid IE 'Permission Denied' errors
|
|||
jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : |
|||
|
|||
// Otherwise use the full result
|
|||
responseText ); |
|||
|
|||
// If the request succeeds, this function gets "data", "status", "jqXHR"
|
|||
// but they are ignored because response was set above.
|
|||
// If it fails, this function gets "jqXHR", "status", "error"
|
|||
} ).always( callback && function( jqXHR, status ) { |
|||
self.each( function() { |
|||
callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); |
|||
} ); |
|||
} ); |
|||
} |
|||
|
|||
return this; |
|||
}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,13 @@ |
|||
define( [ |
|||
"../core" |
|||
], function( jQuery ) { |
|||
|
|||
// Support: Android 2.3
|
|||
// Workaround failure to string-cast null input
|
|||
jQuery.parseJSON = function( data ) { |
|||
return JSON.parse( data + "" ); |
|||
}; |
|||
|
|||
return jQuery.parseJSON; |
|||
|
|||
} ); |
|||
@ -0,0 +1,27 @@ |
|||
define( [ |
|||
"../core" |
|||
], function( jQuery ) { |
|||
|
|||
// Cross-browser xml parsing
|
|||
jQuery.parseXML = function( data ) { |
|||
var xml; |
|||
if ( !data || typeof data !== "string" ) { |
|||
return null; |
|||
} |
|||
|
|||
// Support: IE9
|
|||
try { |
|||
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); |
|||
} catch ( e ) { |
|||
xml = undefined; |
|||
} |
|||
|
|||
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { |
|||
jQuery.error( "Invalid XML: " + data ); |
|||
} |
|||
return xml; |
|||
}; |
|||
|
|||
return jQuery.parseXML; |
|||
|
|||
} ); |
|||
@ -0,0 +1,68 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"../ajax" |
|||
], function( jQuery, document ) { |
|||
|
|||
// Install script dataType
|
|||
jQuery.ajaxSetup( { |
|||
accepts: { |
|||
script: "text/javascript, application/javascript, " + |
|||
"application/ecmascript, application/x-ecmascript" |
|||
}, |
|||
contents: { |
|||
script: /\b(?:java|ecma)script\b/ |
|||
}, |
|||
converters: { |
|||
"text script": function( text ) { |
|||
jQuery.globalEval( text ); |
|||
return text; |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
// Handle cache's special case and crossDomain
|
|||
jQuery.ajaxPrefilter( "script", function( s ) { |
|||
if ( s.cache === undefined ) { |
|||
s.cache = false; |
|||
} |
|||
if ( s.crossDomain ) { |
|||
s.type = "GET"; |
|||
} |
|||
} ); |
|||
|
|||
// Bind script tag hack transport
|
|||
jQuery.ajaxTransport( "script", function( s ) { |
|||
|
|||
// This transport only deals with cross domain requests
|
|||
if ( s.crossDomain ) { |
|||
var script, callback; |
|||
return { |
|||
send: function( _, complete ) { |
|||
script = jQuery( "<script>" ).prop( { |
|||
charset: s.scriptCharset, |
|||
src: s.url |
|||
} ).on( |
|||
"load error", |
|||
callback = function( evt ) { |
|||
script.remove(); |
|||
callback = null; |
|||
if ( evt ) { |
|||
complete( evt.type === "error" ? 404 : 200, evt.type ); |
|||
} |
|||
} |
|||
); |
|||
|
|||
// Use native DOM manipulation to avoid our domManip AJAX trickery
|
|||
document.head.appendChild( script[ 0 ] ); |
|||
}, |
|||
abort: function() { |
|||
if ( callback ) { |
|||
callback(); |
|||
} |
|||
} |
|||
}; |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return window.location; |
|||
} ); |
|||
@ -0,0 +1,5 @@ |
|||
define( [ |
|||
"../../core" |
|||
], function( jQuery ) { |
|||
return jQuery.now(); |
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return ( /\?/ ); |
|||
} ); |
|||
@ -0,0 +1,167 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/support", |
|||
"../ajax" |
|||
], function( jQuery, support ) { |
|||
|
|||
jQuery.ajaxSettings.xhr = function() { |
|||
try { |
|||
return new window.XMLHttpRequest(); |
|||
} catch ( e ) {} |
|||
}; |
|||
|
|||
var xhrSuccessStatus = { |
|||
|
|||
// File protocol always yields status code 0, assume 200
|
|||
0: 200, |
|||
|
|||
// Support: IE9
|
|||
// #1450: sometimes IE returns 1223 when it should be 204
|
|||
1223: 204 |
|||
}, |
|||
xhrSupported = jQuery.ajaxSettings.xhr(); |
|||
|
|||
support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); |
|||
support.ajax = xhrSupported = !!xhrSupported; |
|||
|
|||
jQuery.ajaxTransport( function( options ) { |
|||
var callback, errorCallback; |
|||
|
|||
// Cross domain only allowed if supported through XMLHttpRequest
|
|||
if ( support.cors || xhrSupported && !options.crossDomain ) { |
|||
return { |
|||
send: function( headers, complete ) { |
|||
var i, |
|||
xhr = options.xhr(); |
|||
|
|||
xhr.open( |
|||
options.type, |
|||
options.url, |
|||
options.async, |
|||
options.username, |
|||
options.password |
|||
); |
|||
|
|||
// Apply custom fields if provided
|
|||
if ( options.xhrFields ) { |
|||
for ( i in options.xhrFields ) { |
|||
xhr[ i ] = options.xhrFields[ i ]; |
|||
} |
|||
} |
|||
|
|||
// Override mime type if needed
|
|||
if ( options.mimeType && xhr.overrideMimeType ) { |
|||
xhr.overrideMimeType( options.mimeType ); |
|||
} |
|||
|
|||
// X-Requested-With header
|
|||
// For cross-domain requests, seeing as conditions for a preflight are
|
|||
// akin to a jigsaw puzzle, we simply never set it to be sure.
|
|||
// (it can always be set on a per-request basis or even using ajaxSetup)
|
|||
// For same-domain requests, won't change header if already provided.
|
|||
if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { |
|||
headers[ "X-Requested-With" ] = "XMLHttpRequest"; |
|||
} |
|||
|
|||
// Set headers
|
|||
for ( i in headers ) { |
|||
xhr.setRequestHeader( i, headers[ i ] ); |
|||
} |
|||
|
|||
// Callback
|
|||
callback = function( type ) { |
|||
return function() { |
|||
if ( callback ) { |
|||
callback = errorCallback = xhr.onload = |
|||
xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; |
|||
|
|||
if ( type === "abort" ) { |
|||
xhr.abort(); |
|||
} else if ( type === "error" ) { |
|||
|
|||
// Support: IE9
|
|||
// On a manual native abort, IE9 throws
|
|||
// errors on any property access that is not readyState
|
|||
if ( typeof xhr.status !== "number" ) { |
|||
complete( 0, "error" ); |
|||
} else { |
|||
complete( |
|||
|
|||
// File: protocol always yields status 0; see #8605, #14207
|
|||
xhr.status, |
|||
xhr.statusText |
|||
); |
|||
} |
|||
} else { |
|||
complete( |
|||
xhrSuccessStatus[ xhr.status ] || xhr.status, |
|||
xhr.statusText, |
|||
|
|||
// Support: IE9 only
|
|||
// IE9 has no XHR2 but throws on binary (trac-11426)
|
|||
// For XHR2 non-text, let the caller handle it (gh-2498)
|
|||
( xhr.responseType || "text" ) !== "text" || |
|||
typeof xhr.responseText !== "string" ? |
|||
{ binary: xhr.response } : |
|||
{ text: xhr.responseText }, |
|||
xhr.getAllResponseHeaders() |
|||
); |
|||
} |
|||
} |
|||
}; |
|||
}; |
|||
|
|||
// Listen to events
|
|||
xhr.onload = callback(); |
|||
errorCallback = xhr.onerror = callback( "error" ); |
|||
|
|||
// Support: IE9
|
|||
// Use onreadystatechange to replace onabort
|
|||
// to handle uncaught aborts
|
|||
if ( xhr.onabort !== undefined ) { |
|||
xhr.onabort = errorCallback; |
|||
} else { |
|||
xhr.onreadystatechange = function() { |
|||
|
|||
// Check readyState before timeout as it changes
|
|||
if ( xhr.readyState === 4 ) { |
|||
|
|||
// Allow onerror to be called first,
|
|||
// but that will not handle a native abort
|
|||
// Also, save errorCallback to a variable
|
|||
// as xhr.onerror cannot be accessed
|
|||
window.setTimeout( function() { |
|||
if ( callback ) { |
|||
errorCallback(); |
|||
} |
|||
} ); |
|||
} |
|||
}; |
|||
} |
|||
|
|||
// Create the abort callback
|
|||
callback = callback( "abort" ); |
|||
|
|||
try { |
|||
|
|||
// Do send the request (this may raise an exception)
|
|||
xhr.send( options.hasContent && options.data || null ); |
|||
} catch ( e ) { |
|||
|
|||
// #14683: Only rethrow if this hasn't been notified as an error yet
|
|||
if ( callback ) { |
|||
throw e; |
|||
} |
|||
} |
|||
}, |
|||
|
|||
abort: function() { |
|||
if ( callback ) { |
|||
callback(); |
|||
} |
|||
} |
|||
}; |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,11 @@ |
|||
define( [ |
|||
"./core", |
|||
"./attributes/attr", |
|||
"./attributes/prop", |
|||
"./attributes/classes", |
|||
"./attributes/val" |
|||
], function( jQuery ) { |
|||
|
|||
// Return jQuery for attributes-only inclusion
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,142 @@ |
|||
define( [ |
|||
"../core", |
|||
"../core/access", |
|||
"./support", |
|||
"../var/rnotwhite", |
|||
"../selector" |
|||
], function( jQuery, access, support, rnotwhite ) { |
|||
|
|||
var boolHook, |
|||
attrHandle = jQuery.expr.attrHandle; |
|||
|
|||
jQuery.fn.extend( { |
|||
attr: function( name, value ) { |
|||
return access( this, jQuery.attr, name, value, arguments.length > 1 ); |
|||
}, |
|||
|
|||
removeAttr: function( name ) { |
|||
return this.each( function() { |
|||
jQuery.removeAttr( this, name ); |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.extend( { |
|||
attr: function( elem, name, value ) { |
|||
var ret, hooks, |
|||
nType = elem.nodeType; |
|||
|
|||
// Don't get/set attributes on text, comment and attribute nodes
|
|||
if ( nType === 3 || nType === 8 || nType === 2 ) { |
|||
return; |
|||
} |
|||
|
|||
// Fallback to prop when attributes are not supported
|
|||
if ( typeof elem.getAttribute === "undefined" ) { |
|||
return jQuery.prop( elem, name, value ); |
|||
} |
|||
|
|||
// All attributes are lowercase
|
|||
// Grab necessary hook if one is defined
|
|||
if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { |
|||
name = name.toLowerCase(); |
|||
hooks = jQuery.attrHooks[ name ] || |
|||
( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); |
|||
} |
|||
|
|||
if ( value !== undefined ) { |
|||
if ( value === null ) { |
|||
jQuery.removeAttr( elem, name ); |
|||
return; |
|||
} |
|||
|
|||
if ( hooks && "set" in hooks && |
|||
( ret = hooks.set( elem, value, name ) ) !== undefined ) { |
|||
return ret; |
|||
} |
|||
|
|||
elem.setAttribute( name, value + "" ); |
|||
return value; |
|||
} |
|||
|
|||
if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { |
|||
return ret; |
|||
} |
|||
|
|||
ret = jQuery.find.attr( elem, name ); |
|||
|
|||
// Non-existent attributes return null, we normalize to undefined
|
|||
return ret == null ? undefined : ret; |
|||
}, |
|||
|
|||
attrHooks: { |
|||
type: { |
|||
set: function( elem, value ) { |
|||
if ( !support.radioValue && value === "radio" && |
|||
jQuery.nodeName( elem, "input" ) ) { |
|||
var val = elem.value; |
|||
elem.setAttribute( "type", value ); |
|||
if ( val ) { |
|||
elem.value = val; |
|||
} |
|||
return value; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
|
|||
removeAttr: function( elem, value ) { |
|||
var name, propName, |
|||
i = 0, |
|||
attrNames = value && value.match( rnotwhite ); |
|||
|
|||
if ( attrNames && elem.nodeType === 1 ) { |
|||
while ( ( name = attrNames[ i++ ] ) ) { |
|||
propName = jQuery.propFix[ name ] || name; |
|||
|
|||
// Boolean attributes get special treatment (#10870)
|
|||
if ( jQuery.expr.match.bool.test( name ) ) { |
|||
|
|||
// Set corresponding property to false
|
|||
elem[ propName ] = false; |
|||
} |
|||
|
|||
elem.removeAttribute( name ); |
|||
} |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
// Hooks for boolean attributes
|
|||
boolHook = { |
|||
set: function( elem, value, name ) { |
|||
if ( value === false ) { |
|||
|
|||
// Remove boolean attributes when set to false
|
|||
jQuery.removeAttr( elem, name ); |
|||
} else { |
|||
elem.setAttribute( name, name ); |
|||
} |
|||
return name; |
|||
} |
|||
}; |
|||
jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { |
|||
var getter = attrHandle[ name ] || jQuery.find.attr; |
|||
|
|||
attrHandle[ name ] = function( elem, name, isXML ) { |
|||
var ret, handle; |
|||
if ( !isXML ) { |
|||
|
|||
// Avoid an infinite loop by temporarily removing this function from the getter
|
|||
handle = attrHandle[ name ]; |
|||
attrHandle[ name ] = ret; |
|||
ret = getter( elem, name, isXML ) != null ? |
|||
name.toLowerCase() : |
|||
null; |
|||
attrHandle[ name ] = handle; |
|||
} |
|||
return ret; |
|||
}; |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,177 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/rnotwhite", |
|||
"../data/var/dataPriv", |
|||
"../core/init" |
|||
], function( jQuery, rnotwhite, dataPriv ) { |
|||
|
|||
var rclass = /[\t\r\n\f]/g; |
|||
|
|||
function getClass( elem ) { |
|||
return elem.getAttribute && elem.getAttribute( "class" ) || ""; |
|||
} |
|||
|
|||
jQuery.fn.extend( { |
|||
addClass: function( value ) { |
|||
var classes, elem, cur, curValue, clazz, j, finalValue, |
|||
i = 0; |
|||
|
|||
if ( jQuery.isFunction( value ) ) { |
|||
return this.each( function( j ) { |
|||
jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); |
|||
} ); |
|||
} |
|||
|
|||
if ( typeof value === "string" && value ) { |
|||
classes = value.match( rnotwhite ) || []; |
|||
|
|||
while ( ( elem = this[ i++ ] ) ) { |
|||
curValue = getClass( elem ); |
|||
cur = elem.nodeType === 1 && |
|||
( " " + curValue + " " ).replace( rclass, " " ); |
|||
|
|||
if ( cur ) { |
|||
j = 0; |
|||
while ( ( clazz = classes[ j++ ] ) ) { |
|||
if ( cur.indexOf( " " + clazz + " " ) < 0 ) { |
|||
cur += clazz + " "; |
|||
} |
|||
} |
|||
|
|||
// Only assign if different to avoid unneeded rendering.
|
|||
finalValue = jQuery.trim( cur ); |
|||
if ( curValue !== finalValue ) { |
|||
elem.setAttribute( "class", finalValue ); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
return this; |
|||
}, |
|||
|
|||
removeClass: function( value ) { |
|||
var classes, elem, cur, curValue, clazz, j, finalValue, |
|||
i = 0; |
|||
|
|||
if ( jQuery.isFunction( value ) ) { |
|||
return this.each( function( j ) { |
|||
jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); |
|||
} ); |
|||
} |
|||
|
|||
if ( !arguments.length ) { |
|||
return this.attr( "class", "" ); |
|||
} |
|||
|
|||
if ( typeof value === "string" && value ) { |
|||
classes = value.match( rnotwhite ) || []; |
|||
|
|||
while ( ( elem = this[ i++ ] ) ) { |
|||
curValue = getClass( elem ); |
|||
|
|||
// This expression is here for better compressibility (see addClass)
|
|||
cur = elem.nodeType === 1 && |
|||
( " " + curValue + " " ).replace( rclass, " " ); |
|||
|
|||
if ( cur ) { |
|||
j = 0; |
|||
while ( ( clazz = classes[ j++ ] ) ) { |
|||
|
|||
// Remove *all* instances
|
|||
while ( cur.indexOf( " " + clazz + " " ) > -1 ) { |
|||
cur = cur.replace( " " + clazz + " ", " " ); |
|||
} |
|||
} |
|||
|
|||
// Only assign if different to avoid unneeded rendering.
|
|||
finalValue = jQuery.trim( cur ); |
|||
if ( curValue !== finalValue ) { |
|||
elem.setAttribute( "class", finalValue ); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
return this; |
|||
}, |
|||
|
|||
toggleClass: function( value, stateVal ) { |
|||
var type = typeof value; |
|||
|
|||
if ( typeof stateVal === "boolean" && type === "string" ) { |
|||
return stateVal ? this.addClass( value ) : this.removeClass( value ); |
|||
} |
|||
|
|||
if ( jQuery.isFunction( value ) ) { |
|||
return this.each( function( i ) { |
|||
jQuery( this ).toggleClass( |
|||
value.call( this, i, getClass( this ), stateVal ), |
|||
stateVal |
|||
); |
|||
} ); |
|||
} |
|||
|
|||
return this.each( function() { |
|||
var className, i, self, classNames; |
|||
|
|||
if ( type === "string" ) { |
|||
|
|||
// Toggle individual class names
|
|||
i = 0; |
|||
self = jQuery( this ); |
|||
classNames = value.match( rnotwhite ) || []; |
|||
|
|||
while ( ( className = classNames[ i++ ] ) ) { |
|||
|
|||
// Check each className given, space separated list
|
|||
if ( self.hasClass( className ) ) { |
|||
self.removeClass( className ); |
|||
} else { |
|||
self.addClass( className ); |
|||
} |
|||
} |
|||
|
|||
// Toggle whole class name
|
|||
} else if ( value === undefined || type === "boolean" ) { |
|||
className = getClass( this ); |
|||
if ( className ) { |
|||
|
|||
// Store className if set
|
|||
dataPriv.set( this, "__className__", className ); |
|||
} |
|||
|
|||
// If the element has a class name or if we're passed `false`,
|
|||
// then remove the whole classname (if there was one, the above saved it).
|
|||
// Otherwise bring back whatever was previously saved (if anything),
|
|||
// falling back to the empty string if nothing was stored.
|
|||
if ( this.setAttribute ) { |
|||
this.setAttribute( "class", |
|||
className || value === false ? |
|||
"" : |
|||
dataPriv.get( this, "__className__" ) || "" |
|||
); |
|||
} |
|||
} |
|||
} ); |
|||
}, |
|||
|
|||
hasClass: function( selector ) { |
|||
var className, elem, |
|||
i = 0; |
|||
|
|||
className = " " + selector + " "; |
|||
while ( ( elem = this[ i++ ] ) ) { |
|||
if ( elem.nodeType === 1 && |
|||
( " " + getClass( elem ) + " " ).replace( rclass, " " ) |
|||
.indexOf( className ) > -1 |
|||
) { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,125 @@ |
|||
define( [ |
|||
"../core", |
|||
"../core/access", |
|||
"./support", |
|||
"../selector" |
|||
], function( jQuery, access, support ) { |
|||
|
|||
var rfocusable = /^(?:input|select|textarea|button)$/i, |
|||
rclickable = /^(?:a|area)$/i; |
|||
|
|||
jQuery.fn.extend( { |
|||
prop: function( name, value ) { |
|||
return access( this, jQuery.prop, name, value, arguments.length > 1 ); |
|||
}, |
|||
|
|||
removeProp: function( name ) { |
|||
return this.each( function() { |
|||
delete this[ jQuery.propFix[ name ] || name ]; |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.extend( { |
|||
prop: function( elem, name, value ) { |
|||
var ret, hooks, |
|||
nType = elem.nodeType; |
|||
|
|||
// Don't get/set properties on text, comment and attribute nodes
|
|||
if ( nType === 3 || nType === 8 || nType === 2 ) { |
|||
return; |
|||
} |
|||
|
|||
if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { |
|||
|
|||
// Fix name and attach hooks
|
|||
name = jQuery.propFix[ name ] || name; |
|||
hooks = jQuery.propHooks[ name ]; |
|||
} |
|||
|
|||
if ( value !== undefined ) { |
|||
if ( hooks && "set" in hooks && |
|||
( ret = hooks.set( elem, value, name ) ) !== undefined ) { |
|||
return ret; |
|||
} |
|||
|
|||
return ( elem[ name ] = value ); |
|||
} |
|||
|
|||
if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { |
|||
return ret; |
|||
} |
|||
|
|||
return elem[ name ]; |
|||
}, |
|||
|
|||
propHooks: { |
|||
tabIndex: { |
|||
get: function( elem ) { |
|||
|
|||
// elem.tabIndex doesn't always return the
|
|||
// correct value when it hasn't been explicitly set
|
|||
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
|||
// Use proper attribute retrieval(#12072)
|
|||
var tabindex = jQuery.find.attr( elem, "tabindex" ); |
|||
|
|||
return tabindex ? |
|||
parseInt( tabindex, 10 ) : |
|||
rfocusable.test( elem.nodeName ) || |
|||
rclickable.test( elem.nodeName ) && elem.href ? |
|||
0 : |
|||
-1; |
|||
} |
|||
} |
|||
}, |
|||
|
|||
propFix: { |
|||
"for": "htmlFor", |
|||
"class": "className" |
|||
} |
|||
} ); |
|||
|
|||
// Support: IE <=11 only
|
|||
// Accessing the selectedIndex property
|
|||
// forces the browser to respect setting selected
|
|||
// on the option
|
|||
// The getter ensures a default option is selected
|
|||
// when in an optgroup
|
|||
if ( !support.optSelected ) { |
|||
jQuery.propHooks.selected = { |
|||
get: function( elem ) { |
|||
var parent = elem.parentNode; |
|||
if ( parent && parent.parentNode ) { |
|||
parent.parentNode.selectedIndex; |
|||
} |
|||
return null; |
|||
}, |
|||
set: function( elem ) { |
|||
var parent = elem.parentNode; |
|||
if ( parent ) { |
|||
parent.selectedIndex; |
|||
|
|||
if ( parent.parentNode ) { |
|||
parent.parentNode.selectedIndex; |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
} |
|||
|
|||
jQuery.each( [ |
|||
"tabIndex", |
|||
"readOnly", |
|||
"maxLength", |
|||
"cellSpacing", |
|||
"cellPadding", |
|||
"rowSpan", |
|||
"colSpan", |
|||
"useMap", |
|||
"frameBorder", |
|||
"contentEditable" |
|||
], function() { |
|||
jQuery.propFix[ this.toLowerCase() ] = this; |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,36 @@ |
|||
define( [ |
|||
"../var/document", |
|||
"../var/support" |
|||
], function( document, support ) { |
|||
|
|||
( function() { |
|||
var input = document.createElement( "input" ), |
|||
select = document.createElement( "select" ), |
|||
opt = select.appendChild( document.createElement( "option" ) ); |
|||
|
|||
input.type = "checkbox"; |
|||
|
|||
// Support: iOS<=5.1, Android<=4.2+
|
|||
// Default value for a checkbox should be "on"
|
|||
support.checkOn = input.value !== ""; |
|||
|
|||
// Support: IE<=11+
|
|||
// Must access selectedIndex to make default options select
|
|||
support.optSelected = opt.selected; |
|||
|
|||
// Support: Android<=2.3
|
|||
// Options inside disabled selects are incorrectly marked as disabled
|
|||
select.disabled = true; |
|||
support.optDisabled = !opt.disabled; |
|||
|
|||
// Support: IE<=11+
|
|||
// An input loses its value after becoming a radio
|
|||
input = document.createElement( "input" ); |
|||
input.value = "t"; |
|||
input.type = "radio"; |
|||
support.radioValue = input.value === "t"; |
|||
} )(); |
|||
|
|||
return support; |
|||
|
|||
} ); |
|||
@ -0,0 +1,177 @@ |
|||
define( [ |
|||
"../core", |
|||
"./support", |
|||
"../core/init" |
|||
], function( jQuery, support ) { |
|||
|
|||
var rreturn = /\r/g, |
|||
rspaces = /[\x20\t\r\n\f]+/g; |
|||
|
|||
jQuery.fn.extend( { |
|||
val: function( value ) { |
|||
var hooks, ret, isFunction, |
|||
elem = this[ 0 ]; |
|||
|
|||
if ( !arguments.length ) { |
|||
if ( elem ) { |
|||
hooks = jQuery.valHooks[ elem.type ] || |
|||
jQuery.valHooks[ elem.nodeName.toLowerCase() ]; |
|||
|
|||
if ( hooks && |
|||
"get" in hooks && |
|||
( ret = hooks.get( elem, "value" ) ) !== undefined |
|||
) { |
|||
return ret; |
|||
} |
|||
|
|||
ret = elem.value; |
|||
|
|||
return typeof ret === "string" ? |
|||
|
|||
// Handle most common string cases
|
|||
ret.replace( rreturn, "" ) : |
|||
|
|||
// Handle cases where value is null/undef or number
|
|||
ret == null ? "" : ret; |
|||
} |
|||
|
|||
return; |
|||
} |
|||
|
|||
isFunction = jQuery.isFunction( value ); |
|||
|
|||
return this.each( function( i ) { |
|||
var val; |
|||
|
|||
if ( this.nodeType !== 1 ) { |
|||
return; |
|||
} |
|||
|
|||
if ( isFunction ) { |
|||
val = value.call( this, i, jQuery( this ).val() ); |
|||
} else { |
|||
val = value; |
|||
} |
|||
|
|||
// Treat null/undefined as ""; convert numbers to string
|
|||
if ( val == null ) { |
|||
val = ""; |
|||
|
|||
} else if ( typeof val === "number" ) { |
|||
val += ""; |
|||
|
|||
} else if ( jQuery.isArray( val ) ) { |
|||
val = jQuery.map( val, function( value ) { |
|||
return value == null ? "" : value + ""; |
|||
} ); |
|||
} |
|||
|
|||
hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; |
|||
|
|||
// If set returns undefined, fall back to normal setting
|
|||
if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { |
|||
this.value = val; |
|||
} |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.extend( { |
|||
valHooks: { |
|||
option: { |
|||
get: function( elem ) { |
|||
|
|||
var val = jQuery.find.attr( elem, "value" ); |
|||
return val != null ? |
|||
val : |
|||
|
|||
// Support: IE10-11+
|
|||
// option.text throws exceptions (#14686, #14858)
|
|||
// Strip and collapse whitespace
|
|||
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
|
|||
jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); |
|||
} |
|||
}, |
|||
select: { |
|||
get: function( elem ) { |
|||
var value, option, |
|||
options = elem.options, |
|||
index = elem.selectedIndex, |
|||
one = elem.type === "select-one" || index < 0, |
|||
values = one ? null : [], |
|||
max = one ? index + 1 : options.length, |
|||
i = index < 0 ? |
|||
max : |
|||
one ? index : 0; |
|||
|
|||
// Loop through all the selected options
|
|||
for ( ; i < max; i++ ) { |
|||
option = options[ i ]; |
|||
|
|||
// IE8-9 doesn't update selected after form reset (#2551)
|
|||
if ( ( option.selected || i === index ) && |
|||
|
|||
// Don't return options that are disabled or in a disabled optgroup
|
|||
( support.optDisabled ? |
|||
!option.disabled : option.getAttribute( "disabled" ) === null ) && |
|||
( !option.parentNode.disabled || |
|||
!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { |
|||
|
|||
// Get the specific value for the option
|
|||
value = jQuery( option ).val(); |
|||
|
|||
// We don't need an array for one selects
|
|||
if ( one ) { |
|||
return value; |
|||
} |
|||
|
|||
// Multi-Selects return an array
|
|||
values.push( value ); |
|||
} |
|||
} |
|||
|
|||
return values; |
|||
}, |
|||
|
|||
set: function( elem, value ) { |
|||
var optionSet, option, |
|||
options = elem.options, |
|||
values = jQuery.makeArray( value ), |
|||
i = options.length; |
|||
|
|||
while ( i-- ) { |
|||
option = options[ i ]; |
|||
if ( option.selected = |
|||
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 |
|||
) { |
|||
optionSet = true; |
|||
} |
|||
} |
|||
|
|||
// Force browsers to behave consistently when non-matching value is set
|
|||
if ( !optionSet ) { |
|||
elem.selectedIndex = -1; |
|||
} |
|||
return values; |
|||
} |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
// Radios and checkboxes getter/setter
|
|||
jQuery.each( [ "radio", "checkbox" ], function() { |
|||
jQuery.valHooks[ this ] = { |
|||
set: function( elem, value ) { |
|||
if ( jQuery.isArray( value ) ) { |
|||
return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); |
|||
} |
|||
} |
|||
}; |
|||
if ( !support.checkOn ) { |
|||
jQuery.valHooks[ this ].get = function( elem ) { |
|||
return elem.getAttribute( "value" ) === null ? "on" : elem.value; |
|||
}; |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,232 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/rnotwhite" |
|||
], function( jQuery, rnotwhite ) { |
|||
|
|||
// Convert String-formatted options into Object-formatted ones
|
|||
function createOptions( options ) { |
|||
var object = {}; |
|||
jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { |
|||
object[ flag ] = true; |
|||
} ); |
|||
return object; |
|||
} |
|||
|
|||
/* |
|||
* Create a callback list using the following parameters: |
|||
* |
|||
* options: an optional list of space-separated options that will change how |
|||
* the callback list behaves or a more traditional option object |
|||
* |
|||
* By default a callback list will act like an event callback list and can be |
|||
* "fired" multiple times. |
|||
* |
|||
* Possible options: |
|||
* |
|||
* once: will ensure the callback list can only be fired once (like a Deferred) |
|||
* |
|||
* memory: will keep track of previous values and will call any callback added |
|||
* after the list has been fired right away with the latest "memorized" |
|||
* values (like a Deferred) |
|||
* |
|||
* unique: will ensure a callback can only be added once (no duplicate in the list) |
|||
* |
|||
* stopOnFalse: interrupt callings when a callback returns false |
|||
* |
|||
*/ |
|||
jQuery.Callbacks = function( options ) { |
|||
|
|||
// Convert options from String-formatted to Object-formatted if needed
|
|||
// (we check in cache first)
|
|||
options = typeof options === "string" ? |
|||
createOptions( options ) : |
|||
jQuery.extend( {}, options ); |
|||
|
|||
var // Flag to know if list is currently firing
|
|||
firing, |
|||
|
|||
// Last fire value for non-forgettable lists
|
|||
memory, |
|||
|
|||
// Flag to know if list was already fired
|
|||
fired, |
|||
|
|||
// Flag to prevent firing
|
|||
locked, |
|||
|
|||
// Actual callback list
|
|||
list = [], |
|||
|
|||
// Queue of execution data for repeatable lists
|
|||
queue = [], |
|||
|
|||
// Index of currently firing callback (modified by add/remove as needed)
|
|||
firingIndex = -1, |
|||
|
|||
// Fire callbacks
|
|||
fire = function() { |
|||
|
|||
// Enforce single-firing
|
|||
locked = options.once; |
|||
|
|||
// Execute callbacks for all pending executions,
|
|||
// respecting firingIndex overrides and runtime changes
|
|||
fired = firing = true; |
|||
for ( ; queue.length; firingIndex = -1 ) { |
|||
memory = queue.shift(); |
|||
while ( ++firingIndex < list.length ) { |
|||
|
|||
// Run callback and check for early termination
|
|||
if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && |
|||
options.stopOnFalse ) { |
|||
|
|||
// Jump to end and forget the data so .add doesn't re-fire
|
|||
firingIndex = list.length; |
|||
memory = false; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Forget the data if we're done with it
|
|||
if ( !options.memory ) { |
|||
memory = false; |
|||
} |
|||
|
|||
firing = false; |
|||
|
|||
// Clean up if we're done firing for good
|
|||
if ( locked ) { |
|||
|
|||
// Keep an empty list if we have data for future add calls
|
|||
if ( memory ) { |
|||
list = []; |
|||
|
|||
// Otherwise, this object is spent
|
|||
} else { |
|||
list = ""; |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// Actual Callbacks object
|
|||
self = { |
|||
|
|||
// Add a callback or a collection of callbacks to the list
|
|||
add: function() { |
|||
if ( list ) { |
|||
|
|||
// If we have memory from a past run, we should fire after adding
|
|||
if ( memory && !firing ) { |
|||
firingIndex = list.length - 1; |
|||
queue.push( memory ); |
|||
} |
|||
|
|||
( function add( args ) { |
|||
jQuery.each( args, function( _, arg ) { |
|||
if ( jQuery.isFunction( arg ) ) { |
|||
if ( !options.unique || !self.has( arg ) ) { |
|||
list.push( arg ); |
|||
} |
|||
} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { |
|||
|
|||
// Inspect recursively
|
|||
add( arg ); |
|||
} |
|||
} ); |
|||
} )( arguments ); |
|||
|
|||
if ( memory && !firing ) { |
|||
fire(); |
|||
} |
|||
} |
|||
return this; |
|||
}, |
|||
|
|||
// Remove a callback from the list
|
|||
remove: function() { |
|||
jQuery.each( arguments, function( _, arg ) { |
|||
var index; |
|||
while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { |
|||
list.splice( index, 1 ); |
|||
|
|||
// Handle firing indexes
|
|||
if ( index <= firingIndex ) { |
|||
firingIndex--; |
|||
} |
|||
} |
|||
} ); |
|||
return this; |
|||
}, |
|||
|
|||
// Check if a given callback is in the list.
|
|||
// If no argument is given, return whether or not list has callbacks attached.
|
|||
has: function( fn ) { |
|||
return fn ? |
|||
jQuery.inArray( fn, list ) > -1 : |
|||
list.length > 0; |
|||
}, |
|||
|
|||
// Remove all callbacks from the list
|
|||
empty: function() { |
|||
if ( list ) { |
|||
list = []; |
|||
} |
|||
return this; |
|||
}, |
|||
|
|||
// Disable .fire and .add
|
|||
// Abort any current/pending executions
|
|||
// Clear all callbacks and values
|
|||
disable: function() { |
|||
locked = queue = []; |
|||
list = memory = ""; |
|||
return this; |
|||
}, |
|||
disabled: function() { |
|||
return !list; |
|||
}, |
|||
|
|||
// Disable .fire
|
|||
// Also disable .add unless we have memory (since it would have no effect)
|
|||
// Abort any pending executions
|
|||
lock: function() { |
|||
locked = queue = []; |
|||
if ( !memory ) { |
|||
list = memory = ""; |
|||
} |
|||
return this; |
|||
}, |
|||
locked: function() { |
|||
return !!locked; |
|||
}, |
|||
|
|||
// Call all callbacks with the given context and arguments
|
|||
fireWith: function( context, args ) { |
|||
if ( !locked ) { |
|||
args = args || []; |
|||
args = [ context, args.slice ? args.slice() : args ]; |
|||
queue.push( args ); |
|||
if ( !firing ) { |
|||
fire(); |
|||
} |
|||
} |
|||
return this; |
|||
}, |
|||
|
|||
// Call all the callbacks with the given arguments
|
|||
fire: function() { |
|||
self.fireWith( this, arguments ); |
|||
return this; |
|||
}, |
|||
|
|||
// To know if the callbacks have already been called at least once
|
|||
fired: function() { |
|||
return !!fired; |
|||
} |
|||
}; |
|||
|
|||
return self; |
|||
}; |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,494 @@ |
|||
define( [ |
|||
"./var/arr", |
|||
"./var/document", |
|||
"./var/slice", |
|||
"./var/concat", |
|||
"./var/push", |
|||
"./var/indexOf", |
|||
"./var/class2type", |
|||
"./var/toString", |
|||
"./var/hasOwn", |
|||
"./var/support" |
|||
], function( arr, document, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) { |
|||
|
|||
var |
|||
version = "@VERSION", |
|||
|
|||
// Define a local copy of jQuery
|
|||
jQuery = function( selector, context ) { |
|||
|
|||
// The jQuery object is actually just the init constructor 'enhanced'
|
|||
// Need init if jQuery is called (just allow error to be thrown if not included)
|
|||
return new jQuery.fn.init( selector, context ); |
|||
}, |
|||
|
|||
// Support: Android<4.1
|
|||
// Make sure we trim BOM and NBSP
|
|||
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, |
|||
|
|||
// Matches dashed string for camelizing
|
|||
rmsPrefix = /^-ms-/, |
|||
rdashAlpha = /-([\da-z])/gi, |
|||
|
|||
// Used by jQuery.camelCase as callback to replace()
|
|||
fcamelCase = function( all, letter ) { |
|||
return letter.toUpperCase(); |
|||
}; |
|||
|
|||
jQuery.fn = jQuery.prototype = { |
|||
|
|||
// The current version of jQuery being used
|
|||
jquery: version, |
|||
|
|||
constructor: jQuery, |
|||
|
|||
// Start with an empty selector
|
|||
selector: "", |
|||
|
|||
// The default length of a jQuery object is 0
|
|||
length: 0, |
|||
|
|||
toArray: function() { |
|||
return slice.call( this ); |
|||
}, |
|||
|
|||
// Get the Nth element in the matched element set OR
|
|||
// Get the whole matched element set as a clean array
|
|||
get: function( num ) { |
|||
return num != null ? |
|||
|
|||
// Return just the one element from the set
|
|||
( num < 0 ? this[ num + this.length ] : this[ num ] ) : |
|||
|
|||
// Return all the elements in a clean array
|
|||
slice.call( this ); |
|||
}, |
|||
|
|||
// Take an array of elements and push it onto the stack
|
|||
// (returning the new matched element set)
|
|||
pushStack: function( elems ) { |
|||
|
|||
// Build a new jQuery matched element set
|
|||
var ret = jQuery.merge( this.constructor(), elems ); |
|||
|
|||
// Add the old object onto the stack (as a reference)
|
|||
ret.prevObject = this; |
|||
ret.context = this.context; |
|||
|
|||
// Return the newly-formed element set
|
|||
return ret; |
|||
}, |
|||
|
|||
// Execute a callback for every element in the matched set.
|
|||
each: function( callback ) { |
|||
return jQuery.each( this, callback ); |
|||
}, |
|||
|
|||
map: function( callback ) { |
|||
return this.pushStack( jQuery.map( this, function( elem, i ) { |
|||
return callback.call( elem, i, elem ); |
|||
} ) ); |
|||
}, |
|||
|
|||
slice: function() { |
|||
return this.pushStack( slice.apply( this, arguments ) ); |
|||
}, |
|||
|
|||
first: function() { |
|||
return this.eq( 0 ); |
|||
}, |
|||
|
|||
last: function() { |
|||
return this.eq( -1 ); |
|||
}, |
|||
|
|||
eq: function( i ) { |
|||
var len = this.length, |
|||
j = +i + ( i < 0 ? len : 0 ); |
|||
return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); |
|||
}, |
|||
|
|||
end: function() { |
|||
return this.prevObject || this.constructor(); |
|||
}, |
|||
|
|||
// For internal use only.
|
|||
// Behaves like an Array's method, not like a jQuery method.
|
|||
push: push, |
|||
sort: arr.sort, |
|||
splice: arr.splice |
|||
}; |
|||
|
|||
jQuery.extend = jQuery.fn.extend = function() { |
|||
var options, name, src, copy, copyIsArray, clone, |
|||
target = arguments[ 0 ] || {}, |
|||
i = 1, |
|||
length = arguments.length, |
|||
deep = false; |
|||
|
|||
// Handle a deep copy situation
|
|||
if ( typeof target === "boolean" ) { |
|||
deep = target; |
|||
|
|||
// Skip the boolean and the target
|
|||
target = arguments[ i ] || {}; |
|||
i++; |
|||
} |
|||
|
|||
// Handle case when target is a string or something (possible in deep copy)
|
|||
if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { |
|||
target = {}; |
|||
} |
|||
|
|||
// Extend jQuery itself if only one argument is passed
|
|||
if ( i === length ) { |
|||
target = this; |
|||
i--; |
|||
} |
|||
|
|||
for ( ; i < length; i++ ) { |
|||
|
|||
// Only deal with non-null/undefined values
|
|||
if ( ( options = arguments[ i ] ) != null ) { |
|||
|
|||
// Extend the base object
|
|||
for ( name in options ) { |
|||
src = target[ name ]; |
|||
copy = options[ name ]; |
|||
|
|||
// Prevent never-ending loop
|
|||
if ( target === copy ) { |
|||
continue; |
|||
} |
|||
|
|||
// Recurse if we're merging plain objects or arrays
|
|||
if ( deep && copy && ( jQuery.isPlainObject( copy ) || |
|||
( copyIsArray = jQuery.isArray( copy ) ) ) ) { |
|||
|
|||
if ( copyIsArray ) { |
|||
copyIsArray = false; |
|||
clone = src && jQuery.isArray( src ) ? src : []; |
|||
|
|||
} else { |
|||
clone = src && jQuery.isPlainObject( src ) ? src : {}; |
|||
} |
|||
|
|||
// Never move original objects, clone them
|
|||
target[ name ] = jQuery.extend( deep, clone, copy ); |
|||
|
|||
// Don't bring in undefined values
|
|||
} else if ( copy !== undefined ) { |
|||
target[ name ] = copy; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Return the modified object
|
|||
return target; |
|||
}; |
|||
|
|||
jQuery.extend( { |
|||
|
|||
// Unique for each copy of jQuery on the page
|
|||
expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), |
|||
|
|||
// Assume jQuery is ready without the ready module
|
|||
isReady: true, |
|||
|
|||
error: function( msg ) { |
|||
throw new Error( msg ); |
|||
}, |
|||
|
|||
noop: function() {}, |
|||
|
|||
isFunction: function( obj ) { |
|||
return jQuery.type( obj ) === "function"; |
|||
}, |
|||
|
|||
isArray: Array.isArray, |
|||
|
|||
isWindow: function( obj ) { |
|||
return obj != null && obj === obj.window; |
|||
}, |
|||
|
|||
isNumeric: function( obj ) { |
|||
|
|||
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
|
|||
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
|
|||
// subtraction forces infinities to NaN
|
|||
// adding 1 corrects loss of precision from parseFloat (#15100)
|
|||
var realStringObj = obj && obj.toString(); |
|||
return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; |
|||
}, |
|||
|
|||
isPlainObject: function( obj ) { |
|||
var key; |
|||
|
|||
// Not plain objects:
|
|||
// - Any object or value whose internal [[Class]] property is not "[object Object]"
|
|||
// - DOM nodes
|
|||
// - window
|
|||
if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { |
|||
return false; |
|||
} |
|||
|
|||
// Not own constructor property must be Object
|
|||
if ( obj.constructor && |
|||
!hasOwn.call( obj, "constructor" ) && |
|||
!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { |
|||
return false; |
|||
} |
|||
|
|||
// Own properties are enumerated firstly, so to speed up,
|
|||
// if last one is own, then all properties are own
|
|||
for ( key in obj ) {} |
|||
|
|||
return key === undefined || hasOwn.call( obj, key ); |
|||
}, |
|||
|
|||
isEmptyObject: function( obj ) { |
|||
var name; |
|||
for ( name in obj ) { |
|||
return false; |
|||
} |
|||
return true; |
|||
}, |
|||
|
|||
type: function( obj ) { |
|||
if ( obj == null ) { |
|||
return obj + ""; |
|||
} |
|||
|
|||
// Support: Android<4.0, iOS<6 (functionish RegExp)
|
|||
return typeof obj === "object" || typeof obj === "function" ? |
|||
class2type[ toString.call( obj ) ] || "object" : |
|||
typeof obj; |
|||
}, |
|||
|
|||
// Evaluates a script in a global context
|
|||
globalEval: function( code ) { |
|||
var script, |
|||
indirect = eval; |
|||
|
|||
code = jQuery.trim( code ); |
|||
|
|||
if ( code ) { |
|||
|
|||
// If the code includes a valid, prologue position
|
|||
// strict mode pragma, execute code by injecting a
|
|||
// script tag into the document.
|
|||
if ( code.indexOf( "use strict" ) === 1 ) { |
|||
script = document.createElement( "script" ); |
|||
script.text = code; |
|||
document.head.appendChild( script ).parentNode.removeChild( script ); |
|||
} else { |
|||
|
|||
// Otherwise, avoid the DOM node creation, insertion
|
|||
// and removal by using an indirect global eval
|
|||
|
|||
indirect( code ); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// Convert dashed to camelCase; used by the css and data modules
|
|||
// Support: IE9-11+
|
|||
// Microsoft forgot to hump their vendor prefix (#9572)
|
|||
camelCase: function( string ) { |
|||
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); |
|||
}, |
|||
|
|||
nodeName: function( elem, name ) { |
|||
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); |
|||
}, |
|||
|
|||
each: function( obj, callback ) { |
|||
var length, i = 0; |
|||
|
|||
if ( isArrayLike( obj ) ) { |
|||
length = obj.length; |
|||
for ( ; i < length; i++ ) { |
|||
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { |
|||
break; |
|||
} |
|||
} |
|||
} else { |
|||
for ( i in obj ) { |
|||
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return obj; |
|||
}, |
|||
|
|||
// Support: Android<4.1
|
|||
trim: function( text ) { |
|||
return text == null ? |
|||
"" : |
|||
( text + "" ).replace( rtrim, "" ); |
|||
}, |
|||
|
|||
// results is for internal usage only
|
|||
makeArray: function( arr, results ) { |
|||
var ret = results || []; |
|||
|
|||
if ( arr != null ) { |
|||
if ( isArrayLike( Object( arr ) ) ) { |
|||
jQuery.merge( ret, |
|||
typeof arr === "string" ? |
|||
[ arr ] : arr |
|||
); |
|||
} else { |
|||
push.call( ret, arr ); |
|||
} |
|||
} |
|||
|
|||
return ret; |
|||
}, |
|||
|
|||
inArray: function( elem, arr, i ) { |
|||
return arr == null ? -1 : indexOf.call( arr, elem, i ); |
|||
}, |
|||
|
|||
merge: function( first, second ) { |
|||
var len = +second.length, |
|||
j = 0, |
|||
i = first.length; |
|||
|
|||
for ( ; j < len; j++ ) { |
|||
first[ i++ ] = second[ j ]; |
|||
} |
|||
|
|||
first.length = i; |
|||
|
|||
return first; |
|||
}, |
|||
|
|||
grep: function( elems, callback, invert ) { |
|||
var callbackInverse, |
|||
matches = [], |
|||
i = 0, |
|||
length = elems.length, |
|||
callbackExpect = !invert; |
|||
|
|||
// Go through the array, only saving the items
|
|||
// that pass the validator function
|
|||
for ( ; i < length; i++ ) { |
|||
callbackInverse = !callback( elems[ i ], i ); |
|||
if ( callbackInverse !== callbackExpect ) { |
|||
matches.push( elems[ i ] ); |
|||
} |
|||
} |
|||
|
|||
return matches; |
|||
}, |
|||
|
|||
// arg is for internal usage only
|
|||
map: function( elems, callback, arg ) { |
|||
var length, value, |
|||
i = 0, |
|||
ret = []; |
|||
|
|||
// Go through the array, translating each of the items to their new values
|
|||
if ( isArrayLike( elems ) ) { |
|||
length = elems.length; |
|||
for ( ; i < length; i++ ) { |
|||
value = callback( elems[ i ], i, arg ); |
|||
|
|||
if ( value != null ) { |
|||
ret.push( value ); |
|||
} |
|||
} |
|||
|
|||
// Go through every key on the object,
|
|||
} else { |
|||
for ( i in elems ) { |
|||
value = callback( elems[ i ], i, arg ); |
|||
|
|||
if ( value != null ) { |
|||
ret.push( value ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Flatten any nested arrays
|
|||
return concat.apply( [], ret ); |
|||
}, |
|||
|
|||
// A global GUID counter for objects
|
|||
guid: 1, |
|||
|
|||
// Bind a function to a context, optionally partially applying any
|
|||
// arguments.
|
|||
proxy: function( fn, context ) { |
|||
var tmp, args, proxy; |
|||
|
|||
if ( typeof context === "string" ) { |
|||
tmp = fn[ context ]; |
|||
context = fn; |
|||
fn = tmp; |
|||
} |
|||
|
|||
// Quick check to determine if target is callable, in the spec
|
|||
// this throws a TypeError, but we will just return undefined.
|
|||
if ( !jQuery.isFunction( fn ) ) { |
|||
return undefined; |
|||
} |
|||
|
|||
// Simulated bind
|
|||
args = slice.call( arguments, 2 ); |
|||
proxy = function() { |
|||
return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); |
|||
}; |
|||
|
|||
// Set the guid of unique handler to the same of original handler, so it can be removed
|
|||
proxy.guid = fn.guid = fn.guid || jQuery.guid++; |
|||
|
|||
return proxy; |
|||
}, |
|||
|
|||
now: Date.now, |
|||
|
|||
// jQuery.support is not used in Core but other projects attach their
|
|||
// properties to it so it needs to exist.
|
|||
support: support |
|||
} ); |
|||
|
|||
// JSHint would error on this code due to the Symbol not being defined in ES5.
|
|||
// Defining this global in .jshintrc would create a danger of using the global
|
|||
// unguarded in another place, it seems safer to just disable JSHint for these
|
|||
// three lines.
|
|||
/* jshint ignore: start */ |
|||
if ( typeof Symbol === "function" ) { |
|||
jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; |
|||
} |
|||
/* jshint ignore: end */ |
|||
|
|||
// Populate the class2type map
|
|||
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), |
|||
function( i, name ) { |
|||
class2type[ "[object " + name + "]" ] = name.toLowerCase(); |
|||
} ); |
|||
|
|||
function isArrayLike( obj ) { |
|||
|
|||
// Support: iOS 8.2 (not reproducible in simulator)
|
|||
// `in` check used to prevent JIT error (gh-2145)
|
|||
// hasOwn isn't used here due to false negatives
|
|||
// regarding Nodelist length in IE
|
|||
var length = !!obj && "length" in obj && obj.length, |
|||
type = jQuery.type( obj ); |
|||
|
|||
if ( type === "function" || jQuery.isWindow( obj ) ) { |
|||
return false; |
|||
} |
|||
|
|||
return type === "array" || length === 0 || |
|||
typeof length === "number" && length > 0 && ( length - 1 ) in obj; |
|||
} |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,65 @@ |
|||
define( [ |
|||
"../core" |
|||
], function( jQuery ) { |
|||
|
|||
// Multifunctional method to get and set values of a collection
|
|||
// The value/s can optionally be executed if it's a function
|
|||
var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { |
|||
var i = 0, |
|||
len = elems.length, |
|||
bulk = key == null; |
|||
|
|||
// Sets many values
|
|||
if ( jQuery.type( key ) === "object" ) { |
|||
chainable = true; |
|||
for ( i in key ) { |
|||
access( elems, fn, i, key[ i ], true, emptyGet, raw ); |
|||
} |
|||
|
|||
// Sets one value
|
|||
} else if ( value !== undefined ) { |
|||
chainable = true; |
|||
|
|||
if ( !jQuery.isFunction( value ) ) { |
|||
raw = true; |
|||
} |
|||
|
|||
if ( bulk ) { |
|||
|
|||
// Bulk operations run against the entire set
|
|||
if ( raw ) { |
|||
fn.call( elems, value ); |
|||
fn = null; |
|||
|
|||
// ...except when executing function values
|
|||
} else { |
|||
bulk = fn; |
|||
fn = function( elem, key, value ) { |
|||
return bulk.call( jQuery( elem ), value ); |
|||
}; |
|||
} |
|||
} |
|||
|
|||
if ( fn ) { |
|||
for ( ; i < len; i++ ) { |
|||
fn( |
|||
elems[ i ], key, raw ? |
|||
value : |
|||
value.call( elems[ i ], i, fn( elems[ i ], key ) ) |
|||
); |
|||
} |
|||
} |
|||
} |
|||
|
|||
return chainable ? |
|||
elems : |
|||
|
|||
// Gets
|
|||
bulk ? |
|||
fn.call( elems ) : |
|||
len ? fn( elems[ 0 ], key ) : emptyGet; |
|||
}; |
|||
|
|||
return access; |
|||
|
|||
} ); |
|||
@ -0,0 +1,134 @@ |
|||
// Initialize a jQuery object
|
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"./var/rsingleTag", |
|||
"../traversing/findFilter" |
|||
], function( jQuery, document, rsingleTag ) { |
|||
|
|||
// A central reference to the root jQuery(document)
|
|||
var rootjQuery, |
|||
|
|||
// A simple way to check for HTML strings
|
|||
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
|
|||
// Strict HTML recognition (#11290: must start with <)
|
|||
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, |
|||
|
|||
init = jQuery.fn.init = function( selector, context, root ) { |
|||
var match, elem; |
|||
|
|||
// HANDLE: $(""), $(null), $(undefined), $(false)
|
|||
if ( !selector ) { |
|||
return this; |
|||
} |
|||
|
|||
// Method init() accepts an alternate rootjQuery
|
|||
// so migrate can support jQuery.sub (gh-2101)
|
|||
root = root || rootjQuery; |
|||
|
|||
// Handle HTML strings
|
|||
if ( typeof selector === "string" ) { |
|||
if ( selector[ 0 ] === "<" && |
|||
selector[ selector.length - 1 ] === ">" && |
|||
selector.length >= 3 ) { |
|||
|
|||
// Assume that strings that start and end with <> are HTML and skip the regex check
|
|||
match = [ null, selector, null ]; |
|||
|
|||
} else { |
|||
match = rquickExpr.exec( selector ); |
|||
} |
|||
|
|||
// Match html or make sure no context is specified for #id
|
|||
if ( match && ( match[ 1 ] || !context ) ) { |
|||
|
|||
// HANDLE: $(html) -> $(array)
|
|||
if ( match[ 1 ] ) { |
|||
context = context instanceof jQuery ? context[ 0 ] : context; |
|||
|
|||
// Option to run scripts is true for back-compat
|
|||
// Intentionally let the error be thrown if parseHTML is not present
|
|||
jQuery.merge( this, jQuery.parseHTML( |
|||
match[ 1 ], |
|||
context && context.nodeType ? context.ownerDocument || context : document, |
|||
true |
|||
) ); |
|||
|
|||
// HANDLE: $(html, props)
|
|||
if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { |
|||
for ( match in context ) { |
|||
|
|||
// Properties of context are called as methods if possible
|
|||
if ( jQuery.isFunction( this[ match ] ) ) { |
|||
this[ match ]( context[ match ] ); |
|||
|
|||
// ...and otherwise set as attributes
|
|||
} else { |
|||
this.attr( match, context[ match ] ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
return this; |
|||
|
|||
// HANDLE: $(#id)
|
|||
} else { |
|||
elem = document.getElementById( match[ 2 ] ); |
|||
|
|||
// Support: Blackberry 4.6
|
|||
// gEBID returns nodes no longer in the document (#6963)
|
|||
if ( elem && elem.parentNode ) { |
|||
|
|||
// Inject the element directly into the jQuery object
|
|||
this.length = 1; |
|||
this[ 0 ] = elem; |
|||
} |
|||
|
|||
this.context = document; |
|||
this.selector = selector; |
|||
return this; |
|||
} |
|||
|
|||
// HANDLE: $(expr, $(...))
|
|||
} else if ( !context || context.jquery ) { |
|||
return ( context || root ).find( selector ); |
|||
|
|||
// HANDLE: $(expr, context)
|
|||
// (which is just equivalent to: $(context).find(expr)
|
|||
} else { |
|||
return this.constructor( context ).find( selector ); |
|||
} |
|||
|
|||
// HANDLE: $(DOMElement)
|
|||
} else if ( selector.nodeType ) { |
|||
this.context = this[ 0 ] = selector; |
|||
this.length = 1; |
|||
return this; |
|||
|
|||
// HANDLE: $(function)
|
|||
// Shortcut for document ready
|
|||
} else if ( jQuery.isFunction( selector ) ) { |
|||
return root.ready !== undefined ? |
|||
root.ready( selector ) : |
|||
|
|||
// Execute immediately if ready is not present
|
|||
selector( jQuery ); |
|||
} |
|||
|
|||
if ( selector.selector !== undefined ) { |
|||
this.selector = selector.selector; |
|||
this.context = selector.context; |
|||
} |
|||
|
|||
return jQuery.makeArray( selector, this ); |
|||
}; |
|||
|
|||
// Give the init function the jQuery prototype for later instantiation
|
|||
init.prototype = jQuery.fn; |
|||
|
|||
// Initialize central reference
|
|||
rootjQuery = jQuery( document ); |
|||
|
|||
return init; |
|||
|
|||
} ); |
|||
@ -0,0 +1,41 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"./var/rsingleTag", |
|||
"../manipulation/buildFragment" |
|||
], function( jQuery, document, rsingleTag, buildFragment ) { |
|||
|
|||
// Argument "data" should be string of html
|
|||
// context (optional): If specified, the fragment will be created in this context,
|
|||
// defaults to document
|
|||
// keepScripts (optional): If true, will include scripts passed in the html string
|
|||
jQuery.parseHTML = function( data, context, keepScripts ) { |
|||
if ( !data || typeof data !== "string" ) { |
|||
return null; |
|||
} |
|||
if ( typeof context === "boolean" ) { |
|||
keepScripts = context; |
|||
context = false; |
|||
} |
|||
context = context || document; |
|||
|
|||
var parsed = rsingleTag.exec( data ), |
|||
scripts = !keepScripts && []; |
|||
|
|||
// Single tag
|
|||
if ( parsed ) { |
|||
return [ context.createElement( parsed[ 1 ] ) ]; |
|||
} |
|||
|
|||
parsed = buildFragment( [ data ], context, scripts ); |
|||
|
|||
if ( scripts && scripts.length ) { |
|||
jQuery( scripts ).remove(); |
|||
} |
|||
|
|||
return jQuery.merge( [], parsed.childNodes ); |
|||
}; |
|||
|
|||
return jQuery.parseHTML; |
|||
|
|||
} ); |
|||
@ -0,0 +1,103 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"../core/init", |
|||
"../deferred" |
|||
], function( jQuery, document ) { |
|||
|
|||
// The deferred used on DOM ready
|
|||
var readyList; |
|||
|
|||
jQuery.fn.ready = function( fn ) { |
|||
|
|||
// Add the callback
|
|||
jQuery.ready.promise().done( fn ); |
|||
|
|||
return this; |
|||
}; |
|||
|
|||
jQuery.extend( { |
|||
|
|||
// Is the DOM ready to be used? Set to true once it occurs.
|
|||
isReady: false, |
|||
|
|||
// A counter to track how many items to wait for before
|
|||
// the ready event fires. See #6781
|
|||
readyWait: 1, |
|||
|
|||
// Hold (or release) the ready event
|
|||
holdReady: function( hold ) { |
|||
if ( hold ) { |
|||
jQuery.readyWait++; |
|||
} else { |
|||
jQuery.ready( true ); |
|||
} |
|||
}, |
|||
|
|||
// Handle when the DOM is ready
|
|||
ready: function( wait ) { |
|||
|
|||
// Abort if there are pending holds or we're already ready
|
|||
if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { |
|||
return; |
|||
} |
|||
|
|||
// Remember that the DOM is ready
|
|||
jQuery.isReady = true; |
|||
|
|||
// If a normal DOM Ready event fired, decrement, and wait if need be
|
|||
if ( wait !== true && --jQuery.readyWait > 0 ) { |
|||
return; |
|||
} |
|||
|
|||
// If there are functions bound, to execute
|
|||
readyList.resolveWith( document, [ jQuery ] ); |
|||
|
|||
// Trigger any bound ready events
|
|||
if ( jQuery.fn.triggerHandler ) { |
|||
jQuery( document ).triggerHandler( "ready" ); |
|||
jQuery( document ).off( "ready" ); |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
/** |
|||
* The ready event handler and self cleanup method |
|||
*/ |
|||
function completed() { |
|||
document.removeEventListener( "DOMContentLoaded", completed ); |
|||
window.removeEventListener( "load", completed ); |
|||
jQuery.ready(); |
|||
} |
|||
|
|||
jQuery.ready.promise = function( obj ) { |
|||
if ( !readyList ) { |
|||
|
|||
readyList = jQuery.Deferred(); |
|||
|
|||
// Catch cases where $(document).ready() is called
|
|||
// after the browser event has already occurred.
|
|||
// Support: IE9-10 only
|
|||
// Older IE sometimes signals "interactive" too soon
|
|||
if ( document.readyState === "complete" || |
|||
( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { |
|||
|
|||
// Handle it asynchronously to allow scripts the opportunity to delay ready
|
|||
window.setTimeout( jQuery.ready ); |
|||
|
|||
} else { |
|||
|
|||
// Use the handy event callback
|
|||
document.addEventListener( "DOMContentLoaded", completed ); |
|||
|
|||
// A fallback to window.onload, that will always work
|
|||
window.addEventListener( "load", completed ); |
|||
} |
|||
} |
|||
return readyList.promise( obj ); |
|||
}; |
|||
|
|||
// Kick off the DOM ready check even if the user does not
|
|||
jQuery.ready.promise(); |
|||
|
|||
} ); |
|||
@ -0,0 +1,5 @@ |
|||
define( function() { |
|||
|
|||
// Match a standalone tag
|
|||
return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); |
|||
} ); |
|||
@ -0,0 +1,502 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/pnum", |
|||
"./core/access", |
|||
"./css/var/rmargin", |
|||
"./var/document", |
|||
"./var/rcssNum", |
|||
"./css/var/rnumnonpx", |
|||
"./css/var/cssExpand", |
|||
"./css/var/isHidden", |
|||
"./css/var/getStyles", |
|||
"./css/var/swap", |
|||
"./css/curCSS", |
|||
"./css/adjustCSS", |
|||
"./css/defaultDisplay", |
|||
"./css/addGetHookIf", |
|||
"./css/support", |
|||
"./data/var/dataPriv", |
|||
|
|||
"./core/init", |
|||
"./core/ready", |
|||
"./selector" // contains
|
|||
], function( jQuery, pnum, access, rmargin, document, rcssNum, rnumnonpx, cssExpand, isHidden, |
|||
getStyles, swap, curCSS, adjustCSS, defaultDisplay, addGetHookIf, support, dataPriv ) { |
|||
|
|||
var |
|||
|
|||
// Swappable if display is none or starts with table
|
|||
// except "table", "table-cell", or "table-caption"
|
|||
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
|
|||
rdisplayswap = /^(none|table(?!-c[ea]).+)/, |
|||
|
|||
cssShow = { position: "absolute", visibility: "hidden", display: "block" }, |
|||
cssNormalTransform = { |
|||
letterSpacing: "0", |
|||
fontWeight: "400" |
|||
}, |
|||
|
|||
cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], |
|||
emptyStyle = document.createElement( "div" ).style; |
|||
|
|||
// Return a css property mapped to a potentially vendor prefixed property
|
|||
function vendorPropName( name ) { |
|||
|
|||
// Shortcut for names that are not vendor prefixed
|
|||
if ( name in emptyStyle ) { |
|||
return name; |
|||
} |
|||
|
|||
// Check for vendor prefixed names
|
|||
var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), |
|||
i = cssPrefixes.length; |
|||
|
|||
while ( i-- ) { |
|||
name = cssPrefixes[ i ] + capName; |
|||
if ( name in emptyStyle ) { |
|||
return name; |
|||
} |
|||
} |
|||
} |
|||
|
|||
function setPositiveNumber( elem, value, subtract ) { |
|||
|
|||
// Any relative (+/-) values have already been
|
|||
// normalized at this point
|
|||
var matches = rcssNum.exec( value ); |
|||
return matches ? |
|||
|
|||
// Guard against undefined "subtract", e.g., when used as in cssHooks
|
|||
Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : |
|||
value; |
|||
} |
|||
|
|||
function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { |
|||
var i = extra === ( isBorderBox ? "border" : "content" ) ? |
|||
|
|||
// If we already have the right measurement, avoid augmentation
|
|||
4 : |
|||
|
|||
// Otherwise initialize for horizontal or vertical properties
|
|||
name === "width" ? 1 : 0, |
|||
|
|||
val = 0; |
|||
|
|||
for ( ; i < 4; i += 2 ) { |
|||
|
|||
// Both box models exclude margin, so add it if we want it
|
|||
if ( extra === "margin" ) { |
|||
val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); |
|||
} |
|||
|
|||
if ( isBorderBox ) { |
|||
|
|||
// border-box includes padding, so remove it if we want content
|
|||
if ( extra === "content" ) { |
|||
val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); |
|||
} |
|||
|
|||
// At this point, extra isn't border nor margin, so remove border
|
|||
if ( extra !== "margin" ) { |
|||
val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); |
|||
} |
|||
} else { |
|||
|
|||
// At this point, extra isn't content, so add padding
|
|||
val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); |
|||
|
|||
// At this point, extra isn't content nor padding, so add border
|
|||
if ( extra !== "padding" ) { |
|||
val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
return val; |
|||
} |
|||
|
|||
function getWidthOrHeight( elem, name, extra ) { |
|||
|
|||
// Start with offset property, which is equivalent to the border-box value
|
|||
var valueIsBorderBox = true, |
|||
val = name === "width" ? elem.offsetWidth : elem.offsetHeight, |
|||
styles = getStyles( elem ), |
|||
isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; |
|||
|
|||
// Some non-html elements return undefined for offsetWidth, so check for null/undefined
|
|||
// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
|
|||
// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
|
|||
if ( val <= 0 || val == null ) { |
|||
|
|||
// Fall back to computed then uncomputed css if necessary
|
|||
val = curCSS( elem, name, styles ); |
|||
if ( val < 0 || val == null ) { |
|||
val = elem.style[ name ]; |
|||
} |
|||
|
|||
// Computed unit is not pixels. Stop here and return.
|
|||
if ( rnumnonpx.test( val ) ) { |
|||
return val; |
|||
} |
|||
|
|||
// Check for style in case a browser which returns unreliable values
|
|||
// for getComputedStyle silently falls back to the reliable elem.style
|
|||
valueIsBorderBox = isBorderBox && |
|||
( support.boxSizingReliable() || val === elem.style[ name ] ); |
|||
|
|||
// Normalize "", auto, and prepare for extra
|
|||
val = parseFloat( val ) || 0; |
|||
} |
|||
|
|||
// Use the active box-sizing model to add/subtract irrelevant styles
|
|||
return ( val + |
|||
augmentWidthOrHeight( |
|||
elem, |
|||
name, |
|||
extra || ( isBorderBox ? "border" : "content" ), |
|||
valueIsBorderBox, |
|||
styles |
|||
) |
|||
) + "px"; |
|||
} |
|||
|
|||
function showHide( elements, show ) { |
|||
var display, elem, hidden, |
|||
values = [], |
|||
index = 0, |
|||
length = elements.length; |
|||
|
|||
for ( ; index < length; index++ ) { |
|||
elem = elements[ index ]; |
|||
if ( !elem.style ) { |
|||
continue; |
|||
} |
|||
|
|||
values[ index ] = dataPriv.get( elem, "olddisplay" ); |
|||
display = elem.style.display; |
|||
if ( show ) { |
|||
|
|||
// Reset the inline display of this element to learn if it is
|
|||
// being hidden by cascaded rules or not
|
|||
if ( !values[ index ] && display === "none" ) { |
|||
elem.style.display = ""; |
|||
} |
|||
|
|||
// Set elements which have been overridden with display: none
|
|||
// in a stylesheet to whatever the default browser style is
|
|||
// for such an element
|
|||
if ( elem.style.display === "" && isHidden( elem ) ) { |
|||
values[ index ] = dataPriv.access( |
|||
elem, |
|||
"olddisplay", |
|||
defaultDisplay( elem.nodeName ) |
|||
); |
|||
} |
|||
} else { |
|||
hidden = isHidden( elem ); |
|||
|
|||
if ( display !== "none" || !hidden ) { |
|||
dataPriv.set( |
|||
elem, |
|||
"olddisplay", |
|||
hidden ? display : jQuery.css( elem, "display" ) |
|||
); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Set the display of most of the elements in a second loop
|
|||
// to avoid the constant reflow
|
|||
for ( index = 0; index < length; index++ ) { |
|||
elem = elements[ index ]; |
|||
if ( !elem.style ) { |
|||
continue; |
|||
} |
|||
if ( !show || elem.style.display === "none" || elem.style.display === "" ) { |
|||
elem.style.display = show ? values[ index ] || "" : "none"; |
|||
} |
|||
} |
|||
|
|||
return elements; |
|||
} |
|||
|
|||
jQuery.extend( { |
|||
|
|||
// Add in style property hooks for overriding the default
|
|||
// behavior of getting and setting a style property
|
|||
cssHooks: { |
|||
opacity: { |
|||
get: function( elem, computed ) { |
|||
if ( computed ) { |
|||
|
|||
// We should always get a number back from opacity
|
|||
var ret = curCSS( elem, "opacity" ); |
|||
return ret === "" ? "1" : ret; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// Don't automatically add "px" to these possibly-unitless properties
|
|||
cssNumber: { |
|||
"animationIterationCount": true, |
|||
"columnCount": true, |
|||
"fillOpacity": true, |
|||
"flexGrow": true, |
|||
"flexShrink": true, |
|||
"fontWeight": true, |
|||
"lineHeight": true, |
|||
"opacity": true, |
|||
"order": true, |
|||
"orphans": true, |
|||
"widows": true, |
|||
"zIndex": true, |
|||
"zoom": true |
|||
}, |
|||
|
|||
// Add in properties whose names you wish to fix before
|
|||
// setting or getting the value
|
|||
cssProps: { |
|||
"float": "cssFloat" |
|||
}, |
|||
|
|||
// Get and set the style property on a DOM Node
|
|||
style: function( elem, name, value, extra ) { |
|||
|
|||
// Don't set styles on text and comment nodes
|
|||
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { |
|||
return; |
|||
} |
|||
|
|||
// Make sure that we're working with the right name
|
|||
var ret, type, hooks, |
|||
origName = jQuery.camelCase( name ), |
|||
style = elem.style; |
|||
|
|||
name = jQuery.cssProps[ origName ] || |
|||
( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); |
|||
|
|||
// Gets hook for the prefixed version, then unprefixed version
|
|||
hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; |
|||
|
|||
// Check if we're setting a value
|
|||
if ( value !== undefined ) { |
|||
type = typeof value; |
|||
|
|||
// Convert "+=" or "-=" to relative numbers (#7345)
|
|||
if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { |
|||
value = adjustCSS( elem, name, ret ); |
|||
|
|||
// Fixes bug #9237
|
|||
type = "number"; |
|||
} |
|||
|
|||
// Make sure that null and NaN values aren't set (#7116)
|
|||
if ( value == null || value !== value ) { |
|||
return; |
|||
} |
|||
|
|||
// If a number was passed in, add the unit (except for certain CSS properties)
|
|||
if ( type === "number" ) { |
|||
value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); |
|||
} |
|||
|
|||
// Support: IE9-11+
|
|||
// background-* props affect original clone's values
|
|||
if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { |
|||
style[ name ] = "inherit"; |
|||
} |
|||
|
|||
// If a hook was provided, use that value, otherwise just set the specified value
|
|||
if ( !hooks || !( "set" in hooks ) || |
|||
( value = hooks.set( elem, value, extra ) ) !== undefined ) { |
|||
|
|||
style[ name ] = value; |
|||
} |
|||
|
|||
} else { |
|||
|
|||
// If a hook was provided get the non-computed value from there
|
|||
if ( hooks && "get" in hooks && |
|||
( ret = hooks.get( elem, false, extra ) ) !== undefined ) { |
|||
|
|||
return ret; |
|||
} |
|||
|
|||
// Otherwise just get the value from the style object
|
|||
return style[ name ]; |
|||
} |
|||
}, |
|||
|
|||
css: function( elem, name, extra, styles ) { |
|||
var val, num, hooks, |
|||
origName = jQuery.camelCase( name ); |
|||
|
|||
// Make sure that we're working with the right name
|
|||
name = jQuery.cssProps[ origName ] || |
|||
( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); |
|||
|
|||
// Try prefixed name followed by the unprefixed name
|
|||
hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; |
|||
|
|||
// If a hook was provided get the computed value from there
|
|||
if ( hooks && "get" in hooks ) { |
|||
val = hooks.get( elem, true, extra ); |
|||
} |
|||
|
|||
// Otherwise, if a way to get the computed value exists, use that
|
|||
if ( val === undefined ) { |
|||
val = curCSS( elem, name, styles ); |
|||
} |
|||
|
|||
// Convert "normal" to computed value
|
|||
if ( val === "normal" && name in cssNormalTransform ) { |
|||
val = cssNormalTransform[ name ]; |
|||
} |
|||
|
|||
// Make numeric if forced or a qualifier was provided and val looks numeric
|
|||
if ( extra === "" || extra ) { |
|||
num = parseFloat( val ); |
|||
return extra === true || isFinite( num ) ? num || 0 : val; |
|||
} |
|||
return val; |
|||
} |
|||
} ); |
|||
|
|||
jQuery.each( [ "height", "width" ], function( i, name ) { |
|||
jQuery.cssHooks[ name ] = { |
|||
get: function( elem, computed, extra ) { |
|||
if ( computed ) { |
|||
|
|||
// Certain elements can have dimension info if we invisibly show them
|
|||
// but it must have a current display style that would benefit
|
|||
return rdisplayswap.test( jQuery.css( elem, "display" ) ) && |
|||
elem.offsetWidth === 0 ? |
|||
swap( elem, cssShow, function() { |
|||
return getWidthOrHeight( elem, name, extra ); |
|||
} ) : |
|||
getWidthOrHeight( elem, name, extra ); |
|||
} |
|||
}, |
|||
|
|||
set: function( elem, value, extra ) { |
|||
var matches, |
|||
styles = extra && getStyles( elem ), |
|||
subtract = extra && augmentWidthOrHeight( |
|||
elem, |
|||
name, |
|||
extra, |
|||
jQuery.css( elem, "boxSizing", false, styles ) === "border-box", |
|||
styles |
|||
); |
|||
|
|||
// Convert to pixels if value adjustment is needed
|
|||
if ( subtract && ( matches = rcssNum.exec( value ) ) && |
|||
( matches[ 3 ] || "px" ) !== "px" ) { |
|||
|
|||
elem.style[ name ] = value; |
|||
value = jQuery.css( elem, name ); |
|||
} |
|||
|
|||
return setPositiveNumber( elem, value, subtract ); |
|||
} |
|||
}; |
|||
} ); |
|||
|
|||
jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, |
|||
function( elem, computed ) { |
|||
if ( computed ) { |
|||
return ( parseFloat( curCSS( elem, "marginLeft" ) ) || |
|||
elem.getBoundingClientRect().left - |
|||
swap( elem, { marginLeft: 0 }, function() { |
|||
return elem.getBoundingClientRect().left; |
|||
} ) |
|||
) + "px"; |
|||
} |
|||
} |
|||
); |
|||
|
|||
// Support: Android 2.3
|
|||
jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, |
|||
function( elem, computed ) { |
|||
if ( computed ) { |
|||
return swap( elem, { "display": "inline-block" }, |
|||
curCSS, [ elem, "marginRight" ] ); |
|||
} |
|||
} |
|||
); |
|||
|
|||
// These hooks are used by animate to expand properties
|
|||
jQuery.each( { |
|||
margin: "", |
|||
padding: "", |
|||
border: "Width" |
|||
}, function( prefix, suffix ) { |
|||
jQuery.cssHooks[ prefix + suffix ] = { |
|||
expand: function( value ) { |
|||
var i = 0, |
|||
expanded = {}, |
|||
|
|||
// Assumes a single number if not a string
|
|||
parts = typeof value === "string" ? value.split( " " ) : [ value ]; |
|||
|
|||
for ( ; i < 4; i++ ) { |
|||
expanded[ prefix + cssExpand[ i ] + suffix ] = |
|||
parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; |
|||
} |
|||
|
|||
return expanded; |
|||
} |
|||
}; |
|||
|
|||
if ( !rmargin.test( prefix ) ) { |
|||
jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; |
|||
} |
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
css: function( name, value ) { |
|||
return access( this, function( elem, name, value ) { |
|||
var styles, len, |
|||
map = {}, |
|||
i = 0; |
|||
|
|||
if ( jQuery.isArray( name ) ) { |
|||
styles = getStyles( elem ); |
|||
len = name.length; |
|||
|
|||
for ( ; i < len; i++ ) { |
|||
map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); |
|||
} |
|||
|
|||
return map; |
|||
} |
|||
|
|||
return value !== undefined ? |
|||
jQuery.style( elem, name, value ) : |
|||
jQuery.css( elem, name ); |
|||
}, name, value, arguments.length > 1 ); |
|||
}, |
|||
show: function() { |
|||
return showHide( this, true ); |
|||
}, |
|||
hide: function() { |
|||
return showHide( this ); |
|||
}, |
|||
toggle: function( state ) { |
|||
if ( typeof state === "boolean" ) { |
|||
return state ? this.show() : this.hide(); |
|||
} |
|||
|
|||
return this.each( function() { |
|||
if ( isHidden( this ) ) { |
|||
jQuery( this ).show(); |
|||
} else { |
|||
jQuery( this ).hide(); |
|||
} |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,24 @@ |
|||
define( function() { |
|||
|
|||
function addGetHookIf( conditionFn, hookFn ) { |
|||
|
|||
// Define the hook, we'll check on the first run if it's really needed.
|
|||
return { |
|||
get: function() { |
|||
if ( conditionFn() ) { |
|||
|
|||
// Hook not needed (or it's not possible to use it due
|
|||
// to missing dependency), remove it.
|
|||
delete this.get; |
|||
return; |
|||
} |
|||
|
|||
// Hook needed; redefine it so that the support test is not executed again.
|
|||
return ( this.get = hookFn ).apply( this, arguments ); |
|||
} |
|||
}; |
|||
} |
|||
|
|||
return addGetHookIf; |
|||
|
|||
} ); |
|||
@ -0,0 +1,65 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/rcssNum" |
|||
], function( jQuery, rcssNum ) { |
|||
|
|||
function adjustCSS( elem, prop, valueParts, tween ) { |
|||
var adjusted, |
|||
scale = 1, |
|||
maxIterations = 20, |
|||
currentValue = tween ? |
|||
function() { return tween.cur(); } : |
|||
function() { return jQuery.css( elem, prop, "" ); }, |
|||
initial = currentValue(), |
|||
unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), |
|||
|
|||
// Starting value computation is required for potential unit mismatches
|
|||
initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && |
|||
rcssNum.exec( jQuery.css( elem, prop ) ); |
|||
|
|||
if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { |
|||
|
|||
// Trust units reported by jQuery.css
|
|||
unit = unit || initialInUnit[ 3 ]; |
|||
|
|||
// Make sure we update the tween properties later on
|
|||
valueParts = valueParts || []; |
|||
|
|||
// Iteratively approximate from a nonzero starting point
|
|||
initialInUnit = +initial || 1; |
|||
|
|||
do { |
|||
|
|||
// If previous iteration zeroed out, double until we get *something*.
|
|||
// Use string for doubling so we don't accidentally see scale as unchanged below
|
|||
scale = scale || ".5"; |
|||
|
|||
// Adjust and apply
|
|||
initialInUnit = initialInUnit / scale; |
|||
jQuery.style( elem, prop, initialInUnit + unit ); |
|||
|
|||
// Update scale, tolerating zero or NaN from tween.cur()
|
|||
// Break the loop if scale is unchanged or perfect, or if we've just had enough.
|
|||
} while ( |
|||
scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations |
|||
); |
|||
} |
|||
|
|||
if ( valueParts ) { |
|||
initialInUnit = +initialInUnit || +initial || 0; |
|||
|
|||
// Apply relative offset (+=/-=) if specified
|
|||
adjusted = valueParts[ 1 ] ? |
|||
initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : |
|||
+valueParts[ 2 ]; |
|||
if ( tween ) { |
|||
tween.unit = unit; |
|||
tween.start = initialInUnit; |
|||
tween.end = adjusted; |
|||
} |
|||
} |
|||
return adjusted; |
|||
} |
|||
|
|||
return adjustCSS; |
|||
} ); |
|||
@ -0,0 +1,60 @@ |
|||
define( [ |
|||
"../core", |
|||
"./var/rnumnonpx", |
|||
"./var/rmargin", |
|||
"./var/getStyles", |
|||
"./support", |
|||
"../selector" // Get jQuery.contains
|
|||
], function( jQuery, rnumnonpx, rmargin, getStyles, support ) { |
|||
|
|||
function curCSS( elem, name, computed ) { |
|||
var width, minWidth, maxWidth, ret, |
|||
style = elem.style; |
|||
|
|||
computed = computed || getStyles( elem ); |
|||
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; |
|||
|
|||
// Support: Opera 12.1x only
|
|||
// Fall back to style even without computed
|
|||
// computed is undefined for elems on document fragments
|
|||
if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { |
|||
ret = jQuery.style( elem, name ); |
|||
} |
|||
|
|||
// Support: IE9
|
|||
// getPropertyValue is only needed for .css('filter') (#12537)
|
|||
if ( computed ) { |
|||
|
|||
// A tribute to the "awesome hack by Dean Edwards"
|
|||
// Android Browser returns percentage for some values,
|
|||
// but width seems to be reliably pixels.
|
|||
// This is against the CSSOM draft spec:
|
|||
// http://dev.w3.org/csswg/cssom/#resolved-values
|
|||
if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { |
|||
|
|||
// Remember the original values
|
|||
width = style.width; |
|||
minWidth = style.minWidth; |
|||
maxWidth = style.maxWidth; |
|||
|
|||
// Put in the new values to get a computed value out
|
|||
style.minWidth = style.maxWidth = style.width = ret; |
|||
ret = computed.width; |
|||
|
|||
// Revert the changed values
|
|||
style.width = width; |
|||
style.minWidth = minWidth; |
|||
style.maxWidth = maxWidth; |
|||
} |
|||
} |
|||
|
|||
return ret !== undefined ? |
|||
|
|||
// Support: IE9-11+
|
|||
// IE returns zIndex value as an integer.
|
|||
ret + "" : |
|||
ret; |
|||
} |
|||
|
|||
return curCSS; |
|||
} ); |
|||
@ -0,0 +1,72 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"../manipulation" // appendTo
|
|||
], function( jQuery, document ) { |
|||
|
|||
var iframe, |
|||
elemdisplay = { |
|||
|
|||
// Support: Firefox
|
|||
// We have to pre-define these values for FF (#10227)
|
|||
HTML: "block", |
|||
BODY: "block" |
|||
}; |
|||
|
|||
/** |
|||
* Retrieve the actual display of a element |
|||
* @param {String} name nodeName of the element |
|||
* @param {Object} doc Document object |
|||
*/ |
|||
|
|||
// Called only from within defaultDisplay
|
|||
function actualDisplay( name, doc ) { |
|||
var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), |
|||
|
|||
display = jQuery.css( elem[ 0 ], "display" ); |
|||
|
|||
// We don't have any data stored on the element,
|
|||
// so use "detach" method as fast way to get rid of the element
|
|||
elem.detach(); |
|||
|
|||
return display; |
|||
} |
|||
|
|||
/** |
|||
* Try to determine the default display value of an element |
|||
* @param {String} nodeName |
|||
*/ |
|||
function defaultDisplay( nodeName ) { |
|||
var doc = document, |
|||
display = elemdisplay[ nodeName ]; |
|||
|
|||
if ( !display ) { |
|||
display = actualDisplay( nodeName, doc ); |
|||
|
|||
// If the simple way fails, read from inside an iframe
|
|||
if ( display === "none" || !display ) { |
|||
|
|||
// Use the already-created iframe if possible
|
|||
iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) |
|||
.appendTo( doc.documentElement ); |
|||
|
|||
// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
|
|||
doc = iframe[ 0 ].contentDocument; |
|||
|
|||
// Support: IE
|
|||
doc.write(); |
|||
doc.close(); |
|||
|
|||
display = actualDisplay( nodeName, doc ); |
|||
iframe.detach(); |
|||
} |
|||
|
|||
// Store the correct default display
|
|||
elemdisplay[ nodeName ] = display; |
|||
} |
|||
|
|||
return display; |
|||
} |
|||
|
|||
return defaultDisplay; |
|||
} ); |
|||
@ -0,0 +1,18 @@ |
|||
define( [ |
|||
"../core", |
|||
"../selector" |
|||
], function( jQuery ) { |
|||
|
|||
jQuery.expr.filters.hidden = function( elem ) { |
|||
return !jQuery.expr.filters.visible( elem ); |
|||
}; |
|||
jQuery.expr.filters.visible = function( elem ) { |
|||
|
|||
// Support: Opera <= 12.12
|
|||
// Opera reports offsetWidths and offsetHeights less than zero on some elements
|
|||
// Use OR instead of AND as the element is not visible if either is true
|
|||
// See tickets #10406 and #13132
|
|||
return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; |
|||
}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,48 @@ |
|||
define( [ |
|||
"../data/var/dataPriv" |
|||
], function( dataPriv ) { |
|||
|
|||
function showHide( elements, show ) { |
|||
var display, elem, |
|||
values = [], |
|||
index = 0, |
|||
length = elements.length; |
|||
|
|||
// Determine new display value for elements that need to change
|
|||
for ( ; index < length; index++ ) { |
|||
elem = elements[ index ]; |
|||
if ( !elem.style ) { |
|||
continue; |
|||
} |
|||
|
|||
display = elem.style.display; |
|||
if ( show ) { |
|||
if ( display === "none" ) { |
|||
|
|||
// Restore a pre-hide() value if we have one
|
|||
values[ index ] = dataPriv.get( elem, "display" ) || ""; |
|||
} |
|||
} else { |
|||
if ( display !== "none" ) { |
|||
values[ index ] = "none"; |
|||
|
|||
// Remember the value we're replacing
|
|||
dataPriv.set( elem, "display", display ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Set the display of the elements in a second loop
|
|||
// to avoid the constant reflow
|
|||
for ( index = 0; index < length; index++ ) { |
|||
if ( values[ index ] != null ) { |
|||
elements[ index ].style.display = values[ index ]; |
|||
} |
|||
} |
|||
|
|||
return elements; |
|||
} |
|||
|
|||
return showHide; |
|||
|
|||
} ); |
|||
@ -0,0 +1,121 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"../var/documentElement", |
|||
"../var/support" |
|||
], function( jQuery, document, documentElement, support ) { |
|||
|
|||
( function() { |
|||
var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, |
|||
container = document.createElement( "div" ), |
|||
div = document.createElement( "div" ); |
|||
|
|||
// Finish early in limited (non-browser) environments
|
|||
if ( !div.style ) { |
|||
return; |
|||
} |
|||
|
|||
// Support: IE9-11+
|
|||
// Style of cloned element affects source element cloned (#8908)
|
|||
div.style.backgroundClip = "content-box"; |
|||
div.cloneNode( true ).style.backgroundClip = ""; |
|||
support.clearCloneStyle = div.style.backgroundClip === "content-box"; |
|||
|
|||
container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + |
|||
"padding:0;margin-top:1px;position:absolute"; |
|||
container.appendChild( div ); |
|||
|
|||
// Executing both pixelPosition & boxSizingReliable tests require only one layout
|
|||
// so they're executed at the same time to save the second computation.
|
|||
function computeStyleTests() { |
|||
div.style.cssText = |
|||
|
|||
// Support: Firefox<29, Android 2.3
|
|||
// Vendor-prefix box-sizing
|
|||
"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + |
|||
"position:relative;display:block;" + |
|||
"margin:auto;border:1px;padding:1px;" + |
|||
"top:1%;width:50%"; |
|||
div.innerHTML = ""; |
|||
documentElement.appendChild( container ); |
|||
|
|||
var divStyle = window.getComputedStyle( div ); |
|||
pixelPositionVal = divStyle.top !== "1%"; |
|||
reliableMarginLeftVal = divStyle.marginLeft === "2px"; |
|||
boxSizingReliableVal = divStyle.width === "4px"; |
|||
|
|||
// Support: Android 4.0 - 4.3 only
|
|||
// Some styles come back with percentage values, even though they shouldn't
|
|||
div.style.marginRight = "50%"; |
|||
pixelMarginRightVal = divStyle.marginRight === "4px"; |
|||
|
|||
documentElement.removeChild( container ); |
|||
} |
|||
|
|||
jQuery.extend( support, { |
|||
pixelPosition: function() { |
|||
|
|||
// This test is executed only once but we still do memoizing
|
|||
// since we can use the boxSizingReliable pre-computing.
|
|||
// No need to check if the test was already performed, though.
|
|||
computeStyleTests(); |
|||
return pixelPositionVal; |
|||
}, |
|||
boxSizingReliable: function() { |
|||
if ( boxSizingReliableVal == null ) { |
|||
computeStyleTests(); |
|||
} |
|||
return boxSizingReliableVal; |
|||
}, |
|||
pixelMarginRight: function() { |
|||
|
|||
// Support: Android 4.0-4.3
|
|||
// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
|
|||
// since that compresses better and they're computed together anyway.
|
|||
if ( boxSizingReliableVal == null ) { |
|||
computeStyleTests(); |
|||
} |
|||
return pixelMarginRightVal; |
|||
}, |
|||
reliableMarginLeft: function() { |
|||
|
|||
// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
|
|||
if ( boxSizingReliableVal == null ) { |
|||
computeStyleTests(); |
|||
} |
|||
return reliableMarginLeftVal; |
|||
}, |
|||
reliableMarginRight: function() { |
|||
|
|||
// Support: Android 2.3
|
|||
// Check if div with explicit width and no margin-right incorrectly
|
|||
// gets computed margin-right based on width of container. (#3333)
|
|||
// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
|
|||
// This support function is only executed once so no memoizing is needed.
|
|||
var ret, |
|||
marginDiv = div.appendChild( document.createElement( "div" ) ); |
|||
|
|||
// Reset CSS: box-sizing; display; margin; border; padding
|
|||
marginDiv.style.cssText = div.style.cssText = |
|||
|
|||
// Support: Android 2.3
|
|||
// Vendor-prefix box-sizing
|
|||
"-webkit-box-sizing:content-box;box-sizing:content-box;" + |
|||
"display:block;margin:0;border:0;padding:0"; |
|||
marginDiv.style.marginRight = marginDiv.style.width = "0"; |
|||
div.style.width = "1px"; |
|||
documentElement.appendChild( container ); |
|||
|
|||
ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); |
|||
|
|||
documentElement.removeChild( container ); |
|||
div.removeChild( marginDiv ); |
|||
|
|||
return ret; |
|||
} |
|||
} ); |
|||
} )(); |
|||
|
|||
return support; |
|||
|
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return [ "Top", "Right", "Bottom", "Left" ]; |
|||
} ); |
|||
@ -0,0 +1,15 @@ |
|||
define( function() { |
|||
return function( elem ) { |
|||
|
|||
// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
|
|||
// IE throws on elements created in popups
|
|||
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
|
|||
var view = elem.ownerDocument.defaultView; |
|||
|
|||
if ( !view || !view.opener ) { |
|||
view = window; |
|||
} |
|||
|
|||
return view.getComputedStyle( elem ); |
|||
}; |
|||
} ); |
|||
@ -0,0 +1,16 @@ |
|||
define( [ |
|||
"../../core", |
|||
"../../selector" |
|||
|
|||
// css is assumed
|
|||
], function( jQuery ) { |
|||
|
|||
return function( elem, el ) { |
|||
|
|||
// isHidden might be called from jQuery#filter function;
|
|||
// in that case, element will be second argument
|
|||
elem = el || elem; |
|||
return jQuery.css( elem, "display" ) === "none" || |
|||
!jQuery.contains( elem.ownerDocument, elem ); |
|||
}; |
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return ( /^margin/ ); |
|||
} ); |
|||
@ -0,0 +1,5 @@ |
|||
define( [ |
|||
"../../var/pnum" |
|||
], function( pnum ) { |
|||
return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); |
|||
} ); |
|||
@ -0,0 +1,24 @@ |
|||
define( function() { |
|||
|
|||
// A method for quickly swapping in/out CSS properties to get correct calculations.
|
|||
return function( elem, options, callback, args ) { |
|||
var ret, name, |
|||
old = {}; |
|||
|
|||
// Remember the old values, and insert the new ones
|
|||
for ( name in options ) { |
|||
old[ name ] = elem.style[ name ]; |
|||
elem.style[ name ] = options[ name ]; |
|||
} |
|||
|
|||
ret = callback.apply( elem, args || [] ); |
|||
|
|||
// Revert the old values
|
|||
for ( name in options ) { |
|||
elem.style[ name ] = old[ name ]; |
|||
} |
|||
|
|||
return ret; |
|||
}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,187 @@ |
|||
define( [ |
|||
"./core", |
|||
"./core/access", |
|||
"./data/var/dataPriv", |
|||
"./data/var/dataUser" |
|||
], function( jQuery, access, dataPriv, dataUser ) { |
|||
|
|||
// Implementation Summary
|
|||
//
|
|||
// 1. Enforce API surface and semantic compatibility with 1.9.x branch
|
|||
// 2. Improve the module's maintainability by reducing the storage
|
|||
// paths to a single mechanism.
|
|||
// 3. Use the same single mechanism to support "private" and "user" data.
|
|||
// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
|
|||
// 5. Avoid exposing implementation details on user objects (eg. expando properties)
|
|||
// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
|
|||
|
|||
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, |
|||
rmultiDash = /[A-Z]/g; |
|||
|
|||
function dataAttr( elem, key, data ) { |
|||
var name; |
|||
|
|||
// If nothing was found internally, try to fetch any
|
|||
// data from the HTML5 data-* attribute
|
|||
if ( data === undefined && elem.nodeType === 1 ) { |
|||
name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); |
|||
data = elem.getAttribute( name ); |
|||
|
|||
if ( typeof data === "string" ) { |
|||
try { |
|||
data = data === "true" ? true : |
|||
data === "false" ? false : |
|||
data === "null" ? null : |
|||
|
|||
// Only convert to a number if it doesn't change the string
|
|||
+data + "" === data ? +data : |
|||
rbrace.test( data ) ? jQuery.parseJSON( data ) : |
|||
data; |
|||
} catch ( e ) {} |
|||
|
|||
// Make sure we set the data so it isn't changed later
|
|||
dataUser.set( elem, key, data ); |
|||
} else { |
|||
data = undefined; |
|||
} |
|||
} |
|||
return data; |
|||
} |
|||
|
|||
jQuery.extend( { |
|||
hasData: function( elem ) { |
|||
return dataUser.hasData( elem ) || dataPriv.hasData( elem ); |
|||
}, |
|||
|
|||
data: function( elem, name, data ) { |
|||
return dataUser.access( elem, name, data ); |
|||
}, |
|||
|
|||
removeData: function( elem, name ) { |
|||
dataUser.remove( elem, name ); |
|||
}, |
|||
|
|||
// TODO: Now that all calls to _data and _removeData have been replaced
|
|||
// with direct calls to dataPriv methods, these can be deprecated.
|
|||
_data: function( elem, name, data ) { |
|||
return dataPriv.access( elem, name, data ); |
|||
}, |
|||
|
|||
_removeData: function( elem, name ) { |
|||
dataPriv.remove( elem, name ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
data: function( key, value ) { |
|||
var i, name, data, |
|||
elem = this[ 0 ], |
|||
attrs = elem && elem.attributes; |
|||
|
|||
// Gets all values
|
|||
if ( key === undefined ) { |
|||
if ( this.length ) { |
|||
data = dataUser.get( elem ); |
|||
|
|||
if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { |
|||
i = attrs.length; |
|||
while ( i-- ) { |
|||
|
|||
// Support: IE11+
|
|||
// The attrs elements can be null (#14894)
|
|||
if ( attrs[ i ] ) { |
|||
name = attrs[ i ].name; |
|||
if ( name.indexOf( "data-" ) === 0 ) { |
|||
name = jQuery.camelCase( name.slice( 5 ) ); |
|||
dataAttr( elem, name, data[ name ] ); |
|||
} |
|||
} |
|||
} |
|||
dataPriv.set( elem, "hasDataAttrs", true ); |
|||
} |
|||
} |
|||
|
|||
return data; |
|||
} |
|||
|
|||
// Sets multiple values
|
|||
if ( typeof key === "object" ) { |
|||
return this.each( function() { |
|||
dataUser.set( this, key ); |
|||
} ); |
|||
} |
|||
|
|||
return access( this, function( value ) { |
|||
var data, camelKey; |
|||
|
|||
// The calling jQuery object (element matches) is not empty
|
|||
// (and therefore has an element appears at this[ 0 ]) and the
|
|||
// `value` parameter was not undefined. An empty jQuery object
|
|||
// will result in `undefined` for elem = this[ 0 ] which will
|
|||
// throw an exception if an attempt to read a data cache is made.
|
|||
if ( elem && value === undefined ) { |
|||
|
|||
// Attempt to get data from the cache
|
|||
// with the key as-is
|
|||
data = dataUser.get( elem, key ) || |
|||
|
|||
// Try to find dashed key if it exists (gh-2779)
|
|||
// This is for 2.2.x only
|
|||
dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); |
|||
|
|||
if ( data !== undefined ) { |
|||
return data; |
|||
} |
|||
|
|||
camelKey = jQuery.camelCase( key ); |
|||
|
|||
// Attempt to get data from the cache
|
|||
// with the key camelized
|
|||
data = dataUser.get( elem, camelKey ); |
|||
if ( data !== undefined ) { |
|||
return data; |
|||
} |
|||
|
|||
// Attempt to "discover" the data in
|
|||
// HTML5 custom data-* attrs
|
|||
data = dataAttr( elem, camelKey, undefined ); |
|||
if ( data !== undefined ) { |
|||
return data; |
|||
} |
|||
|
|||
// We tried really hard, but the data doesn't exist.
|
|||
return; |
|||
} |
|||
|
|||
// Set the data...
|
|||
camelKey = jQuery.camelCase( key ); |
|||
this.each( function() { |
|||
|
|||
// First, attempt to store a copy or reference of any
|
|||
// data that might've been store with a camelCased key.
|
|||
var data = dataUser.get( this, camelKey ); |
|||
|
|||
// For HTML5 data-* attribute interop, we have to
|
|||
// store property names with dashes in a camelCase form.
|
|||
// This might not apply to all properties...*
|
|||
dataUser.set( this, camelKey, value ); |
|||
|
|||
// *... In the case of properties that might _actually_
|
|||
// have dashes, we need to also store a copy of that
|
|||
// unchanged property.
|
|||
if ( key.indexOf( "-" ) > -1 && data !== undefined ) { |
|||
dataUser.set( this, key, value ); |
|||
} |
|||
} ); |
|||
}, null, value, arguments.length > 1, null, true ); |
|||
}, |
|||
|
|||
removeData: function( key ) { |
|||
return this.each( function() { |
|||
dataUser.remove( this, key ); |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,200 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/rnotwhite", |
|||
"./var/acceptData" |
|||
], function( jQuery, rnotwhite, acceptData ) { |
|||
|
|||
function Data() { |
|||
this.expando = jQuery.expando + Data.uid++; |
|||
} |
|||
|
|||
Data.uid = 1; |
|||
|
|||
Data.prototype = { |
|||
|
|||
register: function( owner, initial ) { |
|||
var value = initial || {}; |
|||
|
|||
// If it is a node unlikely to be stringify-ed or looped over
|
|||
// use plain assignment
|
|||
if ( owner.nodeType ) { |
|||
owner[ this.expando ] = value; |
|||
|
|||
// Otherwise secure it in a non-enumerable, non-writable property
|
|||
// configurability must be true to allow the property to be
|
|||
// deleted with the delete operator
|
|||
} else { |
|||
Object.defineProperty( owner, this.expando, { |
|||
value: value, |
|||
writable: true, |
|||
configurable: true |
|||
} ); |
|||
} |
|||
return owner[ this.expando ]; |
|||
}, |
|||
cache: function( owner ) { |
|||
|
|||
// We can accept data for non-element nodes in modern browsers,
|
|||
// but we should not, see #8335.
|
|||
// Always return an empty object.
|
|||
if ( !acceptData( owner ) ) { |
|||
return {}; |
|||
} |
|||
|
|||
// Check if the owner object already has a cache
|
|||
var value = owner[ this.expando ]; |
|||
|
|||
// If not, create one
|
|||
if ( !value ) { |
|||
value = {}; |
|||
|
|||
// We can accept data for non-element nodes in modern browsers,
|
|||
// but we should not, see #8335.
|
|||
// Always return an empty object.
|
|||
if ( acceptData( owner ) ) { |
|||
|
|||
// If it is a node unlikely to be stringify-ed or looped over
|
|||
// use plain assignment
|
|||
if ( owner.nodeType ) { |
|||
owner[ this.expando ] = value; |
|||
|
|||
// Otherwise secure it in a non-enumerable property
|
|||
// configurable must be true to allow the property to be
|
|||
// deleted when data is removed
|
|||
} else { |
|||
Object.defineProperty( owner, this.expando, { |
|||
value: value, |
|||
configurable: true |
|||
} ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
return value; |
|||
}, |
|||
set: function( owner, data, value ) { |
|||
var prop, |
|||
cache = this.cache( owner ); |
|||
|
|||
// Handle: [ owner, key, value ] args
|
|||
if ( typeof data === "string" ) { |
|||
cache[ data ] = value; |
|||
|
|||
// Handle: [ owner, { properties } ] args
|
|||
} else { |
|||
|
|||
// Copy the properties one-by-one to the cache object
|
|||
for ( prop in data ) { |
|||
cache[ prop ] = data[ prop ]; |
|||
} |
|||
} |
|||
return cache; |
|||
}, |
|||
get: function( owner, key ) { |
|||
return key === undefined ? |
|||
this.cache( owner ) : |
|||
owner[ this.expando ] && owner[ this.expando ][ key ]; |
|||
}, |
|||
access: function( owner, key, value ) { |
|||
var stored; |
|||
|
|||
// In cases where either:
|
|||
//
|
|||
// 1. No key was specified
|
|||
// 2. A string key was specified, but no value provided
|
|||
//
|
|||
// Take the "read" path and allow the get method to determine
|
|||
// which value to return, respectively either:
|
|||
//
|
|||
// 1. The entire cache object
|
|||
// 2. The data stored at the key
|
|||
//
|
|||
if ( key === undefined || |
|||
( ( key && typeof key === "string" ) && value === undefined ) ) { |
|||
|
|||
stored = this.get( owner, key ); |
|||
|
|||
return stored !== undefined ? |
|||
stored : this.get( owner, jQuery.camelCase( key ) ); |
|||
} |
|||
|
|||
// When the key is not a string, or both a key and value
|
|||
// are specified, set or extend (existing objects) with either:
|
|||
//
|
|||
// 1. An object of properties
|
|||
// 2. A key and value
|
|||
//
|
|||
this.set( owner, key, value ); |
|||
|
|||
// Since the "set" path can have two possible entry points
|
|||
// return the expected data based on which path was taken[*]
|
|||
return value !== undefined ? value : key; |
|||
}, |
|||
remove: function( owner, key ) { |
|||
var i, name, camel, |
|||
cache = owner[ this.expando ]; |
|||
|
|||
if ( cache === undefined ) { |
|||
return; |
|||
} |
|||
|
|||
if ( key === undefined ) { |
|||
this.register( owner ); |
|||
|
|||
} else { |
|||
|
|||
// Support array or space separated string of keys
|
|||
if ( jQuery.isArray( key ) ) { |
|||
|
|||
// If "name" is an array of keys...
|
|||
// When data is initially created, via ("key", "val") signature,
|
|||
// keys will be converted to camelCase.
|
|||
// Since there is no way to tell _how_ a key was added, remove
|
|||
// both plain key and camelCase key. #12786
|
|||
// This will only penalize the array argument path.
|
|||
name = key.concat( key.map( jQuery.camelCase ) ); |
|||
} else { |
|||
camel = jQuery.camelCase( key ); |
|||
|
|||
// Try the string as a key before any manipulation
|
|||
if ( key in cache ) { |
|||
name = [ key, camel ]; |
|||
} else { |
|||
|
|||
// If a key with the spaces exists, use it.
|
|||
// Otherwise, create an array by matching non-whitespace
|
|||
name = camel; |
|||
name = name in cache ? |
|||
[ name ] : ( name.match( rnotwhite ) || [] ); |
|||
} |
|||
} |
|||
|
|||
i = name.length; |
|||
|
|||
while ( i-- ) { |
|||
delete cache[ name[ i ] ]; |
|||
} |
|||
} |
|||
|
|||
// Remove the expando if there's no more data
|
|||
if ( key === undefined || jQuery.isEmptyObject( cache ) ) { |
|||
|
|||
// Support: Chrome <= 35-45+
|
|||
// Webkit & Blink performance suffers when deleting properties
|
|||
// from DOM nodes, so set to undefined instead
|
|||
// https://code.google.com/p/chromium/issues/detail?id=378607
|
|||
if ( owner.nodeType ) { |
|||
owner[ this.expando ] = undefined; |
|||
} else { |
|||
delete owner[ this.expando ]; |
|||
} |
|||
} |
|||
}, |
|||
hasData: function( owner ) { |
|||
var cache = owner[ this.expando ]; |
|||
return cache !== undefined && !jQuery.isEmptyObject( cache ); |
|||
} |
|||
}; |
|||
|
|||
return Data; |
|||
} ); |
|||
@ -0,0 +1,18 @@ |
|||
define( function() { |
|||
|
|||
/** |
|||
* Determines whether an object can have data |
|||
*/ |
|||
return function( owner ) { |
|||
|
|||
// Accepts only:
|
|||
// - Node
|
|||
// - Node.ELEMENT_NODE
|
|||
// - Node.DOCUMENT_NODE
|
|||
// - Object
|
|||
// - Any
|
|||
/* jshint -W018 */ |
|||
return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); |
|||
}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,5 @@ |
|||
define( [ |
|||
"../Data" |
|||
], function( Data ) { |
|||
return new Data(); |
|||
} ); |
|||
@ -0,0 +1,5 @@ |
|||
define( [ |
|||
"../Data" |
|||
], function( Data ) { |
|||
return new Data(); |
|||
} ); |
|||
@ -0,0 +1,158 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/slice", |
|||
"./callbacks" |
|||
], function( jQuery, slice ) { |
|||
|
|||
jQuery.extend( { |
|||
|
|||
Deferred: function( func ) { |
|||
var tuples = [ |
|||
|
|||
// action, add listener, listener list, final state
|
|||
[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], |
|||
[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], |
|||
[ "notify", "progress", jQuery.Callbacks( "memory" ) ] |
|||
], |
|||
state = "pending", |
|||
promise = { |
|||
state: function() { |
|||
return state; |
|||
}, |
|||
always: function() { |
|||
deferred.done( arguments ).fail( arguments ); |
|||
return this; |
|||
}, |
|||
then: function( /* fnDone, fnFail, fnProgress */ ) { |
|||
var fns = arguments; |
|||
return jQuery.Deferred( function( newDefer ) { |
|||
jQuery.each( tuples, function( i, tuple ) { |
|||
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; |
|||
|
|||
// deferred[ done | fail | progress ] for forwarding actions to newDefer
|
|||
deferred[ tuple[ 1 ] ]( function() { |
|||
var returned = fn && fn.apply( this, arguments ); |
|||
if ( returned && jQuery.isFunction( returned.promise ) ) { |
|||
returned.promise() |
|||
.progress( newDefer.notify ) |
|||
.done( newDefer.resolve ) |
|||
.fail( newDefer.reject ); |
|||
} else { |
|||
newDefer[ tuple[ 0 ] + "With" ]( |
|||
this === promise ? newDefer.promise() : this, |
|||
fn ? [ returned ] : arguments |
|||
); |
|||
} |
|||
} ); |
|||
} ); |
|||
fns = null; |
|||
} ).promise(); |
|||
}, |
|||
|
|||
// Get a promise for this deferred
|
|||
// If obj is provided, the promise aspect is added to the object
|
|||
promise: function( obj ) { |
|||
return obj != null ? jQuery.extend( obj, promise ) : promise; |
|||
} |
|||
}, |
|||
deferred = {}; |
|||
|
|||
// Keep pipe for back-compat
|
|||
promise.pipe = promise.then; |
|||
|
|||
// Add list-specific methods
|
|||
jQuery.each( tuples, function( i, tuple ) { |
|||
var list = tuple[ 2 ], |
|||
stateString = tuple[ 3 ]; |
|||
|
|||
// promise[ done | fail | progress ] = list.add
|
|||
promise[ tuple[ 1 ] ] = list.add; |
|||
|
|||
// Handle state
|
|||
if ( stateString ) { |
|||
list.add( function() { |
|||
|
|||
// state = [ resolved | rejected ]
|
|||
state = stateString; |
|||
|
|||
// [ reject_list | resolve_list ].disable; progress_list.lock
|
|||
}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); |
|||
} |
|||
|
|||
// deferred[ resolve | reject | notify ]
|
|||
deferred[ tuple[ 0 ] ] = function() { |
|||
deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); |
|||
return this; |
|||
}; |
|||
deferred[ tuple[ 0 ] + "With" ] = list.fireWith; |
|||
} ); |
|||
|
|||
// Make the deferred a promise
|
|||
promise.promise( deferred ); |
|||
|
|||
// Call given func if any
|
|||
if ( func ) { |
|||
func.call( deferred, deferred ); |
|||
} |
|||
|
|||
// All done!
|
|||
return deferred; |
|||
}, |
|||
|
|||
// Deferred helper
|
|||
when: function( subordinate /* , ..., subordinateN */ ) { |
|||
var i = 0, |
|||
resolveValues = slice.call( arguments ), |
|||
length = resolveValues.length, |
|||
|
|||
// the count of uncompleted subordinates
|
|||
remaining = length !== 1 || |
|||
( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, |
|||
|
|||
// the master Deferred.
|
|||
// If resolveValues consist of only a single Deferred, just use that.
|
|||
deferred = remaining === 1 ? subordinate : jQuery.Deferred(), |
|||
|
|||
// Update function for both resolve and progress values
|
|||
updateFunc = function( i, contexts, values ) { |
|||
return function( value ) { |
|||
contexts[ i ] = this; |
|||
values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; |
|||
if ( values === progressValues ) { |
|||
deferred.notifyWith( contexts, values ); |
|||
} else if ( !( --remaining ) ) { |
|||
deferred.resolveWith( contexts, values ); |
|||
} |
|||
}; |
|||
}, |
|||
|
|||
progressValues, progressContexts, resolveContexts; |
|||
|
|||
// Add listeners to Deferred subordinates; treat others as resolved
|
|||
if ( length > 1 ) { |
|||
progressValues = new Array( length ); |
|||
progressContexts = new Array( length ); |
|||
resolveContexts = new Array( length ); |
|||
for ( ; i < length; i++ ) { |
|||
if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { |
|||
resolveValues[ i ].promise() |
|||
.progress( updateFunc( i, progressContexts, progressValues ) ) |
|||
.done( updateFunc( i, resolveContexts, resolveValues ) ) |
|||
.fail( deferred.reject ); |
|||
} else { |
|||
--remaining; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// If we're not waiting on anything, resolve the master
|
|||
if ( !remaining ) { |
|||
deferred.resolveWith( resolveContexts, resolveValues ); |
|||
} |
|||
|
|||
return deferred.promise(); |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,32 @@ |
|||
define( [ |
|||
"./core" |
|||
], function( jQuery ) { |
|||
|
|||
jQuery.fn.extend( { |
|||
|
|||
bind: function( types, data, fn ) { |
|||
return this.on( types, null, data, fn ); |
|||
}, |
|||
unbind: function( types, fn ) { |
|||
return this.off( types, null, fn ); |
|||
}, |
|||
|
|||
delegate: function( selector, types, data, fn ) { |
|||
return this.on( types, selector, data, fn ); |
|||
}, |
|||
undelegate: function( selector, types, fn ) { |
|||
|
|||
// ( namespace ) or ( selector, types [, fn] )
|
|||
return arguments.length === 1 ? |
|||
this.off( selector, "**" ) : |
|||
this.off( types, selector || "**", fn ); |
|||
}, |
|||
size: function() { |
|||
return this.length; |
|||
} |
|||
} ); |
|||
|
|||
jQuery.fn.andSelf = jQuery.fn.addBack; |
|||
|
|||
} ); |
|||
|
|||
@ -0,0 +1,54 @@ |
|||
define( [ |
|||
"./core", |
|||
"./core/access", |
|||
"./css" |
|||
], function( jQuery, access ) { |
|||
|
|||
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
|
|||
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { |
|||
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, |
|||
function( defaultExtra, funcName ) { |
|||
|
|||
// Margin is only for outerHeight, outerWidth
|
|||
jQuery.fn[ funcName ] = function( margin, value ) { |
|||
var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), |
|||
extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); |
|||
|
|||
return access( this, function( elem, type, value ) { |
|||
var doc; |
|||
|
|||
if ( jQuery.isWindow( elem ) ) { |
|||
|
|||
// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
|
|||
// isn't a whole lot we can do. See pull request at this URL for discussion:
|
|||
// https://github.com/jquery/jquery/pull/764
|
|||
return elem.document.documentElement[ "client" + name ]; |
|||
} |
|||
|
|||
// Get document width or height
|
|||
if ( elem.nodeType === 9 ) { |
|||
doc = elem.documentElement; |
|||
|
|||
// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
|
|||
// whichever is greatest
|
|||
return Math.max( |
|||
elem.body[ "scroll" + name ], doc[ "scroll" + name ], |
|||
elem.body[ "offset" + name ], doc[ "offset" + name ], |
|||
doc[ "client" + name ] |
|||
); |
|||
} |
|||
|
|||
return value === undefined ? |
|||
|
|||
// Get width or height on the element, requesting but not forcing parseFloat
|
|||
jQuery.css( elem, type, extra ) : |
|||
|
|||
// Set width or height on the element
|
|||
jQuery.style( elem, type, value, extra ); |
|||
}, type, chainable ? margin : undefined, chainable, null ); |
|||
}; |
|||
} ); |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,629 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/document", |
|||
"./var/rcssNum", |
|||
"./css/var/cssExpand", |
|||
"./var/rnotwhite", |
|||
"./css/var/isHidden", |
|||
"./css/adjustCSS", |
|||
"./css/defaultDisplay", |
|||
"./data/var/dataPriv", |
|||
|
|||
"./core/init", |
|||
"./effects/Tween", |
|||
"./queue", |
|||
"./css", |
|||
"./deferred", |
|||
"./traversing" |
|||
], function( jQuery, document, rcssNum, cssExpand, rnotwhite, |
|||
isHidden, adjustCSS, defaultDisplay, dataPriv ) { |
|||
|
|||
var |
|||
fxNow, timerId, |
|||
rfxtypes = /^(?:toggle|show|hide)$/, |
|||
rrun = /queueHooks$/; |
|||
|
|||
// Animations created synchronously will run synchronously
|
|||
function createFxNow() { |
|||
window.setTimeout( function() { |
|||
fxNow = undefined; |
|||
} ); |
|||
return ( fxNow = jQuery.now() ); |
|||
} |
|||
|
|||
// Generate parameters to create a standard animation
|
|||
function genFx( type, includeWidth ) { |
|||
var which, |
|||
i = 0, |
|||
attrs = { height: type }; |
|||
|
|||
// If we include width, step value is 1 to do all cssExpand values,
|
|||
// otherwise step value is 2 to skip over Left and Right
|
|||
includeWidth = includeWidth ? 1 : 0; |
|||
for ( ; i < 4 ; i += 2 - includeWidth ) { |
|||
which = cssExpand[ i ]; |
|||
attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; |
|||
} |
|||
|
|||
if ( includeWidth ) { |
|||
attrs.opacity = attrs.width = type; |
|||
} |
|||
|
|||
return attrs; |
|||
} |
|||
|
|||
function createTween( value, prop, animation ) { |
|||
var tween, |
|||
collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), |
|||
index = 0, |
|||
length = collection.length; |
|||
for ( ; index < length; index++ ) { |
|||
if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { |
|||
|
|||
// We're done with this property
|
|||
return tween; |
|||
} |
|||
} |
|||
} |
|||
|
|||
function defaultPrefilter( elem, props, opts ) { |
|||
/* jshint validthis: true */ |
|||
var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, |
|||
anim = this, |
|||
orig = {}, |
|||
style = elem.style, |
|||
hidden = elem.nodeType && isHidden( elem ), |
|||
dataShow = dataPriv.get( elem, "fxshow" ); |
|||
|
|||
// Handle queue: false promises
|
|||
if ( !opts.queue ) { |
|||
hooks = jQuery._queueHooks( elem, "fx" ); |
|||
if ( hooks.unqueued == null ) { |
|||
hooks.unqueued = 0; |
|||
oldfire = hooks.empty.fire; |
|||
hooks.empty.fire = function() { |
|||
if ( !hooks.unqueued ) { |
|||
oldfire(); |
|||
} |
|||
}; |
|||
} |
|||
hooks.unqueued++; |
|||
|
|||
anim.always( function() { |
|||
|
|||
// Ensure the complete handler is called before this completes
|
|||
anim.always( function() { |
|||
hooks.unqueued--; |
|||
if ( !jQuery.queue( elem, "fx" ).length ) { |
|||
hooks.empty.fire(); |
|||
} |
|||
} ); |
|||
} ); |
|||
} |
|||
|
|||
// Height/width overflow pass
|
|||
if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { |
|||
|
|||
// Make sure that nothing sneaks out
|
|||
// Record all 3 overflow attributes because IE9-10 do not
|
|||
// change the overflow attribute when overflowX and
|
|||
// overflowY are set to the same value
|
|||
opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; |
|||
|
|||
// Set display property to inline-block for height/width
|
|||
// animations on inline elements that are having width/height animated
|
|||
display = jQuery.css( elem, "display" ); |
|||
|
|||
// Test default display if display is currently "none"
|
|||
checkDisplay = display === "none" ? |
|||
dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; |
|||
|
|||
if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { |
|||
style.display = "inline-block"; |
|||
} |
|||
} |
|||
|
|||
if ( opts.overflow ) { |
|||
style.overflow = "hidden"; |
|||
anim.always( function() { |
|||
style.overflow = opts.overflow[ 0 ]; |
|||
style.overflowX = opts.overflow[ 1 ]; |
|||
style.overflowY = opts.overflow[ 2 ]; |
|||
} ); |
|||
} |
|||
|
|||
// show/hide pass
|
|||
for ( prop in props ) { |
|||
value = props[ prop ]; |
|||
if ( rfxtypes.exec( value ) ) { |
|||
delete props[ prop ]; |
|||
toggle = toggle || value === "toggle"; |
|||
if ( value === ( hidden ? "hide" : "show" ) ) { |
|||
|
|||
// If there is dataShow left over from a stopped hide or show
|
|||
// and we are going to proceed with show, we should pretend to be hidden
|
|||
if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { |
|||
hidden = true; |
|||
} else { |
|||
continue; |
|||
} |
|||
} |
|||
orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); |
|||
|
|||
// Any non-fx value stops us from restoring the original display value
|
|||
} else { |
|||
display = undefined; |
|||
} |
|||
} |
|||
|
|||
if ( !jQuery.isEmptyObject( orig ) ) { |
|||
if ( dataShow ) { |
|||
if ( "hidden" in dataShow ) { |
|||
hidden = dataShow.hidden; |
|||
} |
|||
} else { |
|||
dataShow = dataPriv.access( elem, "fxshow", {} ); |
|||
} |
|||
|
|||
// Store state if its toggle - enables .stop().toggle() to "reverse"
|
|||
if ( toggle ) { |
|||
dataShow.hidden = !hidden; |
|||
} |
|||
if ( hidden ) { |
|||
jQuery( elem ).show(); |
|||
} else { |
|||
anim.done( function() { |
|||
jQuery( elem ).hide(); |
|||
} ); |
|||
} |
|||
anim.done( function() { |
|||
var prop; |
|||
|
|||
dataPriv.remove( elem, "fxshow" ); |
|||
for ( prop in orig ) { |
|||
jQuery.style( elem, prop, orig[ prop ] ); |
|||
} |
|||
} ); |
|||
for ( prop in orig ) { |
|||
tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); |
|||
|
|||
if ( !( prop in dataShow ) ) { |
|||
dataShow[ prop ] = tween.start; |
|||
if ( hidden ) { |
|||
tween.end = tween.start; |
|||
tween.start = prop === "width" || prop === "height" ? 1 : 0; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// If this is a noop like .hide().hide(), restore an overwritten display value
|
|||
} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) { |
|||
style.display = display; |
|||
} |
|||
} |
|||
|
|||
function propFilter( props, specialEasing ) { |
|||
var index, name, easing, value, hooks; |
|||
|
|||
// camelCase, specialEasing and expand cssHook pass
|
|||
for ( index in props ) { |
|||
name = jQuery.camelCase( index ); |
|||
easing = specialEasing[ name ]; |
|||
value = props[ index ]; |
|||
if ( jQuery.isArray( value ) ) { |
|||
easing = value[ 1 ]; |
|||
value = props[ index ] = value[ 0 ]; |
|||
} |
|||
|
|||
if ( index !== name ) { |
|||
props[ name ] = value; |
|||
delete props[ index ]; |
|||
} |
|||
|
|||
hooks = jQuery.cssHooks[ name ]; |
|||
if ( hooks && "expand" in hooks ) { |
|||
value = hooks.expand( value ); |
|||
delete props[ name ]; |
|||
|
|||
// Not quite $.extend, this won't overwrite existing keys.
|
|||
// Reusing 'index' because we have the correct "name"
|
|||
for ( index in value ) { |
|||
if ( !( index in props ) ) { |
|||
props[ index ] = value[ index ]; |
|||
specialEasing[ index ] = easing; |
|||
} |
|||
} |
|||
} else { |
|||
specialEasing[ name ] = easing; |
|||
} |
|||
} |
|||
} |
|||
|
|||
function Animation( elem, properties, options ) { |
|||
var result, |
|||
stopped, |
|||
index = 0, |
|||
length = Animation.prefilters.length, |
|||
deferred = jQuery.Deferred().always( function() { |
|||
|
|||
// Don't match elem in the :animated selector
|
|||
delete tick.elem; |
|||
} ), |
|||
tick = function() { |
|||
if ( stopped ) { |
|||
return false; |
|||
} |
|||
var currentTime = fxNow || createFxNow(), |
|||
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), |
|||
|
|||
// Support: Android 2.3
|
|||
// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
|
|||
temp = remaining / animation.duration || 0, |
|||
percent = 1 - temp, |
|||
index = 0, |
|||
length = animation.tweens.length; |
|||
|
|||
for ( ; index < length ; index++ ) { |
|||
animation.tweens[ index ].run( percent ); |
|||
} |
|||
|
|||
deferred.notifyWith( elem, [ animation, percent, remaining ] ); |
|||
|
|||
if ( percent < 1 && length ) { |
|||
return remaining; |
|||
} else { |
|||
deferred.resolveWith( elem, [ animation ] ); |
|||
return false; |
|||
} |
|||
}, |
|||
animation = deferred.promise( { |
|||
elem: elem, |
|||
props: jQuery.extend( {}, properties ), |
|||
opts: jQuery.extend( true, { |
|||
specialEasing: {}, |
|||
easing: jQuery.easing._default |
|||
}, options ), |
|||
originalProperties: properties, |
|||
originalOptions: options, |
|||
startTime: fxNow || createFxNow(), |
|||
duration: options.duration, |
|||
tweens: [], |
|||
createTween: function( prop, end ) { |
|||
var tween = jQuery.Tween( elem, animation.opts, prop, end, |
|||
animation.opts.specialEasing[ prop ] || animation.opts.easing ); |
|||
animation.tweens.push( tween ); |
|||
return tween; |
|||
}, |
|||
stop: function( gotoEnd ) { |
|||
var index = 0, |
|||
|
|||
// If we are going to the end, we want to run all the tweens
|
|||
// otherwise we skip this part
|
|||
length = gotoEnd ? animation.tweens.length : 0; |
|||
if ( stopped ) { |
|||
return this; |
|||
} |
|||
stopped = true; |
|||
for ( ; index < length ; index++ ) { |
|||
animation.tweens[ index ].run( 1 ); |
|||
} |
|||
|
|||
// Resolve when we played the last frame; otherwise, reject
|
|||
if ( gotoEnd ) { |
|||
deferred.notifyWith( elem, [ animation, 1, 0 ] ); |
|||
deferred.resolveWith( elem, [ animation, gotoEnd ] ); |
|||
} else { |
|||
deferred.rejectWith( elem, [ animation, gotoEnd ] ); |
|||
} |
|||
return this; |
|||
} |
|||
} ), |
|||
props = animation.props; |
|||
|
|||
propFilter( props, animation.opts.specialEasing ); |
|||
|
|||
for ( ; index < length ; index++ ) { |
|||
result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); |
|||
if ( result ) { |
|||
if ( jQuery.isFunction( result.stop ) ) { |
|||
jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = |
|||
jQuery.proxy( result.stop, result ); |
|||
} |
|||
return result; |
|||
} |
|||
} |
|||
|
|||
jQuery.map( props, createTween, animation ); |
|||
|
|||
if ( jQuery.isFunction( animation.opts.start ) ) { |
|||
animation.opts.start.call( elem, animation ); |
|||
} |
|||
|
|||
jQuery.fx.timer( |
|||
jQuery.extend( tick, { |
|||
elem: elem, |
|||
anim: animation, |
|||
queue: animation.opts.queue |
|||
} ) |
|||
); |
|||
|
|||
// attach callbacks from options
|
|||
return animation.progress( animation.opts.progress ) |
|||
.done( animation.opts.done, animation.opts.complete ) |
|||
.fail( animation.opts.fail ) |
|||
.always( animation.opts.always ); |
|||
} |
|||
|
|||
jQuery.Animation = jQuery.extend( Animation, { |
|||
tweeners: { |
|||
"*": [ function( prop, value ) { |
|||
var tween = this.createTween( prop, value ); |
|||
adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); |
|||
return tween; |
|||
} ] |
|||
}, |
|||
|
|||
tweener: function( props, callback ) { |
|||
if ( jQuery.isFunction( props ) ) { |
|||
callback = props; |
|||
props = [ "*" ]; |
|||
} else { |
|||
props = props.match( rnotwhite ); |
|||
} |
|||
|
|||
var prop, |
|||
index = 0, |
|||
length = props.length; |
|||
|
|||
for ( ; index < length ; index++ ) { |
|||
prop = props[ index ]; |
|||
Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; |
|||
Animation.tweeners[ prop ].unshift( callback ); |
|||
} |
|||
}, |
|||
|
|||
prefilters: [ defaultPrefilter ], |
|||
|
|||
prefilter: function( callback, prepend ) { |
|||
if ( prepend ) { |
|||
Animation.prefilters.unshift( callback ); |
|||
} else { |
|||
Animation.prefilters.push( callback ); |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
jQuery.speed = function( speed, easing, fn ) { |
|||
var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { |
|||
complete: fn || !fn && easing || |
|||
jQuery.isFunction( speed ) && speed, |
|||
duration: speed, |
|||
easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing |
|||
}; |
|||
|
|||
opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? |
|||
opt.duration : opt.duration in jQuery.fx.speeds ? |
|||
jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; |
|||
|
|||
// Normalize opt.queue - true/undefined/null -> "fx"
|
|||
if ( opt.queue == null || opt.queue === true ) { |
|||
opt.queue = "fx"; |
|||
} |
|||
|
|||
// Queueing
|
|||
opt.old = opt.complete; |
|||
|
|||
opt.complete = function() { |
|||
if ( jQuery.isFunction( opt.old ) ) { |
|||
opt.old.call( this ); |
|||
} |
|||
|
|||
if ( opt.queue ) { |
|||
jQuery.dequeue( this, opt.queue ); |
|||
} |
|||
}; |
|||
|
|||
return opt; |
|||
}; |
|||
|
|||
jQuery.fn.extend( { |
|||
fadeTo: function( speed, to, easing, callback ) { |
|||
|
|||
// Show any hidden elements after setting opacity to 0
|
|||
return this.filter( isHidden ).css( "opacity", 0 ).show() |
|||
|
|||
// Animate to the value specified
|
|||
.end().animate( { opacity: to }, speed, easing, callback ); |
|||
}, |
|||
animate: function( prop, speed, easing, callback ) { |
|||
var empty = jQuery.isEmptyObject( prop ), |
|||
optall = jQuery.speed( speed, easing, callback ), |
|||
doAnimation = function() { |
|||
|
|||
// Operate on a copy of prop so per-property easing won't be lost
|
|||
var anim = Animation( this, jQuery.extend( {}, prop ), optall ); |
|||
|
|||
// Empty animations, or finishing resolves immediately
|
|||
if ( empty || dataPriv.get( this, "finish" ) ) { |
|||
anim.stop( true ); |
|||
} |
|||
}; |
|||
doAnimation.finish = doAnimation; |
|||
|
|||
return empty || optall.queue === false ? |
|||
this.each( doAnimation ) : |
|||
this.queue( optall.queue, doAnimation ); |
|||
}, |
|||
stop: function( type, clearQueue, gotoEnd ) { |
|||
var stopQueue = function( hooks ) { |
|||
var stop = hooks.stop; |
|||
delete hooks.stop; |
|||
stop( gotoEnd ); |
|||
}; |
|||
|
|||
if ( typeof type !== "string" ) { |
|||
gotoEnd = clearQueue; |
|||
clearQueue = type; |
|||
type = undefined; |
|||
} |
|||
if ( clearQueue && type !== false ) { |
|||
this.queue( type || "fx", [] ); |
|||
} |
|||
|
|||
return this.each( function() { |
|||
var dequeue = true, |
|||
index = type != null && type + "queueHooks", |
|||
timers = jQuery.timers, |
|||
data = dataPriv.get( this ); |
|||
|
|||
if ( index ) { |
|||
if ( data[ index ] && data[ index ].stop ) { |
|||
stopQueue( data[ index ] ); |
|||
} |
|||
} else { |
|||
for ( index in data ) { |
|||
if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { |
|||
stopQueue( data[ index ] ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
for ( index = timers.length; index--; ) { |
|||
if ( timers[ index ].elem === this && |
|||
( type == null || timers[ index ].queue === type ) ) { |
|||
|
|||
timers[ index ].anim.stop( gotoEnd ); |
|||
dequeue = false; |
|||
timers.splice( index, 1 ); |
|||
} |
|||
} |
|||
|
|||
// Start the next in the queue if the last step wasn't forced.
|
|||
// Timers currently will call their complete callbacks, which
|
|||
// will dequeue but only if they were gotoEnd.
|
|||
if ( dequeue || !gotoEnd ) { |
|||
jQuery.dequeue( this, type ); |
|||
} |
|||
} ); |
|||
}, |
|||
finish: function( type ) { |
|||
if ( type !== false ) { |
|||
type = type || "fx"; |
|||
} |
|||
return this.each( function() { |
|||
var index, |
|||
data = dataPriv.get( this ), |
|||
queue = data[ type + "queue" ], |
|||
hooks = data[ type + "queueHooks" ], |
|||
timers = jQuery.timers, |
|||
length = queue ? queue.length : 0; |
|||
|
|||
// Enable finishing flag on private data
|
|||
data.finish = true; |
|||
|
|||
// Empty the queue first
|
|||
jQuery.queue( this, type, [] ); |
|||
|
|||
if ( hooks && hooks.stop ) { |
|||
hooks.stop.call( this, true ); |
|||
} |
|||
|
|||
// Look for any active animations, and finish them
|
|||
for ( index = timers.length; index--; ) { |
|||
if ( timers[ index ].elem === this && timers[ index ].queue === type ) { |
|||
timers[ index ].anim.stop( true ); |
|||
timers.splice( index, 1 ); |
|||
} |
|||
} |
|||
|
|||
// Look for any animations in the old queue and finish them
|
|||
for ( index = 0; index < length; index++ ) { |
|||
if ( queue[ index ] && queue[ index ].finish ) { |
|||
queue[ index ].finish.call( this ); |
|||
} |
|||
} |
|||
|
|||
// Turn off finishing flag
|
|||
delete data.finish; |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { |
|||
var cssFn = jQuery.fn[ name ]; |
|||
jQuery.fn[ name ] = function( speed, easing, callback ) { |
|||
return speed == null || typeof speed === "boolean" ? |
|||
cssFn.apply( this, arguments ) : |
|||
this.animate( genFx( name, true ), speed, easing, callback ); |
|||
}; |
|||
} ); |
|||
|
|||
// Generate shortcuts for custom animations
|
|||
jQuery.each( { |
|||
slideDown: genFx( "show" ), |
|||
slideUp: genFx( "hide" ), |
|||
slideToggle: genFx( "toggle" ), |
|||
fadeIn: { opacity: "show" }, |
|||
fadeOut: { opacity: "hide" }, |
|||
fadeToggle: { opacity: "toggle" } |
|||
}, function( name, props ) { |
|||
jQuery.fn[ name ] = function( speed, easing, callback ) { |
|||
return this.animate( props, speed, easing, callback ); |
|||
}; |
|||
} ); |
|||
|
|||
jQuery.timers = []; |
|||
jQuery.fx.tick = function() { |
|||
var timer, |
|||
i = 0, |
|||
timers = jQuery.timers; |
|||
|
|||
fxNow = jQuery.now(); |
|||
|
|||
for ( ; i < timers.length; i++ ) { |
|||
timer = timers[ i ]; |
|||
|
|||
// Checks the timer has not already been removed
|
|||
if ( !timer() && timers[ i ] === timer ) { |
|||
timers.splice( i--, 1 ); |
|||
} |
|||
} |
|||
|
|||
if ( !timers.length ) { |
|||
jQuery.fx.stop(); |
|||
} |
|||
fxNow = undefined; |
|||
}; |
|||
|
|||
jQuery.fx.timer = function( timer ) { |
|||
jQuery.timers.push( timer ); |
|||
if ( timer() ) { |
|||
jQuery.fx.start(); |
|||
} else { |
|||
jQuery.timers.pop(); |
|||
} |
|||
}; |
|||
|
|||
jQuery.fx.interval = 13; |
|||
jQuery.fx.start = function() { |
|||
if ( !timerId ) { |
|||
timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); |
|||
} |
|||
}; |
|||
|
|||
jQuery.fx.stop = function() { |
|||
window.clearInterval( timerId ); |
|||
|
|||
timerId = null; |
|||
}; |
|||
|
|||
jQuery.fx.speeds = { |
|||
slow: 600, |
|||
fast: 200, |
|||
|
|||
// Default speed
|
|||
_default: 400 |
|||
}; |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,121 @@ |
|||
define( [ |
|||
"../core", |
|||
"../css" |
|||
], function( jQuery ) { |
|||
|
|||
function Tween( elem, options, prop, end, easing ) { |
|||
return new Tween.prototype.init( elem, options, prop, end, easing ); |
|||
} |
|||
jQuery.Tween = Tween; |
|||
|
|||
Tween.prototype = { |
|||
constructor: Tween, |
|||
init: function( elem, options, prop, end, easing, unit ) { |
|||
this.elem = elem; |
|||
this.prop = prop; |
|||
this.easing = easing || jQuery.easing._default; |
|||
this.options = options; |
|||
this.start = this.now = this.cur(); |
|||
this.end = end; |
|||
this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); |
|||
}, |
|||
cur: function() { |
|||
var hooks = Tween.propHooks[ this.prop ]; |
|||
|
|||
return hooks && hooks.get ? |
|||
hooks.get( this ) : |
|||
Tween.propHooks._default.get( this ); |
|||
}, |
|||
run: function( percent ) { |
|||
var eased, |
|||
hooks = Tween.propHooks[ this.prop ]; |
|||
|
|||
if ( this.options.duration ) { |
|||
this.pos = eased = jQuery.easing[ this.easing ]( |
|||
percent, this.options.duration * percent, 0, 1, this.options.duration |
|||
); |
|||
} else { |
|||
this.pos = eased = percent; |
|||
} |
|||
this.now = ( this.end - this.start ) * eased + this.start; |
|||
|
|||
if ( this.options.step ) { |
|||
this.options.step.call( this.elem, this.now, this ); |
|||
} |
|||
|
|||
if ( hooks && hooks.set ) { |
|||
hooks.set( this ); |
|||
} else { |
|||
Tween.propHooks._default.set( this ); |
|||
} |
|||
return this; |
|||
} |
|||
}; |
|||
|
|||
Tween.prototype.init.prototype = Tween.prototype; |
|||
|
|||
Tween.propHooks = { |
|||
_default: { |
|||
get: function( tween ) { |
|||
var result; |
|||
|
|||
// Use a property on the element directly when it is not a DOM element,
|
|||
// or when there is no matching style property that exists.
|
|||
if ( tween.elem.nodeType !== 1 || |
|||
tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { |
|||
return tween.elem[ tween.prop ]; |
|||
} |
|||
|
|||
// Passing an empty string as a 3rd parameter to .css will automatically
|
|||
// attempt a parseFloat and fallback to a string if the parse fails.
|
|||
// Simple values such as "10px" are parsed to Float;
|
|||
// complex values such as "rotate(1rad)" are returned as-is.
|
|||
result = jQuery.css( tween.elem, tween.prop, "" ); |
|||
|
|||
// Empty strings, null, undefined and "auto" are converted to 0.
|
|||
return !result || result === "auto" ? 0 : result; |
|||
}, |
|||
set: function( tween ) { |
|||
|
|||
// Use step hook for back compat.
|
|||
// Use cssHook if its there.
|
|||
// Use .style if available and use plain properties where available.
|
|||
if ( jQuery.fx.step[ tween.prop ] ) { |
|||
jQuery.fx.step[ tween.prop ]( tween ); |
|||
} else if ( tween.elem.nodeType === 1 && |
|||
( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || |
|||
jQuery.cssHooks[ tween.prop ] ) ) { |
|||
jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); |
|||
} else { |
|||
tween.elem[ tween.prop ] = tween.now; |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
|
|||
// Support: IE9
|
|||
// Panic based approach to setting things on disconnected nodes
|
|||
Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { |
|||
set: function( tween ) { |
|||
if ( tween.elem.nodeType && tween.elem.parentNode ) { |
|||
tween.elem[ tween.prop ] = tween.now; |
|||
} |
|||
} |
|||
}; |
|||
|
|||
jQuery.easing = { |
|||
linear: function( p ) { |
|||
return p; |
|||
}, |
|||
swing: function( p ) { |
|||
return 0.5 - Math.cos( p * Math.PI ) / 2; |
|||
}, |
|||
_default: "swing" |
|||
}; |
|||
|
|||
jQuery.fx = Tween.prototype.init; |
|||
|
|||
// Back Compat <1.8 extension point
|
|||
jQuery.fx.step = {}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,13 @@ |
|||
define( [ |
|||
"../core", |
|||
"../selector", |
|||
"../effects" |
|||
], function( jQuery ) { |
|||
|
|||
jQuery.expr.filters.animated = function( elem ) { |
|||
return jQuery.grep( jQuery.timers, function( fn ) { |
|||
return elem === fn.elem; |
|||
} ).length; |
|||
}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,711 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/document", |
|||
"./var/rnotwhite", |
|||
"./var/slice", |
|||
"./data/var/dataPriv", |
|||
|
|||
"./core/init", |
|||
"./selector" |
|||
], function( jQuery, document, rnotwhite, slice, dataPriv ) { |
|||
|
|||
var |
|||
rkeyEvent = /^key/, |
|||
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, |
|||
rtypenamespace = /^([^.]*)(?:\.(.+)|)/; |
|||
|
|||
function returnTrue() { |
|||
return true; |
|||
} |
|||
|
|||
function returnFalse() { |
|||
return false; |
|||
} |
|||
|
|||
// Support: IE9
|
|||
// See #13393 for more info
|
|||
function safeActiveElement() { |
|||
try { |
|||
return document.activeElement; |
|||
} catch ( err ) { } |
|||
} |
|||
|
|||
function on( elem, types, selector, data, fn, one ) { |
|||
var origFn, type; |
|||
|
|||
// Types can be a map of types/handlers
|
|||
if ( typeof types === "object" ) { |
|||
|
|||
// ( types-Object, selector, data )
|
|||
if ( typeof selector !== "string" ) { |
|||
|
|||
// ( types-Object, data )
|
|||
data = data || selector; |
|||
selector = undefined; |
|||
} |
|||
for ( type in types ) { |
|||
on( elem, type, selector, data, types[ type ], one ); |
|||
} |
|||
return elem; |
|||
} |
|||
|
|||
if ( data == null && fn == null ) { |
|||
|
|||
// ( types, fn )
|
|||
fn = selector; |
|||
data = selector = undefined; |
|||
} else if ( fn == null ) { |
|||
if ( typeof selector === "string" ) { |
|||
|
|||
// ( types, selector, fn )
|
|||
fn = data; |
|||
data = undefined; |
|||
} else { |
|||
|
|||
// ( types, data, fn )
|
|||
fn = data; |
|||
data = selector; |
|||
selector = undefined; |
|||
} |
|||
} |
|||
if ( fn === false ) { |
|||
fn = returnFalse; |
|||
} else if ( !fn ) { |
|||
return elem; |
|||
} |
|||
|
|||
if ( one === 1 ) { |
|||
origFn = fn; |
|||
fn = function( event ) { |
|||
|
|||
// Can use an empty set, since event contains the info
|
|||
jQuery().off( event ); |
|||
return origFn.apply( this, arguments ); |
|||
}; |
|||
|
|||
// Use same guid so caller can remove using origFn
|
|||
fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); |
|||
} |
|||
return elem.each( function() { |
|||
jQuery.event.add( this, types, fn, data, selector ); |
|||
} ); |
|||
} |
|||
|
|||
/* |
|||
* Helper functions for managing events -- not part of the public interface. |
|||
* Props to Dean Edwards' addEvent library for many of the ideas. |
|||
*/ |
|||
jQuery.event = { |
|||
|
|||
global: {}, |
|||
|
|||
add: function( elem, types, handler, data, selector ) { |
|||
|
|||
var handleObjIn, eventHandle, tmp, |
|||
events, t, handleObj, |
|||
special, handlers, type, namespaces, origType, |
|||
elemData = dataPriv.get( elem ); |
|||
|
|||
// Don't attach events to noData or text/comment nodes (but allow plain objects)
|
|||
if ( !elemData ) { |
|||
return; |
|||
} |
|||
|
|||
// Caller can pass in an object of custom data in lieu of the handler
|
|||
if ( handler.handler ) { |
|||
handleObjIn = handler; |
|||
handler = handleObjIn.handler; |
|||
selector = handleObjIn.selector; |
|||
} |
|||
|
|||
// Make sure that the handler has a unique ID, used to find/remove it later
|
|||
if ( !handler.guid ) { |
|||
handler.guid = jQuery.guid++; |
|||
} |
|||
|
|||
// Init the element's event structure and main handler, if this is the first
|
|||
if ( !( events = elemData.events ) ) { |
|||
events = elemData.events = {}; |
|||
} |
|||
if ( !( eventHandle = elemData.handle ) ) { |
|||
eventHandle = elemData.handle = function( e ) { |
|||
|
|||
// Discard the second event of a jQuery.event.trigger() and
|
|||
// when an event is called after a page has unloaded
|
|||
return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? |
|||
jQuery.event.dispatch.apply( elem, arguments ) : undefined; |
|||
}; |
|||
} |
|||
|
|||
// Handle multiple events separated by a space
|
|||
types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|||
t = types.length; |
|||
while ( t-- ) { |
|||
tmp = rtypenamespace.exec( types[ t ] ) || []; |
|||
type = origType = tmp[ 1 ]; |
|||
namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
|||
|
|||
// There *must* be a type, no attaching namespace-only handlers
|
|||
if ( !type ) { |
|||
continue; |
|||
} |
|||
|
|||
// If event changes its type, use the special event handlers for the changed type
|
|||
special = jQuery.event.special[ type ] || {}; |
|||
|
|||
// If selector defined, determine special event api type, otherwise given type
|
|||
type = ( selector ? special.delegateType : special.bindType ) || type; |
|||
|
|||
// Update special based on newly reset type
|
|||
special = jQuery.event.special[ type ] || {}; |
|||
|
|||
// handleObj is passed to all event handlers
|
|||
handleObj = jQuery.extend( { |
|||
type: type, |
|||
origType: origType, |
|||
data: data, |
|||
handler: handler, |
|||
guid: handler.guid, |
|||
selector: selector, |
|||
needsContext: selector && jQuery.expr.match.needsContext.test( selector ), |
|||
namespace: namespaces.join( "." ) |
|||
}, handleObjIn ); |
|||
|
|||
// Init the event handler queue if we're the first
|
|||
if ( !( handlers = events[ type ] ) ) { |
|||
handlers = events[ type ] = []; |
|||
handlers.delegateCount = 0; |
|||
|
|||
// Only use addEventListener if the special events handler returns false
|
|||
if ( !special.setup || |
|||
special.setup.call( elem, data, namespaces, eventHandle ) === false ) { |
|||
|
|||
if ( elem.addEventListener ) { |
|||
elem.addEventListener( type, eventHandle ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
if ( special.add ) { |
|||
special.add.call( elem, handleObj ); |
|||
|
|||
if ( !handleObj.handler.guid ) { |
|||
handleObj.handler.guid = handler.guid; |
|||
} |
|||
} |
|||
|
|||
// Add to the element's handler list, delegates in front
|
|||
if ( selector ) { |
|||
handlers.splice( handlers.delegateCount++, 0, handleObj ); |
|||
} else { |
|||
handlers.push( handleObj ); |
|||
} |
|||
|
|||
// Keep track of which events have ever been used, for event optimization
|
|||
jQuery.event.global[ type ] = true; |
|||
} |
|||
|
|||
}, |
|||
|
|||
// Detach an event or set of events from an element
|
|||
remove: function( elem, types, handler, selector, mappedTypes ) { |
|||
|
|||
var j, origCount, tmp, |
|||
events, t, handleObj, |
|||
special, handlers, type, namespaces, origType, |
|||
elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); |
|||
|
|||
if ( !elemData || !( events = elemData.events ) ) { |
|||
return; |
|||
} |
|||
|
|||
// Once for each type.namespace in types; type may be omitted
|
|||
types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|||
t = types.length; |
|||
while ( t-- ) { |
|||
tmp = rtypenamespace.exec( types[ t ] ) || []; |
|||
type = origType = tmp[ 1 ]; |
|||
namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
|||
|
|||
// Unbind all events (on this namespace, if provided) for the element
|
|||
if ( !type ) { |
|||
for ( type in events ) { |
|||
jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|||
} |
|||
continue; |
|||
} |
|||
|
|||
special = jQuery.event.special[ type ] || {}; |
|||
type = ( selector ? special.delegateType : special.bindType ) || type; |
|||
handlers = events[ type ] || []; |
|||
tmp = tmp[ 2 ] && |
|||
new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); |
|||
|
|||
// Remove matching events
|
|||
origCount = j = handlers.length; |
|||
while ( j-- ) { |
|||
handleObj = handlers[ j ]; |
|||
|
|||
if ( ( mappedTypes || origType === handleObj.origType ) && |
|||
( !handler || handler.guid === handleObj.guid ) && |
|||
( !tmp || tmp.test( handleObj.namespace ) ) && |
|||
( !selector || selector === handleObj.selector || |
|||
selector === "**" && handleObj.selector ) ) { |
|||
handlers.splice( j, 1 ); |
|||
|
|||
if ( handleObj.selector ) { |
|||
handlers.delegateCount--; |
|||
} |
|||
if ( special.remove ) { |
|||
special.remove.call( elem, handleObj ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Remove generic event handler if we removed something and no more handlers exist
|
|||
// (avoids potential for endless recursion during removal of special event handlers)
|
|||
if ( origCount && !handlers.length ) { |
|||
if ( !special.teardown || |
|||
special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|||
|
|||
jQuery.removeEvent( elem, type, elemData.handle ); |
|||
} |
|||
|
|||
delete events[ type ]; |
|||
} |
|||
} |
|||
|
|||
// Remove data and the expando if it's no longer used
|
|||
if ( jQuery.isEmptyObject( events ) ) { |
|||
dataPriv.remove( elem, "handle events" ); |
|||
} |
|||
}, |
|||
|
|||
dispatch: function( event ) { |
|||
|
|||
// Make a writable jQuery.Event from the native event object
|
|||
event = jQuery.event.fix( event ); |
|||
|
|||
var i, j, ret, matched, handleObj, |
|||
handlerQueue = [], |
|||
args = slice.call( arguments ), |
|||
handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], |
|||
special = jQuery.event.special[ event.type ] || {}; |
|||
|
|||
// Use the fix-ed jQuery.Event rather than the (read-only) native event
|
|||
args[ 0 ] = event; |
|||
event.delegateTarget = this; |
|||
|
|||
// Call the preDispatch hook for the mapped type, and let it bail if desired
|
|||
if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { |
|||
return; |
|||
} |
|||
|
|||
// Determine handlers
|
|||
handlerQueue = jQuery.event.handlers.call( this, event, handlers ); |
|||
|
|||
// Run delegates first; they may want to stop propagation beneath us
|
|||
i = 0; |
|||
while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { |
|||
event.currentTarget = matched.elem; |
|||
|
|||
j = 0; |
|||
while ( ( handleObj = matched.handlers[ j++ ] ) && |
|||
!event.isImmediatePropagationStopped() ) { |
|||
|
|||
// Triggered event must either 1) have no namespace, or 2) have namespace(s)
|
|||
// a subset or equal to those in the bound event (both can have no namespace).
|
|||
if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { |
|||
|
|||
event.handleObj = handleObj; |
|||
event.data = handleObj.data; |
|||
|
|||
ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || |
|||
handleObj.handler ).apply( matched.elem, args ); |
|||
|
|||
if ( ret !== undefined ) { |
|||
if ( ( event.result = ret ) === false ) { |
|||
event.preventDefault(); |
|||
event.stopPropagation(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Call the postDispatch hook for the mapped type
|
|||
if ( special.postDispatch ) { |
|||
special.postDispatch.call( this, event ); |
|||
} |
|||
|
|||
return event.result; |
|||
}, |
|||
|
|||
handlers: function( event, handlers ) { |
|||
var i, matches, sel, handleObj, |
|||
handlerQueue = [], |
|||
delegateCount = handlers.delegateCount, |
|||
cur = event.target; |
|||
|
|||
// Support (at least): Chrome, IE9
|
|||
// Find delegate handlers
|
|||
// Black-hole SVG <use> instance trees (#13180)
|
|||
//
|
|||
// Support: Firefox<=42+
|
|||
// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
|
|||
if ( delegateCount && cur.nodeType && |
|||
( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { |
|||
|
|||
for ( ; cur !== this; cur = cur.parentNode || this ) { |
|||
|
|||
// Don't check non-elements (#13208)
|
|||
// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
|
|||
if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { |
|||
matches = []; |
|||
for ( i = 0; i < delegateCount; i++ ) { |
|||
handleObj = handlers[ i ]; |
|||
|
|||
// Don't conflict with Object.prototype properties (#13203)
|
|||
sel = handleObj.selector + " "; |
|||
|
|||
if ( matches[ sel ] === undefined ) { |
|||
matches[ sel ] = handleObj.needsContext ? |
|||
jQuery( sel, this ).index( cur ) > -1 : |
|||
jQuery.find( sel, this, null, [ cur ] ).length; |
|||
} |
|||
if ( matches[ sel ] ) { |
|||
matches.push( handleObj ); |
|||
} |
|||
} |
|||
if ( matches.length ) { |
|||
handlerQueue.push( { elem: cur, handlers: matches } ); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Add the remaining (directly-bound) handlers
|
|||
if ( delegateCount < handlers.length ) { |
|||
handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); |
|||
} |
|||
|
|||
return handlerQueue; |
|||
}, |
|||
|
|||
// Includes some event props shared by KeyEvent and MouseEvent
|
|||
props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + |
|||
"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), |
|||
|
|||
fixHooks: {}, |
|||
|
|||
keyHooks: { |
|||
props: "char charCode key keyCode".split( " " ), |
|||
filter: function( event, original ) { |
|||
|
|||
// Add which for key events
|
|||
if ( event.which == null ) { |
|||
event.which = original.charCode != null ? original.charCode : original.keyCode; |
|||
} |
|||
|
|||
return event; |
|||
} |
|||
}, |
|||
|
|||
mouseHooks: { |
|||
props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + |
|||
"screenX screenY toElement" ).split( " " ), |
|||
filter: function( event, original ) { |
|||
var eventDoc, doc, body, |
|||
button = original.button; |
|||
|
|||
// Calculate pageX/Y if missing and clientX/Y available
|
|||
if ( event.pageX == null && original.clientX != null ) { |
|||
eventDoc = event.target.ownerDocument || document; |
|||
doc = eventDoc.documentElement; |
|||
body = eventDoc.body; |
|||
|
|||
event.pageX = original.clientX + |
|||
( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - |
|||
( doc && doc.clientLeft || body && body.clientLeft || 0 ); |
|||
event.pageY = original.clientY + |
|||
( doc && doc.scrollTop || body && body.scrollTop || 0 ) - |
|||
( doc && doc.clientTop || body && body.clientTop || 0 ); |
|||
} |
|||
|
|||
// Add which for click: 1 === left; 2 === middle; 3 === right
|
|||
// Note: button is not normalized, so don't use it
|
|||
if ( !event.which && button !== undefined ) { |
|||
event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); |
|||
} |
|||
|
|||
return event; |
|||
} |
|||
}, |
|||
|
|||
fix: function( event ) { |
|||
if ( event[ jQuery.expando ] ) { |
|||
return event; |
|||
} |
|||
|
|||
// Create a writable copy of the event object and normalize some properties
|
|||
var i, prop, copy, |
|||
type = event.type, |
|||
originalEvent = event, |
|||
fixHook = this.fixHooks[ type ]; |
|||
|
|||
if ( !fixHook ) { |
|||
this.fixHooks[ type ] = fixHook = |
|||
rmouseEvent.test( type ) ? this.mouseHooks : |
|||
rkeyEvent.test( type ) ? this.keyHooks : |
|||
{}; |
|||
} |
|||
copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; |
|||
|
|||
event = new jQuery.Event( originalEvent ); |
|||
|
|||
i = copy.length; |
|||
while ( i-- ) { |
|||
prop = copy[ i ]; |
|||
event[ prop ] = originalEvent[ prop ]; |
|||
} |
|||
|
|||
// Support: Cordova 2.5 (WebKit) (#13255)
|
|||
// All events should have a target; Cordova deviceready doesn't
|
|||
if ( !event.target ) { |
|||
event.target = document; |
|||
} |
|||
|
|||
// Support: Safari 6.0+, Chrome<28
|
|||
// Target should not be a text node (#504, #13143)
|
|||
if ( event.target.nodeType === 3 ) { |
|||
event.target = event.target.parentNode; |
|||
} |
|||
|
|||
return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; |
|||
}, |
|||
|
|||
special: { |
|||
load: { |
|||
|
|||
// Prevent triggered image.load events from bubbling to window.load
|
|||
noBubble: true |
|||
}, |
|||
focus: { |
|||
|
|||
// Fire native event if possible so blur/focus sequence is correct
|
|||
trigger: function() { |
|||
if ( this !== safeActiveElement() && this.focus ) { |
|||
this.focus(); |
|||
return false; |
|||
} |
|||
}, |
|||
delegateType: "focusin" |
|||
}, |
|||
blur: { |
|||
trigger: function() { |
|||
if ( this === safeActiveElement() && this.blur ) { |
|||
this.blur(); |
|||
return false; |
|||
} |
|||
}, |
|||
delegateType: "focusout" |
|||
}, |
|||
click: { |
|||
|
|||
// For checkbox, fire native event so checked state will be right
|
|||
trigger: function() { |
|||
if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { |
|||
this.click(); |
|||
return false; |
|||
} |
|||
}, |
|||
|
|||
// For cross-browser consistency, don't fire native .click() on links
|
|||
_default: function( event ) { |
|||
return jQuery.nodeName( event.target, "a" ); |
|||
} |
|||
}, |
|||
|
|||
beforeunload: { |
|||
postDispatch: function( event ) { |
|||
|
|||
// Support: Firefox 20+
|
|||
// Firefox doesn't alert if the returnValue field is not set.
|
|||
if ( event.result !== undefined && event.originalEvent ) { |
|||
event.originalEvent.returnValue = event.result; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
|
|||
jQuery.removeEvent = function( elem, type, handle ) { |
|||
|
|||
// This "if" is needed for plain objects
|
|||
if ( elem.removeEventListener ) { |
|||
elem.removeEventListener( type, handle ); |
|||
} |
|||
}; |
|||
|
|||
jQuery.Event = function( src, props ) { |
|||
|
|||
// Allow instantiation without the 'new' keyword
|
|||
if ( !( this instanceof jQuery.Event ) ) { |
|||
return new jQuery.Event( src, props ); |
|||
} |
|||
|
|||
// Event object
|
|||
if ( src && src.type ) { |
|||
this.originalEvent = src; |
|||
this.type = src.type; |
|||
|
|||
// Events bubbling up the document may have been marked as prevented
|
|||
// by a handler lower down the tree; reflect the correct value.
|
|||
this.isDefaultPrevented = src.defaultPrevented || |
|||
src.defaultPrevented === undefined && |
|||
|
|||
// Support: Android<4.0
|
|||
src.returnValue === false ? |
|||
returnTrue : |
|||
returnFalse; |
|||
|
|||
// Event type
|
|||
} else { |
|||
this.type = src; |
|||
} |
|||
|
|||
// Put explicitly provided properties onto the event object
|
|||
if ( props ) { |
|||
jQuery.extend( this, props ); |
|||
} |
|||
|
|||
// Create a timestamp if incoming event doesn't have one
|
|||
this.timeStamp = src && src.timeStamp || jQuery.now(); |
|||
|
|||
// Mark it as fixed
|
|||
this[ jQuery.expando ] = true; |
|||
}; |
|||
|
|||
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
|
|||
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
|
|||
jQuery.Event.prototype = { |
|||
constructor: jQuery.Event, |
|||
isDefaultPrevented: returnFalse, |
|||
isPropagationStopped: returnFalse, |
|||
isImmediatePropagationStopped: returnFalse, |
|||
isSimulated: false, |
|||
|
|||
preventDefault: function() { |
|||
var e = this.originalEvent; |
|||
|
|||
this.isDefaultPrevented = returnTrue; |
|||
|
|||
if ( e && !this.isSimulated ) { |
|||
e.preventDefault(); |
|||
} |
|||
}, |
|||
stopPropagation: function() { |
|||
var e = this.originalEvent; |
|||
|
|||
this.isPropagationStopped = returnTrue; |
|||
|
|||
if ( e && !this.isSimulated ) { |
|||
e.stopPropagation(); |
|||
} |
|||
}, |
|||
stopImmediatePropagation: function() { |
|||
var e = this.originalEvent; |
|||
|
|||
this.isImmediatePropagationStopped = returnTrue; |
|||
|
|||
if ( e && !this.isSimulated ) { |
|||
e.stopImmediatePropagation(); |
|||
} |
|||
|
|||
this.stopPropagation(); |
|||
} |
|||
}; |
|||
|
|||
// Create mouseenter/leave events using mouseover/out and event-time checks
|
|||
// so that event delegation works in jQuery.
|
|||
// Do the same for pointerenter/pointerleave and pointerover/pointerout
|
|||
//
|
|||
// Support: Safari 7 only
|
|||
// Safari sends mouseenter too often; see:
|
|||
// https://code.google.com/p/chromium/issues/detail?id=470258
|
|||
// for the description of the bug (it existed in older Chrome versions as well).
|
|||
jQuery.each( { |
|||
mouseenter: "mouseover", |
|||
mouseleave: "mouseout", |
|||
pointerenter: "pointerover", |
|||
pointerleave: "pointerout" |
|||
}, function( orig, fix ) { |
|||
jQuery.event.special[ orig ] = { |
|||
delegateType: fix, |
|||
bindType: fix, |
|||
|
|||
handle: function( event ) { |
|||
var ret, |
|||
target = this, |
|||
related = event.relatedTarget, |
|||
handleObj = event.handleObj; |
|||
|
|||
// For mouseenter/leave call the handler if related is outside the target.
|
|||
// NB: No relatedTarget if the mouse left/entered the browser window
|
|||
if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { |
|||
event.type = handleObj.origType; |
|||
ret = handleObj.handler.apply( this, arguments ); |
|||
event.type = fix; |
|||
} |
|||
return ret; |
|||
} |
|||
}; |
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
on: function( types, selector, data, fn ) { |
|||
return on( this, types, selector, data, fn ); |
|||
}, |
|||
one: function( types, selector, data, fn ) { |
|||
return on( this, types, selector, data, fn, 1 ); |
|||
}, |
|||
off: function( types, selector, fn ) { |
|||
var handleObj, type; |
|||
if ( types && types.preventDefault && types.handleObj ) { |
|||
|
|||
// ( event ) dispatched jQuery.Event
|
|||
handleObj = types.handleObj; |
|||
jQuery( types.delegateTarget ).off( |
|||
handleObj.namespace ? |
|||
handleObj.origType + "." + handleObj.namespace : |
|||
handleObj.origType, |
|||
handleObj.selector, |
|||
handleObj.handler |
|||
); |
|||
return this; |
|||
} |
|||
if ( typeof types === "object" ) { |
|||
|
|||
// ( types-object [, selector] )
|
|||
for ( type in types ) { |
|||
this.off( type, selector, types[ type ] ); |
|||
} |
|||
return this; |
|||
} |
|||
if ( selector === false || typeof selector === "function" ) { |
|||
|
|||
// ( types [, fn] )
|
|||
fn = selector; |
|||
selector = undefined; |
|||
} |
|||
if ( fn === false ) { |
|||
fn = returnFalse; |
|||
} |
|||
return this.each( function() { |
|||
jQuery.event.remove( this, types, fn, selector ); |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,20 @@ |
|||
define( [ |
|||
"../core", |
|||
"../event" |
|||
], function( jQuery ) { |
|||
|
|||
// Attach a bunch of functions for handling common AJAX events
|
|||
jQuery.each( [ |
|||
"ajaxStart", |
|||
"ajaxStop", |
|||
"ajaxComplete", |
|||
"ajaxError", |
|||
"ajaxSuccess", |
|||
"ajaxSend" |
|||
], function( i, type ) { |
|||
jQuery.fn[ type ] = function( fn ) { |
|||
return this.on( type, fn ); |
|||
}; |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,27 @@ |
|||
define( [ |
|||
"../core", |
|||
|
|||
"../event", |
|||
"./trigger" |
|||
], function( jQuery ) { |
|||
|
|||
jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + |
|||
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + |
|||
"change select submit keydown keypress keyup error contextmenu" ).split( " " ), |
|||
function( i, name ) { |
|||
|
|||
// Handle event binding
|
|||
jQuery.fn[ name ] = function( data, fn ) { |
|||
return arguments.length > 0 ? |
|||
this.on( name, null, data, fn ) : |
|||
this.trigger( name ); |
|||
}; |
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
hover: function( fnOver, fnOut ) { |
|||
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,53 @@ |
|||
define( [ |
|||
"../core", |
|||
"../data/var/dataPriv", |
|||
"./support", |
|||
|
|||
"../event", |
|||
"./trigger" |
|||
], function( jQuery, dataPriv, support ) { |
|||
|
|||
// Support: Firefox
|
|||
// Firefox doesn't have focus(in | out) events
|
|||
// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
|
|||
//
|
|||
// Support: Chrome, Safari
|
|||
// focus(in | out) events fire after focus & blur events,
|
|||
// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
|
|||
// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
|
|||
if ( !support.focusin ) { |
|||
jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { |
|||
|
|||
// Attach a single capturing handler on the document while someone wants focusin/focusout
|
|||
var handler = function( event ) { |
|||
jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); |
|||
}; |
|||
|
|||
jQuery.event.special[ fix ] = { |
|||
setup: function() { |
|||
var doc = this.ownerDocument || this, |
|||
attaches = dataPriv.access( doc, fix ); |
|||
|
|||
if ( !attaches ) { |
|||
doc.addEventListener( orig, handler, true ); |
|||
} |
|||
dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); |
|||
}, |
|||
teardown: function() { |
|||
var doc = this.ownerDocument || this, |
|||
attaches = dataPriv.access( doc, fix ) - 1; |
|||
|
|||
if ( !attaches ) { |
|||
doc.removeEventListener( orig, handler, true ); |
|||
dataPriv.remove( doc, fix ); |
|||
|
|||
} else { |
|||
dataPriv.access( doc, fix, attaches ); |
|||
} |
|||
} |
|||
}; |
|||
} ); |
|||
} |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,9 @@ |
|||
define( [ |
|||
"../var/support" |
|||
], function( support ) { |
|||
|
|||
support.focusin = "onfocusin" in window; |
|||
|
|||
return support; |
|||
|
|||
} ); |
|||
@ -0,0 +1,183 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/document", |
|||
"../data/var/dataPriv", |
|||
"../data/var/acceptData", |
|||
"../var/hasOwn", |
|||
|
|||
"../event" |
|||
], function( jQuery, document, dataPriv, acceptData, hasOwn ) { |
|||
|
|||
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; |
|||
|
|||
jQuery.extend( jQuery.event, { |
|||
|
|||
trigger: function( event, data, elem, onlyHandlers ) { |
|||
|
|||
var i, cur, tmp, bubbleType, ontype, handle, special, |
|||
eventPath = [ elem || document ], |
|||
type = hasOwn.call( event, "type" ) ? event.type : event, |
|||
namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; |
|||
|
|||
cur = tmp = elem = elem || document; |
|||
|
|||
// Don't do events on text and comment nodes
|
|||
if ( elem.nodeType === 3 || elem.nodeType === 8 ) { |
|||
return; |
|||
} |
|||
|
|||
// focus/blur morphs to focusin/out; ensure we're not firing them right now
|
|||
if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { |
|||
return; |
|||
} |
|||
|
|||
if ( type.indexOf( "." ) > -1 ) { |
|||
|
|||
// Namespaced trigger; create a regexp to match event type in handle()
|
|||
namespaces = type.split( "." ); |
|||
type = namespaces.shift(); |
|||
namespaces.sort(); |
|||
} |
|||
ontype = type.indexOf( ":" ) < 0 && "on" + type; |
|||
|
|||
// Caller can pass in a jQuery.Event object, Object, or just an event type string
|
|||
event = event[ jQuery.expando ] ? |
|||
event : |
|||
new jQuery.Event( type, typeof event === "object" && event ); |
|||
|
|||
// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
|
|||
event.isTrigger = onlyHandlers ? 2 : 3; |
|||
event.namespace = namespaces.join( "." ); |
|||
event.rnamespace = event.namespace ? |
|||
new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : |
|||
null; |
|||
|
|||
// Clean up the event in case it is being reused
|
|||
event.result = undefined; |
|||
if ( !event.target ) { |
|||
event.target = elem; |
|||
} |
|||
|
|||
// Clone any incoming data and prepend the event, creating the handler arg list
|
|||
data = data == null ? |
|||
[ event ] : |
|||
jQuery.makeArray( data, [ event ] ); |
|||
|
|||
// Allow special events to draw outside the lines
|
|||
special = jQuery.event.special[ type ] || {}; |
|||
if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { |
|||
return; |
|||
} |
|||
|
|||
// Determine event propagation path in advance, per W3C events spec (#9951)
|
|||
// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
|
|||
if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { |
|||
|
|||
bubbleType = special.delegateType || type; |
|||
if ( !rfocusMorph.test( bubbleType + type ) ) { |
|||
cur = cur.parentNode; |
|||
} |
|||
for ( ; cur; cur = cur.parentNode ) { |
|||
eventPath.push( cur ); |
|||
tmp = cur; |
|||
} |
|||
|
|||
// Only add window if we got to document (e.g., not plain obj or detached DOM)
|
|||
if ( tmp === ( elem.ownerDocument || document ) ) { |
|||
eventPath.push( tmp.defaultView || tmp.parentWindow || window ); |
|||
} |
|||
} |
|||
|
|||
// Fire handlers on the event path
|
|||
i = 0; |
|||
while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { |
|||
|
|||
event.type = i > 1 ? |
|||
bubbleType : |
|||
special.bindType || type; |
|||
|
|||
// jQuery handler
|
|||
handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && |
|||
dataPriv.get( cur, "handle" ); |
|||
if ( handle ) { |
|||
handle.apply( cur, data ); |
|||
} |
|||
|
|||
// Native handler
|
|||
handle = ontype && cur[ ontype ]; |
|||
if ( handle && handle.apply && acceptData( cur ) ) { |
|||
event.result = handle.apply( cur, data ); |
|||
if ( event.result === false ) { |
|||
event.preventDefault(); |
|||
} |
|||
} |
|||
} |
|||
event.type = type; |
|||
|
|||
// If nobody prevented the default action, do it now
|
|||
if ( !onlyHandlers && !event.isDefaultPrevented() ) { |
|||
|
|||
if ( ( !special._default || |
|||
special._default.apply( eventPath.pop(), data ) === false ) && |
|||
acceptData( elem ) ) { |
|||
|
|||
// Call a native DOM method on the target with the same name name as the event.
|
|||
// Don't do default actions on window, that's where global variables be (#6170)
|
|||
if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { |
|||
|
|||
// Don't re-trigger an onFOO event when we call its FOO() method
|
|||
tmp = elem[ ontype ]; |
|||
|
|||
if ( tmp ) { |
|||
elem[ ontype ] = null; |
|||
} |
|||
|
|||
// Prevent re-triggering of the same event, since we already bubbled it above
|
|||
jQuery.event.triggered = type; |
|||
elem[ type ](); |
|||
jQuery.event.triggered = undefined; |
|||
|
|||
if ( tmp ) { |
|||
elem[ ontype ] = tmp; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
return event.result; |
|||
}, |
|||
|
|||
// Piggyback on a donor event to simulate a different one
|
|||
// Used only for `focus(in | out)` events
|
|||
simulate: function( type, elem, event ) { |
|||
var e = jQuery.extend( |
|||
new jQuery.Event(), |
|||
event, |
|||
{ |
|||
type: type, |
|||
isSimulated: true |
|||
} |
|||
); |
|||
|
|||
jQuery.event.trigger( e, null, elem ); |
|||
} |
|||
|
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
|
|||
trigger: function( type, data ) { |
|||
return this.each( function() { |
|||
jQuery.event.trigger( type, data, this ); |
|||
} ); |
|||
}, |
|||
triggerHandler: function( type, data ) { |
|||
var elem = this[ 0 ]; |
|||
if ( elem ) { |
|||
return jQuery.event.trigger( type, data, elem, true ); |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,24 @@ |
|||
define( [ |
|||
"../core" |
|||
], function( jQuery ) { |
|||
|
|||
// Register as a named AMD module, since jQuery can be concatenated with other
|
|||
// files that may use define, but not via a proper concatenation script that
|
|||
// understands anonymous AMD modules. A named AMD is safest and most robust
|
|||
// way to register. Lowercase jquery is used because AMD module names are
|
|||
// derived from file names, and jQuery is normally delivered in a lowercase
|
|||
// file name. Do this after creating the global so that if an AMD module wants
|
|||
// to call noConflict to hide this version of jQuery, it will work.
|
|||
|
|||
// Note that for maximum portability, libraries that are not jQuery should
|
|||
// declare themselves as anonymous modules, and avoid setting a global if an
|
|||
// AMD loader is present. jQuery is a special case. For more information, see
|
|||
// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
|
|||
|
|||
if ( typeof define === "function" && define.amd ) { |
|||
define( "jquery", [], function() { |
|||
return jQuery; |
|||
} ); |
|||
} |
|||
|
|||
} ); |
|||
@ -0,0 +1,26 @@ |
|||
var |
|||
|
|||
// Map over jQuery in case of overwrite
|
|||
_jQuery = window.jQuery, |
|||
|
|||
// Map over the $ in case of overwrite
|
|||
_$ = window.$; |
|||
|
|||
jQuery.noConflict = function( deep ) { |
|||
if ( window.$ === jQuery ) { |
|||
window.$ = _$; |
|||
} |
|||
|
|||
if ( deep && window.jQuery === jQuery ) { |
|||
window.jQuery = _jQuery; |
|||
} |
|||
|
|||
return jQuery; |
|||
}; |
|||
|
|||
// Expose jQuery and $ identifiers, even in AMD
|
|||
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
|
|||
// and CommonJS for browser emulators (#13566)
|
|||
if ( !noGlobal ) { |
|||
window.jQuery = window.$ = jQuery; |
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
/*! |
|||
* jQuery JavaScript Library v@VERSION |
|||
* http://jquery.com/
|
|||
* |
|||
* Includes Sizzle.js |
|||
* http://sizzlejs.com/
|
|||
* |
|||
* Copyright jQuery Foundation and other contributors |
|||
* Released under the MIT license |
|||
* http://jquery.org/license
|
|||
* |
|||
* Date: @DATE |
|||
*/ |
|||
|
|||
(function( global, factory ) { |
|||
|
|||
if ( typeof module === "object" && typeof module.exports === "object" ) { |
|||
// For CommonJS and CommonJS-like environments where a proper `window`
|
|||
// is present, execute the factory and get jQuery.
|
|||
// For environments that do not have a `window` with a `document`
|
|||
// (such as Node.js), expose a factory as module.exports.
|
|||
// This accentuates the need for the creation of a real `window`.
|
|||
// e.g. var jQuery = require("jquery")(window);
|
|||
// See ticket #14549 for more info.
|
|||
module.exports = global.document ? |
|||
factory( global, true ) : |
|||
function( w ) { |
|||
if ( !w.document ) { |
|||
throw new Error( "jQuery requires a window with a document" ); |
|||
} |
|||
return factory( w ); |
|||
}; |
|||
} else { |
|||
factory( global ); |
|||
} |
|||
|
|||
// Pass this if window is not defined yet
|
|||
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { |
|||
|
|||
// Support: Firefox 18+
|
|||
// Can't be in strict mode, several libs including ASP.NET trace
|
|||
// the stack via arguments.caller.callee and Firefox dies if
|
|||
// you try to trace through "use strict" call chains. (#13335)
|
|||
//"use strict";
|
|||
@ -0,0 +1,37 @@ |
|||
define( [ |
|||
"./core", |
|||
"./selector", |
|||
"./traversing", |
|||
"./callbacks", |
|||
"./deferred", |
|||
"./core/ready", |
|||
"./data", |
|||
"./queue", |
|||
"./queue/delay", |
|||
"./attributes", |
|||
"./event", |
|||
"./event/alias", |
|||
"./event/focusin", |
|||
"./manipulation", |
|||
"./manipulation/_evalUrl", |
|||
"./wrap", |
|||
"./css", |
|||
"./css/hiddenVisibleSelectors", |
|||
"./serialize", |
|||
"./ajax", |
|||
"./ajax/xhr", |
|||
"./ajax/script", |
|||
"./ajax/jsonp", |
|||
"./ajax/load", |
|||
"./event/ajax", |
|||
"./effects", |
|||
"./effects/animatedSelector", |
|||
"./offset", |
|||
"./dimensions", |
|||
"./deprecated", |
|||
"./exports/amd" |
|||
], function( jQuery ) { |
|||
|
|||
return ( window.jQuery = window.$ = jQuery ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,481 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/concat", |
|||
"./var/push", |
|||
"./core/access", |
|||
"./manipulation/var/rcheckableType", |
|||
"./manipulation/var/rtagName", |
|||
"./manipulation/var/rscriptType", |
|||
"./manipulation/wrapMap", |
|||
"./manipulation/getAll", |
|||
"./manipulation/setGlobalEval", |
|||
"./manipulation/buildFragment", |
|||
"./manipulation/support", |
|||
|
|||
"./data/var/dataPriv", |
|||
"./data/var/dataUser", |
|||
"./data/var/acceptData", |
|||
|
|||
"./core/init", |
|||
"./traversing", |
|||
"./selector", |
|||
"./event" |
|||
], function( jQuery, concat, push, access, |
|||
rcheckableType, rtagName, rscriptType, |
|||
wrapMap, getAll, setGlobalEval, buildFragment, support, |
|||
dataPriv, dataUser, acceptData ) { |
|||
|
|||
var |
|||
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, |
|||
|
|||
// Support: IE 10-11, Edge 10240+
|
|||
// In IE/Edge using regex groups here causes severe slowdowns.
|
|||
// See https://connect.microsoft.com/IE/feedback/details/1736512/
|
|||
rnoInnerhtml = /<script|<style|<link/i, |
|||
|
|||
// checked="checked" or checked
|
|||
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, |
|||
rscriptTypeMasked = /^true\/(.*)/, |
|||
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; |
|||
|
|||
// Manipulating tables requires a tbody
|
|||
function manipulationTarget( elem, content ) { |
|||
return jQuery.nodeName( elem, "table" ) && |
|||
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? |
|||
|
|||
elem.getElementsByTagName( "tbody" )[ 0 ] || |
|||
elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : |
|||
elem; |
|||
} |
|||
|
|||
// Replace/restore the type attribute of script elements for safe DOM manipulation
|
|||
function disableScript( elem ) { |
|||
elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; |
|||
return elem; |
|||
} |
|||
function restoreScript( elem ) { |
|||
var match = rscriptTypeMasked.exec( elem.type ); |
|||
|
|||
if ( match ) { |
|||
elem.type = match[ 1 ]; |
|||
} else { |
|||
elem.removeAttribute( "type" ); |
|||
} |
|||
|
|||
return elem; |
|||
} |
|||
|
|||
function cloneCopyEvent( src, dest ) { |
|||
var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; |
|||
|
|||
if ( dest.nodeType !== 1 ) { |
|||
return; |
|||
} |
|||
|
|||
// 1. Copy private data: events, handlers, etc.
|
|||
if ( dataPriv.hasData( src ) ) { |
|||
pdataOld = dataPriv.access( src ); |
|||
pdataCur = dataPriv.set( dest, pdataOld ); |
|||
events = pdataOld.events; |
|||
|
|||
if ( events ) { |
|||
delete pdataCur.handle; |
|||
pdataCur.events = {}; |
|||
|
|||
for ( type in events ) { |
|||
for ( i = 0, l = events[ type ].length; i < l; i++ ) { |
|||
jQuery.event.add( dest, type, events[ type ][ i ] ); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 2. Copy user data
|
|||
if ( dataUser.hasData( src ) ) { |
|||
udataOld = dataUser.access( src ); |
|||
udataCur = jQuery.extend( {}, udataOld ); |
|||
|
|||
dataUser.set( dest, udataCur ); |
|||
} |
|||
} |
|||
|
|||
// Fix IE bugs, see support tests
|
|||
function fixInput( src, dest ) { |
|||
var nodeName = dest.nodeName.toLowerCase(); |
|||
|
|||
// Fails to persist the checked state of a cloned checkbox or radio button.
|
|||
if ( nodeName === "input" && rcheckableType.test( src.type ) ) { |
|||
dest.checked = src.checked; |
|||
|
|||
// Fails to return the selected option to the default selected state when cloning options
|
|||
} else if ( nodeName === "input" || nodeName === "textarea" ) { |
|||
dest.defaultValue = src.defaultValue; |
|||
} |
|||
} |
|||
|
|||
function domManip( collection, args, callback, ignored ) { |
|||
|
|||
// Flatten any nested arrays
|
|||
args = concat.apply( [], args ); |
|||
|
|||
var fragment, first, scripts, hasScripts, node, doc, |
|||
i = 0, |
|||
l = collection.length, |
|||
iNoClone = l - 1, |
|||
value = args[ 0 ], |
|||
isFunction = jQuery.isFunction( value ); |
|||
|
|||
// We can't cloneNode fragments that contain checked, in WebKit
|
|||
if ( isFunction || |
|||
( l > 1 && typeof value === "string" && |
|||
!support.checkClone && rchecked.test( value ) ) ) { |
|||
return collection.each( function( index ) { |
|||
var self = collection.eq( index ); |
|||
if ( isFunction ) { |
|||
args[ 0 ] = value.call( this, index, self.html() ); |
|||
} |
|||
domManip( self, args, callback, ignored ); |
|||
} ); |
|||
} |
|||
|
|||
if ( l ) { |
|||
fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); |
|||
first = fragment.firstChild; |
|||
|
|||
if ( fragment.childNodes.length === 1 ) { |
|||
fragment = first; |
|||
} |
|||
|
|||
// Require either new content or an interest in ignored elements to invoke the callback
|
|||
if ( first || ignored ) { |
|||
scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); |
|||
hasScripts = scripts.length; |
|||
|
|||
// Use the original fragment for the last item
|
|||
// instead of the first because it can end up
|
|||
// being emptied incorrectly in certain situations (#8070).
|
|||
for ( ; i < l; i++ ) { |
|||
node = fragment; |
|||
|
|||
if ( i !== iNoClone ) { |
|||
node = jQuery.clone( node, true, true ); |
|||
|
|||
// Keep references to cloned scripts for later restoration
|
|||
if ( hasScripts ) { |
|||
|
|||
// Support: Android<4.1, PhantomJS<2
|
|||
// push.apply(_, arraylike) throws on ancient WebKit
|
|||
jQuery.merge( scripts, getAll( node, "script" ) ); |
|||
} |
|||
} |
|||
|
|||
callback.call( collection[ i ], node, i ); |
|||
} |
|||
|
|||
if ( hasScripts ) { |
|||
doc = scripts[ scripts.length - 1 ].ownerDocument; |
|||
|
|||
// Reenable scripts
|
|||
jQuery.map( scripts, restoreScript ); |
|||
|
|||
// Evaluate executable scripts on first document insertion
|
|||
for ( i = 0; i < hasScripts; i++ ) { |
|||
node = scripts[ i ]; |
|||
if ( rscriptType.test( node.type || "" ) && |
|||
!dataPriv.access( node, "globalEval" ) && |
|||
jQuery.contains( doc, node ) ) { |
|||
|
|||
if ( node.src ) { |
|||
|
|||
// Optional AJAX dependency, but won't run scripts if not present
|
|||
if ( jQuery._evalUrl ) { |
|||
jQuery._evalUrl( node.src ); |
|||
} |
|||
} else { |
|||
jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
return collection; |
|||
} |
|||
|
|||
function remove( elem, selector, keepData ) { |
|||
var node, |
|||
nodes = selector ? jQuery.filter( selector, elem ) : elem, |
|||
i = 0; |
|||
|
|||
for ( ; ( node = nodes[ i ] ) != null; i++ ) { |
|||
if ( !keepData && node.nodeType === 1 ) { |
|||
jQuery.cleanData( getAll( node ) ); |
|||
} |
|||
|
|||
if ( node.parentNode ) { |
|||
if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { |
|||
setGlobalEval( getAll( node, "script" ) ); |
|||
} |
|||
node.parentNode.removeChild( node ); |
|||
} |
|||
} |
|||
|
|||
return elem; |
|||
} |
|||
|
|||
jQuery.extend( { |
|||
htmlPrefilter: function( html ) { |
|||
return html.replace( rxhtmlTag, "<$1></$2>" ); |
|||
}, |
|||
|
|||
clone: function( elem, dataAndEvents, deepDataAndEvents ) { |
|||
var i, l, srcElements, destElements, |
|||
clone = elem.cloneNode( true ), |
|||
inPage = jQuery.contains( elem.ownerDocument, elem ); |
|||
|
|||
// Fix IE cloning issues
|
|||
if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && |
|||
!jQuery.isXMLDoc( elem ) ) { |
|||
|
|||
// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
|
|||
destElements = getAll( clone ); |
|||
srcElements = getAll( elem ); |
|||
|
|||
for ( i = 0, l = srcElements.length; i < l; i++ ) { |
|||
fixInput( srcElements[ i ], destElements[ i ] ); |
|||
} |
|||
} |
|||
|
|||
// Copy the events from the original to the clone
|
|||
if ( dataAndEvents ) { |
|||
if ( deepDataAndEvents ) { |
|||
srcElements = srcElements || getAll( elem ); |
|||
destElements = destElements || getAll( clone ); |
|||
|
|||
for ( i = 0, l = srcElements.length; i < l; i++ ) { |
|||
cloneCopyEvent( srcElements[ i ], destElements[ i ] ); |
|||
} |
|||
} else { |
|||
cloneCopyEvent( elem, clone ); |
|||
} |
|||
} |
|||
|
|||
// Preserve script evaluation history
|
|||
destElements = getAll( clone, "script" ); |
|||
if ( destElements.length > 0 ) { |
|||
setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); |
|||
} |
|||
|
|||
// Return the cloned set
|
|||
return clone; |
|||
}, |
|||
|
|||
cleanData: function( elems ) { |
|||
var data, elem, type, |
|||
special = jQuery.event.special, |
|||
i = 0; |
|||
|
|||
for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { |
|||
if ( acceptData( elem ) ) { |
|||
if ( ( data = elem[ dataPriv.expando ] ) ) { |
|||
if ( data.events ) { |
|||
for ( type in data.events ) { |
|||
if ( special[ type ] ) { |
|||
jQuery.event.remove( elem, type ); |
|||
|
|||
// This is a shortcut to avoid jQuery.event.remove's overhead
|
|||
} else { |
|||
jQuery.removeEvent( elem, type, data.handle ); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Support: Chrome <= 35-45+
|
|||
// Assign undefined instead of using delete, see Data#remove
|
|||
elem[ dataPriv.expando ] = undefined; |
|||
} |
|||
if ( elem[ dataUser.expando ] ) { |
|||
|
|||
// Support: Chrome <= 35-45+
|
|||
// Assign undefined instead of using delete, see Data#remove
|
|||
elem[ dataUser.expando ] = undefined; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
|
|||
// Keep domManip exposed until 3.0 (gh-2225)
|
|||
domManip: domManip, |
|||
|
|||
detach: function( selector ) { |
|||
return remove( this, selector, true ); |
|||
}, |
|||
|
|||
remove: function( selector ) { |
|||
return remove( this, selector ); |
|||
}, |
|||
|
|||
text: function( value ) { |
|||
return access( this, function( value ) { |
|||
return value === undefined ? |
|||
jQuery.text( this ) : |
|||
this.empty().each( function() { |
|||
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { |
|||
this.textContent = value; |
|||
} |
|||
} ); |
|||
}, null, value, arguments.length ); |
|||
}, |
|||
|
|||
append: function() { |
|||
return domManip( this, arguments, function( elem ) { |
|||
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { |
|||
var target = manipulationTarget( this, elem ); |
|||
target.appendChild( elem ); |
|||
} |
|||
} ); |
|||
}, |
|||
|
|||
prepend: function() { |
|||
return domManip( this, arguments, function( elem ) { |
|||
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { |
|||
var target = manipulationTarget( this, elem ); |
|||
target.insertBefore( elem, target.firstChild ); |
|||
} |
|||
} ); |
|||
}, |
|||
|
|||
before: function() { |
|||
return domManip( this, arguments, function( elem ) { |
|||
if ( this.parentNode ) { |
|||
this.parentNode.insertBefore( elem, this ); |
|||
} |
|||
} ); |
|||
}, |
|||
|
|||
after: function() { |
|||
return domManip( this, arguments, function( elem ) { |
|||
if ( this.parentNode ) { |
|||
this.parentNode.insertBefore( elem, this.nextSibling ); |
|||
} |
|||
} ); |
|||
}, |
|||
|
|||
empty: function() { |
|||
var elem, |
|||
i = 0; |
|||
|
|||
for ( ; ( elem = this[ i ] ) != null; i++ ) { |
|||
if ( elem.nodeType === 1 ) { |
|||
|
|||
// Prevent memory leaks
|
|||
jQuery.cleanData( getAll( elem, false ) ); |
|||
|
|||
// Remove any remaining nodes
|
|||
elem.textContent = ""; |
|||
} |
|||
} |
|||
|
|||
return this; |
|||
}, |
|||
|
|||
clone: function( dataAndEvents, deepDataAndEvents ) { |
|||
dataAndEvents = dataAndEvents == null ? false : dataAndEvents; |
|||
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; |
|||
|
|||
return this.map( function() { |
|||
return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); |
|||
} ); |
|||
}, |
|||
|
|||
html: function( value ) { |
|||
return access( this, function( value ) { |
|||
var elem = this[ 0 ] || {}, |
|||
i = 0, |
|||
l = this.length; |
|||
|
|||
if ( value === undefined && elem.nodeType === 1 ) { |
|||
return elem.innerHTML; |
|||
} |
|||
|
|||
// See if we can take a shortcut and just use innerHTML
|
|||
if ( typeof value === "string" && !rnoInnerhtml.test( value ) && |
|||
!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { |
|||
|
|||
value = jQuery.htmlPrefilter( value ); |
|||
|
|||
try { |
|||
for ( ; i < l; i++ ) { |
|||
elem = this[ i ] || {}; |
|||
|
|||
// Remove element nodes and prevent memory leaks
|
|||
if ( elem.nodeType === 1 ) { |
|||
jQuery.cleanData( getAll( elem, false ) ); |
|||
elem.innerHTML = value; |
|||
} |
|||
} |
|||
|
|||
elem = 0; |
|||
|
|||
// If using innerHTML throws an exception, use the fallback method
|
|||
} catch ( e ) {} |
|||
} |
|||
|
|||
if ( elem ) { |
|||
this.empty().append( value ); |
|||
} |
|||
}, null, value, arguments.length ); |
|||
}, |
|||
|
|||
replaceWith: function() { |
|||
var ignored = []; |
|||
|
|||
// Make the changes, replacing each non-ignored context element with the new content
|
|||
return domManip( this, arguments, function( elem ) { |
|||
var parent = this.parentNode; |
|||
|
|||
if ( jQuery.inArray( this, ignored ) < 0 ) { |
|||
jQuery.cleanData( getAll( this ) ); |
|||
if ( parent ) { |
|||
parent.replaceChild( elem, this ); |
|||
} |
|||
} |
|||
|
|||
// Force callback invocation
|
|||
}, ignored ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.each( { |
|||
appendTo: "append", |
|||
prependTo: "prepend", |
|||
insertBefore: "before", |
|||
insertAfter: "after", |
|||
replaceAll: "replaceWith" |
|||
}, function( name, original ) { |
|||
jQuery.fn[ name ] = function( selector ) { |
|||
var elems, |
|||
ret = [], |
|||
insert = jQuery( selector ), |
|||
last = insert.length - 1, |
|||
i = 0; |
|||
|
|||
for ( ; i <= last; i++ ) { |
|||
elems = i === last ? this : this.clone( true ); |
|||
jQuery( insert[ i ] )[ original ]( elems ); |
|||
|
|||
// Support: QtWebKit
|
|||
// .get() because push.apply(_, arraylike) throws
|
|||
push.apply( ret, elems.get() ); |
|||
} |
|||
|
|||
return this.pushStack( ret ); |
|||
}; |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,20 @@ |
|||
define( [ |
|||
"../ajax" |
|||
], function( jQuery ) { |
|||
|
|||
jQuery._evalUrl = function( url ) { |
|||
return jQuery.ajax( { |
|||
url: url, |
|||
|
|||
// Make this explicit, since user can override this through ajaxSetup (#11264)
|
|||
type: "GET", |
|||
dataType: "script", |
|||
async: false, |
|||
global: false, |
|||
"throws": true |
|||
} ); |
|||
}; |
|||
|
|||
return jQuery._evalUrl; |
|||
|
|||
} ); |
|||
@ -0,0 +1,102 @@ |
|||
define( [ |
|||
"../core", |
|||
"./var/rtagName", |
|||
"./var/rscriptType", |
|||
"./wrapMap", |
|||
"./getAll", |
|||
"./setGlobalEval" |
|||
], function( jQuery, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) { |
|||
|
|||
var rhtml = /<|&#?\w+;/; |
|||
|
|||
function buildFragment( elems, context, scripts, selection, ignored ) { |
|||
var elem, tmp, tag, wrap, contains, j, |
|||
fragment = context.createDocumentFragment(), |
|||
nodes = [], |
|||
i = 0, |
|||
l = elems.length; |
|||
|
|||
for ( ; i < l; i++ ) { |
|||
elem = elems[ i ]; |
|||
|
|||
if ( elem || elem === 0 ) { |
|||
|
|||
// Add nodes directly
|
|||
if ( jQuery.type( elem ) === "object" ) { |
|||
|
|||
// Support: Android<4.1, PhantomJS<2
|
|||
// push.apply(_, arraylike) throws on ancient WebKit
|
|||
jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); |
|||
|
|||
// Convert non-html into a text node
|
|||
} else if ( !rhtml.test( elem ) ) { |
|||
nodes.push( context.createTextNode( elem ) ); |
|||
|
|||
// Convert html into DOM nodes
|
|||
} else { |
|||
tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); |
|||
|
|||
// Deserialize a standard representation
|
|||
tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); |
|||
wrap = wrapMap[ tag ] || wrapMap._default; |
|||
tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; |
|||
|
|||
// Descend through wrappers to the right content
|
|||
j = wrap[ 0 ]; |
|||
while ( j-- ) { |
|||
tmp = tmp.lastChild; |
|||
} |
|||
|
|||
// Support: Android<4.1, PhantomJS<2
|
|||
// push.apply(_, arraylike) throws on ancient WebKit
|
|||
jQuery.merge( nodes, tmp.childNodes ); |
|||
|
|||
// Remember the top-level container
|
|||
tmp = fragment.firstChild; |
|||
|
|||
// Ensure the created nodes are orphaned (#12392)
|
|||
tmp.textContent = ""; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Remove wrapper from fragment
|
|||
fragment.textContent = ""; |
|||
|
|||
i = 0; |
|||
while ( ( elem = nodes[ i++ ] ) ) { |
|||
|
|||
// Skip elements already in the context collection (trac-4087)
|
|||
if ( selection && jQuery.inArray( elem, selection ) > -1 ) { |
|||
if ( ignored ) { |
|||
ignored.push( elem ); |
|||
} |
|||
continue; |
|||
} |
|||
|
|||
contains = jQuery.contains( elem.ownerDocument, elem ); |
|||
|
|||
// Append to fragment
|
|||
tmp = getAll( fragment.appendChild( elem ), "script" ); |
|||
|
|||
// Preserve script evaluation history
|
|||
if ( contains ) { |
|||
setGlobalEval( tmp ); |
|||
} |
|||
|
|||
// Capture executables
|
|||
if ( scripts ) { |
|||
j = 0; |
|||
while ( ( elem = tmp[ j++ ] ) ) { |
|||
if ( rscriptType.test( elem.type || "" ) ) { |
|||
scripts.push( elem ); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
return fragment; |
|||
} |
|||
|
|||
return buildFragment; |
|||
} ); |
|||
@ -0,0 +1,21 @@ |
|||
define( [ |
|||
"../core" |
|||
], function( jQuery ) { |
|||
|
|||
function getAll( context, tag ) { |
|||
|
|||
// Support: IE9-11+
|
|||
// Use typeof to avoid zero-argument method invocation on host objects (#15151)
|
|||
var ret = typeof context.getElementsByTagName !== "undefined" ? |
|||
context.getElementsByTagName( tag || "*" ) : |
|||
typeof context.querySelectorAll !== "undefined" ? |
|||
context.querySelectorAll( tag || "*" ) : |
|||
[]; |
|||
|
|||
return tag === undefined || tag && jQuery.nodeName( context, tag ) ? |
|||
jQuery.merge( [ context ], ret ) : |
|||
ret; |
|||
} |
|||
|
|||
return getAll; |
|||
} ); |
|||
@ -0,0 +1,20 @@ |
|||
define( [ |
|||
"../data/var/dataPriv" |
|||
], function( dataPriv ) { |
|||
|
|||
// Mark scripts as having already been evaluated
|
|||
function setGlobalEval( elems, refElements ) { |
|||
var i = 0, |
|||
l = elems.length; |
|||
|
|||
for ( ; i < l; i++ ) { |
|||
dataPriv.set( |
|||
elems[ i ], |
|||
"globalEval", |
|||
!refElements || dataPriv.get( refElements[ i ], "globalEval" ) |
|||
); |
|||
} |
|||
} |
|||
|
|||
return setGlobalEval; |
|||
} ); |
|||
@ -0,0 +1,33 @@ |
|||
define( [ |
|||
"../var/document", |
|||
"../var/support" |
|||
], function( document, support ) { |
|||
|
|||
( function() { |
|||
var fragment = document.createDocumentFragment(), |
|||
div = fragment.appendChild( document.createElement( "div" ) ), |
|||
input = document.createElement( "input" ); |
|||
|
|||
// Support: Android 4.0-4.3, Safari<=5.1
|
|||
// Check state lost if the name is set (#11217)
|
|||
// Support: Windows Web Apps (WWA)
|
|||
// `name` and `type` must use .setAttribute for WWA (#14901)
|
|||
input.setAttribute( "type", "radio" ); |
|||
input.setAttribute( "checked", "checked" ); |
|||
input.setAttribute( "name", "t" ); |
|||
|
|||
div.appendChild( input ); |
|||
|
|||
// Support: Safari<=5.1, Android<4.2
|
|||
// Older WebKit doesn't clone checked state correctly in fragments
|
|||
support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; |
|||
|
|||
// Support: IE<=11+
|
|||
// Make sure textarea (and checkbox) defaultValue is properly cloned
|
|||
div.innerHTML = "<textarea>x</textarea>"; |
|||
support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; |
|||
} )(); |
|||
|
|||
return support; |
|||
|
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return ( /^(?:checkbox|radio)$/i ); |
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return ( /^$|\/(?:java|ecma)script/i ); |
|||
} ); |
|||
@ -0,0 +1,3 @@ |
|||
define( function() { |
|||
return ( /<([\w:-]+)/ ); |
|||
} ); |
|||
@ -0,0 +1,27 @@ |
|||
define( function() { |
|||
|
|||
// We have to close these tags to support XHTML (#13200)
|
|||
var wrapMap = { |
|||
|
|||
// Support: IE9
|
|||
option: [ 1, "<select multiple='multiple'>", "</select>" ], |
|||
|
|||
// XHTML parsers do not magically insert elements in the
|
|||
// same way that tag soup parsers do. So we cannot shorten
|
|||
// this by omitting <tbody> or other required elements.
|
|||
thead: [ 1, "<table>", "</table>" ], |
|||
col: [ 2, "<table><colgroup>", "</colgroup></table>" ], |
|||
tr: [ 2, "<table><tbody>", "</tbody></table>" ], |
|||
td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], |
|||
|
|||
_default: [ 0, "", "" ] |
|||
}; |
|||
|
|||
// Support: IE9
|
|||
wrapMap.optgroup = wrapMap.option; |
|||
|
|||
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; |
|||
wrapMap.th = wrapMap.td; |
|||
|
|||
return wrapMap; |
|||
} ); |
|||
@ -0,0 +1,218 @@ |
|||
define( [ |
|||
"./core", |
|||
"./core/access", |
|||
"./var/document", |
|||
"./var/documentElement", |
|||
"./css/var/rnumnonpx", |
|||
"./css/curCSS", |
|||
"./css/addGetHookIf", |
|||
"./css/support", |
|||
|
|||
"./core/init", |
|||
"./css", |
|||
"./selector" // contains
|
|||
], function( jQuery, access, document, documentElement, rnumnonpx, curCSS, addGetHookIf, support ) { |
|||
|
|||
/** |
|||
* Gets a window from an element |
|||
*/ |
|||
function getWindow( elem ) { |
|||
return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; |
|||
} |
|||
|
|||
jQuery.offset = { |
|||
setOffset: function( elem, options, i ) { |
|||
var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, |
|||
position = jQuery.css( elem, "position" ), |
|||
curElem = jQuery( elem ), |
|||
props = {}; |
|||
|
|||
// Set position first, in-case top/left are set even on static elem
|
|||
if ( position === "static" ) { |
|||
elem.style.position = "relative"; |
|||
} |
|||
|
|||
curOffset = curElem.offset(); |
|||
curCSSTop = jQuery.css( elem, "top" ); |
|||
curCSSLeft = jQuery.css( elem, "left" ); |
|||
calculatePosition = ( position === "absolute" || position === "fixed" ) && |
|||
( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; |
|||
|
|||
// Need to be able to calculate position if either
|
|||
// top or left is auto and position is either absolute or fixed
|
|||
if ( calculatePosition ) { |
|||
curPosition = curElem.position(); |
|||
curTop = curPosition.top; |
|||
curLeft = curPosition.left; |
|||
|
|||
} else { |
|||
curTop = parseFloat( curCSSTop ) || 0; |
|||
curLeft = parseFloat( curCSSLeft ) || 0; |
|||
} |
|||
|
|||
if ( jQuery.isFunction( options ) ) { |
|||
|
|||
// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
|
|||
options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); |
|||
} |
|||
|
|||
if ( options.top != null ) { |
|||
props.top = ( options.top - curOffset.top ) + curTop; |
|||
} |
|||
if ( options.left != null ) { |
|||
props.left = ( options.left - curOffset.left ) + curLeft; |
|||
} |
|||
|
|||
if ( "using" in options ) { |
|||
options.using.call( elem, props ); |
|||
|
|||
} else { |
|||
curElem.css( props ); |
|||
} |
|||
} |
|||
}; |
|||
|
|||
jQuery.fn.extend( { |
|||
offset: function( options ) { |
|||
if ( arguments.length ) { |
|||
return options === undefined ? |
|||
this : |
|||
this.each( function( i ) { |
|||
jQuery.offset.setOffset( this, options, i ); |
|||
} ); |
|||
} |
|||
|
|||
var docElem, win, |
|||
elem = this[ 0 ], |
|||
box = { top: 0, left: 0 }, |
|||
doc = elem && elem.ownerDocument; |
|||
|
|||
if ( !doc ) { |
|||
return; |
|||
} |
|||
|
|||
docElem = doc.documentElement; |
|||
|
|||
// Make sure it's not a disconnected DOM node
|
|||
if ( !jQuery.contains( docElem, elem ) ) { |
|||
return box; |
|||
} |
|||
|
|||
box = elem.getBoundingClientRect(); |
|||
win = getWindow( doc ); |
|||
return { |
|||
top: box.top + win.pageYOffset - docElem.clientTop, |
|||
left: box.left + win.pageXOffset - docElem.clientLeft |
|||
}; |
|||
}, |
|||
|
|||
position: function() { |
|||
if ( !this[ 0 ] ) { |
|||
return; |
|||
} |
|||
|
|||
var offsetParent, offset, |
|||
elem = this[ 0 ], |
|||
parentOffset = { top: 0, left: 0 }; |
|||
|
|||
// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
|
|||
// because it is its only offset parent
|
|||
if ( jQuery.css( elem, "position" ) === "fixed" ) { |
|||
|
|||
// Assume getBoundingClientRect is there when computed position is fixed
|
|||
offset = elem.getBoundingClientRect(); |
|||
|
|||
} else { |
|||
|
|||
// Get *real* offsetParent
|
|||
offsetParent = this.offsetParent(); |
|||
|
|||
// Get correct offsets
|
|||
offset = this.offset(); |
|||
if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { |
|||
parentOffset = offsetParent.offset(); |
|||
} |
|||
|
|||
// Add offsetParent borders
|
|||
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); |
|||
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); |
|||
} |
|||
|
|||
// Subtract parent offsets and element margins
|
|||
return { |
|||
top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), |
|||
left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) |
|||
}; |
|||
}, |
|||
|
|||
// This method will return documentElement in the following cases:
|
|||
// 1) For the element inside the iframe without offsetParent, this method will return
|
|||
// documentElement of the parent window
|
|||
// 2) For the hidden or detached element
|
|||
// 3) For body or html element, i.e. in case of the html node - it will return itself
|
|||
//
|
|||
// but those exceptions were never presented as a real life use-cases
|
|||
// and might be considered as more preferable results.
|
|||
//
|
|||
// This logic, however, is not guaranteed and can change at any point in the future
|
|||
offsetParent: function() { |
|||
return this.map( function() { |
|||
var offsetParent = this.offsetParent; |
|||
|
|||
while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { |
|||
offsetParent = offsetParent.offsetParent; |
|||
} |
|||
|
|||
return offsetParent || documentElement; |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
// Create scrollLeft and scrollTop methods
|
|||
jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { |
|||
var top = "pageYOffset" === prop; |
|||
|
|||
jQuery.fn[ method ] = function( val ) { |
|||
return access( this, function( elem, method, val ) { |
|||
var win = getWindow( elem ); |
|||
|
|||
if ( val === undefined ) { |
|||
return win ? win[ prop ] : elem[ method ]; |
|||
} |
|||
|
|||
if ( win ) { |
|||
win.scrollTo( |
|||
!top ? val : win.pageXOffset, |
|||
top ? val : win.pageYOffset |
|||
); |
|||
|
|||
} else { |
|||
elem[ method ] = val; |
|||
} |
|||
}, method, val, arguments.length ); |
|||
}; |
|||
} ); |
|||
|
|||
// Support: Safari<7-8+, Chrome<37-44+
|
|||
// Add the top/left cssHooks using jQuery.fn.position
|
|||
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
|||
// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
|
|||
// getComputedStyle returns percent when specified for top/left/bottom/right;
|
|||
// rather than make the css module depend on the offset module, just check for it here
|
|||
jQuery.each( [ "top", "left" ], function( i, prop ) { |
|||
jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, |
|||
function( elem, computed ) { |
|||
if ( computed ) { |
|||
computed = curCSS( elem, prop ); |
|||
|
|||
// If curCSS returns percentage, fallback to offset
|
|||
return rnumnonpx.test( computed ) ? |
|||
jQuery( elem ).position()[ prop ] + "px" : |
|||
computed; |
|||
} |
|||
} |
|||
); |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,2 @@ |
|||
return jQuery; |
|||
})); |
|||
@ -0,0 +1,143 @@ |
|||
define( [ |
|||
"./core", |
|||
"./data/var/dataPriv", |
|||
"./deferred", |
|||
"./callbacks" |
|||
], function( jQuery, dataPriv ) { |
|||
|
|||
jQuery.extend( { |
|||
queue: function( elem, type, data ) { |
|||
var queue; |
|||
|
|||
if ( elem ) { |
|||
type = ( type || "fx" ) + "queue"; |
|||
queue = dataPriv.get( elem, type ); |
|||
|
|||
// Speed up dequeue by getting out quickly if this is just a lookup
|
|||
if ( data ) { |
|||
if ( !queue || jQuery.isArray( data ) ) { |
|||
queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); |
|||
} else { |
|||
queue.push( data ); |
|||
} |
|||
} |
|||
return queue || []; |
|||
} |
|||
}, |
|||
|
|||
dequeue: function( elem, type ) { |
|||
type = type || "fx"; |
|||
|
|||
var queue = jQuery.queue( elem, type ), |
|||
startLength = queue.length, |
|||
fn = queue.shift(), |
|||
hooks = jQuery._queueHooks( elem, type ), |
|||
next = function() { |
|||
jQuery.dequeue( elem, type ); |
|||
}; |
|||
|
|||
// If the fx queue is dequeued, always remove the progress sentinel
|
|||
if ( fn === "inprogress" ) { |
|||
fn = queue.shift(); |
|||
startLength--; |
|||
} |
|||
|
|||
if ( fn ) { |
|||
|
|||
// Add a progress sentinel to prevent the fx queue from being
|
|||
// automatically dequeued
|
|||
if ( type === "fx" ) { |
|||
queue.unshift( "inprogress" ); |
|||
} |
|||
|
|||
// Clear up the last queue stop function
|
|||
delete hooks.stop; |
|||
fn.call( elem, next, hooks ); |
|||
} |
|||
|
|||
if ( !startLength && hooks ) { |
|||
hooks.empty.fire(); |
|||
} |
|||
}, |
|||
|
|||
// Not public - generate a queueHooks object, or return the current one
|
|||
_queueHooks: function( elem, type ) { |
|||
var key = type + "queueHooks"; |
|||
return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { |
|||
empty: jQuery.Callbacks( "once memory" ).add( function() { |
|||
dataPriv.remove( elem, [ type + "queue", key ] ); |
|||
} ) |
|||
} ); |
|||
} |
|||
} ); |
|||
|
|||
jQuery.fn.extend( { |
|||
queue: function( type, data ) { |
|||
var setter = 2; |
|||
|
|||
if ( typeof type !== "string" ) { |
|||
data = type; |
|||
type = "fx"; |
|||
setter--; |
|||
} |
|||
|
|||
if ( arguments.length < setter ) { |
|||
return jQuery.queue( this[ 0 ], type ); |
|||
} |
|||
|
|||
return data === undefined ? |
|||
this : |
|||
this.each( function() { |
|||
var queue = jQuery.queue( this, type, data ); |
|||
|
|||
// Ensure a hooks for this queue
|
|||
jQuery._queueHooks( this, type ); |
|||
|
|||
if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { |
|||
jQuery.dequeue( this, type ); |
|||
} |
|||
} ); |
|||
}, |
|||
dequeue: function( type ) { |
|||
return this.each( function() { |
|||
jQuery.dequeue( this, type ); |
|||
} ); |
|||
}, |
|||
clearQueue: function( type ) { |
|||
return this.queue( type || "fx", [] ); |
|||
}, |
|||
|
|||
// Get a promise resolved when queues of a certain type
|
|||
// are emptied (fx is the type by default)
|
|||
promise: function( type, obj ) { |
|||
var tmp, |
|||
count = 1, |
|||
defer = jQuery.Deferred(), |
|||
elements = this, |
|||
i = this.length, |
|||
resolve = function() { |
|||
if ( !( --count ) ) { |
|||
defer.resolveWith( elements, [ elements ] ); |
|||
} |
|||
}; |
|||
|
|||
if ( typeof type !== "string" ) { |
|||
obj = type; |
|||
type = undefined; |
|||
} |
|||
type = type || "fx"; |
|||
|
|||
while ( i-- ) { |
|||
tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); |
|||
if ( tmp && tmp.empty ) { |
|||
count++; |
|||
tmp.empty.add( resolve ); |
|||
} |
|||
} |
|||
resolve(); |
|||
return defer.promise( obj ); |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,22 @@ |
|||
define( [ |
|||
"../core", |
|||
"../queue", |
|||
"../effects" // Delay is optional because of this dependency
|
|||
], function( jQuery ) { |
|||
|
|||
// Based off of the plugin by Clint Helfers, with permission.
|
|||
// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
|
|||
jQuery.fn.delay = function( time, type ) { |
|||
time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; |
|||
type = type || "fx"; |
|||
|
|||
return this.queue( type, function( next, hooks ) { |
|||
var timeout = window.setTimeout( next, time ); |
|||
hooks.stop = function() { |
|||
window.clearTimeout( timeout ); |
|||
}; |
|||
} ); |
|||
}; |
|||
|
|||
return jQuery.fn.delay; |
|||
} ); |
|||
@ -0,0 +1,211 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/document", |
|||
"./var/documentElement", |
|||
"./var/hasOwn", |
|||
"./var/indexOf" |
|||
], function( jQuery, document, documentElement, hasOwn, indexOf ) { |
|||
|
|||
/* |
|||
* Optional (non-Sizzle) selector module for custom builds. |
|||
* |
|||
* Note that this DOES NOT SUPPORT many documented jQuery |
|||
* features in exchange for its smaller size: |
|||
* |
|||
* Attribute not equal selector |
|||
* Positional selectors (:first; :eq(n); :odd; etc.) |
|||
* Type selectors (:input; :checkbox; :button; etc.) |
|||
* State-based selectors (:animated; :visible; :hidden; etc.) |
|||
* :has(selector) |
|||
* :not(complex selector) |
|||
* custom selectors via Sizzle extensions |
|||
* Leading combinators (e.g., $collection.find("> *")) |
|||
* Reliable functionality on XML fragments |
|||
* Requiring all parts of a selector to match elements under context |
|||
* (e.g., $div.find("div > *") now matches children of $div) |
|||
* Matching against non-elements |
|||
* Reliable sorting of disconnected nodes |
|||
* querySelectorAll bug fixes (e.g., unreliable :focus on WebKit) |
|||
* |
|||
* If any of these are unacceptable tradeoffs, either use Sizzle or |
|||
* customize this stub for the project's specific needs. |
|||
*/ |
|||
|
|||
var hasDuplicate, sortInput, |
|||
sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando, |
|||
matches = documentElement.matches || |
|||
documentElement.webkitMatchesSelector || |
|||
documentElement.mozMatchesSelector || |
|||
documentElement.oMatchesSelector || |
|||
documentElement.msMatchesSelector; |
|||
|
|||
function sortOrder( a, b ) { |
|||
|
|||
// Flag for duplicate removal
|
|||
if ( a === b ) { |
|||
hasDuplicate = true; |
|||
return 0; |
|||
} |
|||
|
|||
// Sort on method existence if only one input has compareDocumentPosition
|
|||
var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; |
|||
if ( compare ) { |
|||
return compare; |
|||
} |
|||
|
|||
// Calculate position if both inputs belong to the same document
|
|||
compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? |
|||
a.compareDocumentPosition( b ) : |
|||
|
|||
// Otherwise we know they are disconnected
|
|||
1; |
|||
|
|||
// Disconnected nodes
|
|||
if ( compare & 1 ) { |
|||
|
|||
// Choose the first element that is related to our preferred document
|
|||
if ( a === document || a.ownerDocument === document && |
|||
jQuery.contains( document, a ) ) { |
|||
return -1; |
|||
} |
|||
if ( b === document || b.ownerDocument === document && |
|||
jQuery.contains( document, b ) ) { |
|||
return 1; |
|||
} |
|||
|
|||
// Maintain original order
|
|||
return sortInput ? |
|||
( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : |
|||
0; |
|||
} |
|||
|
|||
return compare & 4 ? -1 : 1; |
|||
} |
|||
|
|||
function uniqueSort( results ) { |
|||
var elem, |
|||
duplicates = [], |
|||
j = 0, |
|||
i = 0; |
|||
|
|||
hasDuplicate = false; |
|||
sortInput = !sortStable && results.slice( 0 ); |
|||
results.sort( sortOrder ); |
|||
|
|||
if ( hasDuplicate ) { |
|||
while ( ( elem = results[ i++ ] ) ) { |
|||
if ( elem === results[ i ] ) { |
|||
j = duplicates.push( i ); |
|||
} |
|||
} |
|||
while ( j-- ) { |
|||
results.splice( duplicates[ j ], 1 ); |
|||
} |
|||
} |
|||
|
|||
// Clear input after sorting to release objects
|
|||
// See https://github.com/jquery/sizzle/pull/225
|
|||
sortInput = null; |
|||
|
|||
return results; |
|||
} |
|||
|
|||
jQuery.extend( { |
|||
find: function( selector, context, results, seed ) { |
|||
var elem, nodeType, |
|||
i = 0; |
|||
|
|||
results = results || []; |
|||
context = context || document; |
|||
|
|||
// Same basic safeguard as Sizzle
|
|||
if ( !selector || typeof selector !== "string" ) { |
|||
return results; |
|||
} |
|||
|
|||
// Early return if context is not an element or document
|
|||
if ( ( nodeType = context.nodeType ) !== 1 && nodeType !== 9 ) { |
|||
return []; |
|||
} |
|||
|
|||
if ( seed ) { |
|||
while ( ( elem = seed[ i++ ] ) ) { |
|||
if ( jQuery.find.matchesSelector( elem, selector ) ) { |
|||
results.push( elem ); |
|||
} |
|||
} |
|||
} else { |
|||
jQuery.merge( results, context.querySelectorAll( selector ) ); |
|||
} |
|||
|
|||
return results; |
|||
}, |
|||
uniqueSort: uniqueSort, |
|||
unique: uniqueSort, |
|||
text: function( elem ) { |
|||
var node, |
|||
ret = "", |
|||
i = 0, |
|||
nodeType = elem.nodeType; |
|||
|
|||
if ( !nodeType ) { |
|||
|
|||
// If no nodeType, this is expected to be an array
|
|||
while ( ( node = elem[ i++ ] ) ) { |
|||
|
|||
// Do not traverse comment nodes
|
|||
ret += jQuery.text( node ); |
|||
} |
|||
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { |
|||
|
|||
// Use textContent for elements
|
|||
return elem.textContent; |
|||
} else if ( nodeType === 3 || nodeType === 4 ) { |
|||
return elem.nodeValue; |
|||
} |
|||
|
|||
// Do not include comment or processing instruction nodes
|
|||
|
|||
return ret; |
|||
}, |
|||
contains: function( a, b ) { |
|||
var adown = a.nodeType === 9 ? a.documentElement : a, |
|||
bup = b && b.parentNode; |
|||
return a === bup || !!( bup && bup.nodeType === 1 && adown.contains( bup ) ); |
|||
}, |
|||
isXMLDoc: function( elem ) { |
|||
|
|||
// documentElement is verified for cases where it doesn't yet exist
|
|||
// (such as loading iframes in IE - #4833)
|
|||
var documentElement = elem && ( elem.ownerDocument || elem ).documentElement; |
|||
return documentElement ? documentElement.nodeName !== "HTML" : false; |
|||
}, |
|||
expr: { |
|||
attrHandle: {}, |
|||
match: { |
|||
bool: new RegExp( "^(?:checked|selected|async|autofocus|autoplay|controls|defer" + |
|||
"|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$", "i" ), |
|||
needsContext: /^[\x20\t\r\n\f]*[>+~]/ |
|||
} |
|||
} |
|||
} ); |
|||
|
|||
jQuery.extend( jQuery.find, { |
|||
matches: function( expr, elements ) { |
|||
return jQuery.find( expr, null, null, elements ); |
|||
}, |
|||
matchesSelector: function( elem, expr ) { |
|||
return matches.call( elem, expr ); |
|||
}, |
|||
attr: function( elem, name ) { |
|||
var fn = jQuery.expr.attrHandle[ name.toLowerCase() ], |
|||
|
|||
// Don't get fooled by Object.prototype properties (jQuery #13807)
|
|||
value = fn && hasOwn.call( jQuery.expr.attrHandle, name.toLowerCase() ) ? |
|||
fn( elem, name, jQuery.isXMLDoc( elem ) ) : |
|||
undefined; |
|||
return value !== undefined ? value : elem.getAttribute( name ); |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,14 @@ |
|||
define( [ |
|||
"./core", |
|||
"../external/sizzle/dist/sizzle" |
|||
], function( jQuery, Sizzle ) { |
|||
|
|||
jQuery.find = Sizzle; |
|||
jQuery.expr = Sizzle.selectors; |
|||
jQuery.expr[ ":" ] = jQuery.expr.pseudos; |
|||
jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; |
|||
jQuery.text = Sizzle.getText; |
|||
jQuery.isXMLDoc = Sizzle.isXML; |
|||
jQuery.contains = Sizzle.contains; |
|||
|
|||
} ); |
|||
@ -0,0 +1 @@ |
|||
define( [ "./selector-sizzle" ], function() {} ); |
|||
@ -0,0 +1,125 @@ |
|||
define( [ |
|||
"./core", |
|||
"./manipulation/var/rcheckableType", |
|||
"./core/init", |
|||
"./traversing", // filter
|
|||
"./attributes/prop" |
|||
], function( jQuery, rcheckableType ) { |
|||
|
|||
var r20 = /%20/g, |
|||
rbracket = /\[\]$/, |
|||
rCRLF = /\r?\n/g, |
|||
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, |
|||
rsubmittable = /^(?:input|select|textarea|keygen)/i; |
|||
|
|||
function buildParams( prefix, obj, traditional, add ) { |
|||
var name; |
|||
|
|||
if ( jQuery.isArray( obj ) ) { |
|||
|
|||
// Serialize array item.
|
|||
jQuery.each( obj, function( i, v ) { |
|||
if ( traditional || rbracket.test( prefix ) ) { |
|||
|
|||
// Treat each array item as a scalar.
|
|||
add( prefix, v ); |
|||
|
|||
} else { |
|||
|
|||
// Item is non-scalar (array or object), encode its numeric index.
|
|||
buildParams( |
|||
prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", |
|||
v, |
|||
traditional, |
|||
add |
|||
); |
|||
} |
|||
} ); |
|||
|
|||
} else if ( !traditional && jQuery.type( obj ) === "object" ) { |
|||
|
|||
// Serialize object item.
|
|||
for ( name in obj ) { |
|||
buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); |
|||
} |
|||
|
|||
} else { |
|||
|
|||
// Serialize scalar item.
|
|||
add( prefix, obj ); |
|||
} |
|||
} |
|||
|
|||
// Serialize an array of form elements or a set of
|
|||
// key/values into a query string
|
|||
jQuery.param = function( a, traditional ) { |
|||
var prefix, |
|||
s = [], |
|||
add = function( key, value ) { |
|||
|
|||
// If value is a function, invoke it and return its value
|
|||
value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); |
|||
s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); |
|||
}; |
|||
|
|||
// Set traditional to true for jQuery <= 1.3.2 behavior.
|
|||
if ( traditional === undefined ) { |
|||
traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; |
|||
} |
|||
|
|||
// If an array was passed in, assume that it is an array of form elements.
|
|||
if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { |
|||
|
|||
// Serialize the form elements
|
|||
jQuery.each( a, function() { |
|||
add( this.name, this.value ); |
|||
} ); |
|||
|
|||
} else { |
|||
|
|||
// If traditional, encode the "old" way (the way 1.3.2 or older
|
|||
// did it), otherwise encode params recursively.
|
|||
for ( prefix in a ) { |
|||
buildParams( prefix, a[ prefix ], traditional, add ); |
|||
} |
|||
} |
|||
|
|||
// Return the resulting serialization
|
|||
return s.join( "&" ).replace( r20, "+" ); |
|||
}; |
|||
|
|||
jQuery.fn.extend( { |
|||
serialize: function() { |
|||
return jQuery.param( this.serializeArray() ); |
|||
}, |
|||
serializeArray: function() { |
|||
return this.map( function() { |
|||
|
|||
// Can add propHook for "elements" to filter or add form elements
|
|||
var elements = jQuery.prop( this, "elements" ); |
|||
return elements ? jQuery.makeArray( elements ) : this; |
|||
} ) |
|||
.filter( function() { |
|||
var type = this.type; |
|||
|
|||
// Use .is( ":disabled" ) so that fieldset[disabled] works
|
|||
return this.name && !jQuery( this ).is( ":disabled" ) && |
|||
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && |
|||
( this.checked || !rcheckableType.test( type ) ); |
|||
} ) |
|||
.map( function( i, elem ) { |
|||
var val = jQuery( this ).val(); |
|||
|
|||
return val == null ? |
|||
null : |
|||
jQuery.isArray( val ) ? |
|||
jQuery.map( val, function( val ) { |
|||
return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; |
|||
} ) : |
|||
{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; |
|||
} ).get(); |
|||
} |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,175 @@ |
|||
define( [ |
|||
"./core", |
|||
"./var/indexOf", |
|||
"./traversing/var/dir", |
|||
"./traversing/var/siblings", |
|||
"./traversing/var/rneedsContext", |
|||
"./core/init", |
|||
"./traversing/findFilter", |
|||
"./selector" |
|||
], function( jQuery, indexOf, dir, siblings, rneedsContext ) { |
|||
|
|||
var rparentsprev = /^(?:parents|prev(?:Until|All))/, |
|||
|
|||
// Methods guaranteed to produce a unique set when starting from a unique set
|
|||
guaranteedUnique = { |
|||
children: true, |
|||
contents: true, |
|||
next: true, |
|||
prev: true |
|||
}; |
|||
|
|||
jQuery.fn.extend( { |
|||
has: function( target ) { |
|||
var targets = jQuery( target, this ), |
|||
l = targets.length; |
|||
|
|||
return this.filter( function() { |
|||
var i = 0; |
|||
for ( ; i < l; i++ ) { |
|||
if ( jQuery.contains( this, targets[ i ] ) ) { |
|||
return true; |
|||
} |
|||
} |
|||
} ); |
|||
}, |
|||
|
|||
closest: function( selectors, context ) { |
|||
var cur, |
|||
i = 0, |
|||
l = this.length, |
|||
matched = [], |
|||
pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? |
|||
jQuery( selectors, context || this.context ) : |
|||
0; |
|||
|
|||
for ( ; i < l; i++ ) { |
|||
for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { |
|||
|
|||
// Always skip document fragments
|
|||
if ( cur.nodeType < 11 && ( pos ? |
|||
pos.index( cur ) > -1 : |
|||
|
|||
// Don't pass non-elements to Sizzle
|
|||
cur.nodeType === 1 && |
|||
jQuery.find.matchesSelector( cur, selectors ) ) ) { |
|||
|
|||
matched.push( cur ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); |
|||
}, |
|||
|
|||
// Determine the position of an element within the set
|
|||
index: function( elem ) { |
|||
|
|||
// No argument, return index in parent
|
|||
if ( !elem ) { |
|||
return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; |
|||
} |
|||
|
|||
// Index in selector
|
|||
if ( typeof elem === "string" ) { |
|||
return indexOf.call( jQuery( elem ), this[ 0 ] ); |
|||
} |
|||
|
|||
// Locate the position of the desired element
|
|||
return indexOf.call( this, |
|||
|
|||
// If it receives a jQuery object, the first element is used
|
|||
elem.jquery ? elem[ 0 ] : elem |
|||
); |
|||
}, |
|||
|
|||
add: function( selector, context ) { |
|||
return this.pushStack( |
|||
jQuery.uniqueSort( |
|||
jQuery.merge( this.get(), jQuery( selector, context ) ) |
|||
) |
|||
); |
|||
}, |
|||
|
|||
addBack: function( selector ) { |
|||
return this.add( selector == null ? |
|||
this.prevObject : this.prevObject.filter( selector ) |
|||
); |
|||
} |
|||
} ); |
|||
|
|||
function sibling( cur, dir ) { |
|||
while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} |
|||
return cur; |
|||
} |
|||
|
|||
jQuery.each( { |
|||
parent: function( elem ) { |
|||
var parent = elem.parentNode; |
|||
return parent && parent.nodeType !== 11 ? parent : null; |
|||
}, |
|||
parents: function( elem ) { |
|||
return dir( elem, "parentNode" ); |
|||
}, |
|||
parentsUntil: function( elem, i, until ) { |
|||
return dir( elem, "parentNode", until ); |
|||
}, |
|||
next: function( elem ) { |
|||
return sibling( elem, "nextSibling" ); |
|||
}, |
|||
prev: function( elem ) { |
|||
return sibling( elem, "previousSibling" ); |
|||
}, |
|||
nextAll: function( elem ) { |
|||
return dir( elem, "nextSibling" ); |
|||
}, |
|||
prevAll: function( elem ) { |
|||
return dir( elem, "previousSibling" ); |
|||
}, |
|||
nextUntil: function( elem, i, until ) { |
|||
return dir( elem, "nextSibling", until ); |
|||
}, |
|||
prevUntil: function( elem, i, until ) { |
|||
return dir( elem, "previousSibling", until ); |
|||
}, |
|||
siblings: function( elem ) { |
|||
return siblings( ( elem.parentNode || {} ).firstChild, elem ); |
|||
}, |
|||
children: function( elem ) { |
|||
return siblings( elem.firstChild ); |
|||
}, |
|||
contents: function( elem ) { |
|||
return elem.contentDocument || jQuery.merge( [], elem.childNodes ); |
|||
} |
|||
}, function( name, fn ) { |
|||
jQuery.fn[ name ] = function( until, selector ) { |
|||
var matched = jQuery.map( this, fn, until ); |
|||
|
|||
if ( name.slice( -5 ) !== "Until" ) { |
|||
selector = until; |
|||
} |
|||
|
|||
if ( selector && typeof selector === "string" ) { |
|||
matched = jQuery.filter( selector, matched ); |
|||
} |
|||
|
|||
if ( this.length > 1 ) { |
|||
|
|||
// Remove duplicates
|
|||
if ( !guaranteedUnique[ name ] ) { |
|||
jQuery.uniqueSort( matched ); |
|||
} |
|||
|
|||
// Reverse order for parents* and prev-derivatives
|
|||
if ( rparentsprev.test( name ) ) { |
|||
matched.reverse(); |
|||
} |
|||
} |
|||
|
|||
return this.pushStack( matched ); |
|||
}; |
|||
} ); |
|||
|
|||
return jQuery; |
|||
} ); |
|||
@ -0,0 +1,100 @@ |
|||
define( [ |
|||
"../core", |
|||
"../var/indexOf", |
|||
"./var/rneedsContext", |
|||
"../selector" |
|||
], function( jQuery, indexOf, rneedsContext ) { |
|||
|
|||
var risSimple = /^.[^:#\[\.,]*$/; |
|||
|
|||
// Implement the identical functionality for filter and not
|
|||
function winnow( elements, qualifier, not ) { |
|||
if ( jQuery.isFunction( qualifier ) ) { |
|||
return jQuery.grep( elements, function( elem, i ) { |
|||
/* jshint -W018 */ |
|||
return !!qualifier.call( elem, i, elem ) !== not; |
|||
} ); |
|||
|
|||
} |
|||
|
|||
if ( qualifier.nodeType ) { |
|||
return jQuery.grep( elements, function( elem ) { |
|||
return ( elem === qualifier ) !== not; |
|||
} ); |
|||
|
|||
} |
|||
|
|||
if ( typeof qualifier === "string" ) { |
|||
if ( risSimple.test( qualifier ) ) { |
|||
return jQuery.filter( qualifier, elements, not ); |
|||
} |
|||
|
|||
qualifier = jQuery.filter( qualifier, elements ); |
|||
} |
|||
|
|||
return jQuery.grep( elements, function( elem ) { |
|||
return ( indexOf.call( qualifier, elem ) > -1 ) !== not; |
|||
} ); |
|||
} |
|||
|
|||
jQuery.filter = function( expr, elems, not ) { |
|||
var elem = elems[ 0 ]; |
|||
|
|||
if ( not ) { |
|||
expr = ":not(" + expr + ")"; |
|||
} |
|||
|
|||
return elems.length === 1 && elem.nodeType === 1 ? |
|||
jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : |
|||
jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { |
|||
return elem.nodeType === 1; |
|||
} ) ); |
|||
}; |
|||
|
|||
jQuery.fn.extend( { |
|||
find: function( selector ) { |
|||
var i, |
|||
len = this.length, |
|||
ret = [], |
|||
self = this; |
|||
|
|||
if ( typeof selector !== "string" ) { |
|||
return this.pushStack( jQuery( selector ).filter( function() { |
|||
for ( i = 0; i < len; i++ ) { |
|||
if ( jQuery.contains( self[ i ], this ) ) { |
|||
return true; |
|||
} |
|||
} |
|||
} ) ); |
|||
} |
|||
|
|||
for ( i = 0; i < len; i++ ) { |
|||
jQuery.find( selector, self[ i ], ret ); |
|||
} |
|||
|
|||
// Needed because $( selector, context ) becomes $( context ).find( selector )
|
|||
ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); |
|||
ret.selector = this.selector ? this.selector + " " + selector : selector; |
|||
return ret; |
|||
}, |
|||
filter: function( selector ) { |
|||
return this.pushStack( winnow( this, selector || [], false ) ); |
|||
}, |
|||
not: function( selector ) { |
|||
return this.pushStack( winnow( this, selector || [], true ) ); |
|||
}, |
|||
is: function( selector ) { |
|||
return !!winnow( |
|||
this, |
|||
|
|||
// If this is a positional/relative selector, check membership in the returned set
|
|||
// so $("p:first").is("p:last") won't return true for a doc with two "p".
|
|||
typeof selector === "string" && rneedsContext.test( selector ) ? |
|||
jQuery( selector ) : |
|||
selector || [], |
|||
false |
|||
).length; |
|||
} |
|||
} ); |
|||
|
|||
} ); |
|||
@ -0,0 +1,20 @@ |
|||
define( [ |
|||
"../../core" |
|||
], function( jQuery ) { |
|||
|
|||
return function( elem, dir, until ) { |
|||
var matched = [], |
|||
truncate = until !== undefined; |
|||
|
|||
while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { |
|||
if ( elem.nodeType === 1 ) { |
|||
if ( truncate && jQuery( elem ).is( until ) ) { |
|||
break; |
|||
} |
|||
matched.push( elem ); |
|||
} |
|||
} |
|||
return matched; |
|||
}; |
|||
|
|||
} ); |
|||
@ -0,0 +1,6 @@ |
|||
define( [ |
|||
"../../core", |
|||
"../../selector" |
|||
], function( jQuery ) { |
|||
return jQuery.expr.match.needsContext; |
|||
} ); |
|||
@ -0,0 +1,15 @@ |
|||
define( function() { |
|||
|
|||
return function( n, elem ) { |
|||
var matched = []; |
|||
|
|||
for ( ; n; n = n.nextSibling ) { |
|||
if ( n.nodeType === 1 && n !== elem ) { |
|||
matched.push( n ); |
|||
} |
|||
} |
|||
|
|||
return matched; |
|||
}; |
|||
|
|||
} ); |
|||
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue