diff --git a/assets/js/build/create_project.js b/assets/js/build/create_project.js
index 62fb363..ed3f899 100644
--- a/assets/js/build/create_project.js
+++ b/assets/js/build/create_project.js
@@ -56,7 +56,11 @@
var _only_one_checkbox = __webpack_require__(6);
- var _test_seeds = __webpack_require__(7);
+ var _popups = __webpack_require__(7);
+
+ var _scroll_on_required = __webpack_require__(19);
+
+ var _test_seeds = __webpack_require__(8);
function showHideRealry() {
var check = $('#checkbox-sb-realty');
@@ -77,6 +81,9 @@
showHideRealry();
(0, _read_more.readMoreInit)();
(0, _only_one_checkbox.onlyOneCheckboxInit)('#safe', '#by_agreement');
+ (0, _scroll_on_required.scrollOnRequiredInit)();
+ (0, _popups.showPopupsInit)();
+ window.addMessage = _popups.addMessage;
});
/***/ },
@@ -289,6 +296,59 @@
/***/ },
/* 7 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ function showMessage(container, template, message, type) {
+ var $popup = $(template);
+ $popup.hide();
+ $popup.find('.message').html(message);
+ $popup.addClass(type);
+ container.append($popup);
+ $popup.fadeIn(1000, function () {
+ setTimeout(function (el) {
+ $(el).fadeOut(1000);
+ }, 2000, this);
+ });
+ }
+
+ function addMessage(message, type) {
+ var $popups_storage = $('#popups-storage');
+ var li = '
' + message + '';
+ $popups_storage.append(li);
+ }
+
+ function showPopupsInit() {
+ var $popups_storage = $('#popups-storage');
+ var $popups_container = $('#popups-container');
+ var $popup = $popups_container.find(".popup");
+ var popup_html = $popup[0].outerHTML;
+ $popup.remove();
+ if (!$popups_storage.length) return;
+ $.each($popups_storage.find("li"), function (key, value) {
+ var message = $(value).html();
+ var type = $(value).attr('class');
+ showMessage($popups_container, popup_html, message, type);
+ $(value).remove();
+ });
+ $popups_storage.bind("DOMNodeInserted", function () {
+ var $li = $(this).find('li');
+ var message = $li.html();
+ var type = $li.attr('class');
+ $li.remove();
+ showMessage($popups_container, popup_html, message, type);
+ });
+ }
+
+ exports.showPopupsInit = showPopupsInit;
+ exports.addMessage = addMessage;
+
+/***/ },
+/* 8 */
/***/ function(module, exports) {
"use strict";
@@ -302,5 +362,35 @@
exports.print = print;
+/***/ },
+/* 9 */,
+/* 10 */,
+/* 11 */,
+/* 12 */,
+/* 13 */,
+/* 14 */,
+/* 15 */,
+/* 16 */,
+/* 17 */,
+/* 18 */,
+/* 19 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ function scrollOnRequiredInit() {
+ var $required = $('.required.error');
+ // console.log($required);
+ if (!$required.length) return;
+ $('html, body').animate({
+ scrollTop: $required.offset().top - 25
+ }, 1000);
+ }
+
+ exports.scrollOnRequiredInit = scrollOnRequiredInit;
+
/***/ }
/******/ ]);
\ No newline at end of file
diff --git a/assets/js/build/create_worksell.js b/assets/js/build/create_worksell.js
index 032caeb..4a50705 100644
--- a/assets/js/build/create_worksell.js
+++ b/assets/js/build/create_worksell.js
@@ -40,23 +40,33 @@
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
-/******/ ([
-/* 0 */
+/******/ ({
+
+/***/ 0:
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _file_upload = __webpack_require__(1);
- var _image_upload = __webpack_require__(8);
+ var _image_upload = __webpack_require__(20);
+
+ var _scroll_on_required = __webpack_require__(19);
+
+ var _popups = __webpack_require__(7);
$(function () {
// fileUploadInit();
+ // previewImg();
(0, _image_upload.imageUploadInit)();
+ (0, _scroll_on_required.scrollOnRequiredInit)();
+ (0, _popups.showPopupsInit)();
+ window.addMessage = _popups.addMessage;
});
/***/ },
-/* 1 */
+
+/***/ 1:
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -104,7 +114,8 @@
exports.fileUploadInit = fileUploadInit;
/***/ },
-/* 2 */
+
+/***/ 2:
/***/ function(module, exports) {
'use strict';
@@ -148,12 +159,83 @@
exports.getCookie = getCookie;
/***/ },
-/* 3 */,
-/* 4 */,
-/* 5 */,
-/* 6 */,
-/* 7 */,
-/* 8 */
+
+/***/ 7:
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ function showMessage(container, template, message, type) {
+ var $popup = $(template);
+ $popup.hide();
+ $popup.find('.message').html(message);
+ $popup.addClass(type);
+ container.append($popup);
+ $popup.fadeIn(1000, function () {
+ setTimeout(function (el) {
+ $(el).fadeOut(1000);
+ }, 2000, this);
+ });
+ }
+
+ function addMessage(message, type) {
+ var $popups_storage = $('#popups-storage');
+ var li = '' + message + '';
+ $popups_storage.append(li);
+ }
+
+ function showPopupsInit() {
+ var $popups_storage = $('#popups-storage');
+ var $popups_container = $('#popups-container');
+ var $popup = $popups_container.find(".popup");
+ var popup_html = $popup[0].outerHTML;
+ $popup.remove();
+ if (!$popups_storage.length) return;
+ $.each($popups_storage.find("li"), function (key, value) {
+ var message = $(value).html();
+ var type = $(value).attr('class');
+ showMessage($popups_container, popup_html, message, type);
+ $(value).remove();
+ });
+ $popups_storage.bind("DOMNodeInserted", function () {
+ var $li = $(this).find('li');
+ var message = $li.html();
+ var type = $li.attr('class');
+ $li.remove();
+ showMessage($popups_container, popup_html, message, type);
+ });
+ }
+
+ exports.showPopupsInit = showPopupsInit;
+ exports.addMessage = addMessage;
+
+/***/ },
+
+/***/ 19:
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ function scrollOnRequiredInit() {
+ var $required = $('.required.error');
+ // console.log($required);
+ if (!$required.length) return;
+ $('html, body').animate({
+ scrollTop: $required.offset().top - 25
+ }, 1000);
+ }
+
+ exports.scrollOnRequiredInit = scrollOnRequiredInit;
+
+/***/ },
+
+/***/ 20:
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -165,6 +247,26 @@
var _utils = __webpack_require__(2);
+ // function previewImg() {
+ // let $fileUploadWidgets = $('.file-upload-widget');
+ // $.each($fileUploadWidgets, function (ind, el) {
+ // let $fileImg = $(el).find('img');
+ // let $fileInput = $(el).find('.file-upload-input');
+ // // console.log("$fileInput[0].files.length = ", $fileInput[0].files.length);
+ // // console.log("$fileInput.val() = ", $fileInput.val());
+ // console.log("$fileInput = ", $fileInput);
+ // if ($fileInput[0].files.length) {
+ // console.log("Попытка загрузить файл");
+ // let reader = new FileReader();
+ // reader.onload = function (e) {
+ // $fileImg.attr('src', e.target.result);
+ // };
+ //
+ // reader.readAsDataURL($fileInput[0].files[0]);
+ // }
+ // })
+ // }
+
function imageUploadInit() {
var $fileUploadContainer = $('#fileUploadContainer');
@@ -179,7 +281,8 @@
var filePath = $fileInput.val().replace(/\\/g, '/');
var fileName = path.basename(filePath);
var fileSize = $fileInput.get(0).files && (0, _utils.humanFileSize)($fileInput.get(0).files[0].size);
-
+ console.log("file path", filePath);
+ console.log("file path2 ", $fileInput[0].files[0]);
if (fileName) {
$fileUploadWidget.find('.file-upload-label').text(fileName + ' ' + fileSize);
@@ -190,7 +293,7 @@
$fileUploadWidget.css('display', 'block');
- if ($fileImg) {
+ if ($fileImg.length) {
var reader = new FileReader();
reader.onload = function (e) {
$fileImg.attr('src', e.target.result);
@@ -207,6 +310,8 @@
});
} //TODO: оформить Upload'еры в виде классов
exports.imageUploadInit = imageUploadInit;
+ // export {imageUploadInit, previewImg}
/***/ }
-/******/ ]);
\ No newline at end of file
+
+/******/ });
\ No newline at end of file
diff --git a/assets/js/build/init_create_worksell.js b/assets/js/build/init_create_worksell.js
index 5a4c81a..babe985 100644
--- a/assets/js/build/init_create_worksell.js
+++ b/assets/js/build/init_create_worksell.js
@@ -76,7 +76,7 @@
function createSpecs(url) {
// SPECIALIZATIONS
var sb_main = new _TreeSelect2.default($('#select-box-1'), { url: url, visible: true, required: true });
- sb_main.setHeader("Тип готовой работы");
+ // sb_main.setHeader("Тип готовой работы");
var select_container = new _SelectedContainer2.default($('#selected-spec'), {
obj: sb_main
});
@@ -1049,7 +1049,7 @@
var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
classes = classes ? classes.join(" ") : "";
return htmlTemplate({
- header: "TestHeader", selectBox: selectBox, required: this.required, id: this.containerId, classes: classes,
+ header: "", selectBox: selectBox, required: this.required, id: this.containerId, classes: classes,
tmpl_selectBoxOptions: tmpl_selectBoxOptions, tmpl_selectBoxResults: tmpl_selectBoxResults
});
}
@@ -1102,7 +1102,8 @@
value: function setHeader(header) {
if (this.$header) {
- this.$header.html(header);
+ this.$header.find('.header').html(header);
+ this.$header.show();
} else {
this.header = header;
}
@@ -1155,8 +1156,9 @@
this.$container.replaceWith(template);
this.$selectBox = $("#" + this.containerId);
- this.$header = this.$selectBox.find('.select-box-header .header');
- this.$header.html(this.header);
+ this.$header = this.$selectBox.find('.select-box-header');
+ this.$header.find('.header').html(this.header);
+ if (!this.header) this.$header.hide();
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');
diff --git a/assets/js/build/init_customer_project_create.js b/assets/js/build/init_customer_project_create.js
index 6b6233e..42a148c 100644
--- a/assets/js/build/init_customer_project_create.js
+++ b/assets/js/build/init_customer_project_create.js
@@ -76,7 +76,7 @@
function createSpecs(url) {
// SPECIALIZATIONS
var sb_main = new _TreeSelect2.default($('#select-box-1'), { url: url, visible: true, required: true });
- sb_main.setHeader("Специальность");
+ // sb_main.setHeader("Специальность");
var select_container = new _SelectedContainer2.default($('#selected-spec'), {
obj: sb_main,
onlyOne: true
@@ -1084,7 +1084,7 @@
var selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
classes = classes ? classes.join(" ") : "";
return htmlTemplate({
- header: "TestHeader", selectBox: selectBox, required: this.required, id: this.containerId, classes: classes,
+ header: "", selectBox: selectBox, required: this.required, id: this.containerId, classes: classes,
tmpl_selectBoxOptions: tmpl_selectBoxOptions, tmpl_selectBoxResults: tmpl_selectBoxResults
});
}
@@ -1137,7 +1137,8 @@
value: function setHeader(header) {
if (this.$header) {
- this.$header.html(header);
+ this.$header.find('.header').html(header);
+ this.$header.show();
} else {
this.header = header;
}
@@ -1190,8 +1191,9 @@
this.$container.replaceWith(template);
this.$selectBox = $("#" + this.containerId);
- this.$header = this.$selectBox.find('.select-box-header .header');
- this.$header.html(this.header);
+ this.$header = this.$selectBox.find('.select-box-header');
+ this.$header.find('.header').html(this.header);
+ if (!this.header) this.$header.hide();
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');
diff --git a/assets/js/src/create_worksell.js b/assets/js/src/create_worksell.js
index 1ce0c56..e96f8e9 100644
--- a/assets/js/src/create_worksell.js
+++ b/assets/js/src/create_worksell.js
@@ -1,7 +1,13 @@
import {fileUploadInit} from './seeds/file_upload'
import {imageUploadInit} from './seeds/image_upload'
+import {scrollOnRequiredInit} from './seeds/scroll_on_required'
+import {showPopupsInit, addMessage} from './seeds/popups'
$(function () {
// fileUploadInit();
+ // previewImg();
imageUploadInit();
+ scrollOnRequiredInit();
+ showPopupsInit();
+ window.addMessage = addMessage;
});
\ No newline at end of file
diff --git a/assets/js/src/customer_project_create.js b/assets/js/src/customer_project_create.js
index be598d4..89fc83f 100644
--- a/assets/js/src/customer_project_create.js
+++ b/assets/js/src/customer_project_create.js
@@ -3,6 +3,8 @@ import {extendedFieldInit} from './seeds/extended_field'
import {customCheckInit} from './seeds/custom_check'
import {readMoreInit} from './seeds/read_more'
import {onlyOneCheckboxInit} from './seeds/only_one_checkbox'
+import {showPopupsInit, addMessage} from './seeds/popups'
+import {scrollOnRequiredInit} from './seeds/scroll_on_required'
import {print} from './seeds/test_seeds'
function showHideRealry() {
@@ -24,4 +26,7 @@ $(function () {
showHideRealry();
readMoreInit();
onlyOneCheckboxInit('#safe', '#by_agreement');
+ scrollOnRequiredInit();
+ showPopupsInit();
+ window.addMessage = addMessage;
});
\ No newline at end of file
diff --git a/assets/js/src/init_create_worksell.js b/assets/js/src/init_create_worksell.js
index 259d14a..554ec55 100644
--- a/assets/js/src/init_create_worksell.js
+++ b/assets/js/src/init_create_worksell.js
@@ -9,7 +9,7 @@ $(function () {
function createSpecs(url) {
// SPECIALIZATIONS
let sb_main = new TreeSelect($('#select-box-1'), {url, visible: true, required: true});
- sb_main.setHeader("Тип готовой работы");
+ // sb_main.setHeader("Тип готовой работы");
let select_container = new SelectedContainer($('#selected-spec'),
{
obj: sb_main,
diff --git a/assets/js/src/init_customer_project_create.js b/assets/js/src/init_customer_project_create.js
index c95dd61..3b94199 100644
--- a/assets/js/src/init_customer_project_create.js
+++ b/assets/js/src/init_customer_project_create.js
@@ -9,7 +9,7 @@ $(function () {
function createSpecs(url) {
// SPECIALIZATIONS
let sb_main = new TreeSelect($('#select-box-1'), {url, visible: true, required: true});
- sb_main.setHeader("Специальность");
+ // sb_main.setHeader("Специальность");
let select_container = new SelectedContainer($('#selected-spec'),
{
obj: sb_main,
diff --git a/assets/js/src/seeds/image_upload.js b/assets/js/src/seeds/image_upload.js
index de39cd8..af7a602 100644
--- a/assets/js/src/seeds/image_upload.js
+++ b/assets/js/src/seeds/image_upload.js
@@ -1,6 +1,26 @@
//TODO: оформить Upload'еры в виде классов
import {humanFileSize} from '../utils'
+// function previewImg() {
+// let $fileUploadWidgets = $('.file-upload-widget');
+// $.each($fileUploadWidgets, function (ind, el) {
+// let $fileImg = $(el).find('img');
+// let $fileInput = $(el).find('.file-upload-input');
+// // console.log("$fileInput[0].files.length = ", $fileInput[0].files.length);
+// // console.log("$fileInput.val() = ", $fileInput.val());
+// console.log("$fileInput = ", $fileInput);
+// if ($fileInput[0].files.length) {
+// console.log("Попытка загрузить файл");
+// let reader = new FileReader();
+// reader.onload = function (e) {
+// $fileImg.attr('src', e.target.result);
+// };
+//
+// reader.readAsDataURL($fileInput[0].files[0]);
+// }
+// })
+// }
+
function imageUploadInit() {
var $fileUploadContainer = $('#fileUploadContainer');
@@ -15,7 +35,8 @@ function imageUploadInit() {
var filePath = $fileInput.val().replace(/\\/g, '/');
var fileName = path.basename(filePath);
var fileSize = $fileInput.get(0).files && humanFileSize($fileInput.get(0).files[0].size);
-
+ console.log("file path", filePath);
+ console.log("file path2 ", $fileInput[0].files[0]);
if (fileName) {
$fileUploadWidget.find('.file-upload-label').text(fileName + ' ' + fileSize);
@@ -26,7 +47,7 @@ function imageUploadInit() {
$fileUploadWidget.css('display', 'block');
- if ($fileImg) {
+ if ($fileImg.length) {
let reader = new FileReader();
reader.onload = function (e) {
$fileImg.attr('src', e.target.result);
@@ -44,4 +65,5 @@ function imageUploadInit() {
}
-export {imageUploadInit}
\ No newline at end of file
+export {imageUploadInit}
+// export {imageUploadInit, previewImg}
\ No newline at end of file
diff --git a/assets/js/src/seeds/popups.js b/assets/js/src/seeds/popups.js
new file mode 100644
index 0000000..03d3e65
--- /dev/null
+++ b/assets/js/src/seeds/popups.js
@@ -0,0 +1,43 @@
+function showMessage(container, template, message, type) {
+ let $popup = $(template);
+ $popup.hide();
+ $popup.find('.message').html(message);
+ $popup.addClass(type);
+ container.append($popup);
+ $popup.fadeIn(1000, function () {
+ setTimeout(function (el) {
+ $(el).fadeOut(1000);
+ }, 2000, this)
+
+ });
+}
+
+function addMessage(message, type) {
+ const $popups_storage = $('#popups-storage');
+ let li = `${message}`;
+ $popups_storage.append(li);
+}
+
+function showPopupsInit() {
+ const $popups_storage = $('#popups-storage');
+ const $popups_container = $('#popups-container');
+ let $popup = $popups_container.find(".popup");
+ let popup_html = $popup[0].outerHTML;
+ $popup.remove();
+ if (!$popups_storage.length) return;
+ $.each($popups_storage.find("li"), function (key, value) {
+ let message = $(value).html();
+ let type = $(value).attr('class');
+ showMessage($popups_container, popup_html, message, type);
+ $(value).remove();
+ });
+ $popups_storage.bind("DOMNodeInserted", function () {
+ let $li = $(this).find('li');
+ let message = $li.html();
+ let type = $li.attr('class');
+ $li.remove();
+ showMessage($popups_container, popup_html, message, type);
+ });
+}
+
+export {showPopupsInit, addMessage}
\ No newline at end of file
diff --git a/assets/js/src/seeds/scroll_on_required.js b/assets/js/src/seeds/scroll_on_required.js
new file mode 100644
index 0000000..5238f86
--- /dev/null
+++ b/assets/js/src/seeds/scroll_on_required.js
@@ -0,0 +1,10 @@
+function scrollOnRequiredInit() {
+ let $required = $('.required.error');
+ // console.log($required);
+ if (!$required.length) return;
+ $('html, body').animate({
+ scrollTop: $required.offset().top - 25
+ }, 1000);
+}
+
+export {scrollOnRequiredInit}
\ No newline at end of file
diff --git a/assets/lib/proekton-components/js/src/base/AbsBaseSelect.js b/assets/lib/proekton-components/js/src/base/AbsBaseSelect.js
index eee258b..5d9937d 100644
--- a/assets/lib/proekton-components/js/src/base/AbsBaseSelect.js
+++ b/assets/lib/proekton-components/js/src/base/AbsBaseSelect.js
@@ -143,7 +143,7 @@ export default class AbsBaseSelect {
let selectBox = this.hasEditableContainer ? tmpl_selectBoxEditCont() : tmpl_selectBox();
classes = classes ? classes.join(" ") : "";
return htmlTemplate({
- header: "TestHeader", selectBox, required: this.required, id: this.containerId, classes,
+ header: "", selectBox, required: this.required, id: this.containerId, classes,
tmpl_selectBoxOptions, tmpl_selectBoxResults
})
}
@@ -224,7 +224,8 @@ export default class AbsBaseSelect {
setHeader(header) {
if (this.$header) {
- this.$header.html(header)
+ this.$header.find('.header').html(header);
+ this.$header.show();
} else {
this.header = header
}
@@ -273,8 +274,9 @@ export default class AbsBaseSelect {
this.$container.replaceWith(template);
this.$selectBox = $(`#${this.containerId}`);
- this.$header = this.$selectBox.find('.select-box-header .header');
- this.$header.html(this.header);
+ this.$header = this.$selectBox.find('.select-box-header');
+ this.$header.find('.header').html(this.header);
+ if (!this.header) this.$header.hide();
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');
diff --git a/assets/sass/common/_parts.sass b/assets/sass/common/_parts.sass
index 0ef0c3d..a92d324 100644
--- a/assets/sass/common/_parts.sass
+++ b/assets/sass/common/_parts.sass
@@ -19,4 +19,6 @@
.required
font:
size: 10pt
- color: #9f9f9f
\ No newline at end of file
+ color: #9f9f9f
+ &.error
+ color: red
\ No newline at end of file
diff --git a/projects/forms.py b/projects/forms.py
index 7172428..fdbdd07 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -191,7 +191,7 @@ class CustomerProjectEditFormNew(forms.ModelForm):
# self.fields['realty'].queryset = self.request.user.realties.all()
- # self.fields['budget'].required = False
+ self.fields['text'].required = True
# self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants()
# self.fields['specialization'].queryset = Specialization.objects # Migrate with this enabled
diff --git a/projects/templates/customer_project_create.html b/projects/templates/customer_project_create.html
index 1d5921e..16ec958 100644
--- a/projects/templates/customer_project_create.html
+++ b/projects/templates/customer_project_create.html
@@ -33,8 +33,8 @@
-
Обязательно
-
Обязательно
+
@@ -89,15 +92,15 @@
-
Обязательно
-
@@ -362,6 +365,14 @@
{% include 'partials/footer.html' %}
+
+ {% include 'partials/inc-message-popup.html' %}
{% endblock %}
diff --git a/templates/partials/base.html b/templates/partials/base.html
index 15877bc..0f7d67e 100644
--- a/templates/partials/base.html
+++ b/templates/partials/base.html
@@ -51,25 +51,27 @@
-{% if messages %}
- {% for message in messages %}
- {{ message|safe }}
- {% endfor %}
-{% endif %}
-
{% if TEMPLATE_DEBUG %}
-
- {{ request.user }}
-
- {% if request.user.is_authenticated %}
- PK: {{ request.user.pk }}
- Groups: {{ request.user.groups.all }}
- {% endif %}
-
+ {% if messages %}
+ {% for message in messages %}
+ {{ message|safe }}
+ {% endfor %}
+ {% endif %}
{% endif %}
+{#{% if TEMPLATE_DEBUG %}#}
+{# #}
+{# {{ request.user }}
#}
+{##}
+{# {% if request.user.is_authenticated %}#}
+{# PK: {{ request.user.pk }}
#}
+{# Groups: {{ request.user.groups.all }}#}
+{# {% endif %}#}
+{#
#}
+{#{% endif %}#}
+
{% block content %}{% endblock %}
{% block common_js %}
diff --git a/templates/partials/inc-message-popup.html b/templates/partials/inc-message-popup.html
new file mode 100644
index 0000000..3fae70a
--- /dev/null
+++ b/templates/partials/inc-message-popup.html
@@ -0,0 +1,8 @@
+{% load sass_tags %}
+
+
\ No newline at end of file
diff --git a/templates/partials/sass/popups.sass b/templates/partials/sass/popups.sass
new file mode 100644
index 0000000..aef056e
--- /dev/null
+++ b/templates/partials/sass/popups.sass
@@ -0,0 +1,28 @@
+.popups-container
+ width: 100%
+ position: fixed
+ top: 0
+ left: 0
+ opacity: 0.8
+ .popup
+ width: 100%
+ min-height: 50px
+ background-color: #7a8529
+ border-radius: 20px
+ border: 1px solid #ffffff
+ display: flex
+ -ms-flex-align: center
+ -webkit-align-items: center
+ -webkit-box-align: center
+ align-items: center
+ //text-align: center
+ .message
+ color: white
+ width: 100%
+ text-align: center
+ &.warning
+ background-color: #ffc649
+ &.error
+ background-color: #ff4146
+ &.info
+ background-color: #4e58ff
\ No newline at end of file
diff --git a/work_sell/templates/worksell_create.html b/work_sell/templates/worksell_create.html
index 1865196..763a1d9 100644
--- a/work_sell/templates/worksell_create.html
+++ b/work_sell/templates/worksell_create.html
@@ -45,7 +45,7 @@
-
Обязательно
+
Обязательно
@@ -97,7 +100,7 @@
-
Обязательно
+
Обязательно
+ rows="8">{{ form.description.value }}
@@ -130,7 +133,8 @@

-
+
@@ -195,13 +199,23 @@
+
{% include 'partials/footer.html' %}
+
+ {% include 'partials/inc-message-popup.html' %}
{% endblock %}
{% block old_js %}