Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 54 additions & 4 deletions hlx_statics/blocks/codeblock/codeblock.css
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ main div.codeblock-wrapper div.codeblock .inline-code {

main div.codeblock-wrapper div.codeblock .control-bar {
display: flex;
align-items: center;
justify-content: space-between;
}

Expand All @@ -37,6 +38,7 @@ main div.codeblock-wrapper div.codeblock .control-bar {
main div.codeblock-wrapper div.codeblock .control-bar,
main div.codeblock-wrapper div.codeblock .control-bar .tabs-list {
display: flex;
align-items: center;
gap: 16px;
max-width: 100%;
overflow-x: auto;
Expand All @@ -59,6 +61,9 @@ main div.codeblock-wrapper div.codeblock .control-bar select {
white-space: unset;
cursor: pointer;
background-color: initial;
}

main div.codeblock-wrapper div.codeblock .control-bar .tabs-list button {
border-bottom: 3px solid transparent;
}

Expand All @@ -84,18 +89,30 @@ main div.codeblock-wrapper div.codeblock .control-bar select::picker(select) {

main div.codeblock-wrapper div.codeblock .control-bar select {
border: none;
display: flex;
align-items: center;
}

main div.codeblock-wrapper div.codeblock .control-bar select > button {
all: unset;
display: flex;
align-items: center;
gap: 4px;
cursor: pointer;
color: rgb(209, 209, 209);
}

main div.codeblock-wrapper div.codeblock .control-bar select selectedcontent {
margin: auto;
display: flex;
align-items: center;
}

main div.codeblock-wrapper div.codeblock .control-bar select::picker-icon {
content: "⌄";
margin: auto;
padding-bottom: 6px;
display: flex;
align-items: center;
font-weight: bold;
transform: scaleX(1.5);
transform: scaleX(1.5) translateY(-1px);
}

main div.codeblock-wrapper div.codeblock .control-bar select::picker(select) {
Expand Down Expand Up @@ -123,6 +140,39 @@ main div.codeblock-wrapper div.codeblock .hidden {
display: none;
}

main div.codeblock-wrapper div.codeblock .right-controls {
display: flex;
align-items: center;
gap: 4px;
margin-left: auto;
margin-right: 4px;
flex-shrink: 0;
}

main div.codeblock-wrapper div.codeblock .collapse-toggle {
flex: 0 0 auto;
margin-left: 8px;
padding-top: 2px;
font-size: 14px;
background: none;
border: none;
cursor: pointer;
color: rgb(209, 209, 209);
display: flex;
align-items: center;
border-radius: 4px;
transition: color 0.15s, background-color 0.15s;
}

main div.codeblock-wrapper div.codeblock .collapse-toggle:hover {
color: rgb(255, 255, 255);
background-color: rgba(255, 255, 255, 0.1);
}

main div.codeblock-wrapper div.codeblock.collapsed .tabs-panel {
display: none;
}

main div.codeblock-wrapper div.codeblock pre[class*=language-].no-line-numbers .line-highlight {
transform: translateY(-1.6em);
}
20 changes: 19 additions & 1 deletion hlx_statics/blocks/codeblock/codeblock.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,15 @@ export default function decorate(block) {
}
});

const rightControls = document.createElement('div');
rightControls.className = 'right-controls';
controlBar.append(rightControls);

const select = document.createElement('select');
select.id = selectId;
select.classList.toggle('hidden', !areTabsGrouped);
select.addEventListener('change', handleSelectChange);
controlBar.append(select);
rightControls.append(select);

// set up customizable select (as opposed to classic which can't be styled) as described in https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Customizable_select
const selectButton = document.createElement('button');
Expand All @@ -113,6 +117,20 @@ export default function decorate(block) {
decoratePreformattedCode(panel);
});

const collapseToggle = document.createElement('button');
collapseToggle.className = 'collapse-toggle';
collapseToggle.setAttribute('type', 'button');
collapseToggle.setAttribute('aria-label', 'Collapse code');
collapseToggle.setAttribute('aria-expanded', 'true');
collapseToggle.textContent = 'Hide';
collapseToggle.addEventListener('click', () => {
const isCollapsed = block.classList.toggle('collapsed');
collapseToggle.setAttribute('aria-expanded', String(!isCollapsed));
collapseToggle.setAttribute('aria-label', isCollapsed ? 'Expand code' : 'Collapse code');
collapseToggle.textContent = isCollapsed ? 'Show' : 'Hide';
});
rightControls.append(collapseToggle);

// initialize by simulating a click on the first tab
const firstTab = block.querySelector('[role=tab]');
if (firstTab) {
Expand Down
Loading