basic code switcher implementation. Needs love but worx

This commit is contained in:
Benedikt Rötsch
2017-10-05 14:59:39 +02:00
committed by Benedikt Rötsch
parent 3874abd8c6
commit 846ac77918
6 changed files with 189 additions and 28 deletions

View File

@@ -20,3 +20,47 @@
margin-bottom: 0; margin-bottom: 0;
} }
} }
@block lesson-module-code {
@element header {}
@element code-area {
background: var(--code-bg);
}
@element trigger {
display: inline-block;
padding: 0 1em;
margin-right: 1em;
background: var(--code-trigger-bg);
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
font-family: var(--font-medium);
font-size: 0.7em;
color: var(--code-trigger-color);
&:last-child {
margin-right: 0;
}
@modifier active {
background: var(--code-trigger-bg-active);
color: var(--code-trigger-color-active);
}
}
@element code {
display: none;
@modifier active {
display: block;
}
& pre {
margin: 0;
}
}
}

View File

@@ -57,4 +57,10 @@
--cta-bg: var(--color-palette-blue); --cta-bg: var(--color-palette-blue);
--cta-bg-hover: var(--color-palette-blue-medium); --cta-bg-hover: var(--color-palette-blue-medium);
--cta-radius: 3px; --cta-radius: 3px;
--code-bg: var(--color-bg-grey);
--code-trigger-bg: color(var(--color-bg-grey) shade(20%));
--code-trigger-bg-active: var(--code-bg);
--code-trigger-color: #fff;
--code-trigger-color-active: var(--color-text-dark-bg-grey);
} }

36
public/scripts/index.js Normal file
View File

@@ -0,0 +1,36 @@
document.addEventListener('DOMContentLoaded', () => {
// init highlight.js
hljs.initHighlightingOnLoad()
// Lesson code switcher logic
const modules = Array.from(document.getElementsByClassName('lesson-module-code'))
modules.forEach((module) => {
const triggers = Array.from(module.getElementsByClassName('lesson-module-code__trigger'))
const codes = Array.from(module.getElementsByClassName('lesson-module-code__code'))
const handleTriggerClick = (e) => {
const target = e.target.getAttribute('data-target')
// Mark correct trigger as active
triggers.forEach((trigger) => {
trigger.classList.remove('lesson-module-code__trigger--active')
})
e.target.classList.add('lesson-module-code__trigger--active')
// Show correct code fields
codes.forEach((code) => {
code.classList.remove('lesson-module-code__code--active')
if (code.id === target) {
code.classList.add('lesson-module-code__code--active')
}
})
}
// Attach click handler to triggers
triggers.forEach((trigger) => {
trigger.onclick = handleTriggerClick
})
})
})

View File

@@ -2003,3 +2003,48 @@ github.com style (c) Vasily Polovnyov <vast@whiteants.net>
.lesson__cta { .lesson__cta {
margin-bottom: 0; margin-bottom: 0;
} }
.lesson-module-code {}
.lesson-module-code__header {}
.lesson-module-code__code-area {
background: #f7f9fa;
}
.lesson-module-code__trigger {
display: inline-block;
padding: 0 1em;
margin-right: 1em;
background: rgb(198, 199, 200);
border-top-left-radius: 4px;
border-top-right-radius: 4px;
font-family: 'robotomedium', Helvetica, sans-serif;
font-size: 0.7em;
color: #fff;
}
.lesson-module-code__trigger:last-child {
margin-right: 0;
}
.lesson-module-code__trigger--active {
background: #f7f9fa;
color: #a9b9c0;
}
.lesson-module-code__code {
display: none;
}
.lesson-module-code__code pre {
margin: 0;
}
.lesson-module-code__code--active {
display: block;
}

View File

@@ -86,4 +86,4 @@ html
a(href='https://twitter.com/contentful' target='_blank' rel='noopener') a(href='https://twitter.com/contentful' target='_blank' rel='noopener')
img(src='/images/icon-twitter.svg' alt='Our Twitter profile') img(src='/images/icon-twitter.svg' alt='Our Twitter profile')
script(src='/scripts/highlight.pack.js') script(src='/scripts/highlight.pack.js')
script hljs.initHighlightingOnLoad(); script(src='/scripts/index.js')

View File

@@ -1,30 +1,60 @@
mixin lessonModuleCodeSnippet(module) mixin lessonModuleCodeSnippet(module)
.lesson-module.lesson-module-code .lesson-module.lesson-module-code
.lesson-module-code__header
if module.fields.curl if module.fields.curl
pre.lesson-module-code__curl a.lesson-module-code__trigger(data-target=`${module.sys.id}-curl`) curl
if module.fields.dot-net
a.lesson-module-code__trigger(data-target=`${module.sys.id}-dotnet`) .NET
if module.fields.javascript
a.lesson-module-code__trigger.lesson-module-code__trigger--active(data-target=`${module.sys.id}-javascript`) Javascript
if module.fields.java
a.lesson-module-code__trigger(data-target=`${module.sys.id}-java`) Java
if module.fields.javaAndroid
a.lesson-module-code__trigger(data-target=`${module.sys.id}-android`) Android
if module.fields.php
a.lesson-module-code__trigger(data-target=`${module.sys.id}-php`) PHP
if module.fields.python
a.lesson-module-code__trigger(data-target=`${module.sys.id}-python`) Python
if module.fields.ruby
a.lesson-module-code__trigger(data-target=`${module.sys.id}-ruby`) Ruby
if module.fields.swift
a.lesson-module-code__trigger(data-target=`${module.sys.id}-swift`) Swift
.lesson-module-code__code-area
if module.fields.curl
.lesson-module-code__code(id=`${module.sys.id}-curl`)
pre
code.shell= module.fields.curl code.shell= module.fields.curl
if module.fields.dot-net if module.fields.dot-net
pre.lesson-module-code__dotnet .lesson-module-code__code(id=`${module.sys.id}-dotnet`)
pre
code.csharp= module.fields.dot-net code.csharp= module.fields.dot-net
if module.fields.javascript if module.fields.javascript
pre.lesson-module-code__javascript .lesson-module-code__code.lesson-module-code__code--active(id=`${module.sys.id}-javascript`)
pre
code.javascript= module.fields.javascript code.javascript= module.fields.javascript
if module.fields.java if module.fields.java
pre.lesson-module-code__java .lesson-module-code__code(id=`${module.sys.id}-java`)
pre
code.java= module.fields.java code.java= module.fields.java
if module.fields.javaAndroid if module.fields.javaAndroid
pre.lesson-module-code__java-android .lesson-module-code__code(id=`${module.sys.id}-android`)
pre
code.java= module.fields.javaAndroid code.java= module.fields.javaAndroid
if module.fields.php if module.fields.php
pre.lesson-module-code__php .lesson-module-code__code(id=`${module.sys.id}-php`)
pre
code.php= module.fields.php code.php= module.fields.php
if module.fields.python if module.fields.python
pre.lesson-module-code__python .lesson-module-code__code(id=`${module.sys.id}-python`)
pre
code.python= module.fields.python code.python= module.fields.python
if module.fields.ruby if module.fields.ruby
pre.lesson-module-code__ruby .lesson-module-code__code(id=`${module.sys.id}-ruby`)
pre
code.ruby= module.fields.ruby code.ruby= module.fields.ruby
if module.fields.swift if module.fields.swift
pre.lesson-module-code__swift .lesson-module-code__code(id=`${module.sys.id}-swift`)
pre
code.swift= module.fields.swift code.swift= module.fields.swift