PR-39 доработка фильтра поиска

Компоненты загружают данные асинхронно
Добавлен прелоадер компонентам
Исправлены ошибки и доработан дизайн компонентов
remotes/origin/PR-39
booblegum 9 years ago
parent 8de0f08d0c
commit 9047b08bdf
  1. 5
      archilance/settings/base.py
  2. 2
      assets/lib/proekton-components/bash/watchify.sh
  3. 4
      assets/lib/proekton-components/css/editable-container.css
  4. 16
      assets/lib/proekton-components/css/fix-bags.css
  5. 73
      assets/lib/proekton-components/css/other.css
  6. 76
      assets/lib/proekton-components/css/select-box.css
  7. 27
      assets/lib/proekton-components/css/selected-container.css
  8. BIN
      assets/lib/proekton-components/img/zoom.png
  9. 0
      assets/lib/proekton-components/img/zoom.svg
  10. BIN
      assets/lib/proekton-components/img/zoom1.png
  11. 472
      assets/lib/proekton-components/js/build/init.js
  12. 12
      assets/lib/proekton-components/js/src/NoTreeSelect.js
  13. 28
      assets/lib/proekton-components/js/src/SelectedContainer.js
  14. 19
      assets/lib/proekton-components/js/src/TreeSelect.js
  15. 82
      assets/lib/proekton-components/js/src/TreeSelectPreload.js
  16. 168
      assets/lib/proekton-components/js/src/base/AbsBaseSelect.js
  17. 4
      assets/lib/proekton-components/js/src/data/DataTree.js
  18. 0
      assets/lib/proekton-components/js/src/data/NoTreeData.js
  19. 89
      assets/lib/proekton-components/js/src/init.js
  20. 59
      assets/lib/proekton-components/js/src/init_example.js
  21. 144
      assets/lib/proekton-components/src/init.js
  22. 45
      assets/projects-filter.js
  23. 95
      projects/static/css/project_filter.css
  24. 0
      projects/static/img/checkbox_Check.png.png
  25. 0
      projects/static/img/checkbox_notCheck.png
  26. 40
      projects/templates/partials/inc-projects-filter.html
  27. 7
      projects/templates/project_filter.html
  28. 4
      projects/views.py

