From b34326c020cd36d4496f8243c30da1e47447be6e Mon Sep 17 00:00:00 2001 From: yrimal Date: Mon, 9 Jan 2023 17:33:33 -0500 Subject: [PATCH 1/3] Fix for issue #17 throwing an error --- bootstrap/dist/bikram-sambat-bs.js | 239 +++++++++++------------ bootstrap/src/bikram-sambat-bootstrap.js | 9 +- 2 files changed, 124 insertions(+), 124 deletions(-) diff --git a/bootstrap/dist/bikram-sambat-bs.js b/bootstrap/dist/bikram-sambat-bs.js index 81bfe4d..470a021 100644 --- a/bootstrap/dist/bikram-sambat-bs.js +++ b/bootstrap/dist/bikram-sambat-bs.js @@ -1,4 +1,110 @@ -(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 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'), @@ -6,7 +112,7 @@ module.exports = { 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) { @@ -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) { @@ -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; @@ -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); }) ; @@ -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() + ' '); - updateBackingDateInput($inputGroup, dateInputSelecter); + updateConvertedDate($inputGroup, dateInputSelecter); }); } @@ -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 @@ -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]); diff --git a/bootstrap/src/bikram-sambat-bootstrap.js b/bootstrap/src/bikram-sambat-bootstrap.js index 0452735..303b136 100644 --- a/bootstrap/src/bikram-sambat-bootstrap.js +++ b/bootstrap/src/bikram-sambat-bootstrap.js @@ -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); }) ; @@ -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() + ' '); - updateBackingDateInput($inputGroup, dateInputSelecter); + updateConvertedDate($inputGroup, dateInputSelecter); }); } @@ -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 From ff52d40fe6d304c9b7ee94f5665201aee0dfe68a Mon Sep 17 00:00:00 2001 From: yrimal Date: Tue, 10 Jan 2023 08:42:58 -0500 Subject: [PATCH 2/3] bump version to 1.6 --- bootstrap/package-lock.json | 2 +- bootstrap/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap/package-lock.json b/bootstrap/package-lock.json index 877ce73..7deab3f 100644 --- a/bootstrap/package-lock.json +++ b/bootstrap/package-lock.json @@ -1,6 +1,6 @@ { "name": "bikram-sambat-bootstrap", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/bootstrap/package.json b/bootstrap/package.json index 0d5f35f..f9c4426 100644 --- a/bootstrap/package.json +++ b/bootstrap/package.json @@ -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": { From 88f2eb1cefc23c0549713c98539f8abd061360c9 Mon Sep 17 00:00:00 2001 From: yrimal Date: Tue, 10 Jan 2023 10:03:10 -0500 Subject: [PATCH 3/3] Update bs library used to 1.7 --- bootstrap/package-lock.json | 6 +++--- bootstrap/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bootstrap/package-lock.json b/bootstrap/package-lock.json index 7deab3f..5697f35 100644 --- a/bootstrap/package-lock.json +++ b/bootstrap/package-lock.json @@ -118,9 +118,9 @@ "dev": true }, "bikram-sambat": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/bikram-sambat/-/bikram-sambat-1.6.0.tgz", - "integrity": "sha512-jYHI/6obamcWpf8+vfbidSz7L3AUHAnHU/P9UIH7PdduECxnJ8JCKxdO7UpPTTr/1l4XMj0+uQ/AAPz5C7VM8Q==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/bikram-sambat/-/bikram-sambat-1.7.0.tgz", + "integrity": "sha512-wcFkKw+wruQhlTEy5km5t38mVYIeO1t9fjGGnfXoHfDxh0VLDouKjHVhlfvQbZIT5CNoWMymA2v4WEWMcL+Rvw==", "requires": { "eurodigit": "^3.1.3" } diff --git a/bootstrap/package.json b/bootstrap/package.json index f9c4426..b43cd52 100644 --- a/bootstrap/package.json +++ b/bootstrap/package.json @@ -24,7 +24,7 @@ "jshint": "^2.9.5" }, "dependencies": { - "bikram-sambat": "^1.6.0", + "bikram-sambat": "^1.7.0", "eurodigit": "^3.1.1" } }