Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom View/Theme Support #652

Closed
ssddanbrown opened this issue Dec 31, 2017 · 16 comments
Closed

Custom View/Theme Support #652

ssddanbrown opened this issue Dec 31, 2017 · 16 comments

Comments

@ssddanbrown
Copy link
Member

ssddanbrown commented Dec 31, 2017

This system has now been documented on the docs site here: https://www.bookstackapp.com/docs/admin/hacking-bookstack/#theme-system


Enable the ability to override views without editing original files. Will greatly enhance customizability of views.

By setting an APP_THEME environment variable a custom theme can be used.
A theme folder has been added to the root BookStack dir. Any custom themes can be added within their own folder here.

After setting an APP_THEME variable then the system will search in the themes/{APP_THEME} folder for any views before defaulting to standard BookStack views. This gives the option to only override single views if required.

Will need to do a major clean-up of views at some point to ensure everything is modular. May also need to add some helpers to allow easy, safe fetching of entities through the permission system to prevent otherwise 'Themers' with Laravel knowledge may directly query models within views.

This serves as a potential solution to the following:

@ssddanbrown
Copy link
Member Author

Well laravel made that much easier than expected. Functionality added in 6988a6f.

Still need to do a view clear-up at some point so will keep this open for now.
I've put this directly into master for widespread testing during development but this is not something to publicize or recommend to non-technical users for now due to the instability of view changes.

@Abijeet
Copy link
Member

Abijeet commented Jan 2, 2018

I was thinking that maybe we could introduce something like WordPress shortcodes in BookStack for the table of contents related issues (and potentially others) but I think this is a solution that will meet more requirements.

@bridgeyuwa
Copy link

Have been waiting for this a long time now

@Wachert
Copy link

Wachert commented Mar 28, 2018

Another nice Feature for this one would be if it is possible to define a theme per role...

we want another theme for guests than for logged in users.

guests hould not see things like last changes, histories, etc... only logged in users should see this informations.

lassebenni added a commit to lassebenni/BookStack that referenced this issue Apr 13, 2018
* Started draw.io integration

* Updated pull-request info to be clearer

Also updated dev version

* Adds code to allow deletion of users via cmd line.

Fixes BookStackApp#579

Command:

php artisan bookstack:delete-users

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds button to allow users to toggle the book view via the books list page.

Closes BookStackApp#613

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds test cases and fixes an issue with the permission checking.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Enabled session in 404 responses

Fixes #634

* Adds font-size to ol to ensure that they are uniform.

Fixes BookStackApp#643

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Standardised admin role check

* Updated book view change to PATCH + other amends

Moved toggle to right of header bar and added unique text and icon for
each view type.

Removed old profile setting to keep things clean.

* Enabled system-storage of drawings made via draw.io

* Fixed broken table/ol/ul page includes

Fixes BookStackApp#640

* Fixed failing book view test

Also ensured setting system localcache is cleared correctly

* Checks the target and the source book before performing the sort.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Changed the sort view to only show books to which we have an update permission.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds test case for sorting permissions.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Added view override support

Relates to BookStackApp#652

* Refactored the code to first check for the permissions before sorting the book.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds overflow:auto to popup content to allow it to scroll in lower res.

Fixes BookStackApp#650

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Added ability to secure images behind auth

Still in testing.
Adds STORAGE_TYPE=local_secure option for setting images to be behind
auth. Stores images alongside attachments in /storage/uploads/images.

* Refactored book sort using collections

* Added drawing update ability

* Added drawing icon and made drawio disablable

* Extracted draw.io functionality to own file

* Added drawio abilities to markdown editor

* Added Swedish translation

* Added Swedish locale to config

* Added drawing endpoint tests

Also refactored ImageTests away from BrowserKit
Also added image upload type validation.

* Fixed test failing from missing baseURL

Also updated image upload test to delete before upload to prevent failed
tests breaking subsequent tests.

* Actually fixed the BaseURL this time 🤦

* #630: Deleting user's profile pics on deleting of user account (BookStackApp#646)

* Issue-630: Fixed issue with deleting user profile pics when deleting a user.

