bootstrap-rails-engine 1.2.9 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
File without changes
data/Gemfile CHANGED
File without changes
data/README.md CHANGED
@@ -3,7 +3,7 @@ Make [Twitter Bootstrap](http://twitter.github.com/bootstrap) into Rails Engine.
3
3
 
4
4
  ## Version
5
5
  Bootstrap 2.3
6
- Bootstrap-datepicker (2012/12/13)
6
+ Bootstrap-datepicker (2013/2/25)
7
7
 
8
8
  ## Rails 3.1 or later
9
9
  Include Gemfile,
data/Rakefile CHANGED
File without changes
@@ -35,11 +35,13 @@
35
35
 
36
36
  this.element = $(element);
37
37
  this.language = options.language||this.element.data('date-language')||"en";
38
+ this.language = this.language in dates ? this.language : this.language.split('-')[0]; //Check if "de-DE" style date is available, if not language should fallback to 2 letter code eg "de"
38
39
  this.language = this.language in dates ? this.language : "en";
39
- this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
40
- this.isInline = false;
40
+ this.isRTL = dates[this.language].rtl||false;
41
+ this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||dates[this.language].format||'mm/dd/yyyy');
42
+ this.isInline = false;
41
43
  this.isInput = this.element.is('input');
42
- this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
44
+ this.component = this.element.is('.date') ? this.element.find('.add-on, .btn') : false;
43
45
  this.hasInput = this.component && this.element.find('input').length;
44
46
  if(this.component && this.component.length === 0)
45
47
  this.component = false;
@@ -54,21 +56,26 @@
54
56
  }
55
57
 
56
58
 
57
- this.picker = $(DPGlobal.template)
58
- .appendTo(this.isInline ? this.element : 'body')
59
- .on({
60
- click: $.proxy(this.click, this),
61
- mousedown: $.proxy(this.mousedown, this)
62
- });
59
+ this.picker = $(DPGlobal.template)
60
+ .appendTo(this.isInline ? this.element : 'body')
61
+ .on({
62
+ click: $.proxy(this.click, this),
63
+ mousedown: $.proxy(this.mousedown, this)
64
+ });
63
65
 
64
- if(this.isInline) {
65
- this.picker.addClass('datepicker-inline');
66
- } else {
67
- this.picker.addClass('datepicker-dropdown dropdown-menu');
68
- }
66
+ if(this.isInline) {
67
+ this.picker.addClass('datepicker-inline');
68
+ } else {
69
+ this.picker.addClass('datepicker-dropdown dropdown-menu');
70
+ }
71
+ if (this.isRTL){
72
+ this.picker.addClass('datepicker-rtl');
73
+ this.picker.find('.prev i, .next i')
74
+ .toggleClass('icon-arrow-left icon-arrow-right');
75
+ }
69
76
  $(document).on('mousedown', function (e) {
70
77
  // Clicked outside the datepicker, hide it
71
- if ($(e.target).closest('.datepicker').length === 0) {
78
+ if ($(e.target).closest('.datepicker.datepicker-inline, .datepicker.datepicker-dropdown').length === 0) {
72
79
  that.hide();
73
80
  }
74
81
  });
@@ -99,9 +106,40 @@
99
106
  break;
100
107
  }
101
108
 
109
+ this.minViewMode = options.minViewMode||this.element.data('date-min-view-mode')||0;
110
+ if (typeof this.minViewMode === 'string') {
111
+ switch (this.minViewMode) {
112
+ case 'months':
113
+ this.minViewMode = 1;
114
+ break;
115
+ case 'years':
116
+ this.minViewMode = 2;
117
+ break;
118
+ default:
119
+ this.minViewMode = 0;
120
+ break;
121
+ }
122
+ }
123
+
124
+ this.viewMode = this.startViewMode = Math.max(this.startViewMode, this.minViewMode);
125
+
102
126
  this.todayBtn = (options.todayBtn||this.element.data('date-today-btn')||false);
103
127
  this.todayHighlight = (options.todayHighlight||this.element.data('date-today-highlight')||false);
104
128
 
129
+ this.calendarWeeks = false;
130
+ if ('calendarWeeks' in options) {
131
+ this.calendarWeeks = options.calendarWeeks;
132
+ } else if ('dateCalendarWeeks' in this.element.data()) {
133
+ this.calendarWeeks = this.element.data('date-calendar-weeks');
134
+ }
135
+ if (this.calendarWeeks)
136
+ this.picker.find('tfoot th.today')
137
+ .attr('colspan', function(i, val){
138
+ return parseInt(val) + 1;
139
+ });
140
+
141
+ this._allow_update = false;
142
+
105
143
  this.weekStart = ((options.weekStart||this.element.data('date-weekstart')||dates[this.language].weekStart||0) % 7);
