-
Notifications
You must be signed in to change notification settings - Fork 15
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
Implement path for in-app guides #763
Conversation
6de6c08
to
d42aa7f
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #763 +/- ##
==========================================
+ Coverage 68.26% 68.55% +0.29%
==========================================
Files 110 111 +1
Lines 6211 6307 +96
==========================================
+ Hits 4240 4324 +84
- Misses 1971 1983 +12
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
d42aa7f
to
204914e
Compare
204914e
to
3c1c5e3
Compare
8d5dd19
to
722184f
Compare
3c3d3bf
to
e2281fd
Compare
503faae
to
4d177a5
Compare
Hi @edan-bainglass , is this PR ready for review? I like the design, and I am looking forward to having it in the APP. |
@superstar54 it is :) The failed tests are due to a chain of yet-to-be-merged PRs all the way back to aiidalab/aiidalab-widgets-base#624, which @danielhollas is reviewing. |
When reviewing this PR, do I need to switch aiidalab/aiidalab-widgets-base#624?. |
If you're testing locally, then yes. |
77926ab
to
8d5e19f
Compare
8d5e19f
to
648a084
Compare
b8f7451
to
bb57f5c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice in-app guide! The style is also pretty. I added a few suggestions in the comments.
Could you also add a guide for step 4.
src/aiidalab_qe/guides/basic.html
Outdated
<div class="alert alert-success"> | ||
<h4>Tasks</h4> | ||
<ol> | ||
<li>Select resources</li> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<li>Select resources</li> | |
<li>Select resources in the Global resources tab</li> |
src/aiidalab_qe/guides/basic.html
Outdated
<div class="alert alert-success"> | ||
<h4>Tasks</h4> | ||
<ol> | ||
<li>Select <b>Full geometry</b> relaxation</li> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since "Full geometry" is the default, consider select "Atomic positions"
src/aiidalab_qe/guides/basic.html
Outdated
<div id="pdos-settings"> | ||
Here we configure the settings for computing the projected density of states, | ||
or PDOS. | ||
<div class="alert alert-success">???</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similar to the advacned settings,
<div class="alert alert-success">???</div> | |
<div class="alert alert-success">In this walkthrough, we will not modify the pdos settings and proceed with the defaults.</div> |
<div class="alert alert-success"> | ||
<h4>Tasks</h4> | ||
<ol> | ||
<li>Select resources</li> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe also add a description of the calculation before submitting.
Thanks @superstar54. Note that I will make no comments regarding the actual content of the guides, as the current content is only a draft to give @giovannipizzi and @cpignedoli a sense of how it works. I will work with them in an immediately following PR to iron out the actual content, at which point, we will also cover step 4 🙂 Since all your comments above ARE regarding content, I take it you approve of the mechanism itself. Per our discussion, I will update the PR to handle uniqueness as suggested in the PR description. |
LMK when you're done with that and I can have a final look (but feel free to merge anytime / don't feel block by me) |
bb33567
to
bfa4b02
Compare
@danielhollas ready to review. I implemented guide uniqueness in the last commit. Also in that commit is a mechanism for ensuring intended guide order by inspecting the HTML file name, which is now required to include a |
@superstar54 I added placeholders in step 4 and after the wizard. Again, the text is not important, nor is the placement of the guide widgets. We will update these with one final PR once @cpignedoli and @giovannipizzi agree on the text. No changes in this last commit regarding the mechanism, so if you already agree with it, let me know and we merge 🙏 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The structure looks good to me! Please ask others for the texts.
Good. I'm not sure while the docker image is failing though. Can you have a look? 🙏🙏🙏 |
@danielhollas this and several other PRs are failing at building the docker image. Could you please have a look? 🙏 |
@edan-bainglass appologies, I will not have time, I am leaving for holidays tomorrow and will be mostly off-line this and next week. |
Okay. No worries. Enjoy the holidays 🙂 |
e8f8764
to
811e537
Compare
811e537
to
1b81769
Compare
4e612a6
to
dfa9884
Compare
Based on #967
This PR adds a mechanism for adding in-app guides meant as example use-cases for users. The mechanism leverages a global instance of the
GuideManager
, which tracks the current selected guide in anactive_guide
traitlet, which is observed by allInAppGuide
instances. Instances are placed throughout the app with unique identifiers. Additional placeholders may be added by plugin developers within their defined panels.Usage
In-app guide widgets can be added anywhere as follows:
This defines the guide explicitly, providing hard-coded content, which is useful for generic guide sections that are useful for any guide. Children can be any widget supported by
ipywidgets
. This allows developers to customize the content of the guide as they wish. Theguide_id
refers to the associated guide and is used to toggle the guide section on/off.However, for specific guide content, a more flexible approach is
Here, the guide is defined from content fetched by an HTML
id
attribute from the currently loaded guide (HTML document) in the guide manager corresponding to the active (selected) guide. The HTML document is parsed using beautiful soup.In either case, CSS
classes
can be provided to theInAppGuide
constructor to override the behavior of theinfo-box
andin-app-guide
CSS classes.This allows developers to control top-level styles for the guide. Styles internal to the guide are more easily controlled directly in the guide HTML documents.
External guides
The app defines internal guides in
src/aiidalab_qe/guides
. External guides may be added by plugin developers using the same entry point system already used in plugins. Developers simply add aguides
key to their plugin definition with a value pointing at the path of theirguides
directory. The guide manager will pick these up on app start and add them to the list of available guides.Comments regarding external guides
Entry point
We may consider enforcing a structure here, specifying that external guides must be provided at the root level of the plugin.
guides
keyupdate
Current decision (discussed with @superstar54) is to require the
guides
key in the entry point.Uniqueness
In the current implementation, there is a risk an external guide developer names a guide identically to an existing internal/external guide. To avoid this, the plugin identifier can be used as a prefix when storing guides in the manager. In the app, we could consider displaying guides by category. There are various means of achieving this cleanly. Open to discussion.
update
Current approach is to indeed use the plugin identifier as a prefix. This results in the following: