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

мелкие доработки
remotes/origin/PR-39
booblegum 9 years ago
parent faa3b01e8b
commit 8de0f08d0c
  1. 66
      assets/lib/proekton-components/build/init.js
  2. 31
      assets/lib/proekton-components/css/other.css
  3. 47
      assets/lib/proekton-components/css/select-box.css
  4. 30
      assets/lib/proekton-components/src/base/AbsBaseSelect.js
  5. 31
      assets/lib/proekton-components/src/init.js
  6. 56
      projects/templates/partials/inc-projects-filter.html

@ -163,7 +163,9 @@ var SelectedContainer = function () {
});
var header = SelectedContainer.getHeader(this.dataTree.getSpecChain(id), "", max_len);
// console.log("header = ", header);
console.log("id = ", id);
console.log("chain = ", this.dataTree.getSpecChain(id));
console.log("header = ", header);
var name = this.dataTree.getElementById(id).name;
this.elements_id.push(id);
if (this.$input) this.$input.val(this.elements_id.join(','));
@ -343,8 +345,9 @@ var tmpl_elementOption = function tmpl_elementOption(el) {
var htmlTemplate = function htmlTemplate(_ref) {
var header = _ref.header,
selectBox = _ref.selectBox,
id = _ref.id;
return "\n<div class=\"select-box-container\" 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";
id = _ref.id,
classes = _ref.classes;
return "\n<div class=\"select-box-container " + classes + "\" id=\"" + id + "\">\n <div class=\"select-box-header\">\n <div class=\"header\">" + header + "</div>\n <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\" title=\"bla-bla-bla...\"></i>\n </div>\n <div class=\"select-box-search\">\n " + selectBox + "\n </div>\n <div class=\"select-box-options\">\n <div class=\"box-wrapper\">\n <ul>\n \n </ul>\n </div>\n </div>\n <div class=\"select-box-results\">\n <div class=\"box-wrapper\">\n <div class=\"main-part\">\n <ul>\n </ul>\n </div>\n <div class=\"other-part\">\n <span class=\"other-header\">\u0418\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0439</span>\n <ul>\n </ul>\n </div>\n </div>\n <button class=\"button-add results\">\u0414\u041E\u0411\u0410\u0412\u0418\u0422\u042C</button>\n </div>\n <span style=\"clear: both\"></span>\n</div>\n";
};
var tmpl_light = function tmpl_light(el) {
return "<span class=\"highlight\">" + el + "</span>";
@ -363,14 +366,15 @@ var AbsBaseSelect = function () {
if (new.target === AbsBaseSelect) {
throw new TypeError("Cannot construct Abstract instances directly");
}
//TODO: добавить применение классов контейнера
//TODO: проверка наличия id контейнера
this.containerId = $container.attr("id");
this.dataTree = data;
console.log("data = ", data);
// console.log("data = ", data);
// Вариант не выбран
this.hasEditableContainer = hasEditableContainer;
var template = this.getTemplate();
var classes = $container.attr('class');
if (classes) classes = classes.split(/\s+/);
var template = this.getTemplate(classes);
$container.replaceWith(template);
this._buildComponents();
this._bindEvents();
@ -386,14 +390,15 @@ var AbsBaseSelect = function () {
_createClass(AbsBaseSelect, [{
key: "getTemplate",
value: function getTemplate() {
value: function getTemplate(classes) {
var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
return htmlTemplate({ header: "TestHeader", selectBox: selectBox, id: this.containerId });
classes = classes ? classes.join(" ") : "";
return htmlTemplate({ header: "TestHeader", selectBox: selectBox, id: this.containerId, classes: classes });
}
}, {
key: "clear",
value: function clear() {
console.log("clear");
// console.log("clear");
this.$searchInput.val("");
this.$optionsBox.hide();
this.$resultsBox.hide();
@ -448,7 +453,7 @@ var AbsBaseSelect = function () {
if (this.$editableContainer.length) {
var separator = ' / ';
var chainHeader = AbsBaseSelect.getHeader(this.dataTree.getSpecChain(elId, true), { separator: separator });
console.log('chainHeader = ', chainHeader);
// console.log('chainHeader = ', chainHeader);
chainHeader = AbsBaseSelect.highlight(chainHeader, separator, true);
var elTemplate = "<span class=\"\">" + chainHeader + "</span>";
this.$editableContainer.html(elTemplate);
@ -543,7 +548,7 @@ var AbsBaseSelect = function () {
$('.other-part').show();
var searchRes = search({ searchText: searchText, parentCategoryId: parentCategoryId, excludeCategoryId: excludeCategoryId });
// || (!excludeCategoryId && parentCategoryId === null)
console.log("searchRes = ", searchRes);
// console.log("searchRes = ", searchRes);
if (!searchRes.length) {
if ($container.closest('div').hasClass('main-part')) {
$container.append('<li>Ничего не найдено</li>');
@ -606,12 +611,12 @@ var AbsBaseSelect = function () {
this.$resultsBox.find('li').on("mouseout", function (event) {
var e = event.toElement || event.relatedTarget;
console.log(e.parentNode, ' ==', this);
console.log(e, ' ==', this);
// console.log(e.parentNode, ' ==', this);
// console.log(e, ' ==', this);
if (e.parentNode == this || e == this) {
return;
}
console.log("OUT");
// console.log("OUT");
$(this).find('.header').hide();
});
}
@ -639,7 +644,7 @@ var AbsBaseSelect = function () {
var self = this;
this.getIdsSelectedElements().each(function () {
console.log("add el -->", this);
// console.log("add el -->", this);
self._addToSelectedContainer(this);
});
this.clear();
@ -691,7 +696,7 @@ var AbsBaseSelect = function () {
} else {
this.$searchInput.val(this.selectedEl.value);
}
console.log("loose ", this.selectedEl.id);
// console.log("loose ", this.selectedEl.id);
}
}], [{
key: "getHeader",
@ -719,7 +724,7 @@ var AbsBaseSelect = function () {
var lastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var index = lastIndex ? string.toLowerCase().lastIndexOf(sub_string.toLowerCase()) : string.toLowerCase().indexOf(sub_string.toLowerCase());
console.log("index = ", index);
// console.log("index = ", index);
if (index === -1) return string;
var before = void 0,
select = void 0,
@ -884,6 +889,7 @@ var DataTree = function () {
var chain = [];
var el = this.getElementById(id);
console.log("el = ", el);
function getParent(el) {
if (el.parent && el.parent != "root") {
chain.push(el.parent);
@ -1019,7 +1025,7 @@ $(function () {
function createFilerLocations(data) {
var sb_loc_main = new _TreeSelect2.default({ $container: $('#sb-location-1'), data: data });
sb_loc_main.setHeader("Местоположение");
var select_loc = new _SelectedContainer2.default($('#selected-location'), data, true);
var select_loc = new _SelectedContainer2.default($('#selected-location'), data);
sb_loc_main.connectSelectedContainer(select_loc);
var sb_loc_1 = new _TreeSelect2.default({ $container: $('#sb-location-2'), data: data });
var sb_loc_2 = new _TreeSelect2.default({ $container: $('#sb-location-3'), data: data });
@ -1073,18 +1079,22 @@ $(function () {
fullData({ next: '/api/locations_flat', results: [] });
function tuneCheckBoxes($boxes) {
$boxes.each(function () {
if ($(this).find("input").prop("checked")) $(this).toggleClass('checked');
});
$boxes.on("click", function (e) {
$(e.target).toggleClass('checked');
$(e.target).attr('data-state', $(e.target).attr('data-state') == 'enabled' ? 'disabled' : 'enabled');
var inside_checkBox = $(e.target).find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
});
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
console.log("currentState = ", currentState);
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
tuneCheckBoxes($('.custom-check'));
var $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
var inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
// $(window).on('load',
// function hidePreloader() {

@ -1,5 +1,5 @@
/*DEMO*/
.wrapper{
.wrapper {
background-color: #f2f2f2;
padding: 40px;
margin: 50px 30px;
@ -14,21 +14,44 @@
margin-bottom: 5px;
}
.custom-check {
.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;
cursor: pointer;
}
.custom-check.checked {
.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;

@ -64,16 +64,16 @@
display: block;
max-height: 200px;
overflow-y: auto;
/*border: 1px solid #cccccc;*/
border-top: 1px solid #cccccc;
background-color: #F2F2F2;
box-shadow: 0 12px 10px -6px rgba(0, 0, 0, .2);
box-shadow: 5px 12px 10px -6px rgba(0, 0, 0, .2);
}
.select-box-results input[type=checkbox] {
margin: 0 5px 0 5px;
}
.select-box-results .header{
.select-box-results .header {
font-size: 8pt;
color: #757575;
pointer-events: none;
@ -109,10 +109,10 @@
}
/*.select-box-results span:hover{*/
/*color: green;*/
/*color: green;*/
/*}*/
/*.select-box-search{*/
/*position: relative;*/
/*position: relative;*/
/*}*/
input.select-box-search {
@ -127,6 +127,17 @@ input.select-box-search {
margin-bottom: -1px;
}
input.select-box-search:-webkit-autofill,
input.select-box-search:-webkit-autofill:hover,
input.select-box-search:-webkit-autofill:focus,
input.select-box-search:-webkit-autofill {
/*border: 0;*/
/*-webkit-text-fill-color: black;*/
/*-webkit-box-shadow: 0 0 0 1000px transparent inset;*/
transition: background-color 5000s ease-in-out 0s;
/*background: white;*/
}
.select-box-results .main-part {
display: block;
}
@ -148,46 +159,32 @@ input.select-box-search {
min-width: 300px;
max-width: 400px;
}
button.button-add{
button.button-add {
box-shadow: none;
border: none;
}
.button-add {
/*position: absolute;*/
position: relative;
top: 3px;
float: right;
z-index: 999;
font-family: Myriad;
font-weight: normal;
font-style: normal;
font-size: 12pt;
font-size: 10pt;
-moz-border-radius: 15px; /* Firefox */
-webkit-border-radius: 15px; /* Safari 4 */
border-radius: 15px; /* IE 9, Safari 5, Chrome */
background-color: #FF0029;
padding: 0 15px;
padding: 4px 15px 2px 15px;
/*border: none;*/
text-decoration: none;
color: white;
}
/*.button-add .results {*/
/*position: absolute;*/
/*left: 280px;*/
/*z-index: 999;*/
/*}*/
/*.button-add.options {*/
/*position: absolute;*/
/*!*FIXME: костыль*!*/
/*left: 160px;*/
/*z-index: 999;*/
/*!*right: auto;*!*/
/*!*@position: absolute;*!*/
/*!*top: 40px;*!*/
/*}*/
.highlight {
color: red;
}

@ -23,9 +23,9 @@ const tmpl_elementResult = (el, id, header) =>
const tmpl_elementOption = (el) =>
`<li data-id="${el.id}">${el.name}</li>`;
//${vertical_child}
const htmlTemplate = ({header, selectBox, id}) =>
const htmlTemplate = ({header, selectBox, id, classes}) =>
`
<div class="select-box-container" id="${id}">
<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>
@ -65,18 +65,18 @@ export default class AbsBaseSelect {
if (new.target === AbsBaseSelect) {
throw new TypeError("Cannot construct Abstract instances directly");
}
//TODO: добавить применение классов контейнера
//TODO: проверка наличия id контейнера
this.containerId = $container.attr("id");
this.dataTree = data;
console.log("data = ", data);
// console.log("data = ", data);
// Вариант не выбран
this.hasEditableContainer = hasEditableContainer;
let template = this.getTemplate();
let classes = $container.attr('class');
if (classes) classes = classes.split(/\s+/);
let template = this.getTemplate(classes);
$container.replaceWith(template);
this._buildComponents();
this._bindEvents();
// if (!has_editable_container) this.hide();
// INIT EMPTY PROP
this.selectedEl = {id: undefined, value: undefined};
this.parentId = undefined;
@ -84,9 +84,10 @@ export default class AbsBaseSelect {
}
// getTemplate(header, id, editable_container, vertical_child) {
getTemplate() {
getTemplate(classes) {
let selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
return htmlTemplate({header: "TestHeader", selectBox, id: this.containerId})
classes = classes ? classes.join(" "): "";
return htmlTemplate({header: "TestHeader", selectBox, id: this.containerId, classes})
}
static getHeader(catChain, {separator = " / ", maxLen = 60}) {
@ -107,7 +108,6 @@ export default class AbsBaseSelect {
let index = lastIndex
? string.toLowerCase().lastIndexOf(sub_string.toLowerCase())
: string.toLowerCase().indexOf(sub_string.toLowerCase());
console.log("index = ", index);
if (index === -1) return string;
let before, select, after;
if (lastIndex) {
@ -124,7 +124,6 @@ export default class AbsBaseSelect {
}
clear() {
console.log("clear");
this.$searchInput.val("");
this.$optionsBox.hide();
this.$resultsBox.hide();
@ -172,7 +171,6 @@ export default class AbsBaseSelect {
if (this.$editableContainer.length) {
const separator = ' / ';
let chainHeader = AbsBaseSelect.getHeader(this.dataTree.getSpecChain(elId, true), {separator: separator});
console.log('chainHeader = ', chainHeader);
chainHeader = AbsBaseSelect.highlight(chainHeader, separator, true);
let elTemplate = `<span class="">${chainHeader}</span>`;
this.$editableContainer.html(elTemplate);
@ -220,8 +218,6 @@ export default class AbsBaseSelect {
function search({searchText, parentCategoryId = null, excludeCategoryId = null}) {
// :FORMAT spec_list [{name, id}, ...]
let specList = self.dataTree.dataToList(parentCategoryId, true, excludeCategoryId);
// console.log("search -->", spec_list.length);
// console.log("parent_id ", parentCategoryId);
return specList.filter(function (el) {
return el.name.toLowerCase().indexOf(searchText.toLowerCase()) !== -1;
});
@ -231,8 +227,6 @@ export default class AbsBaseSelect {
$container.html("");
$('.other-part').show();
let searchRes = search({searchText, parentCategoryId, excludeCategoryId});
// || (!excludeCategoryId && parentCategoryId === null)
console.log("searchRes = ", searchRes);
if (!searchRes.length) {
if ($container.closest('div').hasClass('main-part')) {
$container.append('<li>Ничего не найдено</li>');
@ -258,7 +252,6 @@ export default class AbsBaseSelect {
// OTHER PART
// Если нет parentId, не нужно искать в других категориях
// console.log("parentID = ", this.parentId);
if (!this.parentId) {
$('.other-part').hide();
} else {
@ -275,12 +268,9 @@ export default class AbsBaseSelect {
this.$resultsBox.find('li').on("mouseout", function (event) {
let e = event.toElement || event.relatedTarget;
console.log(e.parentNode, ' ==', this);
console.log(e, ' ==', this);
if (e.parentNode == this || e == this) {
return;
}
console.log("OUT");
$(this).find('.header').hide();
})
@ -307,7 +297,6 @@ export default class AbsBaseSelect {
let self = this;
this.getIdsSelectedElements().each(function () {
console.log("add el -->", this);
self._addToSelectedContainer(this);
});
this.clear();
@ -357,6 +346,5 @@ export default class AbsBaseSelect {
} else {
this.$searchInput.val(this.selectedEl.value);
}
console.log("loose ", this.selectedEl.id);
}
}

@ -49,12 +49,12 @@ $(function () {
}
function createFilerLocations(data) {
let sb_loc_main = new TreeSelect({$container:$('#sb-location-1'), data: 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, true);
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});
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);
@ -106,19 +106,20 @@ $(function () {
fullData({next: '/api/locations_flat', results: []});
function tuneCheckBoxes($boxes) {
$boxes.each(function () {
if ($(this).find("input").prop("checked")) $(this).toggleClass('checked')
});
$boxes.on("click", function (e) {
$(e.target).toggleClass('checked');
$(e.target).attr('data-state', $(e.target).attr('data-state') == 'enabled' ? 'disabled' : 'enabled')
let inside_checkBox = $(e.target).find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
});
let currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
tuneCheckBoxes($('.custom-check'));
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() {

@ -10,16 +10,16 @@
</div>
<div class="row">
<div class="col-lg-3">
<div id="select-box-2"></div>
<div class="vertical-child" id="select-box-2"></div>
</div>
<div class="col-lg-3">
<div id="select-box-3"></div>
<div class="vertical-child" id="select-box-3"></div>
</div>
<div class="col-lg-3">
<div id="select-box-4"></div>
<div class="vertical-child" id="select-box-4"></div>
</div>
<div class="col-lg-3">
<div id="select-box-5"></div>
<div class="vertical-child" id="select-box-5"></div>
</div>
</div>
<div class="row">
@ -47,7 +47,7 @@
name="keywords"
onkeydown="event.keyCode === 13 && $(this).closest('form').submit()"
value="{{ form.keywords.value }}"
class="searchInp box-sizing"
class="select-box-search searchInp box-sizing"
placeholder="Ключевые слова, фразы">
</div>
<div class="col-lg-3">
@ -80,51 +80,43 @@
<div class="slideRes disTab activeSlide">
<div class="row">
<div class="col-lg-3">
<div class="vertical-child">
<div id="sb-building-classification"></div>
</div>
<div class="vertical-child">
<div id="sb-building-sub-classification"></div>
</div>
<div class="vertical-child" id="sb-building-classification"></div>
<div class="vertical-child" id="sb-building-sub-classification"></div>
<div class="selected-container" id="selected-building-classification">
<input type="hidden" name="building_classification"
value="{{ building_classification }}">
</div>
</div>
<div class="col-lg-3">
<div class="vertical-child">
<div id="sb-construction-type"></div>
</div>
<div class="vertical-child" id="sb-construction-type"></div>
<div class="selected-container" id="selected-construction-type">
<input type="hidden" name="construction_type"
value="{{ construction_type }}">
</div>
</div>
<div class="col-lg-3">
<div class="vertical-child">
<div id="sb-location-1"></div>
</div>
<div class="vertical-child">
<div id="sb-location-2"></div>
</div>
<div class="vertical-child">
<div id="sb-location-3"></div>
</div>
<div class="vertical-child" id="sb-location-1"></div>
<div class="vertical-child" id="sb-location-2"></div>
<div class="vertical-child" id="sb-location-3"></div>
<div class="selected-container" id="selected-location">
<input type="hidden" name="location"
value="{{ location }}">
</div>
</div>
<div class="col-lg-3">
<div class="vertical-child">
<div class="select-box-header">
<span style="width: 230px" class="header">Требуется допуск (СРО)</span>
<i class="fa fa-question-circle-o" aria-hidden="true"
title="bla-bla-bla..."></i>
</div>
<div class="custom-check" data-state="disabled">
<input name="cro" type="checkbox" hidden {% if cro %} checked{% endif %}>
</div>
<div class="select-box-header vertical-child">
<span style="width: 180px" class="header">Требуется допуск (СРО)</span>
<i class="fa fa-question-circle-o" aria-hidden="true"
title="bla-bla-bla..."></i>
</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="checked"></div>
<div class="not-checked"></div>
<input name="cro" type="checkbox" hidden {% if cro %} checked{% endif %}>
</div>
</div>
</div>

Loading…
Cancel
Save