Skip to content

Commit

Permalink
Merge pull request #1823 from maximlion/fix-notify-two
Browse files Browse the repository at this point in the history
Notify: Improve styles for admin and fix email lang bug
  • Loading branch information
tulimaki committed Mar 29, 2019
2 parents 6bf8dff + 8abf37f commit bf1541e
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 46 deletions.
17 changes: 9 additions & 8 deletions shuup/notify/admin_module/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def get_initial(self):

return initial

def _save_binding(self, new_data, identifier, binding):
def _save_binding(self, new_data, identifier, binding): # noqa (C901)
field_info = self.binding_field_info.get(identifier)
if not field_info:
return
Expand All @@ -166,6 +166,8 @@ def _save_binding(self, new_data, identifier, binding):
if constant_value:
if hasattr(constant_value, "value"): # Might be an enum TODO: fixme
constant_value = constant_value.value
if hasattr(constant_value, "pk"): # Might be a model instance TODO: fixme
constant_value = constant_value.pk
new_data[identifier] = {"constant": constant_value}
return

Expand All @@ -190,21 +192,20 @@ def _save_template(self, new_data):
)
if not any(lang_vals.values()): # Not worth saving
continue

can_save = True
for t_field_name, content in lang_vals.items():
if not content:
self.add_error(field_info[t_field_name], u"This field is missing content")
can_save = False

if lang_code == settings.PARLER_DEFAULT_LANGUAGE_CODE:
for t_field_name, content in lang_vals.items():
if not content: # Add error only to default languages
self.add_error(field_info[t_field_name], _("This field is missing content"))
can_save = False

if can_save:
template_data[lang_code] = lang_vals
new_data["template_data"] = template_data

def save(self):
new_data = {}
if "b_recipient_c" in self.cleaned_data and hasattr(self.cleaned_data["b_recipient_c"], "pk"):
self.cleaned_data['b_recipient_c'] = self.cleaned_data['b_recipient_c'].pk
self._save_bindings(new_data)
self._save_template(new_data)
if self.errors:
Expand Down
5 changes: 4 additions & 1 deletion shuup/notify/locale/en/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-09-25 21:31+0000\n"
"POT-Creation-Date: 2019-03-29 17:01+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: en <LL@li.org>\n"
Expand Down Expand Up @@ -89,6 +89,9 @@ msgstr ""
msgid "Bind to Variable"
msgstr ""

msgid "This field is missing content"
msgstr ""

msgid "Edit Script Contents"
msgstr ""

Expand Down
17 changes: 0 additions & 17 deletions shuup/notify/static/notify/admin/script-item-editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,7 @@
$lastFocusedTemplateInput.focus();
}

function refreshTabPanes() {
$(".tab-pane").hide();
var currentActiveHref = $("#main-tabs").find("li.active a").attr("href");
if (currentActiveHref) {
var tabId = currentActiveHref.split("#", 2)[1];
$("#" + tabId).show();
}
}

