diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2020-02-13 05:00:54 +0100 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2020-02-13 05:00:54 +0100 |
commit | fc427e26493d4bd070c09e5dbc348a1355c00e38 (patch) | |
tree | df04f0b158373549c6cc333f0de834f3e2be9f80 /src/main | |
parent | 6991257cd67631efae78e141b8ae7794129483c1 (diff) |
Add /bookmarks/new endpoint.
Change-Id: I903dbf5f918e1478fff82e5ebf6f3e3e2766572d
Diffstat (limited to 'src/main')
4 files changed, 64 insertions, 5 deletions
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/bookmarks/BookmarkResource.java b/src/main/java/eu/mulk/mulkcms2/benki/bookmarks/BookmarkResource.java index a535d0d..00e2824 100644 --- a/src/main/java/eu/mulk/mulkcms2/benki/bookmarks/BookmarkResource.java +++ b/src/main/java/eu/mulk/mulkcms2/benki/bookmarks/BookmarkResource.java @@ -21,6 +21,8 @@ import java.time.format.FormatStyle; import java.time.temporal.TemporalAccessor; import java.util.List; import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import javax.inject.Inject; import javax.json.JsonObject; import javax.json.spi.JsonProvider; @@ -55,6 +57,10 @@ public class BookmarkResource { @Inject Template bookmarkList; + @ResourcePath("benki/bookmarks/newBookmark.html") + @Inject + Template newBookmark; + @Inject SecurityIdentity identity; @GET @@ -83,6 +89,17 @@ public class BookmarkResource { return bookmarkList.data("bookmarks", bookmarks).data("authenticated", !identity.isAnonymous()); } + @GET + @Authenticated + @Path("new") + @Produces(TEXT_HTML) + public TemplateInstance getNewBookmarkForm( + @QueryParam("uri") @CheckForNull String uri, + @QueryParam("title") @CheckForNull String title, + @QueryParam("description") @CheckForNull String description) { + return newBookmark.data("uri", uri).data("title", title).data("description", description); + } + @POST @Transactional @Authenticated diff --git a/src/main/resources/META-INF/resources/bookmarks/MlkBookmarkSubmissionForm.js b/src/main/resources/META-INF/resources/bookmarks/MlkBookmarkSubmissionForm.js index 25de54b..313268d 100644 --- a/src/main/resources/META-INF/resources/bookmarks/MlkBookmarkSubmissionForm.js +++ b/src/main/resources/META-INF/resources/bookmarks/MlkBookmarkSubmissionForm.js @@ -21,7 +21,16 @@ export class MlkBookmarkSubmissionForm extends HTMLElement { focus() { let uriInput = this.shadowRoot.getElementById('uri-input'); - uriInput.focus(); + let titleInput = this.shadowRoot.getElementById('title-input'); + let descriptionInput = this.shadowRoot.getElementById('description-input'); + + if (!uriInput.value) { + uriInput.focus(); + } else if (!titleInput.value) { + titleInput.focus(); + } else { + descriptionInput.focus(); + } } async onUriBlur() { @@ -54,25 +63,28 @@ export class MlkBookmarkSubmissionForm extends HTMLElement { const template = html` <link rel="stylesheet" type="text/css" href="/cms2/base.css" /> - <form class="pure-form pure-form-aligned" method="post"> + <form class="pure-form pure-form-aligned" method="post" action="/bookmarks"> <fieldset> <legend>New Bookmark</legend> <div class="pure-control-group"> <label for="uri-input">URI:</label> <input name="uri" id="uri-input" type="text" placeholder="URI" required - @blur=${this.onUriBlur.bind(this)}/> + value=${this.getAttribute("uri") || ""} + @blur=${this.onUriBlur.bind(this)} /> <elix-progress-spinner id="uri-spinner" hidden></elix-progress-spinner> </div> <div class="pure-control-group"> <label for="title-input">Title:</label> - <input name="title" id="title-input" type="text" placeholder="Title" required/> + <input name="title" id="title-input" type="text" placeholder="Title" required + value="${this.getAttribute("title") || ""}" /> </div> <div class="pure-control-group"> <label for="description-input">Description:</label> - <textarea name="description" id="description-input" placeholder="Description"></textarea> + <textarea name="description" id="description-input" placeholder="Description" + >${this.getAttribute("description") || ""}</textarea> </div> <div class="pure-control-group"> diff --git a/src/main/resources/META-INF/resources/bookmarks/newBookmark.js b/src/main/resources/META-INF/resources/bookmarks/newBookmark.js new file mode 100644 index 0000000..0594c67 --- /dev/null +++ b/src/main/resources/META-INF/resources/bookmarks/newBookmark.js @@ -0,0 +1,4 @@ +document.addEventListener('DOMContentLoaded', () => { + let bookmarkSubmissionForm = document.getElementById('bookmark-submission-form'); + bookmarkSubmissionForm.focus(); +}); diff --git a/src/main/resources/templates/benki/bookmarks/newBookmark.html b/src/main/resources/templates/benki/bookmarks/newBookmark.html new file mode 100644 index 0000000..cb3147d --- /dev/null +++ b/src/main/resources/templates/benki/bookmarks/newBookmark.html @@ -0,0 +1,26 @@ +{@java.util.List<eu.mulk.mulkcms2.benki.bookmarks.Bookmark> bookmarks} +{@java.lang.Boolean authenticated} + +{#include base.html} + +{#title}Benki Bookmarks{/title} +{#siteSection}Bookmarks{/siteSection} +{#bookmarksClass}this-page{/bookmarksClass} + +{#head}{/head} + +{#body} + +<script type="module" src="/bookmarks/MlkBookmarkSubmissionForm.js" defer></script> +<script type="module" src="/bookmarks/newBookmark.js" defer></script> + +<mlk-bookmark-submission-form + id="bookmark-submission-form" + uri="{uri}" + title="{title}" + description="{description}"> +</mlk-bookmark-submission-form> + +{/body} + +{/include} |