Skip to content

Commit

Permalink
Merge pull request #18 from yrimal/master
Browse files Browse the repository at this point in the history
Fix issue #17
  • Loading branch information
1yuv authored Jan 10, 2023
2 parents 5156c72 + 88f2eb1 commit c730b32
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 130 deletions.
239 changes: 119 additions & 120 deletions bootstrap/dist/bikram-sambat-bs.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,118 @@
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
var toDevanagari = require('eurodigit/src/to_non_euro').devanagari;
var MS_PER_DAY = 86400000;
var MONTH_NAMES = ['बैशाख', 'जेठ', 'असार', 'साउन', 'भदौ', 'असोज', 'कार्तिक', 'मंसिर', 'पौष', 'माघ', 'फाल्गुन', 'चैत'];

// ------ TO UPDATE THESE HARDCODED VALUES USE /scripts/encode-days-in-month.js
// We have defined our own Epoch for Bikram Sambat: 1970-1-1 BS or 1913-4-13 AD
var BS_EPOCH_TS = -1789990200000; // = Date.parse('1913-4-13')
var BS_YEAR_ZERO = 1970;
var ENCODED_MONTH_LENGTHS = [
5315258,5314490,9459438,8673005,5315258,5315066,9459438,8673005,5315258,5314298,9459438,5327594,5315258,5314298,9459438,5327594,5315258,5314286,9459438,5315306,5315258,5314286,8673006,5315306,5315258,5265134,8673006,5315258,5315258,9459438,8673005,5315258,5314298,9459438,8673005,5315258,5314298,9459438,8473322,5315258,5314298,9459438,5327594,5315258,5314298,9459438,5327594,5315258,5314286,8673006,5315306,5315258,5265134,8673006,5315306,5315258,9459438,8673005,5315258,5314490,9459438,8673005,5315258,5314298,9459438,8473325,5315258,5314298,9459438,5327594,5315258,5314298,9459438,5327594,5315258,5314286,9459438,5315306,5315258,5265134,8673006,5315306,5315258,5265134,8673006,5315258,5314490,9459438,8673005,5315258,5314298,9459438,8669933,5315258,5314298,9459438,8473322,5315258,5314298,9459438,5327594,5315258,5314286,9459438,5315306,5315258,5265134,8673006,5315306,5315258,5265134,5527290,5527277,5527226,5527226,5528046,5527277,5528250,5528057,5527277,5527277
];

// TODO ENCODED_MONTH_LENGTHS would be stored more efficiently converted to a string using
// String.fromCharCode.apply(String, ENCODED_MONTH_LENGTHS), and extracted using
// ENC_MTH.charCodeAt(...). However, JS seems to do something weird with the
// top bits.

/**
* Magic numbers:
* BS_YEAR_ZERO <- the first year (BS) encoded in ENCODED_MONTH_LENGTHS
* month #5 <- this is the only month which has a day variation of more than 1
* & 3 <- this is a 2 bit mask, i.e. 0...011
*/
function daysInMonth(year, month) {
if(month < 1 || month > 12) throw new Error('Invalid month value ' + month);
var delta = ENCODED_MONTH_LENGTHS[year - BS_YEAR_ZERO];
if(typeof delta === 'undefined') throw new Error('No data for year: ' + year + ' BS');
return 29 + ((delta >>>
(((month-1) << 1))) & 3);
}

function zPad(x) { return x > 9 ? x : '0' + x; }

function toBik(greg) {
// TODO do not use Date.parse(), as per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
var m, dM, year = BS_YEAR_ZERO,
days = Math.floor((Date.parse(greg) - BS_EPOCH_TS) / MS_PER_DAY) + 1;

while(days > 0) {
for(m=1; m<=12; ++m) {
dM = daysInMonth(year, m);
if(days <= dM) return { year:year, month:m, day:days };
days -= dM;
}
++year;
}

throw new Error('Date outside supported range: ' + greg + ' AD');
}

