Multiple Versions of a jQuery Plugin
A way to load multiple versions of a jQuery plugin using RequireJS.
by Douglas Ludlow
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/css/jquery-ui.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.14/require.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/qunit/1.14.0/qunit.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/qunit/1.14.0/qunit.min.js"></script>
<script src="http://rawgit.com/trentrichardson/jQuery-Timepicker-Addon/v1.0.4/jquery-ui-timepicker-addon.js"></script>
<p><label>1.0.4 <input id="date1" type="text" /></label></p>
<p><label>1.4.5 <input id="date2" type="text" /></label></p>
<p><label>1.0.4 <input id="date3" type="text" /></label></p>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
CSS
/* v1.0.4 */
/*
.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
.ui-timepicker-div dl { text-align: left; }
.ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }
.ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
.ui-timepicker-div td { font-size: 90%; }
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
*/
/* v1.4.5 */
.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
.ui-timepicker-div dl { text-align: left; }
.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
.ui-timepicker-div dl dd { margin: 0 10px 10px 45%; }
.ui-timepicker-div td { font-size: 90%; }
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
JavaScript
require.config({
paths: {
'jquery': '//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min',
'jquery-ui': 'http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min',
'jquery.timepicker': 'http://rawgit.com/trentrichardson/jQuery-Timepicker-Addon/v1.4.5/dist/jquery-ui-timepicker-addon'
},
shim: {
'jquery.timepicker': {
deps: ['jquery', 'jquery-ui'],
init: function(jquery) {
return jquery.noConflict(true);
}
}
},
});
QUnit.test('global timepicker is 1.0.4', function (assert) {
assert.ok($.timepicker.version == '1.0.4',
$.timepicker.version);
});
$('#date1').timepicker();
require(['jquery', 'jquery.timepicker'], function ($) {
QUnit.test('amd timepicker is 1.4.5', function (assert) {
assert.ok($.timepicker.version == '1.4.5',
$.timepicker.version);
});
// Maybe working...
$.datepicker = jQuery.datepicker;
$.fn.datepicker = jQuery.fn.datepicker;
$('#date2').timepicker();
QUnit.test('amd timepicker is 1.4.5', function (assert) {
assert.ok($.timepicker.version == '1.4.5',
$.timepicker.version);
});
});
setTimeout(function() {
QUnit.test('global timepicker is still 1.0.4', function (assert) {
assert.ok($.timepicker.version == '1.0.4',
$.timepicker.version);
});
$('#date3').timepicker();
}, 2000);