Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Navigation Blueprints by jasonvarga · Pull Request #3941 · statamic/cms · GitHub
Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Navigation Blueprints by jasonvarga · Pull Request #3941 · statamic/cms · GitHub
Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Navigation Blueprints by jasonvarga · Pull Request #3941 · statamic/cms · GitHub
Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Navigation Blueprints by jasonvarga · Pull Request #3941 · statamic/cms · GitHub
Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Navigation Blueprints by jasonvarga · Pull Request #3941 · statamic/cms · GitHub
Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Navigation Blueprints by jasonvarga · Pull Request #3941 · statamic/cms · GitHub
Skip to content

Navigation Blueprints - #3941

Merged
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints
Aug 10, 2021
Merged

Navigation Blueprints#3941
jasonvarga merged 73 commits into
masterfrom
feature/nav-blueprints

Conversation

@jasonvarga

@jasonvargajasonvarga commented Jul 1, 2021

Copy link
Copy Markdown
Member

This PR allows you to add blueprints to Navs.

Closesstatamic/ideas#175
Closesstatamic/ideas#318
Fixes#3758

Adding fields

Any fields in the blueprint will be shown in the existing stack pane.

Here I've added excerpt and icon fields.

The title and url fields will get automatically added. If you want to customize the display or instructions for either of them, you can just add them to your blueprint and it'll use what you provide.

image

Data for these additional fields will be stored in a data key on the tree branch.

# trees/navigation/links.yamltitle: Yahoourl: 'https://yahoo.com'data:
excerpt: Hereicon: here.jpg

Entries

Previously, when you had linked an entry, clicking the item in the tree would just jump straight to that entry's edit screen.

Now, you get the edit pane just like regular links. There's a link at the bottom of the pane to edit the actual entry.

If you add a field to the nav blueprint that also exists in that entry's blueprint, the field labels will get link icons. If you've used the multisite feature, it works the same way. You're essentially "localizing" those fields.

This video shows how it works.

  • title and excerpt are in both the nav and entry blueprints, so they get the link icons.
  • icon is only in the nav blueprint, so it doesn't.
  • The values from the entry is shown in the field, and the link is closed and in sync.
  • When you edit a field, the link breaks and the field is unsynced.
  • You can revert to the value from the entry by clicking the icon.
nav-field-sync.mp4

Changes

  • Nav tree branches will all get ids. They will be added automatically, though.
  • Collection tree branches will not get ids. The entry keys will be the "id".
  • [breaking] $page->id() will now return the id of the page, instead of the id of the entry.
  • [breaking] A page {{ id }} will now return the id of the page, instead of the id of the entry.
  • To get the ID of the entry of a page, you can do $page->reference() or $page->entry()->id(), or {{ entry_id }} in templates.
  • $tree->page($id) is deprecated. Instead, use $tree->find($id), where $id is the id of the page, not entry.
  • You can get a page by entry using $tree->findByEntry($entryId)
  • [breaking] $tree->root() returns the whole branch array instead of just the entry.

Todos

  • Ability to add a blueprint to a nav
    • Allow title and url fields to be manually added to a blueprint
  • Link to edit blueprint in ... dropdown on nav show view.
  • Link to edit blueprint when editing a nav (like when editing a form).
  • Ability to add data to a branch
  • Branch data merges over the top of the entry data
  • Add blueprint fields to the edit page pane
  • Add link to entry on edit page pane since now entries open in a pane
  • Hook up adding a URL link
  • Hook up adding an entry link
  • Validation when submitting a nav page
    • Merge the title and url fields if they already exist in the blueprint
  • Swap enter with cmd+s to save page editor pane
  • Add "dirty" ux when you close a page editor that has edits
  • Improve UX to show that page fields may override entry fields.
  • Make sure fields are augmented in templates
  • Support the custom nav fields in GraphQL
  • FixGraphQL: query will fail with "Link to URL" nav items when title is blank #3758 probably using GraphQL PageType: Renullabelify non-nullables #3968
  • Do the todos I've left throughout the code
  • Write docs
  • The things I didn't think about until it's about 95% done

jasonvargaand others added 14 commits August 6, 2021 16:14
This will prevent a chicken/egg situation in an upcoming commit where the EntryInterface will rely on PageInterface existing and vice versa.
- TreeBranch has been split into CollectionTreeBranch and NavTreeBranch types
- The CollectionTreeBranch's page field is now an EntryInterface, and has the entry itself resolved into it.
- Removed EntryPage_x types, in favor of NavEntryPage_x types to be used just in navs. Standard Entry_x types should be used in collections.
- Added a NavBasicPage_x type for navs.
- Both NavBasicPage and NavEntryPage implement a NavPage_x interface which can be used to query the nav's blueprint fields.
- Removed PageType
- PageInterface is now just used for navs and doesn't extend EntryInterface, so it no longer gets the entry's fields. It has a smaller set of fields.
[ci skip] [skip ci]
@jasonvarga
jasonvarga marked this pull request as ready for review August 10, 2021 20:21
@jackmcdade
jackmcdade self-requested a review August 10, 2021 20:22

@jackmcdadejackmcdade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jasonvarga
jasonvarga merged commit d9dc9d9 into masterAug 10, 2021
@jasonvarga
jasonvarga deleted the feature/nav-blueprints branch August 24, 2021 20:06
@jasonvargajasonvarga mentioned this pull request Feb 13, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jasonvarga@robdekort@jackmcdade