Project Edit: Node types editing embedded

This commit is contained in:
2017-09-04 16:17:08 +02:00
parent 941ec94313
commit 06dd24bcf9
7 changed files with 156 additions and 128 deletions

View File

@@ -160,10 +160,6 @@ ul.list-generic
margin: 0
padding: 0
list-style: none
width: 350px
+media-xs
width: 100%
> li
padding: 5px 0

View File

@@ -80,22 +80,20 @@ ul.project-edit-tools
| {% endfor %}
ul.project-edit-tools.bottom
li.button-cancel
a#item_cancel.project-mode-edit(
href="{{url_for('projects.view', project_url=project.url, _external=True)}}",
title="Cancel changes")
i.button-cancel-icon.pi-back
| Go to Project
ul.project-edit-tools.bottom
li.button-cancel
a#item_cancel.project-mode-edit(
href="{{url_for('projects.view', project_url=project.url, _external=True)}}",
title="Cancel changes")
i.button-cancel-icon.pi-back
| Go to Project
li.button-save
a#item_save.project-mode-edit(
href="#",
title="Save changes")
i.button-save-icon.pi-check
| Save Changes
li.button-save
a#item_save.project-mode-edit(
href="#",
title="Save changes")
i.button-save-icon.pi-check
| Save Changes
| {% endblock %}

View File

