You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1120 lines
47 KiB

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _AbsBaseSelect2 = require('./base/AbsBaseSelect');
var _AbsBaseSelect3 = _interopRequireDefault(_AbsBaseSelect2);
var _NoTreeData = require('./data/NoTreeData');
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var NoTreeSelect = function (_AbsBaseSelect) {
_inherits(NoTreeSelect, _AbsBaseSelect);
function NoTreeSelect(_ref) {
var $container = _ref.$container,
data = _ref.data;
_classCallCheck(this, NoTreeSelect);
var _this = _possibleConstructorReturn(this, (NoTreeSelect.__proto__ || Object.getPrototypeOf(NoTreeSelect)).call(this, { $container: $container, data: new _NoTreeData2.default(data) }));
_this.$buttonAddOptions.hide();
return _this;
}
_createClass(NoTreeSelect, [{
key: '_onclickOptionsElement',
value: function _onclickOptionsElement(e) {
this.selectedEl.id = $(e.target).data("id");
this.selectedEl.value = $(e.target).html();
this.$searchInput.val($(e.target).html());
this.$buttonAddOptions.show();
this.$optionsBox.hide();
this.selectedContainer.add(this.selectedEl.id);
this.clear();
e.preventDefault();
return false;
}
}, {
key: '_onButtonAddOptions',
value: function _onButtonAddOptions(e) {
// pass
}
}]);
return NoTreeSelect;
}(_AbsBaseSelect3.default);
exports.default = NoTreeSelect;
},{"./base/AbsBaseSelect":4,"./data/NoTreeData":6}],2:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // `
var _DataTree = require('./data/DataTree');
var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = require('./data/NoTreeData');
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var tmpl_selectedElement = function tmpl_selectedElement(header, name, id) {
return '\n <div class="selected-element">\n <div class="header">\n ' + header + '\n </div>\n <div class="name">\n ' + name + '\n </div>\n <span data-id="' + id + '" class="icon-remove"></span>\n </div>\n';
};
var SelectedContainer = function () {
function SelectedContainer($container, data) {
var noTree = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
_classCallCheck(this, SelectedContainer);
// TODO: rename variables to camelCase
this.$self = $container;
this.elements_id = []; // [spec_id, spec_id, ...]
this.dataTree = noTree ? new _NoTreeData2.default(data) : new _DataTree2.default(data);
this.$input = this.$self.find('input[type="hidden"]');
this.restoreElements();
}
_createClass(SelectedContainer, [{
key: 'restoreElements',
value: function restoreElements() {
var self = this;
if (this.$input && this.$input.val()) {
var data = this.$input.val().split(',').filter(function (el) {
return el;
});
console.log("restore data = ", data);
this.elements_id = [];
data.forEach(function (el) {
return self.add(el);
});
}
}
}, {
key: '_removeById',
value: function _removeById(spec_id) {
var index = this.elements_id.indexOf(spec_id);
if (index >= 0) {
this.elements_id.splice(index, 1);
}
this.$self.find('span[data-id=\'' + spec_id + '\']').parents('.selected-element').remove();
}
}, {
key: 'remove',
value: function remove(e) {
var spec_id = $(e.target).data("id");
this._removeById(spec_id);
if (this.$input) this.$input.val(this.elements_id.join(','));
e.preventDefault();
}
}, {
key: 'add',
value: function add(_id, max_len) {
var id = Number(_id);
var self = this;
var has_already = this.elements_id.filter(function (el) {
return self.dataTree.isChild(el, id);
});
// console.log(has_already);
if (has_already.length || this.elements_id.indexOf(Number(id)) != -1) {
//TODO: do popup messages
console.log("Not actually");
return;
}
var not_valid = this.elements_id.filter(function (el) {
return self.dataTree.isChild(id, el);
});
not_valid.forEach(function (el) {
self._removeById(el);
});
var header = SelectedContainer.getHeader(this.dataTree.getSpecChain(id), "", max_len);
console.log("id = ", id);
console.log("chain = ", this.dataTree.getSpecChain(id));
console.log("header = ", header);
var name = this.dataTree.getElementById(id).name;
this.elements_id.push(id);
if (this.$input) this.$input.val(this.elements_id.join(','));
this.$self.append(SelectedContainer.getTemplate(header || "&nbsp;", name, id));
this.btn_remove = this.$self.find('.icon-remove');
this.btn_remove.on("click", this.remove.bind(self));
}
}], [{
key: 'getTemplate',
value: function getTemplate(header, name, id) {
return tmpl_selectedElement(header, name, id);
}
}, {
key: 'getHeader',
value: function getHeader(spec_chain, separator, max_len) {
function toShortString(string, max_len) {
return string.slice(0, max_len) + (string.length > max_len ? "..." : "");
}
separator = separator || ' / ';
var str_chain = "";
spec_chain.forEach(function (el) {
str_chain = (max_len ? toShortString(el.name, max_len) : el.name) + (str_chain ? separator : "") + str_chain;
});
return str_chain;
}
}]);
return SelectedContainer;
}();
exports.default = SelectedContainer;
},{"./data/DataTree":5,"./data/NoTreeData":6}],3:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = require('./base/AbsBaseSelect');
var _AbsBaseSelect3 = _interopRequireDefault(_AbsBaseSelect2);
var _DataTree = require('./data/DataTree');
var _DataTree2 = _interopRequireDefault(_DataTree);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var TreeSelect = function (_AbsBaseSelect) {
_inherits(TreeSelect, _AbsBaseSelect);
function TreeSelect(_ref) {
var $container = _ref.$container,
data = _ref.data,
_ref$hasEditableConta = _ref.hasEditableContainer,
hasEditableContainer = _ref$hasEditableConta === undefined ? false : _ref$hasEditableConta;
_classCallCheck(this, TreeSelect);
return _possibleConstructorReturn(this, (TreeSelect.__proto__ || Object.getPrototypeOf(TreeSelect)).call(this, { $container: $container, data: new _DataTree2.default(data), hasEditableContainer: hasEditableContainer }));
}
_createClass(TreeSelect, [{
key: 'setNearbySelectBox',
value: function setNearbySelectBox(next, prev) {
this.nextSelectBox = next;
this.prevSelectBox = prev;
}
}, {
key: 'clearAllNext',
value: function clearAllNext() {
// console.log("clearAllNext");
this.clear();
if (this.nextSelectBox) {
this.nextSelectBox.hide();
this.nextSelectBox.clearAllNext();
}
}
}, {
key: 'clearAllPrev',
value: function clearAllPrev() {
this.clear();
if (this.prevSelectBox) {
this.clear();
this.hide();
// this.prevSelectBox.clear();
this.prevSelectBox.clearAllPrev();
}
}
}, {
key: '_onclickOptionsElement',
value: function _onclickOptionsElement(e) {
this.clearAllNext();
_get(TreeSelect.prototype.__proto__ || Object.getPrototypeOf(TreeSelect.prototype), '_onclickOptionsElement', this).call(this, e);
if (this.nextSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) {
this.nextSelectBox.setParent(this.selectedEl.id);
this.nextSelectBox.setHeader(this.selectedEl.value);
this.nextSelectBox.show();
}
if (this.prevSelectBox) this.prevSelectBox.$buttonAddOptions.hide();
}
}, {
key: '_onButtonAddOptions',
value: function _onButtonAddOptions(e) {
// this._addToSelectedContainer(this.selectedEl.id);
// this.clear();
// e.preventDefault();
// return false;
_get(TreeSelect.prototype.__proto__ || Object.getPrototypeOf(TreeSelect.prototype), '_onButtonAddOptions', this).call(this, e);
this.clearAllNext();
this.clearAllPrev();
}
}, {
key: '_onButtonAdd',
value: function _onButtonAdd(e) {
_get(TreeSelect.prototype.__proto__ || Object.getPrototypeOf(TreeSelect.prototype), '_onButtonAdd', this).call(this, e);
this.clearAllNext();
this.clearAllPrev();
}
}, {
key: '_addToSelectedContainer',
value: function _addToSelectedContainer(id) {
if (this.selectedContainer) {
this.selectedContainer.add(id);
return;
}
this.prevSelectBox._addToSelectedContainer(id);
}
}]);
return TreeSelect;
}(_AbsBaseSelect3.default);
exports.default = TreeSelect;
},{"./base/AbsBaseSelect":4,"./data/DataTree":5}],4:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
//TEMPLATES
var tmpl_selectBoxEditCont = function tmpl_selectBoxEditCont() {
return "\n <div class=\"row\">\n <div class=\"col-lg-3\">\n <input class=\"select-box-search\" type=\"text\" placeholder=\"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435/\u041F\u043E\u0438\u0441\u043A\">\n <button class=\"button-add options\">\u0414\u041E\u0411\u0410\u0412\u0418\u0422\u042C</button>\n </div>\n <div class=\"col-lg-9\">\n <span class=\"editable-container\"></span>\n </div>\n </div>\n";
};
var tmpl_selectBox = function tmpl_selectBox() {
return "\n <input class=\"select-box-search\" type=\"text\" placeholder=\"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435/\u041F\u043E\u0438\u0441\u043A\">\n <!--<span style=\"clear:both; display:block\"></span>-->\n <button class=\"button-add options\">\u0414\u041E\u0411\u0410\u0412\u0418\u0422\u042C</button>\n";
};
var tmpl_elementResult = function tmpl_elementResult(el, id, header) {
return "<li><label>\n <div class=\"header\">" + header + "</div>\n <input type=\"checkbox\" data-id=\"" + id + "\">" + el + "\n </label></li>";
};
var tmpl_elementOption = function tmpl_elementOption(el) {
return "<li data-id=\"" + el.id + "\">" + el.name + "</li>";
};
//${vertical_child}
var htmlTemplate = function htmlTemplate(_ref) {
var header = _ref.header,
selectBox = _ref.selectBox,
id = _ref.id,
classes = _ref.classes;
return "\n<div class=\"select-box-container " + classes + "\" id=\"" + id + "\">\n <div class=\"select-box-header\">\n <div class=\"header\">" + header + "</div>\n <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\" title=\"bla-bla-bla...\"></i>\n </div>\n <div class=\"select-box-search\">\n " + selectBox + "\n </div>\n <div class=\"select-box-options\">\n <div class=\"box-wrapper\">\n <ul>\n \n </ul>\n </div>\n </div>\n <div class=\"select-box-results\">\n <div class=\"box-wrapper\">\n <div class=\"main-part\">\n <ul>\n </ul>\n </div>\n <div class=\"other-part\">\n <span class=\"other-header\">\u0418\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0439</span>\n <ul>\n </ul>\n </div>\n </div>\n <button class=\"button-add results\">\u0414\u041E\u0411\u0410\u0412\u0418\u0422\u042C</button>\n </div>\n <span style=\"clear: both\"></span>\n</div>\n";
};
var tmpl_light = function tmpl_light(el) {
return "<span class=\"highlight\">" + el + "</span>";
};
var AbsBaseSelect = function () {
// constructor($container, data, hasEditableContainer, verticalChild) {
function AbsBaseSelect(_ref2) {
var $container = _ref2.$container,
data = _ref2.data,
_ref2$hasEditableCont = _ref2.hasEditableContainer,
hasEditableContainer = _ref2$hasEditableCont === undefined ? false : _ref2$hasEditableCont;
_classCallCheck(this, AbsBaseSelect);
if (new.target === AbsBaseSelect) {
throw new TypeError("Cannot construct Abstract instances directly");
}
//TODO: проверка наличия id контейнера
this.containerId = $container.attr("id");
this.dataTree = data;
// console.log("data = ", data);
// Вариант не выбран
this.hasEditableContainer = hasEditableContainer;
var classes = $container.attr('class');
if (classes) classes = classes.split(/\s+/);
var template = this.getTemplate(classes);
$container.replaceWith(template);
this._buildComponents();
this._bindEvents();
// if (!has_editable_container) this.hide();
// INIT EMPTY PROP
this.selectedEl = { id: undefined, value: undefined };
this.parentId = undefined;
this.hide();
}
// getTemplate(header, id, editable_container, vertical_child) {
_createClass(AbsBaseSelect, [{
key: "getTemplate",
value: function getTemplate(classes) {
var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
classes = classes ? classes.join(" ") : "";
return htmlTemplate({ header: "TestHeader", selectBox: selectBox, id: this.containerId, classes: classes });
}
}, {
key: "clear",
value: function clear() {
// console.log("clear");
this.$searchInput.val("");
this.$optionsBox.hide();
this.$resultsBox.hide();
this.$buttonAdd.hide();
this.$buttonAddOptions.hide();
this.selectedEl = { id: undefined, value: undefined };
if (this.hasEditableContainer) {
this.$editableContainer.html("");
this.$editableContainer.hide();
}
}
}, {
key: "hide",
value: function hide() {
this.$selectBox.hide();
}
}, {
key: "show",
value: function show() {
this.$selectBox.show();
}
}, {
key: "setHeader",
value: function setHeader(header) {
this.$header.html(header);
// default hide
this.show();
}
}, {
key: "setParent",
value: function setParent(parentId) {
this.parentId = parentId;
this._fillOptionsData();
}
}, {
key: "connectSelectedContainer",
value: function connectSelectedContainer(selectedContainer) {
this.selectedContainer = selectedContainer;
}
}, {
key: "getIdsSelectedElements",
value: function getIdsSelectedElements() {
var allChecked = this.$resultsBox.find(":checked");
return allChecked.map(function () {
return $(this).data("id");
});
}
}, {
key: "updateEditableContainer",
value: function updateEditableContainer(elId) {
// Если нет контейнера для отображения ...
if (this.$editableContainer.length) {
var separator = ' / ';
var chainHeader = AbsBaseSelect.getHeader(this.dataTree.getSpecChain(elId, true), { separator: separator });
// console.log('chainHeader = ', chainHeader);
chainHeader = AbsBaseSelect.highlight(chainHeader, separator, true);
var elTemplate = "<span class=\"\">" + chainHeader + "</span>";
this.$editableContainer.html(elTemplate);
this.$editableContainer.show();
return;
}
//..., передаем отображение предыдущему selectBox
if (this.prevSelectBox) this.prevSelectBox.updateEditableContainer(elId);
}
}, {
key: "_buildComponents",
value: function _buildComponents() {
this.$selectBox = $("#" + this.containerId);
this.$header = this.$selectBox.find('.select-box-header .header');
this.$resultsBox = this.$selectBox.find('.select-box-results');
this.$optionsBox = this.$selectBox.find('.select-box-options');
this.$searchInput = this.$selectBox.find('input.select-box-search');
this.$buttonAdd = this.$selectBox.find('.button-add.results');
this.$buttonAddOptions = this.$selectBox.find('.button-add.options');
this.$editableContainer = this.$selectBox.find('.editable-container');
if (this.hasEditableContainer) this.$editableContainer.hide();
this._fillOptionsData();
this.$resultsBox.hide();
this.$optionsBox.hide();
this.$buttonAddOptions.hide();
// TODO: сделать проверку на наличие всех нужных элементов и их корректый jq select
}
}, {
key: "_fillOptionsData",
value: function _fillOptionsData() {
var self = this;
var dataList = this.dataTree.dataToList(this.parentId);
var $container = this.$optionsBox.find('ul');
$container.html("");
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = dataList[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var el = _step.value;
$container.append($(tmpl_elementOption(el)));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
this.$selectBox.find('li').on("click", this._onclickOptionsElement.bind(self));
}
}, {
key: "_fillResultsData",
value: function _fillResultsData(searchText) {
var self = this;
function search(_ref3) {
var searchText = _ref3.searchText,
_ref3$parentCategoryI = _ref3.parentCategoryId,
parentCategoryId = _ref3$parentCategoryI === undefined ? null : _ref3$parentCategoryI,
_ref3$excludeCategory = _ref3.excludeCategoryId,
excludeCategoryId = _ref3$excludeCategory === undefined ? null : _ref3$excludeCategory;
// :FORMAT spec_list [{name, id}, ...]
var specList = self.dataTree.dataToList(parentCategoryId, true, excludeCategoryId);
// console.log("search -->", spec_list.length);
// console.log("parent_id ", parentCategoryId);
return specList.filter(function (el) {
return el.name.toLowerCase().indexOf(searchText.toLowerCase()) !== -1;
});
}
function fillContainer($container, template, _ref4) {
var _ref4$searchText = _ref4.searchText,
searchText = _ref4$searchText === undefined ? "" : _ref4$searchText,
_ref4$parentCategoryI = _ref4.parentCategoryId,
parentCategoryId = _ref4$parentCategoryI === undefined ? null : _ref4$parentCategoryI,
_ref4$excludeCategory = _ref4.excludeCategoryId,
excludeCategoryId = _ref4$excludeCategory === undefined ? null : _ref4$excludeCategory;
$container.html("");
$('.other-part').show();
var searchRes = search({ searchText: searchText, parentCategoryId: parentCategoryId, excludeCategoryId: excludeCategoryId });
// || (!excludeCategoryId && parentCategoryId === null)
// console.log("searchRes = ", searchRes);
if (!searchRes.length) {
if ($container.closest('div').hasClass('main-part')) {
$container.append('<li>Ничего не найдено</li>');
self.$resultsBox.find('.button-add.results').hide();
// console.log('not found main-part');
} else {
$('.other-part').hide();
// console.log('not found other-part');
}
return;
}
self.$resultsBox.find('.button-add.results').show();
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = searchRes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var el = _step2.value;
var header = AbsBaseSelect.getHeader(self.dataTree.getSpecChain(el.id), {});
$container.append(template(AbsBaseSelect.highlight(el.name, searchText), el.id, header));
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
// FILL RESULTS
// MAIN PART
var $container = this.$resultsBox.find('.main-part ul');
fillContainer($container, tmpl_elementResult, { searchText: searchText, parentCategoryId: self.parentId });
// OTHER PART
// Если нет parentId, не нужно искать в других категориях
// console.log("parentID = ", this.parentId);
if (!this.parentId) {
$('.other-part').hide();
} else {
$container = this.$resultsBox.find('.other-part ul');
// console.log("Fill other-part");
fillContainer($container, tmpl_elementResult, { searchText: searchText, excludeCategoryId: self.parentId });
}
this.$resultsBox.find('div.header').hide();
this.$resultsBox.find('li').on("mouseover", function (e) {
$(e.target).children('.header').show(300);
e.preventDefault();
});
this.$resultsBox.find('li').on("mouseout", function (event) {
var e = event.toElement || event.relatedTarget;
// console.log(e.parentNode, ' ==', this);
// console.log(e, ' ==', this);
if (e.parentNode == this || e == this) {
return;
}
// console.log("OUT");
$(this).find('.header').hide();
});
}
}, {
key: "_onclickOptionsElement",
value: function _onclickOptionsElement(e) {
this.selectedEl.id = $(e.target).data("id");
this.selectedEl.value = $(e.target).html();
this.$searchInput.val($(e.target).html());
this.updateEditableContainer($(e.target).data("id"));
this.$buttonAddOptions.show();
this.$optionsBox.hide();
}
}, {
key: "_onButtonAddOptions",
value: function _onButtonAddOptions(e) {
this._addToSelectedContainer(this.selectedEl.id);
this.clear();
e.preventDefault();
return false;
}
}, {
key: "_onButtonAdd",
value: function _onButtonAdd(e) {
var self = this;
this.getIdsSelectedElements().each(function () {
// console.log("add el -->", this);
self._addToSelectedContainer(this);
});
this.clear();
e.preventDefault();
return false;
}
}, {
key: "_addToSelectedContainer",
value: function _addToSelectedContainer(id) {
this.selectedContainer.add(id);
}
}, {
key: "_bindEvents",
value: function _bindEvents() {
var self = this;
$(document).click(function (event) {
if ($(event.target).closest("#" + self.containerId).length) {
return;
}
self._looseFocus();
});
// RESULTS BOX
this.$searchInput.on("input", function (e) {
self._fillResultsData(self.$searchInput.val());
self.$resultsBox.show();
self.$optionsBox.hide();
});
// OPTIONS BOX
this.$searchInput.on("click", function (e) {
self.$optionsBox.show();
self.$resultsBox.hide();
self.$buttonAddOptions.hide();
self.$searchInput.val("");
});
this.$buttonAdd.on("click", function (e) {
self._onButtonAdd(e);
});
this.$buttonAddOptions.on("click", this._onButtonAddOptions.bind(self));
}
}, {
key: "_looseFocus",
value: function _looseFocus() {
this.$resultsBox.hide();
this.$optionsBox.hide();
if (!this.selectedEl.id) {
this.$searchInput.val("");
} else {
this.$searchInput.val(this.selectedEl.value);
}
// console.log("loose ", this.selectedEl.id);
}
}], [{
key: "getHeader",
value: function getHeader(catChain, _ref5) {
var _ref5$separator = _ref5.separator,
separator = _ref5$separator === undefined ? " / " : _ref5$separator,
_ref5$maxLen = _ref5.maxLen,
maxLen = _ref5$maxLen === undefined ? 60 : _ref5$maxLen;
function toShortString(string, maxLen) {
return string.slice(0, maxLen) + (string.length > maxLen ? "..." : "");
}
var strChain = "";
catChain.forEach(function (el) {
strChain = (maxLen ? toShortString(el.name, maxLen) : el.name) + (strChain ? separator : "") + strChain;
});
return strChain;
}
}, {
key: "highlight",
value: function highlight(string, sub_string) {
var lastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var index = lastIndex ? string.toLowerCase().lastIndexOf(sub_string.toLowerCase()) : string.toLowerCase().indexOf(sub_string.toLowerCase());
// console.log("index = ", index);
if (index === -1) return string;
var before = void 0,
select = void 0,
after = void 0;
if (lastIndex) {
var _ref6 = [string.slice(0, index), string.slice(index, string.length), ""];
before = _ref6[0];
select = _ref6[1];
after = _ref6[2];
} else {
var _ref7 = [string.slice(0, index), string.slice(index, index + sub_string.length), string.slice(index + sub_string.length)];
before = _ref7[0];
select = _ref7[1];
after = _ref7[2];
}
return "" + before + tmpl_light(select) + after;
}
}]);
return AbsBaseSelect;
}();
exports.default = AbsBaseSelect;
},{}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Node = function Node(data, tree) {
_classCallCheck(this, Node);
this.name = data.name;
this.id = data.id;
if (data.parent === null) {
this.parent = "root";
data.parent = { id: "root" };
this.name = "";
}
if (data.parent.id && data.parent.id !== 'root') {
var el = tree._getElementById(data.parent.id);
this.parent = el.node || new Node(el, tree);
}
data.node = this;
this.children = data.children.map(function (el_obj) {
var el = tree._getElementById(el_obj.id);
if (!el) console.log("el not found with id", el_obj.id);
// console.log("el = ", el, "el.id = ", el_obj.id);
if (el.node) return el.node;
el.node = new Node(el, tree);
return el.node;
});
this.children = this.children || [];
};
var DataTree = function () {
function DataTree(data) {
_classCallCheck(this, DataTree);
this.baseData = data;
this._root = new Node(data[0], this);
}
/**
* получить element в базовой структуре
*/
_createClass(DataTree, [{
key: "_getElementById",
value: function _getElementById(id) {
for (var i = 0; i < this.baseData.length; i++) {
// console.log(this.baseData[i].id, " / ", id);
if (this.baseData[i].id == id) return this.baseData[i];
}
}
/**
* получить element в дереве
*/
}, {
key: "getElementById",
value: function getElementById(id) {
function searchInChildren(children) {
for (var i = 0; i < children.length; i++) {
if (children[i].id == id) return children[i];
var res = searchInChildren(children[i].children);
if (res) return res;
}
}
return searchInChildren(this._root.children);
}
/**
* Является ли узел c el_id дочерним для parent_id
* @param el_id
* @param parent_id
*/
}, {
key: "isChild",
value: function isChild(elId, parent_id) {
function checkParent(el, parent) {
if (el.parent == parent) return true;
if (el.parent && el.parent != 'root') return checkParent(el.parent, parent);
return false;
}
return checkParent(this.getElementById(elId), this.getElementById(parent_id));
}
}, {
key: "hasChildren",
value: function hasChildren(elId) {
console.log('id = ', elId);
return this.getElementById(elId).children.length ? true : false;
}
/**
* @param start_parent_id(number) - начиная с
* @param attached(bool) - включая вложенные/дочерние
* @param exclude_id - исключая узел c exclude_id и всеми его вложенными узлами
* @returns [{name, id}, ...]
*/
}, {
key: "dataToList",
value: function dataToList(start_parent_id, attached, exclude_id) {
var data_list = [];
function goInChildren(children) {
for (var i = 0; i < children.length; i++) {
if (children[i].id == exclude_id) continue;
data_list.push({ name: children[i].name, id: children[i].id });
if (attached) goInChildren(children[i].children);
}
}
var start = start_parent_id ? this.getElementById(start_parent_id) : this._root;
goInChildren(start.children);
return data_list;
}
/**
*
* @param id
* @param incl(bool) - исключая сам элемент
* @returns {Array} всех узлов/элементов от элемента с id до корня
*/
}, {
key: "getSpecChain",
value: function getSpecChain(id) {
var incl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var chain = [];
var el = this.getElementById(id);
console.log("el = ", el);
function getParent(el) {
if (el.parent && el.parent != "root") {
chain.push(el.parent);
getParent(el.parent);
}
}
getParent(el);
if (incl) chain.unshift(el);
return chain;
}
}]);
return DataTree;
}();
exports.default = DataTree;
},{}],6:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var NoTreeData = function () {
function NoTreeData(data) {
_classCallCheck(this, NoTreeData);
this.data = data;
this.specChain = [];
}
_createClass(NoTreeData, [{
key: "getElementById",
value: function getElementById(id) {
for (var i = 0; i < this.data.length; i++) {
if (this.data[i].id == id) return this.data[i];
}
}
}, {
key: "getSpecChain",
value: function getSpecChain(id, incl) {
return this.specChain;
}
}, {
key: "isChild",
value: function isChild(el_id, parent_id) {
return false;
}
}, {
key: "hasChildren",
value: function hasChildren() {
return false;
}
}, {
key: "dataToList",
value: function dataToList() {
return this.data;
}
}]);
return NoTreeData;
}();
exports.default = NoTreeData;
},{}],7:[function(require,module,exports){
'use strict';
var _SelectedContainer = require('./SelectedContainer');
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _NoTreeSelect = require('./NoTreeSelect');
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = require('./TreeSelect');
var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// `
$(function () {
function createFilterSpecs(_data) {
// SPECIALIZATIONS FILTER
var data = _data.results;
var sb_main = new _TreeSelect2.default({ $container: $('#select-box-1'), data: data, hasEditableContainer: true });
sb_main.setHeader("Специализации");
var select_container = new _SelectedContainer2.default($('#selected-spec'), data);
sb_main.connectSelectedContainer(select_container);
var sb_1 = new _TreeSelect2.default({ $container: $('#select-box-2'), data: data });
var sb_2 = new _TreeSelect2.default({ $container: $('#select-box-3'), data: data });
var sb_3 = new _TreeSelect2.default({ $container: $('#select-box-4'), data: data });
var sb_4 = new _TreeSelect2.default({ $container: $('#select-box-5'), data: data });
sb_main.setNearbySelectBox(sb_1);
sb_1.setNearbySelectBox(sb_2, sb_main);
sb_2.setNearbySelectBox(sb_3, sb_1);
sb_3.setNearbySelectBox(sb_4, sb_2);
sb_4.setNearbySelectBox("", sb_3);
}
function createFilterBuildingClass(_data) {
// BUILDING-CLASSIFICATION FILTER
var data = _data.results;
var sb_build_main = new _TreeSelect2.default({ $container: $('#sb-building-classification'), data: data });
sb_build_main.setHeader("Классификация здания");
var sb_build_1 = new _TreeSelect2.default({ $container: $('#sb-building-sub-classification'), data: data });
var select_build_container = new _SelectedContainer2.default($('#selected-building-classification'), data);
sb_build_main.connectSelectedContainer(select_build_container);
sb_build_main.setNearbySelectBox(sb_build_1);
sb_build_1.setNearbySelectBox("", sb_build_main);
}
function createFilterConstructionType(_data) {
var data = _data.results;
var sb_constr_main = new _NoTreeSelect2.default({ $container: $('#sb-construction-type'), data: data });
sb_constr_main.setHeader("Вид строительства");
var select_constr_type = new _SelectedContainer2.default($('#selected-construction-type'), data, true);
sb_constr_main.connectSelectedContainer(select_constr_type);
}
function createFilerLocations(data) {
var sb_loc_main = new _TreeSelect2.default({ $container: $('#sb-location-1'), data: data });
sb_loc_main.setHeader("Местоположение");
var select_loc = new _SelectedContainer2.default($('#selected-location'), data);
sb_loc_main.connectSelectedContainer(select_loc);
var sb_loc_1 = new _TreeSelect2.default({ $container: $('#sb-location-2'), data: data });
var sb_loc_2 = new _TreeSelect2.default({ $container: $('#sb-location-3'), data: data });
sb_loc_main.setNearbySelectBox(sb_loc_1);
sb_loc_1.setNearbySelectBox(sb_loc_2, sb_loc_main);
sb_loc_2.setNearbySelectBox("", sb_loc_1);
//TODO: Временно прелоадер на самом тяжелом объекте
// hidePreloader()
}
$.ajax({
url: '/api/specializations_flat',
dataType: 'json',
data: {},
success: createFilterSpecs
});
$.ajax({
url: '/api/building_classifications',
dataType: 'json',
data: {},
success: createFilterBuildingClass
});
$.ajax({
url: '/api/construction_type',
dataType: 'json',
data: {},
success: createFilterConstructionType
});
var data = [];
function fullData(_data) {
data = data.concat(_data.results.length ? _data.results : []);
var url = _data.next;
if (url) {
$.ajax({
url: url,
dataType: 'json',
data: {},
success: fullData
});
} else {
createFilerLocations(data);
}
return data;
}
fullData({ next: '/api/locations_flat', results: [] });
function tuneCheckBoxes($boxes) {
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
console.log("currentState = ", currentState);
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
var $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
var inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
// $(window).on('load',
// function hidePreloader() {
// var $preloader = $('#page-preloader'),
// $spinner = $preloader.find('.spinner');
// $spinner.fadeOut();
// $preloader.delay(350).fadeOut('slow');
// }
// $("#myBtn").click(function () {
// $('<div class="alert alert-success alert-dismissable">' +
// '<button type="button" class="close" ' +
// 'data-dismiss="alert" aria-hidden="true">' +
// '&times;' +
// '</button>' +
// 'modal info...' +
// '</div>').appendTo("#alerts");
// });
});
},{"./NoTreeSelect":1,"./SelectedContainer":2,"./TreeSelect":3}]},{},[7]);