Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

bulma-extensions

Package Overview
Dependencies
Maintainers
1
Versions
112
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bulma-extensions - npm Package Compare versions

Comparing version 0.7.1 to 0.7.2

514

bulma-calendar/datepicker.js

@@ -73,20 +73,34 @@ var datepicker_langs = {

weekdaysShort: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub']
},
'zh-cn': {
weekStart: 1,
previousMonth: '上个月',
nextMonth: '下个月',
months: ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
monthsShort: ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
weekdays: ['星期天', '星期一','星期二','星期三','星期四','星期五','星期六'],
weekdaysShort: ['周日', '周一','周二','周三','周四','周五','周六']
}
}
const MOUSE_EVENTS = ['click', 'touchstart'];
class DatePicker {
constructor(selector, options) {
if (!options) options = {}
constructor(selector, options = {}) {
// Determine click event depending on if we are on Touch device or not
this._clickEvent = ('ontouchstart' in window) ? 'touchstart' : 'click';
var defaultOptions = {
this.element = typeof selector === 'string' ? document.querySelector(selector) : selector;
// An invalid selector or non-DOM node has been provided.
if (!this.element) {
throw new Error('An invalid selector or non-DOM node has been provided.');
}
/// Set default options and merge with instance defined
this.options = Object.assign({}, {
startDate: new Date(),
// the default data format `field` value
dataFormat: 'yyyy/mm/dd',
// internationalization
lang: 'en',
dataFormat: 'yyyy/mm/dd', // the default data format `field` value
lang: 'en', // internationalization
overlay: false,
closeOnOverlayClick: true,
closeOnSelect: true,
// callback function
// callback functions
onSelect: null,

@@ -96,16 +110,17 @@ onOpen: null,

onRender: null
};
}, options);
this.element = typeof selector === 'string' ? document.querySelector(selector) : selector;
// An invalid selector or non-DOM node has been provided.
if (!this.element) {
throw new Error('An invalid selector or non-DOM node has been provided.');
}
// Initiate plugin
this._init();
}
this.parent = this.element.parentElement;
/**
* Initiate plugin instance
* @method _init
* @return {DatePicker} Current plugin instance
*/
_init() {
// this.parent = this.element.parentElement;
this._id = 'datePicker' + ( new Date() ).getTime();
this.lang = typeof datepicker_langs[this.lang] !== 'undefined' ? this.lang : 'en';
this.options = Object.assign({}, defaultOptions, options);
this.month = this.options.startDate.getMonth(),

@@ -115,76 +130,146 @@ this.year = this.options.startDate.getFullYear(),

this.build();
this._build();
this._bindEvents();
return this;
}
build() {
var _this = this;
/**
* Build DatePicker HTML component and append it to the DOM
* @method _build
* @return {DatePicker} Current plugin instance
*/
_build() {
// Define DatePicker Template
const datePicker = `
<div id='${this._id}' class="datepicker ${this.options.overlay ? 'modal' : ''}">
${this.options.overlay ? '<div class="modal-background"></div>' : ''}
<div class="calendar">
<div class="calendar-nav">
<div class="calendar-nav-previous-year">
<button class="button is-small is-text">
<i class="fa fa-chevron-left"></i>
</button>
</div>
<div class="calendar-nav-previous-month">
<button class="button is-small is-text">
<i class="fa fa-chevron-left"></i>
</button>
</div>
<div class="calendar-month">${datepicker_langs[this.options.lang].months[this.month] + ' ' + this.year}</div>
<div class="calendar-nav-next-month">
<button class="button is-small is-text">
<i class="fa fa-chevron-right"></i>
</button>
</div>
<div class="calendar-nav-next-year">
<button class="button is-small is-text">
<i class="fa fa-chevron-right"></i>
</button>
</div>
</div>
<div class="calendar-container">
<div class="calendar-header">
<div class="calendar-date">${this._getDayName(0, true)}</div>
<div class="calendar-date">${this._getDayName(1, true)}</div>
<div class="calendar-date">${this._getDayName(2, true)}</div>
<div class="calendar-date">${this._getDayName(3, true)}</div>
<div class="calendar-date">${this._getDayName(4, true)}</div>
<div class="calendar-date">${this._getDayName(5, true)}</div>
<div class="calendar-date">${this._getDayName(6, true)}</div>
</div>
<div class="calendar-body"></div>
</div>
</div>
</div>
`;
this.datePickerContainer = document.createElement('div');
this.datePickerContainer.id = 'datePicker' + ( new Date ).getTime();
// Add datepicker HTML element to Document Body
document.body.insertAdjacentHTML('beforeend', datePicker);
// Save pointer to each DatePicker element for later use
this.datePickerContainer = document.getElementById(this._id);
this.datePickerCalendar = this.datePickerContainer.querySelector('.calendar');
if (this.options.overlay) {
this.datePickerContainer.classList.add('modal');
this.datePickerOverlay = this.datePickerContainer.querySelector('.modal-background');
this.datePickerCloseButton = this.datePickerContainer.querySelector('.modal-close');
}
this.datePickerContainer.classList.add('datepicker');
this.datePickerCalendarNav = this.datePickerCalendar.querySelector('.calendar-nav');
this.datePickerCalendarNavMonth = this.datePickerCalendar.querySelector('.calendar-month');
this.datePickerCalendarNavPreviousMonth = this.datePickerCalendarNav.querySelector('.calendar-nav-previous-month');
this.datePickerCalendarNavNextMonth = this.datePickerCalendarNav.querySelector('.calendar-nav-next-month');
this.datePickerCalendarNavPreviousYear = this.datePickerCalendarNav.querySelector('.calendar-nav-previous-year');
this.datePickerCalendarNavNextYear = this.datePickerCalendarNav.querySelector('.calendar-nav-next-year');
this.datePickerCalendarHeader = this.datePickerCalendar.querySelector('.calendar-header');
this.datePickerCalendarBody = this.datePickerCalendar.querySelector('.calendar-body');
this._renderDays();
}
this.calendarContainer = document.createElement('div');
this.calendarContainer.id = 'datePicker' + ( new Date ).getTime();
this.calendarContainer.classList.add('calendar');
this.renderCalendar();
/**
* Bind all events
* @method _bindEvents
* @return {void}
*/
_bindEvents() {
var _this = this;
// Bind event to element in order to display/hide DatePicker on click
this.element.addEventListener(this._clickEvent, function (e) {
e.preventDefault();
if (_this.open) {
_this.hide();
} else {
_this.show();
}
});
if (this.options.overlay) {
var datePickerOverlay = document.createElement('div');
datePickerOverlay.classList.add('modal-background');
this.datePickerContainer.appendChild(datePickerOverlay);
// Bind close event on Close button
if (this.datePickerCloseButton) {
this.datePickerCloseButton.addEventListener(this._clickEvent, function(e) {
e.preventDefault();
_this.hide();
});
}
// Bind close event on overlay based on options
if (this.options.closeOnOverlayClick) {
this.datePickerOverlay.addEventListener(this._clickEvent, function(e) {
e.preventDefault();
_this.hide();
});
}
}
var modalClose = document.createElement('button');
modalClose.className = 'modal-close';
MOUSE_EVENTS.forEach((event) => {
modalClose.addEventListener(event, function(e) {
e.preventDefault();
_this.datePickerContainer.classList.remove('is-active');
});
// Bind year navigation events
this.datePickerCalendarNavPreviousYear.addEventListener(this._clickEvent, function (e) {
e.preventDefault();
_this.prevYear();
});
this.datePickerCalendarNavNextYear.addEventListener(this._clickEvent, function (e) {
e.preventDefault();
_this.nextYear();
});
this.datePickerContainer.appendChild(this.calendarContainer);
this.datePickerContainer.appendChild(modalClose);
document.body.appendChild(this.datePickerContainer);
MOUSE_EVENTS.forEach((event) => {
this.element.addEventListener(event, function (e) {
e.preventDefault();
if (_this.open) {
_this.hide();
_this.open = false;
} else {
_this.show();
_this.open = true;
}
});
// Bind month navigation events
this.datePickerCalendarNavPreviousMonth.addEventListener(this._clickEvent, function (e) {
e.preventDefault();
_this.prevMonth();
});
this.datePickerCalendarNavNextMonth.addEventListener(this._clickEvent, function (e) {
e.preventDefault();
_this.nextMonth();
});
}
/**
* templating functions to abstract HTML rendering
* Bind events on each Day item
* @method _bindDaysEvents
* @return {void}
*/
renderDayName(day, abbr = false) {
day += datepicker_langs[this.options.lang].weekStart;
while (day >= 7) {
day -= 7;
}
return abbr ? datepicker_langs[this.options.lang].weekdaysShort[day] : datepicker_langs[this.options.lang].weekdays[day];
}
renderDay(day, month, year, isSelected, isToday, isDisabled, isEmpty, isBetween, isSelectedIn, isSelectedOut) {
_bindDaysEvents() {
var _this = this;
var newDayContainer = document.createElement('div');
var newDayButton = document.createElement('button');
newDayButton.classList.add('date-item');
newDayButton.innerHTML = day;
MOUSE_EVENTS.forEach((event) => {
newDayButton.addEventListener(event, function (e) {
[].forEach.call(this.datePickerCalendarDays, (calendarDay) => {
calendarDay.addEventListener(this._clickEvent, function(e) {
e.preventDefault();
if (typeof _this.options.onSelect != 'undefined' &&

@@ -195,3 +280,4 @@ _this.options.onSelect != null &&

}
_this.element.value = _this.getFormatedDate(( new Date(year, month, day) ), _this.options.dataFormat);
let date = this.dataset.date.split('/');
_this.element.value = _this.getFormatedDate(( new Date(date[0], date[1], date[2]) ), _this.options.dataFormat);
if (_this.options.closeOnSelect) {

@@ -202,146 +288,36 @@ _this.hide();

});
newDayContainer.classList.add('calendar-date');
newDayContainer.appendChild(newDayButton);
if (isDisabled) {
newDayContainer.setAttribute('disabled', 'disabled');
}
if (isToday) {
newDayContainer.classList.add('is-today');
}
if (isSelected) {
newDayContainer.classList.add('is-active');
}
if (isBetween) {
newDayContainer.classList.add('calendar-range');
}
if (isSelectedIn) {
newDayContainer.classList.add('range-start');
}
if (isSelectedOut) {
newDayContainer.classList.add('range-end');
}
return newDayContainer;
}
renderNav(year, month) {
var _this = this;
var calendarNav = document.createElement('div');
calendarNav.classList.add('calendar-nav');
var previousButtonContainer = document.createElement('div');
previousButtonContainer.classList.add('calendar-nav-left');
this.previousYearButton = document.createElement('div');
this.previousYearButton.classList.add('button');
this.previousYearButton.classList.add('is-text');
var previousButtonIcon = document.createElement('i');
previousButtonIcon.classList.add('fa');
previousButtonIcon.classList.add('fa-backward');
this.previousYearButton.appendChild(previousButtonIcon);
MOUSE_EVENTS.forEach((event) => {
this.previousYearButton.addEventListener(event, function (e) {
e.preventDefault();
_this.prevYear();
});
});
previousButtonContainer.appendChild(this.previousYearButton);
this.previousMonthButton = document.createElement('div');
this.previousMonthButton.classList.add('button');
this.previousMonthButton.classList.add('is-text');
var previousMonthButtonIcon = document.createElement('i');
previousMonthButtonIcon.classList.add('fa');
previousMonthButtonIcon.classList.add('fa-chevron-left');
this.previousMonthButton.appendChild(previousMonthButtonIcon);
MOUSE_EVENTS.forEach((event) => {
this.previousMonthButton.addEventListener(event, function (e) {
e.preventDefault();
_this.prevMonth();
});
});
previousButtonContainer.appendChild(this.previousMonthButton);
var calendarTitle = document.createElement('div');
calendarTitle.innerHTML = datepicker_langs[this.options.lang].months[month] + ' ' + year;
var nextButtonContainer = document.createElement('div');
nextButtonContainer.classList.add('calendar-nav-right');
this.nextMonthButton = document.createElement('div');
this.nextMonthButton.classList.add('button');
this.nextMonthButton.classList.add('is-text');
var nextMonthButtonIcon = document.createElement('i');
nextMonthButtonIcon.classList.add('fa');
nextMonthButtonIcon.classList.add('fa-chevron-right');
this.nextMonthButton.appendChild(nextMonthButtonIcon);
MOUSE_EVENTS.forEach((event) => {
this.nextMonthButton.addEventListener(event, function (e) {
e.preventDefault();
_this.nextMonth();
});
});
nextButtonContainer.appendChild(this.nextMonthButton);
this.nextYearButton = document.createElement('div');
this.nextYearButton.classList.add('button');
this.nextYearButton.classList.add('is-text');
var nextYearButtonIcon = document.createElement('i');
nextYearButtonIcon.classList.add('fa');
nextYearButtonIcon.classList.add('fa-forward');
this.nextYearButton.appendChild(nextYearButtonIcon);
MOUSE_EVENTS.forEach((event) => {
this.nextYearButton.addEventListener('click', function (e) {
e.preventDefault();
_this.nextYear();
});
});
nextButtonContainer.appendChild(this.nextYearButton);
calendarNav.appendChild(previousButtonContainer);
calendarNav.appendChild(calendarTitle);
calendarNav.appendChild(nextButtonContainer);
return calendarNav;
}
renderHeader() {
var calendarHeader = document.createElement('div');
calendarHeader.classList.add('calendar-header');
for (var i = 0; i < 7; i++) {
var newDay = document.createElement('div');
newDay.classList.add('calendar-date');
newDay.innerHTML = this.renderDayName(i, true);
calendarHeader.appendChild(newDay);
/**
* Get localized day name
* @method renderDayName
* @param {[type]} day [description]
* @param {Boolean} [abbr=false] [description]
* @return {[type]} [description]
*/
_getDayName(day, abbr = false) {
day += datepicker_langs[this.options.lang].weekStart;
while (day >= 7) {
day -= 7;
}
return calendarHeader;
return abbr ? datepicker_langs[this.options.lang].weekdaysShort[day] : datepicker_langs[this.options.lang].weekdays[day];
}
renderBody() {
var calendarBody = document.createElement('div');
calendarBody.classList.add('calendar-body');
return calendarBody;
_renderDay(day, month, year, isSelected, isToday, isDisabled, isEmpty, isBetween, isSelectedIn, isSelectedOut) {
return `
<div data-date="${`${year}/${month}/${day}`}" class="calendar-date${isDisabled ? ' is-disabled' : ''}${isBetween ? ' calendar-range' : ''}${isSelectedIn ? ' calendar-range-start' : ''}${isSelectedOut ? ' calendar-range-end' : ''}">
<button class="date-item${isToday ? ' is-today' : ''}${isSelected ? ' is-active' : ''}">${day}</button>
</div>
`;
}
renderCalendar() {
var now = new Date();
_renderDays() {
const now = new Date();
let days = '';
var calendarNav = this.renderNav(this.year, this.month);
var calendarHeader = this.renderHeader();
var calendarBody = this.renderBody();
this.calendarContainer.appendChild(calendarNav);
this.calendarContainer.appendChild(calendarHeader);
this.calendarContainer.appendChild(calendarBody);
var days = this.getDaysInMonth(this.year, this.month),
let numberOfDays = this.getDaysInMonth(this.year, this.month),
before = new Date(this.year, this.month, 1).getDay();
// Call onRender callback if defined
if (typeof this.options.onRender != 'undefined' &&

@@ -353,2 +329,3 @@ this.options.onRender != null &&

// Get start day from options
if (datepicker_langs[this.options.lang].weekStart > 0) {

@@ -361,3 +338,3 @@ before -= datepicker_langs[this.options.lang].weekStart;

var cells = days + before,
let cells = numberOfDays + before,
after = cells;

@@ -375,4 +352,4 @@ while (after > 7) {

isSelectedOut = false,
isToday = this.compareDates(day, now),
isEmpty = i < before || i >= ( days + before ),
isToday = this._compareDates(day, now),
isEmpty = i < before || i >= ( numberOfDays + before ),
isDisabled = false;

@@ -389,30 +366,59 @@

calendarBody.appendChild(this.renderDay(day.getDate(), this.month, this.year, isSelected, isToday, isDisabled, isEmpty, isBetween, isSelectedIn, isSelectedOut));
days += this._renderDay(day.getDate(), this.month, this.year, isSelected, isToday, isDisabled, isEmpty, isBetween, isSelectedIn, isSelectedOut);
}
this.datePickerCalendarBody.insertAdjacentHTML('beforeend', days);
this.datePickerCalendarDays = this.datePickerCalendarBody.querySelectorAll('.calendar-date');
this._bindDaysEvents();
}
/**
* Navigate to the previous month and regenerate calendar
* @method prevMonth
* @return {void}
*/
prevMonth() {
this.month -= 1;
this.adjustCalendar();
this.renderCalendar();
this._renderDays();
}
/**
* Navigate to the next month and regenerate calendar
* @method nextMonth
* @return {}
*/
nextMonth() {
this.month += 1;
this.adjustCalendar();
this.renderCalendar();
this._renderDays();
}
/**
* Navigate to the previous year and regenerate calendar
* @method prevYear
* @return {void}
*/
prevYear() {
this.year -= 1;
this.adjustCalendar();
this.renderCalendar();
this._renderDays();
}
/**
* Navigate to the previous year and regenerate calendar
* @method nextYear
* @return {}
*/
nextYear() {
this.year += 1;
this.adjustCalendar();
this.renderCalendar();
this._renderDays();
}
/**
* Show DatePicker HTML Component
* @method show
* @return {void}
*/
show() {

@@ -431,2 +437,7 @@ if (typeof this.options.onOpen != 'undefined' &&

/**
* Hide DatePicker HTML Component
* @method hide
* @return {void}
*/
hide() {

@@ -451,9 +462,15 @@ this.open = false;

}
this.calendarContainer.innerHTML = '';
this.datePickerCalendarNavMonth.innerHTML = datepicker_langs[this.options.lang].months[this.month] + ' ' + this.year;
this.datePickerCalendarBody.innerHTML = '';
return this;
}
/**
* Recalculate calendar position
* @method adjustPosition
* @return {void}
*/
adjustPosition() {
var width = this.calendarContainer.offsetWidth,
height = this.calendarContainer.offsetHeight,
var width = this.datePickerCalendar.offsetWidth,
height = this.datePickerCalendar.offsetHeight,
viewportWidth = window.innerWidth || document.documentElement.clientWidth,

@@ -477,9 +494,14 @@ viewportHeight = window.innerHeight || document.documentElement.clientHeight,

this.calendarContainer.style.position = 'absolute';
this.calendarContainer.style.left = left + 'px';
this.calendarContainer.style.top = top + 'px';
this.datePickerCalendar.style.position = 'absolute';
this.datePickerCalendar.style.left = left + 'px';
this.datePickerCalendar.style.top = top + 'px';
}
/**
* Destroy DatePicker
* @method destroy
* @return {[type]} [description]
*/
destroy() {
this.calendarContainer.remove();
this.datePickerCalendar.remove();
}

@@ -489,3 +511,3 @@

* Returns date according to passed format
*
* @method getFormatedDate
* @param {Date} dt Date object

@@ -528,10 +550,16 @@ * @param {String} format Format string

/**
* Returns true if date picker is visible now
*
* Returns true if DatePicker is active
* @method isActive
* @returns {Boolean}
*/
isActive() {
return this.calendarContainer.classList.contains('is-active');
return this.datePickerCalendar.classList.contains('is-active');
}
/**
* Check if Object is a Date
* @method isDate
* @param {Object} obj Object to check
* @return {Boolean} True if Object is a Date then False
*/
isDate(obj) {

@@ -541,2 +569,8 @@ return ( /Date/ ).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());

/**
* Check if given year is LeapYear or not
* @method isLeapYear
* @param {Integer} year Year to check
* @return {Boolean} True if LeapYear then False
*/
isLeapYear(year) {

@@ -547,2 +581,9 @@ // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951

/**
* Get the number of days in month
* @method getDaysInMonth
* @param {Integer} year Year to check if we are facing a leapyear or not
* @param {Integer} month Month for which we want to know the amount of days
* @return {Integer} Days amount
*/
getDaysInMonth(year, month) {

@@ -552,6 +593,15 @@ return [31, this.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];

compareDates(a, b) {
// weak date comparison (use setToStartOfDay(date) to ensure correct result)
/**
* Compare two dates
* @method _compareDates
* @param {Date} a First date to compare
* @param {Date} b Second Date to compare with
* @return {Boolean} True if dates are equal then false
*/
_compareDates(a, b) {
// weak date comparison
a.setHours(0,0,0,0);
b.setHours(0,0,0,0);
return a.getTime() === b.getTime();
}
}

@@ -1,3 +0,3 @@

var $jscomp={scope:{},owns:function(a,c){return Object.prototype.hasOwnProperty.call(a,c)}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){if(b.get||b.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(a,c,b,e){if(c){b=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var f=a[e];f in b||(b[f]={});b=b[f]}a=a[a.length-1];e=b[a];c=c(e);c!=e&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Object.assign",function(a){return a?a:function(a,b){for(var c=1;c<arguments.length;c++){var f=arguments[c];if(f)for(var g in f)$jscomp.owns(f,g)&&(a[g]=f[g])}return a}},"es6-impl","es3");
var $jscomp={scope:{},owns:function(a,b){return Object.prototype.hasOwnProperty.call(a,b)}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var f=a[d];f in c||(c[f]={});c=c[f]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Object.assign",function(a){return a?a:function(a,c){for(var b=1;b<arguments.length;b++){var f=arguments[b];if(f)for(var e in f)$jscomp.owns(f,e)&&(a[e]=f[e])}return a}},"es6-impl","es3");
var datepicker_langs={en:{weekStart:1,previousMonth:"Previous Month",nextMonth:"Next Month",months:"January February March April May June July August September October November December".split(" "),monthsShort:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),weekdays:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),weekdaysShort:"Sun Mon Tue Wed Thu Fri Sat".split(" ")},fr:{weekStart:1,previousMonth:"Mois pr\u00e9c\u00e9dent",nextMonth:"Mois suivant",months:"Janvier F\u00e9vrier Mars Avril Mai Juin Juillet Ao\u00fbt Septembre Octobre Novembre D\u00e9cembre".split(" "),

@@ -10,22 +10,27 @@ monthsShort:"Jan F\u00e9v Mar Avr Mai Juin Juil Auo Sep Oct Nov D\u00e9c".split(" "),weekdays:"Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi".split(" "),weekdaysShort:"Dim Lun Mar Mer Jeu Ven Sam".split(" ")},de:{weekStart:1,previousMonth:"Vorheriger Monat",nextMonth:"N\u00e4chster Monat",months:"Januar Februar M\u00e4rz April Mai Juni Juli August September Oktober November Dezember".split(" "),monthsShort:"Jan Febr M\u00e4rz Apr Mai Juni Juli Aug Sept Okt Nov Dez".split(" "),weekdays:"Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag".split(" "),

hr:{weekStart:2,previousMonth:"Pro\u0161li mjesec",nextMonth:"Slijede\u0107i mjesec",months:"sije\u010danj velja\u010da o\u017eujak travanj svibanj lipanj srpanj kolovoz rujan listopad studeni prosinac".split(" "),monthsShort:"sij velj o\u017eu tra svi lip srp kol ruj lis stu pro".split(" "),weekdays:"nedjelja ponedjeljak utorak srijeda \u010detvrtak petak subota".split(" "),weekdaysShort:"ned pon uto sri \u010det pet sub".split(" ")},sr:{weekStart:2,previousMonth:"Pro\u0161li mesec",nextMonth:"Slede\u0107i mesec",
months:"januar februar mart april maj jun jul avgust septembar oktobar novembar decembar".split(" "),monthsShort:"jan feb mar apr maj jun jul avg sep okt nov dec".split(" "),weekdays:"nedelja ponedeljak utorak sreda \u010detvrtak petak subota".split(" "),weekdaysShort:"ned pon uto sre \u010det pet sub".split(" ")}},MOUSE_EVENTS=["click","touchstart"],DatePicker=function(a,c){c||(c={});var b={startDate:new Date,dataFormat:"yyyy/mm/dd",lang:"en",overlay:!1,closeOnSelect:!0,onSelect:null,onOpen:null,
onClose:null,onRender:null};this.element="string"===typeof a?document.querySelector(a):a;if(!this.element)throw Error("An invalid selector or non-DOM node has been provided.");this.parent=this.element.parentElement;this.lang="undefined"!==typeof datepicker_langs[this.lang]?this.lang:"en";this.options=Object.assign({},b,c);this.month=this.options.startDate.getMonth();this.year=this.options.startDate.getFullYear();this.open=!1;this.build()};
DatePicker.prototype.build=function(){var a=this,c=this;this.datePickerContainer=document.createElement("div");this.datePickerContainer.id="datePicker"+(new Date).getTime();this.options.overlay&&this.datePickerContainer.classList.add("modal");this.datePickerContainer.classList.add("datepicker");this.calendarContainer=document.createElement("div");this.calendarContainer.id="datePicker"+(new Date).getTime();this.calendarContainer.classList.add("calendar");this.renderCalendar();if(this.options.overlay){var b=
document.createElement("div");b.classList.add("modal-background");this.datePickerContainer.appendChild(b)}var e=document.createElement("button");e.className="modal-close";MOUSE_EVENTS.forEach(function(a){e.addEventListener(a,function(a){a.preventDefault();c.datePickerContainer.classList.remove("is-active")})});this.datePickerContainer.appendChild(this.calendarContainer);this.datePickerContainer.appendChild(e);document.body.appendChild(this.datePickerContainer);MOUSE_EVENTS.forEach(function(b){a.element.addEventListener(b,
function(a){a.preventDefault();c.open?(c.hide(),c.open=!1):(c.show(),c.open=!0)})})};DatePicker.prototype.renderDayName=function(a,c){for(a+=datepicker_langs[this.options.lang].weekStart;7<=a;)a-=7;return(void 0===c?0:c)?datepicker_langs[this.options.lang].weekdaysShort[a]:datepicker_langs[this.options.lang].weekdays[a]};
DatePicker.prototype.renderDay=function(a,c,b,e,f,g,d,l,h,m){var k=this;d=document.createElement("div");var n=document.createElement("button");n.classList.add("date-item");n.innerHTML=a;MOUSE_EVENTS.forEach(function(e){n.addEventListener(e,function(e){if("undefined"!=typeof k.options.onSelect&&null!=k.options.onSelect&&k.options.onSelect)k.options.onSelect(new Date(b,c,a));k.element.value=k.getFormatedDate(new Date(b,c,a),k.options.dataFormat);k.options.closeOnSelect&&k.hide()})});d.classList.add("calendar-date");
d.appendChild(n);g&&d.setAttribute("disabled","disabled");f&&d.classList.add("is-today");e&&d.classList.add("is-active");l&&d.classList.add("calendar-range");h&&d.classList.add("range-start");m&&d.classList.add("range-end");return d};
DatePicker.prototype.renderNav=function(a,c){var b=this,e=this,f=document.createElement("div");f.classList.add("calendar-nav");var g=document.createElement("div");g.classList.add("calendar-nav-left");this.previousYearButton=document.createElement("div");this.previousYearButton.classList.add("button");this.previousYearButton.classList.add("is-text");var d=document.createElement("i");d.classList.add("fa");d.classList.add("fa-backward");this.previousYearButton.appendChild(d);MOUSE_EVENTS.forEach(function(a){b.previousYearButton.addEventListener(a,
function(a){a.preventDefault();e.prevYear()})});g.appendChild(this.previousYearButton);this.previousMonthButton=document.createElement("div");this.previousMonthButton.classList.add("button");this.previousMonthButton.classList.add("is-text");d=document.createElement("i");d.classList.add("fa");d.classList.add("fa-chevron-left");this.previousMonthButton.appendChild(d);MOUSE_EVENTS.forEach(function(a){b.previousMonthButton.addEventListener(a,function(a){a.preventDefault();e.prevMonth()})});g.appendChild(this.previousMonthButton);
d=document.createElement("div");d.innerHTML=datepicker_langs[this.options.lang].months[c]+" "+a;var l=document.createElement("div");l.classList.add("calendar-nav-right");this.nextMonthButton=document.createElement("div");this.nextMonthButton.classList.add("button");this.nextMonthButton.classList.add("is-text");var h=document.createElement("i");h.classList.add("fa");h.classList.add("fa-chevron-right");this.nextMonthButton.appendChild(h);MOUSE_EVENTS.forEach(function(a){b.nextMonthButton.addEventListener(a,
function(a){a.preventDefault();e.nextMonth()})});l.appendChild(this.nextMonthButton);this.nextYearButton=document.createElement("div");this.nextYearButton.classList.add("button");this.nextYearButton.classList.add("is-text");h=document.createElement("i");h.classList.add("fa");h.classList.add("fa-forward");this.nextYearButton.appendChild(h);MOUSE_EVENTS.forEach(function(a){b.nextYearButton.addEventListener("click",function(a){a.preventDefault();e.nextYear()})});l.appendChild(this.nextYearButton);f.appendChild(g);
f.appendChild(d);f.appendChild(l);return f};DatePicker.prototype.renderHeader=function(){var a=document.createElement("div");a.classList.add("calendar-header");for(var c=0;7>c;c++){var b=document.createElement("div");b.classList.add("calendar-date");b.innerHTML=this.renderDayName(c,!0);a.appendChild(b)}return a};DatePicker.prototype.renderBody=function(){var a=document.createElement("div");a.classList.add("calendar-body");return a};
DatePicker.prototype.renderCalendar=function(){var a=new Date,c=this.renderNav(this.year,this.month),b=this.renderHeader(),e=this.renderBody();this.calendarContainer.appendChild(c);this.calendarContainer.appendChild(b);this.calendarContainer.appendChild(e);c=this.getDaysInMonth(this.year,this.month);b=(new Date(this.year,this.month,1)).getDay();if("undefined"!=typeof this.options.onRender&&null!=this.options.onRender&&this.options.onRender)this.options.onRender(this);0<datepicker_langs[this.options.lang].weekStart&&
(b-=datepicker_langs[this.options.lang].weekStart,0>b&&(b+=7));for(var f=c+b,g=f;7<g;)g-=7;f+=7-g;for(g=0;g<f;g++){var d=new Date(this.year,this.month,1+(g-b)),l=this.compareDates(d,a),h=g<b||g>=c+b,m=!1;d.getMonth()!==this.month&&(m=!0);e.appendChild(this.renderDay(d.getDate(),this.month,this.year,!1,l,m,h,!1,!1,!1))}};DatePicker.prototype.prevMonth=function(){--this.month;this.adjustCalendar();this.renderCalendar()};DatePicker.prototype.nextMonth=function(){this.month+=1;this.adjustCalendar();this.renderCalendar()};
DatePicker.prototype.prevYear=function(){--this.year;this.adjustCalendar();this.renderCalendar()};DatePicker.prototype.nextYear=function(){this.year+=1;this.adjustCalendar();this.renderCalendar()};DatePicker.prototype.show=function(){if("undefined"!=typeof this.options.onOpen&&null!=this.options.onOpen&&this.options.onOpen)this.options.onOpen(this);this.datePickerContainer.classList.add("is-active");this.options.overlay||this.adjustPosition();this.open=!0};
DatePicker.prototype.hide=function(){this.open=!1;if("undefined"!=typeof this.options.onClose&&null!=this.options.onClose&&this.options.onClose)this.options.onClose(this);this.datePickerContainer.classList.remove("is-active")};DatePicker.prototype.adjustCalendar=function(){0>this.month&&(this.year-=Math.ceil(Math.abs(this.month)/12),this.month+=12);11<this.month&&(this.year+=Math.floor(Math.abs(this.month)/12),this.month-=12);this.calendarContainer.innerHTML="";return this};
DatePicker.prototype.adjustPosition=function(){var a,c;if("function"===typeof this.element.getBoundingClientRect)c=this.element.getBoundingClientRect(),a=c.left+window.pageXOffset,c=c.bottom+window.pageYOffset;else for(a=this.element.offsetLeft,c=this.element.offsetTop+this.element.offsetHeight;this.element=this.element.offsetParent;)a+=this.element.offsetLeft,c+=this.element.offsetTop;this.calendarContainer.style.position="absolute";this.calendarContainer.style.left=a+"px";this.calendarContainer.style.top=
c+"px"};DatePicker.prototype.destroy=function(){this.calendarContainer.remove()};
DatePicker.prototype.getFormatedDate=function(a,c){var b={d:a.getDate(),dd:a.getDate(),D:a.getDay(),m:a.getMonth()+1,mm:a.getMonth()+1,M:a.getMonth(),MM:a.getMonth(),yy:a.getFullYear().toString().substr(-2),yyyy:a.getFullYear()};10>b.dd&&(b.dd="0"+b.dd);10>b.mm&&(b.mm="0"+b.mm);b.D=datepicker_langs[this.options.lang].weekdays[b.D?b.D-1:6];b.M=datepicker_langs[this.options.lang].monthsShort[b.M];b.MM=datepicker_langs[this.options.lang].months[b.MM];return c.replace(/(?:[dmM]{1,2}|D|yyyy|yy)/g,function(a){return"undefined"!==
typeof b[a]?b[a]:a})};DatePicker.prototype.isActive=function(){return this.calendarContainer.classList.contains("is-active")};DatePicker.prototype.isDate=function(a){return/Date/.test(Object.prototype.toString.call(a))&&!isNaN(a.getTime())};DatePicker.prototype.isLeapYear=function(a){return 0===a%4&&0!==a%100||0===a%400};DatePicker.prototype.getDaysInMonth=function(a,c){return[31,this.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][c]};
DatePicker.prototype.compareDates=function(a,c){return a.getTime()===c.getTime()};
months:"januar februar mart april maj jun jul avgust septembar oktobar novembar decembar".split(" "),monthsShort:"jan feb mar apr maj jun jul avg sep okt nov dec".split(" "),weekdays:"nedelja ponedeljak utorak sreda \u010detvrtak petak subota".split(" "),weekdaysShort:"ned pon uto sre \u010det pet sub".split(" ")},"zh-cn":{weekStart:1,previousMonth:"\u4e0a\u4e2a\u6708",nextMonth:"\u4e0b\u4e2a\u6708",months:"\u4e00\u6708 \u4e8c\u6708 \u4e09\u6708 \u56db\u6708 \u4e94\u6708 \u516d\u6708 \u4e03\u6708 \u516b\u6708 \u4e5d\u6708 \u5341\u6708 \u5341\u4e00\u6708 \u5341\u4e8c\u6708".split(" "),
monthsShort:"\u4e00\u6708 \u4e8c\u6708 \u4e09\u6708 \u56db\u6708 \u4e94\u6708 \u516d\u6708 \u4e03\u6708 \u516b\u6708 \u4e5d\u6708 \u5341\u6708 \u5341\u4e00\u6708 \u5341\u4e8c\u6708".split(" "),weekdays:"\u661f\u671f\u5929 \u661f\u671f\u4e00 \u661f\u671f\u4e8c \u661f\u671f\u4e09 \u661f\u671f\u56db \u661f\u671f\u4e94 \u661f\u671f\u516d".split(" "),weekdaysShort:"\u5468\u65e5 \u5468\u4e00 \u5468\u4e8c \u5468\u4e09 \u5468\u56db \u5468\u4e94 \u5468\u516d".split(" ")}},DatePicker=function(a,b){b=void 0===
b?{}:b;this._clickEvent="ontouchstart"in window?"touchstart":"click";this.element="string"===typeof a?document.querySelector(a):a;if(!this.element)throw Error("An invalid selector or non-DOM node has been provided.");this.options=Object.assign({},{startDate:new Date,dataFormat:"yyyy/mm/dd",lang:"en",overlay:!1,closeOnOverlayClick:!0,closeOnSelect:!0,onSelect:null,onOpen:null,onClose:null,onRender:null},b);this._init()};
DatePicker.prototype._init=function(){this._id="datePicker"+(new Date).getTime();this.lang="undefined"!==typeof datepicker_langs[this.lang]?this.lang:"en";this.month=this.options.startDate.getMonth();this.year=this.options.startDate.getFullYear();this.open=!1;this._build();this._bindEvents();return this};
DatePicker.prototype._build=function(){var a="\n <div id='"+this._id+"' class=\"datepicker "+(this.options.overlay?"modal":"")+'">\n '+(this.options.overlay?'<div class="modal-background"></div>':"")+'\n <div class="calendar">\n <div class="calendar-nav">\n <div class="calendar-nav-previous-year">\n <button class="button is-small is-text">\n <i class="fa fa-chevron-left"></i>\n </button>\n </div>\n <div class="calendar-nav-previous-month">\n <button class="button is-small is-text">\n <i class="fa fa-chevron-left"></i>\n </button>\n </div>\n <div class="calendar-month">'+
(datepicker_langs[this.options.lang].months[this.month]+" "+this.year)+'</div>\n <div class="calendar-nav-next-month">\n <button class="button is-small is-text">\n <i class="fa fa-chevron-right"></i>\n </button>\n </div>\n <div class="calendar-nav-next-year">\n <button class="button is-small is-text">\n <i class="fa fa-chevron-right"></i>\n </button>\n </div>\n </div>\n <div class="calendar-container">\n <div class="calendar-header">\n <div class="calendar-date">'+
this._getDayName(0,!0)+'</div>\n <div class="calendar-date">'+this._getDayName(1,!0)+'</div>\n <div class="calendar-date">'+this._getDayName(2,!0)+'</div>\n <div class="calendar-date">'+this._getDayName(3,!0)+'</div>\n <div class="calendar-date">'+this._getDayName(4,!0)+'</div>\n <div class="calendar-date">'+this._getDayName(5,!0)+'</div>\n <div class="calendar-date">'+this._getDayName(6,!0)+'</div>\n </div>\n <div class="calendar-body"></div>\n </div>\n </div>\n </div>\n ';
document.body.insertAdjacentHTML("beforeend",a);this.datePickerContainer=document.getElementById(this._id);this.datePickerCalendar=this.datePickerContainer.querySelector(".calendar");this.options.overlay&&(this.datePickerOverlay=this.datePickerContainer.querySelector(".modal-background"),this.datePickerCloseButton=this.datePickerContainer.querySelector(".modal-close"));this.datePickerCalendarNav=this.datePickerCalendar.querySelector(".calendar-nav");this.datePickerCalendarNavMonth=this.datePickerCalendar.querySelector(".calendar-month");
this.datePickerCalendarNavPreviousMonth=this.datePickerCalendarNav.querySelector(".calendar-nav-previous-month");this.datePickerCalendarNavNextMonth=this.datePickerCalendarNav.querySelector(".calendar-nav-next-month");this.datePickerCalendarNavPreviousYear=this.datePickerCalendarNav.querySelector(".calendar-nav-previous-year");this.datePickerCalendarNavNextYear=this.datePickerCalendarNav.querySelector(".calendar-nav-next-year");this.datePickerCalendarHeader=this.datePickerCalendar.querySelector(".calendar-header");
this.datePickerCalendarBody=this.datePickerCalendar.querySelector(".calendar-body");this._renderDays()};
DatePicker.prototype._bindEvents=function(){var a=this;document.addEventListener(this._clickEvent,function(b){b.stopPropagation();a.hide()});this.element.addEventListener(this._clickEvent,function(b){b.preventDefault();b.stopPropagation();a.open?a.hide():a.show()});this.options.overlay&&(this.datePickerCloseButton&&this.datePickerCloseButton.addEventListener(this._clickEvent,function(b){b.preventDefault();a.hide()}),this.options.closeOnOverlayClick&&this.datePickerOverlay.addEventListener(this._clickEvent,
function(b){b.preventDefault();a.hide()}));this.datePickerCalendarNavPreviousYear.addEventListener(this._clickEvent,function(b){b.preventDefault();b.stopPropagation();a.prevYear()});this.datePickerCalendarNavNextYear.addEventListener(this._clickEvent,function(b){b.preventDefault();b.stopPropagation();a.nextYear()});this.datePickerCalendarNavPreviousMonth.addEventListener(this._clickEvent,function(b){b.preventDefault();b.stopPropagation();a.prevMonth()});this.datePickerCalendarNavNextMonth.addEventListener(this._clickEvent,
function(b){b.preventDefault();b.stopPropagation();a.nextMonth()})};
DatePicker.prototype._bindDaysEvents=function(){var a=this,b=this;[].forEach.call(this.datePickerCalendarDays,function(c){c.addEventListener(a._clickEvent,function(a){a.preventDefault();a.stopPropagation();if("undefined"!=typeof b.options.onSelect&&null!=b.options.onSelect&&b.options.onSelect)b.options.onSelect(new Date(year,month,day));a=this.dataset.date.split("/");b.element.value=b.getFormatedDate(new Date(a[0],a[1],a[2]),b.options.dataFormat);b.options.closeOnSelect&&b.hide()})})};
DatePicker.prototype._getDayName=function(a,b){for(a+=datepicker_langs[this.options.lang].weekStart;7<=a;)a-=7;return(void 0===b?0:b)?datepicker_langs[this.options.lang].weekdaysShort[a]:datepicker_langs[this.options.lang].weekdays[a]};
DatePicker.prototype._renderDay=function(a,b,c,d,f,e,g,k,l,h){return'\n <div data-date="'+(c+"/"+b+"/"+a)+'" class="calendar-date'+(e?" is-disabled":"")+(k?" calendar-range":"")+(l?" calendar-range-start":"")+(h?" calendar-range-end":"")+'">\n <button class="date-item'+(f?" is-today":"")+(d?" is-active":"")+'">'+a+"</button>\n </div>\n "};
DatePicker.prototype._renderDays=function(){var a=new Date,b="",c=this.getDaysInMonth(this.year,this.month),d=(new Date(this.year,this.month,1)).getDay();if("undefined"!=typeof this.options.onRender&&null!=this.options.onRender&&this.options.onRender)this.options.onRender(this);0<datepicker_langs[this.options.lang].weekStart&&(d-=datepicker_langs[this.options.lang].weekStart,0>d&&(d+=7));for(var f=c+d,e=f;7<e;)e-=7;f+=7-e;for(e=0;e<f;e++){var g=new Date(this.year,this.month,1+(e-d)),k=this._compareDates(g,
a),l=e<d||e>=c+d,h=!1;g.getMonth()!==this.month&&(h=!0);b+=this._renderDay(g.getDate(),this.month,this.year,!1,k,h,l,!1,!1,!1)}this.datePickerCalendarBody.insertAdjacentHTML("beforeend",b);this.datePickerCalendarDays=this.datePickerCalendarBody.querySelectorAll(".calendar-date");this._bindDaysEvents()};DatePicker.prototype.prevMonth=function(){--this.month;this.adjustCalendar();this._renderDays()};DatePicker.prototype.nextMonth=function(){this.month+=1;this.adjustCalendar();this._renderDays()};
DatePicker.prototype.prevYear=function(){--this.year;this.adjustCalendar();this._renderDays()};DatePicker.prototype.nextYear=function(){this.year+=1;this.adjustCalendar();this._renderDays()};DatePicker.prototype.show=function(){if("undefined"!=typeof this.options.onOpen&&null!=this.options.onOpen&&this.options.onOpen)this.options.onOpen(this);this.datePickerContainer.classList.add("is-active");this.options.overlay||this.adjustPosition();this.open=!0};
DatePicker.prototype.hide=function(){this.open=!1;if("undefined"!=typeof this.options.onClose&&null!=this.options.onClose&&this.options.onClose)this.options.onClose(this);this.datePickerContainer.classList.remove("is-active")};
DatePicker.prototype.adjustCalendar=function(){0>this.month&&(this.year-=Math.ceil(Math.abs(this.month)/12),this.month+=12);11<this.month&&(this.year+=Math.floor(Math.abs(this.month)/12),this.month-=12);this.datePickerCalendarNavMonth.innerHTML=datepicker_langs[this.options.lang].months[this.month]+" "+this.year;this.datePickerCalendarBody.innerHTML="";return this};
DatePicker.prototype.adjustPosition=function(){var a,b;if("function"===typeof this.element.getBoundingClientRect)b=this.element.getBoundingClientRect(),a=b.left+window.pageXOffset,b=b.bottom+window.pageYOffset;else for(a=this.element.offsetLeft,b=this.element.offsetTop+this.element.offsetHeight;this.element=this.element.offsetParent;)a+=this.element.offsetLeft,b+=this.element.offsetTop;this.datePickerCalendar.style.position="absolute";this.datePickerCalendar.style.left=a+"px";this.datePickerCalendar.style.top=
b+"px"};DatePicker.prototype.destroy=function(){this.datePickerCalendar.remove()};
DatePicker.prototype.getFormatedDate=function(a,b){var c={d:a.getDate(),dd:a.getDate(),D:a.getDay(),m:a.getMonth()+1,mm:a.getMonth()+1,M:a.getMonth(),MM:a.getMonth(),yy:a.getFullYear().toString().substr(-2),yyyy:a.getFullYear()};10>c.dd&&(c.dd="0"+c.dd);10>c.mm&&(c.mm="0"+c.mm);c.D=datepicker_langs[this.options.lang].weekdays[c.D?c.D-1:6];c.M=datepicker_langs[this.options.lang].monthsShort[c.M];c.MM=datepicker_langs[this.options.lang].months[c.MM];return b.replace(/(?:[dmM]{1,2}|D|yyyy|yy)/g,function(a){return"undefined"!==
typeof c[a]?c[a]:a})};DatePicker.prototype.isActive=function(){return this.datePickerCalendar.classList.contains("is-active")};DatePicker.prototype.isDate=function(a){return/Date/.test(Object.prototype.toString.call(a))&&!isNaN(a.getTime())};DatePicker.prototype.isLeapYear=function(a){return 0===a%4&&0!==a%100||0===a%400};DatePicker.prototype.getDaysInMonth=function(a,b){return[31,this.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]};
DatePicker.prototype._compareDates=function(a,b){a.setHours(0,0,0,0);b.setHours(0,0,0,0);return a.getTime()===b.getTime()};
{
"name": "bulma-calendar",
"version": "0.1.7",
"version": "0.1.8",
"description": "Display a calendar for date selection or for planning management, in different colors and sizes",

@@ -5,0 +5,0 @@ "main": "calendar.sass",

{
"name": "bulma-switch",
"version": "0.1.2",
"version": "0.1.3",
"description": "Display classic checkbox as a switch button, in different colors, sizes, and states ",

@@ -5,0 +5,0 @@ "main": "switch.sass",

{
"name": "bulma-extensions",
"version": "0.7.1",
"version": "0.7.2",
"description": "Set of extensions for Bulma.io CSS Framework",

@@ -5,0 +5,0 @@ "main": "extensions.sass",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc