diff --git a/js/bootstrap-datepicker.js b/js/bootstrap-datepicker.js
index 6f80b59..74dfd10 100644
--- a/js/bootstrap-datepicker.js
+++ b/js/bootstrap-datepicker.js
@@ -1141,11 +1141,19 @@
/* DATEPICKER DATA-API
* ================== */
- $(document).on('focus.datepicker.data-api', '[data-provide="datepicker"]', function(e){
- var $this = $(this);
- if ($this.data('datepicker')) return;
- e.preventDefault();
- $this.datepicker($this.data());
+ $(document).on(
+ 'focus.datepicker.data-api click.datepicker.data-api',
+ '[data-provide="datepicker"]',
+ function(e){
+ var $this = $(this);
+ if ($this.data('datepicker')) return;
+ e.preventDefault();
+ // component click requires us to explicitly show it
+ $this.datepicker('show');
+ }
+ );
+ $(function(){
+ $('[data-provide="datepicker-inline"]').datepicker();
});
}( window.jQuery );
diff --git a/tests/suites/data-api.js b/tests/suites/data-api.js
new file mode 100644
index 0000000..a751f57
--- /dev/null
+++ b/tests/suites/data-api.js
@@ -0,0 +1,114 @@
+module('DATA-API');
+
+test('DATA-API: data-provide="datepicker" on input; focus', function(){
+ var input = $('')
+ .appendTo('#qunit-fixture');
+ input.focus();
+ ok(input.data('datepicker'), 'datepicker is initialized by "focus" event');
+});
+
+test('DATA-API: data-provide="datepicker" on input; click', function(){
+ var input = $('')
+ .appendTo('#qunit-fixture');
+ input.click();
+ ok(input.data('datepicker'), 'datepicker is initialized by "focus" event');
+});
+
+test('DATA-API: data-provide="datepicker" on component', function(){
+ var html, comp;
+
+ html = '
'+
+ ''+
+ '
';
+
+ comp = $(html).appendTo('#qunit-fixture');
+ comp.find('input').focus();
+ ok(comp.data('datepicker'), 'append component initialized by "focus" event on input');
+ comp.remove();
+
+ comp = $(html).appendTo('#qunit-fixture');
+ comp.find('input').click();
+ ok(comp.data('datepicker'), 'append component initialized by "click" event on input');
+ comp.remove();
+
+ comp = $(html).appendTo('#qunit-fixture');
+ comp.find('.add-on').focus();
+ ok(comp.data('datepicker'), 'append component initialized by "focus" event on add-on');
+ comp.remove();
+
+ comp = $(html).appendTo('#qunit-fixture');
+ comp.find('.add-on').click();
+ ok(comp.data('datepicker'), 'append component initialized by "click" event on add-on');
+ comp.remove();
+
+
+ html = ''+
+ ''+
+ '
';
+
+ comp = $(html).prependTo('#qunit-fixture');
+ comp.find('input').focus();
+ ok(comp.data('datepicker'), 'prepend component initialized by "focus" event on input');
+ comp.remove();
+
+ comp = $(html).prependTo('#qunit-fixture');
+ comp.find('input').click();
+ ok(comp.data('datepicker'), 'prepend component initialized by "click" event on input');
+ comp.remove();
+
+ comp = $(html).prependTo('#qunit-fixture');
+ comp.find('.add-on').focus();
+ ok(comp.data('datepicker'), 'prepend component initialized by "focus" event on add-on');
+ comp.remove();
+
+ comp = $(html).prependTo('#qunit-fixture');
+ comp.find('.add-on').click();
+ ok(comp.data('datepicker'), 'prepend component initialized by "click" event on add-on');
+ comp.remove();
+});
+
+test('DATA-API: data-provide="datepicker" on button', function(){
+ var html, comp;
+
+ html = '