| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /// <reference path="../../node_modules/@types/jquery/index.d.ts"/>
- 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 = $('<div class="region__selection-box region-selection__box"></div>');
- var linkTemplate_1 = '<a href="{link}" class="region-selection__link">{name}</a>';
- // let iconTemplate = '<img src="{icon}" class="region-selection__icon">';
- 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 = $('<div class="region-selection__items-list"></div>');
- itemsList.append($("<div class=\"region-selection__list-letter\">" + groupName + "</div>"));
- foreach(regionCollection, function (region) {
- var item = $('<div class="region-selection__item"></div>').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 = {}));
|