/// class ArtboxBasket { private _items; private _language; private _defaults: Object = { language: 'ru', url: 'basket', initError: 'Basket cannot be init', modalSelector: '.basket_modal', cartSelector: '.basket_wrapper', initCallback: function () { } }; private _settings: Object = {}; get items() { return this._items; } get language() { if (this._language === undefined) { let language_attr = $('html').attr('lang'); if (language_attr !== undefined) { let language = language_attr.substr(0, 2); if (language.length == 2) { this._language = language; } else { this._language = this._settings['language']; } } else { this._language = this._settings['language']; } } return this._language; } constructor(settings: Object = {},) { this._settings = ArtboxBasket.mergeObjects(this._defaults, settings); if (settings['language'] !== undefined) { this._language = settings['language']; } this.init(this._settings['initCallback']); } public init(callback) { $.get(this.getLanguagePath() + this._settings['url'], function (data) { this._items = data.basket; console.log(callback); callback(data); }.bind(this), 'json').fail(function () { console.error(this._settings['initError']); }.bind(this)); } public add(variant_id, count, callback): JQueryPromise { return $.post(this.getLanguagePath() + this._settings['url'] + '/add?variant_id=' + variant_id + '&count=' + count, function (data) { this._items = data.basket; if (callback !== undefined) { callback(data); } }.bind(this), 'json').fail(function (xhr, status, error) { console.error(error); }); } public set(variant_id, count, callback): JQueryPromise { return $.post(this.getLanguagePath() + this._settings['url'] + '/set?variant_id=' + variant_id + '&count=' + count, function (data) { this._items = data.basket; if (callback !== undefined) { callback(data); } }.bind(this), 'json').fail(function (xhr, status, error) { console.error(error); }); } public remove(variant_id, callback): JQueryPromise { return $.post(this.getLanguagePath() + this._settings['url'] + '/remove?variant_id=' + variant_id, function (data) { this._items = data.basket; if (callback !== undefined) { callback(data); } }.bind(this), 'json').fail(function (xhr, status, error) { console.error(error); }); } get count(): number { return Object.keys(this._items).length; } private static mergeObjects(obj1: Object, obj2: Object): Object { let obj = {}; for (let attribute in obj1) { obj[attribute] = obj1[attribute]; } for (let attribute in obj2) { obj[attribute] = obj2[attribute]; } return obj; } private getLanguagePath(): string { if (this.language) { return '/' + this.language + '/'; } else { return '/'; } } }