* Issue #630: Deleting user's profile pics on deleting of user account

* Issue-630: Added test case for deleting user

* Updated user profile image delete to delete all uploads

Also moved test and made more comprehensive

* Adapted code insert area and language select for mobile

* Set /app PHP code to PSR-2 standard

Also adde draw.io to attribution list.

Closes BookStackApp#649

* Fixed validation issue on register post

Added test to cover and also cleaned up RegisterController comments.

Fixes #670

* Added command to add a new admin user

Closes BookStackApp#609

* Set markdown editor preview width to 100%

Fixes BookStackApp#658

* Add twitch socialite auth provider

* Update...

* add support for gitlab authentification

* add missing lock file

* Corrected the keys for okta auth

* Update services.php

* Update .env.example

* reduced icon size

* add missing icon, fix name conventions

* Update all.blade.php

* Made default books view configurable in .env

Under 'APP_VIEWS_BOOKS' key.
Closes BookStackApp#675

* Added simplified Chinese(zh-CN) language

* Added 'zh_CN' to app.locales

* Prevent image manager search from reloading page

Fixes BookStackApp#697

* Fixed code block wrapping on export

Now wraps instead of running off the page.

Fixed BookStackApp#676

* Updated grid view to use CSS grid and flexbox

Provides a cleaner height-matched design.
Closes BookStackApp#701

* Updated twitch SVG icon with vector SVG

* Fixed error when accessing non-authed attachment

Also updated attachment tests to use standard test-case.
Fixes BookStackApp#681

* Fixed text overflow in various views

Fixes BookStackApp#669

* Tweaked some comments

* Updated assets for release v0.20.0

* Made it possible to override icons via custom theme

* Started migration to SVG icons

* Finished migrated from icon-font to SVG

* Updated 'Spanish Argentina' translation.

* Added ability to configure email sender name

Added env variable MAIL_FROM_NAME to allow the email sender name to be
customised. Also added MAIL_FROM to .env.example

* Updated 'Spanish Argentina' translation.

* Add CACHE_PREFIX to the .env.example file

We had some problems with multiple BookStack instances using the same caching server. Perhaps it's a good idea to have this available in the `.env.example` file.

* fix markdown editor resizing with long strings

* typo in readme.md

* add missing polish translations for comments

* Update .env.example

* Attempted move to webpack again

* Reorganised dev-deps and updated moment

* Update Italian translation

* Fixes issue with the validation message not being translated.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Finished off intitial conversion to webpack

* Moved jQuery to use NPM and fixed some asset refs

* Added togglable script escaping to page content

Configurable via 'ALLOW_CONTENT_SCRIPTS' env variable.
Fixes BookStackApp#575

* Updated exports to use DejaVu font

Provides potentially better language font coverage.

* Markdown editor image paste sets cursor correctly

Now sets cursor to alt text rather than end of placeholder image.
Fixed BookStackApp#751

* Prevented markdown editor pushing out toolbar

* Fixed up notification styling a little

* Fixed large content previews and improved mobile styles

Listing content previews no longer pre-wrap and instead simply break
correctly.
Updated titles to ensure they break on mobile devices.
Reduced spacing and font sizes on mobile to better adjust content to
screen size.

Fixes BookStackApp#739

* Fixes a number of issues with the image uploader. Read below,

