Skip to content

Commit 5310fce

Browse files
committed
chore: add render ordering to live preview widgets
1 parent a6994ba commit 5310fce

3 files changed

Lines changed: 66 additions & 15 deletions

File tree

src/LiveDevelopment/BrowserScripts/RemoteFunctions.js

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ function RemoteFunctions(config = {}) {
115115
handlerName}' missing required function: 'dismiss'`);
116116
return;
117117
}
118+
handler.handlerName = handlerName;
118119
_moreOptionsHandlers.set(handlerName, handler);
119120
}
120121
function getNodeMoreOptionsHandler(handlerName) {
@@ -2238,11 +2239,33 @@ function RemoteFunctions(config = {}) {
22382239
</span>`;
22392240
}
22402241

2241-
LivePreviewView.getAllNodeMoreOptionsHandlers().forEach(handler => {
2242-
const optionalContent = handler.renderMoreOptions(this.element);
2243-
if(optionalContent) {
2244-
content += optionalContent;
2245-
}
2242+
// Render handler options with ordering support
2243+
const handlerOptions = Array.from(LivePreviewView.getAllNodeMoreOptionsHandlers())
2244+
.map((handler, index) => {
2245+
if (!handler.renderMoreOptions) {
2246+
return null;
2247+
}
2248+
const result = handler.renderMoreOptions(this.element);
2249+
if (!result) {
2250+
return null;
2251+
}
2252+
return {
2253+
listOrder: result.listOrder !== undefined ? result.listOrder : Number.MAX_SAFE_INTEGER,
2254+
htmlContent: result.htmlContent || '',
2255+
handlerName: handler.name || `handler_${index}`
2256+
};
2257+
})
2258+
.filter(item => item && item.htmlContent)
2259+
.sort((a, b) => {
2260+
if (a.listOrder !== b.listOrder) {
2261+
return a.listOrder - b.listOrder;
2262+
}
2263+
// Same order - sort alphabetically by handler name
2264+
return a.handlerName.localeCompare(b.handlerName);
2265+
});
2266+
2267+
handlerOptions.forEach(item => {
2268+
content += item.htmlContent;
22462269
});
22472270

22482271
const selectedClass = imageGallerySelected ? 'class="selected"' : "";
@@ -2425,9 +2448,31 @@ function RemoteFunctions(config = {}) {
24252448

24262449
const shadow = this.body.attachShadow({ mode: "open" });
24272450

2428-
// Render handler dropdown items
2451+
// Render handler dropdown items with ordering support
24292452
const handlerItems = Array.from(getAllNodeMoreOptionsHandlers())
2430-
.map(handler => handler.renderDropdownItems ? handler.renderDropdownItems() : '')
2453+
.map((handler, index) => {
2454+
if (!handler.renderDropdownItems) {
2455+
return null;
2456+
}
2457+
const result = handler.renderDropdownItems();
2458+
if (!result) {
2459+
return null;
2460+
}
2461+
return {
2462+
listOrder: result.listOrder !== undefined ? result.listOrder : Number.MAX_SAFE_INTEGER,
2463+
htmlContent: result.htmlContent || '',
2464+
handlerName: handler.name || `handler_${index}`
2465+
};
2466+
})
2467+
.filter(item => item && item.htmlContent)
2468+
.sort((a, b) => {
2469+
if (a.listOrder !== b.listOrder) {
2470+
return a.listOrder - b.listOrder;
2471+
}
2472+
// Same order - sort alphabetically by handler name
2473+
return a.handlerName.localeCompare(b.handlerName);
2474+
})
2475+
.map(item => item.htmlContent)
24312476
.join('');
24322477

24332478
let content = `

src/extensionsIntegrated/phoenix-pro/browser-context/hyperlink-editor.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,12 @@ function _handleEditHyperlinkOptionClick(event, element) {
143143

144144
function renderHyperlinkOptions(element, shadow) {
145145
if (element && element.tagName.toLowerCase() === 'a') {
146-
return `<span data-action="HyperlinkEditor" title="${strings.editHyperlink}">
147-
${icons.link}
148-
</span>`;
146+
return {
147+
listOrder: 50,
148+
htmlContent: `<span data-action="HyperlinkEditor" title="${strings.editHyperlink}">
149+
${icons.link}
150+
</span>`
151+
};
149152
}
150153
return '';
151154
}

src/extensionsIntegrated/phoenix-pro/browser-context/ruler-lines.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,14 @@ function handleRulerLinesConfigChange(oldConfig, newConfig) {
251251

252252
// Dropdown handler: render ruler lines dropdown item
253253
function renderRulerLinesDropdownItems() {
254-
return `<div class="dropdown-item" data-action="toggle-ruler-lines">
255-
<span class="item-icon">${icons.ruler}</span>
256-
<span class="item-label show-ruler-label">${strings.showRulerLines}</span>
257-
<span class="item-checkmark" style="visibility: ${_rulerLinesConfig.enabled ? 'visible' : 'hidden'}">${icons.check}</span>
258-
</div>`;
254+
return {
255+
listOrder: 100,
256+
htmlContent: `<div class="dropdown-item" data-action="toggle-ruler-lines">
257+
<span class="item-icon">${icons.ruler}</span>
258+
<span class="item-label show-ruler-label">${strings.showRulerLines}</span>
259+
<span class="item-checkmark" style="visibility: ${_rulerLinesConfig.enabled ? 'visible' : 'hidden'}">${icons.check}</span>
260+
</div>`
261+
};
259262
}
260263

261264
// Dropdown handler: handle clicks on ruler lines dropdown item

0 commit comments

Comments
 (0)