From 275490bec66717cb3c0077e46a258b43ab63039a Mon Sep 17 00:00:00 2001 From: zp6 Date: Fri, 15 May 2026 01:20:53 +0800 Subject: [PATCH] feat: Create Pages feature - issue #6 Implements the Create Pages feature for InlineGUI: - Add 'New Page' button in the site file listing dropdown - Create Page modal with: - Page title input with auto-generated filename - Filename input - Layout selector (populated from site layouts, disabled if only 1) - Page template selection (Blank Page, Page, Post) - Tags input (comma separated) - Create page via DocPad REST API (PUT to collection endpoint) - Auto-refresh file listing after page creation - If only one layout available, layout selector is disabled per issue requirement Resolves Docport/inlinegui#6 --- src/documents/index.html.coffee | 35 ++++++ src/documents/scripts/views/app.js.coffee | 124 ++++++++++++++++++++++ src/documents/styles/app.css.styl | 43 +++++++- 3 files changed, 201 insertions(+), 1 deletion(-) diff --git a/src/documents/index.html.coffee b/src/documents/index.html.coffee index d376ff3..2b5da99 100644 --- a/src/documents/index.html.coffee +++ b/src/documents/index.html.coffee @@ -94,6 +94,40 @@ aside '.app', -> span '.icon.icon-trash', -> text 'Delete' + section '.page-create.modal', -> + header -> + span '.title', -> 'Create New Page' + + div '.body', -> + form '.page-create-form', action:'', method:'PUT', -> + div '.field.field-page-title', -> + label -> 'Page Title' + input '.create-page-title', type:'text', placeholder:'My New Page', -> + + div '.field.field-page-filename', -> + label -> 'Filename' + input '.create-page-filename', type:'text', placeholder:'my-new-page.html', -> + + div '.field.field-page-layout', -> + label -> 'Layout' + select '.create-page-layout', -> + option value:'default', -> 'default' + + div '.field.field-page-template', -> + label -> 'Page Template' + select '.create-page-template', -> + option value:'', -> 'Blank Page' + option value:'page', -> 'Page' + option value:'post', -> 'Post' + + div '.field.field-page-tags', -> + label -> 'Tags (comma separated)' + input '.create-page-tags', type:'text', placeholder:'tag1, tag2', -> + + div '.create-page-actions', -> + input '.button.button-save.create-page-submit', type:'submit', value:'Create Page' + button '.button.button-cancel.create-page-cancel', -> 'Cancel' + aside '.page-list-container', -> \ section '.page-list.main.show-site', -> header -> @@ -107,6 +141,7 @@ aside '.app', -> li -> text 'Add new' span '.icon.icon-plus', -> + li '.button.button-add-page', -> 'New Page' li '.button.button-add-document', -> 'Document' li '.button.button-add-upload', -> 'Upload' diff --git a/src/documents/scripts/views/app.js.coffee b/src/documents/scripts/views/app.js.coffee index 926654e..128513f 100644 --- a/src/documents/scripts/views/app.js.coffee +++ b/src/documents/scripts/views/app.js.coffee @@ -38,6 +38,9 @@ class App extends View 'click .button-add-site': 'clickAddSite' 'submit .site-add-form': 'submitSite' 'click .site-add-form .button-cancel': 'submitSiteCancel' + 'click .button-add-page': 'clickAddPage' + 'submit .page-create-form': 'submitCreatePage' + 'click .page-create-form .button-cancel': 'cancelCreatePage' constructor: -> # Super @@ -504,6 +507,127 @@ class App extends View # Chain @ + # --------------------------------- + # Page Creation + + # Show the create page modal + clickAddPage: (e) => + @$el.find('.page-create.modal').show() + + # Populate layout options from available layouts + @$el.find('.create-page-layout').empty() + layouts = @currentSite?.getCollectionFiles('layouts') + if layouts?.models?.length + for model in layouts.models + @$el.find('.create-page-layout').append $('