-
Notifications
You must be signed in to change notification settings - Fork 21
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
Hide buttons generated by the TryExamples
directive by default
#173
base: main
Are you sure you want to change the base?
Changes from all commits
1b798e5
37fa0ca
09d48ab
2d46d7f
0e88cbf
d2811f9
0745252
a9c73ba
94ecef4
d015b5f
635a3af
33b9f4e
f3ca349
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -163,15 +163,48 @@ window.loadTryExamplesConfig = async (configFilePath) => { | |||||||||||||||||||||||||||||||||
const response = await fetch(configFileUrl); | ||||||||||||||||||||||||||||||||||
if (!response.ok) { | ||||||||||||||||||||||||||||||||||
if (response.status === 404) { | ||||||||||||||||||||||||||||||||||
// Try examples ignore file is not present. | ||||||||||||||||||||||||||||||||||
console.log("Optional try_examples config file not found."); | ||||||||||||||||||||||||||||||||||
// Try examples ignore file is not present. Enable all interactive examples | ||||||||||||||||||||||||||||||||||
// in that case. | ||||||||||||||||||||||||||||||||||
console.log( | ||||||||||||||||||||||||||||||||||
"Optional try_examples config file not found. Enabling all interactive examples.", | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
// Grab all hidden try examples buttons and fade them in | ||||||||||||||||||||||||||||||||||
const buttons = document.getElementsByClassName( | ||||||||||||||||||||||||||||||||||
"try_examples_button hidden", | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
Comment on lines
+173
to
+175
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's more common to write:
Suggested change
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
requestAnimationFrame(() => { | ||||||||||||||||||||||||||||||||||
for (let button of buttons) { | ||||||||||||||||||||||||||||||||||
button.style.opacity = "0"; | ||||||||||||||||||||||||||||||||||
button.classList.remove("hidden"); | ||||||||||||||||||||||||||||||||||
button.classList.add("fade-in"); | ||||||||||||||||||||||||||||||||||
requestAnimationFrame(() => { | ||||||||||||||||||||||||||||||||||
button.style.opacity = "1"; | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
Comment on lines
+177
to
+186
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's wrap this in a function: const showButtons = () => {
const buttons = document.querySelectorAll(
".try_examples_button.hidden",
);
for (let button of buttons) {
button.classList.remove("hidden");
}
// If the hidden and transparent classes are removed
// one right after the other, there is no animation of the opacity
// going from 0 to 1, hence requestAnimationFrame.
requestAnimationFrame(() => {
for (let button of buttons) {
button.classList.remove("transparent");
}
});
} |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
tryExamplesConfigLoaded = true; | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
return; | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
throw new Error(`Error fetching ${configFilePath}`); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
const data = await response.json(); | ||||||||||||||||||||||||||||||||||
if (!data) { | ||||||||||||||||||||||||||||||||||
// If config file exists but is empty, treat it like a missing config | ||||||||||||||||||||||||||||||||||
// and enable all interactive examples since there is no ignore pattern | ||||||||||||||||||||||||||||||||||
console.log( | ||||||||||||||||||||||||||||||||||
"Try examples config file is empty. Enabling all interactive examples.", | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
const buttons = document.getElementsByClassName( | ||||||||||||||||||||||||||||||||||
"try_examples_button hidden", | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
Comment on lines
+202
to
+204
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
for (let button of buttons) { | ||||||||||||||||||||||||||||||||||
button.classList.remove("hidden"); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
Comment on lines
+202
to
+207
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
return; | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
@@ -180,29 +213,51 @@ window.loadTryExamplesConfig = async (configFilePath) => { | |||||||||||||||||||||||||||||||||
tryExamplesGlobalMinHeight = parseInt(data.global_min_height); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
// Disable interactive examples if file matches one of the ignore patterns | ||||||||||||||||||||||||||||||||||
// by hiding try_examples_buttons. | ||||||||||||||||||||||||||||||||||
Patterns = data.ignore_patterns; | ||||||||||||||||||||||||||||||||||
// Selectively enable interactive examples if file matches one of the ignore patterns | ||||||||||||||||||||||||||||||||||
// by un-hiding try_examples_buttons with a smooth transition | ||||||||||||||||||||||||||||||||||
const Patterns = data.ignore_patterns || []; | ||||||||||||||||||||||||||||||||||
let shouldShowButtons = true; | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
Comment on lines
+219
to
+220
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
for (let pattern of Patterns) { | ||||||||||||||||||||||||||||||||||
let regex = new RegExp(pattern); | ||||||||||||||||||||||||||||||||||
if (regex.test(currentPageUrl)) { | ||||||||||||||||||||||||||||||||||
agriyakhetarpal marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||
var buttons = document.getElementsByClassName("try_examples_button"); | ||||||||||||||||||||||||||||||||||
for (var i = 0; i < buttons.length; i++) { | ||||||||||||||||||||||||||||||||||
buttons[i].classList.add("hidden"); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
shouldShowButtons = false; | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
if (shouldShowButtons) { | ||||||||||||||||||||||||||||||||||
const buttons = document.getElementsByClassName( | ||||||||||||||||||||||||||||||||||
"try_examples_button hidden", | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
requestAnimationFrame(() => { | ||||||||||||||||||||||||||||||||||
for (let button of buttons) { | ||||||||||||||||||||||||||||||||||
button.style.opacity = "0"; | ||||||||||||||||||||||||||||||||||
button.classList.remove("hidden"); | ||||||||||||||||||||||||||||||||||
button.classList.add("fade-in"); | ||||||||||||||||||||||||||||||||||
requestAnimationFrame(() => { | ||||||||||||||||||||||||||||||||||
button.style.opacity = "1"; | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
Comment on lines
+228
to
+243
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||
console.error(error); | ||||||||||||||||||||||||||||||||||
// On error, enable all buttons as a fallback to maintain current behavior | ||||||||||||||||||||||||||||||||||
console.error("Error loading try_examples config:", error); | ||||||||||||||||||||||||||||||||||
const buttons = document.getElementsByClassName( | ||||||||||||||||||||||||||||||||||
"try_examples_button hidden", | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
for (let button of buttons) { | ||||||||||||||||||||||||||||||||||
button.classList.remove("hidden"); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
Comment on lines
+247
to
+252
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
tryExamplesConfigLoaded = true; | ||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
window.toggleTryExamplesButtons = () => { | ||||||||||||||||||||||||||||||||||
/* Toggle visibility of TryExamples buttons. For use in console for debug | ||||||||||||||||||||||||||||||||||
* purposes. */ | ||||||||||||||||||||||||||||||||||
var buttons = document.getElementsByClassName("try_examples_button"); | ||||||||||||||||||||||||||||||||||
var buttons = document.getElementsByClassName("try_examples_button hidden"); | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a toggle function, so you need to be able to find toggle any button whether or not it is already hidden.
Suggested change
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
for (var i = 0; i < buttons.length; i++) { | ||||||||||||||||||||||||||||||||||
buttons[i].classList.toggle("hidden"); | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -553,15 +553,16 @@ def run(self): | |||||
) | ||||||
|
||||||
# Button with the onclick event to swap embedded notebook back to examples. | ||||||
# This includes a 'hidden' class by default to hide until the page is loaded. | ||||||
go_back_button_html = ( | ||||||
'<button class="try_examples_button" ' | ||||||
'<button class="try_examples_button hidden" ' | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. From what I can tell, these buttons are already within a
Suggested change
|
||||||
f"onclick=\"window.tryExamplesHideIframe('{examples_div_id}'," | ||||||
f"'{iframe_parent_div_id}')\">" | ||||||
"Go Back</button>" | ||||||
) | ||||||
|
||||||
full_screen_button_html = ( | ||||||
'<button class="try_examples_button" ' | ||||||
'<button class="try_examples_button hidden" ' | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
f"onclick=\"window.openInNewTab('{examples_div_id}'," | ||||||
f"'{iframe_parent_div_id}')\">" | ||||||
"Open In Tab</button>" | ||||||
|
@@ -570,7 +571,7 @@ def run(self): | |||||
# Button with the onclick event to swap examples with embedded notebook. | ||||||
try_it_button_html = ( | ||||||
'<div class="try_examples_button_container">' | ||||||
'<button class="try_examples_button" ' | ||||||
'<button class="try_examples_button hidden" ' | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
(see other suggestions above) |
||||||
f"onclick=\"window.tryExamplesShowIframe('{examples_div_id}'," | ||||||
f"'{iframe_div_id}','{iframe_parent_div_id}','{iframe_src}'," | ||||||
f"'{height}')\">" | ||||||
|
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.
I'm not entirely sure that it's worth creating the fade-in effect when there is also a content layout shift.
But if we still want to keep it, I suggest a few changes: