Refactored the patch list frontend code to make the forms more healthy and readable. Also, separated script tags into a separate js file which is better for keeping things modular and maintainable. Refer to cover letter for other conventions that I suggest for frontend code like naming for HTML attributes / CSS selectors.
Signed-off-by: Raxel Gutierrez <ra...@google.com> --- htdocs/README.rst | 7 + htdocs/js/patch-list.js | 12 ++ .../patchwork/partials/patch-list.html | 170 +++++++----------- patchwork/views/__init__.py | 2 + 4 files changed, 83 insertions(+), 108 deletions(-) create mode 100644 htdocs/js/patch-list.js diff --git a/htdocs/README.rst b/htdocs/README.rst index dfa7ca8..4441bf3 100644 --- a/htdocs/README.rst +++ b/htdocs/README.rst @@ -131,6 +131,13 @@ js :GitHub: https://github.com/js-cookie/js-cookie/ :Version: 2.2.1 +``patch-list.js.`` + + Utility functions for patch list manipulation (inline dropdown changes, + etc.) + + Part of Patchwork. + ``selectize.min.js`` Selectize is the hybrid of a ``textbox`` and ``<select>`` box. It's jQuery diff --git a/htdocs/js/patch-list.js b/htdocs/js/patch-list.js new file mode 100644 index 0000000..8c7640f --- /dev/null +++ b/htdocs/js/patch-list.js @@ -0,0 +1,12 @@ +$( document ).ready(function() { + $("#patchlist").stickyTableHeaders(); + + $("#check-all").change(function(e) { + if(this.checked) { + $("#patchlist > tbody").checkboxes("check"); + } else { + $("#patchlist > tbody").checkboxes("uncheck"); + } + e.preventDefault(); + }); +}); \ No newline at end of file diff --git a/patchwork/templates/patchwork/partials/patch-list.html b/patchwork/templates/patchwork/partials/patch-list.html index 02d6dff..629922c 100644 --- a/patchwork/templates/patchwork/partials/patch-list.html +++ b/patchwork/templates/patchwork/partials/patch-list.html @@ -4,9 +4,11 @@ {% load project %} {% load static %} -{% include "patchwork/partials/filters.html" %} +{% block headers %} + <script src="{% static "js/patch-list.js" %}"></script> +{% endblock %} -{% include "patchwork/partials/pagination.html" %} +{% include "patchwork/partials/filters.html" %} {% if order.editable %} <table class="patchlist"> @@ -35,25 +37,57 @@ </div> {% endif %} -<script type="text/javascript"> -$(document).ready(function() { - $('#patchlist').stickyTableHeaders(); - - $('#check-all').change(function(e) { - if(this.checked) { - $('#patchlist > tbody').checkboxes('check'); - } else { - $('#patchlist > tbody').checkboxes('uncheck'); - } - e.preventDefault(); - }); -}); -</script> - -<form method="post"> +<form id="patch-list-form" method="post"> {% csrf_token %} <input type="hidden" name="form" value="patchlistform"/> <input type="hidden" name="project" value="{{project.id}}"/> +<div class="patch-list-actions"> + <div class="patchforms" id="patchforms"> + {% if patchform %} + <div id="patchform-properties" class="patchform"> + <div id="patchform-state"> + {{ patchform.state.errors }} + {{ patchform.state }} + </div> + <div id="patchform-delegate"> + {{ patchform.delegate.errors }} + {{ patchform.delegate }} + </div> + <div id="patchform-archive"> + {{ patchform.archived.errors }} + {{ patchform.archived.label_tag }} {{ patchform.archived }} + </div> + <button class="patchform-submit btn btn-primary" name="action" value="{{patchform.action}}">Update</button> + </div> + {% endif %} + {% if user.is_authenticated %} + <div id="patchform-bundle" class="patchform"> + <div id="create-bundle"> + <input class="create-bundle" type="text" name="bundle_name" placeholder="Bundle name"/> + <input class="patchform-submit btn btn-primary" name="action" value="Create" type="submit"/> + </div> + {% if bundles %} + <div id="add-to-bundle"> + <select class="add-bundle" name="bundle_id"> + <option value="" selected>Add to bundle</option> + {% for bundle in bundles %} + <option value="{{bundle.id}}">{{bundle.name}}</option> + {% endfor %} + </select> + <input class="patchform-submit btn btn-primary" name="action" value="Add" type="submit"/> + </div> + {% endif %} + {% if bundle %} + <div id="remove-bundle"> + <input type="hidden" name="removed_bundle_id" value="{{bundle.id}}"/> + <button class="patchform-submit btn btn-primary" name="action" value="Remove">Remove from bundle</button> + </div> + {% endif %} + </div> + {% endif %} + </div> + {% include "patchwork/partials/pagination.html" %} +</div> <table id="patchlist" class="table table-hover table-extra-condensed table-striped pw-list" data-toggle="checkboxes" data-range="true"> <thead> @@ -174,9 +208,9 @@ $(document).ready(function() { <tbody> {% for patch in page.object_list %} - <tr id="patch_row:{{patch.id}}"> + <tr id="patch_row:{{patch.id}}" data-patch-id="{{patch.id}}"> {% if user.is_authenticated %} - <td style="text-align: center;"> + <td id="select-patch" style="text-align: center;"> <input type="checkbox" name="patch_id:{{patch.id}}"/> </td> {% endif %} @@ -188,24 +222,24 @@ $(document).ready(function() { </button> </td> {% endif %} - <td> + <td id="patch-name"> <a href="{% url 'patch-detail' project_id=project.linkname msgid=patch.url_msgid %}"> {{ patch.name|default:"[no subject]"|truncatechars:100 }} </a> </td> - <td> + <td id="patch-series"> {% if patch.series %} <a href="?series={{patch.series.id}}"> {{ patch.series|truncatechars:100 }} </a> {% endif %} </td> - <td class="text-nowrap">{{ patch|patch_tags }}</td> - <td class="text-nowrap">{{ patch|patch_checks }}</td> - <td class="text-nowrap">{{ patch.date|date:"Y-m-d" }}</td> - <td>{{ patch.submitter|personify:project }}</td> - <td>{{ patch.delegate.username }}</td> - <td>{{ patch.state }}</td> + <td id="patch-tags" class="text-nowrap">{{ patch|patch_tags }}</td> + <td id="patch-checks" class="text-nowrap">{{ patch|patch_checks }}</td> + <td id="patch-date" class="text-nowrap">{{ patch.date|date:"Y-m-d" }}</td> + <td id="patch-submitter">{{ patch.submitter|personify:project }}</td> + <td id="patch-delegate">{{ patch.delegate.username }}</td> + <td id="patch-state">{{ patch.state }}</td> </tr> {% empty %} <tr> @@ -217,86 +251,6 @@ $(document).ready(function() { {% if page.paginator.count %} {% include "patchwork/partials/pagination.html" %} - -<div class="patchforms" id="patchforms"> - -{% if patchform %} - <div class="patchform patchform-properties"> - <h3>Properties</h3> - <table class="form"> - <tr> - <th>Change state:</th> - <td> - {{ patchform.state }} - {{ patchform.state.errors }} - </td> - </tr> - <tr> - <th>Delegate to:</th> - <td> - {{ patchform.delegate }} - {{ patchform.delegate.errors }} - </td> - </tr> - <tr> - <th>Archive:</th> - <td> - {{ patchform.archived }} - {{ patchform.archived.errors }} - </td> - </tr> - <tr> - <td></td> - <td> - <input type="submit" name="action" value="{{patchform.action}}"/> - </td> - </tr> - </table> - </div> - -{% endif %} - -{% if user.is_authenticated %} - <div class="patchform patchform-bundle"> - <h3>Bundling</h3> - <table class="form"> - <tr> - <td>Create bundle:</td> - <td> - <input type="text" name="bundle_name"/> - <input name="action" value="Create" type="submit"/> - </td> - </tr> - {% if bundles %} - <tr> - <td>Add to bundle:</td> - <td> - <select name="bundle_id"> - {% for bundle in bundles %} - <option value="{{bundle.id}}">{{bundle.name}}</option> - {% endfor %} - </select> - <input name="action" value="Add" type="submit"/> - </td> - </tr> - {% endif %} - {% if bundle %} - <tr> - <td>Remove from bundle:</td> - <td> - <input type="hidden" name="removed_bundle_id" value="{{bundle.id}}"/> - <input name="action" value="Remove" type="submit"/> - </td> - </tr> - {% endif %} - </table> - </div> -{% endif %} - - <div style="clear: both;"> - </div> -</div> - {% endif %} </form> diff --git a/patchwork/views/__init__.py b/patchwork/views/__init__.py index 3efe90c..6c30f0b 100644 --- a/patchwork/views/__init__.py +++ b/patchwork/views/__init__.py @@ -129,6 +129,8 @@ def set_bundle(request, project, action, data, patches, context): bundle.save() messages.success(request, "Bundle %s created" % bundle.name) elif action == 'add': + if not data['bundle_id']: + return ['No bundle was selected'] bundle = get_object_or_404(Bundle, id=data['bundle_id']) elif action == 'remove': bundle = get_object_or_404(Bundle, id=data['removed_bundle_id']) -- 2.32.0.402.g57bb445576-goog _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork