bootstrap-rails-engine 1.2.9 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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