diff --git a/apps/sqlpage/0.46.3/config/migrations/0000_init.sql b/apps/sqlpage/0.46.3/config/migrations/0000_init.sql new file mode 100644 index 000000000..f9d638a85 --- /dev/null +++ b/apps/sqlpage/0.46.3/config/migrations/0000_init.sql @@ -0,0 +1,5 @@ +create table todos( + id integer primary key, + title text not null, + created_at timestamp default current_timestamp +); diff --git a/apps/sqlpage/0.46.3/config/sqlpage.json b/apps/sqlpage/0.46.3/config/sqlpage.json new file mode 100644 index 000000000..d94aa8f8c --- /dev/null +++ b/apps/sqlpage/0.46.3/config/sqlpage.json @@ -0,0 +1,3 @@ +{ + "database_url": "sqlite:///var/www/sqlpage.db?mode=rwc" +} diff --git a/apps/sqlpage/0.46.3/site-template/delete.sql b/apps/sqlpage/0.46.3/site-template/delete.sql new file mode 100644 index 000000000..051348e2d --- /dev/null +++ b/apps/sqlpage/0.46.3/site-template/delete.sql @@ -0,0 +1,16 @@ +delete from todos +where id = $todo_id and $confirm = 'yes' +returning + 'redirect' as component, + '/' as link; + +select 'dynamic' as component, sqlpage.run_sql('shell.sql') as properties; + +select + 'alert' as component, + 'red' as color, + 'Confirm deletion' as title, + 'Are you sure you want to delete the following todo item?\n\n> ' || title as description_md, + '?todo_id=' || $todo_id || '&confirm=yes' as link, + 'Delete' as link_text +from todos where id = $todo_id; diff --git a/apps/sqlpage/0.46.3/site-template/index.sql b/apps/sqlpage/0.46.3/site-template/index.sql new file mode 100644 index 000000000..812957835 --- /dev/null +++ b/apps/sqlpage/0.46.3/site-template/index.sql @@ -0,0 +1,20 @@ +select 'dynamic' as component, sqlpage.run_sql('shell.sql') as properties; + +select 'list' as component, + 'Todo' as title, + 'No todo yet...' as empty_title; + +select + title, + 'todo_form.sql?todo_id=' || id as edit_link, + 'delete.sql?todo_id=' || id as delete_link +from todos; + +select + 'button' as component, + 'center' as justify; +select + 'todo_form.sql' as link, + 'green' as color, + 'Add new todo' as title, + 'circle-plus' as icon; diff --git a/apps/sqlpage/0.46.3/site-template/shell.sql b/apps/sqlpage/0.46.3/site-template/shell.sql new file mode 100644 index 000000000..5531a6d25 --- /dev/null +++ b/apps/sqlpage/0.46.3/site-template/shell.sql @@ -0,0 +1,4 @@ +select 'shell' as component, + printf('Todo list (%d)', count(*)) as title, + 'timeline' as menu_item +from todos; diff --git a/apps/sqlpage/0.46.3/site-template/timeline.sql b/apps/sqlpage/0.46.3/site-template/timeline.sql new file mode 100644 index 000000000..f472c2489 --- /dev/null +++ b/apps/sqlpage/0.46.3/site-template/timeline.sql @@ -0,0 +1,12 @@ +select 'dynamic' as component, sqlpage.run_sql('shell.sql') as properties; + +select 'timeline' as component; +select + title, + 'todo_form.sql?todo_id=' || id as link, + created_at as date, + 'calendar' as icon, + 'green' as color, + printf('%d days ago', julianday('now') - julianday(created_at)) as description +from todos +order by created_at desc; diff --git a/apps/sqlpage/0.46.3/site-template/todo_form.sql b/apps/sqlpage/0.46.3/site-template/todo_form.sql new file mode 100644 index 000000000..969069b60 --- /dev/null +++ b/apps/sqlpage/0.46.3/site-template/todo_form.sql @@ -0,0 +1,22 @@ +insert or replace into todos(id, title) +select $todo_id, :todo +where :todo is not null +returning + 'redirect' as component, + '/' as link; + +select 'dynamic' as component, sqlpage.run_sql('shell.sql') as properties; + +select + 'form' as component, + 'Todo' as title, + case when $todo_id is null then + 'Add new todo' + else + 'Edit todo' + end as validate; +select + 'Todo item' as label, + 'todo' as name, + 'What do you have to do?' as placeholder, + (select title from todos where id = $todo_id) as value;