- Added a remove link to remove files that have an error.
- Error will appear below the progress bar.
- Hovering on dz-image or dz-details will display the error message. Otherwise error message was covering the remove link as well.
- Removed styling around the file size.
- Removed gradient effect in accordance with BookStack styling.
- Dropzone filenae will not overflow the container element. Also done for page attachments
- Added a 'uploaded' error message. this error was being thrown when the file size exceeded the server configured file size. (https://stackoverflow.com/a/42934387/903324)

Towards BookStackApp#741

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Update activities.php

* Update auth.php

* Update common.php

* Update components.php

* Update settings.php

* Fixes the icons not being aligned properly in attached items section for the page.

Also formatting.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Update entities.php

* Updated webpack SCSS extract to provide sourcemaps

* Cleaned some form styling

Removed uppercasing of labels to make a little friendlier.
Extracted out toggleswitch JS into own component.
Improved basic code input for html-head-input area.

* Use autodiscover for dev packages

Allows installation with `composer install --no-dev`
Fixed BookStackApp#742

* Updated outline button styles for svg icons

* Removing the selected image and clearing the dropdzone on dialog close.

Towards BookStackApp#741

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Not resizing gif images.

See - Intervention/image#176

Fixes BookStackApp#223

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Fixes an issue with handling of large image files.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* update japanese translation

* fix entities.php

* Fixed failing tests

Fixed syntax error in french translations.
Removed 'required' on image validation which was breaking tests

* Made search more efficient and tweaked weighting

Added per-entity weighting changes.
Now Books score higher than chapters which score higher than pages.

Reduced queries required on search by only searching once but at a
higher count to see if there's another page.

* Fixed incorrect search logic in last commit

Incorrect cross-entity pagination could lead to hidden entities.

* Properly escaped search results

Prevents vue-like syntax in results causing errors.
Related to BookStackApp#748

* Updated create routes to prevent slug clashes

Fixes BookStackApp#758

* Removed invalid bracket from view

* Ensured uploaded system images remain public

Also added tests to cover local_secure image storage.

Fixes BookStackApp#725

* Updated icons with height

Fixes issues within IE

* Updated assets for release v0.20.1

* Fixed export style paths

* Updated the version because i'm such a plonker

And forgot to do this last release.
I wonder if there's a simple commit hook that could prevent the same two
versions twice in a row?
lassebenni added a commit to lassebenni/BookStack that referenced this issue Apr 13, 2018
* Started draw.io integration

* Updated pull-request info to be clearer

Also updated dev version

* Adds code to allow deletion of users via cmd line.

Fixes BookStackApp#579

Command:

php artisan bookstack:delete-users

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds button to allow users to toggle the book view via the books list page.

Closes BookStackApp#613

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds test cases and fixes an issue with the permission checking.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Enabled session in 404 responses

Fixes #634

* Adds font-size to ol to ensure that they are uniform.

Fixes BookStackApp#643

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Standardised admin role check

* Updated book view change to PATCH + other amends

Moved toggle to right of header bar and added unique text and icon for
each view type.

Removed old profile setting to keep things clean.

* Enabled system-storage of drawings made via draw.io

* Fixed broken table/ol/ul page includes

Fixes BookStackApp#640

* Fixed failing book view test

Also ensured setting system localcache is cleared correctly

* Checks the target and the source book before performing the sort.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Changed the sort view to only show books to which we have an update permission.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds test case for sorting permissions.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Added view override support

Relates to BookStackApp#652

* Refactored the code to first check for the permissions before sorting the book.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Adds overflow:auto to popup content to allow it to scroll in lower res.

Fixes BookStackApp#650

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Added ability to secure images behind auth

Still in testing.
Adds STORAGE_TYPE=local_secure option for setting images to be behind
auth. Stores images alongside attachments in /storage/uploads/images.

* Refactored book sort using collections

* Added drawing update ability

* Added drawing icon and made drawio disablable

* Extracted draw.io functionality to own file

* Added drawio abilities to markdown editor

* Added Swedish translation

* Added Swedish locale to config

* Added drawing endpoint tests

Also refactored ImageTests away from BrowserKit
Also added image upload type validation.

* Fixed test failing from missing baseURL

Also updated image upload test to delete before upload to prevent failed
tests breaking subsequent tests.

* Actually fixed the BaseURL this time 🤦

* #630: Deleting user's profile pics on deleting of user account (BookStackApp#646)

* Issue-630: Fixed issue with deleting user profile pics when deleting a user.

* Issue #630: Deleting user's profile pics on deleting of user account

* Issue-630: Added test case for deleting user

* Updated user profile image delete to delete all uploads

Also moved test and made more comprehensive

* Adapted code insert area and language select for mobile

* Set /app PHP code to PSR-2 standard

Also adde draw.io to attribution list.

Closes BookStackApp#649

* Fixed validation issue on register post

Added test to cover and also cleaned up RegisterController comments.

Fixes #670

* Added command to add a new admin user

Closes BookStackApp#609

* Set markdown editor preview width to 100%

Fixes BookStackApp#658

* Add twitch socialite auth provider

* Update...

* add support for gitlab authentification

* add missing lock file

* Corrected the keys for okta auth

* Update services.php

* Update .env.example

* reduced icon size

* add missing icon, fix name conventions

* Update all.blade.php

* Made default books view configurable in .env

Under 'APP_VIEWS_BOOKS' key.
Closes BookStackApp#675

* Added simplified Chinese(zh-CN) language

* Added 'zh_CN' to app.locales

* Prevent image manager search from reloading page

Fixes BookStackApp#697

* Fixed code block wrapping on export

Now wraps instead of running off the page.

Fixed BookStackApp#676

* Updated grid view to use CSS grid and flexbox

Provides a cleaner height-matched design.
Closes BookStackApp#701

* Updated twitch SVG icon with vector SVG

* Fixed error when accessing non-authed attachment

Also updated attachment tests to use standard test-case.
Fixes BookStackApp#681

* Fixed text overflow in various views

Fixes BookStackApp#669

* Tweaked some comments

* Updated assets for release v0.20.0

* Made it possible to override icons via custom theme

* Started migration to SVG icons

* Finished migrated from icon-font to SVG

* Updated 'Spanish Argentina' translation.

* Added ability to configure email sender name

Added env variable MAIL_FROM_NAME to allow the email sender name to be
customised. Also added MAIL_FROM to .env.example

* Updated 'Spanish Argentina' translation.

* Add CACHE_PREFIX to the .env.example file

We had some problems with multiple BookStack instances using the same caching server. Perhaps it's a good idea to have this available in the `.env.example` file.

* fix markdown editor resizing with long strings

* typo in readme.md

* add missing polish translations for comments

* Update .env.example

* Attempted move to webpack again

* Reorganised dev-deps and updated moment

* Update Italian translation

* Fixes issue with the validation message not being translated.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Finished off intitial conversion to webpack

* Moved jQuery to use NPM and fixed some asset refs

* Added togglable script escaping to page content

Configurable via 'ALLOW_CONTENT_SCRIPTS' env variable.
Fixes BookStackApp#575

* Updated exports to use DejaVu font

Provides potentially better language font coverage.

* Markdown editor image paste sets cursor correctly

Now sets cursor to alt text rather than end of placeholder image.
Fixed BookStackApp#751

* Prevented markdown editor pushing out toolbar

* Fixed up notification styling a little

* Fixed large content previews and improved mobile styles

Listing content previews no longer pre-wrap and instead simply break
correctly.
Updated titles to ensure they break on mobile devices.
Reduced spacing and font sizes on mobile to better adjust content to
screen size.

Fixes BookStackApp#739

* Fixes a number of issues with the image uploader. Read below,

- Added a remove link to remove files that have an error.
- Error will appear below the progress bar.
- Hovering on dz-image or dz-details will display the error message. Otherwise error message was covering the remove link as well.
- Removed styling around the file size.
- Removed gradient effect in accordance with BookStack styling.
- Dropzone filenae will not overflow the container element. Also done for page attachments
- Added a 'uploaded' error message. this error was being thrown when the file size exceeded the server configured file size. (https://stackoverflow.com/a/42934387/903324)

Towards BookStackApp#741

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Update activities.php

* Update auth.php

* Update common.php

* Update components.php

* Update settings.php

* Fixes the icons not being aligned properly in attached items section for the page.

Also formatting.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Update entities.php

* Updated webpack SCSS extract to provide sourcemaps

* Cleaned some form styling

Removed uppercasing of labels to make a little friendlier.
Extracted out toggleswitch JS into own component.
Improved basic code input for html-head-input area.

* Use autodiscover for dev packages

Allows installation with `composer install --no-dev`
Fixed BookStackApp#742

* Updated outline button styles for svg icons

* Removing the selected image and clearing the dropdzone on dialog close.

Towards BookStackApp#741

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Not resizing gif images.

See - Intervention/image#176

Fixes BookStackApp#223

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Fixes an issue with handling of large image files.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* update japanese translation

* fix entities.php

* Fixed failing tests

Fixed syntax error in french translations.
Removed 'required' on image validation which was breaking tests

* Made search more efficient and tweaked weighting

Added per-entity weighting changes.
Now Books score higher than chapters which score higher than pages.

Reduced queries required on search by only searching once but at a
higher count to see if there's another page.

* Fixed incorrect search logic in last commit

Incorrect cross-entity pagination could lead to hidden entities.

* Properly escaped search results

Prevents vue-like syntax in results causing errors.
Related to BookStackApp#748

* Updated create routes to prevent slug clashes

Fixes BookStackApp#758

* Removed invalid bracket from view

* Ensured uploaded system images remain public

Also added tests to cover local_secure image storage.

Fixes BookStackApp#725

* Updated icons with height

Fixes issues within IE

* Updated assets for release v0.20.1

* Fixed export style paths

* Updated the version because i'm such a plonker

And forgot to do this last release.
I wonder if there's a simple commit hook that could prevent the same two
versions twice in a row?
@MiguelAngelLV
Copy link

There are documentation and examples about create custom themes?

@ssddanbrown
Copy link
Member Author

Hi @MiguelAngelLV, There is nothing yet since I'd deem the views, Which the themes would be based on, as unstable.

The feature is in the latest release though and my original description on this issue explains how the system works although I'd advise only small, selective theme overrides should be done for now to minimise breakage upon update.

@lindsayschm
Copy link

Is any of this going to end up 0.26? Or is there at least a possibility of getting a dark theme for 0.26, even if customized beyond that isn't necessarily an option?

@ssddanbrown
Copy link
Member Author

@lindsayschm This functionality is already in v0.26, it's just not stable since views may still actively change therefore I'm keeping this issue open. There will not be a dark theme in v0.26. The request for a dark theme is already open under #1234. Not really looking to officially support a dark theme for a while due to the extra effort it would require for every UI change.

Pretty sure I've seen some repos offering dark styles for BookStack although it'll likely be a small while before these are updated for the changes in v0.26.

@ssddanbrown
Copy link
Member Author

As of the last release, docs were updated with details of using this system for customisation:
https://www.bookstackapp.com/docs/admin/hacking-bookstack/#theme-system

@maggie44
Copy link

Are all of the settings from the customisation section of the app settings controllable from here if I was to export the folders from a version I have customised? Namely I am trying to set the application name, logo and colour.

@ssddanbrown
Copy link
Member Author

@Maggie0002 Not directly, there are hacks accessible from the theme files but I'm not sure I'd recommend them. You can always override where those elements are used and, for the colors, these are just used as css variables so you could override those via css if needed to be done via the theme system.

@dorianim
Copy link

Hi @ssddanbrown

Do you plan to "officially" support this / to make the themenig system stable?

@ssddanbrown
Copy link
Member Author

Hi @dorianim,
The core theme systems are relatively stable at this point, with documentation found here:

The logical system is newer so may incur more changes. But, for the core systems in use here, I would be intending to note potential breakages in any release notes.

What isn't stable is the elements that may be overridden using these systems. So icons, translations and view files (Or any application/framework classes or functions used in the logical system). These can change upon any release. They probably are not things I'd ever look to deem as "stable" due to the impact that'd have on development. That said, I don't really change translation files unless needed and I've recently done a pass on view files to make the structure a little more standard, so we have less volatility there.

@dsoftware43
Copy link

dsoftware43 commented Apr 11, 2022

Olá @ssddanbrown,
Já existe documentação e exemplos sobre como criar temas personalizados?

@ssddanbrown
Copy link
Member Author

Hi @dsoftware43,
The documentation is listed in my previous comment above.

@ssddanbrown
Copy link
Member Author

Since the visual theme system has become relatively mature I'm going to go ahead and close this off as I'm not sure of what further to do apart from further clean & break down view files as we are developing the platform.

@ssddanbrown ssddanbrown unpinned this issue Sep 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

9 participants