@ -57,6 +57,7 @@ LOCAL_APPS = [
'chat', 'chat',
'wallets', 'wallets',
'ratings', 'ratings',
# 'corsheaders',
] ]
WAGTAIL = [ WAGTAIL = [
@ -84,6 +85,7 @@ MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'archilance.middlewares.LocaleMiddleware', 'archilance.middlewares.LocaleMiddleware',
# 'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
@ -97,6 +99,9 @@ MIDDLEWARE_CLASSES = [
] ]
ROOT_URLCONF = 'archilance.urls' ROOT_URLCONF = 'archilance.urls'
#
# CORS_ORIGIN_ALLOW_ALL = True
# CORS_ALLOW_CREDENTIALS = True
TEMPLATES = [ TEMPLATES = [
{ {

@ -2,4 +2,4 @@
echo "run watchify" echo "run watchify"
cd .. cd ..
source ~/venv/proekton/bin/activate source ~/venv/proekton/bin/activate
watchify ./src/init.js -t babelify -o ./build/init.js watchify ./js/src/init.js -t babelify -o ./js/build/init.js

@ -10,7 +10,3 @@
position: relative; position: relative;
left: -30px; left: -30px;
} }
.vertical-child {
margin-top: 30px;
}

@ -1,16 +0,0 @@
body {
font-size: 11pt;
font-family: Arial-MT-Regular, Arial, sans-serif;
}
/*input[type="checkbox"] + span, input[type="checkbox"]:checked + span {*/
/*all: initial;*/
/*font-size: 9pt;*/
/*color: #494546;*/
/*cursor: pointer;*/
/*font-family: Arial-MT-Regular, Arial, sans-serif;*/
/*}*/
/*label {*/
/*all: initial;*/
/*}*/

@ -1,73 +0,0 @@
/*DEMO*/
.wrapper {
background-color: #f2f2f2;
padding: 40px;
margin: 50px 30px;
}
.form-container {
padding: 50px 45px;
}
.separator {
margin-top: 35px;
margin-bottom: 5px;
}
.custom-check{
cursor: pointer;
display: inline-block
}
.custom-check .checked{
background: url("../img/rect01.png") no-repeat center;
background-size: 210px 51px;
width: 210px;
height: 51px;
}
.custom-check .not-checked {
background: url("../img/rect02.png") no-repeat center;
background-size: 210px 51px;
width: 210px;
height: 51px;
}
.titleResF1, div p.titleResF1 {
font-size: 12pt;
}
.border:after {
background-color: #CFCFCF;
content: "";
display: inline-block;
height: 1px;
position: relative;
vertical-align: middle;
width: 100%;
}
.border:after {
left: 0.5em;
margin-right: -100%;
}
#page-preloader {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
background: #090909;
z-index: 100500;
}
#page-preloader .spinner {
width: 32px;
height: 32px;
position: absolute;
left: 50%;
top: 50%;
background: url('../img/ajax-loader.gif') no-repeat 50% 50%;
margin: -16px 0 0 -16px;
}

@ -4,28 +4,16 @@
-moz-user-select: none; /* Firefox */ -moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */ -ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; user-select: none;
/* Non-prefixed version, currently
not supported by any browser */
} }
/*input[type="checkbox"]:checked + span {*/
/*all: initial;*/
/*font-size: 9pt;*/
/*color: #494546;*/
/*}*/
.select-box-container { .select-box-container {
display: block; display: block;
/*margin-top: 40px;*/
/*min-width: 200px;*/
} }
.select-box-header { .select-box-header {
font-size: 12pt; font-size: 12pt;
white-space: nowrap; white-space: nowrap;
word-wrap: break-word; word-wrap: break-word;
/*position: relative;*/
/*top:10px;*/
} }
.select-box-header .header { .select-box-header .header {
@ -35,13 +23,12 @@
overflow: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
max-width: 220px; max-width: 220px;
} }
.select-box-header .fa { .select-box-header .fa {
color: #5e5e5e; color: #5e5e5e;
position: relative; position: relative;
top: -5px; top: -3px;
} }
.select-box-header .fa:hover { .select-box-header .fa:hover {
@ -53,8 +40,6 @@
} }
.select-box-results, .select-box-options { .select-box-results, .select-box-options {
/*display: block;*/
/*box-shadow: 0px 0px 10px #777, 0px 15px 10px #000;*/
position: absolute; position: absolute;
z-index: 99999; z-index: 99999;
opacity: 0.95; opacity: 0.95;
@ -64,9 +49,11 @@
display: block; display: block;
max-height: 200px; max-height: 200px;
overflow-y: auto; overflow-y: auto;
border-top: 1px solid #cccccc; border: 1px solid #cccccc;
/*border-right: 1px solid #cccccc;*/
/*border-left: 1px solid #cccccc;*/
background-color: #F2F2F2; background-color: #F2F2F2;
box-shadow: 5px 12px 10px -6px rgba(0, 0, 0, .2); box-shadow: 12px 12px 10px -6px rgba(0, 0, 0, .2);
} }
.select-box-results input[type=checkbox] { .select-box-results input[type=checkbox] {
@ -83,12 +70,17 @@
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.select-box-options ul {
border-right: 1px solid #cccccc;
}
.select-box-results ul:last-child{
border-bottom: none;
}
.select-box-results li, .select-box-options li { .select-box-results li, .select-box-options li {
padding: 2px 10px; padding: 2px 10px;
border: 1px solid #cccccc; border-bottom: 1px solid #cccccc;
/*border-right: 1px solid #cccccc;*/
list-style: none; list-style: none;
font-size: 9pt; font-size: 9pt;
color: #494546; color: #494546;
@ -107,13 +99,9 @@
border-left: 2px solid red; border-left: 2px solid red;
color: #0e0e0e; color: #0e0e0e;
} }
.select-box-search{
/*.select-box-results span:hover{*/ position: relative;
/*color: green;*/ }
/*}*/
/*.select-box-search{*/
/*position: relative;*/
/*}*/
input.select-box-search { input.select-box-search {
height: 51px; height: 51px;
@ -121,12 +109,16 @@ input.select-box-search {
border: 1px solid #cccccc; border: 1px solid #cccccc;
outline: none; outline: none;
padding: 5px 40px 5px 20px; padding: 5px 40px 5px 20px;
background: url("../img/magnifying-glass-308581.svg") no-repeat right; background: url("../img/zoom.svg") no-repeat right;
background-size: 40px 40px; background-size: 40px 40px;
background-color: white; background-color: white;
margin-bottom: -1px; margin-bottom: -1px;
} }
input.select-box-search.active{
border: 1px solid #FF0029;
}
input.select-box-search:-webkit-autofill, input.select-box-search:-webkit-autofill,
input.select-box-search:-webkit-autofill:hover, input.select-box-search:-webkit-autofill:hover,
input.select-box-search:-webkit-autofill:focus, input.select-box-search:-webkit-autofill:focus,
@ -135,11 +127,11 @@ input.select-box-search:-webkit-autofill {
/*-webkit-text-fill-color: black;*/ /*-webkit-text-fill-color: black;*/
/*-webkit-box-shadow: 0 0 0 1000px transparent inset;*/ /*-webkit-box-shadow: 0 0 0 1000px transparent inset;*/
transition: background-color 5000s ease-in-out 0s; transition: background-color 5000s ease-in-out 0s;
/*background: white;*/
} }
.select-box-results .main-part { .select-box-results .main-part {
display: block; display: block;
border-right: 1px solid #cccccc;
} }
.select-box-results .other-part { .select-box-results .other-part {
@ -155,7 +147,6 @@ input.select-box-search:-webkit-autofill {
/*???*/ /*???*/
.select-box-options .box-wrapper, .select-box-results { .select-box-options .box-wrapper, .select-box-results {
/*padding: 0 10px;*/
min-width: 300px; min-width: 300px;
max-width: 400px; max-width: 400px;
} }
@ -179,13 +170,32 @@ button.button-add {
border-radius: 15px; /* IE 9, Safari 5, Chrome */ border-radius: 15px; /* IE 9, Safari 5, Chrome */
background-color: #FF0029; background-color: #FF0029;
padding: 4px 15px 2px 15px; padding: 4px 15px 2px 15px;
/*border: none;*/
text-decoration: none; text-decoration: none;
color: white; color: white;
} }
.highlight { .highlight {
color: red; color: #FF0029;
} }
#component-preloader {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
background: #9fa4a4;
opacity: 0.2;
z-index: 100500;
}
#component-preloader .spinner {
width: 32px;
height: 32px;
position: absolute;
left: 50%;
top: 50%;
background: url('../img/ajax-loader.gif') no-repeat 50% 50%;
margin: -16px 0 0 -16px;
}

@ -1,12 +1,9 @@
.selected-container { .selected-container {
/*display: inline-block;*/
/*width: 100%;*/
min-height: 40px; min-height: 40px;
padding-bottom: 20px; padding-bottom: 20px;
} }
.selected-container .selected-element { .selected-container .selected-element {
/*display: inline-block;*/
padding: 5px 35px 5px 10px; padding: 5px 35px 5px 10px;
margin-top: 8px; margin-top: 8px;
min-height: 45px; min-height: 45px;
@ -17,40 +14,32 @@
-webkit-border-radius: 10px; /* Safari 4 */ -webkit-border-radius: 10px; /* Safari 4 */
border-radius: 10px; /* IE 9, Safari 5, Chrome */ border-radius: 10px; /* IE 9, Safari 5, Chrome */
} }
.horizontal .selected-element{
.horizontal .selected-element {
display: inline-block; display: inline-block;
} }
.selected-element .header,.name{ .selected-element .header, .name {
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
} }
.selected-element .header,.name {
.selected-element .header{ max-width: 300px;
}
.selected-element .header {
font-size: 7pt; font-size: 7pt;
color: #676363; color: #676363;
/*white-space: nowrap;*/
/*text-overflow: ellipsis;*/
/*overflow: hidden;*/
/*word-wrap: break-word;*/
/*width: 100%;*/
} }
.selected-element .name { .selected-element .name {
font-size: 11pt; font-size: 11pt;
/*white-space: nowrap;*/
/*text-overflow: ellipsis;*/
/*overflow: hidden;*/
/*width: 100%;*/
} }
.selected-element .icon-remove {
.selected-element .icon-remove{
background-image: url('../img/cross01.png'); background-image: url('../img/cross01.png');
background-size: 20px 20px; background-size: 20px 20px;
/*display: inline-block;*/
position: absolute; position: absolute;
right: 5px; right: 5px;
top: 15px; top: 15px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
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 _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 _AbsBaseSelect2 = require('./base/AbsBaseSelect');
var _AbsBaseSelect3 = _interopRequireDefault(_AbsBaseSelect2); var _AbsBaseSelect3 = _interopRequireDefault(_AbsBaseSelect2);
@ -26,19 +28,28 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
var NoTreeSelect = function (_AbsBaseSelect) { var NoTreeSelect = function (_AbsBaseSelect) {
_inherits(NoTreeSelect, _AbsBaseSelect); _inherits(NoTreeSelect, _AbsBaseSelect);
function NoTreeSelect(_ref) { function NoTreeSelect($container, _ref) {
var $container = _ref.$container, var url = _ref.url,
data = _ref.data; obj = _ref.obj,
_ref$visible = _ref.visible,
visible = _ref$visible === undefined ? true : _ref$visible;
_classCallCheck(this, NoTreeSelect); _classCallCheck(this, NoTreeSelect);
var _this = _possibleConstructorReturn(this, (NoTreeSelect.__proto__ || Object.getPrototypeOf(NoTreeSelect)).call(this, { $container: $container, data: new _NoTreeData2.default(data) })); //TODO: сделать автоматическую передачу всех параметров родителю
return _possibleConstructorReturn(this, (NoTreeSelect.__proto__ || Object.getPrototypeOf(NoTreeSelect)).call(this, $container, { url: url, obj: obj, visible: visible }));
_this.$buttonAddOptions.hide();
return _this;
} }
_createClass(NoTreeSelect, [{ _createClass(NoTreeSelect, [{
key: '_buildComponents',
value: function _buildComponents(data) {
_get(NoTreeSelect.prototype.__proto__ || Object.getPrototypeOf(NoTreeSelect.prototype), '_buildComponents', this).call(this, data);
this.dataTree = this.dataTree || new _NoTreeData2.default(data.results);
this.$buttonAddOptions.hide();
this._fillOptionsData();
this._bindEvents();
}
}, {
key: '_onclickOptionsElement', key: '_onclickOptionsElement',
value: function _onclickOptionsElement(e) { value: function _onclickOptionsElement(e) {
this.selectedEl.id = $(e.target).data("id"); this.selectedEl.id = $(e.target).data("id");
@ -92,17 +103,25 @@ var tmpl_selectedElement = function tmpl_selectedElement(header, name, id) {
}; };
var SelectedContainer = function () { var SelectedContainer = function () {
function SelectedContainer($container, data) { function SelectedContainer($container, _ref) {
var noTree = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var _this = this;
var obj = _ref.obj,
_ref$noTree = _ref.noTree,
noTree = _ref$noTree === undefined ? false : _ref$noTree;
_classCallCheck(this, SelectedContainer); _classCallCheck(this, SelectedContainer);
// TODO: rename variables to camelCase // TODO: rename variables to camelCase
this.$self = $container; this.$self = $container;
this.elements_id = []; // [spec_id, spec_id, ...] this.elements_id = []; // [spec_id, spec_id, ...]
this.dataTree = noTree ? new _NoTreeData2.default(data) : new _DataTree2.default(data); var self = this;
this.$input = this.$self.find('input[type="hidden"]');
this.restoreElements(); obj.dataPromise.then(function (data) {
_this.dataTree = noTree ? new _NoTreeData2.default(data.results) : new _DataTree2.default(data.results);
_this.$input = _this.$self.find('input[type="hidden"]');
_this.restoreElements();
}).catch(self._onLoadDataError.bind(self));
} }
_createClass(SelectedContainer, [{ _createClass(SelectedContainer, [{
@ -113,7 +132,6 @@ var SelectedContainer = function () {
var data = this.$input.val().split(',').filter(function (el) { var data = this.$input.val().split(',').filter(function (el) {
return el; return el;
}); });
console.log("restore data = ", data);
this.elements_id = []; this.elements_id = [];
data.forEach(function (el) { data.forEach(function (el) {
return self.add(el); return self.add(el);
@ -129,6 +147,11 @@ var SelectedContainer = function () {
} }
this.$self.find('span[data-id=\'' + spec_id + '\']').parents('.selected-element').remove(); this.$self.find('span[data-id=\'' + spec_id + '\']').parents('.selected-element').remove();
} }
}, {
key: '_onLoadDataError',
value: function _onLoadDataError(error) {
console.log("Error loading data -->", error);
}
}, { }, {
key: 'remove', key: 'remove',
value: function remove(e) { value: function remove(e) {
@ -147,10 +170,8 @@ var SelectedContainer = function () {
return self.dataTree.isChild(el, id); return self.dataTree.isChild(el, id);
}); });
// console.log(has_already);
if (has_already.length || this.elements_id.indexOf(Number(id)) != -1) { if (has_already.length || this.elements_id.indexOf(Number(id)) != -1) {
//TODO: do popup messages //TODO: do popup messages
console.log("Not actually");
return; return;
} }
@ -163,9 +184,6 @@ var SelectedContainer = function () {
}); });
var header = SelectedContainer.getHeader(this.dataTree.getSpecChain(id), "", max_len); 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; var name = this.dataTree.getElementById(id).name;
this.elements_id.push(id); this.elements_id.push(id);
if (this.$input) this.$input.val(this.elements_id.join(',')); if (this.$input) this.$input.val(this.elements_id.join(','));
@ -231,15 +249,18 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
var TreeSelect = function (_AbsBaseSelect) { var TreeSelect = function (_AbsBaseSelect) {
_inherits(TreeSelect, _AbsBaseSelect); _inherits(TreeSelect, _AbsBaseSelect);
function TreeSelect(_ref) { function TreeSelect($container, _ref) {
var $container = _ref.$container, var url = _ref.url,
data = _ref.data, obj = _ref.obj,
_ref$hasEditableConta = _ref.hasEditableContainer, _ref$hasEditableConta = _ref.hasEditableContainer,
hasEditableContainer = _ref$hasEditableConta === undefined ? false : _ref$hasEditableConta; hasEditableContainer = _ref$hasEditableConta === undefined ? false : _ref$hasEditableConta,
_ref$visible = _ref.visible,
visible = _ref$visible === undefined ? hasEditableContainer : _ref$visible;
_classCallCheck(this, TreeSelect); _classCallCheck(this, TreeSelect);
return _possibleConstructorReturn(this, (TreeSelect.__proto__ || Object.getPrototypeOf(TreeSelect)).call(this, { $container: $container, data: new _DataTree2.default(data), hasEditableContainer: hasEditableContainer })); //TODO: сделать автоматическую передачу всех параметров родителю
return _possibleConstructorReturn(this, (TreeSelect.__proto__ || Object.getPrototypeOf(TreeSelect)).call(this, $container, { url: url, obj: obj, hasEditableContainer: hasEditableContainer, visible: visible }));
} }
_createClass(TreeSelect, [{ _createClass(TreeSelect, [{
@ -251,7 +272,6 @@ var TreeSelect = function (_AbsBaseSelect) {
}, { }, {
key: 'clearAllNext', key: 'clearAllNext',
value: function clearAllNext() { value: function clearAllNext() {
// console.log("clearAllNext");
this.clear(); this.clear();
if (this.nextSelectBox) { if (this.nextSelectBox) {
this.nextSelectBox.hide(); this.nextSelectBox.hide();
@ -265,16 +285,26 @@ var TreeSelect = function (_AbsBaseSelect) {
if (this.prevSelectBox) { if (this.prevSelectBox) {
this.clear(); this.clear();
this.hide(); this.hide();
// this.prevSelectBox.clear();
this.prevSelectBox.clearAllPrev(); this.prevSelectBox.clearAllPrev();
} }
} }
}, {
key: '_buildComponents',
value: function _buildComponents(data) {
_get(TreeSelect.prototype.__proto__ || Object.getPrototypeOf(TreeSelect.prototype), '_buildComponents', this).call(this, data);
//TODO: Изменять свойство visible при show/hide
if (!this.visible) this.hide();
if (this.hasEditableContainer) this.$editableContainer.hide();
this.dataTree = this.dataTree || new _DataTree2.default(data.results);
this._fillOptionsData();
this._bindEvents();
}
}, { }, {
key: '_onclickOptionsElement', key: '_onclickOptionsElement',
value: function _onclickOptionsElement(e) { value: function _onclickOptionsElement(e) {
this.clearAllNext(); this.clearAllNext();
_get(TreeSelect.prototype.__proto__ || Object.getPrototypeOf(TreeSelect.prototype), '_onclickOptionsElement', this).call(this, e); _get(TreeSelect.prototype.__proto__ || Object.getPrototypeOf(TreeSelect.prototype), '_onclickOptionsElement', this).call(this, e);
if (this.prevSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) this.$searchInput.removeClass('active');
if (this.nextSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) { if (this.nextSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) {
this.nextSelectBox.setParent(this.selectedEl.id); this.nextSelectBox.setParent(this.selectedEl.id);
this.nextSelectBox.setHeader(this.selectedEl.value); this.nextSelectBox.setHeader(this.selectedEl.value);
@ -328,61 +358,117 @@ var _createClass = function () { function defineProperties(target, props) { for
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
//TEMPLATES //TEMPLATES `
var tmpl_selectBoxEditCont = function tmpl_selectBoxEditCont() { 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 _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$preloaderTemplat = _ref.preloaderTemplate,
preloaderTemplate = _ref$preloaderTemplat === undefined ? "" : _ref$preloaderTemplat;
return "\n <div class=\"row\">\n <div class=\"col-lg-3\">\n \n <div style=\"width: 100%; position: relative\">\n " + preloaderTemplate + "\n <input class=\"select-box-search\" type=\"text\" placeholder=\"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435/\u041F\u043E\u0438\u0441\u043A\">\n <button style=\"display: none\" class=\"button-add options\">\u0414\u041E\u0411\u0410\u0412\u0418\u0422\u042C</button>\n </div>\n </div>\n <div class=\"col-lg-9\">\n <span style=\"display: none\" class=\"editable-container\"></span>\n </div>\n </div>\n";
}; };
var tmpl_selectBox = function tmpl_selectBox() { 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 _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref2$preloaderTempla = _ref2.preloaderTemplate,
preloaderTemplate = _ref2$preloaderTempla === undefined ? "" : _ref2$preloaderTempla;
return " \n " + preloaderTemplate + "\n <input class=\"select-box-search\" type=\"text\" placeholder=\"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435/\u041F\u043E\u0438\u0441\u043A\">\n <button style=\"display: none\" class=\"button-add options\">\u0414\u041E\u0411\u0410\u0412\u0418\u0422\u042C</button>\n";
}; };
var tmpl_elementResult = function tmpl_elementResult(el, id, header) { 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>"; return "<li><label>\n <input type=\"checkbox\" data-id=\"" + id + "\">" + el + "\n <div class=\"header\">" + header + "</div>\n </label></li>";
}; };
var tmpl_elementOption = function tmpl_elementOption(el) { var tmpl_elementOption = function tmpl_elementOption(el) {
return "<li data-id=\"" + el.id + "\">" + el.name + "</li>"; return "<li data-id=\"" + el.id + "\">" + el.name + "</li>";
}; };
//${vertical_child}
var htmlTemplate = function htmlTemplate(_ref) { var tmpl_plug = function tmpl_plug(_ref3) {
var header = _ref.header, var header = _ref3.header,
selectBox = _ref.selectBox, selectBox = _ref3.selectBox;
id = _ref.id, return htmlTemplate({ header: header, selectBox: selectBox });
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_selectBoxOptions = function tmpl_selectBoxOptions() {
return "\n <div class=\"select-box-options\">\n <div class=\"box-wrapper\">\n <ul>\n \n </ul>\n </div>\n </div>\n";
};
var tmpl_selectBoxResults = function tmpl_selectBoxResults() {
return "\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";
};
var htmlTemplate = function htmlTemplate(_ref4) {
var header = _ref4.header,
selectBox = _ref4.selectBox,
_ref4$id = _ref4.id,
id = _ref4$id === undefined ? "" : _ref4$id,
_ref4$classes = _ref4.classes,
classes = _ref4$classes === undefined ? "" : _ref4$classes,
_ref4$tmpl_selectBoxO = _ref4.tmpl_selectBoxOptions,
tmpl_selectBoxOptions = _ref4$tmpl_selectBoxO === undefined ? function () {
return "";
} : _ref4$tmpl_selectBoxO,
_ref4$tmpl_selectBoxR = _ref4.tmpl_selectBoxResults,
tmpl_selectBoxResults = _ref4$tmpl_selectBoxR === undefined ? function () {
return "";
} : _ref4$tmpl_selectBoxR;
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 \n " + tmpl_selectBoxOptions() + "\n " + tmpl_selectBoxResults() + "\n <span style=\"clear: both\"></span>\n</div>\n";
}; };
var tmpl_light = function tmpl_light(el) { var tmpl_light = function tmpl_light(el) {
return "<span class=\"highlight\">" + el + "</span>"; return "<span class=\"highlight\">" + el + "</span>";
}; };
var tmpl_preloader = function tmpl_preloader() {
return "<div id=\"component-preloader\"><span class=\"spinner\"></span></div>";
};
var AbsBaseSelect = function () { var AbsBaseSelect = function () {
// constructor($container, data, hasEditableContainer, verticalChild) { function AbsBaseSelect($container, _ref5) {
function AbsBaseSelect(_ref2) { var url = _ref5.url,
var $container = _ref2.$container, obj = _ref5.obj,
data = _ref2.data, _ref5$hasEditableCont = _ref5.hasEditableContainer,
_ref2$hasEditableCont = _ref2.hasEditableContainer, hasEditableContainer = _ref5$hasEditableCont === undefined ? false : _ref5$hasEditableCont,
hasEditableContainer = _ref2$hasEditableCont === undefined ? false : _ref2$hasEditableCont; _ref5$visible = _ref5.visible,
visible = _ref5$visible === undefined ? false : _ref5$visible;
_classCallCheck(this, AbsBaseSelect); _classCallCheck(this, AbsBaseSelect);
if (new.target === AbsBaseSelect) { if (new.target === AbsBaseSelect) {
throw new TypeError("Cannot construct Abstract instances directly"); throw new TypeError("Cannot construct Abstract instances directly");
} }
if (obj && url) {
throw new URIError("Must be either the date or url");
}
var self = this;
//TODO: проверка наличия id контейнера //TODO: проверка наличия id контейнера
this.containerId = $container.attr("id"); this.containerId = $container.attr("id");
this.dataTree = data; this.$container = $container;
// console.log("data = ", data);
// Вариант не выбран
this.hasEditableContainer = hasEditableContainer; this.hasEditableContainer = hasEditableContainer;
var classes = $container.attr('class'); this.visible = visible;
if (classes) classes = classes.split(/\s+/); // Быстрая заглушка, до отображения данных
var template = this.getTemplate(classes); if (visible) {
$container.replaceWith(template); var preloaderTemplate = tmpl_preloader();
this._buildComponents(); var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont({ preloaderTemplate: preloaderTemplate }) : tmpl_selectBox({ preloaderTemplate: preloaderTemplate });
this._bindEvents(); var plugTemplate = tmpl_plug({ header: "Loading...", selectBox: selectBox });
// if (!has_editable_container) this.hide(); $container.html(plugTemplate);
this.$preloader = $container.find('#component-preloader');
this.$spinner = this.$preloader.find('.spinner');
}
if (url) this.dataPromise = this.getData(url);
var _dataPromise = void 0;
if (url) {
_dataPromise = this.dataPromise;
} else {
_dataPromise = obj.dataPromise;
}
// if (dataTree) this.dataTree = dataTree;
_dataPromise.then(self._buildComponents.bind(self)).catch(self._onLoadDataError.bind(self));
// INIT EMPTY PROP // INIT EMPTY PROP
this.selectedEl = { id: undefined, value: undefined }; this.selectedEl = { id: undefined, value: undefined };
this.parentId = undefined; this.parentId = undefined;
this.hide();
} }
// getTemplate(header, id, editable_container, vertical_child) { // getTemplate(header, id, editable_container, vertical_child) {
@ -393,12 +479,33 @@ var AbsBaseSelect = function () {
value: function getTemplate(classes) { value: function getTemplate(classes) {
var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox(); var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
classes = classes ? classes.join(" ") : ""; classes = classes ? classes.join(" ") : "";
return htmlTemplate({ header: "TestHeader", selectBox: selectBox, id: this.containerId, classes: classes }); return htmlTemplate({
header: "TestHeader", selectBox: selectBox, id: this.containerId, classes: classes,
tmpl_selectBoxOptions: tmpl_selectBoxOptions, tmpl_selectBoxResults: tmpl_selectBoxResults
});
}
}, {
key: "getData",
value: function getData(url) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var self = this;
return Promise.resolve($.ajax({
url: url,
dataType: 'json',
data: data
}));
}
}, {
key: "hidePreloader",
value: function hidePreloader() {
// console.log("hide preloader ", this.$preloader);
this.$spinner.fadeOut();
return Promise.resolve(this.$preloader.delay(500).fadeOut(2000));
} }
}, { }, {
key: "clear", key: "clear",
value: function clear() { value: function clear() {
// console.log("clear");
this.$searchInput.val(""); this.$searchInput.val("");
this.$optionsBox.hide(); this.$optionsBox.hide();
this.$resultsBox.hide(); this.$resultsBox.hide();
@ -423,15 +530,21 @@ var AbsBaseSelect = function () {
}, { }, {
key: "setHeader", key: "setHeader",
value: function setHeader(header) { value: function setHeader(header) {
this.$header.html(header);
if (this.$header) {
this.$header.html(header);
} else {
this.header = header;
}
// default hide // default hide
this.show(); // this.show();
} }
}, { }, {
key: "setParent", key: "setParent",
value: function setParent(parentId) { value: function setParent(parentId) {
this.parentId = parentId; this.parentId = parentId;
this._fillOptionsData(); this._fillOptionsData();
this.$searchInput.addClass('active');
} }
}, { }, {
key: "connectSelectedContainer", key: "connectSelectedContainer",
@ -453,7 +566,6 @@ var AbsBaseSelect = function () {
if (this.$editableContainer.length) { if (this.$editableContainer.length) {
var separator = ' / '; var separator = ' / ';
var chainHeader = AbsBaseSelect.getHeader(this.dataTree.getSpecChain(elId, true), { separator: separator }); var chainHeader = AbsBaseSelect.getHeader(this.dataTree.getSpecChain(elId, true), { separator: separator });
// console.log('chainHeader = ', chainHeader);
chainHeader = AbsBaseSelect.highlight(chainHeader, separator, true); chainHeader = AbsBaseSelect.highlight(chainHeader, separator, true);
var elTemplate = "<span class=\"\">" + chainHeader + "</span>"; var elTemplate = "<span class=\"\">" + chainHeader + "</span>";
this.$editableContainer.html(elTemplate); this.$editableContainer.html(elTemplate);
@ -465,21 +577,31 @@ var AbsBaseSelect = function () {
} }
}, { }, {
key: "_buildComponents", key: "_buildComponents",
value: function _buildComponents() { value: function _buildComponents(data) {
// AFTER PRELOAD
// this.hidePreloader().then(() => console.log("END -)"));
var classes = this.$container.attr('class');
if (classes) classes = classes.split(/\s+/);
var template = this.getTemplate(classes);
this.$container.replaceWith(template);
this.$selectBox = $("#" + this.containerId); this.$selectBox = $("#" + this.containerId);
this.$header = this.$selectBox.find('.select-box-header .header'); this.$header = this.$selectBox.find('.select-box-header .header');
this.$header.html(this.header);
this.$resultsBox = this.$selectBox.find('.select-box-results'); this.$resultsBox = this.$selectBox.find('.select-box-results');
this.$optionsBox = this.$selectBox.find('.select-box-options'); this.$optionsBox = this.$selectBox.find('.select-box-options');
this.$searchInput = this.$selectBox.find('input.select-box-search'); this.$searchInput = this.$selectBox.find('input.select-box-search');
this.$buttonAdd = this.$selectBox.find('.button-add.results'); this.$buttonAdd = this.$selectBox.find('.button-add.results');
this.$buttonAddOptions = this.$selectBox.find('.button-add.options'); this.$buttonAddOptions = this.$selectBox.find('.button-add.options');
this.$editableContainer = this.$selectBox.find('.editable-container'); this.$editableContainer = this.$selectBox.find('.editable-container');
if (this.hasEditableContainer) this.$editableContainer.hide();
this._fillOptionsData();
this.$resultsBox.hide(); this.$resultsBox.hide();
this.$optionsBox.hide(); this.$optionsBox.hide();
this.$buttonAddOptions.hide(); this.$buttonAddOptions.hide();
// TODO: сделать проверку на наличие всех нужных элементов и их корректый jq select // TODO: сделать проверку на наличие всех нужных элементов и их корректый jq select
// REDEFINE IN CHILD
// this.dataTree = data;
// this._bindEvents();
} }
}, { }, {
key: "_fillOptionsData", key: "_fillOptionsData",
@ -520,43 +642,38 @@ var AbsBaseSelect = function () {
value: function _fillResultsData(searchText) { value: function _fillResultsData(searchText) {
var self = this; var self = this;
function search(_ref3) { function search(_ref6) {
var searchText = _ref3.searchText, var searchText = _ref6.searchText,
_ref3$parentCategoryI = _ref3.parentCategoryId, _ref6$parentCategoryI = _ref6.parentCategoryId,
parentCategoryId = _ref3$parentCategoryI === undefined ? null : _ref3$parentCategoryI, parentCategoryId = _ref6$parentCategoryI === undefined ? null : _ref6$parentCategoryI,
_ref3$excludeCategory = _ref3.excludeCategoryId, _ref6$excludeCategory = _ref6.excludeCategoryId,
excludeCategoryId = _ref3$excludeCategory === undefined ? null : _ref3$excludeCategory; excludeCategoryId = _ref6$excludeCategory === undefined ? null : _ref6$excludeCategory;
// :FORMAT spec_list [{name, id}, ...] // :FORMAT spec_list [{name, id}, ...]
var specList = self.dataTree.dataToList(parentCategoryId, true, excludeCategoryId); 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 specList.filter(function (el) {
return el.name.toLowerCase().indexOf(searchText.toLowerCase()) !== -1; return el.name.toLowerCase().indexOf(searchText.toLowerCase()) !== -1;
}); });
} }
function fillContainer($container, template, _ref4) { function fillContainer($container, template, _ref7) {
var _ref4$searchText = _ref4.searchText, var _ref7$searchText = _ref7.searchText,
searchText = _ref4$searchText === undefined ? "" : _ref4$searchText, searchText = _ref7$searchText === undefined ? "" : _ref7$searchText,
_ref4$parentCategoryI = _ref4.parentCategoryId, _ref7$parentCategoryI = _ref7.parentCategoryId,
parentCategoryId = _ref4$parentCategoryI === undefined ? null : _ref4$parentCategoryI, parentCategoryId = _ref7$parentCategoryI === undefined ? null : _ref7$parentCategoryI,
_ref4$excludeCategory = _ref4.excludeCategoryId, _ref7$excludeCategory = _ref7.excludeCategoryId,
excludeCategoryId = _ref4$excludeCategory === undefined ? null : _ref4$excludeCategory; excludeCategoryId = _ref7$excludeCategory === undefined ? null : _ref7$excludeCategory;
$container.html(""); $container.html("");
$('.other-part').show(); $('.other-part').show();
var searchRes = search({ searchText: searchText, parentCategoryId: parentCategoryId, excludeCategoryId: excludeCategoryId }); var searchRes = search({ searchText: searchText, parentCategoryId: parentCategoryId, excludeCategoryId: excludeCategoryId });
// || (!excludeCategoryId && parentCategoryId === null) // || (!excludeCategoryId && parentCategoryId === null)
// console.log("searchRes = ", searchRes);
if (!searchRes.length) { if (!searchRes.length) {
if ($container.closest('div').hasClass('main-part')) { if ($container.closest('div').hasClass('main-part')) {
$container.append('<li>Ничего не найдено</li>'); $container.append('<li>Ничего не найдено</li>');
self.$resultsBox.find('.button-add.results').hide(); self.$resultsBox.find('.button-add.results').hide();
// console.log('not found main-part');
} else { } else {
$('.other-part').hide(); $('.other-part').hide();
// console.log('not found other-part');
} }
return; return;
} }
@ -595,12 +712,10 @@ var AbsBaseSelect = function () {
// OTHER PART // OTHER PART
// Если нет parentId, не нужно искать в других категориях // Если нет parentId, не нужно искать в других категориях
// console.log("parentID = ", this.parentId);
if (!this.parentId) { if (!this.parentId) {
$('.other-part').hide(); $('.other-part').hide();
} else { } else {
$container = this.$resultsBox.find('.other-part ul'); $container = this.$resultsBox.find('.other-part ul');
// console.log("Fill other-part");
fillContainer($container, tmpl_elementResult, { searchText: searchText, excludeCategoryId: self.parentId }); fillContainer($container, tmpl_elementResult, { searchText: searchText, excludeCategoryId: self.parentId });
} }
this.$resultsBox.find('div.header').hide(); this.$resultsBox.find('div.header').hide();
@ -611,12 +726,9 @@ var AbsBaseSelect = function () {
this.$resultsBox.find('li').on("mouseout", function (event) { this.$resultsBox.find('li').on("mouseout", function (event) {
var e = event.toElement || event.relatedTarget; var e = event.toElement || event.relatedTarget;
// console.log(e.parentNode, ' ==', this);
// console.log(e, ' ==', this);
if (e.parentNode == this || e == this) { if (e.parentNode == this || e == this) {
return; return;
} }
// console.log("OUT");
$(this).find('.header').hide(); $(this).find('.header').hide();
}); });
} }
@ -635,6 +747,7 @@ var AbsBaseSelect = function () {
value: function _onButtonAddOptions(e) { value: function _onButtonAddOptions(e) {
this._addToSelectedContainer(this.selectedEl.id); this._addToSelectedContainer(this.selectedEl.id);
this.clear(); this.clear();
this.$searchInput.removeClass('active');
e.preventDefault(); e.preventDefault();
return false; return false;
} }
@ -644,13 +757,17 @@ var AbsBaseSelect = function () {
var self = this; var self = this;
this.getIdsSelectedElements().each(function () { this.getIdsSelectedElements().each(function () {
// console.log("add el -->", this);
self._addToSelectedContainer(this); self._addToSelectedContainer(this);
}); });
this.clear(); this.clear();
e.preventDefault(); e.preventDefault();
return false; return false;
} }
}, {
key: "_onLoadDataError",
value: function _onLoadDataError(error) {
console.log("Error loading data -->", error);
}
}, { }, {
key: "_addToSelectedContainer", key: "_addToSelectedContainer",
value: function _addToSelectedContainer(id) { value: function _addToSelectedContainer(id) {
@ -696,15 +813,14 @@ var AbsBaseSelect = function () {
} else { } else {
this.$searchInput.val(this.selectedEl.value); this.$searchInput.val(this.selectedEl.value);
} }
// console.log("loose ", this.selectedEl.id);
} }
}], [{ }], [{
key: "getHeader", key: "getHeader",
value: function getHeader(catChain, _ref5) { value: function getHeader(catChain, _ref8) {
var _ref5$separator = _ref5.separator, var _ref8$separator = _ref8.separator,
separator = _ref5$separator === undefined ? " / " : _ref5$separator, separator = _ref8$separator === undefined ? " / " : _ref8$separator,
_ref5$maxLen = _ref5.maxLen, _ref8$maxLen = _ref8.maxLen,
maxLen = _ref5$maxLen === undefined ? 60 : _ref5$maxLen; maxLen = _ref8$maxLen === undefined ? 60 : _ref8$maxLen;
function toShortString(string, maxLen) { function toShortString(string, maxLen) {
return string.slice(0, maxLen) + (string.length > maxLen ? "..." : ""); return string.slice(0, maxLen) + (string.length > maxLen ? "..." : "");
@ -724,21 +840,20 @@ var AbsBaseSelect = function () {
var lastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 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()); var index = lastIndex ? string.toLowerCase().lastIndexOf(sub_string.toLowerCase()) : string.toLowerCase().indexOf(sub_string.toLowerCase());
// console.log("index = ", index);
if (index === -1) return string; if (index === -1) return string;
var before = void 0, var before = void 0,
select = void 0, select = void 0,
after = void 0; after = void 0;
if (lastIndex) { if (lastIndex) {
var _ref6 = [string.slice(0, index), string.slice(index, string.length), ""]; var _ref9 = [string.slice(0, index), string.slice(index, string.length), ""];
before = _ref6[0]; before = _ref9[0];
select = _ref6[1]; select = _ref9[1];
after = _ref6[2]; after = _ref9[2];
} else { } else {
var _ref7 = [string.slice(0, index), string.slice(index, index + sub_string.length), string.slice(index + sub_string.length)]; var _ref10 = [string.slice(0, index), string.slice(index, index + sub_string.length), string.slice(index + sub_string.length)];
before = _ref7[0]; before = _ref10[0];
select = _ref7[1]; select = _ref10[1];
after = _ref7[2]; after = _ref10[2];
} }
return "" + before + tmpl_light(select) + after; return "" + before + tmpl_light(select) + after;
@ -778,8 +893,6 @@ var Node = function Node(data, tree) {
data.node = this; data.node = this;
this.children = data.children.map(function (el_obj) { this.children = data.children.map(function (el_obj) {
var el = tree._getElementById(el_obj.id); 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; if (el.node) return el.node;
el.node = new Node(el, tree); el.node = new Node(el, tree);
return el.node; return el.node;
@ -805,7 +918,6 @@ var DataTree = function () {
key: "_getElementById", key: "_getElementById",
value: function _getElementById(id) { value: function _getElementById(id) {
for (var i = 0; i < this.baseData.length; i++) { 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]; if (this.baseData[i].id == id) return this.baseData[i];
} }
} }
@ -847,7 +959,6 @@ var DataTree = function () {
}, { }, {
key: "hasChildren", key: "hasChildren",
value: function hasChildren(elId) { value: function hasChildren(elId) {
console.log('id = ', elId);
return this.getElementById(elId).children.length ? true : false; return this.getElementById(elId).children.length ? true : false;
} }
@ -889,7 +1000,6 @@ var DataTree = function () {
var chain = []; var chain = [];
var el = this.getElementById(id); var el = this.getElementById(id);
console.log("el = ", el);
function getParent(el) { function getParent(el) {
if (el.parent && el.parent != "root") { if (el.parent && el.parent != "root") {
chain.push(el.parent); chain.push(el.parent);
@ -977,20 +1087,20 @@ var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// `
$(function () { $(function () {
function createFilterSpecs(_data) { function createFilterSpecs(url) {
// SPECIALIZATIONS FILTER // SPECIALIZATIONS FILTER
var data = _data.results; var sb_main = new _TreeSelect2.default($('#select-box-1'), { url: url, hasEditableContainer: true });
var sb_main = new _TreeSelect2.default({ $container: $('#select-box-1'), data: data, hasEditableContainer: true });
sb_main.setHeader("Специализации"); sb_main.setHeader("Специализации");
var select_container = new _SelectedContainer2.default($('#selected-spec'), data); var select_container = new _SelectedContainer2.default($('#selected-spec'), { obj: sb_main });
sb_main.connectSelectedContainer(select_container); sb_main.connectSelectedContainer(select_container);
var sb_1 = new _TreeSelect2.default({ $container: $('#select-box-2'), data: data }); var sb_1 = new _TreeSelect2.default($('#select-box-2'), { obj: sb_main });
var sb_2 = new _TreeSelect2.default({ $container: $('#select-box-3'), data: data }); var sb_2 = new _TreeSelect2.default($('#select-box-3'), { obj: sb_main });
var sb_3 = new _TreeSelect2.default({ $container: $('#select-box-4'), data: data }); var sb_3 = new _TreeSelect2.default($('#select-box-4'), { obj: sb_main });
var sb_4 = new _TreeSelect2.default({ $container: $('#select-box-5'), data: data }); var sb_4 = new _TreeSelect2.default($('#select-box-5'), { obj: sb_main });
// let sb_2 = new TreeSelect({$container: $('#select-box-3'), data: data});
// let sb_3 = new TreeSelect({$container: $('#select-box-4'), data: data});
// let sb_4 = new TreeSelect({$container: $('#select-box-5'), data: data});
sb_main.setNearbySelectBox(sb_1); sb_main.setNearbySelectBox(sb_1);
sb_1.setNearbySelectBox(sb_2, sb_main); sb_1.setNearbySelectBox(sb_2, sb_main);
@ -999,122 +1109,64 @@ $(function () {
sb_4.setNearbySelectBox("", sb_3); sb_4.setNearbySelectBox("", sb_3);
} }
function createFilterBuildingClass(_data) { function createFilterBuildingClass(url) {
// BUILDING-CLASSIFICATION FILTER // BUILDING-CLASSIFICATION FILTER
var data = _data.results; var sb_build_main = new _TreeSelect2.default($('#sb-building-classification'), { url: url, visible: true });
var sb_build_main = new _TreeSelect2.default({ $container: $('#sb-building-classification'), data: data });
sb_build_main.setHeader("Классификация здания"); sb_build_main.setHeader("Классификация здания");
var sb_build_1 = new _TreeSelect2.default({ $container: $('#sb-building-sub-classification'), data: data }); var sb_build_1 = new _TreeSelect2.default($('#sb-building-sub-classification'), { obj: sb_build_main });
var select_build_container = new _SelectedContainer2.default($('#selected-building-classification'), data); var select_build_container = new _SelectedContainer2.default($('#selected-building-classification'), { obj: sb_build_main });
sb_build_main.connectSelectedContainer(select_build_container); sb_build_main.connectSelectedContainer(select_build_container);
sb_build_main.setNearbySelectBox(sb_build_1); sb_build_main.setNearbySelectBox(sb_build_1);
sb_build_1.setNearbySelectBox("", sb_build_main); sb_build_1.setNearbySelectBox("", sb_build_main);
} }
function createFilterConstructionType(_data) { function createFilterConstructionType(url) {
var data = _data.results; var sb_constr_main = new _NoTreeSelect2.default($('#sb-construction-type'), { url: url, visible: true });
var sb_constr_main = new _NoTreeSelect2.default({ $container: $('#sb-construction-type'), data: data });
sb_constr_main.setHeader("Вид строительства"); sb_constr_main.setHeader("Вид строительства");
var select_constr_type = new _SelectedContainer2.default($('#selected-construction-type'), data, true); var select_constr_type = new _SelectedContainer2.default($('#selected-construction-type'), { obj: sb_constr_main, noTree: true });
sb_constr_main.connectSelectedContainer(select_constr_type); sb_constr_main.connectSelectedContainer(select_constr_type);
} }
function createFilerLocations(data) { function createFilerLocations(url) {
var sb_loc_main = new _TreeSelect2.default({ $container: $('#sb-location-1'), data: data }); var sb_loc_main = new _TreeSelect2.default($('#sb-location-1'), { url: url, visible: true });
sb_loc_main.setHeader("Местоположение"); sb_loc_main.setHeader("Местоположение");
var select_loc = new _SelectedContainer2.default($('#selected-location'), data); var select_loc = new _SelectedContainer2.default($('#selected-location'), { obj: sb_loc_main });
sb_loc_main.connectSelectedContainer(select_loc); sb_loc_main.connectSelectedContainer(select_loc);
var sb_loc_1 = new _TreeSelect2.default({ $container: $('#sb-location-2'), data: data }); var sb_loc_1 = new _TreeSelect2.default($('#sb-location-2'), { obj: sb_loc_main });
var sb_loc_2 = new _TreeSelect2.default({ $container: $('#sb-location-3'), data: data }); var sb_loc_2 = new _TreeSelect2.default($('#sb-location-3'), { obj: sb_loc_main });
sb_loc_main.setNearbySelectBox(sb_loc_1); sb_loc_main.setNearbySelectBox(sb_loc_1);
sb_loc_1.setNearbySelectBox(sb_loc_2, sb_loc_main); sb_loc_1.setNearbySelectBox(sb_loc_2, sb_loc_main);
sb_loc_2.setNearbySelectBox("", sb_loc_1); 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: [] }); createFilterSpecs('/api/specializations_flat');
createFilterBuildingClass('/api/building_classifications');
function tuneCheckBoxes($boxes) { createFilterConstructionType('/api/construction_type');
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked'; createFilerLocations('/api/locations_flat');
console.log("currentState = ", currentState);
// let data = [];
$boxes.find("div").hide();
$boxes.find("div." + currentState).show(); // function fullData(_data) {
} // data = data.concat(_data.results.length ? _data.results : []);
// let url = _data.next;
var $boxes = $('.custom-check'); // if (url) {
tuneCheckBoxes($boxes); // $.ajax({
$boxes.on("click", function (e) { // url: url,
var inside_checkBox = $(e.target).parent().find("input"); // dataType: 'json',
inside_checkBox.prop("checked", !inside_checkBox.prop("checked")); // data: {},
tuneCheckBoxes($boxes); // success: fullData
e.preventDefault(); // });
return false; // } else {
}); // createFilerLocations(data);
// }
// $(window).on('load', // return data;
// function hidePreloader() {
// var $preloader = $('#page-preloader'),
// $spinner = $preloader.find('.spinner');
// $spinner.fadeOut();
// $preloader.delay(350).fadeOut('slow');
// } // }
//
// fullData({next: '/api/locations_flat', results: []});
// $("#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]); },{"./NoTreeSelect":1,"./SelectedContainer":2,"./TreeSelect":3}]},{},[7]);

@ -2,9 +2,17 @@ import AbsBaseSelect from './base/AbsBaseSelect'
import NoTreeData from './data/NoTreeData' import NoTreeData from './data/NoTreeData'
export default class NoTreeSelect extends AbsBaseSelect{ export default class NoTreeSelect extends AbsBaseSelect{
constructor({$container, data}){ constructor($container, {url, obj, visible=true}){
super({$container, data: new NoTreeData(data)}); //TODO: сделать автоматическую передачу всех параметров родителю
super($container, {url, obj, visible});
}
_buildComponents(data) {
super._buildComponents(data);
this.dataTree = this.dataTree || new NoTreeData(data.results);
this.$buttonAddOptions.hide(); this.$buttonAddOptions.hide();
this._fillOptionsData();
this._bindEvents();
} }
_onclickOptionsElement(e) { _onclickOptionsElement(e) {

@ -16,20 +16,30 @@ let tmpl_selectedElement = (header, name, id) =>
`; `;
export default class SelectedContainer { export default class SelectedContainer {
constructor($container, data, noTree = false) { constructor($container, {obj, noTree = false}) {
// TODO: rename variables to camelCase // TODO: rename variables to camelCase
this.$self = $container; this.$self = $container;
this.elements_id = []; // [spec_id, spec_id, ...] this.elements_id = []; // [spec_id, spec_id, ...]
this.dataTree = noTree ? new NoTreeData(data) : new DataTree(data); const self = this;
this.$input = this.$self.find('input[type="hidden"]');
this.restoreElements(); obj.dataPromise
.then(
(data) => {
this.dataTree = noTree ? new NoTreeData(data.results) : new DataTree(data.results);
this.$input = this.$self.find('input[type="hidden"]');
this.restoreElements();
}
)
.catch(
self._onLoadDataError.bind(self)
);
} }
restoreElements() { restoreElements() {
const self = this; const self = this;
if (this.$input && this.$input.val()) { if (this.$input && this.$input.val()) {
let data = this.$input.val().split(',').filter((el) => el); let data = this.$input.val().split(',').filter((el) => el);
console.log("restore data = ", data);
this.elements_id = []; this.elements_id = [];
data.forEach((el) => self.add(el)); data.forEach((el) => self.add(el));
} }
@ -62,6 +72,11 @@ export default class SelectedContainer {
this.$self.find(`span[data-id='${spec_id}']`).parents('.selected-element').remove(); this.$self.find(`span[data-id='${spec_id}']`).parents('.selected-element').remove();
} }
_onLoadDataError(error) {
console.log("Error loading data -->", error);
}
remove(e) { remove(e) {
let spec_id = $(e.target).data("id"); let spec_id = $(e.target).data("id");
this._removeById(spec_id); this._removeById(spec_id);
@ -77,10 +92,8 @@ export default class SelectedContainer {
return self.dataTree.isChild(el, id) return self.dataTree.isChild(el, id)
}); });
// console.log(has_already);
if (has_already.length || (this.elements_id).indexOf(Number(id)) != -1) { if (has_already.length || (this.elements_id).indexOf(Number(id)) != -1) {
//TODO: do popup messages //TODO: do popup messages
console.log("Not actually");
return; return;
} }
@ -93,7 +106,6 @@ export default class SelectedContainer {
}); });
const header = SelectedContainer.getHeader(this.dataTree.getSpecChain(id), "", max_len); const header = SelectedContainer.getHeader(this.dataTree.getSpecChain(id), "", max_len);
// console.log("header = ", header);
const name = this.dataTree.getElementById(id).name; const name = this.dataTree.getElementById(id).name;
this.elements_id.push(id); this.elements_id.push(id);
if (this.$input) this.$input.val(this.elements_id.join(',')); if (this.$input) this.$input.val(this.elements_id.join(','));

@ -2,8 +2,9 @@ import AbsBaseSelect from './base/AbsBaseSelect'
import DataTree from './data/DataTree' import DataTree from './data/DataTree'
export default class TreeSelect extends AbsBaseSelect{ export default class TreeSelect extends AbsBaseSelect{
constructor({$container, data, hasEditableContainer = false}){ constructor($container, {url, obj, hasEditableContainer = false, visible = hasEditableContainer}){
super({$container, data: new DataTree(data), hasEditableContainer}); //TODO: сделать автоматическую передачу всех параметров родителю
super($container, {url, obj, hasEditableContainer, visible});
} }
setNearbySelectBox(next, prev) { setNearbySelectBox(next, prev) {
@ -12,7 +13,6 @@ export default class TreeSelect extends AbsBaseSelect{
} }
clearAllNext() { clearAllNext() {
// console.log("clearAllNext");
this.clear(); this.clear();
if (this.nextSelectBox) { if (this.nextSelectBox) {
this.nextSelectBox.hide(); this.nextSelectBox.hide();
@ -25,15 +25,24 @@ export default class TreeSelect extends AbsBaseSelect{
if (this.prevSelectBox) { if (this.prevSelectBox) {
this.clear(); this.clear();
this.hide(); this.hide();
// this.prevSelectBox.clear();
this.prevSelectBox.clearAllPrev() this.prevSelectBox.clearAllPrev()
} }
} }
_buildComponents(data) {
super._buildComponents(data);
//TODO: Изменять свойство visible при show/hide
if (!this.visible) this.hide();
if (this.hasEditableContainer) this.$editableContainer.hide();
this.dataTree = this.dataTree || new DataTree(data.results);
this._fillOptionsData();
this._bindEvents();
}
_onclickOptionsElement(e) { _onclickOptionsElement(e) {
this.clearAllNext(); this.clearAllNext();
super._onclickOptionsElement(e); super._onclickOptionsElement(e);
if (this.prevSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) this.$searchInput.removeClass('active');
if (this.nextSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) { if (this.nextSelectBox && this.dataTree.hasChildren(this.selectedEl.id)) {
this.nextSelectBox.setParent(this.selectedEl.id); this.nextSelectBox.setParent(this.selectedEl.id);
this.nextSelectBox.setHeader(this.selectedEl.value); this.nextSelectBox.setHeader(this.selectedEl.value);

@ -0,0 +1,82 @@
// `
import DataTree from './data/DataTree'
const tmpl_selectBoxEditCont = () =>`
<div class="row">
<div class="col-lg-3">
<div id="component-preloader"><span class="spinner"></span></div>
<input disabled class="select-box-search" type="text" placeholder="Выберите/Поиск">
</div>
<div class="col-lg-9">
</div>
</div>
`;
const tmpl_plug = ({header, selectBox}) =>
`
<div class="select-box-container">
<div class="select-box-header">
<div class="header">${header}</div>
<i class="fa fa-question-circle-o" aria-hidden="true" title="bla-bla-bla..."></i>
</div>
<div class="select-box-search">
${selectBox}
</div>
</div>
`;
export default class TreeSelectPreload {
constructor($container, {url}) {
let template = this.getTemplate();
$container.html(template);
this.$preloader = $container.find('#component-preloader');
this.$spinner = this.$preloader.find('.spinner');
this.getData(url)
}
hidePreloader() {
// console.log("hide preloader ", this.$preloader);
this.$spinner.fadeOut();
this.$preloader.delay(350).fadeOut('slow');
}
getData(url, data = {}) {
const self = this;
$.ajax({
url: url,
dataType: 'json',
data: data,
success: self._buildComponents.bind(self),
error: self._onLoadDataError.bind(self),
});
}
getTemplate() {
let selectBox = tmpl_selectBoxEditCont();
return tmpl_plug({header: "TestHeader", selectBox})
}
_buildComponents(data) {
console.log("loading data =", data);
// console.log("this =", this);
this.hidePreloader();
// 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.$editableContainer = this.$selectBox.find('.editable-container');
// this._fillOptionsData();
// this.$resultsBox.hide();
// this.$optionsBox.hide();
// this.$buttonAddOptions.hide();
}
_fillOptionsData() {
}
_onLoadDataError(error) {
console.log("Error loading data -->", error);
}
}

@ -1,38 +1,41 @@
//TEMPLATES //TEMPLATES `
const tmpl_selectBoxEditCont = () =>` const tmpl_selectBoxEditCont = ({preloaderTemplate = ""}={}) =>
`
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-3">
<input class="select-box-search" type="text" placeholder="Выберите/Поиск">
<button class="button-add options">ДОБАВИТЬ</button> <div style="width: 100%; position: relative">
</div> ${preloaderTemplate}
<input class="select-box-search" type="text" placeholder="Выберите/Поиск">
<button style="display: none" class="button-add options">ДОБАВИТЬ</button>
</div>
</div>
<div class="col-lg-9"> <div class="col-lg-9">
<span class="editable-container"></span> <span style="display: none" class="editable-container"></span>
</div> </div>
</div> </div>
`; `;
const tmpl_selectBox = () =>`
const tmpl_selectBox = ({preloaderTemplate = ""}={}) =>
`
${preloaderTemplate}
<input class="select-box-search" type="text" placeholder="Выберите/Поиск"> <input class="select-box-search" type="text" placeholder="Выберите/Поиск">
<!--<span style="clear:both; display:block"></span>--> <button style="display: none" class="button-add options">ДОБАВИТЬ</button>
<button class="button-add options">ДОБАВИТЬ</button>
`; `;
const tmpl_elementResult = (el, id, header) => const tmpl_elementResult = (el, id, header) =>
`<li><label> `<li><label>
<div class="header">${header}</div>
<input type="checkbox" data-id="${id}">${el} <input type="checkbox" data-id="${id}">${el}
<div class="header">${header}</div>
</label></li>`; </label></li>`;
const tmpl_elementOption = (el) => const tmpl_elementOption = (el) =>
`<li data-id="${el.id}">${el.name}</li>`; `<li data-id="${el.id}">${el.name}</li>`;
//${vertical_child}
const htmlTemplate = ({header, selectBox, id, classes}) => const tmpl_plug = ({header, selectBox}) => htmlTemplate({header, selectBox});
const tmpl_selectBoxOptions = () =>
` `
<div class="select-box-container ${classes}" id="${id}">
<div class="select-box-header">
<div class="header">${header}</div>
<i class="fa fa-question-circle-o" aria-hidden="true" title="bla-bla-bla..."></i>
</div>
<div class="select-box-search">
${selectBox}
</div>
<div class="select-box-options"> <div class="select-box-options">
<div class="box-wrapper"> <div class="box-wrapper">
<ul> <ul>
@ -40,6 +43,10 @@ const htmlTemplate = ({header, selectBox, id, classes}) =>
</ul> </ul>
</div> </div>
</div> </div>
`;
const tmpl_selectBoxResults = () =>
`
<div class="select-box-results"> <div class="select-box-results">
<div class="box-wrapper"> <div class="box-wrapper">
<div class="main-part"> <div class="main-part">
@ -54,42 +61,104 @@ const htmlTemplate = ({header, selectBox, id, classes}) =>
</div> </div>
<button class="button-add results">ДОБАВИТЬ</button> <button class="button-add results">ДОБАВИТЬ</button>
</div> </div>
`;
const htmlTemplate = ({header, selectBox, id = "", classes = "", tmpl_selectBoxOptions = () => "", tmpl_selectBoxResults = () => ""}) =>
`
<div class="select-box-container ${classes}" id="${id}">
<div class="select-box-header">
<div class="header">${header}</div>
<i class="fa fa-question-circle-o" aria-hidden="true" title="bla-bla-bla..."></i>
</div>
<div class="select-box-search">
${selectBox}
</div>
${tmpl_selectBoxOptions()}
${tmpl_selectBoxResults()}
<span style="clear: both"></span> <span style="clear: both"></span>
</div> </div>
`; `;
let tmpl_light = (el) => `<span class="highlight">${el}</span>`; let tmpl_light = (el) => `<span class="highlight">${el}</span>`;
let tmpl_preloader = () => `<div id="component-preloader"><span class="spinner"></span></div>`;
export default class AbsBaseSelect { export default class AbsBaseSelect {
// constructor($container, data, hasEditableContainer, verticalChild) { constructor($container, {url, obj, hasEditableContainer = false, visible = false}) {
constructor({$container, data, hasEditableContainer = false}) {
if (new.target === AbsBaseSelect) { if (new.target === AbsBaseSelect) {
throw new TypeError("Cannot construct Abstract instances directly"); throw new TypeError("Cannot construct Abstract instances directly");
} }
if (obj && url) {
throw new URIError("Must be either the date or url");
}
const self = this;
//TODO: проверка наличия id контейнера //TODO: проверка наличия id контейнера
this.containerId = $container.attr("id"); this.containerId = $container.attr("id");
this.dataTree = data; this.$container = $container;
// console.log("data = ", data);
// Вариант не выбран
this.hasEditableContainer = hasEditableContainer; this.hasEditableContainer = hasEditableContainer;
let classes = $container.attr('class'); this.visible = visible;
if (classes) classes = classes.split(/\s+/); // Быстрая заглушка, до отображения данных
let template = this.getTemplate(classes); if (visible) {
$container.replaceWith(template); let preloaderTemplate = tmpl_preloader();
this._buildComponents(); let selectBox = this.hasEditableContainer
this._bindEvents(); ? tmpl_selectBoxEditCont({preloaderTemplate})
: tmpl_selectBox({preloaderTemplate});
let plugTemplate = tmpl_plug({header: "Loading...", selectBox});
$container.html(plugTemplate);
this.$preloader = $container.find('#component-preloader');
this.$spinner = this.$preloader.find('.spinner');
}
if (url) this.dataPromise = this.getData(url);
let _dataPromise;
if (url) {
_dataPromise = this.dataPromise;
} else {
_dataPromise = obj.dataPromise
}
// if (dataTree) this.dataTree = dataTree;
_dataPromise
.then(
self._buildComponents.bind(self)
)
.catch(
self._onLoadDataError.bind(self)
);
// INIT EMPTY PROP // INIT EMPTY PROP
this.selectedEl = {id: undefined, value: undefined}; this.selectedEl = {id: undefined, value: undefined};
this.parentId = undefined; this.parentId = undefined;
this.hide();
} }
// getTemplate(header, id, editable_container, vertical_child) { // getTemplate(header, id, editable_container, vertical_child) {
getTemplate(classes) { getTemplate(classes) {
let selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox(); let selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
classes = classes ? classes.join(" "): ""; classes = classes ? classes.join(" ") : "";
return htmlTemplate({header: "TestHeader", selectBox, id: this.containerId, classes}) return htmlTemplate({
header: "TestHeader", selectBox, id: this.containerId, classes,
tmpl_selectBoxOptions, tmpl_selectBoxResults
})
} }
getData(url, data = {}) {
const self = this;
return Promise.resolve($.ajax({
url: url,
dataType: 'json',
data: data,
// success: self._buildComponents.bind(self),
// error: self._onLoadDataError.bind(self),
}))
}
hidePreloader() {
// console.log("hide preloader ", this.$preloader);
this.$spinner.fadeOut();
return Promise.resolve(this.$preloader.delay(500).fadeOut(2000));
}
static getHeader(catChain, {separator = " / ", maxLen = 60}) { static getHeader(catChain, {separator = " / ", maxLen = 60}) {
function toShortString(string, maxLen) { function toShortString(string, maxLen) {
return string.slice(0, maxLen) + (string.length > maxLen ? "..." : ""); return string.slice(0, maxLen) + (string.length > maxLen ? "..." : "");
@ -145,14 +214,16 @@ export default class AbsBaseSelect {
} }
setHeader(header) { setHeader(header) {
this.$header.html(header);
if (this.$header){this.$header.html(header)} else {this.header = header}
// default hide // default hide
this.show(); // this.show();
} }
setParent(parentId) { setParent(parentId) {
this.parentId = parentId; this.parentId = parentId;
this._fillOptionsData(); this._fillOptionsData();
this.$searchInput.addClass('active');
} }
connectSelectedContainer(selectedContainer) { connectSelectedContainer(selectedContainer) {
@ -182,21 +253,31 @@ export default class AbsBaseSelect {
} }
_buildComponents() { _buildComponents(data) {
// AFTER PRELOAD
// this.hidePreloader().then(() => console.log("END -)"));
let classes = this.$container.attr('class');
if (classes) classes = classes.split(/\s+/);
let template = this.getTemplate(classes);
this.$container.replaceWith(template);
this.$selectBox = $(`#${this.containerId}`); this.$selectBox = $(`#${this.containerId}`);
this.$header = this.$selectBox.find('.select-box-header .header'); this.$header = this.$selectBox.find('.select-box-header .header');
this.$header.html(this.header);
this.$resultsBox = this.$selectBox.find('.select-box-results'); this.$resultsBox = this.$selectBox.find('.select-box-results');
this.$optionsBox = this.$selectBox.find('.select-box-options'); this.$optionsBox = this.$selectBox.find('.select-box-options');
this.$searchInput = this.$selectBox.find('input.select-box-search'); this.$searchInput = this.$selectBox.find('input.select-box-search');
this.$buttonAdd = this.$selectBox.find('.button-add.results'); this.$buttonAdd = this.$selectBox.find('.button-add.results');
this.$buttonAddOptions = this.$selectBox.find('.button-add.options'); this.$buttonAddOptions = this.$selectBox.find('.button-add.options');
this.$editableContainer = this.$selectBox.find('.editable-container'); this.$editableContainer = this.$selectBox.find('.editable-container');
if (this.hasEditableContainer) this.$editableContainer.hide();
this._fillOptionsData();
this.$resultsBox.hide(); this.$resultsBox.hide();
this.$optionsBox.hide(); this.$optionsBox.hide();
this.$buttonAddOptions.hide(); this.$buttonAddOptions.hide();
// TODO: сделать проверку на наличие всех нужных элементов и их корректый jq select // TODO: сделать проверку на наличие всех нужных элементов и их корректый jq select
// REDEFINE IN CHILD
// this.dataTree = data;
// this._bindEvents();
} }
_fillOptionsData() { _fillOptionsData() {
@ -227,14 +308,13 @@ export default class AbsBaseSelect {
$container.html(""); $container.html("");
$('.other-part').show(); $('.other-part').show();
let searchRes = search({searchText, parentCategoryId, excludeCategoryId}); let searchRes = search({searchText, parentCategoryId, excludeCategoryId});
// || (!excludeCategoryId && parentCategoryId === null)
if (!searchRes.length) { if (!searchRes.length) {
if ($container.closest('div').hasClass('main-part')) { if ($container.closest('div').hasClass('main-part')) {
$container.append('<li>Ничего не найдено</li>'); $container.append('<li>Ничего не найдено</li>');
self.$resultsBox.find('.button-add.results').hide(); self.$resultsBox.find('.button-add.results').hide();
// console.log('not found main-part');
} else { } else {
$('.other-part').hide(); $('.other-part').hide();
// console.log('not found other-part');
} }
return; return;
} }
@ -256,7 +336,6 @@ export default class AbsBaseSelect {
$('.other-part').hide(); $('.other-part').hide();
} else { } else {
$container = this.$resultsBox.find('.other-part ul'); $container = this.$resultsBox.find('.other-part ul');
// console.log("Fill other-part");
fillContainer($container, tmpl_elementResult, {searchText: searchText, excludeCategoryId: self.parentId}); fillContainer($container, tmpl_elementResult, {searchText: searchText, excludeCategoryId: self.parentId});
} }
this.$resultsBox.find('div.header').hide(); this.$resultsBox.find('div.header').hide();
@ -289,6 +368,7 @@ export default class AbsBaseSelect {
_onButtonAddOptions(e) { _onButtonAddOptions(e) {
this._addToSelectedContainer(this.selectedEl.id); this._addToSelectedContainer(this.selectedEl.id);
this.clear(); this.clear();
this.$searchInput.removeClass('active');
e.preventDefault(); e.preventDefault();
return false; return false;
} }
@ -304,6 +384,10 @@ export default class AbsBaseSelect {
return false; return false;
} }
_onLoadDataError(error) {
console.log("Error loading data -->", error);
}
_addToSelectedContainer(id) { _addToSelectedContainer(id) {
this.selectedContainer.add(id) this.selectedContainer.add(id)
} }

@ -14,8 +14,6 @@ class Node {
data.node = this; data.node = this;
this.children = data.children.map(function (el_obj) { this.children = data.children.map(function (el_obj) {
let el = tree._getElementById(el_obj.id); let 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; if (el.node) return el.node;
el.node = new Node(el, tree); el.node = new Node(el, tree);
return el.node return el.node
@ -36,7 +34,6 @@ export default class DataTree {
*/ */
_getElementById(id) { _getElementById(id) {
for (let i = 0; i < this.baseData.length; i++) { for (let i = 0; i < this.baseData.length; i++) {
// console.log(this.baseData[i].id, " / ", id);
if (this.baseData[i].id == id) return this.baseData[i] if (this.baseData[i].id == id) return this.baseData[i]
} }
} }
@ -71,7 +68,6 @@ export default class DataTree {
} }
hasChildren(elId){ hasChildren(elId){
console.log('id = ', elId);
return (this.getElementById(elId).children.length) ? true : false return (this.getElementById(elId).children.length) ? true : false
} }

@ -0,0 +1,89 @@
// `
import SelectedContainer from './SelectedContainer';
import NoTreeSelect from './NoTreeSelect';
import TreeSelect from './TreeSelect';
$(function () {
function createFilterSpecs(url) {
// SPECIALIZATIONS FILTER
let sb_main = new TreeSelect($('#select-box-1'), {url, hasEditableContainer: true});
sb_main.setHeader("Специализации");
let select_container = new SelectedContainer($('#selected-spec'), {obj: sb_main});
sb_main.connectSelectedContainer(select_container);
let sb_1 = new TreeSelect($('#select-box-2'), {obj: sb_main});
let sb_2 = new TreeSelect($('#select-box-3'), {obj: sb_main});
let sb_3 = new TreeSelect($('#select-box-4'), {obj: sb_main});
let sb_4 = new TreeSelect($('#select-box-5'), {obj: sb_main});
// let sb_2 = new TreeSelect({$container: $('#select-box-3'), data: data});
// let sb_3 = new TreeSelect({$container: $('#select-box-4'), data: data});
// let sb_4 = new TreeSelect({$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(url) {
// BUILDING-CLASSIFICATION FILTER
let sb_build_main = new TreeSelect($('#sb-building-classification'), {url, visible:true});
sb_build_main.setHeader("Классификация здания");
let sb_build_1 = new TreeSelect($('#sb-building-sub-classification'), {obj: sb_build_main});
let select_build_container = new SelectedContainer($('#selected-building-classification'), {obj: sb_build_main});
sb_build_main.connectSelectedContainer(select_build_container);
sb_build_main.setNearbySelectBox(sb_build_1);
sb_build_1.setNearbySelectBox("", sb_build_main);
}
function createFilterConstructionType(url) {
let sb_constr_main = new NoTreeSelect($('#sb-construction-type'), {url, visible:true});
sb_constr_main.setHeader("Вид строительства");
let select_constr_type = new SelectedContainer($('#selected-construction-type'), {obj:sb_constr_main, noTree: true});
sb_constr_main.connectSelectedContainer(select_constr_type);
}
function createFilerLocations(url) {
let sb_loc_main = new TreeSelect($('#sb-location-1'), {url, visible:true});
sb_loc_main.setHeader("Местоположение");
let select_loc = new SelectedContainer($('#selected-location'), {obj: sb_loc_main});
sb_loc_main.connectSelectedContainer(select_loc);
let sb_loc_1 = new TreeSelect($('#sb-location-2'), {obj: sb_loc_main});
let sb_loc_2 = new TreeSelect($('#sb-location-3'), {obj: sb_loc_main});
sb_loc_main.setNearbySelectBox(sb_loc_1);
sb_loc_1.setNearbySelectBox(sb_loc_2, sb_loc_main);
sb_loc_2.setNearbySelectBox("", sb_loc_1);
}
createFilterSpecs('/api/specializations_flat');
createFilterBuildingClass('/api/building_classifications');
createFilterConstructionType('/api/construction_type');
createFilerLocations('/api/locations_flat');
// let data = [];
// function fullData(_data) {
// data = data.concat(_data.results.length ? _data.results : []);
// let url = _data.next;
// if (url) {
// $.ajax({
// url: url,
// dataType: 'json',
// data: {},
// success: fullData
// });
// } else {
// createFilerLocations(data);
// }
// return data;
// }
//
// fullData({next: '/api/locations_flat', results: []});
});

@ -0,0 +1,59 @@
import SelectedContainer from './SelectedContainer';
import NoTreeSelect from './NoTreeSelect';
import TreeSelect from './TreeSelect';
import TreeSelectPreload from './TreeSelectPreload';
$(function () {
const url_root = "http://127.0.0.1:8000";
let sb_main = new TreeSelect($('#select-box-1'),
{url: url_root + '/api/specializations_flat/', hasEditableContainer: true});
sb_main.setHeader("Специализации");
let select_container = new SelectedContainer($('#selected-spec'), {obj: sb_main});
//
sb_main.connectSelectedContainer(select_container);
let sb_1 = new TreeSelect($('#select-box-2'), {obj: sb_main});
let sb_2 = new TreeSelect($('#select-box-3'), {obj: sb_main});
let sb_3 = new TreeSelect($('#select-box-4'), {obj: sb_main});
let sb_4 = new TreeSelect($('#select-box-5'), {obj: sb_main});
// let sb_2 = new TreeSelect({$container: $('#select-box-3'), data: data});
// let sb_3 = new TreeSelect({$container: $('#select-box-4'), data: data});
// let sb_4 = new TreeSelect({$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);
let building_classification = new NoTreeSelect($('#construction-type'),
{url: url_root + '/api/construction_type/'});
building_classification.setHeader('Классификация');
let select_ct = new SelectedContainer($('#select-construction-type'), {obj: building_classification, noTree: true});
building_classification.connectSelectedContainer(select_ct);
function tuneCheckBoxes($boxes) {
let currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
//PRELOAD-BOX
let pr_1 = new TreeSelect($('#preload-1'), {url: url_root + '/api/locations_flat', visible: true});
let pr_2 = new TreeSelect($('#preload-2'), {url: url_root + '/api/locations_flat'});
let pr_3 = new TreeSelect($('#preload-3'), {url: url_root + '/api/locations_flat'});
// CUSTOM CHECK-BOX
let $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
let inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
});

@ -1,144 +0,0 @@
import SelectedContainer from './SelectedContainer';
import NoTreeSelect from './NoTreeSelect';
import TreeSelect from './TreeSelect';
// `
$(function () {
function createFilterSpecs(_data) {
// SPECIALIZATIONS FILTER
let data = _data.results;
let sb_main = new TreeSelect({$container: $('#select-box-1'), data: data, hasEditableContainer: true});
sb_main.setHeader("Специализации");
let select_container = new SelectedContainer($('#selected-spec'), data);
sb_main.connectSelectedContainer(select_container);
let sb_1 = new TreeSelect({$container: $('#select-box-2'), data: data});
let sb_2 = new TreeSelect({$container: $('#select-box-3'), data: data});
let sb_3 = new TreeSelect({$container: $('#select-box-4'), data: data});
let sb_4 = new TreeSelect({$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
let data = _data.results;
let sb_build_main = new TreeSelect({$container: $('#sb-building-classification'), data: data});
sb_build_main.setHeader("Классификация здания");
let sb_build_1 = new TreeSelect({$container: $('#sb-building-sub-classification'), data: data});
let select_build_container = new SelectedContainer($('#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) {
let data = _data.results;
let sb_constr_main = new NoTreeSelect({$container: $('#sb-construction-type'), data: data});
sb_constr_main.setHeader("Вид строительства");
let select_constr_type = new SelectedContainer($('#selected-construction-type'), data, true);
sb_constr_main.connectSelectedContainer(select_constr_type);
}
function createFilerLocations(data) {
let sb_loc_main = new TreeSelect({$container: $('#sb-location-1'), data: data});
sb_loc_main.setHeader("Местоположение");
let select_loc = new SelectedContainer($('#selected-location'), data);
sb_loc_main.connectSelectedContainer(select_loc);
let sb_loc_1 = new TreeSelect({$container: $('#sb-location-2'), data: data});
let sb_loc_2 = new TreeSelect({$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
});
let data = [];
function fullData(_data) {
data = data.concat(_data.results.length ? _data.results : []);
let 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) {
let currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
let $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
let 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");
// });
});

@ -1,3 +1,48 @@
$(function () {
let $buttonF1 = $('.resButton');
if ($('.slide').hasClass("active")) $buttonF1.css('transform', 'rotate(180deg)');
$buttonF1.on("click", function (e) {
e.preventDefault();
let $slide = $('.slide');
if ($slide.hasClass("active")) {
$buttonF1.css('transform', 'rotate(0deg)');
$slide.slideUp(300);
} else {
$buttonF1.css('transform', 'rotate(180deg)');
$slide.slideDown(300);
}
$slide.toggleClass("active");
});
function tuneCheckBoxes($boxes) {
let currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
let $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
let inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
// $("#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");
// });
});
function getFormData($form, pageNum) { function getFormData($form, pageNum) {
var unindexed_array = $form.serializeArray(); var unindexed_array = $form.serializeArray();
var indexed_array = {}; var indexed_array = {};

@ -0,0 +1,95 @@
body {
font-size: 11pt;
font-family: Arial-MT-Regular, Arial, sans-serif;
}
.wrapper {
background-color: #f2f2f2;
padding: 40px;
margin: 50px 30px;
}
.form-container {
padding: 50px 45px;
}
.separator {
margin-top: 35px;
margin-bottom: 5px;
}
.vertical-child {
margin-top: 30px;
}
.custom-check{
cursor: pointer;
display: inline-block
}
.custom-check .checked{
background: url("../img/checkbox_Check.png.png") no-repeat center;
background-size: 210px 51px;
width: 210px;
height: 51px;
}
.custom-check .not-checked {
background: url("../img/checkbox_notCheck.png") no-repeat center;
background-size: 210px 51px;
width: 210px;
height: 51px;
}
.resButton {
width: 50px;
height: 50px;
background-color: white;
border: 1px solid #CFCFCF;
color: #FF0029;
text-align: center;
font-size: 16px;
float: left;
border-radius: 100%;
margin: -15px 20px 0 28px;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
button.resButton:focus {outline:0;}
.flex {
display: flex;
}
.flex .header{
font-size: 12pt;
padding-right: 10px;
}
.header .fa {
padding-left: 3px;
color: #5e5e5e;
position: relative;
top: 0;
}
.border {
flex: 1 1 auto;
float: left;
margin: 10px 0 0 0;
border-top: 1px solid #CFCFCF;
}
.slide {
display: none;
}
.slide.active {
display: block;
}
.revert {
margin-left: -15px;
margin-right: -15px;
}

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -1,4 +1,4 @@
<form id="filter-form" action="/projects" method="GET" novalidate> <form id="filter-form" action="/projects" method="GET" novalidate xmlns="http://www.w3.org/1999/html">
<div class="filter form-container"> <div class="filter form-container">
{# <div id="page-preloader"><span class="spinner"></span></div>#} {# <div id="page-preloader"><span class="spinner"></span></div>#}
@ -32,11 +32,14 @@
</div> </div>
<div class="row separator"> <div class="row separator">
<div class="col-lg-5"> <div class="col-lg-12">
<p class="titleResF1">Поиск по ключевым словам и фразам</p> <div class="flex">
</div> <span class="header">
<div class="col-lg-7"> <span>Поиск по ключевым словам и фразам </span>
<div class="borderS1"></div> <i class="fa fa-question-circle-o" aria-hidden="true" title="bla-bla-bla..."></i>
</span>
<div class="border"></div>
</div>
</div> </div>
</div> </div>
@ -47,7 +50,7 @@
name="keywords" name="keywords"
onkeydown="event.keyCode === 13 && $(this).closest('form').submit()" onkeydown="event.keyCode === 13 && $(this).closest('form').submit()"
value="{{ form.keywords.value }}" value="{{ form.keywords.value }}"
class="select-box-search searchInp box-sizing" class="select-box-search"
placeholder="Ключевые слова, фразы"> placeholder="Ключевые слова, фразы">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
@ -66,18 +69,18 @@
<div class="row separator"> <div class="row separator">
<div class="col-lg-4"> <div class="col-lg-12">
<p class="titleResF1">Расширенные поля</p> <div class="flex">
<button class="resButtonF1"> <span class="header">Расширенные поля</span>
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span> <button class="resButton">
</button> <span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</div> </button>
<div class="col-lg-8"> <div class="border"></div>
<div class="borderS1"></div> </div>
</div> </div>
</div> </div>
<div class="slideRes disTab activeSlide"> <div class="slide {% if has_additional_fields %} active{% endif %}">
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-3">
<div class="vertical-child" id="sb-building-classification"></div> <div class="vertical-child" id="sb-building-classification"></div>
@ -109,13 +112,10 @@
<i class="fa fa-question-circle-o" aria-hidden="true" <i class="fa fa-question-circle-o" aria-hidden="true"
title="bla-bla-bla..."></i> title="bla-bla-bla..."></i>
</div> </div>
{# <div class="custom-check" data-state="disabled">#}
{# <input name="cro" type="checkbox" hidden {% if cro %} checked{% endif %}>#}
{# </div>#}
<div class="custom-check"> <div class="custom-check">
<div class="checked"></div> <div class="checked"></div>
<div class="not-checked"></div> <div style="display: none" class="not-checked"></div>
<input name="cro" type="checkbox" hidden {% if cro %} checked{% endif %}> <input name="cro" type="checkbox" hidden {% if cro %} checked{% endif %}>
</div> </div>
</div> </div>

@ -2,11 +2,10 @@
{% load staticfiles %} {% load staticfiles %}
{% block head_css %} {% block head_css %}
<link rel='stylesheet' href='{% static "lib/proekton-components/css/fonts.css" %}'> <link rel='stylesheet' href='{% static "lib/proekton-components/css/fonts.css" %}'>
<link rel='stylesheet' href='{% static "lib/proekton-components/css/fix-bags.css" %}'>
<link rel='stylesheet' href='{% static "lib/proekton-components/css/selected-container.css" %}'> <link rel='stylesheet' href='{% static "lib/proekton-components/css/selected-container.css" %}'>
<link rel='stylesheet' href='{% static "lib/proekton-components/css/editable-container.css" %}'> <link rel='stylesheet' href='{% static "lib/proekton-components/css/editable-container.css" %}'>
<link rel='stylesheet' href='{% static "lib/proekton-components/css/select-box.css" %}'> <link rel='stylesheet' href='{% static "lib/proekton-components/css/select-box.css" %}'>
<link rel='stylesheet' href='{% static "lib/proekton-components/css/other.css" %}'> <link rel='stylesheet' href='{% static "css/project_filter.css" %}'>{# other #}
<link rel='stylesheet' href='{% static "css/font-awesome.min.css" %}'> <link rel='stylesheet' href='{% static "css/font-awesome.min.css" %}'>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
@ -32,9 +31,7 @@
{% endblock %} {% endblock %}
{% block js_block %} {% block js_block %}
{{ block.super }} {{ block.super }}
<script src='{% static "lib/proekton-components/build/init.js" %}'></script> <script src='{% static "lib/proekton-components/js/build/init.js" %}'></script>
<script src='{% static "projects-filter.js" %}'></script> <script src='{% static "projects-filter.js" %}'></script>
<script>
</script>
{% endblock %} {% endblock %}

@ -379,12 +379,16 @@ class ProjectFilterView(BaseMixin, View):
projects = self.sort_by(projects) projects = self.sort_by(projects)
projects = self.pagination(projects, request.get("page")) projects = self.pagination(projects, request.get("page"))
has_additional_fields = bool(context.get("building_classification") or context.get(
"construction_type") or context.get("location") or context.get("cro"))
context.update({ context.update({
'choices': self.PROJECT_ORDER_CHOICES, 'choices': self.PROJECT_ORDER_CHOICES,
'projects': projects, 'projects': projects,
'is_paginated': True, 'is_paginated': True,
'page_obj': projects, 'page_obj': projects,
'num_results': num_results, 'num_results': num_results,
'has_additional_fields': has_additional_fields
}) })
return context return context

Loading…
Cancel
Save