///
var RegionSelection;
(function (RegionSelection) {
function foreach(data, callback) {
for (var key in data) {
if (data.hasOwnProperty(key) && typeof data[key] !== 'function') {
callback(data[key], key, data);
}
}
}
var RegionsCollection = (function () {
function RegionsCollection(data) {
var _this = this;
var length = 0;
this.setLength = function (value) {
length = value;
};
this.getLength = function () {
return length;
};
foreach(data, function (region) { return _this.push(region); });
}
Object.defineProperty(RegionsCollection.prototype, "length", {
get: function () {
return this.getLength();
},
set: function (value) {
this.setLength(value);
},
enumerable: true,
configurable: true
});
;
RegionsCollection.prototype.setLength = function (value) {
};
;
RegionsCollection.prototype.getLength = function () {
return 0;
};
;
RegionsCollection.prototype.push = function (item) {
Array.prototype.push.call(this, item);
};
RegionsCollection.prototype.forEach = function (callback) {
Array.prototype.forEach.call(this, callback);
};
RegionsCollection.prototype.group = function (groupFunction) {
var groups = {};
this.forEach(function (region) {
var groupName = groupFunction(region);
if (groups[groupName] === undefined) {
groups[groupName] = new RegionsCollection([]);
}
groups[groupName].push(region);
});
return groups;
};
RegionsCollection.prototype.sort = function (sortFunction) {
var data = [];
this.forEach(function (region) { return data.push(region); });
data.sort(sortFunction);
return new RegionsCollection(data);
};
return RegionsCollection;
}());
var RegionSelectionBox = (function () {
function RegionSelectionBox(selector) {
this.regions = new RegionsCollection([]);
this.selector = selector;
if (this.selector.data('regions') !== undefined) {
this.fillRegions(this.selector.data('regions'));
}
this.selector.on('click', this.showBox.bind(this));
}
RegionSelectionBox.prototype.fillRegions = function (data) {
var _this = this;
foreach(eval(data), function (value) {
_this.regions.push(new Region(value));
});
};
RegionSelectionBox.prototype.showBox = function (e) {
e.preventDefault();
e.stopPropagation();
if (this.box === undefined) {
this.renderBox();
}
var box = this.box;
var hide = function () {
box.hide(0, function () {
$('body').off('click', hide);
});
}.bind(this);
if (box.is(':visible')) {
hide();
}
else {
$('body').on('click', hide);
box.show(0);
}
};
RegionSelectionBox.prototype.renderBox = function () {
var _this = this;
if (!$('.region__selection-box').length) {
this.box = $('
');
var linkTemplate_1 = '{name}';
// let iconTemplate = '
';
var grouped = this.regions.sort(function (region1, region2) {
return region1.caption < region2.caption ? -1 : region1.caption > region2.caption ? 1 : 0;
}).group(function (region) {
return region.caption.charAt(0).toUpperCase();
});
foreach(grouped, function (regionCollection, groupName) {
var itemsList = $('');
itemsList.append($("" + groupName + "
"));
foreach(regionCollection, function (region) {
var item = $('').append(linkTemplate_1
.replace('{link}', region.link)
.replace('{name}', region.caption)
// .replace('{icon}', iconTemplate.replace('{icon}', region.icon))
);
itemsList.append($(item));
});
_this.box.append(itemsList);
});
this.box.css('display', 'none');
this.selector.parent().append(this.box);
}
};
return RegionSelectionBox;
}());
var Region = (function () {
function Region(data) {
this._id = data.id;
this._caption = data.caption;
this._link = data.link;
this._icon = data.icon;
}
Object.defineProperty(Region.prototype, "id", {
get: function () {
return this._id;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Region.prototype, "caption", {
get: function () {
return this._caption;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Region.prototype, "link", {
get: function () {
return this._link;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Region.prototype, "icon", {
get: function () {
return this._icon;
},
enumerable: true,
configurable: true
});
return Region;
}());
function createSelectionBox($object) {
return new RegionSelectionBox($object);
}
RegionSelection.createSelectionBox = createSelectionBox;
})(RegionSelection || (RegionSelection = {}));