artbox_basket.js 4.13 KB
///<reference path="node_modules/@types/jquery/index.d.ts" />
var ArtboxBasket = /** @class */ (function () {
    function ArtboxBasket(settings) {
        if (settings === void 0) { settings = {}; }
        this._defaults = {
            language: 'ru',
            url: 'basket',
            initError: 'Basket cannot be init',
            modalSelector: '.basket_modal',
            cartSelector: '.basket_wrapper',
            initCallback: function () {
            }
        };
        this._settings = {};
        this._settings = ArtboxBasket.mergeObjects(this._defaults, settings);
        if (settings['language'] !== undefined) {
            this._language = settings['language'];
        }
        this.init(this._settings['initCallback']);
    }
    Object.defineProperty(ArtboxBasket.prototype, "items", {
        get: function () {
            return this._items;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(ArtboxBasket.prototype, "language", {
        get: function () {
            if (this._language === undefined) {
                var language_attr = $('html').attr('lang');
                if (language_attr !== undefined) {
                    var 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;
        },
        enumerable: true,
        configurable: true
    });
    ArtboxBasket.prototype.init = function (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));
    };
    ArtboxBasket.prototype.add = function (variant_id, count, callback) {
        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);
        });
    };
    ArtboxBasket.prototype.set = function (variant_id, count, callback) {
        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);
        });
    };
    ArtboxBasket.prototype.remove = function (variant_id, callback) {
        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);
        });
    };
    Object.defineProperty(ArtboxBasket.prototype, "count", {
        get: function () {
            return Object.keys(this._items).length;
        },
        enumerable: true,
        configurable: true
    });
    ArtboxBasket.mergeObjects = function (obj1, obj2) {
        var obj = {};
        for (var attribute in obj1) {
            obj[attribute] = obj1[attribute];
        }
        for (var attribute in obj2) {
            obj[attribute] = obj2[attribute];
        }
        return obj;
    };
    ArtboxBasket.prototype.getLanguagePath = function () {
        if (this.language) {
            return '/' + this.language + '/';
        }
        else {
            return '/';
        }
    };
    return ArtboxBasket;
}());