106
144
  this.weekEnd = ((this.weekStart + 6) % 7);
107
145
  this.startDate = -Infinity;
@@ -112,12 +150,15 @@
112
150
  this.setDaysOfWeekDisabled(options.daysOfWeekDisabled||this.element.data('date-days-of-week-disabled'));
113
151
  this.fillDow();
114
152
  this.fillMonths();
153
+
154
+ this._allow_update = true;
155
+
115
156
  this.update();
116
157
  this.showMode();
117
158
 
118
- if(this.isInline) {
119
- this.show();
120
- }
159
+ if(this.isInline) {
160
+ this.show();
161
+ }
121
162
  };
122
163
 
123
164
  Datepicker.prototype = {
@@ -148,9 +189,9 @@
148
189
  }]
149
190
  ];
150
191
  }
151
- else if (this.element.is('div')) { // inline datepicker
152
- this.isInline = true;
153
- }
192
+ else if (this.element.is('div')) { // inline datepicker
193
+ this.isInline = true;
194
+ }
154
195
  else {
155
196
  this._events = [
156
197
  [this.element, {
@@ -176,11 +217,9 @@
176
217
  show: function(e) {
177
218
  this.picker.show();
178
219
  this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
179
- this.update();
180
220
  this.place();
181
221
  $(window).on('resize', $.proxy(this.place, this));
182
- if (e ) {
183
- e.stopPropagation();
222
+ if (e) {
184
223
  e.preventDefault();
185
224
  }
186
225
  this.element.trigger({
@@ -190,7 +229,8 @@
190
229
  },
191
230
 
192
231
  hide: function(e){
193
- if(this.isInline) return;
232
+ if(this.isInline) return;
233
+ if (!this.picker.is(':visible')) return;
194
234
  this.picker.hide();
195
235
  $(window).off('resize', this.place);
196
236
  this.viewMode = this.startViewMode;
@@ -217,6 +257,9 @@
217
257
  this._detachEvents();
218
258
  this.picker.remove();
219
259
  delete this.element.data().datepicker;
260
+ if (!this.isInput) {
261
+ delete this.element.data().date;
262
+ }
220
263
  },
221
264
 
222
265
  getDate: function() {
@@ -241,18 +284,19 @@
241
284
  var formatted = this.getFormattedDate();
242
285
  if (!this.isInput) {
243
286
  if (this.component){
244
- this.element.find('input').prop('value', formatted);
287
+ this.element.find('input').val(formatted);
245
288
  }
246
289
  this.element.data('date', formatted);
247
290
  } else {
248
- this.element.prop('value', formatted);
291
+ this.element.val(formatted);
249
292
  }
250
293
  },
251
294
 
252
- getFormattedDate: function(format) {
253
- if(format == undefined) format = this.format;
254
- return DPGlobal.formatDate(this.date, format, this.language);
255
- },
295
+ getFormattedDate: function(format) {
296
+ if (format === undefined)
297
+ format = this.format;
298
+ return DPGlobal.formatDate(this.date, format, this.language);
299
+ },
256
300
 
257
301
  setStartDate: function(startDate){
258
302
  this.startDate = startDate||-Infinity;
@@ -285,30 +329,34 @@
285
329
  },
286
330
 
287
331
  place: function(){
288
- if(this.isInline) return;
332
+ if(this.isInline) return;
289
333
  var zIndex = parseInt(this.element.parents().filter(function() {
290
334
  return $(this).css('z-index') != 'auto';
291
335
  }).first().css('z-index'))+10;
292
- var offset = this.component ? this.component.offset() : this.element.offset();
336
+ var offset = this.component ? this.component.parent().offset() : this.element.offset();
337
+ var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(true);
293
338
  this.picker.css({
294
- top: offset.top + this.height,
339
+ top: offset.top + height,
295
340
  left: offset.left,
296
341
  zIndex: zIndex
297
342
  });
298
343
  },
299
344
 
345
+ _allow_update: true,
300
346
  update: function(){
301
- var date, fromArgs = false;
302
- if(arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {
303
- date = arguments[0];
304
- fromArgs = true;
305
- } else {
306
- date = this.isInput ? this.element.prop('value') : this.element.data('date') || this.element.find('input').prop('value');
307
- }
347
+ if (!this._allow_update) return;
348
+
349
+ var date, fromArgs = false;
350
+ if(arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {
351
+ date = arguments[0];
352
+ fromArgs = true;
353
+ } else {
354
+ date = this.isInput ? this.element.val() : this.element.data('date') || this.element.find('input').val();
355
+ }
308
356
 
309
357
  this.date = DPGlobal.parseDate(date, this.format, this.language);
310
358
 
311
- if(fromArgs) this.setValue();
359
+ if(fromArgs) this.setValue();
312
360
 
313
361
  if (this.date < this.startDate) {
314
362
  this.viewDate = new Date(this.startDate);
@@ -323,6 +371,11 @@
323
371
  fillDow: function(){
324
372
  var dowCnt = this.weekStart,
325
373
  html = '<tr>';
374
+ if(this.calendarWeeks){
375
+ var cell = '<th class="cw">&nbsp;</th>';
376
+ html += cell;
377
+ this.picker.find('.datepicker-days thead tr:first-child').prepend(cell);
378
+ }
326
379
  while (dowCnt < this.weekStart + 7) {
327
380
  html += '<th class="dow">'+dates[this.language].daysMin[(dowCnt++)%7]+'</th>';
328
381
  }
@@ -347,9 +400,9 @@
347
400
  startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity,
348
401
  endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity,
349
402
  endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() : Infinity,
350
- currentDate = this.date.valueOf(),
403
+ currentDate = this.date && this.date.valueOf(),
351
404
  today = new Date();
352
- this.picker.find('.datepicker-days thead th:eq(1)')
405
+ this.picker.find('.datepicker-days thead th.switch')
353
406
  .text(dates[this.language].months[month]+' '+year);
354
407
  this.picker.find('tfoot th.today')
355
408
  .text(dates[this.language].today)
@@ -368,6 +421,21 @@
368
421
  while(prevMonth.valueOf() < nextMonth) {
369
422
  if (prevMonth.getUTCDay() == this.weekStart) {
370
423
  html.push('<tr>');
424
+ if(this.calendarWeeks){
425
+ // ISO 8601: First week contains first thursday.
426
+ // ISO also states week starts on Monday, but we can be more abstract here.
427
+ var
428
+ // Start of current week: based on weekstart/current date
429
+ ws = new Date(+prevMonth + (this.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
430
+ // Thursday of this week
431
+ th = new Date(+ws + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
432
+ // First Thursday of year, year from thursday
433
+ yth = new Date(+(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),
434
+ // Calendar week: ms between thursdays, div ms per day, div 7 days
435
+ calWeek = (th - yth) / 864e5 / 7 + 1;
436
+ html.push('<td class="cw">'+ calWeek +'</td>');
437
+
438
+ }
371
439
  }
372
440
  clsName = '';
373
441
  if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) {
@@ -382,7 +450,7 @@
382
450
  prevMonth.getUTCDate() == today.getDate()) {
383
451
  clsName += ' today';
384
452
  }
385
- if (prevMonth.valueOf() == currentDate) {
453
+ if (currentDate && prevMonth.valueOf() == currentDate) {
386
454
  clsName += ' active';
387
455
  }
388
456
  if (prevMonth.valueOf() < this.startDate || prevMonth.valueOf() > this.endDate ||
@@ -396,14 +464,14 @@
396
464
  prevMonth.setUTCDate(prevMonth.getUTCDate()+1);
397
465
  }
398
466
  this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
399
- var currentYear = this.date.getUTCFullYear();
467
+ var currentYear = this.date && this.date.getUTCFullYear();
400
468
 
401
469
  var months = this.picker.find('.datepicker-months')
402
470
  .find('th:eq(1)')
403
471
  .text(year)
404
472
  .end()
405
473
  .find('span').removeClass('active');
406
- if (currentYear == year) {
474
+ if (currentYear && currentYear == year) {
407
475
  months.eq(this.date.getUTCMonth()).addClass('active');
408
476
  }
409
477
  if (year < startYear || year > endYear) {
@@ -432,6 +500,8 @@
432
500
  },
433
501
 
434
502
  updateNavArrows: function() {
503
+ if (!this._allow_update) return;
504
+
435
505
  var d = new Date(this.viewDate),
436
506
  year = d.getUTCFullYear(),
437
507
  month = d.getUTCMonth();
@@ -465,7 +535,6 @@
465
535
  },
466
536
 
467
537
  click: function(e) {
468
- e.stopPropagation();
469
538
  e.preventDefault();
470
539
  var target = $(e.target).closest('span, td, th');
471
540
  if (target.length == 1) {
@@ -503,19 +572,29 @@
503
572
  if (!target.is('.disabled')) {
504
573
  this.viewDate.setUTCDate(1);
505
574
  if (target.is('.month')) {
575
+ var day = 1;
506
576
  var month = target.parent().find('span').index(target);
577
+ var year = this.viewDate.getUTCFullYear();
507
578
  this.viewDate.setUTCMonth(month);
508
579
  this.element.trigger({
509
580
  type: 'changeMonth',
510
581
  date: this.viewDate
511
582
  });
583
+ if ( this.minViewMode == 1 ) {
584
+ this._setDate(UTCDate(year, month, day,0,0,0,0));
585
+ }
512
586
  } else {
513
587
  var year = parseInt(target.text(), 10)||0;
588
+ var day = 1;
589
+ var month = 0;
514
590
  this.viewDate.setUTCFullYear(year);
515
591
  this.element.trigger({
516
592
  type: 'changeYear',
517
593
  date: this.viewDate
518
594
  });
595
+ if ( this.minViewMode == 2 ) {
596
+ this._setDate(UTCDate(year, month, day,0,0,0,0));
597
+ }
519
598
  }
520
599
  this.showMode(-1);
521
600
  this.fill();
@@ -712,18 +791,18 @@
712
791
 
713
792
  showMode: function(dir) {
714
793
  if (dir) {
715
- this.viewMode = Math.max(0, Math.min(2, this.viewMode + dir));
716
- }
717
- /*
718
- vitalets: fixing bug of very special conditions:
719
- jquery 1.7.1 + webkit + show inline datepicker in bootstrap popover.
720
- Method show() does not set display css correctly and datepicker is not shown.
721
- Changed to .css('display', 'block') solve the problem.
722
- See https://github.com/vitalets/x-editable/issues/37
723
-
724
- In jquery 1.7.2+ everything works fine.
725
- */
726
- //this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
794
+ this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir));
795
+ }
796
+ /*
797
+ vitalets: fixing bug of very special conditions:
798
+ jquery 1.7.1 + webkit + show inline datepicker in bootstrap popover.
799
+ Method show() does not set display css correctly and datepicker is not shown.
800
+ Changed to .css('display', 'block') solve the problem.
801
+ See https://github.com/vitalets/x-editable/issues/37
802
+
803
+ In jquery 1.7.2+ everything works fine.
804
+ */
805
+ //this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
727
806
  this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block');
728
807
  this.updateNavArrows();
729
808
  }
@@ -777,28 +856,28 @@
777
856
  navStep: 10
778
857
  }],
779
858
  isLeapYear: function (year) {
780
- return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
859
+ return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
781
860
  },
782
861
  getDaysInMonth: function (year, month) {
783
- return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
862
+ return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
784
863
  },
785
- validParts: /dd?|mm?|MM?|yy(?:yy)?/g,
786
- nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\r]+/g,
864
+ validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
865
+ nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
787
866
  parseFormat: function(format){
788
867
  // IE treats \0 as a string end in inputs (truncating the value),
789
868
  // so it's a bad format delimiter, anyway
790
869
  var separators = format.replace(this.validParts, '\0').split('\0'),
791
870
  parts = format.match(this.validParts);
792
- if (!separators || !separators.length || !parts || parts.length == 0){
871
+ if (!separators || !separators.length || !parts || parts.length === 0){
793
872
  throw new Error("Invalid date format.");
794
873
  }
795
874
  return {separators: separators, parts: parts};
796
875
  },
797
876
  parseDate: function(date, format, language) {
798
877
  if (date instanceof Date) return date;
799
- if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) {
800
- var part_re = /([-+]\d+)([dmwy])/,
801
- parts = date.match(/([-+]\d+)([dmwy])/g),
878
+ if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)) {
879
+ var part_re = /([\-+]\d+)([dmwy])/,
880
+ parts = date.match(/([\-+]\d+)([dmwy])/g),
802
881
  part, dir;
803
882
  date = new Date();
804
883
  for (var i=0; i<parts.length; i++) {
@@ -843,10 +922,18 @@
843
922
  setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
844
923
  setters_map['dd'] = setters_map['d'];
845
924
  date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
846
- if (parts.length == format.parts.length) {
847
- for (var i=0, cnt = format.parts.length; i < cnt; i++) {
925
+ var fparts = format.parts.slice();
926
+ // Remove noop parts
927
+ if (parts.length != fparts.length) {
928
+ fparts = $(fparts).filter(function(i,p){
929
+ return $.inArray(p, setters_order) !== -1;
930
+ }).toArray();
931
+ }
932
+ // Process remainder
933
+ if (parts.length == fparts.length) {
934
+ for (var i=0, cnt = fparts.length; i < cnt; i++) {
848
935
  val = parseInt(parts[i], 10);
849
- part = format.parts[i];
936
+ part = fparts[i];
850
937
  if (isNaN(val)) {
851
938
  switch(part) {
852
939
  case 'MM':
@@ -872,7 +959,7 @@
872
959
  for (var i=0, s; i<setters_order.length; i++){
873
960
  s = setters_order[i];
874
961
  if (s in parsed && !isNaN(parsed[s]))
875
- setters_map[s](date, parsed[s])
962
+ setters_map[s](date, parsed[s]);
876
963
  }
877
964
  }
878
965
  return date;
@@ -880,6 +967,8 @@
880
967
  formatDate: function(date, format, language){
881
968
  var val = {
882
969
  d: date.getUTCDate(),
970
+ D: dates[language].daysShort[date.getUTCDay()],
971
+ DD: dates[language].days[date.getUTCDay()],
883
972
  m: date.getUTCMonth() + 1,
884
973
  M: dates[language].monthsShort[date.getUTCMonth()],
885
974
  MM: dates[language].months[date.getUTCMonth()],
@@ -892,7 +981,7 @@
892
981
  seps = $.extend([], format.separators);
893
982
  for (var i=0, cnt = format.parts.length; i < cnt; i++) {
894
983
  if (seps.length)
895
- date.push(seps.shift())
984
+ date.push(seps.shift());
896
985
  date.push(val[format.parts[i]]);
897
986
  }
898
987
  return date.join('');
@@ -931,6 +1020,6 @@
931
1020
  '</div>'+
932
1021
  '</div>';
933
1022
 
934
- $.fn.datepicker.DPGlobal = DPGlobal;
1023
+ $.fn.datepicker.DPGlobal = DPGlobal;
935
1024
 
936
1025
  }( window.jQuery );
@@ -9,10 +9,10 @@
9
9
  */
10
10
  .datepicker {
11
11
  padding: 4px;
12
- margin-top: 1px;
13
12
  -webkit-border-radius: 4px;
14
13
  -moz-border-radius: 4px;
15
14
  border-radius: 4px;
15
+ direction: ltr;
16
16
  /*.dow {
17
17
  border-top: 1px solid #ddd !important;
18
18
  }*/
@@ -21,6 +21,12 @@
21
21
  .datepicker-inline {
22
22
  width: 220px;
23
23
  }
24
+ .datepicker.datepicker-rtl {
25
+ direction: rtl;
26
+ }
27
+ .datepicker.datepicker-rtl table tr td span {
28
+ float: right;
29
+ }
24
30
  .datepicker-dropdown {
25
31
  top: 0;
26
32
  left: 0;
@@ -105,6 +111,7 @@
105
111
  border-color: #fdf59a #fdf59a #fbed50;
106
112
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
107
113
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
114
+ color: #000 !important;
108
115
  }
109
116
  .datepicker table tr td.today:hover,
110
117
  .datepicker table tr td.today:hover:hover,
@@ -275,6 +282,16 @@
275
282
  .datepicker tfoot tr:first-child th:hover {
276
283
  background: #eeeeee;
277
284
  }
285
+ .datepicker .cw {
286
+ font-size: 10px;
287
+ width: 12px;
288
+ padding: 0 2px 0 5px;
289
+ vertical-align: middle;
290
+ }
291
+ .datepicker thead tr:first-child th.cw {
292
+ cursor: default;
293
+ background-color: transparent;
294
+ }
278
295
  .input-append.date .add-on i,
279
296
  .input-prepend.date .add-on i {
280
297
  display: block;
File without changes
@@ -1,6 +1,6 @@
1
1
  module BootstrapRailsEngine
2
2
  module Rails
3
- VERSION = "1.2.9"
3
+ VERSION = "1.3.0"
4
4
  TWITTER_BOOTSTRAP = "2.3"
5
5
  end
6
6
  end
@@ -4,10 +4,10 @@ module BootstrapRailsEngine
4
4
 
5
5
  CDNS = {
6
6
  :bootstrap_js => {
7
- :default => "//netdna.bootstrapcdn.com/twitter-bootstrap/2.3/js/bootstrap.min.js"
7
+ :default => "//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/js/bootstrap.min.js"
8
8
  },
9
9
  :bootstrap_css => {
10
- :default => "//netdna.bootstrapcdn.com/twitter-bootstrap/2.3/css/bootstrap-combined.min.css"
10
+ :default => "//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css"
11
11
  },
12
12
  }
13
13
 
@@ -29,10 +29,11 @@ module BootstrapRailsEngine
29
29
  else
30
30
  # Bootstrap do not offer way to check existing
31
31
  [ javascript_include_tag(bootstrap_javascript_url(name, options)),
32
+ javascript_tag("typeof $().carousel == 'function' || document.write(unescape('#{javascript_include_tag('bootstrap/bootstrap').gsub('<','%3C')}'))")
32
33
  ].join("\n").html_safe
33
34
  end
34
35
  end
35
-
36
+
36
37
  def bootstrap_stylesheet_include_tag(name, options = {})
37
38
  if OFFLINE and !options[:force]
38
39
  return stylesheet_link_tag('bootstrap/bootstrap')
data.tar.gz.sig CHANGED
@@ -1 +1,2 @@
1
- Q?}�됛|��X�<�?;��;����Giw�\�%�/�ù�}����`�H��+�ȉ
1
+ ���3�em�qb�}%�sop8M_:��t\AW��zc����:��� 71�K]1�Lk��
2
+ ��xk,j�����
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap-rails-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,7 +36,7 @@ cert_chain:
36
36
  M0lBc1Z2QzJZa0d3SjA5cUZWM1dRV1daU1NYUkp5ajUKMER3VStLZlV0YTRI
37
37
  V1JyK2psKzRrWWVpVUtnYW1kdjJwUTRWYUo4M1ZHQzNGSXBVazlUVUxDTTN2
38
38
  NWlIYkRRdQpvWnNXQ1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
39
- date: 2013-02-19 00:00:00.000000000 Z
39
+ date: 2013-02-25 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: railties
@@ -98,20 +98,20 @@ files:
98
98
  - LICENSE
99
99
  - README.md
100
100
  - Rakefile
101
+ - app/assets/images/bootstrap/glyphicons-halflings-white.png
102
+ - app/assets/images/bootstrap/glyphicons-halflings.png
103
+ - app/assets/javascripts/bootstrap/bootstrap-datepicker.js
104
+ - app/assets/javascripts/bootstrap/bootstrap.js
105
+ - app/assets/javascripts/bootstrap/bootstrap.min.js
106
+ - app/assets/stylesheets/bootstrap/bootstrap-datepicker.css
107
+ - app/assets/stylesheets/bootstrap/bootstrap-responsive.css
108
+ - app/assets/stylesheets/bootstrap/bootstrap-responsive.min.css
109
+ - app/assets/stylesheets/bootstrap/bootstrap.css
110
+ - app/assets/stylesheets/bootstrap/bootstrap.min.css
101
111
  - bootstrap-rails-engine.gemspec
102
112
  - gem-public_cert.pem
103
113
  - lib/bootstrap-rails-engine.rb
104
114
  - lib/bootstrap-rails-engine/version.rb
105
- - vendor/assets/images/bootstrap/glyphicons-halflings-white.png
106
- - vendor/assets/images/bootstrap/glyphicons-halflings.png
107
- - vendor/assets/javascripts/bootstrap/bootstrap-datepicker.js
108
- - vendor/assets/javascripts/bootstrap/bootstrap.js
109
- - vendor/assets/javascripts/bootstrap/bootstrap.min.js
110
- - vendor/assets/stylesheets/bootstrap/bootstrap-datepicker.css
111
- - vendor/assets/stylesheets/bootstrap/bootstrap-responsive.css
112
- - vendor/assets/stylesheets/bootstrap/bootstrap-responsive.min.css
113
- - vendor/assets/stylesheets/bootstrap/bootstrap.css
114
- - vendor/assets/stylesheets/bootstrap/bootstrap.min.css
115
115
  homepage: https://github.com/yjchen/bootstrap-rails-engine
116
116
  licenses: []
117
117
  post_install_message:
metadata.gz.sig CHANGED
Binary file