| Current Path : /home/rtorresani/www/vendor/magento/module-ui/view/base/web/js/lib/knockout/bindings/ |
| Current File : //home/rtorresani/www/vendor/magento/module-ui/view/base/web/js/lib/knockout/bindings/datepicker.js |
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** Creates datepicker binding and registers in to ko.bindingHandlers object */
define([
'ko',
'underscore',
'jquery',
'mage/translate'
], function (ko, _, $, $t) {
'use strict';
var defaults = {
dateFormat: 'mm\/dd\/yyyy',
showsTime: false,
timeFormat: null,
buttonImage: null,
buttonImageOnly: null,
buttonText: $t('Select Date')
};
ko.bindingHandlers.datepicker = {
/**
* Initializes calendar widget on element and stores it's value to observable property.
* Datepicker binding takes either observable property or object
* { storage: {ko.observable}, options: {Object} }.
* For more info about options take a look at "mage/calendar" and jquery.ui.datepicker widget.
* @param {HTMLElement} el - Element, that binding is applied to
* @param {Function} valueAccessor - Function that returns value, passed to binding
* @param {object} allBindings
* @param {object} viewModel
* @param {object} bindingContext
*/
init: function (el, valueAccessor, allBindings, viewModel, bindingContext) {
var config = valueAccessor(),
observable,
options = {};
_.extend(options, defaults);
if (typeof config === 'object') {
observable = config.storage;
_.extend(options, config.options);
} else {
observable = config;
}
require(['mage/calendar'], function () {
$(el).calendar(options);
ko.utils.registerEventHandler(el, 'change', function () {
observable(this.value);
});
});
if (bindingContext.$data) {
bindingContext.$data.value.subscribe(function (newVal) {
if (!newVal) {
$(el).val('');
}
}, this);
}
},
/**
* Update calendar widget on element and stores it's value to observable property.
* Datepicker binding takes either observable property or object
* { storage: {ko.observable}, options: {Object} }.
* @param {HTMLElement} element - Element, that binding is applied to
* @param {Function} valueAccessor - Function that returns value, passed to binding
*/
update: function (element, valueAccessor) {
var config = valueAccessor(),
$element = $(element),
observable,
options = {},
newVal;
_.extend(options, defaults);
if (typeof config === 'object') {
observable = config.storage;
_.extend(options, config.options);
} else {
observable = config;
}
require(['moment', 'mage/utils/misc', 'mage/calendar'], function (moment, utils) {
if (_.isEmpty(observable())) {
newVal = null;
} else {
newVal = moment(
observable(),
utils.convertToMomentFormat(
options.dateFormat + (options.showsTime ? ' ' + options.timeFormat : '')
)
).toDate();
}
if (!options.timeOnly) {
$element.datepicker('setDate', newVal);
$element.trigger('blur');
}
});
}
};
});