From f3bd620cc7beed87f1577bef1aabfab6bfd99d64 Mon Sep 17 00:00:00 2001 From: Andrew Rowls Date: Thu, 4 Apr 2013 15:23:03 -0400 Subject: [PATCH] Extend data-api to all picker types, enact on click event, add tests --- js/bootstrap-datepicker.js | 18 ++++-- tests/suites/data-api.js | 114 +++++++++++++++++++++++++++++++++++++ tests/suites/options.js | 8 --- tests/tests.html | 3 +- 4 files changed, 129 insertions(+), 14 deletions(-) create mode 100644 tests/suites/data-api.js 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 = '