Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

@jamos-tay@acjh@yamgent
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

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

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

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

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

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

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

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

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

@jamos-tay@acjh@yamgent
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

@jamos-tay@acjh@yamgent
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add page layouts functionality - #439

Merged
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates
Oct 21, 2018
Merged

Add page layouts functionality#439
yamgent merged 4 commits into
MarkBind:masterfrom
jamos-tay:add-templates

Conversation

@jamos-tay

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request? (put "X" next to an item, remove the rest)

• [X] New feature

Fixes#389

What is the rationale for this request?

Users may want to add the same footer/head to a group of files at once without having to specify it in each file's frontMatter individually.

What changes did you make? (Give an overview)

Follow up from this solution: #389 (comment)

This PR adds support for MarkBind themes (changed from 'templates' because that name was used by nunjucks).

A theme consists of 5 files, navigation.md, head.md, footer.md, styles.css, scripts.js. Themes are stored in the _markbind/themes folder, laid out like this:

// This one is created on markbind init with all blank files - basically no change
_markbind/themes/default/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeA/
navigation.md, head.md, footer.md, styles.css, scripts.js

_markbind/themes/themeB/
navigation.md, head.md, footer.md, styles.css, scripts.js

Users can apply themes to a set of pages either through the site.json or the frontMatter:

// Theme A will be applied to all index.md files{"glob": "**/index.md","theme": "ThemeA"},// Theme B will be applied to index2.md{"src": "index2.md","theme": "ThemeB"},// No Theme - default theme will be applied{"src": "index3.md"},
<frontmatter>
theme: themeA <!-- Takes precedence over site.json -->
head: head.md <!-- Takes precedence over themeA's head.md -->
</frontmatter>

All files in the folder will be applied.

Is there anything you'd like reviewers to focus on?

The following use cases aren't supported:

  • Using default theme for certain files only: Overriding default theme overwrites all 5 files, so you can't have say default/head.md and myTheme/footer.md at the same time.
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

@acjh

acjh commented Sep 24, 2018

Copy link
Copy Markdown
Contributor

Themes are better reserved for styling, e.g. #386.

How about "layout"?

@jamos-tay

jamos-tay commented Sep 25, 2018

Copy link
Copy Markdown
ContributorAuthor

Sure, layout is fine

@jamos-tayjamos-tay changed the title Add page themes functionalityAdd page layouts functionalitySep 25, 2018
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threaddocs/userGuide/contentAuthoring.md Outdated
Comment threadlib/Page.js
Comment threadlib/Page.js Outdated
@yamgent

Copy link
Copy Markdown
Member

Also right now the tests only includes overriding the layout in site.json. We can write additional tests to the test site for overriding the individual component of the layout in the <frontmatter> as well, e.g.:

<frontmatter>
layout: layoutA
head: head.md
</frontmatter>

@yamgent

Copy link
Copy Markdown
Member
  • Additive applying of scripts and css: Should a theme's js and css overwrite the default, or should it apply both?

This might result in several levels of css and js. It can go quite deep, making it hard for the user to control what should be included and what shouldn't be included.

The design can get quite complicated, but I think it is a feature certainty worth exploring in the future.

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated with fixes (+ additional test)

Sure, we can worry about that later

@jamos-tay

Copy link
Copy Markdown
ContributorAuthor

Updated to resolve merge conflict

<link rel="stylesheet" href="..\markbind\css\bootstrap-glyphicons.min.css" >
<link rel="stylesheet" href="..\markbind\css\github.min.css">
<link rel="stylesheet" href="..\markbind\css\markbind.css">
<link rel="stylesheet" href="_markbind\layouts\default\styles.css">

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.

I think it would be better to put these inside the markbind folder (no underscroll at the front) rather than inside the _markbind folder, because the _markbind folder has a connotation that it contains working files, rather than files for actual deployment.

Same thing for the JavaScript files.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure, moved it to the assets folder.

Also added path to ignore so they don't get copied to the _markbind folder

Comment threaddocs/userGuide/contentAuthoring.md Outdated
- `styles.css` : Contains custom styles
- `scripts.js` : Contains custom javascript

These files will be automatically appended to a page upon generation, allowing you to quickly apply styles to a batch of pages at once.

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.

Seems to be repeating the same thing as The default layout is automatically applied to every single page. below?

Or do you mean it is generated when doing a markbind init?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I meant to advertise the use case, like the purpose of templates is to quickly apply stuff to a batch of files.

I moved the sentence up so it's a little clearer.

Comment threadlib/Page.js
Comment threadtest/test_site/expected/bugs/index.html Outdated
@jamos-tay

jamos-tay commented Oct 10, 2018

Copy link
Copy Markdown
ContributorAuthor

Necessary changes made!

@yamgentyamgent added this to the v1.13.1 milestone Oct 20, 2018
@yamgent
yamgent merged commit 63a07c7 into MarkBind:masterOct 21, 2018
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.

site.json: Add configuration options to specify head, footer, site-nav for specific pages

3 participants

@jamos-tay@acjh@yamgent