function toBik_euro(greg) {
var d = toBik(greg);
return d.year + '-' + zPad(d.month) + '-' + zPad(d.day);
}

function toBik_dev(greg) {
return toDevanagari(toBik_euro(greg));
}

function toBik_text(greg) {
var d = toBik(greg);
return toDevanagari(d.day) + ' ' + MONTH_NAMES[d.month-1] + ' ' + toDevanagari(d.year);
}

function toGreg(year, month, day) {
// TODO month bounds-checking should be handled in daysInMonth()
if(month < 1) throw new Error('Invalid month value ' + month);
if(year < BS_YEAR_ZERO) throw new Error('Invalid year value ' + year);
if(day < 1 || day > daysInMonth(year, month)) throw new Error('Invalid day value', day);

var timestamp = BS_EPOCH_TS + (MS_PER_DAY * day);
month--;

while (year >= BS_YEAR_ZERO) {
while (month > 0) {
timestamp += (MS_PER_DAY * daysInMonth(year, month));
month--;
}
month = 12;
year--;
}

var d = new Date(timestamp);
return {
year: d.getUTCFullYear(),
month: 1+d.getUTCMonth(),
day: d.getUTCDate()
};
}

function toGreg_text(year, month, day) {
var d = toGreg(year, month, day);
return d.year + '-' + zPad(d.month) + '-' + zPad(d.day);
}

