Npmize (vendor) scripts
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
parent
1fd6741182
commit
208788173d
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"presets": [
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"modules": false,
|
||||
"targets": {
|
||||
"browsers": [
|
||||
"last 2 versions",
|
||||
"ie >= 11"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
/core/js/dist/*.js binary
|
||||
/core/js/dist/*.js.map binary
|
|
@ -7,6 +7,7 @@
|
|||
/apps/inc.php
|
||||
/assets
|
||||
/.htaccess
|
||||
/node_modules
|
||||
/translationfiles
|
||||
/translationtool.phar
|
||||
|
||||
|
|
|
@ -7,9 +7,6 @@ script('user_ldap', [
|
|||
'renewPassword',
|
||||
]);
|
||||
style('user_ldap', 'renewPassword');
|
||||
\OC_Util::addVendorScript('strengthify/jquery.strengthify');
|
||||
\OC_Util::addVendorStyle('strengthify/strengthify');
|
||||
|
||||
?>
|
||||
|
||||
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
|
||||
|
|
22
bower.json
22
bower.json
|
@ -13,26 +13,6 @@
|
|||
"tests"
|
||||
],
|
||||
"dependencies": {
|
||||
"autosize": "4.0.2",
|
||||
"backbone": "1.2.3",
|
||||
"base64": "0.3.0",
|
||||
"blueimp-md5": "2.7.0",
|
||||
"bootstrap": "3.3.7",
|
||||
"clipboard": "1.7.1",
|
||||
"davclient.js": "https://github.com/evert/davclient.js.git#0.1.2",
|
||||
"handlebars": "4.0.5",
|
||||
"jcrop": "0.9.12",
|
||||
"jquery": "2.1.4",
|
||||
"jquery-migrate": "1.4.0",
|
||||
"jquery-ui": "1.12.1",
|
||||
"jsTimezoneDetect": "1.0.6",
|
||||
"marked": "0.3.6",
|
||||
"moment": "2.18.1",
|
||||
"select2": "3.4.8",
|
||||
"snapjs": "2.0.0-rc1",
|
||||
"strengthify": "0.5.5",
|
||||
"underscore": "1.8.3",
|
||||
"zxcvbn": "4.4.2",
|
||||
"es6-shim": "^0.35.4"
|
||||
"zxcvbn": "4.4.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,8 +92,6 @@ class SetupController {
|
|||
);
|
||||
$parameters = array_merge($defaults, $post);
|
||||
|
||||
\OC_Util::addVendorScript('strengthify/jquery.strengthify');
|
||||
\OC_Util::addVendorStyle('strengthify/strengthify');
|
||||
\OC_Util::addScript('setup');
|
||||
\OC_Template::printGuestPage('', 'installation', $parameters);
|
||||
}
|
||||
|
|
|
@ -1,21 +1,5 @@
|
|||
{
|
||||
"vendor": [
|
||||
"jquery/dist/jquery.min.js",
|
||||
"jquery-migrate/jquery-migrate.min.js",
|
||||
"jquery-ui/jquery-ui.min.js",
|
||||
"underscore/underscore-min.js",
|
||||
"moment/min/moment-with-locales.min.js",
|
||||
"handlebars/handlebars.runtime.min.js",
|
||||
"blueimp-md5/js/md5.min.js",
|
||||
"bootstrap/js/tooltip.js",
|
||||
"backbone/backbone.js",
|
||||
"es6-shim/es6-shim.min.js",
|
||||
"davclient.js/lib/client.js",
|
||||
"clipboard/dist/clipboard.min.js",
|
||||
"autosize/dist/autosize.min.js",
|
||||
"DOMPurify/dist/purify.min.js",
|
||||
"snapjs/dist/latest/snap.js",
|
||||
"select2/select2.js",
|
||||
"css-vars-ponyfill/dist/css-vars-ponyfill.min.js"
|
||||
],
|
||||
"libraries": [
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @author 2018 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/>.
|
||||
*/
|
||||
|
||||
import _ from 'underscore'
|
||||
import $ from 'jquery'
|
||||
import 'jquery-migrate/dist/jquery-migrate.min'
|
||||
import 'jquery-ui'
|
||||
// TODO: remove anything that is not really used
|
||||
import 'jquery-ui/ui/widgets/accordion'
|
||||
import 'jquery-ui/ui/widgets/autocomplete'
|
||||
import 'jquery-ui/ui/widgets/button'
|
||||
import 'jquery-ui/ui/widgets/checkboxradio'
|
||||
import 'jquery-ui/ui/widgets/controlgroup'
|
||||
import 'jquery-ui/ui/widgets/datepicker'
|
||||
import 'jquery-ui/ui/widgets/dialog'
|
||||
import 'jquery-ui/ui/widgets/draggable'
|
||||
import 'jquery-ui/ui/widgets/droppable'
|
||||
import 'jquery-ui/ui/widgets/menu'
|
||||
import 'jquery-ui/ui/widgets/mouse'
|
||||
import 'jquery-ui/ui/widgets/progressbar'
|
||||
import 'jquery-ui/ui/widgets/resizable'
|
||||
import 'jquery-ui/ui/widgets/selectable'
|
||||
import 'jquery-ui/ui/widgets/selectmenu'
|
||||
import 'jquery-ui/ui/widgets/slider'
|
||||
import 'jquery-ui/ui/widgets/sortable'
|
||||
import 'jquery-ui/ui/widgets/tabs'
|
||||
import 'jquery-ui/ui/widgets/tooltip'
|
||||
// TODO END
|
||||
import 'jquery-ui/themes/base/all.css'
|
||||
import autosize from 'autosize'
|
||||
import Backbone from 'backbone'
|
||||
import 'bootstrap/js/tooltip'
|
||||
import Clipboard from 'clipboard'
|
||||
import dav from 'davclient.js'
|
||||
import DOMPurify from 'dompurify'
|
||||
import Handlebars from 'handlebars'
|
||||
import 'jcrop/js/jquery.Jcrop'
|
||||
import 'jcrop/css/jquery.Jcrop.css'
|
||||
import jstimezonedetect from 'jstimezonedetect'
|
||||
import marked from 'marked'
|
||||
import md5 from 'blueimp-md5'
|
||||
import moment from 'moment'
|
||||
import Select2 from 'select2'
|
||||
import 'snap.js/dist/snap'
|
||||
import 'strengthify'
|
||||
import 'strengthify/strengthify.css'
|
||||
|
||||
window['_'] = _
|
||||
window['$'] = $
|
||||
window['autosize'] = autosize
|
||||
window['Backbone'] = Backbone
|
||||
window['Clipboard'] = Clipboard
|
||||
window['dav'] = dav
|
||||
window['DOMPurify'] = DOMPurify
|
||||
window['Handlebars'] = Handlebars
|
||||
window['jstimezonedetect'] = jstimezonedetect
|
||||
window['jstz'] = jstimezonedetect
|
||||
window['jQuery'] = $
|
||||
window['marked'] = marked
|
||||
window['md5'] = md5
|
||||
window['moment'] = moment
|
||||
window['Select2'] = Select2
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @author 2018 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/>.
|
||||
*/
|
||||
|
||||
// TODO: not required anymore https://caniuse.com/#search=atob
|
||||
import 'Base64'
|
||||
// TODO: use babel polyfill instead
|
||||
import 'es6-shim'
|
||||
|
||||
import './globals'
|
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"name": "DOMPurify",
|
||||
"version": "1.0.4",
|
||||
"homepage": "https://github.com/cure53/DOMPurify",
|
||||
"author": "Cure53 <info@cure53.de>",
|
||||
"description": "A DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG",
|
||||
"main": "src/purify.js",
|
||||
"keywords": [
|
||||
"dom",
|
||||
"xss",
|
||||
"cross site scripting",
|
||||
"html",
|
||||
"svg",
|
||||
"mathml",
|
||||
"sanitizer",
|
||||
"filter",
|
||||
"sanitize",
|
||||
"security",
|
||||
"secure"
|
||||
],
|
||||
"license": [
|
||||
"MPL-2.0",
|
||||
"Apache-2.0"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"demos",
|
||||
"scripts",
|
||||
"test",
|
||||
"website"
|
||||
],
|
||||
"_release": "1.0.4",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.0.4",
|
||||
"commit": "e7a1c316269bc0f6dd2698c3a7571bc4b561d892"
|
||||
},
|
||||
"_source": "https://github.com/cure53/DOMPurify.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "DOMPurify"
|
||||
}
|
|
@ -1,378 +0,0 @@
|
|||
DOMPurify
|
||||
Copyright 2015 Mario Heiderich
|
||||
|
||||
DOMPurify is free software; you can redistribute it and/or modify it under the
|
||||
terms of either:
|
||||
|
||||
a) the Apache License Version 2.0, or
|
||||
b) the Mozilla Public License Version 2.0
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Mozilla Public License, version 2.0
|
||||
|
||||
1. Definitions
|
||||
|
||||
1.1. “Contributor”
|
||||
|
||||
means each individual or legal entity that creates, contributes to the
|
||||
creation of, or owns Covered Software.
|
||||
|
||||
1.2. “Contributor Version”
|
||||
|
||||
means the combination of the Contributions of others (if any) used by a
|
||||
Contributor and that particular Contributor’s Contribution.
|
||||
|
||||
1.3. “Contribution”
|
||||
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. “Covered Software”
|
||||
|
||||
means Source Code Form to which the initial Contributor has attached the
|
||||
notice in Exhibit A, the Executable Form of such Source Code Form, and
|
||||
Modifications of such Source Code Form, in each case including portions
|
||||
thereof.
|
||||
|
||||
1.5. “Incompatible With Secondary Licenses”
|
||||
means
|
||||
|
||||
a. that the initial Contributor has attached the notice described in
|
||||
Exhibit B to the Covered Software; or
|
||||
|
||||
b. that the Covered Software was made available under the terms of version
|
||||
1.1 or earlier of the License, but not also under the terms of a
|
||||
Secondary License.
|
||||
|
||||
1.6. “Executable Form”
|
||||
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. “Larger Work”
|
||||
|
||||
means a work that combines Covered Software with other material, in a separate
|
||||
file or files, that is not Covered Software.
|
||||
|
||||
1.8. “License”
|
||||
|
||||
means this document.
|
||||
|
||||
1.9. “Licensable”
|
||||
|
||||
means having the right to grant, to the maximum extent possible, whether at the
|
||||
time of the initial grant or subsequently, any and all of the rights conveyed by
|
||||
this License.
|
||||
|
||||
1.10. “Modifications”
|
||||
|
||||
means any of the following:
|
||||
|
||||
a. any file in Source Code Form that results from an addition to, deletion
|
||||
from, or modification of the contents of Covered Software; or
|
||||
|
||||
b. any new file in Source Code Form that contains any Covered Software.
|
||||
|
||||
1.11. “Patent Claims” of a Contributor
|
||||
|
||||
means any patent claim(s), including without limitation, method, process,
|
||||
and apparatus claims, in any patent Licensable by such Contributor that
|
||||
would be infringed, but for the grant of the License, by the making,
|
||||
using, selling, offering for sale, having made, import, or transfer of
|
||||
either its Contributions or its Contributor Version.
|
||||
|
||||
1.12. “Secondary License”
|
||||
|
||||
means either the GNU General Public License, Version 2.0, the GNU Lesser
|
||||
General Public License, Version 2.1, the GNU Affero General Public
|
||||
License, Version 3.0, or any later versions of those licenses.
|
||||
|
||||
1.13. “Source Code Form”
|
||||
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. “You” (or “Your”)
|
||||
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, “You” includes any entity that controls, is
|
||||
controlled by, or is under common control with You. For purposes of this
|
||||
definition, “control” means (a) the power, direct or indirect, to cause
|
||||
the direction or management of such entity, whether by contract or
|
||||
otherwise, or (b) ownership of more than fifty percent (50%) of the
|
||||
outstanding shares or beneficial ownership of such entity.
|
||||
|
||||
|
||||
2. License Grants and Conditions
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
a. under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or as
|
||||
part of a Larger Work; and
|
||||
|
||||
b. under Patent Claims of such Contributor to make, use, sell, offer for
|
||||
sale, have made, import, and otherwise transfer either its Contributions
|
||||
or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution become
|
||||
effective for each Contribution on the date the Contributor first distributes
|
||||
such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under this
|
||||
License. No additional rights or licenses will be implied from the distribution
|
||||
or licensing of Covered Software under this License. Notwithstanding Section
|
||||
2.1(b) above, no patent license is granted by a Contributor:
|
||||
|
||||
a. for any code that a Contributor has removed from Covered Software; or
|
||||
|
||||
b. for infringements caused by: (i) Your and any other third party’s
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
c. under Patent Claims infringed by Covered Software in the absence of its
|
||||
Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks, or
|
||||
logos of any Contributor (except as may be necessary to comply with the
|
||||
notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this License
|
||||
(see Section 10.2) or under the terms of a Secondary License (if permitted
|
||||
under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its Contributions
|
||||
are its original creation(s) or it has sufficient rights to grant the
|
||||
rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under applicable
|
||||
copyright doctrines of fair use, fair dealing, or other equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
|
||||
Section 2.1.
|
||||
|
||||
|
||||
3. Responsibilities
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under the
|
||||
terms of this License. You must inform recipients that the Source Code Form
|
||||
of the Covered Software is governed by the terms of this License, and how
|
||||
they can obtain a copy of this License. You may not attempt to alter or
|
||||
restrict the recipients’ rights in the Source Code Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
a. such Covered Software must also be made available in Source Code Form,
|
||||
as described in Section 3.1, and You must inform recipients of the
|
||||
Executable Form how they can obtain a copy of such Source Code Form by
|
||||
reasonable means in a timely manner, at a charge no more than the cost
|
||||
of distribution to the recipient; and
|
||||
|
||||
b. You may distribute such Executable Form under the terms of this License,
|
||||
or sublicense it under different terms, provided that the license for
|
||||
the Executable Form does not attempt to limit or alter the recipients’
|
||||
rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for the
|
||||
Covered Software. If the Larger Work is a combination of Covered Software
|
||||
with a work governed by one or more Secondary Licenses, and the Covered
|
||||
Software is not Incompatible With Secondary Licenses, this License permits
|
||||
You to additionally distribute such Covered Software under the terms of
|
||||
such Secondary License(s), so that the recipient of the Larger Work may, at
|
||||
their option, further distribute the Covered Software under the terms of
|
||||
either this License or such Secondary License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices (including
|
||||
copyright notices, patent notices, disclaimers of warranty, or limitations
|
||||
of liability) contained within the Source Code Form of the Covered
|
||||
Software, except that You may alter any license notices to the extent
|
||||
required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on behalf
|
||||
of any Contributor. You must make it absolutely clear that any such
|
||||
warranty, support, indemnity, or liability obligation is offered by You
|
||||
alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this License
|
||||
with respect to some or all of the Covered Software due to statute, judicial
|
||||
order, or regulation then You must: (a) comply with the terms of this License
|
||||
to the maximum extent possible; and (b) describe the limitations and the code
|
||||
they affect. Such description must be placed in a text file included with all
|
||||
distributions of the Covered Software under this License. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5. Termination
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically if You
|
||||
fail to comply with any of its terms. However, if You become compliant,
|
||||
then the rights granted under this License from a particular Contributor
|
||||
are reinstated (a) provisionally, unless and until such Contributor
|
||||
explicitly and finally terminates Your grants, and (b) on an ongoing basis,
|
||||
if such Contributor fails to notify You of the non-compliance by some
|
||||
reasonable means prior to 60 days after You have come back into compliance.
|
||||
Moreover, Your grants from a particular Contributor are reinstated on an
|
||||
ongoing basis if such Contributor notifies You of the non-compliance by
|
||||
some reasonable means, this is the first time You have received notice of
|
||||
non-compliance with this License from such Contributor, and You become
|
||||
compliant prior to 30 days after Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions, counter-claims,
|
||||
and cross-claims) alleging that a Contributor Version directly or
|
||||
indirectly infringes any patent, then the rights granted to You by any and
|
||||
all Contributors for the Covered Software under Section 2.1 of this License
|
||||
shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
|
||||
license agreements (excluding distributors and resellers) which have been
|
||||
validly granted by You or Your distributors under this License prior to
|
||||
termination shall survive termination.
|
||||
|
||||
6. Disclaimer of Warranty
|
||||
|
||||
Covered Software is provided under this License on an “as is” basis, without
|
||||
warranty of any kind, either expressed, implied, or statutory, including,
|
||||
without limitation, warranties that the Covered Software is free of defects,
|
||||
merchantable, fit for a particular purpose or non-infringing. The entire
|
||||
risk as to the quality and performance of the Covered Software is with You.
|
||||
Should any Covered Software prove defective in any respect, You (not any
|
||||
Contributor) assume the cost of any necessary servicing, repair, or
|
||||
correction. This disclaimer of warranty constitutes an essential part of this
|
||||
License. No use of any Covered Software is authorized under this License
|
||||
except under this disclaimer.
|
||||
|
||||
7. Limitation of Liability
|
||||
|
||||
Under no circumstances and under no legal theory, whether tort (including
|
||||
negligence), contract, or otherwise, shall any Contributor, or anyone who
|
||||
distributes Covered Software as permitted above, be liable to You for any
|
||||
direct, indirect, special, incidental, or consequential damages of any
|
||||
character including, without limitation, damages for lost profits, loss of
|
||||
goodwill, work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses, even if such party shall have been
|
||||
informed of the possibility of such damages. This limitation of liability
|
||||
shall not apply to liability for death or personal injury resulting from such
|
||||
party’s negligence to the extent applicable law prohibits such limitation.
|
||||
Some jurisdictions do not allow the exclusion or limitation of incidental or
|
||||
consequential damages, so this exclusion and limitation may not apply to You.
|
||||
|
||||
8. Litigation
|
||||
|
||||
Any litigation relating to this License may be brought only in the courts of
|
||||
a jurisdiction where the defendant maintains its principal place of business
|
||||
and such litigation shall be governed by laws of that jurisdiction, without
|
||||
reference to its conflict-of-law provisions. Nothing in this Section shall
|
||||
prevent a party’s ability to bring cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
|
||||
This License represents the complete agreement concerning the subject matter
|
||||
hereof. If any provision of this License is held to be unenforceable, such
|
||||
provision shall be reformed only to the extent necessary to make it
|
||||
enforceable. Any law or regulation which provides that the language of a
|
||||
contract shall be construed against the drafter shall not be used to construe
|
||||
this License against a Contributor.
|
||||
|
||||
|
||||
10. Versions of the License
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version of
|
||||
the License under which You originally received the Covered Software, or
|
||||
under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a modified
|
||||
version of this License if you rename the license and remove any
|
||||
references to the name of the license steward (except to note that such
|
||||
modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
|
||||
This Source Code Form is subject to the
|
||||
terms of the Mozilla Public License, v.
|
||||
2.0. If a copy of the MPL was not
|
||||
distributed with this file, You can
|
||||
obtain one at
|
||||
http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular file, then
|
||||
You may include the notice in a location (such as a LICENSE file in a relevant
|
||||
directory) where a recipient would be likely to look for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - “Incompatible With Secondary Licenses” Notice
|
||||
|
||||
This Source Code Form is “Incompatible
|
||||
With Secondary Licenses”, as defined by
|
||||
the Mozilla Public License, v. 2.0.
|
||||
|
File diff suppressed because one or more lines are too long
|
@ -1,14 +0,0 @@
|
|||
{
|
||||
"name": "autosize",
|
||||
"homepage": "https://github.com/jackmoore/autosize",
|
||||
"version": "4.0.2",
|
||||
"_release": "4.0.2",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "4.0.2",
|
||||
"commit": "e394a257cc1e059eadc4198f56c301702289dd88"
|
||||
},
|
||||
"_source": "https://github.com/jackmoore/autosize.git",
|
||||
"_target": "4.0.2",
|
||||
"_originalSource": "autosize"
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Jack Moore
|
||||
|
||||
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.
|
|
@ -1,6 +0,0 @@
|
|||
/*!
|
||||
autosize 4.0.2
|
||||
license: MIT
|
||||
http://www.jacklmoore.com/autosize
|
||||
*/
|
||||
!function(e,t){if("function"==typeof define&&define.amd)define(["module","exports"],t);else if("undefined"!=typeof exports)t(module,exports);else{var n={exports:{}};t(n,n.exports),e.autosize=n.exports}}(this,function(e,t){"use strict";var n,o,p="function"==typeof Map?new Map:(n=[],o=[],{has:function(e){return-1<n.indexOf(e)},get:function(e){return o[n.indexOf(e)]},set:function(e,t){-1===n.indexOf(e)&&(n.push(e),o.push(t))},delete:function(e){var t=n.indexOf(e);-1<t&&(n.splice(t,1),o.splice(t,1))}}),c=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){c=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}function r(r){if(r&&r.nodeName&&"TEXTAREA"===r.nodeName&&!p.has(r)){var e,n=null,o=null,i=null,d=function(){r.clientWidth!==o&&a()},l=function(t){window.removeEventListener("resize",d,!1),r.removeEventListener("input",a,!1),r.removeEventListener("keyup",a,!1),r.removeEventListener("autosize:destroy",l,!1),r.removeEventListener("autosize:update",a,!1),Object.keys(t).forEach(function(e){r.style[e]=t[e]}),p.delete(r)}.bind(r,{height:r.style.height,resize:r.style.resize,overflowY:r.style.overflowY,overflowX:r.style.overflowX,wordWrap:r.style.wordWrap});r.addEventListener("autosize:destroy",l,!1),"onpropertychange"in r&&"oninput"in r&&r.addEventListener("keyup",a,!1),window.addEventListener("resize",d,!1),r.addEventListener("input",a,!1),r.addEventListener("autosize:update",a,!1),r.style.overflowX="hidden",r.style.wordWrap="break-word",p.set(r,{destroy:l,update:a}),"vertical"===(e=window.getComputedStyle(r,null)).resize?r.style.resize="none":"both"===e.resize&&(r.style.resize="horizontal"),n="content-box"===e.boxSizing?-(parseFloat(e.paddingTop)+parseFloat(e.paddingBottom)):parseFloat(e.borderTopWidth)+parseFloat(e.borderBottomWidth),isNaN(n)&&(n=0),a()}function s(e){var t=r.style.width;r.style.width="0px",r.offsetWidth,r.style.width=t,r.style.overflowY=e}function u(){if(0!==r.scrollHeight){var e=function(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}(r),t=document.documentElement&&document.documentElement.scrollTop;r.style.height="",r.style.height=r.scrollHeight+n+"px",o=r.clientWidth,e.forEach(function(e){e.node.scrollTop=e.scrollTop}),t&&(document.documentElement.scrollTop=t)}}function a(){u();var e=Math.round(parseFloat(r.style.height)),t=window.getComputedStyle(r,null),n="content-box"===t.boxSizing?Math.round(parseFloat(t.height)):r.offsetHeight;if(n<e?"hidden"===t.overflowY&&(s("scroll"),u(),n="content-box"===t.boxSizing?Math.round(parseFloat(window.getComputedStyle(r,null).height)):r.offsetHeight):"hidden"!==t.overflowY&&(s("hidden"),u(),n="content-box"===t.boxSizing?Math.round(parseFloat(window.getComputedStyle(r,null).height)):r.offsetHeight),i!==n){i=n;var o=c("autosize:resized");try{r.dispatchEvent(o)}catch(e){}}}}function i(e){var t=p.get(e);t&&t.destroy()}function d(e){var t=p.get(e);t&&t.update()}var l=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?((l=function(e){return e}).destroy=function(e){return e},l.update=function(e){return e}):((l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return r(e)}),e}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],i),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],d),e}),t.default=l,e.exports=t.default});
|
|
@ -1,32 +0,0 @@
|
|||
{
|
||||
"name": "backbone",
|
||||
"main": "backbone.js",
|
||||
"dependencies": {
|
||||
"underscore": ">=1.7.0"
|
||||
},
|
||||
"ignore": [
|
||||
"docs",
|
||||
"examples",
|
||||
"test",
|
||||
"*.yml",
|
||||
"*.html",
|
||||
"*.ico",
|
||||
"*.md",
|
||||
"CNAME",
|
||||
".*",
|
||||
"karma.*",
|
||||
"component.json",
|
||||
"package.json"
|
||||
],
|
||||
"homepage": "https://github.com/jashkenas/backbone",
|
||||
"version": "1.2.3",
|
||||
"_release": "1.2.3",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.2.3",
|
||||
"commit": "05fde9e201f7e2137796663081105cd6dad12a98"
|
||||
},
|
||||
"_source": "https://github.com/jashkenas/backbone.git",
|
||||
"_target": "1.2.3",
|
||||
"_originalSource": "backbone"
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
Copyright (c) 2010-2015 Jeremy Ashkenas, DocumentCloud
|
||||
|
||||
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.
|
File diff suppressed because it is too large
Load Diff
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"name": "base64",
|
||||
"version": "0.3.0",
|
||||
"description": "Base64 encoding and decoding",
|
||||
"main": "./base64.js",
|
||||
"license": "WTFPL",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/davidchambers/Base64.js.git"
|
||||
},
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"Makefile",
|
||||
"coverage/",
|
||||
"scripts/",
|
||||
"test/"
|
||||
],
|
||||
"homepage": "https://github.com/davidchambers/Base64.js",
|
||||
"_release": "0.3.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "0.3.0",
|
||||
"commit": "772df096a5ffe983f40202684ad45eed1e0e2d59"
|
||||
},
|
||||
"_source": "https://github.com/davidchambers/Base64.js.git",
|
||||
"_target": "0.3.0",
|
||||
"_originalSource": "base64"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (c) 2011..2012 David Chambers <dc@hashify.me>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
@ -1,61 +0,0 @@
|
|||
;(function () {
|
||||
|
||||
var object = typeof exports != 'undefined' ? exports : this; // #8: web workers
|
||||
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||||
|
||||
function InvalidCharacterError(message) {
|
||||
this.message = message;
|
||||
}
|
||||
InvalidCharacterError.prototype = new Error;
|
||||
InvalidCharacterError.prototype.name = 'InvalidCharacterError';
|
||||
|
||||
// encoder
|
||||
// [https://gist.github.com/999166] by [https://github.com/nignag]
|
||||
object.btoa || (
|
||||
object.btoa = function (input) {
|
||||
var str = String(input);
|
||||
for (
|
||||
// initialize result and counter
|
||||
var block, charCode, idx = 0, map = chars, output = '';
|
||||
// if the next str index does not exist:
|
||||
// change the mapping table to "="
|
||||
// check if d has no fractional digits
|
||||
str.charAt(idx | 0) || (map = '=', idx % 1);
|
||||
// "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
|
||||
output += map.charAt(63 & block >> 8 - idx % 1 * 8)
|
||||
) {
|
||||
charCode = str.charCodeAt(idx += 3/4);
|
||||
if (charCode > 0xFF) {
|
||||
throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
|
||||
}
|
||||
block = block << 8 | charCode;
|
||||
}
|
||||
return output;
|
||||
});
|
||||
|
||||
// decoder
|
||||
// [https://gist.github.com/1020396] by [https://github.com/atk]
|
||||
object.atob || (
|
||||
object.atob = function (input) {
|
||||
var str = String(input).replace(/=+$/, '');
|
||||
if (str.length % 4 == 1) {
|
||||
throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
|
||||
}
|
||||
for (
|
||||
// initialize result and counters
|
||||
var bc = 0, bs, buffer, idx = 0, output = '';
|
||||
// get next character
|
||||
buffer = str.charAt(idx++);
|
||||
// character found in table? initialize bit storage and add its ascii value;
|
||||
~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
|
||||
// and if not first of each 4 characters,
|
||||
// convert the first 8 bits to one ascii character
|
||||
bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
|
||||
) {
|
||||
// try to find character in table (0-63, not found => -1)
|
||||
buffer = chars.indexOf(buffer);
|
||||
}
|
||||
return output;
|
||||
});
|
||||
|
||||
}());
|
|
@ -1,14 +0,0 @@
|
|||
{
|
||||
"name": "blueimp-md5",
|
||||
"homepage": "https://github.com/blueimp/JavaScript-MD5",
|
||||
"version": "2.7.0",
|
||||
"_release": "2.7.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v2.7.0",
|
||||
"commit": "31cbd8e463b43882c7b0cf461508ddf1c8f14154"
|
||||
},
|
||||
"_source": "https://github.com/blueimp/JavaScript-MD5.git",
|
||||
"_target": "2.7.0",
|
||||
"_originalSource": "blueimp-md5"
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
|
|
@ -1,44 +0,0 @@
|
|||
{
|
||||
"name": "bootstrap",
|
||||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
||||
"keywords": [
|
||||
"css",
|
||||
"js",
|
||||
"less",
|
||||
"mobile-first",
|
||||
"responsive",
|
||||
"front-end",
|
||||
"framework",
|
||||
"web"
|
||||
],
|
||||
"homepage": "http://getbootstrap.com",
|
||||
"license": "MIT",
|
||||
"moduleType": "globals",
|
||||
"main": [
|
||||
"less/bootstrap.less",
|
||||
"dist/js/bootstrap.js"
|
||||
],
|
||||
"ignore": [
|
||||
"/.*",
|
||||
"_config.yml",
|
||||
"CNAME",
|
||||
"composer.json",
|
||||
"CONTRIBUTING.md",
|
||||
"docs",
|
||||
"js/tests",
|
||||
"test-infra"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": "1.9.1 - 3"
|
||||
},
|
||||
"version": "3.3.7",
|
||||
"_release": "3.3.7",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v3.3.7",
|
||||
"commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
|
||||
},
|
||||
"_source": "https://github.com/twbs/bootstrap.git",
|
||||
"_target": "3.3.7",
|
||||
"_originalSource": "bootstrap"
|
||||
}
|
|
@ -1,520 +0,0 @@
|
|||
/* ========================================================================
|
||||
* Bootstrap: tooltip.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#tooltip
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||
* ========================================================================
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// TOOLTIP PUBLIC CLASS DEFINITION
|
||||
// ===============================
|
||||
|
||||
var Tooltip = function (element, options) {
|
||||
this.type = null
|
||||
this.options = null
|
||||
this.enabled = null
|
||||
this.timeout = null
|
||||
this.hoverState = null
|
||||
this.$element = null
|
||||
this.inState = null
|
||||
|
||||
this.init('tooltip', element, options)
|
||||
}
|
||||
|
||||
Tooltip.VERSION = '3.3.7'
|
||||
|
||||
Tooltip.TRANSITION_DURATION = 150
|
||||
|
||||
Tooltip.DEFAULTS = {
|
||||
animation: true,
|
||||
placement: 'top',
|
||||
selector: false,
|
||||
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
||||
trigger: 'hover focus',
|
||||
title: '',
|
||||
delay: 0,
|
||||
html: false,
|
||||
container: false,
|
||||
viewport: {
|
||||
selector: 'body',
|
||||
padding: 0
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.init = function (type, element, options) {
|
||||
this.enabled = true
|
||||
this.type = type
|
||||
this.$element = $(element)
|
||||
this.options = this.getOptions(options)
|
||||
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
|
||||
this.inState = { click: false, hover: false, focus: false }
|
||||
|
||||
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
|
||||
throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
|
||||
}
|
||||
|
||||
var triggers = this.options.trigger.split(' ')
|
||||
|
||||
for (var i = triggers.length; i--;) {
|
||||
var trigger = triggers[i]
|
||||
|
||||
if (trigger == 'click') {
|
||||
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
||||
} else if (trigger != 'manual') {
|
||||
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
|
||||
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
|
||||
|
||||
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
||||
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
||||
}
|
||||
}
|
||||
|
||||
this.options.selector ?
|
||||
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
||||
this.fixTitle()
|
||||
}
|
||||
|
||||
Tooltip.prototype.getDefaults = function () {
|
||||
return Tooltip.DEFAULTS
|
||||
}
|
||||
|
||||
Tooltip.prototype.getOptions = function (options) {
|
||||
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
|
||||
|
||||
if (options.delay && typeof options.delay == 'number') {
|
||||
options.delay = {
|
||||
show: options.delay,
|
||||
hide: options.delay
|
||||
}
|
||||
}
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
Tooltip.prototype.getDelegateOptions = function () {
|
||||
var options = {}
|
||||
var defaults = this.getDefaults()
|
||||
|
||||
this._options && $.each(this._options, function (key, value) {
|
||||
if (defaults[key] != value) options[key] = value
|
||||
})
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
Tooltip.prototype.enter = function (obj) {
|
||||
var self = obj instanceof this.constructor ?
|
||||
obj : $(obj.currentTarget).data('bs.' + this.type)
|
||||
|
||||
if (!self) {
|
||||
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
||||
$(obj.currentTarget).data('bs.' + this.type, self)
|
||||
}
|
||||
|
||||
if (obj instanceof $.Event) {
|
||||
self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
|
||||
}
|
||||
|
||||
if (self.tip().hasClass('in') || self.hoverState == 'in') {
|
||||
self.hoverState = 'in'
|
||||
return
|
||||
}
|
||||
|
||||
clearTimeout(self.timeout)
|
||||
|
||||
self.hoverState = 'in'
|
||||
|
||||
if (!self.options.delay || !self.options.delay.show) return self.show()
|
||||
|
||||
self.timeout = setTimeout(function () {
|
||||
if (self.hoverState == 'in') self.show()
|
||||
}, self.options.delay.show)
|
||||
}
|
||||
|
||||
Tooltip.prototype.isInStateTrue = function () {
|
||||
for (var key in this.inState) {
|
||||
if (this.inState[key]) return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Tooltip.prototype.leave = function (obj) {
|
||||
var self = obj instanceof this.constructor ?
|
||||
obj : $(obj.currentTarget).data('bs.' + this.type)
|
||||
|
||||
if (!self) {
|
||||
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
||||
$(obj.currentTarget).data('bs.' + this.type, self)
|
||||
}
|
||||
|
||||
if (obj instanceof $.Event) {
|
||||
self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
|
||||
}
|
||||
|
||||
if (self.isInStateTrue()) return
|
||||
|
||||
clearTimeout(self.timeout)
|
||||
|
||||
self.hoverState = 'out'
|
||||
|
||||
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
||||
|
||||
self.timeout = setTimeout(function () {
|
||||
if (self.hoverState == 'out') self.hide()
|
||||
}, self.options.delay.hide)
|
||||
}
|
||||
|
||||
Tooltip.prototype.show = function () {
|
||||
var e = $.Event('show.bs.' + this.type)
|
||||
|
||||
if (this.hasContent() && this.enabled) {
|
||||
this.$element.trigger(e)
|
||||
|
||||
var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
|
||||
if (e.isDefaultPrevented() || !inDom) return
|
||||
var that = this
|
||||
|
||||
var $tip = this.tip()
|
||||
|
||||
var tipId = this.getUID(this.type)
|
||||
|
||||
this.setContent()
|
||||
$tip.attr('id', tipId)
|
||||
this.$element.attr('aria-describedby', tipId)
|
||||
|
||||
if (this.options.animation) $tip.addClass('fade')
|
||||
|
||||
var placement = typeof this.options.placement == 'function' ?
|
||||
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
||||
this.options.placement
|
||||
|
||||
var autoToken = /\s?auto?\s?/i
|
||||
var autoPlace = autoToken.test(placement)
|
||||
if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
|
||||
|
||||
$tip
|
||||
.detach()
|
||||
.css({ top: 0, left: 0, display: 'block' })
|
||||
.addClass(placement)
|
||||
.data('bs.' + this.type, this)
|
||||
|
||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||
this.$element.trigger('inserted.bs.' + this.type)
|
||||
|
||||
var pos = this.getPosition()
|
||||
var actualWidth = $tip[0].offsetWidth
|
||||
var actualHeight = $tip[0].offsetHeight
|
||||
|
||||
if (autoPlace) {
|
||||
var orgPlacement = placement
|
||||
var viewportDim = this.getPosition(this.$viewport)
|
||||
|
||||
placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
|
||||
placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
|
||||
placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
|
||||
placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
|
||||
placement
|
||||
|
||||
$tip
|
||||
.removeClass(orgPlacement)
|
||||
.addClass(placement)
|
||||
}
|
||||
|
||||
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
||||
|
||||
this.applyPlacement(calculatedOffset, placement)
|
||||
|
||||
var complete = function () {
|
||||
var prevHoverState = that.hoverState
|
||||
that.$element.trigger('shown.bs.' + that.type)
|
||||
that.hoverState = null
|
||||
|
||||
if (prevHoverState == 'out') that.leave(that)
|
||||
}
|
||||
|
||||
$.support.transition && this.$tip.hasClass('fade') ?
|
||||
$tip
|
||||
.one('bsTransitionEnd', complete)
|
||||
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
||||
complete()
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
||||
var $tip = this.tip()
|
||||
var width = $tip[0].offsetWidth
|
||||
var height = $tip[0].offsetHeight
|
||||
|
||||
// manually read margins because getBoundingClientRect includes difference
|
||||
var marginTop = parseInt($tip.css('margin-top'), 10)
|
||||
var marginLeft = parseInt($tip.css('margin-left'), 10)
|
||||
|
||||
// we must check for NaN for ie 8/9
|
||||
if (isNaN(marginTop)) marginTop = 0
|
||||
if (isNaN(marginLeft)) marginLeft = 0
|
||||
|
||||
offset.top += marginTop
|
||||
offset.left += marginLeft
|
||||
|
||||
// $.fn.offset doesn't round pixel values
|
||||
// so we use setOffset directly with our own function B-0
|
||||
$.offset.setOffset($tip[0], $.extend({
|
||||
using: function (props) {
|
||||
$tip.css({
|
||||
top: Math.round(props.top),
|
||||
left: Math.round(props.left)
|
||||
})
|
||||
}
|
||||
}, offset), 0)
|
||||
|
||||
$tip.addClass('in')
|
||||
|
||||
// check to see if placing tip in new offset caused the tip to resize itself
|
||||
var actualWidth = $tip[0].offsetWidth
|
||||
var actualHeight = $tip[0].offsetHeight
|
||||
|
||||
if (placement == 'top' && actualHeight != height) {
|
||||
offset.top = offset.top + height - actualHeight
|
||||
}
|
||||
|
||||
var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
|
||||
|
||||
if (delta.left) offset.left += delta.left
|
||||
else offset.top += delta.top
|
||||
|
||||
var isVertical = /top|bottom/.test(placement)
|
||||
var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
|
||||
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
|
||||
|
||||
$tip.offset(offset)
|
||||
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
|
||||
}
|
||||
|
||||
Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
|
||||
this.arrow()
|
||||
.css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
|
||||
.css(isVertical ? 'top' : 'left', '')
|
||||
}
|
||||
|
||||
Tooltip.prototype.setContent = function () {
|
||||
var $tip = this.tip()
|
||||
var title = this.getTitle()
|
||||
|
||||
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
||||
$tip.removeClass('fade in top bottom left right')
|
||||
}
|
||||
|
||||
Tooltip.prototype.hide = function (callback) {
|
||||
var that = this
|
||||
var $tip = $(this.$tip)
|
||||
var e = $.Event('hide.bs.' + this.type)
|
||||
|
||||
function complete() {
|
||||
if (that.hoverState != 'in') $tip.detach()
|
||||
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
|
||||
that.$element
|
||||
.removeAttr('aria-describedby')
|
||||
.trigger('hidden.bs.' + that.type)
|
||||
}
|
||||
callback && callback()
|
||||
}
|
||||
|
||||
this.$element.trigger(e)
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$tip.removeClass('in')
|
||||
|
||||
$.support.transition && $tip.hasClass('fade') ?
|
||||
$tip
|
||||
.one('bsTransitionEnd', complete)
|
||||
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
||||
complete()
|
||||
|
||||
this.hoverState = null
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
Tooltip.prototype.fixTitle = function () {
|
||||
var $e = this.$element
|
||||
if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
|
||||
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.hasContent = function () {
|
||||
return this.getTitle()
|
||||
}
|
||||
|
||||
Tooltip.prototype.getPosition = function ($element) {
|
||||
$element = $element || this.$element
|
||||
|
||||
var el = $element[0]
|
||||
var isBody = el.tagName == 'BODY'
|
||||
|
||||
var elRect = el.getBoundingClientRect()
|
||||
if (elRect.width == null) {
|
||||
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
||||
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
||||
}
|
||||
var isSvg = window.SVGElement && el instanceof window.SVGElement
|
||||
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
|
||||
// See https://github.com/twbs/bootstrap/issues/20280
|
||||
var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
|
||||
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
||||
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
||||
|
||||
return $.extend({}, elRect, scroll, outerDims, elOffset)
|
||||
}
|
||||
|
||||
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
||||
return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
||||
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
||||
|
||||
}
|
||||
|
||||
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
|
||||
var delta = { top: 0, left: 0 }
|
||||
if (!this.$viewport) return delta
|
||||
|
||||
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
|
||||
var viewportDimensions = this.getPosition(this.$viewport)
|
||||
|
||||
if (/right|left/.test(placement)) {
|
||||
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
|
||||
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
|
||||
if (topEdgeOffset < viewportDimensions.top) { // top overflow
|
||||
delta.top = viewportDimensions.top - topEdgeOffset
|
||||
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
|
||||
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
|
||||
}
|
||||
} else {
|
||||
var leftEdgeOffset = pos.left - viewportPadding
|
||||
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
|
||||
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
|
||||
delta.left = viewportDimensions.left - leftEdgeOffset
|
||||
} else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
|
||||
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
|
||||
}
|
||||
}
|
||||
|
||||
return delta
|
||||
}
|
||||
|
||||
Tooltip.prototype.getTitle = function () {
|
||||
var title
|
||||
var $e = this.$element
|
||||
var o = this.options
|
||||
|
||||
title = $e.attr('data-original-title')
|
||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||
|
||||
return title
|
||||
}
|
||||
|
||||
Tooltip.prototype.getUID = function (prefix) {
|
||||
do prefix += ~~(Math.random() * 1000000)
|
||||
while (document.getElementById(prefix))
|
||||
return prefix
|
||||
}
|
||||
|
||||
Tooltip.prototype.tip = function () {
|
||||
if (!this.$tip) {
|
||||
this.$tip = $(this.options.template)
|
||||
if (this.$tip.length != 1) {
|
||||
throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
|
||||
}
|
||||
}
|
||||
return this.$tip
|
||||
}
|
||||
|
||||
Tooltip.prototype.arrow = function () {
|
||||
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
|
||||
}
|
||||
|
||||
Tooltip.prototype.enable = function () {
|
||||
this.enabled = true
|
||||
}
|
||||
|
||||
Tooltip.prototype.disable = function () {
|
||||
this.enabled = false
|
||||
}
|
||||
|
||||
Tooltip.prototype.toggleEnabled = function () {
|
||||
this.enabled = !this.enabled
|
||||
}
|
||||
|
||||
Tooltip.prototype.toggle = function (e) {
|
||||
var self = this
|
||||
if (e) {
|
||||
self = $(e.currentTarget).data('bs.' + this.type)
|
||||
if (!self) {
|
||||
self = new this.constructor(e.currentTarget, this.getDelegateOptions())
|
||||
$(e.currentTarget).data('bs.' + this.type, self)
|
||||
}
|
||||
}
|
||||
|
||||
if (e) {
|
||||
self.inState.click = !self.inState.click
|
||||
if (self.isInStateTrue()) self.enter(self)
|
||||
else self.leave(self)
|
||||
} else {
|
||||
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.destroy = function () {
|
||||
var that = this
|
||||
clearTimeout(this.timeout)
|
||||
this.hide(function () {
|
||||
that.$element.off('.' + that.type).removeData('bs.' + that.type)
|
||||
if (that.$tip) {
|
||||
that.$tip.detach()
|
||||
}
|
||||
that.$tip = null
|
||||
that.$arrow = null
|
||||
that.$viewport = null
|
||||
that.$element = null
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// TOOLTIP PLUGIN DEFINITION
|
||||
// =========================
|
||||
|
||||
function Plugin(option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.tooltip')
|
||||
var options = typeof option == 'object' && option
|
||||
|
||||
if (!data && /destroy|hide/.test(option)) return
|
||||
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
var old = $.fn.tooltip
|
||||
|
||||
$.fn.tooltip = Plugin
|
||||
$.fn.tooltip.Constructor = Tooltip
|
||||
|
||||
|
||||
// TOOLTIP NO CONFLICT
|
||||
// ===================
|
||||
|
||||
$.fn.tooltip.noConflict = function () {
|
||||
$.fn.tooltip = old
|
||||
return this
|
||||
}
|
||||
|
||||
}(jQuery);
|
|
@ -1,32 +0,0 @@
|
|||
{
|
||||
"name": "clipboard",
|
||||
"version": "1.7.1",
|
||||
"description": "Modern copy to clipboard. No Flash. Just 2kb",
|
||||
"license": "MIT",
|
||||
"main": "dist/clipboard.js",
|
||||
"ignore": [
|
||||
"/.*/",
|
||||
"/demo/",
|
||||
"/test/",
|
||||
"/.*",
|
||||
"/bower.json",
|
||||
"/karma.conf.js",
|
||||
"/src",
|
||||
"/lib"
|
||||
],
|
||||
"keywords": [
|
||||
"clipboard",
|
||||
"copy",
|
||||
"cut"
|
||||
],
|
||||
"homepage": "https://github.com/zenorocha/clipboard.js",
|
||||
"_release": "1.7.1",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.7.1",
|
||||
"commit": "b6e6b80ab07eab03ce0d277515b3ed540773a330"
|
||||
},
|
||||
"_source": "https://github.com/zenorocha/clipboard.js.git",
|
||||
"_target": "1.7.1",
|
||||
"_originalSource": "clipboard"
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,32 +0,0 @@
|
|||
{
|
||||
"name": "davclient.js",
|
||||
"version": "0.1.2",
|
||||
"authors": [
|
||||
"Evert Pot <me@evertpot.com>"
|
||||
],
|
||||
"description": "A WebDAV, CalDAV and CardDAV client for browsers.",
|
||||
"main": "lib/client.js",
|
||||
"keywords": [
|
||||
"webdav",
|
||||
"caldav",
|
||||
"carddav"
|
||||
],
|
||||
"license": "MIT",
|
||||
"homepage": "http://sabre.io/",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"_release": "0.1.2",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "0.1.2",
|
||||
"commit": "c735ca284175c6f0419a2dd73de43de611afdb8f"
|
||||
},
|
||||
"_source": "https://github.com/evert/davclient.js.git",
|
||||
"_target": "0.1.2",
|
||||
"_originalSource": "https://github.com/evert/davclient.js.git"
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
Copyright (C) 2013-2014 fruux GmbH (https://fruux.com/)
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the name Sabre nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,462 +0,0 @@
|
|||
/*
|
||||
* vim: expandtab shiftwidth=4 softtabstop=4
|
||||
*/
|
||||
|
||||
/* global dav */
|
||||
if (typeof dav == 'undefined') { dav = {}; };
|
||||
|
||||
dav._XML_CHAR_MAP = {
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'&': '&',
|
||||
'"': '"',
|
||||
"'": '''
|
||||
};
|
||||
|
||||
dav._escapeXml = function(s) {
|
||||
return s.replace(/[<>&"']/g, function (ch) {
|
||||
return dav._XML_CHAR_MAP[ch];
|
||||
});
|
||||
};
|
||||
|
||||
dav.Client = function(options) {
|
||||
var i;
|
||||
for(i in options) {
|
||||
this[i] = options[i];
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
dav.Client.prototype = {
|
||||
|
||||
baseUrl : null,
|
||||
|
||||
userName : null,
|
||||
|
||||
password : null,
|
||||
|
||||
|
||||
xmlNamespaces : {
|
||||
'DAV:' : 'd'
|
||||
},
|
||||
|
||||
/**
|
||||
* Generates a propFind request.
|
||||
*
|
||||
* @param {string} url Url to do the propfind request on
|
||||
* @param {Array} properties List of properties to retrieve.
|
||||
* @param {Object} [headers] headers
|
||||
* @return {Promise}
|
||||
*/
|
||||
propFind : function(url, properties, depth, headers) {
|
||||
|
||||
if(typeof depth == "undefined") {
|
||||
depth = 0;
|
||||
}
|
||||
|
||||
headers = headers || {};
|
||||
|
||||
headers['Depth'] = depth;
|
||||
headers['Content-Type'] = 'application/xml; charset=utf-8';
|
||||
|
||||
var body =
|
||||
'<?xml version="1.0"?>\n' +
|
||||
'<d:propfind ';
|
||||
var namespace;
|
||||
for (namespace in this.xmlNamespaces) {
|
||||
body += ' xmlns:' + this.xmlNamespaces[namespace] + '="' + namespace + '"';
|
||||
}
|
||||
body += '>\n' +
|
||||
' <d:prop>\n';
|
||||
|
||||
for(var ii in properties) {
|
||||
if (!properties.hasOwnProperty(ii)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var property = this.parseClarkNotation(properties[ii]);
|
||||
if (this.xmlNamespaces[property.namespace]) {
|
||||
body+=' <' + this.xmlNamespaces[property.namespace] + ':' + property.name + ' />\n';
|
||||
} else {
|
||||
body+=' <x:' + property.name + ' xmlns:x="' + property.namespace + '" />\n';
|
||||
}
|
||||
|
||||
}
|
||||
body+=' </d:prop>\n';
|
||||
body+='</d:propfind>';
|
||||
|
||||
return this.request('PROPFIND', url, headers, body).then(
|
||||
function(result) {
|
||||
|
||||
if (depth===0) {
|
||||
return {
|
||||
status: result.status,
|
||||
body: result.body[0],
|
||||
xhr: result.xhr
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
status: result.status,
|
||||
body: result.body,
|
||||
xhr: result.xhr
|
||||
};
|
||||
}
|
||||
|
||||
}.bind(this)
|
||||
);
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Renders a "d:set" block for the given properties.
|
||||
*
|
||||
* @param {Object.<String,String>} properties
|
||||
* @return {String} XML "<d:set>" block
|
||||
*/
|
||||
_renderPropSet: function(properties) {
|
||||
var body = ' <d:set>\n' +
|
||||
' <d:prop>\n';
|
||||
|
||||
for(var ii in properties) {
|
||||
if (!properties.hasOwnProperty(ii)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var property = this.parseClarkNotation(ii);
|
||||
var propName;
|
||||
var propValue = properties[ii];
|
||||
if (this.xmlNamespaces[property.namespace]) {
|
||||
propName = this.xmlNamespaces[property.namespace] + ':' + property.name;
|
||||
} else {
|
||||
propName = 'x:' + property.name + ' xmlns:x="' + property.namespace + '"';
|
||||
}
|
||||
|
||||
// FIXME: hard-coded for now until we allow properties to
|
||||
// specify whether to be escaped or not
|
||||
if (propName !== 'd:resourcetype') {
|
||||
propValue = dav._escapeXml(propValue);
|
||||
}
|
||||
body += ' <' + propName + '>' + propValue + '</' + propName + '>\n';
|
||||
}
|
||||
body +=' </d:prop>\n';
|
||||
body +=' </d:set>\n';
|
||||
return body;
|
||||
},
|
||||
|
||||
/**
|
||||
* Generates a propPatch request.
|
||||
*
|
||||
* @param {string} url Url to do the proppatch request on
|
||||
* @param {Object.<String,String>} properties List of properties to store.
|
||||
* @param {Object} [headers] headers
|
||||
* @return {Promise}
|
||||
*/
|
||||
propPatch : function(url, properties, headers) {
|
||||
headers = headers || {};
|
||||
|
||||
headers['Content-Type'] = 'application/xml; charset=utf-8';
|
||||
|
||||
var body =
|
||||
'<?xml version="1.0"?>\n' +
|
||||
'<d:propertyupdate ';
|
||||
var namespace;
|
||||
for (namespace in this.xmlNamespaces) {
|
||||
body += ' xmlns:' + this.xmlNamespaces[namespace] + '="' + namespace + '"';
|
||||
}
|
||||
body += '>\n' + this._renderPropSet(properties);
|
||||
body += '</d:propertyupdate>';
|
||||
|
||||
return this.request('PROPPATCH', url, headers, body).then(
|
||||
function(result) {
|
||||
return {
|
||||
status: result.status,
|
||||
body: result.body,
|
||||
xhr: result.xhr
|
||||
};
|
||||
}.bind(this)
|
||||
);
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Generates a MKCOL request.
|
||||
* If attributes are given, it will use an extended MKCOL request.
|
||||
*
|
||||
* @param {string} url Url to do the proppatch request on
|
||||
* @param {Object.<String,String>} [properties] list of properties to store.
|
||||
* @param {Object} [headers] headers
|
||||
* @return {Promise}
|
||||
*/
|
||||
mkcol : function(url, properties, headers) {
|
||||
var body = '';
|
||||
headers = headers || {};
|
||||
headers['Content-Type'] = 'application/xml; charset=utf-8';
|
||||
|
||||
if (properties) {
|
||||
body =
|
||||
'<?xml version="1.0"?>\n' +
|
||||
'<d:mkcol';
|
||||
var namespace;
|
||||
for (namespace in this.xmlNamespaces) {
|
||||
body += ' xmlns:' + this.xmlNamespaces[namespace] + '="' + namespace + '"';
|
||||
}
|
||||
body += '>\n' + this._renderPropSet(properties);
|
||||
body +='</d:mkcol>';
|
||||
}
|
||||
|
||||
return this.request('MKCOL', url, headers, body).then(
|
||||
function(result) {
|
||||
return {
|
||||
status: result.status,
|
||||
body: result.body,
|
||||
xhr: result.xhr
|
||||
};
|
||||
}.bind(this)
|
||||
);
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Performs a HTTP request, and returns a Promise
|
||||
*
|
||||
* @param {string} method HTTP method
|
||||
* @param {string} url Relative or absolute url
|
||||
* @param {Object} headers HTTP headers as an object.
|
||||
* @param {string} body HTTP request body.
|
||||
* @return {Promise}
|
||||
*/
|
||||
request : function(method, url, headers, body) {
|
||||
|
||||
var self = this;
|
||||
var xhr = this.xhrProvider();
|
||||
headers = headers || {};
|
||||
|
||||
if (this.userName) {
|
||||
headers['Authorization'] = 'Basic ' + btoa(this.userName + ':' + this.password);
|
||||
// xhr.open(method, this.resolveUrl(url), true, this.userName, this.password);
|
||||
}
|
||||
xhr.open(method, this.resolveUrl(url), true);
|
||||
var ii;
|
||||
for(ii in headers) {
|
||||
xhr.setRequestHeader(ii, headers[ii]);
|
||||
}
|
||||
|
||||
// Work around for edge
|
||||
if (body === undefined) {
|
||||
xhr.send();
|
||||
} else {
|
||||
xhr.send(body);
|
||||
}
|
||||
|
||||
return new Promise(function(fulfill, reject) {
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
|
||||
if (xhr.readyState !== 4) {
|
||||
return;
|
||||
}
|
||||
|
||||
var resultBody = xhr.response;
|
||||
if (xhr.status === 207) {
|
||||
resultBody = self.parseMultiStatus(xhr.response);
|
||||
}
|
||||
|
||||
fulfill({
|
||||
body: resultBody,
|
||||
status: xhr.status,
|
||||
xhr: xhr
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
xhr.ontimeout = function() {
|
||||
|
||||
reject(new Error('Timeout exceeded'));
|
||||
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns an XMLHttpRequest object.
|
||||
*
|
||||
* This is in its own method, so it can be easily overridden.
|
||||
*
|
||||
* @return {XMLHttpRequest}
|
||||
*/
|
||||
xhrProvider : function() {
|
||||
|
||||
return new XMLHttpRequest();
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Parses a property node.
|
||||
*
|
||||
* Either returns a string if the node only contains text, or returns an
|
||||
* array of non-text subnodes.
|
||||
*
|
||||
* @param {Object} propNode node to parse
|
||||
* @return {string|Array} text content as string or array of subnodes, excluding text nodes
|
||||
*/
|
||||
_parsePropNode: function(propNode) {
|
||||
var content = null;
|
||||
if (propNode.childNodes && propNode.childNodes.length > 0) {
|
||||
var subNodes = [];
|
||||
// filter out text nodes
|
||||
for (var j = 0; j < propNode.childNodes.length; j++) {
|
||||
var node = propNode.childNodes[j];
|
||||
if (node.nodeType === 1) {
|
||||
subNodes.push(node);
|
||||
}
|
||||
}
|
||||
if (subNodes.length) {
|
||||
content = subNodes;
|
||||
}
|
||||
}
|
||||
|
||||
return content || propNode.textContent || propNode.text || '';
|
||||
},
|
||||
|
||||
/**
|
||||
* Parses a multi-status response body.
|
||||
*
|
||||
* @param {string} xmlBody
|
||||
* @param {Array}
|
||||
*/
|
||||
parseMultiStatus : function(xmlBody) {
|
||||
|
||||
var parser = new DOMParser();
|
||||
var doc = parser.parseFromString(xmlBody, "application/xml");
|
||||
|
||||
var resolver = function(foo) {
|
||||
var ii;
|
||||
for(ii in this.xmlNamespaces) {
|
||||
if (this.xmlNamespaces[ii] === foo) {
|
||||
return ii;
|
||||
}
|
||||
}
|
||||
}.bind(this);
|
||||
|
||||
var responseIterator = doc.evaluate('/d:multistatus/d:response', doc, resolver, XPathResult.ANY_TYPE, null);
|
||||
|
||||
var result = [];
|
||||
var responseNode = responseIterator.iterateNext();
|
||||
|
||||
while(responseNode) {
|
||||
|
||||
var response = {
|
||||
href : null,
|
||||
propStat : []
|
||||
};
|
||||
|
||||
response.href = doc.evaluate('string(d:href)', responseNode, resolver, XPathResult.ANY_TYPE, null).stringValue;
|
||||
|
||||
var propStatIterator = doc.evaluate('d:propstat', responseNode, resolver, XPathResult.ANY_TYPE, null);
|
||||
var propStatNode = propStatIterator.iterateNext();
|
||||
|
||||
while(propStatNode) {
|
||||
var propStat = {
|
||||
status : doc.evaluate('string(d:status)', propStatNode, resolver, XPathResult.ANY_TYPE, null).stringValue,
|
||||
properties : {},
|
||||
};
|
||||
|
||||
var propIterator = doc.evaluate('d:prop/*', propStatNode, resolver, XPathResult.ANY_TYPE, null);
|
||||
|
||||
var propNode = propIterator.iterateNext();
|
||||
while(propNode) {
|
||||
var content = this._parsePropNode(propNode);
|
||||
propStat.properties['{' + propNode.namespaceURI + '}' + propNode.localName] = content;
|
||||
propNode = propIterator.iterateNext();
|
||||
|
||||
}
|
||||
response.propStat.push(propStat);
|
||||
propStatNode = propStatIterator.iterateNext();
|
||||
|
||||
|
||||
}
|
||||
|
||||
result.push(response);
|
||||
responseNode = responseIterator.iterateNext();
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Takes a relative url, and maps it to an absolute url, using the baseUrl
|
||||
*
|
||||
* @param {string} url
|
||||
* @return {string}
|
||||
*/
|
||||
resolveUrl : function(url) {
|
||||
|
||||
// Note: this is rudamentary.. not sure yet if it handles every case.
|
||||
if (/^https?:\/\//i.test(url)) {
|
||||
// absolute
|
||||
return url;
|
||||
}
|
||||
|
||||
var baseParts = this.parseUrl(this.baseUrl);
|
||||
if (url.charAt('/')) {
|
||||
// Url starts with a slash
|
||||
return baseParts.root + url;
|
||||
}
|
||||
|
||||
// Url does not start with a slash, we need grab the base url right up until the last slash.
|
||||
var newUrl = baseParts.root + '/';
|
||||
if (baseParts.path.lastIndexOf('/')!==-1) {
|
||||
newUrl = newUrl = baseParts.path.subString(0, baseParts.path.lastIndexOf('/')) + '/';
|
||||
}
|
||||
newUrl+=url;
|
||||
return url;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Parses a url and returns its individual components.
|
||||
*
|
||||
* @param {String} url
|
||||
* @return {Object}
|
||||
*/
|
||||
parseUrl : function(url) {
|
||||
|
||||
var parts = url.match(/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/);
|
||||
var result = {
|
||||
url : parts[0],
|
||||
scheme : parts[1],
|
||||
host : parts[3],
|
||||
port : parts[4],
|
||||
path : parts[5],
|
||||
query : parts[6],
|
||||
fragment : parts[7],
|
||||
};
|
||||
result.root =
|
||||
result.scheme + '://' +
|
||||
result.host +
|
||||
(result.port ? ':' + result.port : '');
|
||||
|
||||
return result;
|
||||
|
||||
},
|
||||
|
||||
parseClarkNotation : function(propertyName) {
|
||||
|
||||
var result = propertyName.match(/^{([^}]+)}(.*)$/);
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
return {
|
||||
name : result[2],
|
||||
namespace : result[1]
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"name": "es6-promise",
|
||||
"namespace": "Promise",
|
||||
"version": "2.3.0",
|
||||
"description": "A polyfill for ES6-style Promises, tracking rsvp",
|
||||
"authors": [
|
||||
"Stefan Penner <stefan.penner@gmail.com>"
|
||||
],
|
||||
"main": "dist/es6-promise.js",
|
||||
"keywords": [
|
||||
"promise"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/jakearchibald/ES6-Promises.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/jakearchibald/ES6-Promises/issues"
|
||||
},
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests",
|
||||
"vendor",
|
||||
"tasks"
|
||||
],
|
||||
"homepage": "https://github.com/jakearchibald/es6-promise",
|
||||
"_release": "2.3.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "2.3.0",
|
||||
"commit": "fcbab11a1a981eb2290bfff89017cb764335a2a5"
|
||||
},
|
||||
"_source": "https://github.com/jakearchibald/es6-promise.git",
|
||||
"_target": "2.3.0",
|
||||
"_originalSource": "https://github.com/jakearchibald/es6-promise.git"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -1,972 +0,0 @@
|
|||
/*!
|
||||
* @overview es6-promise - a tiny implementation of Promises/A+.
|
||||
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
|
||||
* @license Licensed under MIT license
|
||||
* See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE
|
||||
* @version 2.3.0
|
||||
*/
|
||||
|
||||
(function() {
|
||||
"use strict";
|
||||
function lib$es6$promise$utils$$objectOrFunction(x) {
|
||||
return typeof x === 'function' || (typeof x === 'object' && x !== null);
|
||||
}
|
||||
|
||||
function lib$es6$promise$utils$$isFunction(x) {
|
||||
return typeof x === 'function';
|
||||
}
|
||||
|
||||
function lib$es6$promise$utils$$isMaybeThenable(x) {
|
||||
return typeof x === 'object' && x !== null;
|
||||
}
|
||||
|
||||
var lib$es6$promise$utils$$_isArray;
|
||||
if (!Array.isArray) {
|
||||
lib$es6$promise$utils$$_isArray = function (x) {
|
||||
return Object.prototype.toString.call(x) === '[object Array]';
|
||||
};
|
||||
} else {
|
||||
lib$es6$promise$utils$$_isArray = Array.isArray;
|
||||
}
|
||||
|
||||
var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;
|
||||
var lib$es6$promise$asap$$len = 0;
|
||||
var lib$es6$promise$asap$$toString = {}.toString;
|
||||
var lib$es6$promise$asap$$vertxNext;
|
||||
var lib$es6$promise$asap$$customSchedulerFn;
|
||||
|
||||
var lib$es6$promise$asap$$asap = function asap(callback, arg) {
|
||||
lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;
|
||||
lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;
|
||||
lib$es6$promise$asap$$len += 2;
|
||||
if (lib$es6$promise$asap$$len === 2) {
|
||||
// If len is 2, that means that we need to schedule an async flush.
|
||||
// If additional callbacks are queued before the queue is flushed, they
|
||||
// will be processed by this flush that we are scheduling.
|
||||
if (lib$es6$promise$asap$$customSchedulerFn) {
|
||||
lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);
|
||||
} else {
|
||||
lib$es6$promise$asap$$scheduleFlush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$asap$$setScheduler(scheduleFn) {
|
||||
lib$es6$promise$asap$$customSchedulerFn = scheduleFn;
|
||||
}
|
||||
|
||||
function lib$es6$promise$asap$$setAsap(asapFn) {
|
||||
lib$es6$promise$asap$$asap = asapFn;
|
||||
}
|
||||
|
||||
var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;
|
||||
var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};
|
||||
var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;
|
||||
var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
|
||||
|
||||
// test for web worker but not in IE10
|
||||
var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&
|
||||
typeof importScripts !== 'undefined' &&
|
||||
typeof MessageChannel !== 'undefined';
|
||||
|
||||
// node
|
||||
function lib$es6$promise$asap$$useNextTick() {
|
||||
var nextTick = process.nextTick;
|
||||
// node version 0.10.x displays a deprecation warning when nextTick is used recursively
|
||||
// setImmediate should be used instead instead
|
||||
var version = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);
|
||||
if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {
|
||||
nextTick = setImmediate;
|
||||
}
|
||||
return function() {
|
||||
nextTick(lib$es6$promise$asap$$flush);
|
||||
};
|
||||
}
|
||||
|
||||
// vertx
|
||||
function lib$es6$promise$asap$$useVertxTimer() {
|
||||
return function() {
|
||||
lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);
|
||||
};
|
||||
}
|
||||
|
||||
function lib$es6$promise$asap$$useMutationObserver() {
|
||||
var iterations = 0;
|
||||
var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);
|
||||
var node = document.createTextNode('');
|
||||
observer.observe(node, { characterData: true });
|
||||
|
||||
return function() {
|
||||
node.data = (iterations = ++iterations % 2);
|
||||
};
|
||||
}
|
||||
|
||||
// web worker
|
||||
function lib$es6$promise$asap$$useMessageChannel() {
|
||||
var channel = new MessageChannel();
|
||||
channel.port1.onmessage = lib$es6$promise$asap$$flush;
|
||||
return function () {
|
||||
channel.port2.postMessage(0);
|
||||
};
|
||||
}
|
||||
|
||||
function lib$es6$promise$asap$$useSetTimeout() {
|
||||
return function() {
|
||||
setTimeout(lib$es6$promise$asap$$flush, 1);
|
||||
};
|
||||
}
|
||||
|
||||
var lib$es6$promise$asap$$queue = new Array(1000);
|
||||
function lib$es6$promise$asap$$flush() {
|
||||
for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {
|
||||
var callback = lib$es6$promise$asap$$queue[i];
|
||||
var arg = lib$es6$promise$asap$$queue[i+1];
|
||||
|
||||
callback(arg);
|
||||
|
||||
lib$es6$promise$asap$$queue[i] = undefined;
|
||||
lib$es6$promise$asap$$queue[i+1] = undefined;
|
||||
}
|
||||
|
||||
lib$es6$promise$asap$$len = 0;
|
||||
}
|
||||
|
||||
function lib$es6$promise$asap$$attemptVertex() {
|
||||
try {
|
||||
var r = require;
|
||||
var vertx = r('vertx');
|
||||
lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;
|
||||
return lib$es6$promise$asap$$useVertxTimer();
|
||||
} catch(e) {
|
||||
return lib$es6$promise$asap$$useSetTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
var lib$es6$promise$asap$$scheduleFlush;
|
||||
// Decide what async method to use to triggering processing of queued callbacks:
|
||||
if (lib$es6$promise$asap$$isNode) {
|
||||
lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();
|
||||
} else if (lib$es6$promise$asap$$BrowserMutationObserver) {
|
||||
lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();
|
||||
} else if (lib$es6$promise$asap$$isWorker) {
|
||||
lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();
|
||||
} else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {
|
||||
lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();
|
||||
} else {
|
||||
lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$noop() {}
|
||||
|
||||
var lib$es6$promise$$internal$$PENDING = void 0;
|
||||
var lib$es6$promise$$internal$$FULFILLED = 1;
|
||||
var lib$es6$promise$$internal$$REJECTED = 2;
|
||||
|
||||
var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();
|
||||
|
||||
function lib$es6$promise$$internal$$selfFullfillment() {
|
||||
return new TypeError("You cannot resolve a promise with itself");
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$cannotReturnOwn() {
|
||||
return new TypeError('A promises callback cannot return that same promise.');
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$getThen(promise) {
|
||||
try {
|
||||
return promise.then;
|
||||
} catch(error) {
|
||||
lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;
|
||||
return lib$es6$promise$$internal$$GET_THEN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {
|
||||
try {
|
||||
then.call(value, fulfillmentHandler, rejectionHandler);
|
||||
} catch(e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {
|
||||
lib$es6$promise$asap$$asap(function(promise) {
|
||||
var sealed = false;
|
||||
var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {
|
||||
if (sealed) { return; }
|
||||
sealed = true;
|
||||
if (thenable !== value) {
|
||||
lib$es6$promise$$internal$$resolve(promise, value);
|
||||
} else {
|
||||
lib$es6$promise$$internal$$fulfill(promise, value);
|
||||
}
|
||||
}, function(reason) {
|
||||
if (sealed) { return; }
|
||||
sealed = true;
|
||||
|
||||
lib$es6$promise$$internal$$reject(promise, reason);
|
||||
}, 'Settle: ' + (promise._label || ' unknown promise'));
|
||||
|
||||
if (!sealed && error) {
|
||||
sealed = true;
|
||||
lib$es6$promise$$internal$$reject(promise, error);
|
||||
}
|
||||
}, promise);
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {
|
||||
if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {
|
||||
lib$es6$promise$$internal$$fulfill(promise, thenable._result);
|
||||
} else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {
|
||||
lib$es6$promise$$internal$$reject(promise, thenable._result);
|
||||
} else {
|
||||
lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {
|
||||
lib$es6$promise$$internal$$resolve(promise, value);
|
||||
}, function(reason) {
|
||||
lib$es6$promise$$internal$$reject(promise, reason);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {
|
||||
if (maybeThenable.constructor === promise.constructor) {
|
||||
lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);
|
||||
} else {
|
||||
var then = lib$es6$promise$$internal$$getThen(maybeThenable);
|
||||
|
||||
if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {
|
||||
lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);
|
||||
} else if (then === undefined) {
|
||||
lib$es6$promise$$internal$$fulfill(promise, maybeThenable);
|
||||
} else if (lib$es6$promise$utils$$isFunction(then)) {
|
||||
lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);
|
||||
} else {
|
||||
lib$es6$promise$$internal$$fulfill(promise, maybeThenable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$resolve(promise, value) {
|
||||
if (promise === value) {
|
||||
lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());
|
||||
} else if (lib$es6$promise$utils$$objectOrFunction(value)) {
|
||||
lib$es6$promise$$internal$$handleMaybeThenable(promise, value);
|
||||
} else {
|
||||
lib$es6$promise$$internal$$fulfill(promise, value);
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$publishRejection(promise) {
|
||||
if (promise._onerror) {
|
||||
promise._onerror(promise._result);
|
||||
}
|
||||
|
||||
lib$es6$promise$$internal$$publish(promise);
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$fulfill(promise, value) {
|
||||
if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }
|
||||
|
||||
promise._result = value;
|
||||
promise._state = lib$es6$promise$$internal$$FULFILLED;
|
||||
|
||||
if (promise._subscribers.length !== 0) {
|
||||
lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$reject(promise, reason) {
|
||||
if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }
|
||||
promise._state = lib$es6$promise$$internal$$REJECTED;
|
||||
promise._result = reason;
|
||||
|
||||
lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {
|
||||
var subscribers = parent._subscribers;
|
||||
var length = subscribers.length;
|
||||
|
||||
parent._onerror = null;
|
||||
|
||||
subscribers[length] = child;
|
||||
subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;
|
||||
subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;
|
||||
|
||||
if (length === 0 && parent._state) {
|
||||
lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$publish(promise) {
|
||||
var subscribers = promise._subscribers;
|
||||
var settled = promise._state;
|
||||
|
||||
if (subscribers.length === 0) { return; }
|
||||
|
||||
var child, callback, detail = promise._result;
|
||||
|
||||
for (var i = 0; i < subscribers.length; i += 3) {
|
||||
child = subscribers[i];
|
||||
callback = subscribers[i + settled];
|
||||
|
||||
if (child) {
|
||||
lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);
|
||||
} else {
|
||||
callback(detail);
|
||||
}
|
||||
}
|
||||
|
||||
promise._subscribers.length = 0;
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$ErrorObject() {
|
||||
this.error = null;
|
||||
}
|
||||
|
||||
var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();
|
||||
|
||||
function lib$es6$promise$$internal$$tryCatch(callback, detail) {
|
||||
try {
|
||||
return callback(detail);
|
||||
} catch(e) {
|
||||
lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;
|
||||
return lib$es6$promise$$internal$$TRY_CATCH_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {
|
||||
var hasCallback = lib$es6$promise$utils$$isFunction(callback),
|
||||
value, error, succeeded, failed;
|
||||
|
||||
if (hasCallback) {
|
||||
value = lib$es6$promise$$internal$$tryCatch(callback, detail);
|
||||
|
||||
if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {
|
||||
failed = true;
|
||||
error = value.error;
|
||||
value = null;
|
||||
} else {
|
||||
succeeded = true;
|
||||
}
|
||||
|
||||
if (promise === value) {
|
||||
lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());
|
||||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
value = detail;
|
||||
succeeded = true;
|
||||
}
|
||||
|
||||
if (promise._state !== lib$es6$promise$$internal$$PENDING) {
|
||||
// noop
|
||||
} else if (hasCallback && succeeded) {
|
||||
lib$es6$promise$$internal$$resolve(promise, value);
|
||||
} else if (failed) {
|
||||
lib$es6$promise$$internal$$reject(promise, error);
|
||||
} else if (settled === lib$es6$promise$$internal$$FULFILLED) {
|
||||
lib$es6$promise$$internal$$fulfill(promise, value);
|
||||
} else if (settled === lib$es6$promise$$internal$$REJECTED) {
|
||||
lib$es6$promise$$internal$$reject(promise, value);
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$$internal$$initializePromise(promise, resolver) {
|
||||
try {
|
||||
resolver(function resolvePromise(value){
|
||||
lib$es6$promise$$internal$$resolve(promise, value);
|
||||
}, function rejectPromise(reason) {
|
||||
lib$es6$promise$$internal$$reject(promise, reason);
|
||||
});
|
||||
} catch(e) {
|
||||
lib$es6$promise$$internal$$reject(promise, e);
|
||||
}
|
||||
}
|
||||
|
||||
function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {
|
||||
var enumerator = this;
|
||||
|
||||
enumerator._instanceConstructor = Constructor;
|
||||
enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);
|
||||
|
||||
if (enumerator._validateInput(input)) {
|
||||
enumerator._input = input;
|
||||
enumerator.length = input.length;
|
||||
enumerator._remaining = input.length;
|
||||
|
||||
enumerator._init();
|
||||
|
||||
if (enumerator.length === 0) {
|
||||
lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);
|
||||
} else {
|
||||
enumerator.length = enumerator.length || 0;
|
||||
enumerator._enumerate();
|
||||
if (enumerator._remaining === 0) {
|
||||
lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());
|
||||
}
|
||||
}
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {
|
||||
return lib$es6$promise$utils$$isArray(input);
|
||||
};
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {
|
||||
return new Error('Array Methods must be provided an Array');
|
||||
};
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {
|
||||
this._result = new Array(this.length);
|
||||
};
|
||||
|
||||
var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {
|
||||
var enumerator = this;
|
||||
|
||||
var length = enumerator.length;
|
||||
var promise = enumerator.promise;
|
||||
var input = enumerator._input;
|
||||
|
||||
for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {
|
||||
enumerator._eachEntry(input[i], i);
|
||||
}
|
||||
};
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {
|
||||
var enumerator = this;
|
||||
var c = enumerator._instanceConstructor;
|
||||
|
||||
if (lib$es6$promise$utils$$isMaybeThenable(entry)) {
|
||||
if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {
|
||||
entry._onerror = null;
|
||||
enumerator._settledAt(entry._state, i, entry._result);
|
||||
} else {
|
||||
enumerator._willSettleAt(c.resolve(entry), i);
|
||||
}
|
||||
} else {
|
||||
enumerator._remaining--;
|
||||
enumerator._result[i] = entry;
|
||||
}
|
||||
};
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {
|
||||
var enumerator = this;
|
||||
var promise = enumerator.promise;
|
||||
|
||||
if (promise._state === lib$es6$promise$$internal$$PENDING) {
|
||||
enumerator._remaining--;
|
||||
|
||||
if (state === lib$es6$promise$$internal$$REJECTED) {
|
||||
lib$es6$promise$$internal$$reject(promise, value);
|
||||
} else {
|
||||
enumerator._result[i] = value;
|
||||
}
|
||||
}
|
||||
|
||||
if (enumerator._remaining === 0) {
|
||||
lib$es6$promise$$internal$$fulfill(promise, enumerator._result);
|
||||
}
|
||||
};
|
||||
|
||||
lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {
|
||||
var enumerator = this;
|
||||
|
||||
lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {
|
||||
enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);
|
||||
}, function(reason) {
|
||||
enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);
|
||||
});
|
||||
};
|
||||
function lib$es6$promise$promise$all$$all(entries) {
|
||||
return new lib$es6$promise$enumerator$$default(this, entries).promise;
|
||||
}
|
||||
var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;
|
||||
function lib$es6$promise$promise$race$$race(entries) {
|
||||
/*jshint validthis:true */
|
||||
var Constructor = this;
|
||||
|
||||
var promise = new Constructor(lib$es6$promise$$internal$$noop);
|
||||
|
||||
if (!lib$es6$promise$utils$$isArray(entries)) {
|
||||
lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));
|
||||
return promise;
|
||||
}
|
||||
|
||||
var length = entries.length;
|
||||
|
||||
function onFulfillment(value) {
|
||||
lib$es6$promise$$internal$$resolve(promise, value);
|
||||
}
|
||||
|
||||
function onRejection(reason) {
|
||||
lib$es6$promise$$internal$$reject(promise, reason);
|
||||
}
|
||||
|
||||
for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {
|
||||
lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);
|
||||
}
|
||||
|
||||
return promise;
|
||||
}
|
||||
var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;
|
||||
function lib$es6$promise$promise$resolve$$resolve(object) {
|
||||
/*jshint validthis:true */
|
||||
var Constructor = this;
|
||||
|
||||
if (object && typeof object === 'object' && object.constructor === Constructor) {
|
||||
return object;
|
||||
}
|
||||
|
||||
var promise = new Constructor(lib$es6$promise$$internal$$noop);
|
||||
lib$es6$promise$$internal$$resolve(promise, object);
|
||||
return promise;
|
||||
}
|
||||
var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;
|
||||
function lib$es6$promise$promise$reject$$reject(reason) {
|
||||
/*jshint validthis:true */
|
||||
var Constructor = this;
|
||||
var promise = new Constructor(lib$es6$promise$$internal$$noop);
|
||||
lib$es6$promise$$internal$$reject(promise, reason);
|
||||
return promise;
|
||||
}
|
||||
var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;
|
||||
|
||||
var lib$es6$promise$promise$$counter = 0;
|
||||
|
||||
function lib$es6$promise$promise$$needsResolver() {
|
||||
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
|
||||
}
|
||||
|
||||
function lib$es6$promise$promise$$needsNew() {
|
||||
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
|
||||
}
|
||||
|
||||
var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;
|
||||
/**
|
||||
Promise objects represent the eventual result of an asynchronous operation. The
|
||||
primary way of interacting with a promise is through its `then` method, which
|
||||
registers callbacks to receive either a promise's eventual value or the reason
|
||||
why the promise cannot be fulfilled.
|
||||
|
||||
Terminology
|
||||
-----------
|
||||
|
||||
- `promise` is an object or function with a `then` method whose behavior conforms to this specification.
|
||||
- `thenable` is an object or function that defines a `then` method.
|
||||
- `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
|
||||
- `exception` is a value that is thrown using the throw statement.
|
||||
- `reason` is a value that indicates why a promise was rejected.
|
||||
- `settled` the final resting state of a promise, fulfilled or rejected.
|
||||
|
||||
A promise can be in one of three states: pending, fulfilled, or rejected.
|
||||
|
||||
Promises that are fulfilled have a fulfillment value and are in the fulfilled
|
||||
state. Promises that are rejected have a rejection reason and are in the
|
||||
rejected state. A fulfillment value is never a thenable.
|
||||
|
||||
Promises can also be said to *resolve* a value. If this value is also a
|
||||
promise, then the original promise's settled state will match the value's
|
||||
settled state. So a promise that *resolves* a promise that rejects will
|
||||
itself reject, and a promise that *resolves* a promise that fulfills will
|
||||
itself fulfill.
|
||||
|
||||
|
||||
Basic Usage:
|
||||
------------
|
||||
|
||||
```js
|
||||
var promise = new Promise(function(resolve, reject) {
|
||||
// on success
|
||||
resolve(value);
|
||||
|
||||
// on failure
|
||||
reject(reason);
|
||||
});
|
||||
|
||||
promise.then(function(value) {
|
||||
// on fulfillment
|
||||
}, function(reason) {
|
||||
// on rejection
|
||||
});
|
||||
```
|
||||
|
||||
Advanced Usage:
|
||||
---------------
|
||||
|
||||
Promises shine when abstracting away asynchronous interactions such as
|
||||
`XMLHttpRequest`s.
|
||||
|
||||
```js
|
||||
function getJSON(url) {
|
||||
return new Promise(function(resolve, reject){
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
xhr.open('GET', url);
|
||||
xhr.onreadystatechange = handler;
|
||||
xhr.responseType = 'json';
|
||||
xhr.setRequestHeader('Accept', 'application/json');
|
||||
xhr.send();
|
||||
|
||||
function handler() {
|
||||
if (this.readyState === this.DONE) {
|
||||
if (this.status === 200) {
|
||||
resolve(this.response);
|
||||
} else {
|
||||
reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
getJSON('/posts.json').then(function(json) {
|
||||
// on fulfillment
|
||||
}, function(reason) {
|
||||
// on rejection
|
||||
});
|
||||
```
|
||||
|
||||
Unlike callbacks, promises are great composable primitives.
|
||||
|
||||
```js
|
||||
Promise.all([
|
||||
getJSON('/posts'),
|
||||
getJSON('/comments')
|
||||
]).then(function(values){
|
||||
values[0] // => postsJSON
|
||||
values[1] // => commentsJSON
|
||||
|
||||
return values;
|
||||
});
|
||||
```
|
||||
|
||||
@class Promise
|
||||
@param {function} resolver
|
||||
Useful for tooling.
|
||||
@constructor
|
||||
*/
|
||||
function lib$es6$promise$promise$$Promise(resolver) {
|
||||
this._id = lib$es6$promise$promise$$counter++;
|
||||
this._state = undefined;
|
||||
this._result = undefined;
|
||||
this._subscribers = [];
|
||||
|
||||
if (lib$es6$promise$$internal$$noop !== resolver) {
|
||||
if (!lib$es6$promise$utils$$isFunction(resolver)) {
|
||||
lib$es6$promise$promise$$needsResolver();
|
||||
}
|
||||
|
||||
if (!(this instanceof lib$es6$promise$promise$$Promise)) {
|
||||
lib$es6$promise$promise$$needsNew();
|
||||
}
|
||||
|
||||
lib$es6$promise$$internal$$initializePromise(this, resolver);
|
||||
}
|
||||
}
|
||||
|
||||
lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;
|
||||
lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;
|
||||
lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;
|
||||
lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;
|
||||
lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;
|
||||
lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;
|
||||
lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;
|
||||
|
||||
lib$es6$promise$promise$$Promise.prototype = {
|
||||
constructor: lib$es6$promise$promise$$Promise,
|
||||
|
||||
/**
|
||||
The primary way of interacting with a promise is through its `then` method,
|
||||
which registers callbacks to receive either a promise's eventual value or the
|
||||
reason why the promise cannot be fulfilled.
|
||||
|
||||
```js
|
||||
findUser().then(function(user){
|
||||
// user is available
|
||||
}, function(reason){
|
||||
// user is unavailable, and you are given the reason why
|
||||
});
|
||||
```
|
||||
|
||||
Chaining
|
||||
--------
|
||||
|
||||
The return value of `then` is itself a promise. This second, 'downstream'
|
||||
promise is resolved with the return value of the first promise's fulfillment
|
||||
or rejection handler, or rejected if the handler throws an exception.
|
||||
|
||||
```js
|
||||
findUser().then(function (user) {
|
||||
return user.name;
|
||||
}, function (reason) {
|
||||
return 'default name';
|
||||
}).then(function (userName) {
|
||||
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it
|
||||
// will be `'default name'`
|
||||
});
|
||||
|
||||
findUser().then(function (user) {
|
||||
throw new Error('Found user, but still unhappy');
|
||||
}, function (reason) {
|
||||
throw new Error('`findUser` rejected and we're unhappy');
|
||||
}).then(function (value) {
|
||||
// never reached
|
||||
}, function (reason) {
|
||||
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
|
||||
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
|
||||
});
|
||||
```
|
||||
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
|
||||
|
||||
```js
|
||||
findUser().then(function (user) {
|
||||
throw new PedagogicalException('Upstream error');
|
||||
}).then(function (value) {
|
||||
// never reached
|
||||
}).then(function (value) {
|
||||
// never reached
|
||||
}, function (reason) {
|
||||
// The `PedgagocialException` is propagated all the way down to here
|
||||
});
|
||||
```
|
||||
|
||||
Assimilation
|
||||
------------
|
||||
|
||||
Sometimes the value you want to propagate to a downstream promise can only be
|
||||
retrieved asynchronously. This can be achieved by returning a promise in the
|
||||
fulfillment or rejection handler. The downstream promise will then be pending
|
||||
until the returned promise is settled. This is called *assimilation*.
|
||||
|
||||
```js
|
||||
findUser().then(function (user) {
|
||||
return findCommentsByAuthor(user);
|
||||
}).then(function (comments) {
|
||||
// The user's comments are now available
|
||||
});
|
||||
```
|
||||
|
||||
If the assimliated promise rejects, then the downstream promise will also reject.
|
||||
|
||||
```js
|
||||
findUser().then(function (user) {
|
||||
return findCommentsByAuthor(user);
|
||||
}).then(function (comments) {
|
||||
// If `findCommentsByAuthor` fulfills, we'll have the value here
|
||||
}, function (reason) {
|
||||
// If `findCommentsByAuthor` rejects, we'll have the reason here
|
||||
});
|
||||
```
|
||||
|
||||
Simple Example
|
||||
--------------
|
||||
|
||||
Synchronous Example
|
||||
|
||||
```javascript
|
||||
var result;
|
||||
|
||||
try {
|
||||
result = findResult();
|
||||
// success
|
||||
} catch(reason) {
|
||||
// failure
|
||||
}
|
||||
```
|
||||
|
||||
Errback Example
|
||||
|
||||
```js
|
||||
findResult(function(result, err){
|
||||
if (err) {
|
||||
// failure
|
||||
} else {
|
||||
// success
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
Promise Example;
|
||||
|
||||
```javascript
|
||||
findResult().then(function(result){
|
||||
// success
|
||||
}, function(reason){
|
||||
// failure
|
||||
});
|
||||
```
|
||||
|
||||
Advanced Example
|
||||
--------------
|
||||
|
||||
Synchronous Example
|
||||
|
||||
```javascript
|
||||
var author, books;
|
||||
|
||||
try {
|
||||
author = findAuthor();
|
||||
books = findBooksByAuthor(author);
|
||||
// success
|
||||
} catch(reason) {
|
||||
// failure
|
||||
}
|
||||
```
|
||||
|
||||
Errback Example
|
||||
|
||||
```js
|
||||
|
||||
function foundBooks(books) {
|
||||
|
||||
}
|
||||
|
||||
function failure(reason) {
|
||||
|
||||
}
|
||||
|
||||
findAuthor(function(author, err){
|
||||
if (err) {
|
||||
failure(err);
|
||||
// failure
|
||||
} else {
|
||||
try {
|
||||
findBoooksByAuthor(author, function(books, err) {
|
||||
if (err) {
|
||||
failure(err);
|
||||
} else {
|
||||
try {
|
||||
foundBooks(books);
|
||||
} catch(reason) {
|
||||
failure(reason);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch(error) {
|
||||
failure(err);
|
||||
}
|
||||
// success
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
Promise Example;
|
||||
|
||||
```javascript
|
||||
findAuthor().
|
||||
then(findBooksByAuthor).
|
||||
then(function(books){
|
||||
// found books
|
||||
}).catch(function(reason){
|
||||
// something went wrong
|
||||
});
|
||||
```
|
||||
|
||||
@method then
|
||||
@param {Function} onFulfilled
|
||||
@param {Function} onRejected
|
||||
Useful for tooling.
|
||||
@return {Promise}
|
||||
*/
|
||||
then: function(onFulfillment, onRejection) {
|
||||
var parent = this;
|
||||
var state = parent._state;
|
||||
|
||||
if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {
|
||||
return this;
|
||||
}
|
||||
|
||||
var child = new this.constructor(lib$es6$promise$$internal$$noop);
|
||||
var result = parent._result;
|
||||
|
||||
if (state) {
|
||||
var callback = arguments[state - 1];
|
||||
lib$es6$promise$asap$$asap(function(){
|
||||
lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);
|
||||
});
|
||||
} else {
|
||||
lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);
|
||||
}
|
||||
|
||||
return child;
|
||||
},
|
||||
|
||||
/**
|
||||
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
|
||||
as the catch block of a try/catch statement.
|
||||
|
||||
```js
|
||||
function findAuthor(){
|
||||
throw new Error('couldn't find that author');
|
||||
}
|
||||
|
||||
// synchronous
|
||||
try {
|
||||
findAuthor();
|
||||
} catch(reason) {
|
||||
// something went wrong
|
||||
}
|
||||
|
||||
// async with promises
|
||||
findAuthor().catch(function(reason){
|
||||
// something went wrong
|
||||
});
|
||||
```
|
||||
|
||||
@method catch
|
||||
@param {Function} onRejection
|
||||
Useful for tooling.
|
||||
@return {Promise}
|
||||
*/
|
||||
'catch': function(onRejection) {
|
||||
return this.then(null, onRejection);
|
||||
}
|
||||
};
|
||||
function lib$es6$promise$polyfill$$polyfill() {
|
||||
var local;
|
||||
|
||||
if (typeof global !== 'undefined') {
|
||||
local = global;
|
||||
} else if (typeof self !== 'undefined') {
|
||||
local = self;
|
||||
} else {
|
||||
try {
|
||||
local = Function('return this')();
|
||||
} catch (e) {
|
||||
throw new Error('polyfill failed because global object is unavailable in this environment');
|
||||
}
|
||||
}
|
||||
|
||||
var P = local.Promise;
|
||||
|
||||
if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {
|
||||
return;
|
||||
}
|
||||
|
||||
local.Promise = lib$es6$promise$promise$$default;
|
||||
}
|
||||
var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;
|
||||
|
||||
var lib$es6$promise$umd$$ES6Promise = {
|
||||
'Promise': lib$es6$promise$promise$$default,
|
||||
'polyfill': lib$es6$promise$polyfill$$default
|
||||
};
|
||||
|
||||
/* global define:true module:true window: true */
|
||||
if (typeof define === 'function' && define['amd']) {
|
||||
define(function() { return lib$es6$promise$umd$$ES6Promise; });
|
||||
} else if (typeof module !== 'undefined' && module['exports']) {
|
||||
module['exports'] = lib$es6$promise$umd$$ES6Promise;
|
||||
} else if (typeof this !== 'undefined') {
|
||||
this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;
|
||||
}
|
||||
|
||||
lib$es6$promise$polyfill$$default();
|
||||
}).call(this);
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
{
|
||||
"name": "es6-shim",
|
||||
"repo": "paulmillr/es6-shim",
|
||||
"description": "ECMAScript 6 (Harmony) compatibility shims for legacy JavaScript engines",
|
||||
"keywords": [
|
||||
"ecmascript",
|
||||
"harmony",
|
||||
"es6",
|
||||
"shim",
|
||||
"promise",
|
||||
"promises",
|
||||
"setPrototypeOf",
|
||||
"map",
|
||||
"set",
|
||||
"__proto__"
|
||||
],
|
||||
"main": "es6-shim.js",
|
||||
"scripts": [
|
||||
"es6-shim.js"
|
||||
],
|
||||
"dependencies": {},
|
||||
"development": {},
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"components",
|
||||
"test"
|
||||
],
|
||||
"homepage": "https://github.com/paulmillr/es6-shim",
|
||||
"version": "0.35.4",
|
||||
"_release": "0.35.4",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "0.35.4",
|
||||
"commit": "271142ca5c58b7bfec6970b1c070515da0d8ef98"
|
||||
},
|
||||
"_source": "https://github.com/paulmillr/es6-shim.git",
|
||||
"_target": "^0.35.4",
|
||||
"_originalSource": "es6-shim"
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
The project was initially based on [es6-shim by Axel Rauschmayer](https://github.com/rauschma/es6-shim).
|
||||
|
||||
Current maintainers are: [Paul Miller](http://paulmillr.com), [Jordan Harband](https://github.com/ljharb), and [C. Scott Ananian](http://cscott.net).
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2016 Paul Miller (http://paulmillr.com) and contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
File diff suppressed because one or more lines are too long
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"name": "handlebars",
|
||||
"version": "4.0.5",
|
||||
"main": "handlebars.js",
|
||||
"license": "MIT",
|
||||
"dependencies": {},
|
||||
"homepage": "https://github.com/components/handlebars.js",
|
||||
"_release": "4.0.5",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v4.0.5",
|
||||
"commit": "9b7adf2df23cf0ecc7bd60b43d43989e63222f5a"
|
||||
},
|
||||
"_source": "https://github.com/components/handlebars.js.git",
|
||||
"_target": "4.0.5",
|
||||
"_originalSource": "handlebars"
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -1,14 +0,0 @@
|
|||
{
|
||||
"name": "jcrop",
|
||||
"homepage": "https://github.com/tapmodo/Jcrop",
|
||||
"version": "0.9.12",
|
||||
"_release": "0.9.12",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v0.9.12",
|
||||
"commit": "1902fbc6afa14481dc019a17e0dcb7d62b808a98"
|
||||
},
|
||||
"_source": "https://github.com/tapmodo/Jcrop.git",
|
||||
"_target": "0.9.12",
|
||||
"_originalSource": "jcrop"
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
Copyright (c) 2011 Tapmodo Interactive LLC,
|
||||
http://github.com/tapmodo/Jcrop
|
||||
|
||||
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.
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 329 B |
|
@ -1,165 +0,0 @@
|
|||
/* jquery.Jcrop.css v0.9.12 - MIT License */
|
||||
/*
|
||||
The outer-most container in a typical Jcrop instance
|
||||
If you are having difficulty with formatting related to styles
|
||||
on a parent element, place any fixes here or in a like selector
|
||||
|
||||
You can also style this element if you want to add a border, etc
|
||||
A better method for styling can be seen below with .jcrop-light
|
||||
(Add a class to the holder and style elements for that extended class)
|
||||
*/
|
||||
.jcrop-holder {
|
||||
direction: ltr;
|
||||
text-align: left;
|
||||
}
|
||||
/* Selection Border */
|
||||
.jcrop-vline,
|
||||
.jcrop-hline {
|
||||
background: #ffffff url("Jcrop.gif");
|
||||
font-size: 0;
|
||||
position: absolute;
|
||||
}
|
||||
.jcrop-vline {
|
||||
height: 100%;
|
||||
width: 1px !important;
|
||||
}
|
||||
.jcrop-vline.right {
|
||||
right: 0;
|
||||
}
|
||||
.jcrop-hline {
|
||||
height: 1px !important;
|
||||
width: 100%;
|
||||
}
|
||||
.jcrop-hline.bottom {
|
||||
bottom: 0;
|
||||
}
|
||||
/* Invisible click targets */
|
||||
.jcrop-tracker {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
/* "turn off" link highlight */
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
/* disable callout, image save panel */
|
||||
-webkit-touch-callout: none;
|
||||
/* disable cut copy paste */
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
/* Selection Handles */
|
||||
.jcrop-handle {
|
||||
background-color: #333333;
|
||||
border: 1px #eeeeee solid;
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
font-size: 1px;
|
||||
}
|
||||
.jcrop-handle.ord-n {
|
||||
left: 50%;
|
||||
margin-left: -4px;
|
||||
margin-top: -4px;
|
||||
top: 0;
|
||||
}
|
||||
.jcrop-handle.ord-s {
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
margin-bottom: -4px;
|
||||
margin-left: -4px;
|
||||
}
|
||||
.jcrop-handle.ord-e {
|
||||
margin-right: -4px;
|
||||
margin-top: -4px;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
}
|
||||
.jcrop-handle.ord-w {
|
||||
left: 0;
|
||||
margin-left: -4px;
|
||||
margin-top: -4px;
|
||||
top: 50%;
|
||||
}
|
||||
.jcrop-handle.ord-nw {
|
||||
left: 0;
|
||||
margin-left: -4px;
|
||||
margin-top: -4px;
|
||||
top: 0;
|
||||
}
|
||||
.jcrop-handle.ord-ne {
|
||||
margin-right: -4px;
|
||||
margin-top: -4px;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
.jcrop-handle.ord-se {
|
||||
bottom: 0;
|
||||
margin-bottom: -4px;
|
||||
margin-right: -4px;
|
||||
right: 0;
|
||||
}
|
||||
.jcrop-handle.ord-sw {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
margin-bottom: -4px;
|
||||
margin-left: -4px;
|
||||
}
|
||||
/* Dragbars */
|
||||
.jcrop-dragbar.ord-n,
|
||||
.jcrop-dragbar.ord-s {
|
||||
height: 7px;
|
||||
width: 100%;
|
||||
}
|
||||
.jcrop-dragbar.ord-e,
|
||||
.jcrop-dragbar.ord-w {
|
||||
height: 100%;
|
||||
width: 7px;
|
||||
}
|
||||
.jcrop-dragbar.ord-n {
|
||||
margin-top: -4px;
|
||||
}
|
||||
.jcrop-dragbar.ord-s {
|
||||
bottom: 0;
|
||||
margin-bottom: -4px;
|
||||
}
|
||||
.jcrop-dragbar.ord-e {
|
||||
margin-right: -4px;
|
||||
right: 0;
|
||||
}
|
||||
.jcrop-dragbar.ord-w {
|
||||
margin-left: -4px;
|
||||
}
|
||||
/* The "jcrop-light" class/extension */
|
||||
.jcrop-light .jcrop-vline,
|
||||
.jcrop-light .jcrop-hline {
|
||||
background: #ffffff;
|
||||
filter: alpha(opacity=70) !important;
|
||||
opacity: .70!important;
|
||||
}
|
||||
.jcrop-light .jcrop-handle {
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
background-color: #000000;
|
||||
border-color: #ffffff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
/* The "jcrop-dark" class/extension */
|
||||
.jcrop-dark .jcrop-vline,
|
||||
.jcrop-dark .jcrop-hline {
|
||||
background: #000000;
|
||||
filter: alpha(opacity=70) !important;
|
||||
opacity: 0.7 !important;
|
||||
}
|
||||
.jcrop-dark .jcrop-handle {
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
background-color: #ffffff;
|
||||
border-color: #000000;
|
||||
border-radius: 3px;
|
||||
}
|
||||
/* Simple macro to turn off the antlines */
|
||||
.solid-line .jcrop-vline,
|
||||
.solid-line .jcrop-hline {
|
||||
background: #ffffff;
|
||||
}
|
||||
/* Fix for twitter bootstrap et al. */
|
||||
.jcrop-holder img,
|
||||
img.jcrop-preview {
|
||||
max-width: none;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"name": "jquery-migrate",
|
||||
"version": "1.4.0",
|
||||
"main": "jquery-migrate.js",
|
||||
"homepage": "https://github.com/appleboy/jquery-migrate",
|
||||
"_release": "1.4.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.4.0",
|
||||
"commit": "d70e5a532864fdc2263f0d15030ef84671fc5807"
|
||||
},
|
||||
"_source": "https://github.com/appleboy/jquery-migrate.git",
|
||||
"_target": "1.4.0",
|
||||
"_originalSource": "jquery-migrate"
|
||||
}
|
|
@ -1,717 +0,0 @@
|
|||
/*!
|
||||
* jQuery Migrate - v1.4.0 - 2016-02-26
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
*/
|
||||
(function( jQuery, window, undefined ) {
|
||||
// See http://bugs.jquery.com/ticket/13335
|
||||
// "use strict";
|
||||
|
||||
|
||||
jQuery.migrateVersion = "1.4.0";
|
||||
|
||||
|
||||
var warnedAbout = {};
|
||||
|
||||
// List of warnings already given; public read only
|
||||
jQuery.migrateWarnings = [];
|
||||
|
||||
// Set to true to prevent console output; migrateWarnings still maintained
|
||||
// jQuery.migrateMute = false;
|
||||
|
||||
// Show a message on the console so devs know we're active
|
||||
if ( window.console && window.console.log ) {
|
||||
window.console.log( "JQMIGRATE: Migrate is installed" +
|
||||
( jQuery.migrateMute ? "" : " with logging active" ) +
|
||||
", version " + jQuery.migrateVersion );
|
||||
}
|
||||
|
||||
// Set to false to disable traces that appear with warnings
|
||||
if ( jQuery.migrateTrace === undefined ) {
|
||||
jQuery.migrateTrace = true;
|
||||
}
|
||||
|
||||
// Forget any warnings we've already given; public
|
||||
jQuery.migrateReset = function() {
|
||||
warnedAbout = {};
|
||||
jQuery.migrateWarnings.length = 0;
|
||||
};
|
||||
|
||||
function migrateWarn( msg) {
|
||||
var console = window.console;
|
||||
if ( !warnedAbout[ msg ] ) {
|
||||
warnedAbout[ msg ] = true;
|
||||
jQuery.migrateWarnings.push( msg );
|
||||
if ( console && console.warn && !jQuery.migrateMute ) {
|
||||
console.warn( "JQMIGRATE: " + msg );
|
||||
if ( jQuery.migrateTrace && console.trace ) {
|
||||
console.trace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function migrateWarnProp( obj, prop, value, msg ) {
|
||||
if ( Object.defineProperty ) {
|
||||
// On ES5 browsers (non-oldIE), warn if the code tries to get prop;
|
||||
// allow property to be overwritten in case some other plugin wants it
|
||||
try {
|
||||
Object.defineProperty( obj, prop, {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
migrateWarn( msg );
|
||||
return value;
|
||||
},
|
||||
set: function( newValue ) {
|
||||
migrateWarn( msg );
|
||||
value = newValue;
|
||||
}
|
||||
});
|
||||
return;
|
||||
} catch( err ) {
|
||||
// IE8 is a dope about Object.defineProperty, can't warn there
|
||||
}
|
||||
}
|
||||
|
||||
// Non-ES5 (or broken) browser; just set the property
|
||||
jQuery._definePropertyBroken = true;
|
||||
obj[ prop ] = value;
|
||||
}
|
||||
|
||||
if ( document.compatMode === "BackCompat" ) {
|
||||
// jQuery has never supported or tested Quirks Mode
|
||||
migrateWarn( "jQuery is not compatible with Quirks Mode" );
|
||||
}
|
||||
|
||||
|
||||
var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
|
||||
oldAttr = jQuery.attr,
|
||||
valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
|
||||
function() { return null; },
|
||||
valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
|
||||
function() { return undefined; },
|
||||
rnoType = /^(?:input|button)$/i,
|
||||
rnoAttrNodeType = /^[238]$/,
|
||||
rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
|
||||
ruseDefault = /^(?:checked|selected)$/i;
|
||||
|
||||
// jQuery.attrFn
|
||||
migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
|
||||
|
||||
jQuery.attr = function( elem, name, value, pass ) {
|
||||
var lowerName = name.toLowerCase(),
|
||||
nType = elem && elem.nodeType;
|
||||
|
||||
if ( pass ) {
|
||||
// Since pass is used internally, we only warn for new jQuery
|
||||
// versions where there isn't a pass arg in the formal params
|
||||
if ( oldAttr.length < 4 ) {
|
||||
migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
|
||||
}
|
||||
if ( elem && !rnoAttrNodeType.test( nType ) &&
|
||||
(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
|
||||
return jQuery( elem )[ name ]( value );
|
||||
}
|
||||
}
|
||||
|
||||
// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
|
||||
// for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
|
||||
if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
|
||||
migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
|
||||
}
|
||||
|
||||
// Restore boolHook for boolean property/attribute synchronization
|
||||
if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
|
||||
jQuery.attrHooks[ lowerName ] = {
|
||||
get: function( elem, name ) {
|
||||
// Align boolean attributes with corresponding properties
|
||||
// Fall back to attribute presence where some booleans are not supported
|
||||
var attrNode,
|
||||
property = jQuery.prop( elem, name );
|
||||
return property === true || typeof property !== "boolean" &&
|
||||
( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
|
||||
|
||||
name.toLowerCase() :
|
||||
undefined;
|
||||
},
|
||||
set: function( elem, value, name ) {
|
||||
var propName;
|
||||
if ( value === false ) {
|
||||
// Remove boolean attributes when set to false
|
||||
jQuery.removeAttr( elem, name );
|
||||
} else {
|
||||
// value is true since we know at this point it's type boolean and not false
|
||||
// Set boolean attributes to the same name and set the DOM property
|
||||
propName = jQuery.propFix[ name ] || name;
|
||||
if ( propName in elem ) {
|
||||
// Only set the IDL specifically if it already exists on the element
|
||||
elem[ propName ] = true;
|
||||
}
|
||||
|
||||
elem.setAttribute( name, name.toLowerCase() );
|
||||
}
|
||||
return name;
|
||||
}
|
||||
};
|
||||
|
||||
// Warn only for attributes that can remain distinct from their properties post-1.9
|
||||
if ( ruseDefault.test( lowerName ) ) {
|
||||
migrateWarn( "jQuery.fn.attr('" + lowerName + "') might use property instead of attribute" );
|
||||
}
|
||||
}
|
||||
|
||||
return oldAttr.call( jQuery, elem, name, value );
|
||||
};
|
||||
|
||||
// attrHooks: value
|
||||
jQuery.attrHooks.value = {
|
||||
get: function( elem, name ) {
|
||||
var nodeName = ( elem.nodeName || "" ).toLowerCase();
|
||||
if ( nodeName === "button" ) {
|
||||
return valueAttrGet.apply( this, arguments );
|
||||
}
|
||||
if ( nodeName !== "input" && nodeName !== "option" ) {
|
||||
migrateWarn("jQuery.fn.attr('value') no longer gets properties");
|
||||
}
|
||||
return name in elem ?
|
||||
elem.value :
|
||||
null;
|
||||
},
|
||||
set: function( elem, value ) {
|
||||
var nodeName = ( elem.nodeName || "" ).toLowerCase();
|
||||
if ( nodeName === "button" ) {
|
||||
return valueAttrSet.apply( this, arguments );
|
||||
}
|
||||
if ( nodeName !== "input" && nodeName !== "option" ) {
|
||||
migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
|
||||
}
|
||||
// Does not return so that setAttribute is also used
|
||||
elem.value = value;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var matched, browser,
|
||||
oldInit = jQuery.fn.init,
|
||||
oldParseJSON = jQuery.parseJSON,
|
||||
rspaceAngle = /^\s*</,
|
||||
rattrHash = /\[\s*\w+\s*[~|^$*]?=\s*(?![\s'"])[^#\]]*#/,
|
||||
// Note: XSS check is done below after string is trimmed
|
||||
rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
|
||||
|
||||
// $(html) "looks like html" rule change
|
||||
jQuery.fn.init = function( selector, context, rootjQuery ) {
|
||||
var match, ret;
|
||||
|
||||
if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) &&
|
||||
(match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
|
||||
// This is an HTML string according to the "old" rules; is it still?
|
||||
if ( !rspaceAngle.test( selector ) ) {
|
||||
migrateWarn("$(html) HTML strings must start with '<' character");
|
||||
}
|
||||
if ( match[ 3 ] ) {
|
||||
migrateWarn("$(html) HTML text after last tag is ignored");
|
||||
}
|
||||
|
||||
// Consistently reject any HTML-like string starting with a hash (#9521)
|
||||
// Note that this may break jQuery 1.6.x code that otherwise would work.
|
||||
if ( match[ 0 ].charAt( 0 ) === "#" ) {
|
||||
migrateWarn("HTML string cannot start with a '#' character");
|
||||
jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
|
||||
}
|
||||
// Now process using loose rules; let pre-1.8 play too
|
||||
if ( context && context.context ) {
|
||||
// jQuery object as context; parseHTML expects a DOM object
|
||||
context = context.context;
|
||||
}
|
||||
if ( jQuery.parseHTML ) {
|
||||
return oldInit.call( this,
|
||||
jQuery.parseHTML( match[ 2 ], context && context.ownerDocument ||
|
||||
context || document, true ), context, rootjQuery );
|
||||
}
|
||||
}
|
||||
|
||||
if ( selector === "#" ) {
|
||||
|
||||
// jQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0
|
||||
migrateWarn( "jQuery( '#' ) is not a valid selector" );
|
||||
selector = [];
|
||||
|
||||
} else if ( rattrHash.test( selector ) ) {
|
||||
|
||||
// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
|
||||
// Note that this doesn't actually fix the selector due to potential false positives
|
||||
migrateWarn( "Attribute selectors with '#' must be quoted: '" + selector + "'" );
|
||||
}
|
||||
|
||||
ret = oldInit.apply( this, arguments );
|
||||
|
||||
// Fill in selector and context properties so .live() works
|
||||
if ( selector && selector.selector !== undefined ) {
|
||||
// A jQuery object, copy its properties
|
||||
ret.selector = selector.selector;
|
||||
ret.context = selector.context;
|
||||
|
||||
} else {
|
||||
ret.selector = typeof selector === "string" ? selector : "";
|
||||
if ( selector ) {
|
||||
ret.context = selector.nodeType? selector : context || document;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
jQuery.fn.init.prototype = jQuery.fn;
|
||||
|
||||
// Let $.parseJSON(falsy_value) return null
|
||||
jQuery.parseJSON = function( json ) {
|
||||
if ( !json ) {
|
||||
migrateWarn("jQuery.parseJSON requires a valid JSON string");
|
||||
return null;
|
||||
}
|
||||
return oldParseJSON.apply( this, arguments );
|
||||
};
|
||||
|
||||
jQuery.uaMatch = function( ua ) {
|
||||
ua = ua.toLowerCase();
|
||||
|
||||
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
|
||||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
|
||||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
|
||||
/(msie) ([\w.]+)/.exec( ua ) ||
|
||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
|
||||
[];
|
||||
|
||||
return {
|
||||
browser: match[ 1 ] || "",
|
||||
version: match[ 2 ] || "0"
|
||||
};
|
||||
};
|
||||
|
||||
// Don't clobber any existing jQuery.browser in case it's different
|
||||
if ( !jQuery.browser ) {
|
||||
matched = jQuery.uaMatch( navigator.userAgent );
|
||||
browser = {};
|
||||
|
||||
if ( matched.browser ) {
|
||||
browser[ matched.browser ] = true;
|
||||
browser.version = matched.version;
|
||||
}
|
||||
|
||||
// Chrome is Webkit, but Webkit is also Safari.
|
||||
if ( browser.chrome ) {
|
||||
browser.webkit = true;
|
||||
} else if ( browser.webkit ) {
|
||||
browser.safari = true;
|
||||
}
|
||||
|
||||
jQuery.browser = browser;
|
||||
}
|
||||
|
||||
// Warn if the code tries to get jQuery.browser
|
||||
migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
|
||||
|
||||
// jQuery.boxModel deprecated in 1.3, jQuery.support.boxModel deprecated in 1.7
|
||||
jQuery.boxModel = jQuery.support.boxModel = (document.compatMode === "CSS1Compat");
|
||||
migrateWarnProp( jQuery, "boxModel", jQuery.boxModel, "jQuery.boxModel is deprecated" );
|
||||
migrateWarnProp( jQuery.support, "boxModel", jQuery.support.boxModel, "jQuery.support.boxModel is deprecated" );
|
||||
|
||||
jQuery.sub = function() {
|
||||
function jQuerySub( selector, context ) {
|
||||
return new jQuerySub.fn.init( selector, context );
|
||||
}
|
||||
jQuery.extend( true, jQuerySub, this );
|
||||
jQuerySub.superclass = this;
|
||||
jQuerySub.fn = jQuerySub.prototype = this();
|
||||
jQuerySub.fn.constructor = jQuerySub;
|
||||
jQuerySub.sub = this.sub;
|
||||
jQuerySub.fn.init = function init( selector, context ) {
|
||||
var instance = jQuery.fn.init.call( this, selector, context, rootjQuerySub );
|
||||
return instance instanceof jQuerySub ?
|
||||
instance :
|
||||
jQuerySub( instance );
|
||||
};
|
||||
jQuerySub.fn.init.prototype = jQuerySub.fn;
|
||||
var rootjQuerySub = jQuerySub(document);
|
||||
migrateWarn( "jQuery.sub() is deprecated" );
|
||||
return jQuerySub;
|
||||
};
|
||||
|
||||
// The number of elements contained in the matched element set
|
||||
jQuery.fn.size = function() {
|
||||
migrateWarn( "jQuery.fn.size() is deprecated; use the .length property" );
|
||||
return this.length;
|
||||
};
|
||||
|
||||
|
||||
var internalSwapCall = false;
|
||||
|
||||
// If this version of jQuery has .swap(), don't false-alarm on internal uses
|
||||
if ( jQuery.swap ) {
|
||||
jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
|
||||
var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;
|
||||
|
||||
if ( oldHook ) {
|
||||
jQuery.cssHooks[ name ].get = function() {
|
||||
var ret;
|
||||
|
||||
internalSwapCall = true;
|
||||
ret = oldHook.apply( this, arguments );
|
||||
internalSwapCall = false;
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
jQuery.swap = function( elem, options, callback, args ) {
|
||||
var ret, name,
|
||||
old = {};
|
||||
|
||||
if ( !internalSwapCall ) {
|
||||
migrateWarn( "jQuery.swap() is undocumented and deprecated" );
|
||||
}
|
||||
|
||||
// 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;
|
||||
};
|
||||
|
||||
|
||||
// Ensure that $.ajax gets the new parseJSON defined in core.js
|
||||
jQuery.ajaxSetup({
|
||||
converters: {
|
||||
"text json": jQuery.parseJSON
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var oldFnData = jQuery.fn.data;
|
||||
|
||||
jQuery.fn.data = function( name ) {
|
||||
var ret, evt,
|
||||
elem = this[0];
|
||||
|
||||
// Handles 1.7 which has this behavior and 1.8 which doesn't
|
||||
if ( elem && name === "events" && arguments.length === 1 ) {
|
||||
ret = jQuery.data( elem, name );
|
||||
evt = jQuery._data( elem, name );
|
||||
if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
|
||||
migrateWarn("Use of jQuery.fn.data('events') is deprecated");
|
||||
return evt;
|
||||
}
|
||||
}
|
||||
return oldFnData.apply( this, arguments );
|
||||
};
|
||||
|
||||
|
||||
var rscriptType = /\/(java|ecma)script/i;
|
||||
|
||||
// Since jQuery.clean is used internally on older versions, we only shim if it's missing
|
||||
if ( !jQuery.clean ) {
|
||||
jQuery.clean = function( elems, context, fragment, scripts ) {
|
||||
// Set context per 1.8 logic
|
||||
context = context || document;
|
||||
context = !context.nodeType && context[0] || context;
|
||||
context = context.ownerDocument || context;
|
||||
|
||||
migrateWarn("jQuery.clean() is deprecated");
|
||||
|
||||
var i, elem, handleScript, jsTags,
|
||||
ret = [];
|
||||
|
||||
jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
|
||||
|
||||
// Complex logic lifted directly from jQuery 1.8
|
||||
if ( fragment ) {
|
||||
// Special handling of each script element
|
||||
handleScript = function( elem ) {
|
||||
// Check if we consider it executable
|
||||
if ( !elem.type || rscriptType.test( elem.type ) ) {
|
||||
// Detach the script and store it in the scripts array (if provided) or the fragment
|
||||
// Return truthy to indicate that it has been handled
|
||||
return scripts ?
|
||||
scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
|
||||
fragment.appendChild( elem );
|
||||
}
|
||||
};
|
||||
|
||||
for ( i = 0; (elem = ret[i]) != null; i++ ) {
|
||||
// Check if we're done after handling an executable script
|
||||
if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
|
||||
// Append to fragment and handle embedded scripts
|
||||
fragment.appendChild( elem );
|
||||
if ( typeof elem.getElementsByTagName !== "undefined" ) {
|
||||
// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
|
||||
jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
|
||||
|
||||
// Splice the scripts into ret after their former ancestor and advance our index beyond them
|
||||
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
|
||||
i += jsTags.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
var eventAdd = jQuery.event.add,
|
||||
eventRemove = jQuery.event.remove,
|
||||
eventTrigger = jQuery.event.trigger,
|
||||
oldToggle = jQuery.fn.toggle,
|
||||
oldLive = jQuery.fn.live,
|
||||
oldDie = jQuery.fn.die,
|
||||
oldLoad = jQuery.fn.load,
|
||||
ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
|
||||
rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
|
||||
rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
|
||||
hoverHack = function( events ) {
|
||||
if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
|
||||
return events;
|
||||
}
|
||||
if ( rhoverHack.test( events ) ) {
|
||||
migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
|
||||
}
|
||||
return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
|
||||
};
|
||||
|
||||
// Event props removed in 1.9, put them back if needed; no practical way to warn them
|
||||
if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
|
||||
jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
|
||||
}
|
||||
|
||||
// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
|
||||
if ( jQuery.event.dispatch ) {
|
||||
migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
|
||||
}
|
||||
|
||||
// Support for 'hover' pseudo-event and ajax event warnings
|
||||
jQuery.event.add = function( elem, types, handler, data, selector ){
|
||||
if ( elem !== document && rajaxEvent.test( types ) ) {
|
||||
migrateWarn( "AJAX events should be attached to document: " + types );
|
||||
}
|
||||
eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
|
||||
};
|
||||
jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
|
||||
eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
|
||||
};
|
||||
|
||||
jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
|
||||
|
||||
jQuery.fn[ name ] = function() {
|
||||
var args = Array.prototype.slice.call( arguments, 0 );
|
||||
|
||||
// If this is an ajax load() the first arg should be the string URL;
|
||||
// technically this could also be the "Anything" arg of the event .load()
|
||||
// which just goes to show why this dumb signature has been deprecated!
|
||||
// jQuery custom builds that exclude the Ajax module justifiably die here.
|
||||
if ( name === "load" && typeof args[ 0 ] === "string" ) {
|
||||
return oldLoad.apply( this, args );
|
||||
}
|
||||
|
||||
migrateWarn( "jQuery.fn." + name + "() is deprecated" );
|
||||
|
||||
args.splice( 0, 0, name );
|
||||
if ( arguments.length ) {
|
||||
return this.bind.apply( this, args );
|
||||
}
|
||||
|
||||
// Use .triggerHandler here because:
|
||||
// - load and unload events don't need to bubble, only applied to window or image
|
||||
// - error event should not bubble to window, although it does pre-1.7
|
||||
// See http://bugs.jquery.com/ticket/11820
|
||||
this.triggerHandler.apply( this, args );
|
||||
return this;
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
jQuery.fn.toggle = function( fn, fn2 ) {
|
||||
|
||||
// Don't mess with animation or css toggles
|
||||
if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
|
||||
return oldToggle.apply( this, arguments );
|
||||
}
|
||||
migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
|
||||
|
||||
// Save reference to arguments for access in closure
|
||||
var args = arguments,
|
||||
guid = fn.guid || jQuery.guid++,
|
||||
i = 0,
|
||||
toggler = function( event ) {
|
||||
// Figure out which function to execute
|
||||
var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
|
||||
jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
|
||||
|
||||
// Make sure that clicks stop
|
||||
event.preventDefault();
|
||||
|
||||
// and execute the function
|
||||
return args[ lastToggle ].apply( this, arguments ) || false;
|
||||
};
|
||||
|
||||
// link all the functions, so any of them can unbind this click handler
|
||||
toggler.guid = guid;
|
||||
while ( i < args.length ) {
|
||||
args[ i++ ].guid = guid;
|
||||
}
|
||||
|
||||
return this.click( toggler );
|
||||
};
|
||||
|
||||
jQuery.fn.live = function( types, data, fn ) {
|
||||
migrateWarn("jQuery.fn.live() is deprecated");
|
||||
if ( oldLive ) {
|
||||
return oldLive.apply( this, arguments );
|
||||
}
|
||||
jQuery( this.context ).on( types, this.selector, data, fn );
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.die = function( types, fn ) {
|
||||
migrateWarn("jQuery.fn.die() is deprecated");
|
||||
if ( oldDie ) {
|
||||
return oldDie.apply( this, arguments );
|
||||
}
|
||||
jQuery( this.context ).off( types, this.selector || "**", fn );
|
||||
return this;
|
||||
};
|
||||
|
||||
// Turn global events into document-triggered events
|
||||
jQuery.event.trigger = function( event, data, elem, onlyHandlers ){
|
||||
if ( !elem && !rajaxEvent.test( event ) ) {
|
||||
migrateWarn( "Global events are undocumented and deprecated" );
|
||||
}
|
||||
return eventTrigger.call( this, event, data, elem || document, onlyHandlers );
|
||||
};
|
||||
jQuery.each( ajaxEvents.split("|"),
|
||||
function( _, name ) {
|
||||
jQuery.event.special[ name ] = {
|
||||
setup: function() {
|
||||
var elem = this;
|
||||
|
||||
// The document needs no shimming; must be !== for oldIE
|
||||
if ( elem !== document ) {
|
||||
jQuery.event.add( document, name + "." + jQuery.guid, function() {
|
||||
jQuery.event.trigger( name, Array.prototype.slice.call( arguments, 1 ), elem, true );
|
||||
});
|
||||
jQuery._data( this, name, jQuery.guid++ );
|
||||
}
|
||||
return false;
|
||||
},
|
||||
teardown: function() {
|
||||
if ( this !== document ) {
|
||||
jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
jQuery.event.special.ready = {
|
||||
setup: function() {
|
||||
if ( this === document ) {
|
||||
migrateWarn( "'ready' event is deprecated" );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack,
|
||||
oldFind = jQuery.fn.find;
|
||||
|
||||
jQuery.fn.andSelf = function() {
|
||||
migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
|
||||
return oldSelf.apply( this, arguments );
|
||||
};
|
||||
|
||||
jQuery.fn.find = function( selector ) {
|
||||
var ret = oldFind.apply( this, arguments );
|
||||
ret.context = this.context;
|
||||
ret.selector = this.selector ? this.selector + " " + selector : selector;
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
||||
// jQuery 1.6 did not support Callbacks, do not warn there
|
||||
if ( jQuery.Callbacks ) {
|
||||
|
||||
var oldDeferred = jQuery.Deferred,
|
||||
tuples = [
|
||||
// action, add listener, callbacks, .then handlers, final state
|
||||
[ "resolve", "done", jQuery.Callbacks("once memory"),
|
||||
jQuery.Callbacks("once memory"), "resolved" ],
|
||||
[ "reject", "fail", jQuery.Callbacks("once memory"),
|
||||
jQuery.Callbacks("once memory"), "rejected" ],
|
||||
[ "notify", "progress", jQuery.Callbacks("memory"),
|
||||
jQuery.Callbacks("memory") ]
|
||||
];
|
||||
|
||||
jQuery.Deferred = function( func ) {
|
||||
var deferred = oldDeferred(),
|
||||
promise = deferred.promise();
|
||||
|
||||
deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
|
||||
var fns = arguments;
|
||||
|
||||
migrateWarn( "deferred.pipe() is deprecated" );
|
||||
|
||||
return jQuery.Deferred(function( newDefer ) {
|
||||
jQuery.each( tuples, function( i, tuple ) {
|
||||
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
|
||||
// deferred.done(function() { bind to newDefer or newDefer.resolve })
|
||||
// deferred.fail(function() { bind to newDefer or newDefer.reject })
|
||||
// deferred.progress(function() { bind to newDefer or newDefer.notify })
|
||||
deferred[ tuple[1] ](function() {
|
||||
var returned = fn && fn.apply( this, arguments );
|
||||
if ( returned && jQuery.isFunction( returned.promise ) ) {
|
||||
returned.promise()
|
||||
.done( newDefer.resolve )
|
||||
.fail( newDefer.reject )
|
||||
.progress( newDefer.notify );
|
||||
} else {
|
||||
newDefer[ tuple[ 0 ] + "With" ](
|
||||
this === promise ? newDefer.promise() : this,
|
||||
fn ? [ returned ] : arguments
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
fns = null;
|
||||
}).promise();
|
||||
|
||||
};
|
||||
|
||||
deferred.isResolved = function() {
|
||||
migrateWarn( "deferred.isResolved is deprecated" );
|
||||
return deferred.state() === "resolved";
|
||||
};
|
||||
|
||||
deferred.isRejected = function() {
|
||||
migrateWarn( "deferred.isRejected is deprecated" );
|
||||
return deferred.state() === "rejected";
|
||||
};
|
||||
|
||||
if ( func ) {
|
||||
func.call( deferred, deferred );
|
||||
}
|
||||
|
||||
return deferred;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
})( jQuery, window );
|
File diff suppressed because one or more lines are too long
|
@ -1,22 +0,0 @@
|
|||
{
|
||||
"name": "jquery-ui",
|
||||
"version": "1.12.1",
|
||||
"main": [
|
||||
"jquery-ui.js"
|
||||
],
|
||||
"ignore": [],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"jquery": ">=1.6"
|
||||
},
|
||||
"homepage": "https://github.com/components/jqueryui",
|
||||
"_release": "1.12.1",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.12.1",
|
||||
"commit": "44ecf3794cc56b65954cc19737234a3119d036cc"
|
||||
},
|
||||
"_source": "https://github.com/components/jqueryui.git",
|
||||
"_target": "1.12.1",
|
||||
"_originalSource": "jquery-ui"
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -1,38 +0,0 @@
|
|||
{
|
||||
"name": "jquery",
|
||||
"version": "2.1.4",
|
||||
"main": "dist/jquery.js",
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"build",
|
||||
"dist/cdn",
|
||||
"speed",
|
||||
"test",
|
||||
"*.md",
|
||||
"AUTHORS.txt",
|
||||
"Gruntfile.js",
|
||||
"package.json"
|
||||
],
|
||||
"devDependencies": {
|
||||
"sizzle": "2.1.1-jquery.2.1.2",
|
||||
"requirejs": "2.1.10",
|
||||
"qunit": "1.14.0",
|
||||
"sinon": "1.8.1"
|
||||
},
|
||||
"keywords": [
|
||||
"jquery",
|
||||
"javascript",
|
||||
"library"
|
||||
],
|
||||
"homepage": "https://github.com/jquery/jquery-dist",
|
||||
"_release": "2.1.4",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "2.1.4",
|
||||
"commit": "7751e69b615c6eca6f783a81e292a55725af6b85"
|
||||
},
|
||||
"_source": "https://github.com/jquery/jquery-dist.git",
|
||||
"_target": "2.1.4",
|
||||
"_originalSource": "jquery"
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
Copyright 2014 jQuery Foundation and other contributors
|
||||
http://jquery.com/
|
||||
|
||||
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.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
"name": "jstzdetect",
|
||||
"version": "1.0.6",
|
||||
"main": "jstz.min.js",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"components",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"homepage": "https://github.com/HenningM/jstimezonedetect",
|
||||
"_release": "1.0.6",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.6",
|
||||
"commit": "bd595ed253292934991a414979007f3d51a1547d"
|
||||
},
|
||||
"_source": "https://github.com/HenningM/jstimezonedetect.git",
|
||||
"_target": "1.0.6",
|
||||
"_originalSource": "jsTimezoneDetect"
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2012 Jon Nylander, project maintained at
|
||||
https://bitbucket.org/pellepim/jstimezonedetect
|
||||
|
||||
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.
|
|
@ -1,358 +0,0 @@
|
|||
/**
|
||||
* This script gives you the zone info key representing your device's time zone setting.
|
||||
*
|
||||
* @name jsTimezoneDetect
|
||||
* @version 1.0.5
|
||||
* @author Jon Nylander
|
||||
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* For usage and examples, visit:
|
||||
* http://pellepim.bitbucket.org/jstz/
|
||||
*
|
||||
* Copyright (c) Jon Nylander
|
||||
*/
|
||||
|
||||
/*jslint undef: true */
|
||||
/*global console, exports*/
|
||||
|
||||
(function(root) {
|
||||
/**
|
||||
* Namespace to hold all the code for timezone detection.
|
||||
*/
|
||||
var jstz = (function () {
|
||||
'use strict';
|
||||
var HEMISPHERE_SOUTH = 's',
|
||||
|
||||
/**
|
||||
* Gets the offset in minutes from UTC for a certain date.
|
||||
* @param {Date} date
|
||||
* @returns {Number}
|
||||
*/
|
||||
get_date_offset = function (date) {
|
||||
var offset = -date.getTimezoneOffset();
|
||||
return (offset !== null ? offset : 0);
|
||||
},
|
||||
|
||||
get_date = function (year, month, date) {
|
||||
var d = new Date();
|
||||
if (year !== undefined) {
|
||||
d.setFullYear(year);
|
||||
}
|
||||
d.setMonth(month);
|
||||
d.setDate(date);
|
||||
return d;
|
||||
},
|
||||
|
||||
get_january_offset = function (year) {
|
||||
return get_date_offset(get_date(year, 0 ,2));
|
||||
},
|
||||
|
||||
get_june_offset = function (year) {
|
||||
return get_date_offset(get_date(year, 5, 2));
|
||||
},
|
||||
|
||||
/**
|
||||
* Private method.
|
||||
* Checks whether a given date is in daylight saving time.
|
||||
* If the date supplied is after august, we assume that we're checking
|
||||
* for southern hemisphere DST.
|
||||
* @param {Date} date
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
date_is_dst = function (date) {
|
||||
var is_southern = date.getMonth() > 7,
|
||||
base_offset = is_southern ? get_june_offset(date.getFullYear()) :
|
||||
get_january_offset(date.getFullYear()),
|
||||
date_offset = get_date_offset(date),
|
||||
is_west = base_offset < 0,
|
||||
dst_offset = base_offset - date_offset;
|
||||
|
||||
if (!is_west && !is_southern) {
|
||||
return dst_offset < 0;
|
||||
}
|
||||
|
||||
return dst_offset !== 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* This function does some basic calculations to create information about
|
||||
* the user's timezone. It uses REFERENCE_YEAR as a solid year for which
|
||||
* the script has been tested rather than depend on the year set by the
|
||||
* client device.
|
||||
*
|
||||
* Returns a key that can be used to do lookups in jstz.olson.timezones.
|
||||
* eg: "720,1,2".
|
||||
*
|
||||
* @returns {String}
|
||||
*/
|
||||
|
||||
lookup_key = function () {
|
||||
var january_offset = get_january_offset(),
|
||||
june_offset = get_june_offset(),
|
||||
diff = january_offset - june_offset;
|
||||
|
||||
if (diff < 0) {
|
||||
return january_offset + ",1";
|
||||
} else if (diff > 0) {
|
||||
return june_offset + ",1," + HEMISPHERE_SOUTH;
|
||||
}
|
||||
|
||||
return january_offset + ",0";
|
||||
},
|
||||
|
||||
/**
|
||||
* Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
|
||||
*
|
||||
* Returns a primitive object on the format:
|
||||
* {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
|
||||
*
|
||||
* @returns Object
|
||||
*/
|
||||
determine = function () {
|
||||
var key = lookup_key();
|
||||
return new jstz.TimeZone(jstz.olson.timezones[key]);
|
||||
},
|
||||
|
||||
/**
|
||||
* This object contains information on when daylight savings starts for
|
||||
* different timezones.
|
||||
*
|
||||
* The list is short for a reason. Often we do not have to be very specific
|
||||
* to single out the correct timezone. But when we do, this list comes in
|
||||
* handy.
|
||||
*
|
||||
* Each value is a date denoting when daylight savings starts for that timezone.
|
||||
*/
|
||||
dst_start_for = function (tz_name) {
|
||||
|
||||
var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
|
||||
dst_starts = {
|
||||
'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
|
||||
'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
|
||||
'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
|
||||
'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
|
||||
'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
|
||||
'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
|
||||
'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
|
||||
'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
|
||||
'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
|
||||
'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
|
||||
'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
|
||||
'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
|
||||
'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
|
||||
'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
|
||||
'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
|
||||
'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
|
||||
'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
|
||||
'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
|
||||
'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
|
||||
'Europe/Moscow': ru_pre_dst_change,
|
||||
'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
|
||||
'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
|
||||
'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
|
||||
'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
|
||||
'Asia/Yekaterinburg': ru_pre_dst_change,
|
||||
'Asia/Omsk': ru_pre_dst_change,
|
||||
'Asia/Krasnoyarsk': ru_pre_dst_change,
|
||||
'Asia/Irkutsk': ru_pre_dst_change,
|
||||
'Asia/Yakutsk': ru_pre_dst_change,
|
||||
'Asia/Vladivostok': ru_pre_dst_change,
|
||||
'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
|
||||
'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
|
||||
'Asia/Kamchatka': ru_pre_dst_change,
|
||||
'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
|
||||
'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
|
||||
'Europe/Minsk': ru_pre_dst_change,
|
||||
'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
|
||||
'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
|
||||
'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
|
||||
};
|
||||
|
||||
return dst_starts[tz_name];
|
||||
};
|
||||
|
||||
return {
|
||||
determine: determine,
|
||||
date_is_dst: date_is_dst,
|
||||
dst_start_for: dst_start_for
|
||||
};
|
||||
}());
|
||||
|
||||
/**
|
||||
* Simple object to perform ambiguity check and to return name of time zone.
|
||||
*/
|
||||
jstz.TimeZone = function (tz_name) {
|
||||
'use strict';
|
||||
/**
|
||||
* The keys in this object are timezones that we know may be ambiguous after
|
||||
* a preliminary scan through the olson_tz object.
|
||||
*
|
||||
* The array of timezones to compare must be in the order that daylight savings
|
||||
* starts for the regions.
|
||||
*/
|
||||
var AMBIGUITIES = {
|
||||
'America/Denver': ['America/Denver', 'America/Mazatlan'],
|
||||
'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
|
||||
'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
|
||||
'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
|
||||
'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
|
||||
'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
|
||||
'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
|
||||
'America/New_York': ['America/Havana', 'America/New_York'],
|
||||
'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
|
||||
'America/Godthab': ['America/Miquelon', 'America/Godthab'],
|
||||
'Asia/Dubai': ['Europe/Moscow'],
|
||||
'Asia/Dhaka': ['Asia/Yekaterinburg'],
|
||||
'Asia/Jakarta': ['Asia/Omsk'],
|
||||
'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
|
||||
'Asia/Tokyo': ['Asia/Irkutsk'],
|
||||
'Australia/Brisbane': ['Asia/Yakutsk'],
|
||||
'Pacific/Noumea': ['Asia/Vladivostok'],
|
||||
'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
|
||||
'Pacific/Tongatapu': ['Pacific/Apia'],
|
||||
'Asia/Baghdad': ['Europe/Minsk'],
|
||||
'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
|
||||
'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
|
||||
},
|
||||
|
||||
timezone_name = tz_name,
|
||||
|
||||
/**
|
||||
* Checks if a timezone has possible ambiguities. I.e timezones that are similar.
|
||||
*
|
||||
* For example, if the preliminary scan determines that we're in America/Denver.
|
||||
* We double check here that we're really there and not in America/Mazatlan.
|
||||
*
|
||||
* This is done by checking known dates for when daylight savings start for different
|
||||
* timezones during 2010 and 2011.
|
||||
*/
|
||||
ambiguity_check = function () {
|
||||
var ambiguity_list = AMBIGUITIES[timezone_name],
|
||||
length = ambiguity_list.length,
|
||||
i = 0,
|
||||
tz = ambiguity_list[0];
|
||||
|
||||
for (; i < length; i += 1) {
|
||||
tz = ambiguity_list[i];
|
||||
|
||||
if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
|
||||
timezone_name = tz;
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks if it is possible that the timezone is ambiguous.
|
||||
*/
|
||||
is_ambiguous = function () {
|
||||
return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
|
||||
};
|
||||
|
||||
if (is_ambiguous()) {
|
||||
ambiguity_check();
|
||||
}
|
||||
|
||||
return {
|
||||
name: function () {
|
||||
return timezone_name;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
jstz.olson = {};
|
||||
|
||||
/*
|
||||
* The keys in this dictionary are comma separated as such:
|
||||
*
|
||||
* First the offset compared to UTC time in minutes.
|
||||
*
|
||||
* Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
|
||||
* does.
|
||||
*
|
||||
* Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
|
||||
* only interesting for timezones with DST.
|
||||
*
|
||||
* The mapped arrays is used for constructing the jstz.TimeZone object from within
|
||||
* jstz.determine_timezone();
|
||||
*/
|
||||
jstz.olson.timezones = {
|
||||
'-720,0' : 'Pacific/Majuro',
|
||||
'-660,0' : 'Pacific/Pago_Pago',
|
||||
'-600,1' : 'America/Adak',
|
||||
'-600,0' : 'Pacific/Honolulu',
|
||||
'-570,0' : 'Pacific/Marquesas',
|
||||
'-540,0' : 'Pacific/Gambier',
|
||||
'-540,1' : 'America/Anchorage',
|
||||
'-480,1' : 'America/Los_Angeles',
|
||||
'-480,0' : 'Pacific/Pitcairn',
|
||||
'-420,0' : 'America/Phoenix',
|
||||
'-420,1' : 'America/Denver',
|
||||
'-360,0' : 'America/Guatemala',
|
||||
'-360,1' : 'America/Chicago',
|
||||
'-360,1,s' : 'Pacific/Easter',
|
||||
'-300,0' : 'America/Bogota',
|
||||
'-300,1' : 'America/New_York',
|
||||
'-270,0' : 'America/Caracas',
|
||||
'-240,1' : 'America/Halifax',
|
||||
'-240,0' : 'America/Santo_Domingo',
|
||||
'-240,1,s' : 'America/Santiago',
|
||||
'-210,1' : 'America/St_Johns',
|
||||
'-180,1' : 'America/Godthab',
|
||||
'-180,0' : 'America/Argentina/Buenos_Aires',
|
||||
'-180,1,s' : 'America/Montevideo',
|
||||
'-120,0' : 'America/Noronha',
|
||||
'-120,1' : 'America/Noronha',
|
||||
'-60,1' : 'Atlantic/Azores',
|
||||
'-60,0' : 'Atlantic/Cape_Verde',
|
||||
'0,0' : 'Etc/UTC',
|
||||
'0,1' : 'Europe/London',
|
||||
'60,1' : 'Europe/Berlin',
|
||||
'60,0' : 'Africa/Lagos',
|
||||
'60,1,s' : 'Africa/Windhoek',
|
||||
'120,1' : 'Asia/Beirut',
|
||||
'120,0' : 'Africa/Johannesburg',
|
||||
'180,0' : 'Asia/Baghdad',
|
||||
'180,1' : 'Europe/Moscow',
|
||||
'210,1' : 'Asia/Tehran',
|
||||
'240,0' : 'Asia/Dubai',
|
||||
'240,1' : 'Asia/Baku',
|
||||
'270,0' : 'Asia/Kabul',
|
||||
'300,1' : 'Asia/Yekaterinburg',
|
||||
'300,0' : 'Asia/Karachi',
|
||||
'330,0' : 'Asia/Kolkata',
|
||||
'345,0' : 'Asia/Kathmandu',
|
||||
'360,0' : 'Asia/Dhaka',
|
||||
'360,1' : 'Asia/Omsk',
|
||||
'390,0' : 'Asia/Rangoon',
|
||||
'420,1' : 'Asia/Krasnoyarsk',
|
||||
'420,0' : 'Asia/Jakarta',
|
||||
'480,0' : 'Asia/Shanghai',
|
||||
'480,1' : 'Asia/Irkutsk',
|
||||
'525,0' : 'Australia/Eucla',
|
||||
'525,1,s' : 'Australia/Eucla',
|
||||
'540,1' : 'Asia/Yakutsk',
|
||||
'540,0' : 'Asia/Tokyo',
|
||||
'570,0' : 'Australia/Darwin',
|
||||
'570,1,s' : 'Australia/Adelaide',
|
||||
'600,0' : 'Australia/Brisbane',
|
||||
'600,1' : 'Asia/Vladivostok',
|
||||
'600,1,s' : 'Australia/Sydney',
|
||||
'630,1,s' : 'Australia/Lord_Howe',
|
||||
'660,1' : 'Asia/Kamchatka',
|
||||
'660,0' : 'Pacific/Noumea',
|
||||
'690,0' : 'Pacific/Norfolk',
|
||||
'720,1,s' : 'Pacific/Auckland',
|
||||
'720,0' : 'Pacific/Tarawa',
|
||||
'765,1,s' : 'Pacific/Chatham',
|
||||
'780,0' : 'Pacific/Tongatapu',
|
||||
'780,1,s' : 'Pacific/Apia',
|
||||
'840,0' : 'Pacific/Kiritimati'
|
||||
};
|
||||
|
||||
if (typeof exports !== 'undefined') {
|
||||
exports.jstz = jstz;
|
||||
} else {
|
||||
root.jstz = jstz;
|
||||
}
|
||||
})(this);
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
"name": "marked",
|
||||
"version": "0.3.6",
|
||||
"homepage": "https://github.com/chjj/marked",
|
||||
"authors": [
|
||||
"Christopher Jeffrey <chjjeffrey@gmail.com>"
|
||||
],
|
||||
"description": "A markdown parser built for speed",
|
||||
"keywords": [
|
||||
"markdown",
|
||||
"markup",
|
||||
"html"
|
||||
],
|
||||
"main": "lib/marked.js",
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"app/bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"_release": "0.3.6",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v0.3.6",
|
||||
"commit": "eddec20467c2d10c7769061ee9074e268500966f"
|
||||
},
|
||||
"_source": "https://github.com/chjj/marked.git",
|
||||
"_target": "0.3.6",
|
||||
"_originalSource": "marked"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
Copyright (c) 2011-2014, Christopher Jeffrey (https://github.com/chjj/)
|
||||
|
||||
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.
|
File diff suppressed because one or more lines are too long
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
"name": "moment",
|
||||
"license": "MIT",
|
||||
"main": "moment.js",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"benchmarks",
|
||||
"bower_components",
|
||||
"meteor",
|
||||
"node_modules",
|
||||
"scripts",
|
||||
"tasks",
|
||||
"test",
|
||||
"component.json",
|
||||
"composer.json",
|
||||
"CONTRIBUTING.md",
|
||||
"ender.js",
|
||||
"Gruntfile.js",
|
||||
"Moment.js.nuspec",
|
||||
"package.js",
|
||||
"package.json",
|
||||
"ISSUE_TEMPLATE.md",
|
||||
"typing-tests"
|
||||
],
|
||||
"homepage": "https://github.com/moment/moment",
|
||||
"version": "2.18.1",
|
||||
"_release": "2.18.1",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "2.18.1",
|
||||
"commit": "0af7d4f5f25f911c2eaab2a7ccb534c17e65c536"
|
||||
},
|
||||
"_source": "https://github.com/moment/moment.git",
|
||||
"_target": "2.18.1",
|
||||
"_originalSource": "moment"
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
Copyright (c) JS Foundation and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
File diff suppressed because one or more lines are too long
|
@ -1,24 +0,0 @@
|
|||
{
|
||||
"name": "select2",
|
||||
"version": "3.4.8",
|
||||
"main": [
|
||||
"select2.js",
|
||||
"select2.css",
|
||||
"select2.png",
|
||||
"select2x2.png",
|
||||
"select2-spinner.gif"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">= 1.7.1"
|
||||
},
|
||||
"homepage": "https://github.com/ivaynberg/select2",
|
||||
"_release": "3.4.8",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "3.4.8",
|
||||
"commit": "ee0f36a47e2133b23330fbec740b2d3a17a0d9c2"
|
||||
},
|
||||
"_source": "https://github.com/ivaynberg/select2.git",
|
||||
"_target": "3.4.8",
|
||||
"_originalSource": "select2"
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
Copyright 2014 Igor Vaynberg
|
||||
|
||||
Version: @@ver@@ Timestamp: @@timestamp@@
|
||||
|
||||
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
|
||||
General Public License version 2 (the "GPL License"). You may choose either license to govern your
|
||||
use of this software only upon the condition that you accept all of the terms of either the Apache
|
||||
License or the GPL License.
|
||||
|
||||
You may obtain a copy of the Apache License and the GPL License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
|
||||
or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
either express or implied. See the Apache License and the GPL License for the specific language governing
|
||||
permissions and limitations under the Apache License and the GPL License.
|
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB |
|
@ -1,646 +0,0 @@
|
|||
/*
|
||||
Version: 3.4.8 Timestamp: Thu May 1 09:50:32 EDT 2014
|
||||
*/
|
||||
.select2-container {
|
||||
margin: 0;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
/* inline-block for ie7 */
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.select2-container,
|
||||
.select2-drop,
|
||||
.select2-search,
|
||||
.select2-search input {
|
||||
/*
|
||||
Force border-box so that % widths fit the parent
|
||||
container without overlap because of margin/padding.
|
||||
More Info : http://www.quirksmode.org/css/box.html
|
||||
*/
|
||||
-webkit-box-sizing: border-box; /* webkit */
|
||||
-moz-box-sizing: border-box; /* firefox */
|
||||
box-sizing: border-box; /* css3 */
|
||||
}
|
||||
|
||||
.select2-container .select2-choice {
|
||||
display: block;
|
||||
height: 26px;
|
||||
padding: 0 0 0 8px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
white-space: nowrap;
|
||||
line-height: 26px;
|
||||
color: #444;
|
||||
text-decoration: none;
|
||||
|
||||
border-radius: 4px;
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
|
||||
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
|
||||
background-image: linear-gradient(to top, #eee 0%, #fff 50%);
|
||||
}
|
||||
|
||||
.select2-container.select2-drop-above .select2-choice {
|
||||
border-bottom-color: #aaa;
|
||||
|
||||
border-radius: 0 0 4px 4px;
|
||||
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
|
||||
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
||||
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
|
||||
background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
|
||||
}
|
||||
|
||||
.select2-container.select2-allowclear .select2-choice .select2-chosen {
|
||||
margin-right: 42px;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice > .select2-chosen {
|
||||
margin-right: 26px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
white-space: nowrap;
|
||||
|
||||
text-overflow: ellipsis;
|
||||
float: none;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr {
|
||||
display: none;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
position: absolute;
|
||||
right: 24px;
|
||||
top: 8px;
|
||||
|
||||
font-size: 1px;
|
||||
text-decoration: none;
|
||||
|
||||
border: 0;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.select2-container.select2-allowclear .select2-choice abbr {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr:hover {
|
||||
background-position: right -11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.select2-drop-mask {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
opacity: 0;
|
||||
z-index: 9998;
|
||||
/* styles required for IE to work */
|
||||
background-color: #fff;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
|
||||
.select2-drop {
|
||||
width: 100%;
|
||||
margin-top: -1px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
top: 100%;
|
||||
|
||||
background: #fff;
|
||||
color: #000;
|
||||
border: 1px solid #aaa;
|
||||
border-top: 0;
|
||||
|
||||
border-radius: 0 0 4px 4px;
|
||||
|
||||
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above {
|
||||
margin-top: 1px;
|
||||
border-top: 1px solid #aaa;
|
||||
border-bottom: 0;
|
||||
|
||||
border-radius: 4px 4px 0 0;
|
||||
|
||||
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-drop-active {
|
||||
border: 1px solid #5897fb;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above.select2-drop-active {
|
||||
border-top: 1px solid #5897fb;
|
||||
}
|
||||
|
||||
.select2-drop-auto-width {
|
||||
border-top: 1px solid #aaa;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.select2-drop-auto-width .select2-search {
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice .select2-arrow {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
|
||||
border-left: 1px solid #aaa;
|
||||
border-radius: 0 4px 4px 0;
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
background: #ccc;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
||||
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
|
||||
background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
|
||||
}
|
||||
|
||||
.select2-container .select2-choice .select2-arrow b {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('select2.png') no-repeat 0 1px;
|
||||
}
|
||||
|
||||
.select2-search {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
min-height: 26px;
|
||||
margin: 0;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
|
||||
position: relative;
|
||||
z-index: 10000;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-search input {
|
||||
width: 100%;
|
||||
height: auto !important;
|
||||
min-height: 26px;
|
||||
padding: 4px 20px 4px 5px;
|
||||
margin: 0;
|
||||
|
||||
outline: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 0;
|
||||
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
|
||||
background: #fff url('select2.png') no-repeat 100% -22px;
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above .select2-search input {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.select2-search input.select2-active {
|
||||
background: #fff url('select2-spinner.gif') no-repeat 100%;
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
|
||||
}
|
||||
|
||||
.select2-container-active .select2-choice,
|
||||
.select2-container-active .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
|
||||
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice {
|
||||
border-bottom-color: transparent;
|
||||
-webkit-box-shadow: 0 1px 0 #fff inset;
|
||||
box-shadow: 0 1px 0 #fff inset;
|
||||
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
|
||||
background-color: #eee;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||
background-image: linear-gradient(to top, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.select2-dropdown-open.select2-drop-above .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
border-top-color: transparent;
|
||||
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice .select2-arrow {
|
||||
background: transparent;
|
||||
border-left: none;
|
||||
filter: none;
|
||||
}
|
||||
.select2-dropdown-open .select2-choice .select2-arrow b {
|
||||
background-position: -18px 1px;
|
||||
}
|
||||
|
||||
.select2-hidden-accessible {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
/* results */
|
||||
.select2-results {
|
||||
max-height: 200px;
|
||||
padding: 0 0 0 4px;
|
||||
margin: 4px 4px 4px 0;
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub {
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.select2-results li {
|
||||
list-style: none;
|
||||
display: list-item;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.select2-results .select2-result-label {
|
||||
padding: 3px 7px 4px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
|
||||
min-height: 1em;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.select2-results-dept-1 .select2-result-label { padding-left: 20px }
|
||||
.select2-results-dept-2 .select2-result-label { padding-left: 40px }
|
||||
.select2-results-dept-3 .select2-result-label { padding-left: 60px }
|
||||
.select2-results-dept-4 .select2-result-label { padding-left: 80px }
|
||||
.select2-results-dept-5 .select2-result-label { padding-left: 100px }
|
||||
.select2-results-dept-6 .select2-result-label { padding-left: 110px }
|
||||
.select2-results-dept-7 .select2-result-label { padding-left: 120px }
|
||||
|
||||
.select2-results .select2-highlighted {
|
||||
background: #3875d7;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.select2-results li em {
|
||||
background: #feffde;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted em {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted ul {
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
.select2-results .select2-no-results,
|
||||
.select2-results .select2-searching,
|
||||
.select2-results .select2-selection-limit {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
/*
|
||||
disabled look for disabled choices in the results dropdown
|
||||
*/
|
||||
.select2-results .select2-disabled.select2-highlighted {
|
||||
color: #666;
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
.select2-results .select2-disabled {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-results .select2-selected {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-more-results.select2-active {
|
||||
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
|
||||
}
|
||||
|
||||
.select2-more-results {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice abbr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* multiselect */
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
height: auto !important;
|
||||
height: 1%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
cursor: text;
|
||||
overflow: hidden;
|
||||
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
|
||||
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
|
||||
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
|
||||
background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
|
||||
}
|
||||
|
||||
.select2-locked {
|
||||
padding: 3px 5px 3px 5px !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
min-height: 26px;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
|
||||
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
.select2-container-multi .select2-choices li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
}
|
||||
html[dir="rtl"] .select2-container-multi .select2-choices li
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-field {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input {
|
||||
padding: 5px;
|
||||
margin: 1px 0;
|
||||
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
color: #666;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
||||
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
|
||||
}
|
||||
|
||||
.select2-default {
|
||||
color: #999 !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice {
|
||||
padding: 3px 5px 3px 18px;
|
||||
margin: 3px 0 3px 5px;
|
||||
position: relative;
|
||||
|
||||
line-height: 13px;
|
||||
color: #333;
|
||||
cursor: default;
|
||||
border: 1px solid #aaaaaa;
|
||||
|
||||
border-radius: 3px;
|
||||
|
||||
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
background-color: #e4e4e4;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
|
||||
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
background-image: linear-gradient(to top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
}
|
||||
html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
|
||||
{
|
||||
margin-left: 0;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
|
||||
cursor: default;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
||||
background: #d4d4d4;
|
||||
}
|
||||
|
||||
.select2-search-choice-close {
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 13px;
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 4px;
|
||||
|
||||
font-size: 1px;
|
||||
outline: none;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
}
|
||||
html[dir="rtl"] .select2-search-choice-close {
|
||||
right: auto;
|
||||
left: 3px;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-search-choice-close {
|
||||
left: 3px;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
||||
background-position: right -11px;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
||||
background-position: right -11px;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
.select2-container-multi.select2-container-disabled .select2-choices {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
||||
padding: 3px 5px 3px 5px;
|
||||
border: 1px solid #ddd;
|
||||
background-image: none;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
|
||||
background: none;
|
||||
}
|
||||
/* end multiselect */
|
||||
|
||||
|
||||
.select2-result-selectable .select2-match,
|
||||
.select2-result-unselectable .select2-match {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.select2-offscreen, .select2-offscreen:focus {
|
||||
clip: rect(0 0 0 0) !important;
|
||||
width: 1px !important;
|
||||
height: 1px !important;
|
||||
border: 0 !important;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
overflow: hidden !important;
|
||||
position: absolute !important;
|
||||
outline: 0 !important;
|
||||
left: 0px !important;
|
||||
top: 0px !important;
|
||||
}
|
||||
|
||||
.select2-display-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-measure-scrollbar {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
/* Retina-ize icons */
|
||||
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) {
|
||||
.select2-search input,
|
||||
.select2-search-choice-close,
|
||||
.select2-container .select2-choice abbr,
|
||||
.select2-container .select2-choice .select2-arrow b {
|
||||
background-image: url('select2x2.png') !important;
|
||||
background-repeat: no-repeat !important;
|
||||
background-size: 60px 40px !important;
|
||||
}
|
||||
|
||||
.select2-search input {
|
||||
background-position: 100% -21px !important;
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 613 B |
Binary file not shown.
Before Width: | Height: | Size: 845 B |
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"name": "Snap.js",
|
||||
"description": "A Library for creating beautiful mobile shelfs in Javascript (Facebook and Path style side menus)",
|
||||
"version": "2.0.0-rc1",
|
||||
"author": "Jacob Kelley <jakie8@gmail.com>",
|
||||
"keywords": [
|
||||
"mobile shelfs",
|
||||
"nav",
|
||||
"menu",
|
||||
"mobile",
|
||||
"side menu"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": [
|
||||
"./dist/latest/snap.js",
|
||||
"./dist/latest/snap.css"
|
||||
],
|
||||
"scripts": [
|
||||
"snap.js"
|
||||
],
|
||||
"homepage": "https://github.com/jakiestfu/Snap.js",
|
||||
"_release": "2.0.0-rc1",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v2.0.0-rc1",
|
||||
"commit": "15c77da330d9e8ca580a922bc748d88553838a73"
|
||||
},
|
||||
"_source": "https://github.com/jakiestfu/Snap.js.git",
|
||||
"_target": "2.0.0-rc1",
|
||||
"_originalSource": "snapjs"
|
||||
}
|
|
@ -1,785 +0,0 @@
|
|||
/*! Snap.js v2.0.0-rc1 */
|
||||
(function(win, doc) {
|
||||
|
||||
'use strict';
|
||||
|
||||
// Our export
|
||||
var Namespace = 'Snap';
|
||||
|
||||
// Our main toolbelt
|
||||
var utils = {
|
||||
|
||||
/**
|
||||
* Deeply extends two objects
|
||||
* @param {Object} destination The destination object
|
||||
* @param {Object} source The custom options to extend destination by
|
||||
* @return {Object} The desination object
|
||||
*/
|
||||
extend: function(destination, source) {
|
||||
var property;
|
||||
for (property in source) {
|
||||
if (source[property] && source[property].constructor && source[property].constructor === Object) {
|
||||
destination[property] = destination[property] || {};
|
||||
utils.extend(destination[property], source[property]);
|
||||
} else {
|
||||
destination[property] = source[property];
|
||||
}
|
||||
}
|
||||
return destination;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Our Snap global that initializes our instance
|
||||
* @param {Object} opts The custom Snap.js options
|
||||
*/
|
||||
var Core = function( opts ) {
|
||||
|
||||
var self = this;
|
||||
|
||||
/**
|
||||
* Our default settings for a Snap instance
|
||||
* @type {Object}
|
||||
*/
|
||||
var settings = self.settings = {
|
||||
element: null,
|
||||
dragger: null,
|
||||
disable: 'none',
|
||||
addBodyClasses: true,
|
||||
hyperextensible: true,
|
||||
resistance: 0.5,
|
||||
flickThreshold: 50,
|
||||
transitionSpeed: 0.3,
|
||||
easing: 'ease',
|
||||
maxPosition: 266,
|
||||
minPosition: -266,
|
||||
tapToClose: true,
|
||||
touchToDrag: true,
|
||||
clickToDrag: true,
|
||||
slideIntent: 40, // degrees
|
||||
minDragDistance: 5
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores internally global data
|
||||
* @type {Object}
|
||||
*/
|
||||
var cache = self.cache = {
|
||||
isDragging: false,
|
||||
simpleStates: {
|
||||
opening: null,
|
||||
towards: null,
|
||||
hyperExtending: null,
|
||||
halfway: null,
|
||||
flick: null,
|
||||
translation: {
|
||||
absolute: 0,
|
||||
relative: 0,
|
||||
sinceDirectionChange: 0,
|
||||
percentage: 0
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var eventList = self.eventList = {};
|
||||
|
||||
utils.extend(utils, {
|
||||
|
||||
/**
|
||||
* Determines if we are interacting with a touch device
|
||||
* @type {Boolean}
|
||||
*/
|
||||
hasTouch: ('ontouchstart' in doc.documentElement || win.navigator.msPointerEnabled),
|
||||
|
||||
/**
|
||||
* Returns the appropriate event type based on whether we are a touch device or not
|
||||
* @param {String} action The "action" event you're looking for: up, down, move, out
|
||||
* @return {String} The browsers supported event name
|
||||
*/
|
||||
eventType: function(action) {
|
||||
var eventTypes = {
|
||||
down: (utils.hasTouch ? 'touchstart' : settings.clickToDrag ? 'mousedown' : ''),
|
||||
move: (utils.hasTouch ? 'touchmove' : settings.clickToDrag ? 'mousemove' : ''),
|
||||
up: (utils.hasTouch ? 'touchend' : settings.clickToDrag ? 'mouseup': ''),
|
||||
out: (utils.hasTouch ? 'touchcancel' : settings.clickToDrag ? 'mouseout' : '')
|
||||
};
|
||||
return eventTypes[action];
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the correct "cursor" position on both browser and mobile
|
||||
* @param {String} t The coordinate to retrieve, either "X" or "Y"
|
||||
* @param {Object} e The event object being triggered
|
||||
* @return {Number} The desired coordiante for the events interaction
|
||||
*/
|
||||
page: function(t, e){
|
||||
return (utils.hasTouch && e.touches.length && e.touches[0]) ? e.touches[0]['page'+t] : e['page'+t];
|
||||
},
|
||||
|
||||
|
||||
klass: {
|
||||
|
||||
/**
|
||||
* Checks if an element has a class name
|
||||
* @param {Object} el The element to check
|
||||
* @param {String} name The class name to search for
|
||||
* @return {Boolean} Returns true if the class exists
|
||||
*/
|
||||
has: function(el, name){
|
||||
return (el.className).indexOf(name) !== -1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Adds a class name to an element
|
||||
* @param {Object} el The element to add to
|
||||
* @param {String} name The class name to add
|
||||
*/
|
||||
add: function(el, name){
|
||||
if(!utils.klass.has(el, name) && settings.addBodyClasses){
|
||||
el.className += " "+name;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes a class name
|
||||
* @param {Object} el The element to remove from
|
||||
* @param {String} name The class name to remove
|
||||
*/
|
||||
remove: function(el, name){
|
||||
if(utils.klass.has(el, name) && settings.addBodyClasses){
|
||||
el.className = (el.className).replace(name, "").replace(/^\s+|\s+$/g, '');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Dispatch a custom Snap.js event
|
||||
* @param {String} type The event name
|
||||
*/
|
||||
dispatchEvent: function(type) {
|
||||
if( typeof eventList[type] === 'function') {
|
||||
return eventList[type].apply();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Determines the browsers vendor prefix for CSS3
|
||||
* @return {String} The browsers vendor prefix
|
||||
*/
|
||||
vendor: function(){
|
||||
var tmp = doc.createElement("div"),
|
||||
prefixes = 'webkit Moz O ms'.split(' '),
|
||||
i;
|
||||
for (i in prefixes) {
|
||||
if (typeof tmp.style[prefixes[i] + 'Transition'] !== 'undefined') {
|
||||
return prefixes[i];
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Determines the browsers vendor prefix for transition callback events
|
||||
* @return {String} The event name
|
||||
*/
|
||||
transitionCallback: function(){
|
||||
return (cache.vendor==='Moz' || cache.vendor==='ms') ? 'transitionend' : cache.vendor+'TransitionEnd';
|
||||
},
|
||||
|
||||
/**
|
||||
* Determines if the users browser supports CSS3 transformations
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
canTransform: function(){
|
||||
return typeof settings.element.style[cache.vendor+'Transform'] !== 'undefined';
|
||||
},
|
||||
|
||||
/**
|
||||
* Determines an angle between two points
|
||||
* @param {Number} x The X coordinate
|
||||
* @param {Number} y The Y coordinate
|
||||
* @return {Number} The number of degrees between the two points
|
||||
*/
|
||||
angleOfDrag: function(x, y) {
|
||||
var degrees, theta;
|
||||
// Calc Theta
|
||||
theta = Math.atan2(-(cache.startDragY - y), (cache.startDragX - x));
|
||||
if (theta < 0) {
|
||||
theta += 2 * Math.PI;
|
||||
}
|
||||
// Calc Degrees
|
||||
degrees = Math.floor(theta * (180 / Math.PI) - 180);
|
||||
if (degrees < 0 && degrees > -180) {
|
||||
degrees = 360 - Math.abs(degrees);
|
||||
}
|
||||
return Math.abs(degrees);
|
||||
},
|
||||
|
||||
|
||||
events: {
|
||||
|
||||
/**
|
||||
* Adds an event to an element
|
||||
* @param {Object} element Element to add event to
|
||||
* @param {String} eventName The event name
|
||||
* @param {Function} func Callback function
|
||||
*/
|
||||
addEvent: function addEvent(element, eventName, func) {
|
||||
if (element.addEventListener) {
|
||||
return element.addEventListener(eventName, func, false);
|
||||
} else if (element.attachEvent) {
|
||||
return element.attachEvent("on" + eventName, func);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes an event to an element
|
||||
* @param {Object} element Element to remove event from
|
||||
* @param {String} eventName The event name
|
||||
* @param {Function} func Callback function
|
||||
*/
|
||||
removeEvent: function addEvent(element, eventName, func) {
|
||||
if (element.addEventListener) {
|
||||
return element.removeEventListener(eventName, func, false);
|
||||
} else if (element.attachEvent) {
|
||||
return element.detachEvent("on" + eventName, func);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Prevents the default event
|
||||
* @param {Object} e The event object
|
||||
*/
|
||||
prevent: function(e) {
|
||||
if (e.preventDefault) {
|
||||
e.preventDefault();
|
||||
} else {
|
||||
e.returnValue = false;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Searches the parent element until a specified attribute has been matched
|
||||
* @param {Object} el The element to search from
|
||||
* @param {String} attr The attribute to search for
|
||||
* @return {Object|null} Returns a matched element if it exists, else, null
|
||||
*/
|
||||
parentUntil: function(el, attr) {
|
||||
var isStr = typeof attr === 'string';
|
||||
while (el.parentNode) {
|
||||
if (isStr && el.getAttribute && el.getAttribute(attr)){
|
||||
return el;
|
||||
} else if(!isStr && el === attr){
|
||||
return el;
|
||||
}
|
||||
el = el.parentNode;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var action = self.action = {
|
||||
|
||||
/**
|
||||
* Handles translating the elements position
|
||||
* @type {Object}
|
||||
*/
|
||||
translate: {
|
||||
get: {
|
||||
|
||||
/**
|
||||
* Returns the amount an element is translated
|
||||
* @param {Number} index The index desired from the CSS3 values of translate3d
|
||||
* @return {Number} The amount of pixels an element is translated
|
||||
*/
|
||||
matrix: function(index) {
|
||||
|
||||
if( !cache.canTransform ){
|
||||
return parseInt(settings.element.style.left, 10);
|
||||
} else {
|
||||
var matrix = win.getComputedStyle(settings.element)[cache.vendor+'Transform'].match(/\((.*)\)/),
|
||||
ieOffset = 8;
|
||||
if (matrix) {
|
||||
matrix = matrix[1].split(',');
|
||||
|
||||
// Internet Explorer likes to give us 16 fucking values
|
||||
if(matrix.length===16){
|
||||
index+=ieOffset;
|
||||
}
|
||||
return parseInt(matrix[index], 10);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Called when the element has finished transitioning
|
||||
*/
|
||||
easeCallback: function(fn){
|
||||
settings.element.style[cache.vendor+'Transition'] = '';
|
||||
cache.translation = action.translate.get.matrix(4);
|
||||
cache.easing = false;
|
||||
|
||||
if(cache.easingTo===0){
|
||||
utils.klass.remove(doc.body, 'snapjs-right');
|
||||
utils.klass.remove(doc.body, 'snapjs-left');
|
||||
}
|
||||
|
||||
if( cache.once ){
|
||||
cache.once.call(self, self.state());
|
||||
delete cache.once;
|
||||
}
|
||||
|
||||
utils.dispatchEvent('animated');
|
||||
utils.events.removeEvent(settings.element, utils.transitionCallback(), action.translate.easeCallback);
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Animates the pane by the specified amount of pixels
|
||||
* @param {Number} n The amount of pixels to move the pane
|
||||
*/
|
||||
easeTo: function(n, cb) {
|
||||
|
||||
if( !cache.canTransform ){
|
||||
cache.translation = n;
|
||||
action.translate.x(n);
|
||||
} else {
|
||||
cache.easing = true;
|
||||
cache.easingTo = n;
|
||||
|
||||
settings.element.style[cache.vendor+'Transition'] = 'all ' + settings.transitionSpeed + 's ' + settings.easing;
|
||||
|
||||
cache.once = cb;
|
||||
|
||||
utils.events.addEvent(settings.element, utils.transitionCallback(), action.translate.easeCallback);
|
||||
action.translate.x(n);
|
||||
}
|
||||
if(n===0){
|
||||
settings.element.style[cache.vendor+'Transform'] = '';
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Immediately translates the element on its X axis
|
||||
* @param {Number} n Amount of pixels to translate
|
||||
*/
|
||||
x: function(n) {
|
||||
if( (settings.disable==='left' && n>0) ||
|
||||
(settings.disable==='right' && n<0)
|
||||
){ return; }
|
||||
|
||||
if( !settings.hyperextensible ){
|
||||
if( n===settings.maxPosition || n>settings.maxPosition ){
|
||||
n=settings.maxPosition;
|
||||
} else if( n===settings.minPosition || n<settings.minPosition ){
|
||||
n=settings.minPosition;
|
||||
}
|
||||
}
|
||||
|
||||
n = parseInt(n, 10);
|
||||
if(isNaN(n)){
|
||||
n = 0;
|
||||
}
|
||||
|
||||
if( cache.canTransform ){
|
||||
var theTranslate = 'translate3d(' + n + 'px, 0,0)';
|
||||
settings.element.style[cache.vendor+'Transform'] = theTranslate;
|
||||
} else {
|
||||
settings.element.style.width = (win.innerWidth || doc.documentElement.clientWidth)+'px';
|
||||
|
||||
settings.element.style.left = n+'px';
|
||||
settings.element.style.right = '';
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles all the events that interface with dragging
|
||||
* @type {Object}
|
||||
*/
|
||||
drag: {
|
||||
|
||||
/**
|
||||
* Begins listening for drag events on our element
|
||||
*/
|
||||
listen: function() {
|
||||
cache.translation = 0;
|
||||
cache.easing = false;
|
||||
utils.events.addEvent(self.settings.element, utils.eventType('down'), action.drag.startDrag);
|
||||
utils.events.addEvent(self.settings.element, utils.eventType('move'), action.drag.dragging);
|
||||
utils.events.addEvent(self.settings.element, utils.eventType('up'), action.drag.endDrag);
|
||||
},
|
||||
|
||||
/**
|
||||
* Stops listening for drag events on our element
|
||||
*/
|
||||
stopListening: function() {
|
||||
utils.events.removeEvent(settings.element, utils.eventType('down'), action.drag.startDrag);
|
||||
utils.events.removeEvent(settings.element, utils.eventType('move'), action.drag.dragging);
|
||||
utils.events.removeEvent(settings.element, utils.eventType('up'), action.drag.endDrag);
|
||||
},
|
||||
|
||||
/**
|
||||
* Fired immediately when the user begins to drag the content pane
|
||||
* @param {Object} e Event object
|
||||
*/
|
||||
startDrag: function(e) {
|
||||
// No drag on ignored elements
|
||||
var target = e.target ? e.target : e.srcElement,
|
||||
ignoreParent = utils.parentUntil(target, 'data-snap-ignore');
|
||||
|
||||
if (ignoreParent) {
|
||||
utils.dispatchEvent('ignore');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(settings.dragger){
|
||||
var dragParent = utils.parentUntil(target, settings.dragger);
|
||||
|
||||
// Only use dragger if we're in a closed state
|
||||
if( !dragParent &&
|
||||
(cache.translation !== settings.minPosition &&
|
||||
cache.translation !== settings.maxPosition
|
||||
)){
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
utils.dispatchEvent('start');
|
||||
settings.element.style[cache.vendor+'Transition'] = '';
|
||||
cache.isDragging = true;
|
||||
|
||||
cache.intentChecked = false;
|
||||
cache.startDragX = utils.page('X', e);
|
||||
cache.startDragY = utils.page('Y', e);
|
||||
cache.dragWatchers = {
|
||||
current: 0,
|
||||
last: 0,
|
||||
hold: 0,
|
||||
state: ''
|
||||
};
|
||||
cache.simpleStates = {
|
||||
opening: null,
|
||||
towards: null,
|
||||
hyperExtending: null,
|
||||
halfway: null,
|
||||
flick: null,
|
||||
translation: {
|
||||
absolute: 0,
|
||||
relative: 0,
|
||||
sinceDirectionChange: 0,
|
||||
percentage: 0
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Fired while the user is moving the content pane
|
||||
* @param {Object} e Event object
|
||||
*/
|
||||
dragging: function(e) {
|
||||
|
||||
if (cache.isDragging && settings.touchToDrag) {
|
||||
|
||||
var thePageX = utils.page('X', e),
|
||||
thePageY = utils.page('Y', e),
|
||||
translated = cache.translation,
|
||||
absoluteTranslation = action.translate.get.matrix(4),
|
||||
whileDragX = thePageX - cache.startDragX,
|
||||
openingLeft = absoluteTranslation > 0,
|
||||
translateTo = whileDragX,
|
||||
diff;
|
||||
|
||||
// Shown no intent already
|
||||
if((cache.intentChecked && !cache.hasIntent)){
|
||||
return;
|
||||
}
|
||||
|
||||
if(settings.addBodyClasses){
|
||||
if((absoluteTranslation)>0){
|
||||
utils.klass.add(doc.body, 'snapjs-left');
|
||||
utils.klass.remove(doc.body, 'snapjs-right');
|
||||
} else if((absoluteTranslation)<0){
|
||||
utils.klass.add(doc.body, 'snapjs-right');
|
||||
utils.klass.remove(doc.body, 'snapjs-left');
|
||||
}
|
||||
}
|
||||
|
||||
if (cache.hasIntent === false || cache.hasIntent === null) {
|
||||
|
||||
var deg = utils.angleOfDrag(thePageX, thePageY),
|
||||
inRightRange = (deg >= 0 && deg <= settings.slideIntent) || (deg <= 360 && deg > (360 - settings.slideIntent)),
|
||||
inLeftRange = (deg >= 180 && deg <= (180 + settings.slideIntent)) || (deg <= 180 && deg >= (180 - settings.slideIntent));
|
||||
if (!inLeftRange && !inRightRange) {
|
||||
cache.hasIntent = false;
|
||||
} else {
|
||||
cache.hasIntent = true;
|
||||
}
|
||||
cache.intentChecked = true;
|
||||
}
|
||||
|
||||
if (
|
||||
(settings.minDragDistance>=Math.abs(thePageX-cache.startDragX)) || // Has user met minimum drag distance?
|
||||
(cache.hasIntent === false)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
utils.events.prevent(e);
|
||||
utils.dispatchEvent('drag');
|
||||
|
||||
cache.dragWatchers.current = thePageX;
|
||||
|
||||
// Determine which direction we are going
|
||||
if (cache.dragWatchers.last > thePageX) {
|
||||
if (cache.dragWatchers.state !== 'left') {
|
||||
cache.dragWatchers.state = 'left';
|
||||
cache.dragWatchers.hold = thePageX;
|
||||
}
|
||||
cache.dragWatchers.last = thePageX;
|
||||
} else if (cache.dragWatchers.last < thePageX) {
|
||||
if (cache.dragWatchers.state !== 'right') {
|
||||
cache.dragWatchers.state = 'right';
|
||||
cache.dragWatchers.hold = thePageX;
|
||||
}
|
||||
cache.dragWatchers.last = thePageX;
|
||||
}
|
||||
if (openingLeft) {
|
||||
// Pulling too far to the right
|
||||
if (settings.maxPosition < absoluteTranslation) {
|
||||
diff = (absoluteTranslation - settings.maxPosition) * settings.resistance;
|
||||
translateTo = whileDragX - diff;
|
||||
}
|
||||
cache.simpleStates = {
|
||||
opening: 'left',
|
||||
towards: cache.dragWatchers.state,
|
||||
hyperExtending: settings.maxPosition < absoluteTranslation,
|
||||
halfway: absoluteTranslation > (settings.maxPosition / 2),
|
||||
flick: Math.abs(cache.dragWatchers.current - cache.dragWatchers.hold) > settings.flickThreshold,
|
||||
translation: {
|
||||
absolute: absoluteTranslation,
|
||||
relative: whileDragX,
|
||||
sinceDirectionChange: (cache.dragWatchers.current - cache.dragWatchers.hold),
|
||||
percentage: (absoluteTranslation/settings.maxPosition)*100
|
||||
}
|
||||
};
|
||||
} else {
|
||||
// Pulling too far to the left
|
||||
if (settings.minPosition > absoluteTranslation) {
|
||||
diff = (absoluteTranslation - settings.minPosition) * settings.resistance;
|
||||
translateTo = whileDragX - diff;
|
||||
}
|
||||
cache.simpleStates = {
|
||||
opening: 'right',
|
||||
towards: cache.dragWatchers.state,
|
||||
hyperExtending: settings.minPosition > absoluteTranslation,
|
||||
halfway: absoluteTranslation < (settings.minPosition / 2),
|
||||
flick: Math.abs(cache.dragWatchers.current - cache.dragWatchers.hold) > settings.flickThreshold,
|
||||
translation: {
|
||||
absolute: absoluteTranslation,
|
||||
relative: whileDragX,
|
||||
sinceDirectionChange: (cache.dragWatchers.current - cache.dragWatchers.hold),
|
||||
percentage: (absoluteTranslation/settings.minPosition)*100
|
||||
}
|
||||
};
|
||||
}
|
||||
action.translate.x(translateTo + translated);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Fired when the user releases the content pane
|
||||
* @param {Object} e Event object
|
||||
*/
|
||||
endDrag: function(e) {
|
||||
if (cache.isDragging) {
|
||||
utils.dispatchEvent('end');
|
||||
var translated = action.translate.get.matrix(4);
|
||||
|
||||
// Tap Close
|
||||
if (cache.dragWatchers.current === 0 && translated !== 0 && settings.tapToClose) {
|
||||
utils.dispatchEvent('close');
|
||||
utils.events.prevent(e);
|
||||
action.translate.easeTo(0);
|
||||
cache.isDragging = false;
|
||||
cache.startDragX = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// Revealing Left
|
||||
if (cache.simpleStates.opening === 'left') {
|
||||
// Halfway, Flicking, or Too Far Out
|
||||
if ((cache.simpleStates.halfway || cache.simpleStates.hyperExtending || cache.simpleStates.flick)) {
|
||||
if (cache.simpleStates.flick && cache.simpleStates.towards === 'left') { // Flicking Closed
|
||||
action.translate.easeTo(0);
|
||||
} else if (
|
||||
(cache.simpleStates.flick && cache.simpleStates.towards === 'right') || // Flicking Open OR
|
||||
(cache.simpleStates.halfway || cache.simpleStates.hyperExtending) // At least halfway open OR hyperextending
|
||||
) {
|
||||
action.translate.easeTo(settings.maxPosition); // Open Left
|
||||
}
|
||||
} else {
|
||||
action.translate.easeTo(0); // Close Left
|
||||
}
|
||||
// Revealing Right
|
||||
} else if (cache.simpleStates.opening === 'right') {
|
||||
// Halfway, Flicking, or Too Far Out
|
||||
if ((cache.simpleStates.halfway || cache.simpleStates.hyperExtending || cache.simpleStates.flick)) {
|
||||
if (cache.simpleStates.flick && cache.simpleStates.towards === 'right') { // Flicking Closed
|
||||
action.translate.easeTo(0);
|
||||
} else if (
|
||||
(cache.simpleStates.flick && cache.simpleStates.towards === 'left') || // Flicking Open OR
|
||||
(cache.simpleStates.halfway || cache.simpleStates.hyperExtending) // At least halfway open OR hyperextending
|
||||
) {
|
||||
action.translate.easeTo(settings.minPosition); // Open Right
|
||||
}
|
||||
} else {
|
||||
action.translate.easeTo(0); // Close Right
|
||||
}
|
||||
}
|
||||
cache.isDragging = false;
|
||||
cache.startDragX = utils.page('X', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Initialize
|
||||
if (opts.element) {
|
||||
utils.extend(settings, opts);
|
||||
cache.vendor = utils.vendor();
|
||||
cache.canTransform = utils.canTransform();
|
||||
action.drag.listen();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
utils.extend(Core.prototype, {
|
||||
|
||||
/**
|
||||
* Opens the specified side menu
|
||||
* @param {String} side Must be "left" or "right"
|
||||
*/
|
||||
open: function(side, cb) {
|
||||
utils.dispatchEvent('open');
|
||||
utils.klass.remove(doc.body, 'snapjs-expand-left');
|
||||
utils.klass.remove(doc.body, 'snapjs-expand-right');
|
||||
|
||||
if (side === 'left') {
|
||||
this.cache.simpleStates.opening = 'left';
|
||||
this.cache.simpleStates.towards = 'right';
|
||||
utils.klass.add(doc.body, 'snapjs-left');
|
||||
utils.klass.remove(doc.body, 'snapjs-right');
|
||||
this.action.translate.easeTo(this.settings.maxPosition, cb);
|
||||
} else if (side === 'right') {
|
||||
this.cache.simpleStates.opening = 'right';
|
||||
this.cache.simpleStates.towards = 'left';
|
||||
utils.klass.remove(doc.body, 'snapjs-left');
|
||||
utils.klass.add(doc.body, 'snapjs-right');
|
||||
this.action.translate.easeTo(this.settings.minPosition, cb);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Closes the pane
|
||||
*/
|
||||
close: function(cb) {
|
||||
utils.dispatchEvent('close');
|
||||
this.action.translate.easeTo(0, cb);
|
||||
},
|
||||
|
||||
/**
|
||||
* Hides the content pane completely allowing for full menu visibility
|
||||
* @param {String} side Must be "left" or "right"
|
||||
*/
|
||||
expand: function(side){
|
||||
var to = win.innerWidth || doc.documentElement.clientWidth;
|
||||
|
||||
if(side==='left'){
|
||||
utils.dispatchEvent('expandLeft');
|
||||
utils.klass.add(doc.body, 'snapjs-expand-left');
|
||||
utils.klass.remove(doc.body, 'snapjs-expand-right');
|
||||
} else {
|
||||
utils.dispatchEvent('expandRight');
|
||||
utils.klass.add(doc.body, 'snapjs-expand-right');
|
||||
utils.klass.remove(doc.body, 'snapjs-expand-left');
|
||||
to *= -1;
|
||||
}
|
||||
this.action.translate.easeTo(to);
|
||||
},
|
||||
|
||||
/**
|
||||
* Listen in to custom Snap events
|
||||
* @param {String} evt The snap event name
|
||||
* @param {Function} fn Callback function
|
||||
* @return {Object} Snap instance
|
||||
*/
|
||||
on: function(evt, fn) {
|
||||
this.eventList[evt] = fn;
|
||||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* Stops listening to custom Snap events
|
||||
* @param {String} evt The snap event name
|
||||
*/
|
||||
off: function(evt) {
|
||||
if (this.eventList[evt]) {
|
||||
this.eventList[evt] = false;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Enables Snap.js events
|
||||
*/
|
||||
enable: function() {
|
||||
utils.dispatchEvent('enable');
|
||||
this.action.drag.listen();
|
||||
},
|
||||
|
||||
/**
|
||||
* Disables Snap.js events
|
||||
*/
|
||||
disable: function() {
|
||||
utils.dispatchEvent('disable');
|
||||
this.action.drag.stopListening();
|
||||
},
|
||||
|
||||
/**
|
||||
* Updates the instances settings
|
||||
* @param {Object} opts The Snap options to set
|
||||
*/
|
||||
settings: function(opts){
|
||||
utils.extend(this.settings, opts);
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns information about the state of the content pane
|
||||
* @return {Object} Information regarding the state of the pane
|
||||
*/
|
||||
state: function() {
|
||||
var state,
|
||||
fromLeft = this.action.translate.get.matrix(4);
|
||||
if (fromLeft === this.settings.maxPosition) {
|
||||
state = 'left';
|
||||
} else if (fromLeft === this.settings.minPosition) {
|
||||
state = 'right';
|
||||
} else {
|
||||
state = 'closed';
|
||||
}
|
||||
return {
|
||||
state: state,
|
||||
info: this.cache.simpleStates
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// Assign to the global namespace
|
||||
this[Namespace] = Core;
|
||||
|
||||
}).call(this, window, document);
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"name": "strengthify",
|
||||
"version": "0.5.5",
|
||||
"homepage": "https://github.com/MorrisJobke/strengthify",
|
||||
"authors": [
|
||||
"Eve Ragins <eve.ragins@eve-corp.com",
|
||||
"Morris Jobke <hey@morrisjobke.de>"
|
||||
],
|
||||
"description": "Combine jQuery and zxcvbn to create a password strength meter.",
|
||||
"main": "jquery.strengthify.js",
|
||||
"license": "MIT",
|
||||
"_release": "0.5.5",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "0.5.5",
|
||||
"commit": "54553d678d7894beff368ce4b4393bcc1f387037"
|
||||
},
|
||||
"_source": "https://github.com/MorrisJobke/strengthify.git",
|
||||
"_target": "0.5.5",
|
||||
"_originalSource": "strengthify"
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2016 Morris Jobke
|
||||
Eve Ragins @ Eve Corp (github.com/eve-corp)
|
||||
|
||||
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.
|
|
@ -1,227 +0,0 @@
|
|||
/**
|
||||
* Strengthify - show the weakness of a password (uses zxcvbn for this)
|
||||
* https://github.com/MorrisJobke/strengthify
|
||||
*
|
||||
* Version: 0.5.5
|
||||
* Author: Morris Jobke (github.com/MorrisJobke) - original
|
||||
* Eve Ragins @ Eve Corp (github.com/eve-corp)
|
||||
*
|
||||
*
|
||||
* License:
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2013-2016 Morris Jobke <morris.jobke@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* global jQuery */
|
||||
(function($) {
|
||||
$.fn.strengthify = function(paramOptions) {
|
||||
"use strict";
|
||||
|
||||
var defaults = {
|
||||
zxcvbn: 'zxcvbn/zxcvbn.js',
|
||||
titles: [
|
||||
'Weakest',
|
||||
'Weak',
|
||||
'So-so',
|
||||
'Good',
|
||||
'Perfect'
|
||||
],
|
||||
tilesOptions:{
|
||||
tooltip: true,
|
||||
element: false
|
||||
},
|
||||
drawTitles: false,
|
||||
drawMessage: false,
|
||||
drawBars: true,
|
||||
$addAfter: null,
|
||||
nonce: null
|
||||
};
|
||||
|
||||
return this.each(function() {
|
||||
var options = $.extend(defaults, paramOptions);
|
||||
|
||||
if (!options.drawTitles
|
||||
&& !options.drawMessage
|
||||
&& !options.drawBars)
|
||||
console.warn("expect at least one of 'drawTitles', 'drawMessage', or 'drawBars' to be true");
|
||||
|
||||
function getWrapperFor(id) {
|
||||
return $('div[data-strengthifyFor="' + id + '"]');
|
||||
};
|
||||
|
||||
function drawStrengthify() {
|
||||
var password = $(this).val(),
|
||||
elemId = $(this).attr('id'),
|
||||
// hide strengthify if no input is provided
|
||||
opacity = (password === '') ? 0 : 1,
|
||||
// calculate result
|
||||
result = zxcvbn(password),
|
||||
// setup some vars for later
|
||||
css = '',
|
||||
bsLevel = '',
|
||||
message = '',
|
||||
// cache jQuery selections
|
||||
$wrapper = getWrapperFor(elemId),
|
||||
$container = $wrapper.find('.strengthify-container'),
|
||||
$message = $wrapper.find('[data-strengthifyMessage]');
|
||||
|
||||
|
||||
$wrapper.children()
|
||||
.css('opacity', opacity)
|
||||
.css('-ms-filter',
|
||||
'"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')"'
|
||||
);
|
||||
|
||||
if (options.onResult) {
|
||||
options.onResult(result);
|
||||
}
|
||||
|
||||
// style strengthify bar
|
||||
// possible scores: 0-4
|
||||
switch (result.score) {
|
||||
case 0:
|
||||
case 1:
|
||||
css = 'password-bad';
|
||||
bsLevel = 'danger';
|
||||
message = result.feedback ? result.feedback.suggestions.join('<br/>') : "";
|
||||
break;
|
||||
case 2:
|
||||
bsLevel = 'warning';
|
||||
message = result.feedback ? result.feedback.suggestions.join('<br/>') : "";
|
||||
css = 'password-medium';
|
||||
break;
|
||||
case 3:
|
||||
css = 'password-good';
|
||||
bsLevel = 'info';
|
||||
message = "Getting better.";
|
||||
break;
|
||||
case 4:
|
||||
css = 'password-good';
|
||||
bsLevel = 'success';
|
||||
message = "Looks good.";
|
||||
break;
|
||||
}
|
||||
|
||||
if ($message) {
|
||||
$message.removeAttr('class');
|
||||
$message.addClass('bg-' + bsLevel);
|
||||
|
||||
// reset state for empty string password
|
||||
if (password === '') {
|
||||
message = '';
|
||||
}
|
||||
$message.html(message);
|
||||
}
|
||||
if ($container) {
|
||||
$container
|
||||
.attr('class', css + ' strengthify-container')
|
||||
// possible scores: 0-4
|
||||
.css(
|
||||
'width',
|
||||
// if score is '0' it will be changed to '1' to
|
||||
// not hide strengthify if the password is extremely weak
|
||||
((result.score === 0 ? 1 : result.score) * 25) + '%'
|
||||
);
|
||||
|
||||
// reset state for empty string password
|
||||
if (password === '') {
|
||||
$container.css('width', 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (options.drawTitles) {
|
||||
// set a title for the wrapper
|
||||
if(options.tilesOptions.tooltip){
|
||||
$wrapper.attr(
|
||||
'title',
|
||||
options.titles[result.score]
|
||||
).tooltip({
|
||||
placement: 'bottom',
|
||||
trigger: 'manual',
|
||||
}).tooltip(
|
||||
'fixTitle'
|
||||
).tooltip(
|
||||
'show'
|
||||
);
|
||||
|
||||
if (opacity === 0) {
|
||||
$wrapper.tooltip(
|
||||
'hide'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if(options.tilesOptions.element){
|
||||
$wrapper.find(".strengthify-tiles").text(options.titles[result.score]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function init() {
|
||||
var $elem = $(this),
|
||||
elemId = $elem.attr('id');
|
||||
var drawSelf = drawStrengthify.bind(this);
|
||||
|
||||
var $addAfter = options.$addAfter;
|
||||
if (!$addAfter) {
|
||||
$addAfter = $elem;
|
||||
}
|
||||
|
||||
// add elements
|
||||
$addAfter.after('<div class="strengthify-wrapper" data-strengthifyFor="' + $elem.attr('id') + '"></div>');
|
||||
|
||||
if (options.drawBars) {
|
||||
getWrapperFor(elemId)
|
||||
.append('<div class="strengthify-bg" />')
|
||||
.append('<div class="strengthify-container" />')
|
||||
.append('<div class="strengthify-separator" style="left: 25%" />')
|
||||
.append('<div class="strengthify-separator" style="left: 50%" />')
|
||||
.append('<div class="strengthify-separator" style="left: 75%" />');
|
||||
}
|
||||
|
||||
if (options.drawMessage) {
|
||||
getWrapperFor(elemId).append('<div data-strengthifyMessage></div>');
|
||||
}
|
||||
|
||||
if (options.drawTitles && options.tilesOptions) {
|
||||
getWrapperFor(elemId).append('<div class="strengthify-tiles"></div>');
|
||||
}
|
||||
|
||||
$elem.parent().on('scroll', drawSelf);
|
||||
|
||||
var script = document.createElement("script");
|
||||
script.src = options.zxcvbn;
|
||||
if (options.nonce !== null) {
|
||||
script.nonce = options.nonce;
|
||||
}
|
||||
document.head.appendChild(script);
|
||||
|
||||
$elem.bind('keyup input change', drawSelf);
|
||||
};
|
||||
|
||||
init.call(this);
|
||||
|
||||
//return me;
|
||||
});
|
||||
};
|
||||
|
||||
} (jQuery));
|
|
@ -1,60 +0,0 @@
|
|||
/**
|
||||
* Strengthify - show the weakness of a password (uses zxcvbn for this)
|
||||
* https://github.com/MorrisJobke/strengthify
|
||||
* Version: 0.5.5
|
||||
* License: The MIT License (MIT)
|
||||
* Copyright (c) 2013-2016 Morris Jobke <morris.jobke@gmail.com>
|
||||
*/
|
||||
|
||||
.strengthify-wrapper {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.strengthify-wrapper > * {
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
-webkit-transition:all .5s ease-in-out;
|
||||
-moz-transition:all .5s ease-in-out;
|
||||
transition:all .5s ease-in-out;
|
||||
}
|
||||
|
||||
.strengthify-bg, .strengthify-container, .strengthify-separator {
|
||||
height: 3px;
|
||||
}
|
||||
|
||||
.strengthify-bg, .strengthify-container {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.strengthify-bg {
|
||||
background-color: #BBB;
|
||||
}
|
||||
|
||||
.strengthify-separator {
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
background-color: #FFF;
|
||||
width: 1px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.password-bad {
|
||||
background-color: #C33;
|
||||
}
|
||||
.password-medium {
|
||||
background-color: #F80;
|
||||
}
|
||||
.password-good {
|
||||
background-color: #3C3;
|
||||
}
|
||||
|
||||
div[data-strengthifyMessage] {
|
||||
padding: 3px 8px;
|
||||
}
|
||||
|
||||
.strengthify-tiles{
|
||||
float: right;
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
{
|
||||
"name": "underscore",
|
||||
"version": "1.8.3",
|
||||
"main": "underscore.js",
|
||||
"keywords": [
|
||||
"util",
|
||||
"functional",
|
||||
"server",
|
||||
"client",
|
||||
"browser"
|
||||
],
|
||||
"ignore": [
|
||||
"docs",
|
||||
"test",
|
||||
"*.yml",
|
||||
"CNAME",
|
||||
"index.html",
|
||||
"favicon.ico",
|
||||
"CONTRIBUTING.md",
|
||||
".*",
|
||||
"component.json",
|
||||
"package.json",
|
||||
"karma.*"
|
||||
],
|
||||
"homepage": "https://github.com/jashkenas/underscore",
|
||||
"_release": "1.8.3",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.8.3",
|
||||
"commit": "e4743ab712b8ab42ad4ccb48b155034d02394e4d"
|
||||
},
|
||||
"_source": "https://github.com/jashkenas/underscore.git",
|
||||
"_target": "1.8.3",
|
||||
"_originalSource": "underscore"
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
|
||||
Reporters & Editors
|
||||
|
||||
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.
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,51 @@
|
|||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
|
||||
module.exports = {
|
||||
entry: {
|
||||
main: path.join(__dirname, 'src/main.js')
|
||||
},
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: path.resolve(__dirname, 'js/dist')
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: ['style-loader', 'css-loader']
|
||||
},
|
||||
{
|
||||
test: /davclient/,
|
||||
use: 'exports-loader?dav'
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
exclude: /node_modules/
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif)$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
name: '[name].[ext]?[hash]',
|
||||
limit: 8192
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new webpack.ProvidePlugin({
|
||||
'_': "underscore",
|
||||
$: "jquery",
|
||||
jQuery: "jquery"
|
||||
})
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
handlebars: 'handlebars/dist/handlebars.min.js'
|
||||
},
|
||||
extensions: ['*', '.js'],
|
||||
symlinks: false
|
||||
}
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
const merge = require('webpack-merge');
|
||||
const common = require('./webpack.common.js');
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'development',
|
||||
devtool: 'cheap-source-map',
|
||||
})
|
|
@ -0,0 +1,7 @@
|
|||
const merge = require('webpack-merge')
|
||||
const common = require('./webpack.common.js')
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'production',
|
||||
devtool: '#source-map'
|
||||
})
|
|
@ -112,7 +112,6 @@ class OC_Template extends \OC\Template\Base {
|
|||
OC_Util::addStyle('css-variables', null, true);
|
||||
OC_Util::addStyle('server', null, true);
|
||||
OC_Util::addStyle('jquery-ui-fixes',null,true);
|
||||
OC_Util::addVendorStyle('jquery-ui/themes/base/jquery-ui',null,true);
|
||||
OC_Util::addVendorStyle('select2/select2', null, true);
|
||||
OC_Util::addStyle('jquery.ocdialog');
|
||||
OC_Util::addTranslations("core", null, true);
|
||||
|
@ -145,10 +144,9 @@ class OC_Template extends \OC\Template\Base {
|
|||
// Import all (combined) default vendor libraries
|
||||
OC_Util::addVendorScript('core', null, true);
|
||||
}
|
||||
OC_Util::addScript('core', 'dist/main', true);
|
||||
|
||||
if (\OC::$server->getRequest()->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_IE])) {
|
||||
// polyfill for btoa/atob for IE friends
|
||||
OC_Util::addVendorScript('base64/base64');
|
||||
// shim for the davclient.js library
|
||||
\OCP\Util::addScript('files/iedavclient');
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"name": "nextcloud",
|
||||
"version": "0.1.0",
|
||||
"description": "Nextcloud Server",
|
||||
"private": true,
|
||||
"directories": {
|
||||
"lib": "lib",
|
||||
"test": "tests"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "webpack --progress --hide-modules --config core/webpack.prod.js",
|
||||
"dev": "webpack --progress --watch --config core/webpack.dev.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud/server.git"
|
||||
},
|
||||
"keywords": [
|
||||
"nextcloud"
|
||||
],
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.2.0",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
||||
"@babel/polyfill": "^7.0.0",
|
||||
"@babel/preset-env": "^7.2.0",
|
||||
"Base64": "^0.3.0",
|
||||
"autosize": "^4.0.2",
|
||||
"babel-loader": "^8.0.4",
|
||||
"backbone": "^1.2.3",
|
||||
"blueimp-md5": "^2.7.0",
|
||||
"bootstrap": "^3.3.7",
|
||||
"clipboard": "^1.7.1",
|
||||
"davclient.js": "git+https://github.com/owncloud/davclient.js.git#0.1.2",
|
||||
"dompurify": "^1.0.4",
|
||||
"es6-shim": "^0.35.4",
|
||||
"handlebars": "^4.0.5",
|
||||
"jcrop": "git+https://github.com/ChristophWurst/Jcrop.git#v0.9.12-npm",
|
||||
"jquery": "^2.1.4",
|
||||
"jquery-migrate": "^1.4.0",
|
||||
"jquery-ui": "^1.12.1",
|
||||
"jstimezonedetect": "^1.0.6",
|
||||
"marked": "^0.3.6",
|
||||
"moment": "^2.18.1",
|
||||
"select2": "^3.4.5",
|
||||
"snap.js": "^2.0.9",
|
||||
"strengthify": "git+https://github.com/ChristophWurst/strengthify.git#feature/npm-package",
|
||||
"underscore": "^1.8.3",
|
||||
"webpack": "^4.27.1",
|
||||
"webpack-cli": "^3.1.2",
|
||||
"webpack-merge": "^4.1.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"css-loader": "^2.0.1",
|
||||
"exports-loader": "^0.7.0",
|
||||
"style-loader": "^0.23.1",
|
||||
"url-loader": "^1.1.2"
|
||||
}
|
||||
}
|
|
@ -32,9 +32,6 @@ script('settings', [
|
|||
'federationscopemenu',
|
||||
'settings/personalInfo',
|
||||
]);
|
||||
vendor_script('jcrop/js/jquery.Jcrop');
|
||||
vendor_style('jcrop/css/jquery.Jcrop');
|
||||
|
||||
?>
|
||||
|
||||
<div id="personal-settings">
|
||||
|
|
|
@ -32,8 +32,6 @@ script('settings', [
|
|||
if($_['passwordChangeSupported']) {
|
||||
script('settings', 'security_password');
|
||||
script('jquery-showpassword');
|
||||
vendor_script('strengthify/jquery.strengthify.min');
|
||||
vendor_style('strengthify/strengthify');
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
Loading…
Reference in New Issue