$(function() {
$("#main-tabs").find("a").click(function() {
var $link = $(this);
$(".nav-tabs li").removeClass("active");
$link.parents(".nav-tabs li").addClass("active");
refreshTabPanes();
return false;
});
refreshTabPanes();
$(".template-field-table :input").focus(function() {
// Required for insertTemplateVariableExpression
$lastFocusedTemplateInput = $(this);
Expand Down
7 changes: 6 additions & 1 deletion shuup/notify/static_src/script-editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,11 @@ function generateItemOptions(nameMap) {
}

function itemInfosToNameMap(itemInfos) {
return _(itemInfos).map(function (itemInfo, identifier){ return [identifier, itemInfo.name]; }).zipObject().value();
return Object.assign({},
...Object.keys(itemInfos).map((key) => ({
[itemInfos[key].identifier]: itemInfos[key].name
}))
);
}

function init(iSettings) {
Expand All @@ -330,6 +334,7 @@ function init(iSettings) {
infos.action = settings.actionInfos;
names.condition = itemInfosToNameMap(infos.condition);
names.action = itemInfosToNameMap(infos.action);

optionLists.condOps = generateItemOptions(settings.condOps);
optionLists.stepNexts = generateItemOptions(settings.stepNexts);

Expand Down
55 changes: 38 additions & 17 deletions shuup/notify/templates/notify/admin/script_item_editor.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -90,23 +90,39 @@
</div>
{% endif %}
<input name="init_data" type="hidden" value="{{ init_data }}">
<ul class="nav nav-tabs" id="main-tabs">
<li role="presentation" class="nav-item"><a href="#variables" class="nav-link">{% trans %}Variables{% endtrans %}</a></li>
<div class="language-dependent-content">
<div class="row language-tabs">
<div class="col-12">
<ul class="nav nav-tabs" id="main-tabs">
<li role="presentation" class="nav-item">
<a href="#variables" class="nav-link active" data-toggle="tab" aria-selected="true">
{% trans %}Variables{% endtrans %}
</a>
</li>
{% for language_code, language_name in form.template_languages %}
<li role="presentation" class="nav-item">
<a href="#template-{{ language_code }}" class="nav-link" data-toggle="tab" aria-selected="false" data-lang="{{ language_code }}">
{{ language_name }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
<div class="tab-content">
<div id="variables" class="tab-pane active">{{ binding_view(form) }}</div>
{% for language_code, language_name in form.template_languages %}
<li role="presentation" class="nav-item"><a href="#template-{{ language_code }}" class="nav-link">{{ language_name }}</a></li>
{% endfor %}
</ul>
<div id="variables" class="tab-pane">{{ binding_view(form) }}</div>
{% for language_code, language_name in form.template_languages %}
<div id="template-{{ language_code }}" class="tab-pane">
<div class="row">
<div class="col-md-8">{{ template_field_view(form, language_code) }}</div>
<div class="col-md-4">
{{ template_variable_list() }}
<div id="template-{{ language_code }}" class="tab-pane" data-lang="{{ language_code }}">
<div class="row">
<div class="col-md-8">{{ template_field_view(form, language_code) }}</div>
<div class="col-md-4">
{{ template_variable_list() }}
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
<input class="btn btn-success" type="submit" value="{% trans %}Save changes{% endtrans %}">
</form>
</div>
Expand All @@ -127,18 +143,23 @@
margin-bottom: 20px;
}
.title { margin-bottom: 15px; }
.nav-tabs { margin-bottom: 30px; }
.nav-tabs { margin-bottom: 10px; }
.summernote-wrap {
width: 100%;
}
.btn-success {
margin: 10px;
margin-top: 10px;
}
.nav-tabs:after {
background: transparent;
}
</style>
{% endblock %}
{% block extra_js %}
{% if post_message %}
<script>window.parent.postMessage({{ post_message|json }}, "*");</script>
<script>
window.parent.postMessage({{ post_message|json }}, "*");
</script>
{% endif %}
<script src="{{ static("notify/admin/script-item-editor.js") }}"></script>
{% endblock %}
2 changes: 1 addition & 1 deletion shuup/xtheme/parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
# LICENSE file in the root directory of this source tree.
from __future__ import unicode_literals

import toml
import six
import toml
from jinja2.ext import Extension
from jinja2.nodes import Const, EvalContext, ExprStmt, Impossible, Name, Output
from jinja2.utils import contextfunction
Expand Down
25 changes: 24 additions & 1 deletion shuup_tests/browser/notify/test_script_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ def test_stock_alert_limit_script_template(browser, admin_user, live_server, set

@pytest.mark.browser
@pytest.mark.djangodb
def test_dummy_script_template(browser, admin_user, live_server, settings):
def test_dummy_script_editor(browser, admin_user, live_server, settings):
initialize(browser, live_server, settings)

with override_provides("notify_script_template", ["shuup.testing.notify_script_templates:DummyScriptTemplate"]):
Expand Down Expand Up @@ -321,3 +321,26 @@ def test_dummy_script_template(browser, admin_user, live_server, settings):
# should exist only a single button to edit the script content
assert len(browser.find_by_css(".shuup-toolbar a.btn.btn-primary")) == 1
assert "Edit Script Contents" in browser.find_by_css(".shuup-toolbar a.btn.btn-primary").first.text
click_element(browser, ".shuup-toolbar a.btn.btn-primary")
wait_until_condition(browser, lambda b: b.is_text_present("New action"))

browser.find_by_css(".btn-primary")[1].click()
wait_until_condition(browser, lambda b: b.is_text_present("Send Email"))
browser.find_by_css(".item-option .item-name")[2].click()
with browser.get_iframe('step-item-frame') as iframe:
iframe.find_by_id("id_b_recipient_c").fill("random@gmail.com")
iframe.find_by_name("b_language_c").fill("English")
click_element(iframe, ".btn.btn-success")
wait_until_condition(iframe, lambda b: b.is_text_present("Please correct the errors below."))
browser.find_by_css(".nav-link")[1].click()
wait_until_condition(iframe, lambda b: b.is_text_present("This field is missing content")) # Assert that only the default shop language requires fields
if(len(settings.LANGUAGES) > 1):
browser.find_by_css(".nav-link")[2].click()
assert not iframe.is_text_present("This field is missing content") # Assert that another language doesn't contain content
browser.find_by_css(".nav-link")[1].click()
iframe.find_by_id("id_t_en_subject").fill("Random subject")
iframe.find_by_css(".note-editable.card-block").fill("<p>Lorem ipsum et cetera</p>")
click_element(iframe, ".btn.btn-success")
click_element(browser, ".btn.btn-success")
wait_until_condition(browser, lambda b: b.is_text_present("send_email")) # Check if email step has been added

0 comments on commit bf1541e

Please sign in to comment.