@@ -6,7 +6,7 @@
#project-side-container
#project_sidebar
ul.project-tabs
li.tabs-thumbnail(
li.tabs-thumbnail.active(
title="About",
data-toggle="tooltip",
data-placement="left",
@@ -83,9 +83,9 @@
script.
/* UI Stuff */
$(window).on("load resize",function(){
$('#project-container').css('height', $(window).height());
$('#project_context-header').css('width', $('#project_context-container').width());
containerResizeY($(window).height());
});
| {% endblock %}
| {% block footer_navigation %}

View File

@@ -1,88 +0,0 @@
| {% extends 'layout.html' %}
| {% set title = 'edit_node_types' %}
| {% block page_title %}Project {{ project.name }}{% endblock %}
| {% block body %}
.container.box
form(
method='POST',
action="{{url_for('projects.edit_node_type', project_url=project.url, node_type_name=node_type['name'])}}")
#blog_container.post-create
| {% with errors = errors %}
| {% if errors %}
| {% for field in errors %}
.alert.alert-danger(role='alert')
strong {{field}}
| {% for message in errors[field] %}
| {{message}}|
| {% endfor %}
| {% endfor %}
| {% endif %}
| {% endwith %}
#blog_index-sidebar
.blog_project-sidebar
input.btn.btn-default.button-create(type='submit', value="Update {{ node_type['name'] }}")
a.btn.btn-default.button-back(href="{{ url_for('projects.view', project_url=project.url) }}")
| Back to Project
#blog_post-edit-container
#blog_post-edit-title
| Edit {{ node_type['name'] }}
#blog_post-edit-form
| {% for field in form %}
| {% if field.name == 'csrf_token' %}
| {{ field }}
| {% else %}
| {% if field.type == 'HiddenField' %}
| {{ field }}
| {% else %}
.form-group(class="{{field.name}}{% if field.errors %} error{% endif %}")
| {{ field.label }}
| {{ field(class='form-control') }}
| {% if field.errors %}
ul.error
| {% for error in field.errors %}
li {{ error }}
| {% endfor %}
| {% endif %}
| {% endif %}
| {% endif %}
| {% endfor %}
| {% endblock %}
| {% block footer_scripts%}
script(src="https://cdn.jsdelivr.net/g/ace@1.2.3(noconflict/ace.js+noconflict/mode-json.js)")
script.
var dynSchemaEditorContainer = $("<div>", {id: "dyn_schema_editor"});
$(".form-group.dyn_schema").before(dynSchemaEditorContainer);
var dynSchemaEditor = ace.edit("dyn_schema_editor");
dynSchemaEditor.getSession().setValue($("#dyn_schema").val());
var formSchemaEditorContainer = $("<div>", {id: "form_schema_editor"});
$(".form-group.form_schema").before(formSchemaEditorContainer);
var formSchemaEditor = ace.edit("form_schema_editor");
formSchemaEditor.getSession().setValue($("#form_schema").val());
var permissionsEditorContainer = $("<div>", {id: "permissions_editor"});
$(".form-group.permissions").before(permissionsEditorContainer);
var permissionsEditor = ace.edit("permissions_editor");
permissionsEditor.getSession().setValue($("#permissions").val());
$("form").submit(function(e) {
$("#dyn_schema").val(dynSchemaEditor.getSession().getValue());
$("#form_schema").val(formSchemaEditor.getSession().getValue());
$("#permissions").val(permissionsEditor.getSession().getValue());
});
| {% endblock %}

View File

@@ -0,0 +1,94 @@
form(
id="node-type-form",
method='POST',
action="{{url_for('projects.edit_node_type', project_url=project.url, node_type_name=node_type['name'])}}")
| {% with errors = errors %}
| {% if errors %}
| {% for field in errors %}
.alert.alert-danger(role='alert')
strong {{field}}
| {% for message in errors[field] %}
| {{message}}|
| {% endfor %}
| {% endfor %}
| {% endif %}
| {% endwith %}
.row
.col-md-9
h3 Editing: {{ node_type['name'] }}
.col-md-3
button.js-form-save.btn.btn-success.pull-right(style="margin-top: 15px;")
| Save Changes
.row
.col-md-12
| {% for field in form %}
| {% if field.name == 'csrf_token' %}
| {{ field }}
| {% else %}
| {% if field.type == 'HiddenField' %}
| {{ field }}
| {% else %}
.form-group(class="{{field.name}}{% if field.errors %} error{% endif %}")
| {{ field.label }}
| {{ field(class='form-control') }}
| {% if field.errors %}
ul.error
| {% for error in field.errors %}
li {{ error }}
| {% endfor %}
| {% endif %}
| {% endif %}
| {% endif %}
| {% endfor %}
button.js-form-save.btn.btn-success.pull-right
| Save Changes
script.
$(document).ready(function(){
var dynSchemaEditorContainer = $("<div>", {id: "dyn_schema_editor"});
$(".form-group.dyn_schema").before(dynSchemaEditorContainer);
var dynSchemaEditor = ace.edit("dyn_schema_editor");
dynSchemaEditor.getSession().setValue($("#dyn_schema").val());
var formSchemaEditorContainer = $("<div>", {id: "form_schema_editor"});
$(".form-group.form_schema").before(formSchemaEditorContainer);
var formSchemaEditor = ace.edit("form_schema_editor");
formSchemaEditor.getSession().setValue($("#form_schema").val());
var permissionsEditorContainer = $("<div>", {id: "permissions_editor"});
$(".form-group.permissions").before(permissionsEditorContainer);
var permissionsEditor = ace.edit("permissions_editor");
permissionsEditor.getSession().setValue($("#permissions").val());
$('.js-form-save').on('click', function(e){
e.preventDefault();
var $node_type_form = $('#node-type-form');
var url = $node_type_form.attr('action');
// Update the hidden textareas by reading content of the editor
// before serializing the form
$("#dyn_schema").val(dynSchemaEditor.getSession().getValue());
$("#form_schema").val(formSchemaEditor.getSession().getValue());
$("#permissions").val(permissionsEditor.getSession().getValue());
var data = $node_type_form.serialize();
$.post(url, data, function(datata) {
})
.done(function(){
toastr.success("Node Type: {{ node_type['name'] | undertitle }}", "Saved")
})
.fail(function(){
toastr.error("Node Type: {{ node_type['name'] | undertitle }}", "Could not save")
});
});
});

View File

@@ -10,22 +10,49 @@ span#project-edit-title
| {% block project_context %}
#node-edit-container
div(id="node-edit-form")
h3 Node Types
p.
Nodes are all the items that can be found in a project.
Everything is a node: a file, a folder, a comment. They are
defined with custom properties and properly presented to you.
When we add support for new node types in the future, it means we
allow the creation of new items (such as textures).
.row
.col-md-9
p.
Nodes are all the items that can be found in a project.
Everything is a node: a file, a folder, a comment. They are
defined with custom properties to be properly displayed.
.row
.col-md-4.col-sm-6
h3 Node Types
| {% if current_user.has_cap('edit-project-node-types') %}
ul.list-generic
| {% for node_type in project.node_types %}
li
a.js-item-open(
href="{{ url_for('projects.edit_node_type', project_url=project.url, node_type_name=node_type.name) }}",
data-url="{{ url_for('projects.edit_node_type', project_url=project.url, node_type_name=node_type.name) }}")
| {{ node_type.name | undertitle }}
.actions
span {{ node_type.name }}
| {% endfor %}
| {% endif %}
.col-md-8.col-sm-6
#node-edit-embed
| {% if current_user.has_cap('edit-project-node-types') %}
ul.list-generic
| {% for node_type in project.node_types %}
li
a(href="{{ url_for('projects.edit_node_type', project_url=project.url, node_type_name=node_type.name) }}")
| {{ node_type.name | undertitle }}
.actions
span {{ node_type.name }}
| {% endfor %}
| {% endif %}
| {% endblock %}
| {% block footer_scripts %}
script(src="//cdn.jsdelivr.net/g/ace@1.2.3(noconflict/ace.js+noconflict/mode-json.js)")
script.
$('.js-item-open').on('click', function(e){
e.preventDefault();
var item_url = $(this).data('url');
$.get(item_url, function(item_data) {
$('#node-edit-embed').html(item_data);
})
.fail(function(xhr){
toastr.error('Failed to open<br/>' + xhr);
});
});
| {% endblock footer_scripts %}