Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorJohann-S <johann.servoire@gmail.com>2017-09-25 13:41:54 +0300
committerJohann-S <johann.servoire@gmail.com>2017-09-25 14:23:13 +0300
commit9b8356ba52d89fd065d6061979b5946b8c5f44fa (patch)
tree3c78f94c599eb0ba9d052742abb8e8fe5d926fba /js
parent3abf8a0e5525d30914ce37ebb98240a476cb6f17 (diff)
Collapse - Allow to pass jQuery object or DOM element to the parent option
Diffstat (limited to 'js')
-rw-r--r--js/src/collapse.js15
-rw-r--r--js/src/util.js10
-rw-r--r--js/tests/unit/collapse.js44
3 files changed, 62 insertions, 7 deletions
diff --git a/js/src/collapse.js b/js/src/collapse.js
index bf9c990ecc..fa082f1333 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -33,7 +33,7 @@ const Collapse = (() => {
const DefaultType = {
toggle : 'boolean',
- parent : 'string'
+ parent : '(string|element)'
}
const Event = {
@@ -289,7 +289,18 @@ const Collapse = (() => {
}
_getParent() {
- const parent = $(this._config.parent)[0]
+ let parent = null
+ if (Util.isElement(this._config.parent)) {
+ parent = this._config.parent
+
+ // it's a jQuery object
+ if (typeof this._config.parent.jquery !== 'undefined') {
+ parent = this._config.parent[0]
+ }
+ } else {
+ parent = $(this._config.parent)[0]
+ }
+
const selector =
`[data-toggle="collapse"][data-parent="${this._config.parent}"]`
diff --git a/js/src/util.js b/js/src/util.js
index b18d0f776d..7eb25de558 100644
--- a/js/src/util.js
+++ b/js/src/util.js
@@ -32,10 +32,6 @@ const Util = (() => {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
- function isElement(obj) {
- return (obj[0] || obj).nodeType
- }
-
function getSpecialTransitionEndEvent() {
return {
bindType: transition.end,
@@ -138,12 +134,16 @@ const Util = (() => {
return Boolean(transition)
},
+ isElement(obj) {
+ return (obj[0] || obj).nodeType
+ },
+
typeCheckConfig(componentName, config, configTypes) {
for (const property in configTypes) {
if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
const expectedTypes = configTypes[property]
const value = config[property]
- const valueType = value && isElement(value) ?
+ const valueType = value && Util.isElement(value) ?
'element' : toType(value)
if (!new RegExp(expectedTypes).test(valueType)) {
diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js
index 9ecb60994f..c36fe25bee 100644
--- a/js/tests/unit/collapse.js
+++ b/js/tests/unit/collapse.js
@@ -698,4 +698,48 @@ $(function () {
$target.trigger($.Event('click'))
})
+
+ QUnit.test('should allow jquery object in parent config', function (assert) {
+ assert.expect(1)
+ var html =
+ '<div class="my-collapse">' +
+ ' <div class="item">' +
+ ' <a data-toggle="collapse" href="#">Toggle item</a>' +
+ ' <div class="collapse">Lorem ipsum</div>' +
+ ' </div>' +
+ '</div>'
+
+ $(html).appendTo('#qunit-fixture')
+ try {
+ $('[data-toggle="collapse"]').bootstrapCollapse({
+ parent: $('.my-collapse')
+ })
+ assert.ok(true, 'collapse correctly created')
+ }
+ catch (e) {
+ assert.ok(false, 'collapse not created')
+ }
+ })
+
+ QUnit.test('should allow DOM object in parent config', function (assert) {
+ assert.expect(1)
+ var html =
+ '<div class="my-collapse">' +
+ ' <div class="item">' +
+ ' <a data-toggle="collapse" href="#">Toggle item</a>' +
+ ' <div class="collapse">Lorem ipsum</div>' +
+ ' </div>' +
+ '</div>'
+
+ $(html).appendTo('#qunit-fixture')
+ try {
+ $('[data-toggle="collapse"]').bootstrapCollapse({
+ parent: $('.my-collapse')[0]
+ })
+ assert.ok(true, 'collapse correctly created')
+ }
+ catch (e) {
+ assert.ok(false, 'collapse not created')
+ }
+ })
})