mirror of https://github.com/logos-co/open-law.git
Merge pull request #157 from Simple2B/svyat/fix/issues
Svyat/fix/issues
This commit is contained in:
commit
a50e0b6c3a
|
@ -7,7 +7,7 @@ from app.logger import log
|
|||
|
||||
|
||||
class BaseBookForm(FlaskForm):
|
||||
label = StringField("Label", [DataRequired(), Length(6, 256)])
|
||||
label = StringField("Label", [DataRequired(), Length(4, 256)])
|
||||
about = StringField("About")
|
||||
tags = StringField("Tags")
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -17,105 +17,107 @@
|
|||
{% include 'book/modals/delete_section_modal.html' %}
|
||||
{% endif %}
|
||||
|
||||
<div class="flex overflow-hidden">
|
||||
<div class="flex">
|
||||
<!-- prettier-ignore -->
|
||||
<div id="accordion-collapse" data-accordion="open" class="p-3 w-2/6 border-t border-r border-gray-200 dark:border-gray-700 overflow-y-scroll h-box">
|
||||
<div class="flex justify-between">
|
||||
<div class="flex dark:text-white">
|
||||
<svg id="tabGoBackButton" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 cursor-pointer"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5L8.25 12l7.5-7.5" /> </svg>
|
||||
<h1 class="text-l font-extrabold dark:text-white ml-4 mb-3"> Table of contents </h1>
|
||||
</div>
|
||||
{% if not version and has_permission(book, Access.U) %}
|
||||
<div class="flex text-black dark:text-white">
|
||||
<!-- prettier-ignore -->
|
||||
<div>
|
||||
{% if not book.active_version.children_collections and current_user.is_authenticated %}
|
||||
<button type="button" data-modal-target="add-collection-modal" data-modal-toggle="add-collection-modal" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v6m3-3H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> </button>
|
||||
{% endif %}
|
||||
<a href="{{ url_for('book.settings', book_id=book.id) }}" type="button" class="ml-2" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" /> <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /> </svg>
|
||||
</a>
|
||||
<div class="w-2/6 border-gray-200 dark:border-gray-700 h-box">
|
||||
<div id="accordion-collapse" data-accordion="open" class="p-3 w-2/6 border-r fixed inset-0 mt-135 overflow-y-scroll">
|
||||
<div class="flex justify-between">
|
||||
<div class="flex dark:text-white">
|
||||
<svg id="tabGoBackButton" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 cursor-pointer"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5L8.25 12l7.5-7.5" /> </svg>
|
||||
<h1 class="text-l font-extrabold dark:text-white ml-4 mb-3"> Table of contents </h1>
|
||||
</div>
|
||||
{% if not version and has_permission(book, Access.U) %}
|
||||
<div class="flex text-black dark:text-white">
|
||||
<!-- prettier-ignore -->
|
||||
<div>
|
||||
{% if not book.active_version.children_collections and current_user.is_authenticated %}
|
||||
<button type="button" data-modal-target="add-collection-modal" data-modal-toggle="add-collection-modal" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v6m3-3H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> </button>
|
||||
{% endif %}
|
||||
<a href="{{ url_for('book.settings', book_id=book.id) }}" type="button" class="ml-2" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" /> <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /> </svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- prettier-ignore -->
|
||||
|
||||
{% if version %}
|
||||
{% set children_collections = version.children_collections %}
|
||||
{% else %}
|
||||
{% set children_collections = book.active_version.children_collections %}
|
||||
{% endif %}
|
||||
|
||||
{% for collection in children_collections if not collection.is_root and not collection.is_deleted %}
|
||||
<div
|
||||
{% if not collection.active_children and not collection.active_sections %}
|
||||
id="empty-dnd-entity"
|
||||
{% elif collection.active_children %}
|
||||
{% if not version and has_permission(collection, Access.U) %}
|
||||
data-dnd="dnd-sub-collection"
|
||||
{% endif %}
|
||||
{% elif collection.active_sections %}
|
||||
{% if not version and has_permission(collection, Access.U) %}
|
||||
id="draggableSectionItems"
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
data-entity-type="collection"
|
||||
data-entity-id="{{collection.id}}"
|
||||
class="filter {% if not version and not has_permission(collection, Access.U) %}denied{% endif %}"
|
||||
>
|
||||
<div
|
||||
data-entity-type="collection"
|
||||
data-entity-id="{{collection.id}}"
|
||||
class="flex items-center justify-start font-medium text-left text-gray-500 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-800 dark:text-gray-400"
|
||||
>
|
||||
<button class="bg-inherit" type="button" data-accordion-target="#accordion-collapse-body-{{collection.id}}" aria-expanded="true" aria-controls="accordion-collapse-body-{{collection.id}}">
|
||||
<!-- prettier-ignore -->
|
||||
<svg data-accordion-icon class="w-6 h-6 rotate-180 shrink-0" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path> </svg>
|
||||
</button>
|
||||
<button href="#collection-{{collection.label}}" id="accordion-collapse-heading-{{collection.id}}" class="w-full text-black dark:text-white ">
|
||||
<form id="rename-collection-label-form-{{collection.id}}" data-book-id='{{book.id}}' data-collection-id="{{collection.id}}" method="post" class="mb-0">
|
||||
{{ form_hidden_tag() }}
|
||||
<input class="w-full truncate bg-inherit border-none" value="{{collection.label}}" type="text" name="label" id="edit-collection-label-{{collection.id}}" placeholder="Collection label" required readonly/>
|
||||
<button name="submit" type="submit"></button>
|
||||
</form>
|
||||
</button>
|
||||
</div>
|
||||
<svg id="dropdownCollectionContextButton{{collection.id}}" data-dropdown-toggle="dropdown" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 0 0" stroke-width="1.5" stroke="none" class="w-0 h-0"></svg>
|
||||
</div>
|
||||
<div data="collection-context-menu-{{collection.id}}" id="dropdown" class="z-10 hidden bg-white divide-y divide-gray-800 border border-gray-800 dark:border-none dark:divide-gray-100 rounded-lg shadow dark:bg-gray-700">
|
||||
{% if not version %}
|
||||
{% include 'book/components/collection_context_menu.html' %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- prettier-ignore -->
|
||||
{% if collection.active_children %}
|
||||
<div id="accordion-collapse-body-{{collection.id}}" class="hidden" aria-labelledby="accordion-collapse-heading-{{collection.id}}" >
|
||||
{{recursive_render("book/components/sub_collection_tab_content.html",collection,book,version)|safe}}
|
||||
</div>
|
||||
{% elif collection.active_sections %}
|
||||
<div id="accordion-collapse-body-{{collection.id}}" class="hidden" aria-labelledby="accordion-collapse-heading-{{collection.id}}" >
|
||||
<div {% if not version and has_permission(collection, Access.U) %}id="draggableSectionItems"{% endif %} data-entity-id="{{collection.id}}" data-entity-type="collection" data-book-id="{{book.id}}" class="{% if not has_permission(collection, Access.U) %}filter{% endif %}">
|
||||
{% for section in collection.active_sections %}
|
||||
{% include 'book/components/section_tab_content.html' %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if version %}
|
||||
{% set children_collections = version.children_collections %}
|
||||
{% else %}
|
||||
<div
|
||||
id="accordion-collapse-body-{{collection.id}}"
|
||||
class="pl-6 pb-6 {% if not version and not has_permission(collection, Access.U) %}filter{% endif %}"
|
||||
data-dnd="dnd-sub-collection"
|
||||
data-book-id="{{book.id}}"
|
||||
data-entity-type="collection"
|
||||
data-entity-id="{{collection.id}}"
|
||||
aria-labelledby="accordion-collapse-heading-{{collection.id}}" >
|
||||
</div>
|
||||
{% set children_collections = book.active_version.children_collections %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% for collection in children_collections if not collection.is_root and not collection.is_deleted %}
|
||||
<div
|
||||
{% if not collection.active_children and not collection.active_sections %}
|
||||
id="empty-dnd-entity"
|
||||
{% elif collection.active_children %}
|
||||
{% if not version and has_permission(collection, Access.U) %}
|
||||
data-dnd="dnd-sub-collection"
|
||||
{% endif %}
|
||||
{% elif collection.active_sections %}
|
||||
{% if not version and has_permission(collection, Access.U) %}
|
||||
id="draggableSectionItems"
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
data-entity-type="collection"
|
||||
data-entity-id="{{collection.id}}"
|
||||
class="filter {% if not version and not has_permission(collection, Access.U) %}denied{% endif %}"
|
||||
>
|
||||
<div
|
||||
data-entity-type="collection"
|
||||
data-entity-id="{{collection.id}}"
|
||||
class="flex items-center justify-start font-medium text-left text-gray-500 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-800 dark:text-gray-400"
|
||||
>
|
||||
<button class="bg-inherit" type="button" data-accordion-target="#accordion-collapse-body-{{collection.id}}" aria-expanded="true" aria-controls="accordion-collapse-body-{{collection.id}}">
|
||||
<!-- prettier-ignore -->
|
||||
<svg data-accordion-icon class="w-6 h-6 rotate-180 shrink-0" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path> </svg>
|
||||
</button>
|
||||
<button href="#collection-{{collection.label}}" id="accordion-collapse-heading-{{collection.id}}" class="w-full text-black dark:text-white ">
|
||||
<form id="rename-collection-label-form-{{collection.id}}" data-book-id='{{book.id}}' data-collection-id="{{collection.id}}" method="post" class="mb-0">
|
||||
{{ form_hidden_tag() }}
|
||||
<input class="w-full truncate bg-inherit border-none" value="{{collection.label}}" type="text" name="label" id="edit-collection-label-{{collection.id}}" placeholder="Collection label" required readonly/>
|
||||
<button name="submit" type="submit"></button>
|
||||
</form>
|
||||
</button>
|
||||
</div>
|
||||
<svg id="dropdownCollectionContextButton{{collection.id}}" data-dropdown-toggle="dropdown" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 0 0" stroke-width="1.5" stroke="none" class="w-0 h-0"></svg>
|
||||
</div>
|
||||
<div data="collection-context-menu-{{collection.id}}" id="dropdown" class="z-10 hidden bg-white divide-y divide-gray-800 border border-gray-800 dark:border-none dark:divide-gray-100 rounded-lg shadow dark:bg-gray-700">
|
||||
{% if not version %}
|
||||
{% include 'book/components/collection_context_menu.html' %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- prettier-ignore -->
|
||||
{% if collection.active_children %}
|
||||
<div id="accordion-collapse-body-{{collection.id}}" class="hidden" aria-labelledby="accordion-collapse-heading-{{collection.id}}" >
|
||||
{{recursive_render("book/components/sub_collection_tab_content.html",collection,book,version)|safe}}
|
||||
</div>
|
||||
{% elif collection.active_sections %}
|
||||
<div id="accordion-collapse-body-{{collection.id}}" class="hidden" aria-labelledby="accordion-collapse-heading-{{collection.id}}" >
|
||||
<div {% if not version and has_permission(collection, Access.U) %}id="draggableSectionItems"{% endif %} data-entity-id="{{collection.id}}" data-entity-type="collection" data-book-id="{{book.id}}" class="{% if not has_permission(collection, Access.U) %}filter{% endif %}">
|
||||
{% for section in collection.active_sections %}
|
||||
{% include 'book/components/section_tab_content.html' %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div
|
||||
id="accordion-collapse-body-{{collection.id}}"
|
||||
class="pl-6 pb-6 {% if not version and not has_permission(collection, Access.U) %}filter{% endif %}"
|
||||
data-dnd="dnd-sub-collection"
|
||||
data-book-id="{{book.id}}"
|
||||
data-entity-type="collection"
|
||||
data-entity-id="{{collection.id}}"
|
||||
aria-labelledby="accordion-collapse-heading-{{collection.id}}" >
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<!-- Here start book-preview on right side-->
|
||||
<div class="p-3 px-6 w-4/6 dark:text-white overflow-y-scroll h-box">
|
||||
<div class="p-3 px-6 w-4/6 dark:text-white">
|
||||
<p class="text-xs mb-3">
|
||||
{% if book.original_book %}
|
||||
Forked by
|
||||
|
@ -197,7 +199,7 @@
|
|||
{% else %}
|
||||
{% set children_collections = book.active_version.children_collections %}
|
||||
{% endif %} {% for collection in children_collections if not collection.is_root and not collection.is_deleted %}
|
||||
<p class="my-3 underline" id="collection-{{collection.label}}">
|
||||
<p class="my-3 underline break-words " id="collection-{{collection.label}}">
|
||||
#{{collection.label}}
|
||||
</p>
|
||||
{% if not collection.active_sections and not collection.active_children %}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<div>
|
||||
<div class="col-span-6 sm:col-span-3 mb-2">
|
||||
<label for="label" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white" >Label</label >
|
||||
<input type="text" name="label" id="label" maxlength="256" minlength="6" maxlength="256" class="shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-600 focus:border-blue-600 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="Name" required />
|
||||
<input type="text" name="label" id="label" maxlength="256" minlength="4" class="shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-600 focus:border-blue-600 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="Name" required />
|
||||
</div>
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="about" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white" >About</label >
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
<!-- Add contributor modal -->
|
||||
<!-- prettier-ignore-->
|
||||
<div id="edit-version-label-modal" tabindex="-1" aria-hidden="true" class="fixed top-0 left-0 right-0 z-[150] hidden w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] max-h-full">
|
||||
<div id="add-version-modal" tabindex="-1" aria-hidden="true" class="fixed top-0 left-0 right-0 z-[150] hidden w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] max-h-full">
|
||||
<div class="relative w-full max-w-2xl max-h-full">
|
||||
<!-- Modal content -->
|
||||
<form action="{{ url_for('book.edit_version', book_id=book.id) }}" method="post" class="relative bg-white rounded-lg shadow dark:bg-gray-700">
|
||||
<form action="{{ url_for('book.create_version', book_id=book.id) }}" method="post" class="relative bg-white rounded-lg shadow dark:bg-gray-700">
|
||||
{{ form_hidden_tag() }}
|
||||
<!-- Modal header -->
|
||||
<input type="hidden" name="version_id" id="version_id" value="0" class="version-id-input"/>
|
||||
|
||||
<div class="p-6 space-y-6">
|
||||
<div>
|
||||
<label for="semver-input" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Name</label>
|
||||
|
@ -17,7 +15,7 @@
|
|||
|
||||
<!-- Modal footer -->
|
||||
<div class="flex items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
|
||||
<button name="submit" type="submit" class="prevent-unsaved-changes-event text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Save</button>
|
||||
<button name="submit" type="submit" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<!-- Add contributor modal -->
|
||||
<!-- prettier-ignore-->
|
||||
<div id="add-version-modal" tabindex="-1" aria-hidden="true" class="fixed top-0 left-0 right-0 z-[150] hidden w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] max-h-full">
|
||||
<div id="edit-version-label-modal" tabindex="-1" aria-hidden="true" class="fixed top-0 left-0 right-0 z-[150] hidden w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] max-h-full">
|
||||
<div class="relative w-full max-w-2xl max-h-full">
|
||||
<!-- Modal content -->
|
||||
<form action="{{ url_for('book.create_version', book_id=book.id) }}" method="post" class="relative bg-white rounded-lg shadow dark:bg-gray-700">
|
||||
<form action="{{ url_for('book.edit_version', book_id=book.id) }}" method="post" class="relative bg-white rounded-lg shadow dark:bg-gray-700">
|
||||
{{ form_hidden_tag() }}
|
||||
<!-- Modal header -->
|
||||
<input type="hidden" name="version_id" id="version_id" value="0" class="version-id-input"/>
|
||||
|
||||
<div class="p-6 space-y-6">
|
||||
<div>
|
||||
<label for="semver-input" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Name</label>
|
||||
|
@ -15,7 +16,7 @@
|
|||
|
||||
<!-- Modal footer -->
|
||||
<div class="flex items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
|
||||
<button name="submit" type="submit" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Save</button>
|
||||
<button name="submit" type="submit" class="prevent-unsaved-changes-event text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
{% include 'book/modals/delete_contributor_modal.html' %}
|
||||
{% include 'book/modals/edit_version_label_modal.html' %}
|
||||
{% include 'book/modals/delete_version_modal.html' %}
|
||||
{% include 'book/modals/edit_version_label_modal.html' %}
|
||||
{% include 'book/modals/add_version_modal.html' %}
|
||||
|
||||
<!-- Hide right_sidebar -->
|
||||
<!-- prettier-ignore -->
|
||||
|
@ -59,7 +59,7 @@
|
|||
{{ form_hidden_tag() }}
|
||||
<input value="{{book.id}}" type="text" name="book_id" id="book_id" class="hidden" placeholder="Book id" required>
|
||||
<div>
|
||||
<label for="label" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Label</label>
|
||||
<label for="label" maxlength="256" minlength="4" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Label</label>
|
||||
<input value="{{book.label}}" type="text" name="label" id="label" class="book-label-input bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="My Book" required>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -187,6 +187,9 @@
|
|||
<th scope="col" class="px-6 py-3">
|
||||
Created At
|
||||
</th>
|
||||
<th scope="col" class="px-6 py-3">
|
||||
Link
|
||||
</th>
|
||||
<th scope="col" class="px-6 py-3"> </th>
|
||||
<th scope="col" class="px-6 py-3"> </th>
|
||||
</tr>
|
||||
|
@ -195,8 +198,18 @@
|
|||
{% for version in book.actual_versions if not version.is_active %}
|
||||
<tr class="bg-white border-b dark:bg-gray-900 dark:border-gray-700">
|
||||
<td class="px-6 truncate max-w-[280]">{{ loop.index }}</td>
|
||||
<td class="px-6 truncate max-w-[280]">{{ version.semver }}</td>
|
||||
<td class="px-6 truncate max-w-[280]">
|
||||
{{ version.semver }}
|
||||
</td>
|
||||
<td class="px-6"> {{ version.created_at.strftime('%B %d, %Y') }} </td>
|
||||
<td class="px-6 truncate max-w-[280]">
|
||||
<a
|
||||
href="{{url_for('book.collection_view',book_id=book.id,version_index=loop.index)}}"
|
||||
class="text-blue-500"
|
||||
>
|
||||
Read
|
||||
</a>
|
||||
</td>
|
||||
<td class="px-4 py-4">
|
||||
<button type="button" data-version-id="{{ version.id }}" data-version-semver="{{ version.semver }}" data-modal-target="edit-version-label-modal" data-modal-toggle="edit-version-label-modal" class="edit-version-label-btns text-gray-900 bg-white border border-gray-300 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded-lg text-sm px-5 py-1 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600 dark:focus:ring-gray-700">
|
||||
Edit
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
const scrollToElement = (element: Element) => {
|
||||
var headerOffset = 160;
|
||||
var elementPosition = element.getBoundingClientRect().top;
|
||||
var offsetPosition = elementPosition + window.pageYOffset - headerOffset;
|
||||
|
||||
window.scrollTo({
|
||||
top: offsetPosition,
|
||||
behavior: 'smooth',
|
||||
});
|
||||
};
|
||||
|
||||
export function scroll() {
|
||||
const btns = document.querySelectorAll('[href^="#section-"]');
|
||||
if (btns) {
|
||||
|
@ -7,7 +18,7 @@ export function scroll() {
|
|||
link = link.replace('#', '');
|
||||
const neededSection = document.querySelector(`[id^="${link}"]`);
|
||||
if (neededSection) {
|
||||
neededSection.scrollIntoView(true);
|
||||
scrollToElement(neededSection);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -20,7 +31,7 @@ export function scroll() {
|
|||
link = link.replace('#', '');
|
||||
const neededSection = document.querySelector(`[id^="${link}"]`);
|
||||
if (neededSection) {
|
||||
neededSection.scrollIntoView(true);
|
||||
scrollToElement(neededSection);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -40,4 +40,4 @@
|
|||
.disabled {
|
||||
pointer-events: none;
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,13 +29,13 @@ def test_create_edit_delete_book(client: FlaskClient):
|
|||
response: Response = client.post(
|
||||
"/book/create",
|
||||
data=dict(
|
||||
label="12345",
|
||||
label="123",
|
||||
),
|
||||
follow_redirects=True,
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert b"Label must be between 6 and 256 characters long." in response.data
|
||||
assert b"Label must be between 4 and 256 characters long." in response.data
|
||||
|
||||
book: m.Book = m.Book.query.filter_by(label=BOOK_NAME).first()
|
||||
|
||||
|
@ -52,7 +52,7 @@ def test_create_edit_delete_book(client: FlaskClient):
|
|||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert b"Label must be between 6 and 256 characters long." in response.data
|
||||
assert b"Label must be between 4 and 256 characters long." in response.data
|
||||
|
||||
book: m.Book = m.Book.query.filter_by(label=BOOK_NAME).first()
|
||||
|
||||
|
|
Loading…
Reference in New Issue