module.exports = {
daysInMonth: daysInMonth,
toBik: toBik,
toBik_dev: toBik_dev,
toBik_euro: toBik_euro,
toBik_text: toBik_text,
toGreg: toGreg,
toGreg_text: toGreg_text
};

},{"eurodigit/src/to_non_euro":5}],2:[function(require,module,exports){
"use strict";
module.exports = {
to_euro: require('./to_euro'),
to_int: require('./to_int'),
to_non_euro: require('./to_non_euro')
};

},{"./to_euro":2,"./to_int":3,"./to_non_euro":4}],2:[function(require,module,exports){
},{"./to_euro":3,"./to_int":4,"./to_non_euro":5}],3:[function(require,module,exports){
'use strict';

function replacer(c) {
Expand All @@ -20,14 +126,14 @@ module.exports = function(original) {
return original && original.toString().replace(/[٠-٩۰-۹०-९]/g, replacer);
};

},{}],3:[function(require,module,exports){
},{}],4:[function(require,module,exports){
var to_euro = require('./to_euro');

module.exports = function(s) {
return Number.parseInt(to_euro(s));
return parseInt(to_euro(s), 10);
};

},{"./to_euro":2}],4:[function(require,module,exports){
},{"./to_euro":3}],5:[function(require,module,exports){
'use strict';

function from(base) {
Expand All @@ -43,7 +149,7 @@ module.exports = {
perso_arabic: from(1776)
};

},{}],5:[function(require,module,exports){
},{}],6:[function(require,module,exports){
var bs = require('bikram-sambat');
var eurodig = require('eurodigit');
var from_dev = eurodig.to_int;
Expand All @@ -67,7 +173,7 @@ function initListeners($parent, dateInputSelecter) {
.on('change blur', function() {
var $this = $(this);
var $inputGroup = $this.parents('.bikram-sambat-input-group');
updateBackingDateInput($inputGroup, dateInputSelecter);
updateConvertedDate($inputGroup, dateInputSelecter);
})
;

Expand All @@ -78,7 +184,7 @@ function initListeners($parent, dateInputSelecter) {
setVal($inputGroup, 'month', 1+$this.parent('li').index());
$this.parents('.input-group-btn').find('.dropdown-toggle').html($this.text() + ' <span class="caret"></span>');

updateBackingDateInput($inputGroup, dateInputSelecter);
updateConvertedDate($inputGroup, dateInputSelecter);
});
}

Expand All @@ -92,15 +198,16 @@ function setVal($parent, name, val) {
$parent.find('[name='+name+']').val(to_dev(val));
}
function setDropdown($parent, name, val) {
var $input = $parent.find('[name='+name+']')
var $input = $parent.find('[name='+name+']');
$input.parents('.bikram-sambat-input-group')
.find('.dropdown-menu li a')
.eq(val - 1)
.click();
}
function updateBackingDateInput($inputGroup, dateInputSelecter) {

function updateConvertedDate($inputGroup, dateInputSelecter) {
var greg = getDate_greg_text($inputGroup);
if(greg) $(dateInputSelecter).val(greg);
$(dateInputSelecter).val(greg).trigger('change');
}

//> EXPORTED FUNCTIONS
Expand Down Expand Up @@ -138,112 +245,4 @@ function getDate_greg_text($inputGroup) {
}
}

},{"bikram-sambat":7,"eurodigit":1}],6:[function(require,module,exports){
arguments[4][4][0].apply(exports,arguments)
},{"dup":4}],7:[function(require,module,exports){
var toDevanagari = require('eurodigit/src/to_non_euro').devanagari;

var MS_PER_DAY = 86400000;

// We have defined our own Epoch for Bikram Sambat: 1-1-2007 BS / 13-4-1950 AD
var BS_EPOCH_TS = -622359900000; // = Date.parse('1950-4-13')
var BS_YEAR_ZERO = 2007;

// TODO this would be stored more efficiently converted to a string using
// String.fromCharCode.apply(String, ENCODED_MONTH_LENGTHS), and extracted using
// ENC_MTH.charCodeAt(...). However, JS seems to do something weird with the
// top bits.
var ENCODED_MONTH_LENGTHS = [
8673005,5315258,5314298,9459438,8673005,5315258,5314298,9459438,8473322,5315258,5314298,9459438,5327594,5315258,5314298,9459438,5327594,5315258,5314286,8673006,5315306,5315258,5265134,8673006,5315306,5315258,9459438,8673005,5315258,5314490,9459438,8673005,5315258,5314298,9459438,8473325,5315258,5314298,9459438,5327594,5315258,5314298,9459438,5327594,5315258,5314286,9459438,5315306,5315258,5265134,8673006,5315306,5315258,5265134,8673006,5315258,5314490,9459438,8673005,5315258,5314298,9459438,8669933,5315258,5314298,9459438,8473322,5315258,5314298,9459438,5327594,5315258,5314286,9459438,5315306,5315258,5265134,8673006,5315306,5315258,5265134,5527290,5527277,5527226,5527226,5528046,5527277,5528250,5528057,5527277,5527277
],
MONTH_NAMES = ['बैशाख', 'जेठ', 'असार', 'साउन', 'भदौ', 'असोज', 'कार्तिक', 'मंसिर', 'पौष', 'माघ', 'फाल्गुन', 'चैत'];

/**
* Magic numbers:
* 2000 <- the first year (BS) encoded in ENCODED_MONTH_LENGTHS
* month #5 <- this is the only month which has a day variation of more than 1
* & 3 <- this is a 2 bit mask, i.e. 0...011
*/
function daysInMonth(year, month) {
// TODO why does this accept 0?
if(month < 0 || month > 12) throw new Error('Invalid month value ' + month);
var delta = ENCODED_MONTH_LENGTHS[year - 2000];
if(typeof delta === 'undefined') throw new Error('No data for year: ' + year + ' BS');
return 29 + ((delta >>>
(((month-1) << 1))) & 3);
}

function zPad(x) { return x > 9 ? x : '0' + x; }

function toBik(greg) {
// TODO do not use Date.parse(), as per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
var m, dM, year = BS_YEAR_ZERO,
days = Math.floor((Date.parse(greg) - BS_EPOCH_TS) / MS_PER_DAY) + 1;

while(days > 0) {
for(m=1; m<=12; ++m) {
dM = daysInMonth(year, m);
if(days <= dM) return { year:year, month:m, day:days };
days -= dM;
}
++year;
}

throw new Error('Date outside supported range: ' + greg + ' AD');
}

function toBik_euro(greg) {
var d = toBik(greg);
return d.year + '-' + zPad(d.month) + '-' + zPad(d.day);
}

function toBik_dev(greg) {
return toDevanagari(toBik_euro(greg));
}

function toBik_text(greg) {
var d = toBik(greg);
return toDevanagari(d.day) + ' ' + MONTH_NAMES[d.month-1] + ' ' + toDevanagari(d.year);
}

function toGreg(year, month, day) {
// TODO month bounds-checking should be handled in daysInMonth()
if(month < 1) throw new Error('Invalid month value ' + month);
if(year < BS_YEAR_ZERO) throw new Error('Invalid year value ' + year);
if(day < 1 || day > daysInMonth(year, month)) throw new Error('Invalid day value', day);

var timestamp = BS_EPOCH_TS;
while(year >= BS_YEAR_ZERO) {
while(month >= 1) {
while(--day >= 0) {
timestamp += MS_PER_DAY;
}
day = daysInMonth(year, --month);
}
day = daysInMonth(--year, month = 12);
}

var d = new Date(timestamp);
return {
year: d.getUTCFullYear(),
month: 1+d.getUTCMonth(),
day: d.getUTCDate()
};
}

function toGreg_text(year, month, day) {
var d = toGreg(year, month, day);
return d.year + '-' + zPad(d.month) + '-' + zPad(d.day);
}

module.exports = {
daysInMonth: daysInMonth,
toBik: toBik,
toBik_dev: toBik_dev,
toBik_euro: toBik_euro,
toBik_text: toBik_text,
toGreg: toGreg,
toGreg_text: toGreg_text
};

},{"eurodigit/src/to_non_euro":6}]},{},[5]);
},{"bikram-sambat":1,"eurodigit":2}]},{},[6]);
8 changes: 4 additions & 4 deletions bootstrap/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions bootstrap/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bikram-sambat-bootstrap",
"version": "1.5.0",
"version": "1.6.0",
"description": "bikram sambat datepicker for bootstrap",
"main": "src/bikram-sambat-bootstrap.js",
"scripts": {
Expand All @@ -24,7 +24,7 @@
"jshint": "^2.9.5"
},
"dependencies": {
"bikram-sambat": "^1.6.0",
"bikram-sambat": "^1.7.0",
"eurodigit": "^3.1.1"
}
}
9 changes: 5 additions & 4 deletions bootstrap/src/bikram-sambat-bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function initListeners($parent, dateInputSelecter) {
.on('change blur', function() {
var $this = $(this);
var $inputGroup = $this.parents('.bikram-sambat-input-group');
updateBackingDateInput($inputGroup, dateInputSelecter);
updateConvertedDate($inputGroup, dateInputSelecter);
})
;

Expand All @@ -32,7 +32,7 @@ function initListeners($parent, dateInputSelecter) {
setVal($inputGroup, 'month', 1+$this.parent('li').index());
$this.parents('.input-group-btn').find('.dropdown-toggle').html($this.text() + ' <span class="caret"></span>');

updateBackingDateInput($inputGroup, dateInputSelecter);
updateConvertedDate($inputGroup, dateInputSelecter);
});
}

Expand All @@ -52,9 +52,10 @@ function setDropdown($parent, name, val) {
.eq(val - 1)
.click();
}
function updateBackingDateInput($inputGroup, dateInputSelecter) {

function updateConvertedDate($inputGroup, dateInputSelecter) {
var greg = getDate_greg_text($inputGroup);
if(greg) $(dateInputSelecter).val(greg).trigger('change');
$(dateInputSelecter).val(greg).trigger('change');
}

//> EXPORTED FUNCTIONS
Expand Down

0 comments on commit c730b32

Please sign in to comment.