diff options
| -rw-r--r-- | ihatemoney/forms.py | 5 | ||||
| -rw-r--r-- | ihatemoney/static/css/main.css | 12 | ||||
| -rw-r--r-- | ihatemoney/templates/edit_project.html | 39 | ||||
| -rw-r--r-- | ihatemoney/templates/layout.html | 1 | ||||
| -rw-r--r-- | ihatemoney/templates/upload_json.html | 10 | ||||
| -rw-r--r-- | ihatemoney/web.py | 42 |
6 files changed, 68 insertions, 41 deletions
diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py index 88afd29..62c2144 100644 --- a/ihatemoney/forms.py +++ b/ihatemoney/forms.py @@ -114,8 +114,11 @@ class EditProjectForm(FlaskForm): class UploadForm(FlaskForm): file = FileField( - "JSON", validators=[FileRequired(), FileAllowed(["json", "JSON"], "JSON only!")] + "JSON", + validators=[FileRequired(), FileAllowed(["json", "JSON"], "JSON only!")], + description=_("Import previously exported JSON file"), ) + submit = SubmitField(_("Import")) class ProjectForm(EditProjectForm): diff --git a/ihatemoney/static/css/main.css b/ihatemoney/static/css/main.css index 32c267e..fe8eec2 100644 --- a/ihatemoney/static/css/main.css +++ b/ihatemoney/static/css/main.css @@ -185,7 +185,7 @@ footer { padding: 45px 50px; } -@media (min-width: 768px) { +@media (min-width: 1024px) { footer { padding-left: calc(25% + 50px); } @@ -523,3 +523,13 @@ footer .icon svg { text-align: right; width: 200px; } + +/* edit settings */ + +.edit-project form { + margin-top: 1em; + margin-bottom: 3em; +} +.edit-project .custom-file { + margin-bottom: 2em; +} diff --git a/ihatemoney/templates/edit_project.html b/ihatemoney/templates/edit_project.html index dcbbbc8..b7861c5 100644 --- a/ihatemoney/templates/edit_project.html +++ b/ihatemoney/templates/edit_project.html @@ -5,18 +5,43 @@ { $(this).html("<a style='color:red; ' href='{{ url_for('.delete_project') }}' >{{_("you sure?")}}</a>"); }); + + $('.custom-file-input').on('change', function(event) { + var filename = [].slice.call(this.files).map(function (file) { return file.name}).join(',') + var $labelElement = $(this).parents('.custom-file').find('.custom-file-label') + $labelElement.text(filename) + }) {% endblock %} {% block content %} -<h2>{{ _("Edit project") }}</h2> -<p> +<div class="container edit-project"> + + <h2>{{ _("Edit project") }}</h2> <form class="form-horizontal" method="post"> - {{ forms.edit_project(edit_form) }} + {{ forms.edit_project(edit_form) }} + </form> + + + <h2>{{ _("Import JSON") }}</h2> + <form class="form-horizontal" method="post" enctype="multipart/form-data"> + {{ import_form.hidden_tag() }} + + <div class="custom-file"> + <div class="form-group"> + {{ import_form.file(class="custom-file-input") }} + <small class="form-text text-muted"> + {{ import_form.file.description }} + </small> + </div> + <label class="custom-file-label" for="customFile">{{ _('Choose file') }}</label> + </div> + + <div class="actions"> + {{ import_form.submit(class="btn btn-primary") }} + </div> </form> -</p> -<h2>{{ _("Download project's data") }}</h2> -<p> + <h2>{{ _("Download project's data") }}</h2> <div class="list-group download-project"> <div class="list-group-item list-group-item-action"> <h5 class="d-flex w-100 justify-content-between"> @@ -51,5 +76,5 @@ <p class="mb-1 text-muted">{{ _('Download the list of transactions needed to settle the current bills.') }}</p> </div> </div> -</p> +</div> {% endblock %} diff --git a/ihatemoney/templates/layout.html b/ihatemoney/templates/layout.html index dc3d32f..8609779 100644 --- a/ihatemoney/templates/layout.html +++ b/ihatemoney/templates/layout.html @@ -46,7 +46,6 @@ <li class="nav-item{% if current_view == 'settle_bill' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.settle_bill") }}">{{ _("Settle") }}</a></li> <li class="nav-item{% if current_view == 'statistics' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.statistics") }}">{{ _("Statistics") }}</a></li> <li class="nav-item{% if current_view == 'edit_project' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.edit_project") }}">{{ _("Settings") }}</a></li> - <li class="nav-item{% if current_view == 'upload_json' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.upload_json") }}">{{ _("Import") }}</a></li> {% endblock %} {% endif %} </ul> diff --git a/ihatemoney/templates/upload_json.html b/ihatemoney/templates/upload_json.html deleted file mode 100644 index 64aca0f..0000000 --- a/ihatemoney/templates/upload_json.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "layout.html" %}
-
-{% block content %}
- <h2>{{ _("Import JSON") }}</h2>
- <p>
- <form class="form-horizontal" method="post" enctype="multipart/form-data">
- {{ forms.upload_json(form) }}
- </form>
- </p>
-{% endblock %}
diff --git a/ihatemoney/web.py b/ihatemoney/web.py index a3b1072..8e0bca6 100644 --- a/ihatemoney/web.py +++ b/ihatemoney/web.py @@ -384,36 +384,36 @@ def reset_password(): @main.route("/<project_id>/edit", methods=["GET", "POST"]) def edit_project(): edit_form = EditProjectForm() - if request.method == "POST": - if edit_form.validate(): - project = edit_form.update(g.project) - db.session.add(project) - db.session.commit() + import_form = UploadForm() + # Import form + if import_form.validate_on_submit(): + try: + import_project(import_form.file.data.stream, g.project) + flash(_("Project successfully uploaded")) - return redirect(url_for(".list_bills")) + return redirect(url_for("main.list_bills")) + except ValueError: + flash(_("Invalid JSON"), category="error") + + # Edit form + if edit_form.validate_on_submit(): + project = edit_form.update(g.project) + db.session.add(project) + db.session.commit() + + return redirect(url_for("main.list_bills")) else: edit_form.name.data = g.project.name edit_form.contact_email.data = g.project.contact_email return render_template( - "edit_project.html", edit_form=edit_form, current_view="edit_project" + "edit_project.html", + edit_form=edit_form, + import_form=import_form, + current_view="edit_project", ) -@main.route("/<project_id>/upload_json", methods=["GET", "POST"]) -def upload_json(): - form = UploadForm() - if form.validate_on_submit(): - try: - import_project(form.file.data.stream, g.project) - flash(_("Project successfully uploaded")) - except ValueError: - flash(_("Invalid JSON"), category="error") - return redirect(url_for("main.list_bills")) - - return render_template("upload_json.html", form=form) - - def import_project(file, project): json_file = json.load(file) |
